From 555d8f93b3d6376a1581b88546ee5016c248c2d7 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Wed, 30 Jul 2025 13:03:11 +0100 Subject: [PATCH 01/26] Allowing imports and typescript with `esbuild-wasm` --- app/components/ascii-art-generator.tsx | 54 +- app/components/code-editor.tsx | 2 +- app/lib/code-processor.ts | 261 ++++ app/lib/image-processor.ts | 47 +- app/scripts/unpkg-demo.ts | 40 + app/templates.ts | 11 + bun.lock | 1506 ++++++++++++++++++++++++ bun.lockb | Bin 297496 -> 0 bytes package.json | 1 + 9 files changed, 1894 insertions(+), 28 deletions(-) create mode 100644 app/lib/code-processor.ts create mode 100644 app/scripts/unpkg-demo.ts create mode 100644 bun.lock delete mode 100755 bun.lockb diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index e1086e3..0781984 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -5,6 +5,7 @@ * * Copyright Oxide Computer Company */ +import * as esbuild from 'esbuild-wasm' import { decompressFrames, ParsedFrame, ParsedGif, parseGIF } from 'gifuct-js' import { motion } from 'motion/react' import { useCallback, useEffect, useRef, useState } from 'react' @@ -19,10 +20,10 @@ import { PreprocessingOptions } from '~/components/preprocessing-options' import { SourceSelector } from '~/components/source-selector' import type { Data, Program } from '~/lib/animation' import { createCodeAsciiProgram, createImageAsciiProgram } from '~/lib/ascii-program' +import { processCodeModule } from '~/lib/code-processor' import { DitheringAlgorithm, processAnimatedMedia, - processCodeModule, processImage, type CachedMediaData, } from '~/lib/image-processor' @@ -33,6 +34,13 @@ import { AnimationOptions } from './animation-options' import { CodeSidebar } from './code-sidebar' import { ProjectManagement } from './project-management' +// Use window global to track esbuild initialization across hot reloads and StrictMode +declare global { + interface Window { + esbuildInitialized?: boolean + } +} + export type SourceType = 'image' | 'code' | 'gif' export type GridType = 'none' | 'horizontal' | 'vertical' | 'both' export type ColorMappingType = 'brightness' | 'hue' | 'saturation' @@ -77,6 +85,8 @@ export interface AsciiSettings { } } +export type EsbuildService = typeof esbuild + export function AsciiArtGenerator() { // Core state const [settings, setSettings] = useState(DEFAULT_SETTINGS) @@ -97,6 +107,7 @@ export function AsciiArtGenerator() { const lastProcessedSettings = useRef(null) const isInitialMount = useRef(true) + const esbuildService = useRef(null) const handleBeforeUnload = (event: BeforeUnloadEvent) => { // Trigger the warning dialog when the user closes or navigates the tab @@ -128,6 +139,26 @@ export function AsciiArtGenerator() { [showCodeSidebar], ) + // Initialize esbuild service + useEffect(() => { + const startService = async () => { + if (!window.esbuildInitialized) { + try { + window.esbuildInitialized = true + await esbuild.initialize({ + wasmURL: './node_modules/esbuild-wasm/esbuild.wasm', + }) + esbuildService.current = esbuild + } catch (error) { + console.error('Failed to initialize esbuild:', error) + } + } else { + esbuildService.current = esbuild + } + } + startService() + }, []) + // Load template from URL parameter on mount useEffect(() => { const urlParams = new URLSearchParams(window.location.search) @@ -301,9 +332,22 @@ export function AsciiArtGenerator() { currentSettings: AsciiSettings, ) => { try { - const module = processCodeModule(currentSettings.source.code) - if (!module) { - toast('Could not process your code. Check for syntax errors.') + if (!esbuildService.current) { + toast('Code processor not ready. Please try again.') + return + } + + // Check if code contains import statements for unpkg support + const hasImports = /^\s*import\s+/m.test(currentSettings.source.code) + + const result = await processCodeModule(currentSettings.source.code, { + esbuildService: esbuildService.current, + timeout: 5000, + allowUnpkgImports: hasImports, + }) + + if (!result.success || !result.module) { + toast(result.error || 'Could not process your code. Check for syntax errors.') return } @@ -311,7 +355,7 @@ export function AsciiArtGenerator() { columns, rows, currentSettings.animation.frameRate, - module, + result.module, ) setProgram(newProgram) diff --git a/app/components/code-editor.tsx b/app/components/code-editor.tsx index 701b2f5..bd11a05 100644 --- a/app/components/code-editor.tsx +++ b/app/components/code-editor.tsx @@ -176,7 +176,7 @@ const oxideDarkExtension = [theme, syntaxHighlighting(highlightStyle)] export default function CodeEditor({ value, onChange, editorViewRef }: CodeEditorProps) { const editorExtensions = [ - javascript({ jsx: false, typescript: false }), + javascript({ jsx: false, typescript: true }), EditorView.lineWrapping, oxideDarkExtension, ] diff --git a/app/lib/code-processor.ts b/app/lib/code-processor.ts new file mode 100644 index 0000000..cfd7bcb --- /dev/null +++ b/app/lib/code-processor.ts @@ -0,0 +1,261 @@ +import { BuildResult, Plugin } from 'esbuild-wasm' + +import { EsbuildService } from '~/components/ascii-art-generator' + +import type { Program } from './animation' + +// Cache for fetched modules +const moduleCache = new Map() + +interface CodeProcessorOptions { + esbuildService: EsbuildService + timeout?: number + target?: string + allowUnpkgImports?: boolean +} + +interface LoadProcessedModule { + load(): Promise +} + +interface ProcessedModule { + main?: Program['main'] + boot?: Program['boot'] + pre?: Program['pre'] + post?: Program['post'] +} + +interface ProcessingResult { + success: boolean + module?: LoadProcessedModule + error?: string + warnings?: string[] +} + +export async function processCodeModule( + code: string, + options: CodeProcessorOptions, +): Promise { + const { esbuildService, timeout = 5000 } = options + + try { + if (!esbuildService) { + throw new Error('esbuild service not provided') + } + + // Use build API for bundling with plugins + const result: BuildResult = await esbuildService.build({ + entryPoints: ['input.ts'], + bundle: true, + minify: false, + format: 'esm', + platform: 'browser', + write: false, + treeShaking: false, + plugins: [createUnpkgPathPlugin(), createUnpkgFetchPlugin(code)], + define: { + global: 'globalThis', + 'process.env.NODE_ENV': '"production"', + }, + external: [], + }) + + if (result.warnings.length > 0) { + console.warn('esbuild warnings:', result.warnings) + } + + if (!result.outputFiles || result.outputFiles.length === 0) { + throw new Error('No output files generated') + } + + const transformedCode = result.outputFiles[0].text + + // Create a safe execution environment + const moduleExports = await executeCodeSafely(transformedCode, timeout) + + return { + success: true, + module: { + async load() { + return moduleExports + }, + }, + warnings: result.warnings.map((w) => w.text), + } + } catch (error) { + console.error('Error processing code module:', error) + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error occurred', + } + } +} + +async function executeCodeSafely(code: string, timeout: number): Promise { + return new Promise((resolve, reject) => { + const timeoutId = setTimeout(() => { + reject(new Error(`Code execution timed out after ${timeout}ms`)) + }, timeout) + + try { + // Execute the ESM code using dynamic import + const blob = new Blob([code], { type: 'application/javascript' }) + const moduleUrl = URL.createObjectURL(blob) + + import(moduleUrl) + .then((module) => { + URL.revokeObjectURL(moduleUrl) + + const result = { + main: module.main, + boot: module.boot, + pre: module.pre, + post: module.post, + } + + clearTimeout(timeoutId) + resolve(result) + }) + .catch((error) => { + URL.revokeObjectURL(moduleUrl) + clearTimeout(timeoutId) + reject(error) + }) + } catch (error) { + clearTimeout(timeoutId) + reject(error) + } + }) +} + +function createUnpkgPathPlugin(): Plugin { + return { + name: 'unpkg-path-plugin', + setup(build) { + // Handle root entry file + build.onResolve({ filter: /(^input\.ts$)/ }, () => { + return { path: 'input.ts', namespace: 'app' } + }) + + // Handle relative imports inside a module + build.onResolve({ filter: /^\.+\// }, (args) => { + return { + path: new URL(args.path, 'https://unpkg.com' + args.resolveDir + '/').href, + namespace: 'app', + } + }) + + // Handle main file of a module + build.onResolve({ filter: /.*/ }, async (args) => { + const isUrl = args.path.startsWith('https://') || args.path.startsWith('http://') + + if (isUrl) { + return { + path: args.path, + namespace: 'app', + } + } + + // Use ESM version from unpkg + const resolvedPath = `https://unpkg.com/${args.path}?module` + console.log('Resolved:', resolvedPath) + return { + path: resolvedPath, + namespace: 'app', + } + }) + }, + } +} + +function createUnpkgFetchPlugin(input: string): Plugin { + return { + name: 'unpkg-fetch-plugin', + setup(build) { + // Handle root user input code + build.onLoad({ filter: /^input\.ts$/ }, () => { + const wrappedInput = ` +${input} + +// Export functions if they exist +const _main = typeof main !== 'undefined' ? main : undefined; +const _boot = typeof boot !== 'undefined' ? boot : undefined; +const _pre = typeof pre !== 'undefined' ? pre : undefined; +const _post = typeof post !== 'undefined' ? post : undefined; + +export { _main as main, _boot as boot, _pre as pre, _post as post }; + ` + return { + loader: 'tsx', + contents: wrappedInput, + } + }) + + // Handle JS/TS files + build.onLoad({ filter: /.*/ }, async (args) => { + // Check if we have this path cached + if (moduleCache.has(args.path)) { + const cachedContents = moduleCache.get(args.path)! + + // Determine loader + let loader: 'js' | 'ts' | 'tsx' | 'jsx' | 'text' = 'js' + if (args.path.includes('.ts') && !args.path.includes('unpkg.com')) { + loader = 'ts' + } else if (args.path.includes('.tsx')) { + loader = 'tsx' + } else if (args.path.includes('.jsx')) { + loader = 'jsx' + } + + const resolveDir = new URL('./', args.path).pathname + + return { + loader, + contents: cachedContents, + resolveDir, + } + } + + try { + const response = await fetch(args.path) + if (!response.ok) { + throw new Error(`Failed to fetch ${args.path}: ${response.statusText}`) + } + + const contents = await response.text() + + // Cache the content using path as key + moduleCache.set(args.path, contents) + + // Determine loader + let loader: 'js' | 'ts' | 'tsx' | 'jsx' | 'text' = 'js' + if (args.path.includes('.ts') && !args.path.includes('unpkg.com')) { + loader = 'ts' + } else if (args.path.includes('.tsx')) { + loader = 'tsx' + } else if (args.path.includes('.jsx')) { + loader = 'jsx' + } + + const resolveDir = new URL('./', response.url).pathname + + return { + loader, + contents, + resolveDir, + } + } catch (error) { + console.error('Failed to load:', args.path, error) + return { + errors: [ + { + text: `Failed to load module: ${error instanceof Error ? error.message : 'Unknown error'}`, + location: null, + }, + ], + } + } + }) + }, + } +} diff --git a/app/lib/image-processor.ts b/app/lib/image-processor.ts index 047b186..976b174 100644 --- a/app/lib/image-processor.ts +++ b/app/lib/image-processor.ts @@ -5,8 +5,11 @@ * * Copyright Oxide Computer Company */ +import * as esbuild from 'esbuild-wasm' + import type { AsciiSettings } from '~/components/ascii-art-generator' +import { processCodeModule as processCodeModuleNew } from './code-processor' import type { Data } from './types' // Types @@ -660,29 +663,29 @@ async function loadGifFrame( }) } -// Code module processing -export function processCodeModule(code: string) { - try { - const wrappedCode = ` - ${code} - return { - main: typeof main === 'function' ? main : undefined, - boot: typeof boot === 'function' ? boot : undefined, - pre: typeof pre === 'function' ? pre : undefined, - post: typeof post === 'function' ? post : undefined - }; - ` - - const moduleFn = new Function(wrappedCode) - const moduleExports = moduleFn() - - return { - async load() { - return moduleExports - }, +// Code module processing with TypeScript support +export async function processCodeModule( + code: string, + options: { esbuildService: typeof esbuild; timeout?: number }, +) { + const result = await processCodeModuleNew(code, options) + + if (!result.success) { + console.error('Error preparing user code module:', result.error) + if (result.warnings && result.warnings.length > 0) { + console.warn('Warnings:', result.warnings) } - } catch (error) { - console.error('Error preparing user code module:', error) return null } + + if (result.warnings && result.warnings.length > 0) { + console.warn('Code processing warnings:', result.warnings) + } + + // Return a simple wrapper that matches the legacy functionality + return { + async load() { + return await result.module!.load() + }, + } } diff --git a/app/scripts/unpkg-demo.ts b/app/scripts/unpkg-demo.ts new file mode 100644 index 0000000..abec3cf --- /dev/null +++ b/app/scripts/unpkg-demo.ts @@ -0,0 +1,40 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ + +export const unpkgDemo = `import { createNoise2D } from 'simplex-noise' + +const speed = 2; //~ number 0-100 step=1 +const scaleX = 3.45; //~ number 1-50 +const scaleY = 2; //~ number 1-50 + +let noise2D +const characters = ' .:-=' + +function boot() { + noise2D = createNoise2D() +} + +function main(coord, context, cursor, buffer) { + const { x, y } = coord + const { cols, rows } = context + + // Normalize coordinates + const nx = x / cols + const ny = y / rows + + const time = context.frame * speed * 0.001 + + const noise = noise2D(nx * scaleX + time, ny * scaleY + time * 0.5) * 0.5 + + // Map to character index + const normalized = (noise + 1) * 0.5 // Convert from [-1,1] to [0,1] + const charIndex = Math.floor(normalized * characters.length) + const clampedIndex = Math.max(0, Math.min(charIndex, characters.length - 1)) + + return characters[clampedIndex] +}` diff --git a/app/templates.ts b/app/templates.ts index ce20ba5..446097a 100644 --- a/app/templates.ts +++ b/app/templates.ts @@ -10,6 +10,7 @@ import { predefinedCharacterSets } from './components/output-options' import { clock } from './scripts/clock' import { coins } from './scripts/coins' import { numbers } from './scripts/numbers' +import { unpkgDemo } from './scripts/unpkg-demo' export const DEFAULT_CODE = `/** @author ertdfgcvb @@ -108,6 +109,16 @@ export const TEMPLATES = { frameRate: 30, }, }, + unpkgDemo: { + ...DEFAULT_SETTINGS, + meta: { name: 'Perlin Noise (Unpkg)' }, + source: { type: 'code', data: null, code: unpkgDemo }, + output: { ...DEFAULT_SETTINGS, columns: 80, rows: 40, grid: 'none' }, + animation: { + animationLength: 300, + frameRate: 30, + }, + }, } export type TemplateType = keyof typeof TEMPLATES diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..d93537d --- /dev/null +++ b/bun.lock @@ -0,0 +1,1506 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "mitos", + "dependencies": { + "@ariakit/react": "^0.4.15", + "@codemirror/lang-javascript": "^6.2.3", + "@codemirror/language": "^6.11.0", + "@codemirror/state": "^6.5.2", + "@codemirror/view": "^6.36.4", + "@ffmpeg/ffmpeg": "^0.12.15", + "@ffmpeg/util": "^0.12.2", + "@ianvs/prettier-plugin-sort-imports": "^4.4.1", + "@oxide/design-system": "^2.5.0", + "@react-hook/resize-observer": "^2.0.2", + "@uiw/react-codemirror": "^4.23.10", + "clsx": "^2.1.1", + "esbuild-wasm": "^0.25.8", + "eslint-config-prettier": "^10.1.1", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.3", + "eslint-plugin-react": "^7.37.4", + "file-saver": "^2.0.5", + "gifuct-js": "^2.1.2", + "html2canvas-pro": "^1.5.8", + "jszip": "^3.10.1", + "motion": "^12.16.0", + "prettier": "^3.5.3", + "prettier-plugin-tailwindcss": "^0.6.11", + "react": "^19.0.0", + "react-aria": "^3.38.1", + "react-dom": "^19.0.0", + "react-hotkeys-hook": "^4.6.1", + "react-stately": "^3.36.1", + "remeda": "^2.21.2", + "sonner": "^2.0.2", + "tailwind-merge": "^2.5.5", + "tailwindcss-animate": "^1.0.7", + "vite-tsconfig-paths": "^5.1.4", + }, + "devDependencies": { + "@eslint/compat": "^1.2.8", + "@eslint/js": "^9.21.0", + "@types/file-saver": "^2.0.7", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.22.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "postcss": "^8", + "tailwindcss": "^3.4.17", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1", + "vite": "^6.2.0", + }, + }, + }, + "packages": { + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + + "@ariakit/core": ["@ariakit/core@0.4.15", "", {}, "sha512-vvxmZvkNhiisKM+Y1TbGMUfVVchV/sWu9F0xw0RYADXcimWPK31dd9JnIZs/OQ5pwAryAHmERHwuGQVESkSjwQ=="], + + "@ariakit/react": ["@ariakit/react@0.4.17", "", { "dependencies": { "@ariakit/react-core": "0.4.17" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-HQaIboE2axtlncJz1hRTaiQfJ1GGjhdtNcAnPwdjvl2RybfmlHowIB+HTVBp36LzroKPs/M4hPCxk7XTaqRZGg=="], + + "@ariakit/react-core": ["@ariakit/react-core@0.4.17", "", { "dependencies": { "@ariakit/core": "0.4.15", "@floating-ui/dom": "^1.0.0", "use-sync-external-store": "^1.2.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-kFF6n+gC/5CRQIyaMTFoBPio2xUe0k9rZhMNdUobWRmc/twfeLVkODx+8UVYaNyKilTge8G0JFqwvFKku/jKEw=="], + + "@asciidoctor/core": ["@asciidoctor/core@3.0.4", "", { "dependencies": { "@asciidoctor/opal-runtime": "3.0.1", "unxhr": "1.2.0" } }, "sha512-41SDMi7iRRBViPe0L6VWFTe55bv6HEOJeRqMj5+E5wB1YPdUPuTucL4UAESPZM6OWmn4t/5qM5LusXomFUVwVQ=="], + + "@asciidoctor/opal-runtime": ["@asciidoctor/opal-runtime@3.0.1", "", { "dependencies": { "glob": "8.1.0", "unxhr": "1.2.0" } }, "sha512-iW7ACahOG0zZft4A/4CqDcc7JX+fWRNjV5tFAVkNCzwZD+EnFolPaUOPYt8jzadc0+Bgd80cQTtRMQnaaV1kkg=="], + + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/compat-data": ["@babel/compat-data@7.27.5", "", {}, "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg=="], + + "@babel/core": ["@babel/core@7.27.4", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.4", "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/traverse": "^7.27.4", "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g=="], + + "@babel/generator": ["@babel/generator@7.27.5", "", { "dependencies": { "@babel/parser": "^7.27.5", "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helpers": ["@babel/helpers@7.27.6", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.27.6" } }, "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug=="], + + "@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + + "@babel/runtime": ["@babel/runtime@7.27.6", "", {}, "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q=="], + + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], + + "@babel/traverse": ["@babel/traverse@7.27.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA=="], + + "@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="], + + "@codemirror/autocomplete": ["@codemirror/autocomplete@6.18.6", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" } }, "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg=="], + + "@codemirror/commands": ["@codemirror/commands@6.8.1", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw=="], + + "@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.4", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA=="], + + "@codemirror/language": ["@codemirror/language@6.11.1", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", "@lezer/common": "^1.1.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ=="], + + "@codemirror/lint": ["@codemirror/lint@6.8.5", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.35.0", "crelt": "^1.0.5" } }, "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA=="], + + "@codemirror/search": ["@codemirror/search@6.5.11", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "crelt": "^1.0.5" } }, "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA=="], + + "@codemirror/state": ["@codemirror/state@6.5.2", "", { "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA=="], + + "@codemirror/theme-one-dark": ["@codemirror/theme-one-dark@6.1.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/highlight": "^1.0.0" } }, "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA=="], + + "@codemirror/view": ["@codemirror/view@6.37.1", "", { "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "sha512-Qy4CAUwngy/VQkEz0XzMKVRcckQuqLYWKqVpDDDghBe5FSXSqfVrJn49nw3ePZHxRUz4nRmb05Lgi+9csWo4eg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.5", "", { "os": "android", "cpu": "arm" }, "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.5", "", { "os": "android", "cpu": "arm64" }, "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.5", "", { "os": "android", "cpu": "x64" }, "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.5", "", { "os": "linux", "cpu": "x64" }, "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.5", "", { "os": "none", "cpu": "arm64" }, "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.5", "", { "os": "none", "cpu": "x64" }, "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.5", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], + + "@eslint/compat": ["@eslint/compat@1.2.9", "", { "peerDependencies": { "eslint": "^9.10.0" } }, "sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA=="], + + "@eslint/config-array": ["@eslint/config-array@0.20.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.2.2", "", {}, "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg=="], + + "@eslint/core": ["@eslint/core@0.14.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], + + "@eslint/js": ["@eslint/js@9.28.0", "", {}, "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.1", "", { "dependencies": { "@eslint/core": "^0.14.0", "levn": "^0.4.1" } }, "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w=="], + + "@ffmpeg/ffmpeg": ["@ffmpeg/ffmpeg@0.12.15", "", { "dependencies": { "@ffmpeg/types": "^0.12.4" } }, "sha512-1C8Obr4GsN3xw+/1Ww6PFM84wSQAGsdoTuTWPOj2OizsRDLT4CXTaVjPhkw6ARyDus1B9X/L2LiXHqYYsGnRFw=="], + + "@ffmpeg/types": ["@ffmpeg/types@0.12.4", "", {}, "sha512-k9vJQNBGTxE5AhYDtOYR5rO5fKsspbg51gbcwtbkw2lCdoIILzklulcjJfIDwrtn7XhDeF2M+THwJ2FGrLeV6A=="], + + "@ffmpeg/util": ["@ffmpeg/util@0.12.2", "", {}, "sha512-ouyoW+4JB7WxjeZ2y6KpRvB+dLp7Cp4ro8z0HIVpZVCM7AwFlHa0c4R8Y/a4M3wMqATpYKhC7lSFHQ0T11MEDw=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.1", "", { "dependencies": { "@floating-ui/utils": "^0.2.9" } }, "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.1", "", { "dependencies": { "@floating-ui/core": "^1.7.1", "@floating-ui/utils": "^0.2.9" } }, "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ=="], + + "@floating-ui/react": ["@floating-ui/react@0.27.12", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.3", "@floating-ui/utils": "^0.2.9", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-kKlWNrpIQxF1B/a2MZvE0/uyKby4960yjO91W7nVyNKmmfNi62xU9HCjL1M1eWzx/LFj/VPSwJVbwQk9Pq/68A=="], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.3", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.9", "", {}, "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="], + + "@formatjs/ecma402-abstract": ["@formatjs/ecma402-abstract@2.3.4", "", { "dependencies": { "@formatjs/fast-memoize": "2.2.7", "@formatjs/intl-localematcher": "0.6.1", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } }, "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA=="], + + "@formatjs/fast-memoize": ["@formatjs/fast-memoize@2.2.7", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ=="], + + "@formatjs/icu-messageformat-parser": ["@formatjs/icu-messageformat-parser@2.11.2", "", { "dependencies": { "@formatjs/ecma402-abstract": "2.3.4", "@formatjs/icu-skeleton-parser": "1.8.14", "tslib": "^2.8.0" } }, "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA=="], + + "@formatjs/icu-skeleton-parser": ["@formatjs/icu-skeleton-parser@1.8.14", "", { "dependencies": { "@formatjs/ecma402-abstract": "2.3.4", "tslib": "^2.8.0" } }, "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ=="], + + "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.6.1", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg=="], + + "@headlessui/react": ["@headlessui/react@2.2.4", "", { "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.20.2", "@react-aria/interactions": "^3.25.0", "@tanstack/react-virtual": "^3.13.9", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-lz+OGcAH1dK93rgSMzXmm1qKOJkBUqZf1L4M8TWLNplftQD3IkoEDdUFNfAn4ylsN6WOTVtWaLmvmaHOUk1dTA=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@ianvs/prettier-plugin-sort-imports": ["@ianvs/prettier-plugin-sort-imports@4.4.2", "", { "dependencies": { "@babel/generator": "^7.26.2", "@babel/parser": "^7.26.2", "@babel/traverse": "^7.25.9", "@babel/types": "^7.26.0", "semver": "^7.5.2" }, "peerDependencies": { "@vue/compiler-sfc": "2.7.x || 3.x", "prettier": "2 || 3 || ^4.0.0-0" }, "optionalPeers": ["@vue/compiler-sfc"] }, "sha512-KkVFy3TLh0OFzimbZglMmORi+vL/i2OFhEs5M07R9w0IwWAGpsNNyE4CY/2u0YoMF5bawKC2+8/fUH60nnNtjw=="], + + "@internationalized/date": ["@internationalized/date@3.8.2", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA=="], + + "@internationalized/message": ["@internationalized/message@3.1.8", "", { "dependencies": { "@swc/helpers": "^0.5.0", "intl-messageformat": "^10.1.0" } }, "sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA=="], + + "@internationalized/number": ["@internationalized/number@3.6.3", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw=="], + + "@internationalized/string": ["@internationalized/string@3.2.7", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@lezer/common": ["@lezer/common@1.2.3", "", {}, "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA=="], + + "@lezer/highlight": ["@lezer/highlight@1.2.1", "", { "dependencies": { "@lezer/common": "^1.0.0" } }, "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA=="], + + "@lezer/javascript": ["@lezer/javascript@1.5.1", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.1.3", "@lezer/lr": "^1.3.0" } }, "sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw=="], + + "@lezer/lr": ["@lezer/lr@1.4.2", "", { "dependencies": { "@lezer/common": "^1.0.0" } }, "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA=="], + + "@marijn/find-cluster-break": ["@marijn/find-cluster-break@1.0.2", "", {}, "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@oxide/design-system": ["@oxide/design-system@2.7.0", "", { "dependencies": { "@floating-ui/react": "^0.27.4", "@headlessui/react": "^2.2.0", "@radix-ui/react-accordion": "^1.2.2", "@radix-ui/react-tabs": "^1.1.3", "classnames": "^2.5.1", "shiki": "^1.24.0" }, "peerDependencies": { "@asciidoctor/core": "^3.0.0", "@oxide/react-asciidoc": "^1.0.4", "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-W/RruOKkZ8q0aezWNpnO9FCTo+CWFSRzrl9afKzhGxnB1v9405c8Kx/JvlH5tXc6GK9uRuLKavDI6sN3Ci1d4Q=="], + + "@oxide/react-asciidoc": ["@oxide/react-asciidoc@1.1.3", "", { "dependencies": { "html-react-parser": "^5.1.15" }, "peerDependencies": { "@asciidoctor/core": "^3.0.0", "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-enuuEK1Ebg+ULi1DhLhJN4yZscwGHRDmId1ABc9W/1mgrV3Z5D+fGRGBiJK2aqx7AgWHUXf85VhIau+xjDGcjA=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + + "@pkgr/core": ["@pkgr/core@0.2.7", "", {}, "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg=="], + + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.2", "", {}, "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="], + + "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-collapsible": "1.1.11", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A=="], + + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.4", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg=="], + + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], + + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA=="], + + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.10", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q=="], + + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.4", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.10", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw=="], + + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@react-aria/breadcrumbs": ["@react-aria/breadcrumbs@3.5.25", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/link": "^3.8.2", "@react-aria/utils": "^3.29.1", "@react-types/breadcrumbs": "^3.7.14", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-c8Ipp7EoFXlPKpOUJne6JlG823KwtqMyFsTpU0LS0DE9IEfnAIKanc5X+kChNmooKHq4V8QNyUxTf8WyBKU9+Q=="], + + "@react-aria/button": ["@react-aria/button@3.13.2", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/toolbar": "3.0.0-beta.17", "@react-aria/utils": "^3.29.1", "@react-stately/toggle": "^3.8.5", "@react-types/button": "^3.12.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-iPlSR225CSOit+57SrDfEF3lDuQvjRBYj1HFyGsLk91HfV3vDRgkKiou8uhOHk+B3afGJRwot8/Sr9MvNOfeQg=="], + + "@react-aria/calendar": ["@react-aria/calendar@3.8.2", "", { "dependencies": { "@internationalized/date": "^3.8.2", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/live-announcer": "^3.4.3", "@react-aria/utils": "^3.29.1", "@react-stately/calendar": "^3.8.2", "@react-types/button": "^3.12.2", "@react-types/calendar": "^3.7.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-RXVECPB3gP5SZvfKwlqLKCWEFzJh6AcDQQSRkArlyLyHRAHHcniKO3hW90pRWKmEUSVUAZdoCA6XkRL3dXGYXw=="], + + "@react-aria/checkbox": ["@react-aria/checkbox@3.15.6", "", { "dependencies": { "@react-aria/form": "^3.0.17", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/toggle": "^3.11.4", "@react-aria/utils": "^3.29.1", "@react-stately/checkbox": "^3.6.15", "@react-stately/form": "^3.1.5", "@react-stately/toggle": "^3.8.5", "@react-types/checkbox": "^3.9.5", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-5OHrrihjCNBRB93KysXfHZBLUSGh43fC3DTfH9LWDxfpo38//VkaDXZezA0zg+a43D3kTq6tOSNgHq3sUk/Q5Q=="], + + "@react-aria/color": ["@react-aria/color@3.0.8", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/numberfield": "^3.11.15", "@react-aria/slider": "^3.7.20", "@react-aria/spinbutton": "^3.6.16", "@react-aria/textfield": "^3.17.4", "@react-aria/utils": "^3.29.1", "@react-aria/visually-hidden": "^3.8.24", "@react-stately/color": "^3.8.6", "@react-stately/form": "^3.1.5", "@react-types/color": "^3.0.6", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-zGEptdwSCcLS/Z+LARmCyv4ptLIYtLIXHtgFSDAaF5ssY0whMOT0yAmOJz4T4ldnaWbBsLIz9O3PbUzNy83L2A=="], + + "@react-aria/combobox": ["@react-aria/combobox@3.12.4", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/i18n": "^3.12.10", "@react-aria/listbox": "^3.14.5", "@react-aria/live-announcer": "^3.4.3", "@react-aria/menu": "^3.18.4", "@react-aria/overlays": "^3.27.2", "@react-aria/selection": "^3.24.2", "@react-aria/textfield": "^3.17.4", "@react-aria/utils": "^3.29.1", "@react-stately/collections": "^3.12.5", "@react-stately/combobox": "^3.10.6", "@react-stately/form": "^3.1.5", "@react-types/button": "^3.12.2", "@react-types/combobox": "^3.13.6", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-RvIEz2JK6Ndi0VhhNPYzfHbvq6rj7o2SwhhrcN5cKPC0lGgTXgHJheTq2kMu7ctO/C+Yx/3d0LQC/fOnbKH8zA=="], + + "@react-aria/datepicker": ["@react-aria/datepicker@3.14.4", "", { "dependencies": { "@internationalized/date": "^3.8.2", "@internationalized/number": "^3.6.3", "@internationalized/string": "^3.2.7", "@react-aria/focus": "^3.20.4", "@react-aria/form": "^3.0.17", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/spinbutton": "^3.6.16", "@react-aria/utils": "^3.29.1", "@react-stately/datepicker": "^3.14.2", "@react-stately/form": "^3.1.5", "@react-types/button": "^3.12.2", "@react-types/calendar": "^3.7.2", "@react-types/datepicker": "^3.12.2", "@react-types/dialog": "^3.5.19", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-VoVLqTSttvHE1h8nrF2L7r1SDN0VCv5UtIlYqUxK4Gk/5Z7Pboo7aY2OAhgpycm9ZUfWio/VVAtj6oMoWHjxQw=="], + + "@react-aria/dialog": ["@react-aria/dialog@3.5.26", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/overlays": "^3.27.2", "@react-aria/utils": "^3.29.1", "@react-types/dialog": "^3.5.19", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-X4KKf0OPHIje+68I0GRDkIcg+qsrBEQskl72aX7GQy6oNBta3ZTxQJrK2HTYdBDJnr1ADQdxYi+pZ5zPYDjODA=="], + + "@react-aria/disclosure": ["@react-aria/disclosure@3.0.6", "", { "dependencies": { "@react-aria/ssr": "^3.9.9", "@react-aria/utils": "^3.29.1", "@react-stately/disclosure": "^3.0.5", "@react-types/button": "^3.12.2", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-swO7U2G1Qhelj08RUiPQ8OEwDWDGj7DgWBmMyU2HjVEihR9wlvwsJTvzmxNQvJJT0l1bxQ/tM4RWxdUycUYy7A=="], + + "@react-aria/dnd": ["@react-aria/dnd@3.10.0", "", { "dependencies": { "@internationalized/string": "^3.2.7", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/live-announcer": "^3.4.3", "@react-aria/overlays": "^3.27.2", "@react-aria/utils": "^3.29.1", "@react-stately/collections": "^3.12.5", "@react-stately/dnd": "^3.6.0", "@react-types/button": "^3.12.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-kW8TE4MLiTZJWnXSH+/6HeEtCOP20S+3m0BpToOzZhlpETSWJj6WcTRrM9ygt86v+lD4Vb92aQPdB75NVCbSAg=="], + + "@react-aria/focus": ["@react-aria/focus@3.20.4", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/utils": "^3.29.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-E9M/kPYvF1fBZpkRXsKqMhvBVEyTY7vmkHeXLJo6tInKQOjYyYs0VeWlnGnxBjQIAH7J7ZKAORfTFQQHyhoueQ=="], + + "@react-aria/form": ["@react-aria/form@3.0.17", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/utils": "^3.29.1", "@react-stately/form": "^3.1.5", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-d7Cic5OGBqI/OMUuHlPrPn6udSvjdpurrrwbnSYzrGlVhDmKLUdrLTtBL8O1MPzluAyW52azqJXSpsjwh288KA=="], + + "@react-aria/grid": ["@react-aria/grid@3.14.1", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/live-announcer": "^3.4.3", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-stately/collections": "^3.12.5", "@react-stately/grid": "^3.11.3", "@react-stately/selection": "^3.20.3", "@react-types/checkbox": "^3.9.5", "@react-types/grid": "^3.3.3", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-znYb6S97yS36nw0liNFYFPmMyhhiUGvhtSXvkPEEU+bxw94O6jbLNwyJKrlUUSNDW3XINasIIY7EhC66QMbSFw=="], + + "@react-aria/gridlist": ["@react-aria/gridlist@3.13.1", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/grid": "^3.14.1", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-stately/collections": "^3.12.5", "@react-stately/list": "^3.12.3", "@react-stately/tree": "^3.9.0", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-tdcKDtzQcvT5U7mBbasiV/uHfwQmkYszyjKUZWigO54YNoz5Zp3RFfS14Mv6NAft2cse8Bj9oEyf8HMUT8KEZA=="], + + "@react-aria/i18n": ["@react-aria/i18n@3.12.10", "", { "dependencies": { "@internationalized/date": "^3.8.2", "@internationalized/message": "^3.1.8", "@internationalized/number": "^3.6.3", "@internationalized/string": "^3.2.7", "@react-aria/ssr": "^3.9.9", "@react-aria/utils": "^3.29.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-1j00soQ2W0nTgzaaIsGFdMF/5aN60AEdCJPhmXGZiuWdWzMxObN9LQ9vdzYPTjTqyqMdSaSp9DZKs5I26Xovpw=="], + + "@react-aria/interactions": ["@react-aria/interactions@3.25.2", "", { "dependencies": { "@react-aria/ssr": "^3.9.9", "@react-aria/utils": "^3.29.1", "@react-stately/flags": "^3.1.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-BWyZXBT4P17b9C9HfOIT2glDFMH9nUCfQF7vZ5FEeXNBudH/8OcSbzyBUG4Dg3XPtkOem5LP59ocaizkl32Tvg=="], + + "@react-aria/label": ["@react-aria/label@3.7.19", "", { "dependencies": { "@react-aria/utils": "^3.29.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-ZJIj/BKf66q52idy24ErzX77vDGuyQn4neWtu51RRSk4npI3pJqEPsdkPCdo2dlBCo/Uc1pfuLGg2hY3N/ni9Q=="], + + "@react-aria/landmark": ["@react-aria/landmark@3.0.4", "", { "dependencies": { "@react-aria/utils": "^3.29.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-1U5ce6cqg1qGbK4M4R6vwrhUrKXuUzReZwHaTrXxEY22IMxKDXIZL8G7pFpcKix2XKqjLZWf+g8ngGuNhtQ2QQ=="], + + "@react-aria/link": ["@react-aria/link@3.8.2", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/utils": "^3.29.1", "@react-types/link": "^3.6.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-LScn5bRlBrv7yt2y06Ul3vNo8BOYHwZXjk47XCJTdt/QWhuU15oG0sRjJ1OIWgZ96jtW7u6YZ1PQtwX55gl7Dw=="], + + "@react-aria/listbox": ["@react-aria/listbox@3.14.5", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-stately/collections": "^3.12.5", "@react-stately/list": "^3.12.3", "@react-types/listbox": "^3.7.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-6fIIr7KqJyS6+7FzRUT3TJozcImJG38kkPtzEpwhmPzWNDWEu307BOjIMw0AHs+m1pT7wspCzg3KOTppw8S4eg=="], + + "@react-aria/live-announcer": ["@react-aria/live-announcer@3.4.3", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-nbBmx30tW53Vlbq3BbMxHGbHa7vGE9ItacI+1XAdH2UZDLtdZA5J6U9YC6lokKQCv+aEVO6Zl9YG4yp57YwnGw=="], + + "@react-aria/menu": ["@react-aria/menu@3.18.4", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/overlays": "^3.27.2", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-stately/collections": "^3.12.5", "@react-stately/menu": "^3.9.5", "@react-stately/selection": "^3.20.3", "@react-stately/tree": "^3.9.0", "@react-types/button": "^3.12.2", "@react-types/menu": "^3.10.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-iLioNOnHhltIq7JtLkeSXA1bFt3rUdUwnc8j20LXlzhDgH/56Xi1sxOCzaGo33mDPT16ANJG4IolVzg0+tnb2g=="], + + "@react-aria/meter": ["@react-aria/meter@3.4.24", "", { "dependencies": { "@react-aria/progress": "^3.4.24", "@react-types/meter": "^3.4.10", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-IYI0Z2pwMvIe8r/3G3PHhM4G/KRiW1ssFCBZdCjBbSpl6/EkmrHiyeaBYG0j8Ux8tmRmXiMVjxLdDlCJQDH7mQ=="], + + "@react-aria/numberfield": ["@react-aria/numberfield@3.11.15", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/spinbutton": "^3.6.16", "@react-aria/textfield": "^3.17.4", "@react-aria/utils": "^3.29.1", "@react-stately/form": "^3.1.5", "@react-stately/numberfield": "^3.9.13", "@react-types/button": "^3.12.2", "@react-types/numberfield": "^3.8.12", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-iQuXWn6BGneSBZrRURkntfivY9noUiq/JLs9KjtaSm9V0X4THevB9xXQLL0qLJ+n5YHOM6skRyoCRaweYY5IhA=="], + + "@react-aria/overlays": ["@react-aria/overlays@3.27.2", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/ssr": "^3.9.9", "@react-aria/utils": "^3.29.1", "@react-aria/visually-hidden": "^3.8.24", "@react-stately/overlays": "^3.6.17", "@react-types/button": "^3.12.2", "@react-types/overlays": "^3.8.16", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-lWerY4caK2+AXzdPhUqAov3Di2mSfIKdaEEj+99iXeH85zzs2cbWZRvvCwwVGQ0GprypxETz1jb1Wq/55xDALw=="], + + "@react-aria/progress": ["@react-aria/progress@3.4.24", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/label": "^3.7.19", "@react-aria/utils": "^3.29.1", "@react-types/progress": "^3.5.13", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-lpMVrZlSo1Dulo67COCNrcRkJ+lRrC2PI3iRoOIlqw1Ljz4KFoSGyRudg/MLJ/YrQ+6zmNdz5ytdeThrZwHpPQ=="], + + "@react-aria/radio": ["@react-aria/radio@3.11.4", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/form": "^3.0.17", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/utils": "^3.29.1", "@react-stately/radio": "^3.10.14", "@react-types/radio": "^3.8.10", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-kxML2cuI4/5AlSSzOAwXVXoouvrICxGdWbs0ze0IHaGkw6p3oKa5By6I6tT0+8/Kxy6ZFeCL+l/PU6K/ysAdAA=="], + + "@react-aria/searchfield": ["@react-aria/searchfield@3.8.5", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/textfield": "^3.17.4", "@react-aria/utils": "^3.29.1", "@react-stately/searchfield": "^3.5.13", "@react-types/button": "^3.12.2", "@react-types/searchfield": "^3.6.3", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-HLHT2xc6USM/SbqFYz2gbREq7IcWfO+845ao/GCxy6Rx8eGD3OV09jgd+JlcSNJb2WiTpKhkSeX3wf7VgzPw2g=="], + + "@react-aria/select": ["@react-aria/select@3.15.6", "", { "dependencies": { "@react-aria/form": "^3.0.17", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/listbox": "^3.14.5", "@react-aria/menu": "^3.18.4", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-aria/visually-hidden": "^3.8.24", "@react-stately/select": "^3.6.14", "@react-types/button": "^3.12.2", "@react-types/select": "^3.9.13", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-r/XU5PJY/V8LTklaiO7n3BDG9gVg/Dp3p7IwgGCYUbLuF9+8yMh858teOEJr3FYKLPr/nZLZQE08oJuADkCLEw=="], + + "@react-aria/selection": ["@react-aria/selection@3.24.2", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/utils": "^3.29.1", "@react-stately/selection": "^3.20.3", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-YIdCYe1yXXfbZ0snUMWrQpOxtJO0+eHHp3+PSqZ/dyvLqMlTlYnOv2j5lc36sN0r1YWfN8OEpxzK3jHdD4M6yA=="], + + "@react-aria/separator": ["@react-aria/separator@3.4.10", "", { "dependencies": { "@react-aria/utils": "^3.29.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-T9hJpO6lfg6zHRbs5CZD0eZrWIIjN6LY+EC6X5pQJbJeq6HqviVSQx25q98K430S/EGwHRltY5Bwy+XwlMZfdA=="], + + "@react-aria/slider": ["@react-aria/slider@3.7.20", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/utils": "^3.29.1", "@react-stately/slider": "^3.6.5", "@react-types/shared": "^3.30.0", "@react-types/slider": "^3.7.12", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-ciRfI0ya89pm4R+2RE7vLhu5OjdsAQfzghVI5Eh5AHpwjajMJ41O4Vkyt2ci5KTcjwg80CFftAWmF02w2hKR5Q=="], + + "@react-aria/spinbutton": ["@react-aria/spinbutton@3.6.16", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/live-announcer": "^3.4.3", "@react-aria/utils": "^3.29.1", "@react-types/button": "^3.12.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Ko1e9GeQiiEXeR3IyPT8STS1Pw4k/1OBs9LqI3WKlHFwH5M8q3DbbaMOgekD41/CPVBKmCcqFM7K7Wu9kFrT2A=="], + + "@react-aria/ssr": ["@react-aria/ssr@3.9.9", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-2P5thfjfPy/np18e5wD4WPt8ydNXhij1jwA8oehxZTFqlgVMGXzcWKxTb4RtJrLFsqPO7RUQTiY8QJk0M4Vy2g=="], + + "@react-aria/switch": ["@react-aria/switch@3.7.4", "", { "dependencies": { "@react-aria/toggle": "^3.11.4", "@react-stately/toggle": "^3.8.5", "@react-types/shared": "^3.30.0", "@react-types/switch": "^3.5.12", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-6Ue6GXBGMPc5uNwu6A4XHOEK5n/3OmgW/kgCmFVi2dh4QqkASSdadaizS/2uENWfgKTlEpd0Wy3PSfpubL+hCg=="], + + "@react-aria/table": ["@react-aria/table@3.17.4", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/grid": "^3.14.1", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/live-announcer": "^3.4.3", "@react-aria/utils": "^3.29.1", "@react-aria/visually-hidden": "^3.8.24", "@react-stately/collections": "^3.12.5", "@react-stately/flags": "^3.1.2", "@react-stately/table": "^3.14.3", "@react-types/checkbox": "^3.9.5", "@react-types/grid": "^3.3.3", "@react-types/shared": "^3.30.0", "@react-types/table": "^3.13.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-zhqrt6Uk66wrgaIHrPUv3nguVMGMnPtqUmp0K2gibhNucN0iJ6zILoaq8vMmFH+9PmUqoiPJXq18czs2CluT6Q=="], + + "@react-aria/tabs": ["@react-aria/tabs@3.10.4", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/i18n": "^3.12.10", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-stately/tabs": "^3.8.3", "@react-types/shared": "^3.30.0", "@react-types/tabs": "^3.3.16", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-aXY83zqLStlf/v8vP2OvlrLsujCNWGqfL3hMVDF1PNqRJGllMejzkzbZNf4fUQDTX+e2zNDv6SH4IRJ4k9sKlw=="], + + "@react-aria/tag": ["@react-aria/tag@3.6.1", "", { "dependencies": { "@react-aria/gridlist": "^3.13.1", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-stately/list": "^3.12.3", "@react-types/button": "^3.12.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-oTEDqOejjltr64ADpgMA3eB/G4bJ2Y9TlQwW33l6XWAjtKKZScBhGrf9l10NTQphZf4QxMnucIHo8IV2eKSmjg=="], + + "@react-aria/textfield": ["@react-aria/textfield@3.17.4", "", { "dependencies": { "@react-aria/form": "^3.0.17", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/utils": "^3.29.1", "@react-stately/form": "^3.1.5", "@react-stately/utils": "^3.10.7", "@react-types/shared": "^3.30.0", "@react-types/textfield": "^3.12.3", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-dcQQKVgH/zv3wExcmpH7yMA2d4oPO3JF9L1HdwNvPHScnfbr404ZVEKjrIlxEvzq7V5yKky5q8171jmp+YOPyw=="], + + "@react-aria/toast": ["@react-aria/toast@3.0.4", "", { "dependencies": { "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/landmark": "^3.0.4", "@react-aria/utils": "^3.29.1", "@react-stately/toast": "^3.1.1", "@react-types/button": "^3.12.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-oH1WZfwdaryiggqxu1r1Jq1/fF8n9AVD3euamkJmXq5/t9IJUYLzct4w54QqjQ0KhtbHp+7n55QvvhZ9cW3XEg=="], + + "@react-aria/toggle": ["@react-aria/toggle@3.11.4", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/utils": "^3.29.1", "@react-stately/toggle": "^3.8.5", "@react-types/checkbox": "^3.9.5", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-RwWyFiM+dBsiulT1ziGdG5+cy/F/7hFVb1Ddyc90HNLqRuX2sAX3ysm0YmiiNpnHwGQR/kPd1ulTSqQ+ps9wiQ=="], + + "@react-aria/toolbar": ["@react-aria/toolbar@3.0.0-beta.17", "", { "dependencies": { "@react-aria/focus": "^3.20.4", "@react-aria/i18n": "^3.12.10", "@react-aria/utils": "^3.29.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-YGLDOATMla9Y7Yk2P8qK3zcTrxQClf2ZLS8Wj14RY4le/r6F2rGJqkGhVFPyoNAtwsRr4bzD7CGERe4NUAPrqQ=="], + + "@react-aria/tooltip": ["@react-aria/tooltip@3.8.4", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/utils": "^3.29.1", "@react-stately/tooltip": "^3.5.5", "@react-types/shared": "^3.30.0", "@react-types/tooltip": "^3.4.18", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-WwooDvXb64mGwZUZQj4tYcJEFSXLIxDywT97K9U4fLUhrNcQ8KdxdhPjyPOEXxscPfdJDyKKckhRiKl91UoKsg=="], + + "@react-aria/tree": ["@react-aria/tree@3.1.0", "", { "dependencies": { "@react-aria/gridlist": "^3.13.1", "@react-aria/i18n": "^3.12.10", "@react-aria/selection": "^3.24.2", "@react-aria/utils": "^3.29.1", "@react-stately/tree": "^3.9.0", "@react-types/button": "^3.12.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-GBg01P04fLY16ZHLYcP9nLGis2MGQSpiP8rMG0t5jqddJdx+v8IL28f9mcHw+NSRgZm28NHQThTkH31SUxXppQ=="], + + "@react-aria/utils": ["@react-aria/utils@3.29.1", "", { "dependencies": { "@react-aria/ssr": "^3.9.9", "@react-stately/flags": "^3.1.2", "@react-stately/utils": "^3.10.7", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-yXMFVJ73rbQ/yYE/49n5Uidjw7kh192WNN9PNQGV0Xoc7EJUlSOxqhnpHmYTyO0EotJ8fdM1fMH8durHjUSI8g=="], + + "@react-aria/visually-hidden": ["@react-aria/visually-hidden@3.8.24", "", { "dependencies": { "@react-aria/interactions": "^3.25.2", "@react-aria/utils": "^3.29.1", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-vhGhALs/PGdTs/7GD2hsy7CF1LBF9QlL57HkRSu8kfiuiA7rqRTqYg6q723OvaFsspj3DCxP2MLQhvvZSWe7Ng=="], + + "@react-hook/latest": ["@react-hook/latest@1.0.3", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg=="], + + "@react-hook/passive-layout-effect": ["@react-hook/passive-layout-effect@1.2.1", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg=="], + + "@react-hook/resize-observer": ["@react-hook/resize-observer@2.0.2", "", { "dependencies": { "@react-hook/latest": "^1.0.2", "@react-hook/passive-layout-effect": "^1.2.0" }, "peerDependencies": { "react": ">=18" } }, "sha512-tzKKzxNpfE5TWmxuv+5Ae3IF58n0FQgQaWJmcbYkjXTRZATXxClnTprQ2uuYygYTpu1pqbBskpwMpj6jpT1djA=="], + + "@react-stately/calendar": ["@react-stately/calendar@3.8.2", "", { "dependencies": { "@internationalized/date": "^3.8.2", "@react-stately/utils": "^3.10.7", "@react-types/calendar": "^3.7.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-IGSbTgCMiGYisQ+CwH31wek10UWvNZ1LVwhr0ZNkhDIRtj+p+FuLNtBnmT1CxTFe2Y4empAxyxNA0QSjQrOtvQ=="], + + "@react-stately/checkbox": ["@react-stately/checkbox@3.6.15", "", { "dependencies": { "@react-stately/form": "^3.1.5", "@react-stately/utils": "^3.10.7", "@react-types/checkbox": "^3.9.5", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-jt3Kzbk6heUMtAlCbUwnrEBknnzFhPBFMEZ00vff7VyhDXup7DJcJRxreloHepARZLIhLhC5QPyO5GS4YOHlvw=="], + + "@react-stately/collections": ["@react-stately/collections@3.12.5", "", { "dependencies": { "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-5SIb+6nF9cyu+WXqZ6io56BtdOu8FjSQQaaLCCpfAC6fc6zHRk8by0WreRmvJ5/Kn8oq2FNJtCNRvluM0Z01UA=="], + + "@react-stately/color": ["@react-stately/color@3.8.6", "", { "dependencies": { "@internationalized/number": "^3.6.3", "@internationalized/string": "^3.2.7", "@react-stately/form": "^3.1.5", "@react-stately/numberfield": "^3.9.13", "@react-stately/slider": "^3.6.5", "@react-stately/utils": "^3.10.7", "@react-types/color": "^3.0.6", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-KBpnXt31hCgdYq1a7PxUspK990/V5hPO4LqJ1K89p7r2t4OF66IBW5FmOS7KY6p1bGOoZgbk9m5w+yUeQq4wmw=="], + + "@react-stately/combobox": ["@react-stately/combobox@3.10.6", "", { "dependencies": { "@react-stately/collections": "^3.12.5", "@react-stately/form": "^3.1.5", "@react-stately/list": "^3.12.3", "@react-stately/overlays": "^3.6.17", "@react-stately/select": "^3.6.14", "@react-stately/utils": "^3.10.7", "@react-types/combobox": "^3.13.6", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-XOfG90MQPfPCNjl2KJOKuFFzx2ULlwnJ/QXl9zCQUtUBOExbFRHldj5E4NPcH14AVeYZX6DBn4GTS9ocOVbE7Q=="], + + "@react-stately/data": ["@react-stately/data@3.13.1", "", { "dependencies": { "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-hKEvHCM/nHM6FFJz3gT6Ms85H+qNhXfHDYP/TU7XiDoeVHzUpj2Yc3xGsIty6/K2k7jrblUj+LuKmdvidd9mug=="], + + "@react-stately/datepicker": ["@react-stately/datepicker@3.14.2", "", { "dependencies": { "@internationalized/date": "^3.8.2", "@internationalized/string": "^3.2.7", "@react-stately/form": "^3.1.5", "@react-stately/overlays": "^3.6.17", "@react-stately/utils": "^3.10.7", "@react-types/datepicker": "^3.12.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-KvOUFz/o+hNIb7oCli6nxBdDurbGjRjye6U99GEYAx6timXOjiIJvtKQyqCLRowGYtCS6GH41yM6DhJ2MlMF8w=="], + + "@react-stately/disclosure": ["@react-stately/disclosure@3.0.5", "", { "dependencies": { "@react-stately/utils": "^3.10.7", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Rh+y+XAUNwyFvvzBS/MtFvdWHC38mXI99S6mdNe3e5Og8IZxLBDtvwBCzrT30YzYqN40yd3alm9xLzpYXsvYYA=="], + + "@react-stately/dnd": ["@react-stately/dnd@3.6.0", "", { "dependencies": { "@react-stately/selection": "^3.20.3", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-H0zWOjjoocM+8r5rJ2x0B66NXZd2+7lF1zhomoMoR5+57DA5hWZTY0tht21DKjNoFk4f96Ythh0jRLziQbSkBw=="], + + "@react-stately/flags": ["@react-stately/flags@3.1.2", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg=="], + + "@react-stately/form": ["@react-stately/form@3.1.5", "", { "dependencies": { "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-wOs0SVXFgNr1aIdywiNH1MhxrFlN5YxBr1k9y3Z7lX+pc/MGRJFTgfDDw5JDxvwLH9joJ9ciniCdWep9L/TqcQ=="], + + "@react-stately/grid": ["@react-stately/grid@3.11.3", "", { "dependencies": { "@react-stately/collections": "^3.12.5", "@react-stately/selection": "^3.20.3", "@react-types/grid": "^3.3.3", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/YurYfPARtgsgS5f8rklB7ZQu6MWLdpfTHuwOELEUZ4L52S2gGA5VfLxDnAsHHnu5XHFI3ScuYLAvjWN0rgs/Q=="], + + "@react-stately/list": ["@react-stately/list@3.12.3", "", { "dependencies": { "@react-stately/collections": "^3.12.5", "@react-stately/selection": "^3.20.3", "@react-stately/utils": "^3.10.7", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-RiqYyxPYAF3YRBEin8/WHC8/hvpZ/fG1Tx3h1W4aXU5zTIBuy0DrjRKePwP90oCiDpztgRXePLlzhgWeKvJEow=="], + + "@react-stately/menu": ["@react-stately/menu@3.9.5", "", { "dependencies": { "@react-stately/overlays": "^3.6.17", "@react-types/menu": "^3.10.2", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Y+PqHBaQToo6ooCB4i4RoNfRiHbd4iozmLWePBrF4d/zBzJ9p+/5O6XIWFxLw4O128Tg3tSMGuwrxfecPDYHzA=="], + + "@react-stately/numberfield": ["@react-stately/numberfield@3.9.13", "", { "dependencies": { "@internationalized/number": "^3.6.3", "@react-stately/form": "^3.1.5", "@react-stately/utils": "^3.10.7", "@react-types/numberfield": "^3.8.12", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FWbbL4E3+5uctPGVtDwHzeNXgyFw0D3glOJhgW1QHPn3qIswusn0z/NjFSuCVOSpri8BZYIrTPUQHpRJPnjgRw=="], + + "@react-stately/overlays": ["@react-stately/overlays@3.6.17", "", { "dependencies": { "@react-stately/utils": "^3.10.7", "@react-types/overlays": "^3.8.16", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-bkGYU4NPC/LgX9OGHLG8hpf9QDoazlb6fKfD+b5o7GtOdctBqCR287T/IBOQyvHqpySqrQ8XlyaGxJPGIcCiZw=="], + + "@react-stately/radio": ["@react-stately/radio@3.10.14", "", { "dependencies": { "@react-stately/form": "^3.1.5", "@react-stately/utils": "^3.10.7", "@react-types/radio": "^3.8.10", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Y7xizUWJ0YJ8pEtqMeKOibX21B5dk56fHgMHXYLeUEm43y5muWQft2YvP0/n4mlkP2Isbk96kPbv7/ez3Gi+lA=="], + + "@react-stately/searchfield": ["@react-stately/searchfield@3.5.13", "", { "dependencies": { "@react-stately/utils": "^3.10.7", "@react-types/searchfield": "^3.6.3", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-JNvsnvK6A1057hQREHabRYAAtwj2vl20oqGBvl1IleKlFe3KInV9WBY5l6zR3RXrnCPHVvJuzGe2R7+g142Mnw=="], + + "@react-stately/select": ["@react-stately/select@3.6.14", "", { "dependencies": { "@react-stately/form": "^3.1.5", "@react-stately/list": "^3.12.3", "@react-stately/overlays": "^3.6.17", "@react-types/select": "^3.9.13", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-HvbL9iMGwbev0FR6PzivhjKEcXADgcJC/IzUkLqPfg4KKMuYhM/XvbJjWXn/QpD3/XT+A5+r5ExUHu7wiDP93w=="], + + "@react-stately/selection": ["@react-stately/selection@3.20.3", "", { "dependencies": { "@react-stately/collections": "^3.12.5", "@react-stately/utils": "^3.10.7", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-TLyjodgFHn5fynQnRmZ5YX1HRY0KC7XBW0Nf2+q9mWk4gUxYm7RVXyYZvMIG1iKqinPYtySPRHdNzyXq9P9sxQ=="], + + "@react-stately/slider": ["@react-stately/slider@3.6.5", "", { "dependencies": { "@react-stately/utils": "^3.10.7", "@react-types/shared": "^3.30.0", "@react-types/slider": "^3.7.12", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-XnHSHbXeHiE5J7nsXQvlXaKaNn1Z4jO1aQyiZsolK1NXW6VMKVeAgZUBG45k7xQW06aRbjREMmiIz02mW8fajQ=="], + + "@react-stately/table": ["@react-stately/table@3.14.3", "", { "dependencies": { "@react-stately/collections": "^3.12.5", "@react-stately/flags": "^3.1.2", "@react-stately/grid": "^3.11.3", "@react-stately/selection": "^3.20.3", "@react-stately/utils": "^3.10.7", "@react-types/grid": "^3.3.3", "@react-types/shared": "^3.30.0", "@react-types/table": "^3.13.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-PwE5pCplLSDckvgmNLVaHyQyX04A62kxdouFh1dVHeGEPfOYsO9WhvyisLxbH7X8Dbveheq/tSTelYDi6LXEJA=="], + + "@react-stately/tabs": ["@react-stately/tabs@3.8.3", "", { "dependencies": { "@react-stately/list": "^3.12.3", "@react-types/shared": "^3.30.0", "@react-types/tabs": "^3.3.16", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FujQCHppXyeHs2v5FESekxodsBJ5T0k1f7sm0ViNYqgrnE5XwqX8Y4/tdr0fqGF6S+BBllH+Q9yKWipDc6OM8g=="], + + "@react-stately/toast": ["@react-stately/toast@3.1.1", "", { "dependencies": { "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-W4a6xcsFt/E+aHmR2eZK+/p7Y5rdyXSCQ5gKSnbck+S3lijEWAyV45Mv8v95CQqu0bQijj6sy2Js1szq10HVwg=="], + + "@react-stately/toggle": ["@react-stately/toggle@3.8.5", "", { "dependencies": { "@react-stately/utils": "^3.10.7", "@react-types/checkbox": "^3.9.5", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-BSvuTDVFzIKxpNg9Slf+RdGpva7kBO8xYaec2TW9m6Ag9AOmiDwUzzDAO0DRsc7ArSaLLFaQ/pdmmT6TxAUQIA=="], + + "@react-stately/tooltip": ["@react-stately/tooltip@3.5.5", "", { "dependencies": { "@react-stately/overlays": "^3.6.17", "@react-types/tooltip": "^3.4.18", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/zbl7YxneGDGGzdMPSEYUKsnVRGgvsr80ZjQYBHL82N4tzvtkRwmzvzN9ipAtza+0jmeftt3N+YSyxvizVbeKA=="], + + "@react-stately/tree": ["@react-stately/tree@3.9.0", "", { "dependencies": { "@react-stately/collections": "^3.12.5", "@react-stately/selection": "^3.20.3", "@react-stately/utils": "^3.10.7", "@react-types/shared": "^3.30.0", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-VpWAh36tbMHJ1CtglPQ81KPdpCfqFz9yAC6nQuL1x6Tmbs9vNEKloGILMI9/4qLzC+3nhCVJj6hN+xqS5/cMTg=="], + + "@react-stately/utils": ["@react-stately/utils@3.10.7", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-cWvjGAocvy4abO9zbr6PW6taHgF24Mwy/LbQ4TC4Aq3tKdKDntxyD+sh7AkSRfJRT2ccMVaHVv2+FfHThd3PKQ=="], + + "@react-types/breadcrumbs": ["@react-types/breadcrumbs@3.7.14", "", { "dependencies": { "@react-types/link": "^3.6.2", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-SbLjrKKupzCLbqHZIQYtQvtsXN53NPxOYyug6QfC4d7DcW1Q9wJ546fxb10Y83ftAJMMUHTatI6SenJVoqyUdA=="], + + "@react-types/button": ["@react-types/button@3.12.2", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-QLoSCX8E7NFIdkVMa65TPieve0rKeltfcIxiMtrphjfNn+83L0IHMcbhjf4r4W19c/zqGbw3E53Hx8mNukoTUw=="], + + "@react-types/calendar": ["@react-types/calendar@3.7.2", "", { "dependencies": { "@internationalized/date": "^3.8.2", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Bp6fZo52fZdUjYbtJXcaLQ0jWEOeSoyZVwNyN5G6BmPyLP5nHxMPF+R1MPFR0fdpSI4/Sk78gWzoTuU5eOVQLw=="], + + "@react-types/checkbox": ["@react-types/checkbox@3.9.5", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-9y8zeGWT2xZ38/YC/rNd05pPV8W8vmqFygCpZFaa6dJeOsMgPU+rq+Ifh1G+34D/qGoZXQBzeCSCAKSNPaL7uw=="], + + "@react-types/color": ["@react-types/color@3.0.6", "", { "dependencies": { "@react-types/shared": "^3.30.0", "@react-types/slider": "^3.7.12" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-ZbbgzAWK56RMMZzRGhTAB9Fz9PGnj6ctc6VMqOyumCOF9NKkYgI0E2ssTY/iOXBazZvhhhGahbGl+kjmgWvS6g=="], + + "@react-types/combobox": ["@react-types/combobox@3.13.6", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-BOvlyoVtmQJLYtNt4w6RvRORqK4eawW48CcQIR93BU5YFcAGhpcvpjhTZXknSXumabpo1/XQKX4NOuXpfUZrAQ=="], + + "@react-types/datepicker": ["@react-types/datepicker@3.12.2", "", { "dependencies": { "@internationalized/date": "^3.8.2", "@react-types/calendar": "^3.7.2", "@react-types/overlays": "^3.8.16", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-w3JIXZLLZ15zjrAjlnflmCXkNDmIelcaChhmslTVWCf0lUpgu1cUC4WAaS71rOgU03SCcrtQ0K9TsYfhnhhL7Q=="], + + "@react-types/dialog": ["@react-types/dialog@3.5.19", "", { "dependencies": { "@react-types/overlays": "^3.8.16", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-+FIyFnoKIGNL20zG8Sye7rrRxmt5HoeaCaHhDCTtNtv8CZEhm3Z+kNd4gylgWAxZRhDtBRWko+ADqfN5gQrgKg=="], + + "@react-types/grid": ["@react-types/grid@3.3.3", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-VZAKO3XISc/3+a+DZ+hUx2NB/buOe2Ui2nISutv25foeXX4+YpWj5lXS74lJUCuVsSz6D6yoWvEajeUCYrNOxg=="], + + "@react-types/link": ["@react-types/link@3.6.2", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-CtCexoupcaFHJdVPRUpJ83uxK1U0bd9x9DhwRFMqqfPHufICkQkETIw2KIeZXRvMUMi2CSG/81XXy6K0K1MtNw=="], + + "@react-types/listbox": ["@react-types/listbox@3.7.1", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-WiCihJJpVWVEUxxZjhTbnG3Zq3q38XylKnvNelkVHbF+Y3+SXWN0Yyhk43J642G/d87lw1t60Tor0k96eaz4vw=="], + + "@react-types/menu": ["@react-types/menu@3.10.2", "", { "dependencies": { "@react-types/overlays": "^3.8.16", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-TVQFGttaNCcIvy1MKavb9ZihJmng46uUtVF9oTG/VI/C4YEdzekteI6iSsXbjv5ZAvOKQR+S25IWCbK2W0YCjQ=="], + + "@react-types/meter": ["@react-types/meter@3.4.10", "", { "dependencies": { "@react-types/progress": "^3.5.13" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-soimx+MAngG5MjQplJNB9erPh+P3Er764PqGA75L6FFmf2KhgzMniSVAqyVOpZu7G3qK4O+ihMAYXf6pQMBkSg=="], + + "@react-types/numberfield": ["@react-types/numberfield@3.8.12", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-cI0Grj+iW5840gV80t7aXt7FZPbxMZufjuAop5taHe6RlHuLuODfz5n3kyu/NPHabruF26mVEu0BfIrwZyy+VQ=="], + + "@react-types/overlays": ["@react-types/overlays@3.8.16", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Aj9jIFwALk9LiOV/s3rVie+vr5qWfaJp/6aGOuc2StSNDTHvj1urSAr3T0bT8wDlkrqnlS4JjEGE40ypfOkbAA=="], + + "@react-types/progress": ["@react-types/progress@3.5.13", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-+4v++AP2xxYxjrTkIXlWWGUhPPIEBzyg76EW0SHKnD4pXxKigcIXEzRbxy62SMidTVdi7jh3tuicIP8OQxJ4cA=="], + + "@react-types/radio": ["@react-types/radio@3.8.10", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-hLOu2CXxzxQqkEkXSM71jEJMnU5HvSzwQ+DbJISDjgfgAKvZZHMQX94Fht2Vj+402OdI77esl3pJ1tlSLyV5VQ=="], + + "@react-types/searchfield": ["@react-types/searchfield@3.6.3", "", { "dependencies": { "@react-types/shared": "^3.30.0", "@react-types/textfield": "^3.12.3" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Uua7TYKR1QcJE2F4SAewxuxt8k8gd52zul2q5oMe5azsm2uoAtV/qpNHc7dfPAR97UgbrE/aNMlX57PEubiuLg=="], + + "@react-types/select": ["@react-types/select@3.9.13", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-R7zwck353RV60gZimZ8pDKaj50aEtGzU8gk0jC3aBkfzSUKFJ6jq1DJdqyVQSwXdmPDd9iuketeIUIpEO2teoA=="], + + "@react-types/shared": ["@react-types/shared@3.30.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-COIazDAx1ncDg046cTJ8SFYsX8aS3lB/08LDnbkH/SkdYrFPWDlXMrO/sUam8j1WWM+PJ+4d1mj7tODIKNiFog=="], + + "@react-types/slider": ["@react-types/slider@3.7.12", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-kOQLrENLpQzmu6TfavdW1yfEc8VPitT4ZNMKOK0h7x3LskEWjptxcZ4IBowEpqHwk0eMbI9lRE/3tsShGUoLwQ=="], + + "@react-types/switch": ["@react-types/switch@3.5.12", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-6Zz7i+L9k8zw2c3nO8XErxuIy7JVDptz1NTZMiUeyDtLmQnvEKnKPKNjo2j+C/OngtJqAPowC3xRvMXbSAcYqA=="], + + "@react-types/table": ["@react-types/table@3.13.1", "", { "dependencies": { "@react-types/grid": "^3.3.3", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-fLPRXrZoplAGMjqxHVLMt7lB0qsiu1WHZmhKtroCEhTYwnLQKL84XFH4GV1sQgQ1GIShl3BUqWzrawU5tEaQkw=="], + + "@react-types/tabs": ["@react-types/tabs@3.3.16", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-z6AWq243EahGuT4PhIpJXZbFez6XhFWb4KwhSB2CqzHkG5bJJSgKYzIcNuBCLDxO7Qg25I+VpFJxGj+aqKFbzQ=="], + + "@react-types/textfield": ["@react-types/textfield@3.12.3", "", { "dependencies": { "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-72tt2GJSyVFPPqZLrlfWqVn5KRnWzXsXCZ3IDawcGunl4pu+2E24jd0CWN9kOi0ETO65flj2sljeytxKytXnlA=="], + + "@react-types/tooltip": ["@react-types/tooltip@3.4.18", "", { "dependencies": { "@react-types/overlays": "^3.8.16", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/eG8hiW0D4vaCqGDa4ttb+Jnbiz6nUr5+f+LRgz3AnIkdjS9eOhpn6vXMX4hkNgcN5FGfA4Uu1C1QdM6W97Kfw=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.9", "", {}, "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.41.2", "", { "os": "android", "cpu": "arm" }, "sha512-YvIQXGGDzbOpkLuFcjGs+aiAi38D8FCyJanIdlcV2m9DWMJpHTSY8L9piO93VHBLRoe8O9C/FiycjnJ8+aP1tg=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.41.2", "", { "os": "android", "cpu": "arm64" }, "sha512-8AVWhLnN9FteevGP+9pj/Y79vqE9TdziZTe5XkN5Z9+9QY7TEBbr4iz2te8/vXbLSLEdmaQx+o2GWXrLXDKGPg=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.41.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-w/idsvFiipvVGDcXKu1pdiIEnh9V63NPjpo5E48BbbrhUzEQthVXylKjYKj9lgX+89Ao36BxArkKPxxs7aXn3g=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.41.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oNUD4Kywoild1lsuUu1jydg3+IdQbyg4JNZb1+3Voh/revkYxMqMl4a/sZw5z+BSgFbXK6rR0RGutnHO8QS53g=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.41.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yKXgW9UF2f78/PaSAFgDJbrLB/aETxH98jJFIpqESLyhyRmEqZl1dqAoy0IigJJZdwP+ZJdLw2isKiwb1wAqcA=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.41.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-ye4rQ80/fAIcUyIil7S/IzGpHvlPUoZvUQSq0OmU+LXb/I9E5Brh7PKJ/K0plsLCQx9Hx01526Uf4Iy8RqmLJw=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.41.2", "", { "os": "linux", "cpu": "arm" }, "sha512-q2aqiDKNKNj9jG/6JIHakx1hmj6A8bxc3U6rpZjL8znx3O4OGpPJcyEiJSxmFd8olpjfRezh7PONU+3RTQmj0A=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.41.2", "", { "os": "linux", "cpu": "arm" }, "sha512-qDtvGRNcj2SCY+XFV24s6/vOV46fktFa3/AtedKLVJZdO/WGyOtDDq2zF7nNGhzJa0Tx7bvJ92z9PjjF7nKbBg=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.41.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Cg1ywrBHMMCj4Il0QdcVamt5UK9HQ1ntNUXzhAw4yZ2rTJGFkjnkYyEPEpunb1L9orm+g0kvtZUydShTtLUNkA=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.41.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-FxPrm21SE2/p+L/Qy2P6zPPWtbKRunZ71ChHXuZu6b//zOeDYCF7kbXiGdE7ZJgUvboLx8lQtov4jsz04zdmiw=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.41.2", "", { "os": "linux", "cpu": "none" }, "sha512-Bp2BYb+QWgefn2e8DblGUzejLEyhtG0DnIcSMzAzFtBK33ITvzLM9B8maTHPoy7Cx7XdxEb7l0iNKQAXBZ1NOw=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.41.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1DmJwH0PPRPjVwUGHINP1YiH7fO25mhpf2B5N8ubBQdOjEVTRI0x69m8eJGoUSLISoW0kgPX2zTAiHc4zllQ/g=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.41.2", "", { "os": "linux", "cpu": "none" }, "sha512-/9TBJIyoervs137gteTbzOSsIc/Io6xnXvjXYTEEqDRi3a9OokdBwfllN8AmPFGcU+WzoAiTc6n9SJiPohJ3CQ=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.41.2", "", { "os": "linux", "cpu": "none" }, "sha512-qqwpXqu6mV6Vm+EsU2NQk/xLiQfCv+NYmYNCYF8FFIf7kzlHvDoqiNaqqOw0hAr8O5nRBQO+H6X4qEw4Y/0b8w=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.41.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-j5oHqcj58pDqN3+CeJdTB3NfHipxIxVIH24VkRlVVhs9jJXks1ovtO4Tf6YxlBzf44ZTx9D2uhO9DZttC/wgUA=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.41.2", "", { "os": "linux", "cpu": "x64" }, "sha512-F3fxs7ajUNny4z1TsprdWB9gg8QRwSNSSILVfTmG8rXdeUFWuHEf3Uf5ltrdii8CkzZS3kD/VFPdNVdH3BOpIA=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.41.2", "", { "os": "linux", "cpu": "x64" }, "sha512-2S74RTJ1lJeiX+HSCxlLD/6Z6ndu9/+Huf8kYrI2XTCztFosOWsjPt+aD4cxBG1JTWjoiRYtutc8HABruppFQQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.41.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-LOXSg8GprvL36erslsrNEUirlxy28JcuyTH5PYSBj8wwa0gDQlR8sZricFRbZGCzLhFixvmW2ozj7Mi+j023sg=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.41.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-PFhMLaWu0lFziS+buQIJ+YGaifkABS2TGtmeuPRrPO8JKcG17sDSNj358otAP45gIzRWd4o9QM8R+DurDWJgTA=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.41.2", "", { "os": "win32", "cpu": "x64" }, "sha512-AQ5GvrrLYw6dfkfT/bgYg1NU54exCKDrO9JKOE87zy2mdf2CyI6Vayy41r8Vo+kNDpqacaVQppwvYl30YGJu/Q=="], + + "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], + + "@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], + + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA=="], + + "@shikijs/langs": ["@shikijs/langs@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ=="], + + "@shikijs/themes": ["@shikijs/themes@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g=="], + + "@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.9", "", { "dependencies": { "@tanstack/virtual-core": "3.13.9" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-SPWC8kwG/dWBf7Py7cfheAPOxuvIv4fFQ54PdmYbg7CpXfsKxkucak43Q0qKsxVthhUJQ1A7CIMAIplq4BjVwA=="], + + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.9", "", {}, "sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/file-saver": ["@types/file-saver@2.0.7", "", {}, "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], + + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/react": ["@types/react@19.1.6", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q=="], + + "@types/react-dom": ["@types/react-dom@19.1.6", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw=="], + + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.33.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.33.1", "@typescript-eslint/type-utils": "8.33.1", "@typescript-eslint/utils": "8.33.1", "@typescript-eslint/visitor-keys": "8.33.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.33.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.33.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.33.1", "@typescript-eslint/types": "8.33.1", "@typescript-eslint/typescript-estree": "8.33.1", "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.33.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.33.1", "@typescript-eslint/types": "^8.33.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.33.1", "", { "dependencies": { "@typescript-eslint/types": "8.33.1", "@typescript-eslint/visitor-keys": "8.33.1" } }, "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.33.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.33.1", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.33.1", "@typescript-eslint/utils": "8.33.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.33.1", "", {}, "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.33.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.33.1", "@typescript-eslint/tsconfig-utils": "8.33.1", "@typescript-eslint/types": "8.33.1", "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.33.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.33.1", "@typescript-eslint/types": "8.33.1", "@typescript-eslint/typescript-estree": "8.33.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.33.1", "", { "dependencies": { "@typescript-eslint/types": "8.33.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ=="], + + "@uiw/codemirror-extensions-basic-setup": ["@uiw/codemirror-extensions-basic-setup@4.23.12", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" }, "peerDependencies": { "@codemirror/autocomplete": ">=6.0.0", "@codemirror/commands": ">=6.0.0", "@codemirror/language": ">=6.0.0", "@codemirror/lint": ">=6.0.0", "@codemirror/search": ">=6.0.0", "@codemirror/state": ">=6.0.0", "@codemirror/view": ">=6.0.0" } }, "sha512-l9vuiXOTFDBetYrRLDmz3jDxQHDsrVAZ2Y6dVfmrqi2AsulsDu+y7csW0JsvaMqo79rYkaIZg8yeqmDgMb7VyQ=="], + + "@uiw/react-codemirror": ["@uiw/react-codemirror@4.23.12", "", { "dependencies": { "@babel/runtime": "^7.18.6", "@codemirror/commands": "^6.1.0", "@codemirror/state": "^6.1.1", "@codemirror/theme-one-dark": "^6.0.0", "@uiw/codemirror-extensions-basic-setup": "4.23.12", "codemirror": "^6.0.0" }, "peerDependencies": { "@babel/runtime": ">=7.11.0", "@codemirror/state": ">=6.0.0", "@codemirror/theme-one-dark": ">=6.0.0", "@codemirror/view": ">=6.0.0", "codemirror": ">=6.0.0", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yseqWdzoAAGAW7i/NiU8YrfSLVOEBjQvSx1KpDTFVV/nn0AlAZoDVTIPEBgdXrPlVUQoCrwgpEaj3uZCklk9QA=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.5.1", "", { "dependencies": { "@babel/core": "^7.26.10", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@rolldown/pluginutils": "1.0.0-beta.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, "sha512-uPZBqSI0YD4lpkIru6M35sIfylLGTyhGHvDZbNLuMA73lMlwJKz5xweH7FajfcCAc2HnINciejA9qTz0dr0M7A=="], + + "acorn": ["acorn@8.14.1", "", { "bin": "bin/acorn" }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + + "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="], + + "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="], + + "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="], + + "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], + + "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], + + "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="], + + "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + + "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64-arraybuffer": ["base64-arraybuffer@1.0.2", "", {}, "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.25.0", "", { "dependencies": { "caniuse-lite": "^1.0.30001718", "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": "cli.js" }, "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001721", "", {}, "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ=="], + + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "codemirror": ["codemirror@6.0.1", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "css-line-break": ["css-line-break@2.1.0", "", { "dependencies": { "utrie": "^1.0.2" } }, "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], + + "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], + + "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], + + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + + "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], + + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], + + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.165", "", {}, "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw=="], + + "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "emoji-regex-xs": ["emoji-regex-xs@1.0.0", "", {}, "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="], + + "entities": ["entities@6.0.0", "", {}, "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw=="], + + "es-abstract": ["es-abstract@1.24.0", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-iterator-helpers": ["es-iterator-helpers@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.4", "safe-array-concat": "^1.1.3" } }, "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], + + "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + + "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": "bin/esbuild" }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], + + "esbuild-wasm": ["esbuild-wasm@0.25.8", "", { "bin": { "esbuild": "bin/esbuild" } }, "sha512-VFUDMoZdf/NsyCepv5heZqvNLYj9HL+xEKG5tktsFbx+shR8Dt9MchKBEdu/5the2RfTzgxkO6B/nUfzmsWN9Q=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.28.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.28.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "bin": "bin/eslint.js" }, "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ=="], + + "eslint-config-prettier": ["eslint-config-prettier@10.1.5", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": "bin/cli.js" }, "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw=="], + + "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], + + "eslint-module-utils": ["eslint-module-utils@2.12.0", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg=="], + + "eslint-plugin-import": ["eslint-plugin-import@2.31.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A=="], + + "eslint-plugin-prettier": ["eslint-plugin-prettier@5.4.1", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.7" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint"] }, "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg=="], + + "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], + + "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], + + "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.20", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA=="], + + "eslint-scope": ["eslint-scope@8.3.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="], + + "espree": ["espree@10.3.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.0" } }, "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg=="], + + "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-diff": ["fast-diff@1.3.0", "", {}, "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "fdir": ["fdir@6.4.5", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "file-saver": ["file-saver@2.0.5", "", {}, "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "framer-motion": ["framer-motion@12.16.0", "", { "dependencies": { "motion-dom": "^12.16.0", "motion-utils": "^12.12.1", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid"] }, "sha512-xryrmD4jSBQrS2IkMdcTmiS4aSKckbS7kLDCuhUn9110SQKG1w3zlq1RTqCblewg+ZYe+m3sdtzQA6cRwo5g8Q=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], + + "gifuct-js": ["gifuct-js@2.1.2", "", { "dependencies": { "js-binary-schema-parser": "^2.0.3" } }, "sha512-rI2asw77u0mGgwhV3qA+OEgYqaDn5UNqgs+Bx0FGwSpuqfYn+Ir6RQY5ENNQ8SbIiG/m5gVa7CD5RriO4f4Lsg=="], + + "glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": "dist/esm/bin.mjs" }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "globals": ["globals@15.15.0", "", {}, "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="], + + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + + "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "html-dom-parser": ["html-dom-parser@5.1.1", "", { "dependencies": { "domhandler": "5.0.3", "htmlparser2": "10.0.0" } }, "sha512-+o4Y4Z0CLuyemeccvGN4bAO20aauB2N9tFEAep5x4OW34kV4PTarBHm6RL02afYt2BMKcr0D2Agep8S3nJPIBg=="], + + "html-react-parser": ["html-react-parser@5.2.5", "", { "dependencies": { "domhandler": "5.0.3", "html-dom-parser": "5.1.1", "react-property": "2.0.2", "style-to-js": "1.1.16" }, "peerDependencies": { "@types/react": "0.14 || 15 || 16 || 17 || 18 || 19", "react": "0.14 || 15 || 16 || 17 || 18 || 19" } }, "sha512-bRPdv8KTqG9CEQPMNGksDqmbiRfVQeOidry8pVetdh/1jQ1Edx4KX5m0lWvDD89Pt4CqTYjK1BLz6NoNVxN/Uw=="], + + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + + "html2canvas-pro": ["html2canvas-pro@1.5.11", "", { "dependencies": { "css-line-break": "^2.1.0", "text-segmentation": "^1.0.3" } }, "sha512-W4pEeKLG8+9a54RDOSiEKq7gRXXDzt0ORMaLXX+l6a3urSKbmnkmyzcRDCtgTOzmHLaZTLG2wiTQMJqKLlSh3w=="], + + "htmlparser2": ["htmlparser2@10.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.1", "entities": "^6.0.0" } }, "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "inline-style-parser": ["inline-style-parser@0.2.4", "", {}, "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="], + + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + + "intl-messageformat": ["intl-messageformat@10.7.16", "", { "dependencies": { "@formatjs/ecma402-abstract": "2.3.4", "@formatjs/fast-memoize": "2.2.7", "@formatjs/icu-messageformat-parser": "2.11.2", "tslib": "^2.8.0" } }, "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug=="], + + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + + "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], + + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], + + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + + "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + + "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], + + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], + + "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "jiti": ["jiti@1.21.7", "", { "bin": "bin/jiti.js" }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], + + "js-binary-schema-parser": ["js-binary-schema-parser@2.0.3", "", {}, "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": "bin/jsesc" }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json5": ["json5@2.2.3", "", { "bin": "lib/cli.js" }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], + + "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], + + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": "cli.js" }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "motion": ["motion@12.16.0", "", { "dependencies": { "framer-motion": "^12.16.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid"] }, "sha512-P3HA83fnPMEGBLfKdD5vDdjH1Aa3wM3jT3+HX3fCVpy/4/lJiqvABajLgZenBu+rzkFzmeaPkvT7ouf9Tq5tVQ=="], + + "motion-dom": ["motion-dom@12.16.0", "", { "dependencies": { "motion-utils": "^12.12.1" } }, "sha512-Z2nGwWrrdH4egLEtgYMCEN4V2qQt1qxlKy/uV7w691ztyA41Q5Rbn0KNGbsNVDZr9E8PD2IOQ3hSccRnB6xWzw=="], + + "motion-utils": ["motion-utils@12.12.1", "", {}, "sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + + "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], + + "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], + + "object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="], + + "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "oniguruma-to-es": ["oniguruma-to-es@2.3.0", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.1.1", "regex-recursion": "^5.1.1" } }, "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], + + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "postcss": ["postcss@8.5.4", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w=="], + + "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], + + "postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="], + + "postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + + "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "prettier": ["prettier@3.5.3", "", { "bin": "bin/prettier.cjs" }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], + + "prettier-linter-helpers": ["prettier-linter-helpers@1.0.0", "", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="], + + "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.6.12", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-import-sort", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-style-order", "prettier-plugin-svelte"] }, "sha512-OuTQKoqNwV7RnxTPwXWzOFXy6Jc4z8oeRZYGuMpRyG3WbuR3jjXdQFK8qFBMBx8UHWdHrddARz2fgUenild6aw=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], + + "react-aria": ["react-aria@3.41.0", "", { "dependencies": { "@internationalized/string": "^3.2.7", "@react-aria/breadcrumbs": "^3.5.25", "@react-aria/button": "^3.13.2", "@react-aria/calendar": "^3.8.2", "@react-aria/checkbox": "^3.15.6", "@react-aria/color": "^3.0.8", "@react-aria/combobox": "^3.12.4", "@react-aria/datepicker": "^3.14.4", "@react-aria/dialog": "^3.5.26", "@react-aria/disclosure": "^3.0.6", "@react-aria/dnd": "^3.10.0", "@react-aria/focus": "^3.20.4", "@react-aria/gridlist": "^3.13.1", "@react-aria/i18n": "^3.12.10", "@react-aria/interactions": "^3.25.2", "@react-aria/label": "^3.7.19", "@react-aria/landmark": "^3.0.4", "@react-aria/link": "^3.8.2", "@react-aria/listbox": "^3.14.5", "@react-aria/menu": "^3.18.4", "@react-aria/meter": "^3.4.24", "@react-aria/numberfield": "^3.11.15", "@react-aria/overlays": "^3.27.2", "@react-aria/progress": "^3.4.24", "@react-aria/radio": "^3.11.4", "@react-aria/searchfield": "^3.8.5", "@react-aria/select": "^3.15.6", "@react-aria/selection": "^3.24.2", "@react-aria/separator": "^3.4.10", "@react-aria/slider": "^3.7.20", "@react-aria/ssr": "^3.9.9", "@react-aria/switch": "^3.7.4", "@react-aria/table": "^3.17.4", "@react-aria/tabs": "^3.10.4", "@react-aria/tag": "^3.6.1", "@react-aria/textfield": "^3.17.4", "@react-aria/toast": "^3.0.4", "@react-aria/tooltip": "^3.8.4", "@react-aria/tree": "^3.1.0", "@react-aria/utils": "^3.29.1", "@react-aria/visually-hidden": "^3.8.24", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-jg4aUQrsBTwgKitXlyLvEVSigzn79jNpgDP+mrrDIX8emzr+BBXx1x6WSVHDAESep72Xcp+zr9PbLmBCk3/nzQ=="], + + "react-dom": ["react-dom@19.1.0", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="], + + "react-hotkeys-hook": ["react-hotkeys-hook@4.6.2", "", { "peerDependencies": { "react": ">=16.8.1", "react-dom": ">=16.8.1" } }, "sha512-FmP+ZriY3EG59Ug/lxNfrObCnW9xQShgk7Nb83+CkpfkcCpfS95ydv+E9JuXA5cp8KtskU7LGlIARpkc92X22Q=="], + + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + + "react-property": ["react-property@2.0.2", "", {}, "sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug=="], + + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + + "react-stately": ["react-stately@3.39.0", "", { "dependencies": { "@react-stately/calendar": "^3.8.2", "@react-stately/checkbox": "^3.6.15", "@react-stately/collections": "^3.12.5", "@react-stately/color": "^3.8.6", "@react-stately/combobox": "^3.10.6", "@react-stately/data": "^3.13.1", "@react-stately/datepicker": "^3.14.2", "@react-stately/disclosure": "^3.0.5", "@react-stately/dnd": "^3.6.0", "@react-stately/form": "^3.1.5", "@react-stately/list": "^3.12.3", "@react-stately/menu": "^3.9.5", "@react-stately/numberfield": "^3.9.13", "@react-stately/overlays": "^3.6.17", "@react-stately/radio": "^3.10.14", "@react-stately/searchfield": "^3.5.13", "@react-stately/select": "^3.6.14", "@react-stately/selection": "^3.20.3", "@react-stately/slider": "^3.6.5", "@react-stately/table": "^3.14.3", "@react-stately/tabs": "^3.8.3", "@react-stately/toast": "^3.1.1", "@react-stately/toggle": "^3.8.5", "@react-stately/tooltip": "^3.5.5", "@react-stately/tree": "^3.9.0", "@react-types/shared": "^3.30.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/8JC3Tmj7G8fHn47F88c6t5kFNhQAufwqjEKxYeNi7TPz9UL+35BeoH1poMmDHJsPz8qM/z4sWMzaW5AwYK8lQ=="], + + "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], + + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], + + "regex": ["regex@5.1.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw=="], + + "regex-recursion": ["regex-recursion@5.1.1", "", { "dependencies": { "regex": "^5.1.1", "regex-utilities": "^2.3.0" } }, "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "remeda": ["remeda@2.22.6", "", { "dependencies": { "type-fest": "^4.41.0" } }, "sha512-Uc5x8dYtojNXcaPRdJ+nr5NHoM5yEYMBRALy405176+eNCqzsCa6OqYZ7ZK+ZeCdbW3t5Rdu6kjBBElaB/B0YQ=="], + + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rollup": ["rollup@4.41.2", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.41.2", "@rollup/rollup-android-arm64": "4.41.2", "@rollup/rollup-darwin-arm64": "4.41.2", "@rollup/rollup-darwin-x64": "4.41.2", "@rollup/rollup-freebsd-arm64": "4.41.2", "@rollup/rollup-freebsd-x64": "4.41.2", "@rollup/rollup-linux-arm-gnueabihf": "4.41.2", "@rollup/rollup-linux-arm-musleabihf": "4.41.2", "@rollup/rollup-linux-arm64-gnu": "4.41.2", "@rollup/rollup-linux-arm64-musl": "4.41.2", "@rollup/rollup-linux-loongarch64-gnu": "4.41.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.41.2", "@rollup/rollup-linux-riscv64-gnu": "4.41.2", "@rollup/rollup-linux-riscv64-musl": "4.41.2", "@rollup/rollup-linux-s390x-gnu": "4.41.2", "@rollup/rollup-linux-x64-gnu": "4.41.2", "@rollup/rollup-linux-x64-musl": "4.41.2", "@rollup/rollup-win32-arm64-msvc": "4.41.2", "@rollup/rollup-win32-ia32-msvc": "4.41.2", "@rollup/rollup-win32-x64-msvc": "4.41.2", "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, "sha512-6VwIRjxJPRGfwtHnBWrApOrFposYNARbBUnBzWSBYutdukosTadkxSB1prmEd95jhiJ1uWtZOD3sDx7qfVwu4A=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + + "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], + + "semver": ["semver@7.7.2", "", { "bin": "bin/semver.js" }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + + "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "sonner": ["sonner@2.0.5", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-YwbHQO6cSso3HBXlbCkgrgzDNIhws14r4MO87Ofy+cV2X7ES4pOoAK3+veSmVTvqNx1BWUxlhPmZzP00Crk2aQ=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], + + "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], + + "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], + + "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], + + "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], + + "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], + + "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "style-mod": ["style-mod@4.1.2", "", {}, "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw=="], + + "style-to-js": ["style-to-js@1.1.16", "", { "dependencies": { "style-to-object": "1.0.8" } }, "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw=="], + + "style-to-object": ["style-to-object@1.0.8", "", { "dependencies": { "inline-style-parser": "0.2.4" } }, "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g=="], + + "sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "synckit": ["synckit@0.11.8", "", { "dependencies": { "@pkgr/core": "^0.2.4" } }, "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A=="], + + "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="], + + "tailwind-merge": ["tailwind-merge@2.6.0", "", {}, "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA=="], + + "tailwindcss": ["tailwindcss@3.4.17", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.6", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og=="], + + "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], + + "text-segmentation": ["text-segmentation@1.0.3", "", { "dependencies": { "utrie": "^1.0.2" } }, "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw=="], + + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + + "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], + + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + + "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "bin": "bin/tsconfck.js" }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], + + "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + + "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], + + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], + + "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + + "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + + "typescript-eslint": ["typescript-eslint@8.33.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.33.1", "@typescript-eslint/parser": "8.33.1", "@typescript-eslint/utils": "8.33.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A=="], + + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + + "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "unxhr": ["unxhr@1.2.0", "", {}, "sha512-6cGpm8NFXPD9QbSNx0cD2giy7teZ6xOkCUH3U89WKVkL9N9rBrWjlCwhR94Re18ZlAop4MOc3WU1M3Hv/bgpIw=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "use-sync-external-store": ["use-sync-external-store@1.5.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "utrie": ["utrie@1.0.2", "", { "dependencies": { "base64-arraybuffer": "^1.0.2" } }, "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], + + "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx"], "bin": "bin/vite.js" }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], + + "vite-tsconfig-paths": ["vite-tsconfig-paths@5.1.4", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" } }, "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w=="], + + "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + + "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], + + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + + "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yaml": ["yaml@2.8.0", "", { "bin": "bin.mjs" }, "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + + "@asciidoctor/opal-runtime/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], + + "@babel/core/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "@headlessui/react/@floating-ui/react": ["@floating-ui/react@0.26.28", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.2", "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw=="], + + "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], + + "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "rollup/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": "lib/cli.js" }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + + "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + + "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@asciidoctor/opal-runtime/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "@asciidoctor/opal-runtime/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + } +} diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index db8d9c1b743144aec2ac4fd919518a9e7fdfabfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297496 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 Date: Wed, 30 Jul 2025 13:48:40 +0100 Subject: [PATCH 02/26] Use unpkg version on `esbuild-wasm` --- app/components/ascii-art-generator.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index 0781984..4abc7a1 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -146,7 +146,7 @@ export function AsciiArtGenerator() { try { window.esbuildInitialized = true await esbuild.initialize({ - wasmURL: './node_modules/esbuild-wasm/esbuild.wasm', + wasmURL: 'https://unpkg.com/esbuild-wasm/esbuild.wasm', }) esbuildService.current = esbuild } catch (error) { From ed073be6951554dda30b637cd0f21b1331512c67 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Wed, 30 Jul 2025 16:55:07 +0100 Subject: [PATCH 03/26] Initialise before applying template --- app/components/ascii-art-generator.tsx | 50 +++++++++---------------- app/hooks/use-esbuild.tsx | 52 ++++++++++++++++++++++++++ app/lib/code-processor.ts | 2 +- 3 files changed, 70 insertions(+), 34 deletions(-) create mode 100644 app/hooks/use-esbuild.tsx diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index 4abc7a1..7ae781b 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -5,7 +5,7 @@ * * Copyright Oxide Computer Company */ -import * as esbuild from 'esbuild-wasm' + import { decompressFrames, ParsedFrame, ParsedGif, parseGIF } from 'gifuct-js' import { motion } from 'motion/react' import { useCallback, useEffect, useRef, useState } from 'react' @@ -18,6 +18,7 @@ import { ExportOptions } from '~/components/export-options' import { OutputOptions } from '~/components/output-options' import { PreprocessingOptions } from '~/components/preprocessing-options' import { SourceSelector } from '~/components/source-selector' +import { useEsbuild } from '~/hooks/use-esbuild' import type { Data, Program } from '~/lib/animation' import { createCodeAsciiProgram, createImageAsciiProgram } from '~/lib/ascii-program' import { processCodeModule } from '~/lib/code-processor' @@ -35,12 +36,6 @@ import { CodeSidebar } from './code-sidebar' import { ProjectManagement } from './project-management' // Use window global to track esbuild initialization across hot reloads and StrictMode -declare global { - interface Window { - esbuildInitialized?: boolean - } -} - export type SourceType = 'image' | 'code' | 'gif' export type GridType = 'none' | 'horizontal' | 'vertical' | 'both' export type ColorMappingType = 'brightness' | 'hue' | 'saturation' @@ -85,8 +80,6 @@ export interface AsciiSettings { } } -export type EsbuildService = typeof esbuild - export function AsciiArtGenerator() { // Core state const [settings, setSettings] = useState(DEFAULT_SETTINGS) @@ -107,7 +100,6 @@ export function AsciiArtGenerator() { const lastProcessedSettings = useRef(null) const isInitialMount = useRef(true) - const esbuildService = useRef(null) const handleBeforeUnload = (event: BeforeUnloadEvent) => { // Trigger the warning dialog when the user closes or navigates the tab @@ -139,28 +131,16 @@ export function AsciiArtGenerator() { [showCodeSidebar], ) - // Initialize esbuild service - useEffect(() => { - const startService = async () => { - if (!window.esbuildInitialized) { - try { - window.esbuildInitialized = true - await esbuild.initialize({ - wasmURL: 'https://unpkg.com/esbuild-wasm/esbuild.wasm', - }) - esbuildService.current = esbuild - } catch (error) { - console.error('Failed to initialize esbuild:', error) - } - } else { - esbuildService.current = esbuild - } - } - startService() - }, []) + const { + esbuildService, + isInitialized: esbuildInitialized, + isInitializing: esbuildInitializing, + } = useEsbuild() // Load template from URL parameter on mount useEffect(() => { + if (!esbuildInitialized || esbuildInitializing) return + const urlParams = new URLSearchParams(window.location.search) const templateParam = urlParams.get('template') @@ -170,7 +150,7 @@ export function AsciiArtGenerator() { } // only need to run on load // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) + }, [esbuildInitialized, esbuildInitializing]) useEffect(() => { // Check if the user has loaded some media or modified the code @@ -332,8 +312,12 @@ export function AsciiArtGenerator() { currentSettings: AsciiSettings, ) => { try { - if (!esbuildService.current) { - toast('Code processor not ready. Please try again.') + if (!esbuildService || !esbuildInitialized) { + if (esbuildInitializing) { + toast('Code processor is still initializing. Please wait a moment.') + } else { + toast('Code processor not ready. Please try again.') + } return } @@ -341,7 +325,7 @@ export function AsciiArtGenerator() { const hasImports = /^\s*import\s+/m.test(currentSettings.source.code) const result = await processCodeModule(currentSettings.source.code, { - esbuildService: esbuildService.current, + esbuildService: esbuildService, timeout: 5000, allowUnpkgImports: hasImports, }) diff --git a/app/hooks/use-esbuild.tsx b/app/hooks/use-esbuild.tsx new file mode 100644 index 0000000..894ef75 --- /dev/null +++ b/app/hooks/use-esbuild.tsx @@ -0,0 +1,52 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ +import * as esbuild from 'esbuild-wasm' +import { useEffect, useRef, useState } from 'react' + +export type EsbuildService = typeof esbuild + +export function useEsbuild() { + const esbuildService = useRef(null) + const [isInitialized, setIsInitialized] = useState(false) + const [isInitializing, setIsInitializing] = useState(false) + const initializationAttempted = useRef(false) + + useEffect(() => { + const initializeEsbuild = async () => { + // Prevent double initialization in StrictMode + if (initializationAttempted.current) { + return + } + + initializationAttempted.current = true + setIsInitializing(true) + + try { + await esbuild.initialize({ + wasmURL: 'https://unpkg.com/esbuild-wasm/esbuild.wasm', + }) + esbuildService.current = esbuild + setIsInitialized(true) + } catch (error) { + console.error('Failed to initialize esbuild:', error) + setIsInitialized(false) + initializationAttempted.current = false // Allow retry on error + } finally { + setIsInitializing(false) + } + } + + initializeEsbuild() + }, []) + + return { + esbuildService: esbuildService.current, + isInitialized, + isInitializing, + } +} diff --git a/app/lib/code-processor.ts b/app/lib/code-processor.ts index cfd7bcb..b4d4330 100644 --- a/app/lib/code-processor.ts +++ b/app/lib/code-processor.ts @@ -1,6 +1,6 @@ import { BuildResult, Plugin } from 'esbuild-wasm' -import { EsbuildService } from '~/components/ascii-art-generator' +import { type EsbuildService } from '~/hooks/use-esbuild' import type { Program } from './animation' From b8bdf2ecebe73fe6d87ab2b1fcab228bf913b537 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Wed, 30 Jul 2025 16:55:24 +0100 Subject: [PATCH 04/26] Remove old comment --- app/components/ascii-art-generator.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index 7ae781b..8cd039b 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -35,7 +35,6 @@ import { AnimationOptions } from './animation-options' import { CodeSidebar } from './code-sidebar' import { ProjectManagement } from './project-management' -// Use window global to track esbuild initialization across hot reloads and StrictMode export type SourceType = 'image' | 'code' | 'gif' export type GridType = 'none' | 'horizontal' | 'vertical' | 'both' export type ColorMappingType = 'brightness' | 'hue' | 'saturation' From 354ac94f7ef7defc7d63e21528ed389ab0f63375 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Thu, 31 Jul 2025 11:16:04 +0100 Subject: [PATCH 05/26] Small refactoring --- app/components/ascii-art-generator.tsx | 4 - app/components/code-sidebar.tsx | 123 +++++++++++++++- app/index.css | 27 ++++ app/lib/code-processor.ts | 190 ++++++++++++------------- app/lib/utils/index.ts | 9 ++ app/lib/utils/patterns.ts | 45 ++++++ app/templates.ts | 19 +++ bun.lock | 1 + package.json | 1 + 9 files changed, 310 insertions(+), 109 deletions(-) create mode 100644 app/lib/utils/index.ts create mode 100644 app/lib/utils/patterns.ts diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index 8cd039b..68f3482 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -320,13 +320,9 @@ export function AsciiArtGenerator() { return } - // Check if code contains import statements for unpkg support - const hasImports = /^\s*import\s+/m.test(currentSettings.source.code) - const result = await processCodeModule(currentSettings.source.code, { esbuildService: esbuildService, timeout: 5000, - allowUnpkgImports: hasImports, }) if (!result.success || !result.module) { diff --git a/app/components/code-sidebar.tsx b/app/components/code-sidebar.tsx index 5e11907..4b478ba 100644 --- a/app/components/code-sidebar.tsx +++ b/app/components/code-sidebar.tsx @@ -7,7 +7,12 @@ */ import { redo, undo } from '@codemirror/commands' import { EditorView } from '@codemirror/view' -import { DirectionDownIcon, Info12Icon } from '@oxide/design-system/icons/react' +import { + AddRoundel12Icon, + DirectionDownIcon, + Info12Icon, +} from '@oxide/design-system/icons/react' +import * as Accordion from '@radix-ui/react-accordion' import { motion } from 'motion/react' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useHotkeys } from 'react-hotkeys-hook' @@ -60,6 +65,23 @@ const PATTERNS = { STEP: /step=(\d+(?:\.\d+)?)/, } as const +const LOCAL_UTILS = [ + { + name: 'checkerboard', + description: 'Generates a checkerboard pattern value for given coordinates', + type: '(x: number, y: number, size?: number) => number', + example: 'const value = checkerboard(coord.x, coord.y, 8)', + importStatement: "import { checkerboard } from '@/utils'", + }, + { + name: 'stripes', + description: 'Creates striped patterns in horizontal, vertical, or diagonal directions', + type: '(x: number, y: number, stripeWidth?: number, direction?: "horizontal" | "vertical" | "diagonal") => number', + example: 'const value = stripes(coord.x, coord.y, 4, "diagonal")', + importStatement: "import { stripes } from '@/utils'", + }, +] as const + function parseControlConfig( name: string, valueStr: string, @@ -301,6 +323,7 @@ export function CodeSidebar({ const [isResizing, setIsResizing] = useState(false) const editorViewRef = useRef(null) const [controlsOpen, setControlsOpen] = useState(true) + const [utilsOpen, setUtilsOpen] = useState(false) const [autoRun, setAutoRun] = useState(true) const updateTimeoutRef = useRef(null) @@ -310,6 +333,29 @@ export function CodeSidebar({ updateSettings({ data: null, code: pendingCode, type: 'code' }) const handleCodeChange = (value: string) => setPendingCode(value) + const addImport = (importStatement: string) => { + if (!editorViewRef.current) return + + const currentContent = editorViewRef.current.state.doc.toString() + + // Check if import already exists + if (currentContent.includes(importStatement)) { + return + } + + // Always add import at the beginning of the file + const insertText = `${importStatement}\n` + + // Apply change + const transaction = editorViewRef.current.state.update({ + changes: { from: 0, insert: insertText }, + }) + editorViewRef.current.dispatch(transaction) + + const newContent = transaction.state.doc.toString() + setPendingCode(newContent) + } + const handleMouseMove = useCallback((e: MouseEvent) => { if (!isDragging.current) return const newWidth = window.innerWidth - e.clientX @@ -572,17 +618,88 @@ export function CodeSidebar({ /> +
    + + {utilsOpen && ( +
    +
    + + {LOCAL_UTILS.map((util) => ( + + + +
    + + {util.name} +
    +
    +
    + +
    +
    + {util.description} +
    +
    +
    + Type +
    +
    + {util.type} +
    +
    +
    +
    + Example +
    +
    + {util.example} +
    +
    + { + addImport(util.importStatement) + }} + className="flex items-center gap-1.5" + > + Import + +
    +
    +
    + ))} +
    +
    +
    + )} +
    + {controlVariables.length > 0 && (
    diff --git a/app/index.css b/app/index.css index b3e7ee9..e4c20b6 100644 --- a/app/index.css +++ b/app/index.css @@ -103,4 +103,31 @@ .dedent { @apply mt-2 flex flex-col gap-2 border-l py-1 pl-3 border-default; } + + /* Accordion animations */ + @keyframes slideDown { + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } + } + + @keyframes slideUp { + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } + } + + .animate-slideDown { + animation: slideDown 300ms cubic-bezier(0.87, 0, 0.13, 1); + } + + .animate-slideUp { + animation: slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1); + } } diff --git a/app/lib/code-processor.ts b/app/lib/code-processor.ts index b4d4330..386749d 100644 --- a/app/lib/code-processor.ts +++ b/app/lib/code-processor.ts @@ -3,6 +3,7 @@ import { BuildResult, Plugin } from 'esbuild-wasm' import { type EsbuildService } from '~/hooks/use-esbuild' import type { Program } from './animation' +import * as localUtils from './utils/patterns' // Cache for fetched modules const moduleCache = new Map() @@ -11,7 +12,6 @@ interface CodeProcessorOptions { esbuildService: EsbuildService timeout?: number target?: string - allowUnpkgImports?: boolean } interface LoadProcessedModule { @@ -32,6 +32,27 @@ interface ProcessingResult { warnings?: string[] } +function isUrl(path: string): boolean { + return path.startsWith('https://') || path.startsWith('http://') +} + +function resolveUnpkgUrl(packageName: string): string { + return `https://unpkg.com/${packageName}?module` +} + +function handlePluginError(path: string, error: unknown) { + const message = error instanceof Error ? error.message : 'Unknown error' + console.error('Plugin error for:', path, message) + return { + errors: [ + { + text: `Failed to load module: ${message}`, + location: null, + }, + ], + } +} + export async function processCodeModule( code: string, options: CodeProcessorOptions, @@ -43,7 +64,6 @@ export async function processCodeModule( throw new Error('esbuild service not provided') } - // Use build API for bundling with plugins const result: BuildResult = await esbuildService.build({ entryPoints: ['input.ts'], bundle: true, @@ -52,7 +72,7 @@ export async function processCodeModule( platform: 'browser', write: false, treeShaking: false, - plugins: [createUnpkgPathPlugin(), createUnpkgFetchPlugin(code)], + plugins: [createLocalUtilsPlugin(), createModuleResolutionPlugin(code)], define: { global: 'globalThis', 'process.env.NODE_ENV': '"production"', @@ -69,8 +89,6 @@ export async function processCodeModule( } const transformedCode = result.outputFiles[0].text - - // Create a safe execution environment const moduleExports = await executeCodeSafely(transformedCode, timeout) return { @@ -98,23 +116,19 @@ async function executeCodeSafely(code: string, timeout: number): Promise { URL.revokeObjectURL(moduleUrl) - - const result = { + clearTimeout(timeoutId) + resolve({ main: module.main, boot: module.boot, pre: module.pre, post: module.post, - } - - clearTimeout(timeoutId) - resolve(result) + }) }) .catch((error) => { URL.revokeObjectURL(moduleUrl) @@ -128,54 +142,64 @@ async function executeCodeSafely(code: string, timeout: number): Promise { - return { path: 'input.ts', namespace: 'app' } - }) - - // Handle relative imports inside a module - build.onResolve({ filter: /^\.+\// }, (args) => { - return { - path: new URL(args.path, 'https://unpkg.com' + args.resolveDir + '/').href, - namespace: 'app', - } - }) - - // Handle main file of a module - build.onResolve({ filter: /.*/ }, async (args) => { - const isUrl = args.path.startsWith('https://') || args.path.startsWith('http://') - - if (isUrl) { - return { - path: args.path, - namespace: 'app', - } - } + // Resolve local utils imports + build.onResolve({ filter: /^@\/utils$/ }, () => ({ + path: 'local-utils', + namespace: 'local', + })) + + // Load local utils + build.onLoad({ filter: /^local-utils$/, namespace: 'local' }, () => { + const utilsExports = Object.entries(localUtils) + .filter(([, value]) => typeof value === 'function') + .map(([key, fn]) => `export const ${key} = ${fn.toString()};`) + .join('\n') - // Use ESM version from unpkg - const resolvedPath = `https://unpkg.com/${args.path}?module` - console.log('Resolved:', resolvedPath) return { - path: resolvedPath, - namespace: 'app', + loader: 'ts', + contents: `// Pattern generation utilities\n${utilsExports}`, } }) }, } } -function createUnpkgFetchPlugin(input: string): Plugin { +function createModuleResolutionPlugin(userCode: string): Plugin { return { - name: 'unpkg-fetch-plugin', + name: 'module-resolution-plugin', setup(build) { - // Handle root user input code - build.onLoad({ filter: /^input\.ts$/ }, () => { - const wrappedInput = ` -${input} + // Handle entry point + build.onResolve({ filter: /^input\.ts$/ }, () => ({ + path: 'input.ts', + namespace: 'app', + })) + + // Handle relative imports + build.onResolve({ filter: /^\.+\// }, (args) => ({ + path: new URL(args.path, 'https://unpkg.com' + args.resolveDir + '/').href, + namespace: 'app', + })) + + // Handle npm packages and URLs + build.onResolve({ filter: /.*/ }, (args) => { + if (isUrl(args.path)) { + return { path: args.path, namespace: 'app' } + } + + const resolvedPath = resolveUnpkgUrl(args.path) + console.log('Resolved:', resolvedPath) + return { path: resolvedPath, namespace: 'app' } + }) + + // Load entry point with user code + build.onLoad({ filter: /^input\.ts$/, namespace: 'app' }, () => ({ + loader: 'ts', + contents: ` +${userCode} // Export functions if they exist const _main = typeof main !== 'undefined' ? main : undefined; @@ -184,76 +208,38 @@ const _pre = typeof pre !== 'undefined' ? pre : undefined; const _post = typeof post !== 'undefined' ? post : undefined; export { _main as main, _boot as boot, _pre as pre, _post as post }; - ` - return { - loader: 'tsx', - contents: wrappedInput, - } - }) - - // Handle JS/TS files - build.onLoad({ filter: /.*/ }, async (args) => { - // Check if we have this path cached - if (moduleCache.has(args.path)) { - const cachedContents = moduleCache.get(args.path)! - - // Determine loader - let loader: 'js' | 'ts' | 'tsx' | 'jsx' | 'text' = 'js' - if (args.path.includes('.ts') && !args.path.includes('unpkg.com')) { - loader = 'ts' - } else if (args.path.includes('.tsx')) { - loader = 'tsx' - } else if (args.path.includes('.jsx')) { - loader = 'jsx' - } - - const resolveDir = new URL('./', args.path).pathname - + `, + })) + + // Load external modules + build.onLoad({ filter: /.*/, namespace: 'app' }, async (args) => { + // Check cache first + const cachedContent = moduleCache.get(args.path) + if (cachedContent) { return { - loader, - contents: cachedContents, - resolveDir, + loader: 'ts', + contents: cachedContent, + resolveDir: new URL('./', args.path).pathname, } } + // Fetch and cache try { const response = await fetch(args.path) if (!response.ok) { - throw new Error(`Failed to fetch ${args.path}: ${response.statusText}`) + throw new Error(`HTTP ${response.status}: ${response.statusText}`) } const contents = await response.text() - - // Cache the content using path as key moduleCache.set(args.path, contents) - // Determine loader - let loader: 'js' | 'ts' | 'tsx' | 'jsx' | 'text' = 'js' - if (args.path.includes('.ts') && !args.path.includes('unpkg.com')) { - loader = 'ts' - } else if (args.path.includes('.tsx')) { - loader = 'tsx' - } else if (args.path.includes('.jsx')) { - loader = 'jsx' - } - - const resolveDir = new URL('./', response.url).pathname - return { - loader, + loader: 'ts', contents, - resolveDir, + resolveDir: new URL('./', response.url).pathname, } } catch (error) { - console.error('Failed to load:', args.path, error) - return { - errors: [ - { - text: `Failed to load module: ${error instanceof Error ? error.message : 'Unknown error'}`, - location: null, - }, - ], - } + return handlePluginError(args.path, error) } }) }, diff --git a/app/lib/utils/index.ts b/app/lib/utils/index.ts new file mode 100644 index 0000000..272c0b5 --- /dev/null +++ b/app/lib/utils/index.ts @@ -0,0 +1,9 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ + +export * from './patterns' diff --git a/app/lib/utils/patterns.ts b/app/lib/utils/patterns.ts new file mode 100644 index 0000000..28ba051 --- /dev/null +++ b/app/lib/utils/patterns.ts @@ -0,0 +1,45 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ + +/** + * Generates a checkerboard pattern value for given coordinates + * @param x - X coordinate of the cell + * @param y - Y coordinate of the cell + * @param size - Size of each checker square + * @returns 0 or 1 representing the checkerboard pattern + */ +export function checkerboard(x: number, y: number, size: number = 8): number { + const checkerX = Math.floor(x / size) + const checkerY = Math.floor(y / size) + return (checkerX + checkerY) % 2 +} + +/** + * Generates a striped pattern value for given coordinates + * @param x - X coordinate of the cell + * @param y - Y coordinate of the cell + * @param stripeWidth - Width of each stripe + * @param direction - Direction of stripes ('horizontal' | 'vertical' | 'diagonal') + * @returns 0 or 1 representing the striped pattern + */ +export function stripes( + x: number, + y: number, + stripeWidth: number = 4, + direction: 'horizontal' | 'vertical' | 'diagonal' = 'vertical', +): number { + switch (direction) { + case 'horizontal': + return Math.floor(y / stripeWidth) % 2 + case 'diagonal': + return Math.floor((x + y) / stripeWidth) % 2 + case 'vertical': + default: + return Math.floor(x / stripeWidth) % 2 + } +} diff --git a/app/templates.ts b/app/templates.ts index 446097a..8716396 100644 --- a/app/templates.ts +++ b/app/templates.ts @@ -119,6 +119,25 @@ export const TEMPLATES = { frameRate: 30, }, }, + localPattern: { + ...DEFAULT_SETTINGS, + meta: { name: 'Local Pattern' }, + source: { + type: 'code', + data: null, + code: `import { checkerboard } from '@/utils' + +function main(coord, context, cursor, buffer) { + const value = checkerboard(coord.x, coord.y, 4) + return value === 1 ? '█' : ' ' +}`, + }, + output: { ...DEFAULT_SETTINGS.output, columns: 80, rows: 24, grid: 'both' }, + animation: { + animationLength: 1, + frameRate: 1, + }, + }, } export type TemplateType = keyof typeof TEMPLATES diff --git a/bun.lock b/bun.lock index d93537d..22934cc 100644 --- a/bun.lock +++ b/bun.lock @@ -13,6 +13,7 @@ "@ffmpeg/util": "^0.12.2", "@ianvs/prettier-plugin-sort-imports": "^4.4.1", "@oxide/design-system": "^2.5.0", + "@radix-ui/react-accordion": "^1.2.11", "@react-hook/resize-observer": "^2.0.2", "@uiw/react-codemirror": "^4.23.10", "clsx": "^2.1.1", diff --git a/package.json b/package.json index 59a68b9..e6b6c89 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@ffmpeg/util": "^0.12.2", "@ianvs/prettier-plugin-sort-imports": "^4.4.1", "@oxide/design-system": "^2.5.0", + "@radix-ui/react-accordion": "^1.2.11", "@react-hook/resize-observer": "^2.0.2", "@uiw/react-codemirror": "^4.23.10", "clsx": "^2.1.1", From 610f6bf39914782e93e4b5874e48393b0e1c6542 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Thu, 31 Jul 2025 11:55:18 +0100 Subject: [PATCH 06/26] Support typescript control vars and add tests --- app/components/code-sidebar.tsx | 8 +- bun.lock | 9 ++ package.json | 6 +- tests/control-variables.test.ts | 267 ++++++++++++++++++++++++++++++++ tsconfig.json | 2 + 5 files changed, 287 insertions(+), 5 deletions(-) create mode 100644 tests/control-variables.test.ts diff --git a/app/components/code-sidebar.tsx b/app/components/code-sidebar.tsx index 4b478ba..040736f 100644 --- a/app/components/code-sidebar.tsx +++ b/app/components/code-sidebar.tsx @@ -54,10 +54,10 @@ interface ControlVariable { } // Regex patterns used throughout parsing -const PATTERNS = { - ROOT_OBJECT: /const\s+(\w+)\s*=\s*\{\s*([^}]*)\s*\}\s*;?\s*\/\/~\s*(.+)/, - MULTI_OBJECT: /const\s+(\w+)\s*=\s*\{/, - SIMPLE_VAR: /const\s+(\w+)\s*=\s*(.+?);?\s*\/\/~\s*(.+)/, +export const PATTERNS = { + ROOT_OBJECT: /const\s+(\w+)(?:\s*:\s*[^=]+)?\s*=\s*\{\s*([^}]*)\s*\}\s*;?\s*\/\/~\s*(.+)/, + MULTI_OBJECT: /const\s+(\w+)(?:\s*:\s*[^=]+)?\s*=\s*\{/, + SIMPLE_VAR: /const\s+(\w+)(?:\s*:\s*[^=]+)?\s*=\s*(?!\s*\{)(.+?);?\s*\/\/~\s*(.+)/, NESTED_OBJECT: /\s*(\w+):\s*\{\s*([^}]+)\s*\},?\s*\/\/~\s*(.+)/, OBJECT_PROP: /\s*(\w+):\s*(.+?),?\s*\/\/~\s*(.+)/, PROP_VALUE: /(\w+):\s*([^,}]+)/g, diff --git a/bun.lock b/bun.lock index 22934cc..0ea23ba 100644 --- a/bun.lock +++ b/bun.lock @@ -43,6 +43,7 @@ "devDependencies": { "@eslint/compat": "^1.2.8", "@eslint/js": "^9.21.0", + "@types/bun": "^1.2.19", "@types/file-saver": "^2.0.7", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", @@ -594,6 +595,8 @@ "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], + "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/file-saver": ["@types/file-saver@2.0.7", "", {}, "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A=="], @@ -606,6 +609,8 @@ "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + "@types/node": ["@types/node@24.1.0", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w=="], + "@types/react": ["@types/react@19.1.6", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q=="], "@types/react-dom": ["@types/react-dom@19.1.6", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw=="], @@ -690,6 +695,8 @@ "browserslist": ["browserslist@4.25.0", "", { "dependencies": { "caniuse-lite": "^1.0.30001718", "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": "cli.js" }, "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA=="], + "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -1362,6 +1369,8 @@ "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], + "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], diff --git a/package.json b/package.json index e6b6c89..b31d94a 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,10 @@ "preview": "vite preview", "tsc": "tsc", "lint": "eslint app", - "ci": "bun run fmt:check && bun run tsc && bun run lint" + "test": "bun test", + "test:watch": "bun test --watch", + "test:coverage": "bun test --coverage", + "ci": "bun run fmt:check && bun run tsc && bun run lint && bun run test" }, "dependencies": { "@ariakit/react": "^0.4.15", @@ -53,6 +56,7 @@ "devDependencies": { "@eslint/compat": "^1.2.8", "@eslint/js": "^9.21.0", + "@types/bun": "^1.2.19", "@types/file-saver": "^2.0.7", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", diff --git a/tests/control-variables.test.ts b/tests/control-variables.test.ts new file mode 100644 index 0000000..3741bb5 --- /dev/null +++ b/tests/control-variables.test.ts @@ -0,0 +1,267 @@ +import { describe, expect, test } from 'bun:test' + +import { PATTERNS } from '~/components/code-sidebar' + +describe('Control Variable Patterns', () => { + test('SIMPLE_VAR pattern should match basic variable declarations', () => { + const tests = [ + ['const speed = 5; //~ number 1-10', ['speed', '5', 'number 1-10']], + ['const enabled = true; //~ boolean', ['enabled', 'true', 'boolean']], + ['const text = "hello"; //~ text', ['text', '"hello"', 'text']], + ] + + tests.forEach(([line, expected]) => { + const match = (line as string).match(PATTERNS.SIMPLE_VAR) + + expect(match).not.toBeNull() + expect([match![1], match![2], match![3]]).toEqual(expected as string[]) + }) + }) + + test('SIMPLE_VAR pattern should match TypeScript typed variable declarations', () => { + const tests = [ + ['const speed: number = 5; //~ number 1-10', ['speed', '5', 'number 1-10']], + ['const enabled: boolean = true; //~ boolean', ['enabled', 'true', 'boolean']], + ['const text: string = "hello"; //~ text', ['text', '"hello"', 'text']], + ['const count: number = 42; //~ number 0-100', ['count', '42', 'number 0-100']], + ['const name: string = `world`; //~ text', ['name', '`world`', 'text']], + ] + + tests.forEach(([line, expected]) => { + const match = (line as string).match(PATTERNS.SIMPLE_VAR) + + expect(match).not.toBeNull() + expect([match![1], match![2], match![3]]).toEqual(expected as string[]) + }) + }) + + test('ROOT_OBJECT pattern should match inline object declarations', () => { + const line = 'const config = { x: 10, y: 20 }; //~ number 0-100' + const match = line.match(PATTERNS.ROOT_OBJECT) + + expect(match).not.toBeNull() + expect(match![1]).toBe('config') + expect(match![2]).toBe('x: 10, y: 20 ') + expect(match![3]).toBe('number 0-100') + }) + + test('ROOT_OBJECT pattern should match TypeScript typed inline object declarations', () => { + const tests = [ + [ + 'const config: { x: number; y: number } = { x: 10, y: 20 }; //~ number 0-100', + ['config', 'x: 10, y: 20 ', 'number 0-100'], + ], + [ + 'const position: Position = { x: 5, y: 15 }; //~ number 1-50', + ['position', 'x: 5, y: 15 ', 'number 1-50'], + ], + [ + 'const settings: any = { width: 800, height: 600 }; //~ number 100-2000', + ['settings', 'width: 800, height: 600 ', 'number 100-2000'], + ], + ] + + tests.forEach(([line, expected]) => { + const match = (line as string).match(PATTERNS.ROOT_OBJECT) + + expect(match).not.toBeNull() + expect([match![1], match![2], match![3]]).toEqual(expected as string[]) + }) + }) + + test('OBJECT_PROP pattern should match object properties', () => { + const line = ' width: 800, //~ number 100-2000' + const match = line.match(PATTERNS.OBJECT_PROP) + + expect(match).not.toBeNull() + expect(match![1]).toBe('width') + expect(match![2]).toBe('800') + expect(match![3]).toBe('number 100-2000') + }) + + test('RANGE pattern should extract min-max values', () => { + const tests = [ + ['number 1-10', ['1', '10']], + ['number -50-50', ['-50', '50']], + ['number 0.5-10.5', ['0.5', '10.5']], + ] + + tests.forEach(([config, expected]) => { + const match = (config as string).match(PATTERNS.RANGE) + expect(match).not.toBeNull() + expect([match![1], match![2]]).toEqual(expected as string[]) + }) + }) + + test('STEP pattern should extract step values', () => { + const config = 'number 1-10 step=0.5' + const match = config.match(PATTERNS.STEP) + + expect(match).not.toBeNull() + expect(match![1]).toBe('0.5') + }) +}) + +describe('Control Variable Parsing Integration', () => { + // Simple mock of the parseControlVariables function to test key scenarios + function extractControlVariables(code: string) { + const lines = code.split('\n') + const controls: Array<{ + name: string + type: string + value: string | number | boolean + }> = [] + + lines.forEach((line) => { + const simpleMatch = line.match(PATTERNS.SIMPLE_VAR) + if (simpleMatch) { + const [, name, valueStr, controlConfig] = simpleMatch + const type = controlConfig.trim().split(/\s+/)[0] + + let value: string | number | boolean = valueStr.trim() + if (type === 'number') value = parseFloat(value) + if (type === 'boolean') value = value === 'true' + if (type === 'text') value = (value as string).replace(/^['"`]|['"`]$/g, '') + + controls.push({ name, type, value }) + } + + const rootObjectMatch = line.match(PATTERNS.ROOT_OBJECT) + if (rootObjectMatch) { + const [, _objName, content, controlConfig] = rootObjectMatch + const type = controlConfig.trim().split(/\s+/)[0] + + let match + PATTERNS.PROP_VALUE.lastIndex = 0 + while ((match = PATTERNS.PROP_VALUE.exec(content)) !== null) { + const [, propName, valueStr] = match + let value: string | number | boolean = valueStr.trim() + if (type === 'number') value = parseFloat(value) + if (type === 'boolean') value = value === 'true' + if (type === 'text') value = (value as string).replace(/^['"`]|['"`]$/g, '') + + controls.push({ name: propName, type, value }) + } + } + }) + + return controls + } + + test('should parse simple variable declarations', () => { + const code = ` +const speed = 5; //~ number 1-10 +const enabled = true; //~ boolean +const message = "hello"; //~ text + ` + + const result = extractControlVariables(code) + + expect(result).toHaveLength(3) + expect(result[0]).toEqual({ name: 'speed', type: 'number', value: 5 }) + expect(result[1]).toEqual({ name: 'enabled', type: 'boolean', value: true }) + expect(result[2]).toEqual({ name: 'message', type: 'text', value: 'hello' }) + }) + + test('should parse TypeScript typed variable declarations', () => { + const code = ` +const speed: number = 5; //~ number 1-10 +const enabled: boolean = true; //~ boolean +const message: string = "hello"; //~ text +const count: number = 42; //~ number 0-100 +const active: boolean = false; //~ boolean + ` + + const result = extractControlVariables(code) + + expect(result).toHaveLength(5) + expect(result[0]).toEqual({ name: 'speed', type: 'number', value: 5 }) + expect(result[1]).toEqual({ name: 'enabled', type: 'boolean', value: true }) + expect(result[2]).toEqual({ name: 'message', type: 'text', value: 'hello' }) + expect(result[3]).toEqual({ name: 'count', type: 'number', value: 42 }) + expect(result[4]).toEqual({ name: 'active', type: 'boolean', value: false }) + }) + + test('should parse inline object declarations', () => { + const code = `const position = { x: 10, y: 20 }; //~ number 0-100` + + const result = extractControlVariables(code) + + expect(result.length).toBeGreaterThan(0) + expect(result.some((r) => r.name === 'x' && r.value === 10)).toBe(true) + expect(result.some((r) => r.name === 'y' && r.value === 20)).toBe(true) + }) + + test('should parse TypeScript typed inline object declarations', () => { + const code = `const position: { x: number; y: number } = { x: 10, y: 20 }; //~ number 0-100` + + const result = extractControlVariables(code) + + expect(result.length).toBeGreaterThan(0) + expect(result.some((r) => r.name === 'x' && r.value === 10)).toBe(true) + expect(result.some((r) => r.name === 'y' && r.value === 20)).toBe(true) + }) + + test('should handle different quote types in text values', () => { + const code = ` +const single = 'hello'; //~ text +const double = "world"; //~ text +const backtick = \`test\`; //~ text + ` + + const result = extractControlVariables(code) + + expect(result).toHaveLength(3) + expect(result[0].value).toBe('hello') + expect(result[1].value).toBe('world') + expect(result[2].value).toBe('test') + }) + + test('should ignore lines without control annotations', () => { + const code = ` +const regularVar = 10; +const speed = 5; //~ number 1-10 +const anotherVar = "test"; + ` + + const result = extractControlVariables(code) + + expect(result).toHaveLength(1) + expect(result[0].name).toBe('speed') + }) + + test('should handle mixed TypeScript typed and untyped variables', () => { + const code = ` +const speed = 5; //~ number 1-10 +const position: { x: number; y: number } = { x: 10, y: 20 }; //~ number 0-100 +const enabled: boolean = true; //~ boolean +const message = "hello"; //~ text + ` + + const result = extractControlVariables(code) + + expect(result).toHaveLength(5) + expect(result[0]).toEqual({ name: 'speed', type: 'number', value: 5 }) + expect(result.some((r) => r.name === 'x' && r.value === 10)).toBe(true) + expect(result.some((r) => r.name === 'y' && r.value === 20)).toBe(true) + expect(result.some((r) => r.name === 'enabled' && r.value === true)).toBe(true) + expect(result.some((r) => r.name === 'message' && r.value === 'hello')).toBe(true) + }) + + test('should handle complex TypeScript type annotations', () => { + const code = ` +const config: Record = { width: 800, height: 600 }; //~ number 100-2000 +const settings: any = { x: 5 }; //~ number 1-10 +const point: Point = { x: 15, y: 25 }; //~ number 0-50 + ` + + const result = extractControlVariables(code) + + expect(result.length).toBeGreaterThan(0) + expect(result.some((r) => r.name === 'width' && r.value === 800)).toBe(true) + expect(result.some((r) => r.name === 'height' && r.value === 600)).toBe(true) + expect(result.some((r) => r.name === 'x' && r.value === 5)).toBe(true) + expect(result.some((r) => r.name === 'x' && r.value === 15)).toBe(true) + expect(result.some((r) => r.name === 'y' && r.value === 25)).toBe(true) + }) +}) diff --git a/tsconfig.json b/tsconfig.json index b92ee29..5ea2cee 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,6 +20,8 @@ "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true, + "types": ["bun-types"], + "paths": { "~/*": ["./app/*"] } From 2a9337ae3e52bfd21a5af52505bf4e8be1db389b Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Thu, 31 Jul 2025 12:15:20 +0100 Subject: [PATCH 07/26] Add external lib to utils list --- app/components/code-editor.tsx | 2 +- app/components/code-sidebar.tsx | 41 ++++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/app/components/code-editor.tsx b/app/components/code-editor.tsx index bd11a05..1f90d0e 100644 --- a/app/components/code-editor.tsx +++ b/app/components/code-editor.tsx @@ -192,7 +192,7 @@ export default function CodeEditor({ value, onChange, editorViewRef }: CodeEdito highlightActiveLine: true, highlightSelectionMatches: false, drawSelection: false, - autocompletion: true, + autocompletion: false, foldGutter: true, indentOnInput: true, history: true, diff --git a/app/components/code-sidebar.tsx b/app/components/code-sidebar.tsx index 040736f..f0e9e27 100644 --- a/app/components/code-sidebar.tsx +++ b/app/components/code-sidebar.tsx @@ -65,7 +65,7 @@ export const PATTERNS = { STEP: /step=(\d+(?:\.\d+)?)/, } as const -const LOCAL_UTILS = [ +const UTILS = [ { name: 'checkerboard', description: 'Generates a checkerboard pattern value for given coordinates', @@ -80,6 +80,21 @@ const LOCAL_UTILS = [ example: 'const value = stripes(coord.x, coord.y, 4, "diagonal")', importStatement: "import { stripes } from '@/utils'", }, + { + name: 'simplex-noise', + description: + 'Generates smooth, continuous noise values\nfor procedural textures and patterns', + type: 'createNoise2D: () => (x: number, y: number) => number', + example: `function boot() { + noise2D = createNoise2D() +} + +function main(coord, context, cursor, buffer) { + const noise = noise2D(coord.x * 0.01, coord.y * 0.01) + return noise > 0 ? 1 : 0 +}`, + importStatement: "import { createNoise2D } from 'simplex-noise'", + }, ] as const function parseControlConfig( @@ -621,7 +636,7 @@ export function CodeSidebar({
    +
    + )} ) } diff --git a/app/lib/ascii-program.ts b/app/lib/ascii-program.ts index f241093..cdeee7d 100644 --- a/app/lib/ascii-program.ts +++ b/app/lib/ascii-program.ts @@ -1,85 +1,148 @@ /* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * file, You can obtain one at https://mozilla.org/MPL/2.0/. * * Copyright Oxide Computer Company */ + +/** + * Unified ASCII Program Generator + * + * This module provides a unified approach for creating ASCII art programs + * from both images and code. All programs are processed through the same + * pipeline using esbuild-wasm. + * + * Example usage: + * + * // For image data: + * const imageProgram = await createUnifiedImageProgram( + * imageData, // ImageData with 0-1 values + * 80, 40, // width, height + * frames, // optional animation frames + * 30, // frame rate + * { esbuildService } + * ) + * + * // For code: + * const codeProgram = await createUnifiedCodeProgram( + * userCode, // string containing main/boot/pre/post functions + * 80, 40, // width, height + * 30, // frame rate + * { esbuildService } + * ) + * + * // The generated code can import: + * // import { valueToChar, getImageValue } from '@/utils' + * // import { imageData, frames } from '@/imageData' + */ import type { Program } from './animation' -import type { Data } from './types' +import { processCodeModule, type CodeProcessorOptions } from './code-processor' +import type { AsciiImageData } from './types' -export async function createImageAsciiProgram( - asciiData: Data = {}, - width = 80, - height = 40, - frames?: Data[], - frameRate: number = 30, -): Promise { - const w = Math.max(1, width) - const h = Math.max(1, height) +export function generateImageCode(): string { + return ` +import { valueToChar, getImageValue } from '@/utils' +import { imageData, frames } from '@/imageData' +import { characterSet } from '@/settings' - // Default program - const program: Program = { - settings: { - fps: frameRate, - cols: w, - rows: h, - }, +const isAnimated = frames !== null && frames !== undefined +const frameCount = isAnimated ? frames.length : 0 - boot: (_context, _buffer, userData) => { - userData.asciiData = asciiData +function main(pos, context) { + const { x, y } = pos - // If we have animation frames, store them - if (frames && frames.length > 0) { - userData.frames = frames - userData.isAnimated = true - userData.frameCount = frames.length - } - }, + let value = 0 - main: (pos, context, _cursor, _buffer, userData) => { - const { x, y } = pos + if (isAnimated && frames) { + const frameIndex = context.frame % frameCount + const currentFrame = frames[frameIndex] + value = getImageValue(currentFrame, x, y) + } else { + value = getImageValue(imageData, x, y) + } - // If we have animation frames, use the current frame based on context.frame - if (userData.isAnimated && userData.frames) { - const frameIndex = context.frame % userData.frameCount - const currentFrame = userData.frames[frameIndex] + return { + char: valueToChar(value, characterSet) + } +} +`.trim() +} - if (currentFrame && currentFrame[x] && currentFrame[x][y]) { - return { - char: currentFrame[x][y].char || ' ', - } - } - } - // Otherwise use the static data - else if (userData.asciiData && userData.asciiData[x] && userData.asciiData[x][y]) { - return { - char: userData.asciiData[x][y].char || ' ', - } +/** + * Unified function to process any program (image or code) + */ +export async function processProgram( + input: + | { + type: 'image' + imageData?: AsciiImageData + frames?: AsciiImageData[] + width?: number + height?: number + frameRate?: number } + | { + type: 'code' + code: string + width?: number + height?: number + frameRate?: number + }, + options: CodeProcessorOptions, +) { + const width = Math.max(1, input.width || 80) + const height = Math.max(1, input.height || 40) + const frameRate = input.frameRate || 30 - return { - char: ' ', - } - }, + let code: string + + if (input.type === 'image') { + const imageDataInput = input.imageData || {} + const framesInput = input.frames + + code = generateImageCode(imageDataInput, framesInput, frameRate) + } else { + code = input.code } - return program + // Pass image data to processor options + const processorOptions = { + ...options, + imageData: input.type === 'image' ? input.imageData : undefined, + frames: input.type === 'image' ? input.frames : undefined, + } + + const result = await processCodeModule(code, processorOptions) + + return { + ...result, + settings: { + width, + height, + frameRate, + }, + } } -export async function createCodeAsciiProgram( - width: number, - height: number, - frameRate: number, - programModuleLoader: { load: () => Promise }, +/** + * Creates a program from the unified processor result + */ +export async function createProgramFromProcessor( + processorResult: Awaited>, ): Promise { - const w = Math.max(1, width) - const h = Math.max(1, height) + if (!processorResult.success || !processorResult.module) { + return null + } + + const { settings } = processorResult + const w = Math.max(1, settings.width) + const h = Math.max(1, settings.height) let programModule = null - if (typeof programModuleLoader.load === 'function') { + if (typeof processorResult.module.load === 'function') { try { - programModule = await programModuleLoader.load() + programModule = await processorResult.module.load() } catch (error) { console.error('Failed to load program module:', error) return null @@ -97,7 +160,7 @@ export async function createCodeAsciiProgram( // Default program const program: Program = { settings: { - fps: frameRate, + fps: settings.frameRate, cols: w, rows: h, }, @@ -157,3 +220,69 @@ export async function createCodeAsciiProgram( return program } + +/** + * Creates a program directly from image data using the unified approach + */ +export async function createUnifiedImageProgram( + imageData: AsciiImageData, + width: number, + height: number, + frames: AsciiImageData[] | undefined, + frameRate: number, + options: CodeProcessorOptions, +): Promise<{ program: Program | null; code: string }> { + const result = await processProgram( + { + type: 'image', + imageData, + frames, + width, + height, + frameRate, + }, + options, + ) + + const code = generateImageCode(imageData, frames, frameRate) + const program = await createProgramFromProcessor(result) + + return { program, code } +} + +/** + * Creates a program directly from code using the unified approach + */ +export async function createUnifiedCodeProgram( + code: string, + width: number, + height: number, + frameRate: number, + options: CodeProcessorOptions, +): Promise<{ program: Program | null; code: string }> { + const result = await processProgram( + { + type: 'code', + code, + width, + height, + frameRate, + }, + options, + ) + + const program = await createProgramFromProcessor(result) + + return { program, code } +} + +export async function createImageAsciiProgram( + imageData: AsciiImageData, + width: number, + height: number, + frames: AsciiImageData[] | undefined, + frameRate: number, + options: CodeProcessorOptions, +): Promise<{ program: Program | null; code: string }> { + return createUnifiedImageProgram(imageData, width, height, frames, frameRate, options) +} diff --git a/app/lib/code-processor.ts b/app/lib/code-processor.ts index cd6e6c2..28900bd 100644 --- a/app/lib/code-processor.ts +++ b/app/lib/code-processor.ts @@ -15,10 +15,13 @@ import * as localUtils from './utils/patterns' // Cache for fetched modules const moduleCache = new Map() -interface CodeProcessorOptions { +export interface CodeProcessorOptions { esbuildService: EsbuildService timeout?: number target?: string + imageData?: unknown + frames?: unknown[] + settings?: unknown } interface LoadProcessedModule { @@ -79,7 +82,12 @@ export async function processCodeModule( platform: 'browser', write: false, treeShaking: false, - plugins: [createLocalUtilsPlugin(), createModuleResolutionPlugin(code)], + plugins: [ + createLocalUtilsPlugin(), + createImageDataPlugin(options.imageData, options.frames), + createSettingsPlugin(options.settings), + createModuleResolutionPlugin(code), + ], define: { global: 'globalThis', 'process.env.NODE_ENV': '"production"', @@ -175,6 +183,57 @@ function createLocalUtilsPlugin(): Plugin { } } +function createImageDataPlugin(imageData?: unknown, frames?: unknown[]): Plugin { + return { + name: 'image-data-plugin', + setup(build) { + // Resolve image data imports + build.onResolve({ filter: /^@\/imageData$/ }, () => ({ + path: 'image-data', + namespace: 'imageData', + })) + + // Load image data + build.onLoad({ filter: /^image-data$/, namespace: 'imageData' }, () => { + const imageDataStr = imageData ? JSON.stringify(imageData, null, 2) : '{}' + const framesStr = frames ? JSON.stringify(frames, null, 2) : 'null' + + return { + loader: 'ts', + contents: `// Image data exports +export const imageData = ${imageDataStr}; +export const frames = ${framesStr};`, + } + }) + }, + } +} + +function createSettingsPlugin(settings?: unknown): Plugin { + return { + name: 'settings-plugin', + setup(build) { + // Resolve settings imports + build.onResolve({ filter: /^@\/settings$/ }, () => ({ + path: 'settings', + namespace: 'settings', + })) + + // Load settings + build.onLoad({ filter: /^settings$/, namespace: 'settings' }, () => { + const settingsObj = settings as any + const characterSet = settingsObj?.output?.characterSet || '@%#*+=-:. ' + + return { + loader: 'ts', + contents: `// Settings exports +export const characterSet = ${JSON.stringify(characterSet)};`, + } + }) + }, + } +} + function createModuleResolutionPlugin(userCode: string): Plugin { return { name: 'module-resolution-plugin', diff --git a/app/lib/image-processor.ts b/app/lib/image-processor.ts index 976b174..8de2650 100644 --- a/app/lib/image-processor.ts +++ b/app/lib/image-processor.ts @@ -10,7 +10,7 @@ import * as esbuild from 'esbuild-wasm' import type { AsciiSettings } from '~/components/ascii-art-generator' import { processCodeModule as processCodeModuleNew } from './code-processor' -import type { Data } from './types' +import type { AsciiImageData } from './types' // Types export interface CachedMediaData { @@ -19,7 +19,7 @@ export interface CachedMediaData { rawFrames: MediaFrame[] processedFrames?: { settings: MediaProcessingSettings - frames: Data[] + frames: AsciiImageData[] } } @@ -49,11 +49,11 @@ export type MediaProcessingSettings = { } export type ProcessingResult = { - data: Data + data: AsciiImageData width: number height: number processedImageUrl?: string - frames?: Data[] + frames?: AsciiImageData[] rawFrames?: MediaFrame[] frameCount?: number sourceFps?: number @@ -65,12 +65,12 @@ export async function processAnimatedMedia( settings: AsciiSettings, progressCallback?: (frame: number) => void, ): Promise<{ - frames: Data[] - firstFrameData: Data + frames: AsciiImageData[] + firstFrameData: AsciiImageData firstFrameUrl: string | null }> { - const processedFrames: Data[] = [] - let firstFrameData: Data = {} + const processedFrames: AsciiImageData[] = [] + let firstFrameData: AsciiImageData = {} let firstFrameUrl: string | null = null for (let i = 0; i < rawFrames.length; i++) { @@ -101,7 +101,7 @@ export async function processImage( extractFrames: boolean = false, ): Promise { return new Promise((resolve) => { - if (extractFrames && settings.source.type === 'gif') { + if (extractFrames && imageData.includes('data:image/gif')) { handleGifExtraction(imageData, settings, resolve) return } @@ -143,14 +143,12 @@ export async function processImage( function createFallbackResponse(settings: AsciiSettings): ProcessingResult { const width = settings.output.columns || 80 const height = settings.output.rows || 40 - const data: Data = {} + const data: AsciiImageData = {} for (let x = 0; x < width; x++) { data[x] = {} for (let y = 0; y < height; y++) { - data[x][y] = { - char: '?', - } + data[x][y] = 0.5 // Default to middle density } } @@ -161,7 +159,7 @@ async function processImageData( sourceCanvas: HTMLCanvasElement, settings: AsciiSettings, ): Promise<{ - data: Data + data: AsciiImageData processedImageUrl?: string }> { const ctx = sourceCanvas.getContext('2d')! @@ -274,11 +272,10 @@ function convertPixelsToAscii( width: number, height: number, settings: AsciiSettings, -): Data { - const characterSet = settings.output.characterSet +): AsciiImageData { const colorMapping = settings.output.colorMapping - const data: Data = {} + const data: AsciiImageData = {} for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { @@ -315,18 +312,15 @@ function convertPixelsToAscii( settings.preprocessing.whitePoint, ) - // Map to character - const charIndex = Math.floor((mappingValue / 255) * (characterSet.length - 1)) - const char = characterSet[charIndex] || ' ' + // Convert to 0-1 value + const normalizedValue = mappingValue / 255 // Initialize column if needed if (!data[x]) { data[x] = {} } - data[x][y] = { - char, - } + data[x][y] = normalizedValue } } @@ -592,10 +586,10 @@ async function extractFirstGifFrame(img: HTMLImageElement, settings: AsciiSettin async function extractMultipleGifFrames( img: HTMLImageElement, - initialFrame: { data: Data; processedImageUrl?: string }, + initialFrame: { data: AsciiImageData; processedImageUrl?: string }, settings: AsciiSettings, -): Promise { - const frames: Data[] = [initialFrame.data] +): Promise { + const frames: AsciiImageData[] = [initialFrame.data] const totalFrames = Math.min(24, settings.animation.animationLength) try { @@ -631,9 +625,9 @@ async function loadGifFrame( frameImg: HTMLImageElement, originalImg: HTMLImageElement, frameIndex: number, - initialFrame: { data: Data; processedImageUrl?: string }, + initialFrame: { data: AsciiImageData; processedImageUrl?: string }, settings: AsciiSettings, -): Promise { +): Promise { return new Promise((resolveFrame) => { frameImg.onload = async () => { const frameCanvas = document.createElement('canvas') diff --git a/app/lib/types.ts b/app/lib/types.ts index ce3c0d7..98308d8 100644 --- a/app/lib/types.ts +++ b/app/lib/types.ts @@ -18,6 +18,12 @@ export interface Data { } } +export interface AsciiImageData { + [x: number]: { + [y: number]: number // 0-1 values + } +} + export const emptyCell: Cell = { char: ' ', } diff --git a/app/lib/utils/patterns.ts b/app/lib/utils/patterns.ts index 28ba051..8e239a1 100644 --- a/app/lib/utils/patterns.ts +++ b/app/lib/utils/patterns.ts @@ -43,3 +43,36 @@ export function stripes( return Math.floor(x / stripeWidth) % 2 } } + +/** + * Converts a 0-1 value to an ASCII character for rendering + * @param value - Normalized value between 0 and 1 + * @param chars - Optional character set to use (defaults to density-based ASCII) + * @returns ASCII character representing the value + */ +export function valueToChar(value: number, chars?: string): string { + // Clamp value between 0 and 1 + const clampedValue = Math.max(0, Math.min(1, value)) + + // Default ASCII density characters (from darkest to lightest) + const defaultChars = '@%#*+=-:. ' + const charSet = chars || defaultChars + + // Map value to character index + const index = Math.floor(clampedValue * (charSet.length - 1)) + return charSet[index] +} + +/** + * Gets a value from 2D image data array + * @param data - 2D array of 0-1 values [x][y] + * @param x - X coordinate + * @param y - Y coordinate + * @returns Value at coordinates or 0 if out of bounds + */ +export function getImageValue(data: number[][], x: number, y: number): number { + if (!data || !data[x] || data[x][y] === undefined) { + return 0 + } + return data[x][y] +} diff --git a/app/templates.ts b/app/templates.ts index 8716396..503c911 100644 --- a/app/templates.ts +++ b/app/templates.ts @@ -43,9 +43,9 @@ function post(context, cursor, buffer, userData) {}` export const DEFAULT_SETTINGS: AsciiSettings = { meta: { name: 'Default' }, source: { - type: 'image', data: null, - code: DEFAULT_CODE, + code: '', + fileName: '', }, preprocessing: { brightness: 0, @@ -82,7 +82,7 @@ export const TEMPLATES = { clock: { ...DEFAULT_SETTINGS, meta: { name: 'Clock' }, - source: { type: 'code', data: null, code: clock }, + source: { data: null, code: clock }, output: { ...DEFAULT_SETTINGS, columns: 61, rows: 9, grid: 'both' }, animation: { animationLength: 900, @@ -92,7 +92,7 @@ export const TEMPLATES = { numbers: { ...DEFAULT_SETTINGS, meta: { name: 'Numbers' }, - source: { type: 'code', data: null, code: numbers }, + source: { data: null, code: numbers }, output: { ...DEFAULT_SETTINGS, columns: 98, rows: 9, grid: 'both' }, animation: { animationLength: 1, @@ -102,7 +102,7 @@ export const TEMPLATES = { coins: { ...DEFAULT_SETTINGS, meta: { name: 'Coins' }, - source: { type: 'code', data: null, code: coins }, + source: { data: null, code: coins }, output: { ...DEFAULT_SETTINGS, columns: 120, rows: 40, grid: 'none' }, animation: { animationLength: 100, @@ -112,7 +112,7 @@ export const TEMPLATES = { unpkgDemo: { ...DEFAULT_SETTINGS, meta: { name: 'Perlin Noise (Unpkg)' }, - source: { type: 'code', data: null, code: unpkgDemo }, + source: { data: null, code: unpkgDemo }, output: { ...DEFAULT_SETTINGS, columns: 80, rows: 40, grid: 'none' }, animation: { animationLength: 300, @@ -123,7 +123,6 @@ export const TEMPLATES = { ...DEFAULT_SETTINGS, meta: { name: 'Local Pattern' }, source: { - type: 'code', data: null, code: `import { checkerboard } from '@/utils' From 824da020ec11c4126a13b378543c1c401caa9db7 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Mon, 4 Aug 2025 10:03:46 +0100 Subject: [PATCH 13/26] Type fixes --- app/components/ascii-art-generator.tsx | 11 +-- app/components/ascii-preview.tsx | 2 +- app/lib/ascii-program.ts | 129 +------------------------ app/lib/code-processor.ts | 11 ++- app/lib/image-processor.ts | 8 +- 5 files changed, 18 insertions(+), 143 deletions(-) diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index f6e6647..b5d3b7f 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -352,13 +352,10 @@ export function AsciiArtGenerator() { return } - const newProgram = await createProgramFromProcessor({ - ...result, - settings: { - width: columns, - height: rows, - frameRate: currentSettings.animation.frameRate, - }, + const newProgram = await createProgramFromProcessor(result, { + width: columns, + height: rows, + frameRate: currentSettings.animation.frameRate, }) setProgram(newProgram) diff --git a/app/components/ascii-preview.tsx b/app/components/ascii-preview.tsx index 7be841b..1c72718 100644 --- a/app/components/ascii-preview.tsx +++ b/app/components/ascii-preview.tsx @@ -58,7 +58,7 @@ const DemoCard = ({ onClick?: () => void }) => ( + */}
    )} From b6c178b0770a545afff39b7f55e918e93788df54 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Mon, 4 Aug 2025 10:46:39 +0100 Subject: [PATCH 17/26] Fix stored image aspect ratio --- app/components/ascii-art-generator.tsx | 3 ++- app/components/output-options.tsx | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index f5b1603..afee351 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -52,6 +52,7 @@ export interface AsciiSettings { data: string | null code: string fileName: string + imageDimensions?: { width: number; height: number } } preprocessing: { brightness: number @@ -434,7 +435,6 @@ export function AsciiArtGenerator() { return ( prevOutput.columns !== output.columns || prevOutput.rows !== output.rows || - prevOutput.characterSet !== output.characterSet || prevOutput.colorMapping !== output.colorMapping || prevPreprocessing.whitePoint !== preprocessing.whitePoint || prevPreprocessing.blackPoint !== preprocessing.blackPoint || @@ -799,6 +799,7 @@ export function AsciiArtGenerator() { updateSettings('output', changes)} + sourceImageDimensions={settings.source.imageDimensions} /> {/* Animation Options (always visible) */}
    diff --git a/app/components/output-options.tsx b/app/components/output-options.tsx index c2c74d4..aaae1a9 100644 --- a/app/components/output-options.tsx +++ b/app/components/output-options.tsx @@ -38,6 +38,7 @@ interface OutputOptionsProps { colorMapping: ColorMappingType }>, ) => void + sourceImageDimensions?: { width: number; height: number } } export const predefinedCharacterSets = { @@ -71,7 +72,11 @@ const gridOptions: GridType[] = ['none', 'horizontal', 'vertical', 'both'] const colorMappingOptions: ColorMappingType[] = ['brightness', 'hue', 'saturation'] -export function OutputOptions({ settings, updateSettings }: OutputOptionsProps) { +export function OutputOptions({ + settings, + updateSettings, + sourceImageDimensions, +}: OutputOptionsProps) { const [selectedCharSet, setSelectedCharSet] = useState('standard') const handleCharacterSetChange = (value: string) => { @@ -133,6 +138,11 @@ export function OutputOptions({ settings, updateSettings }: OutputOptionsProps) aspectRatioFromImg={settings.useImageAspectRatio} onAspectRatioFromImgChange={(value) => { updateSettings({ useImageAspectRatio: value }) + if (sourceImageDimensions) { + // Use stored dimensions if available + const aspectRatio = sourceImageDimensions.width / sourceImageDimensions.height + updateSettings({ aspectRatio }) + } }} onAspectRatioChange={(value) => updateSettings({ aspectRatio: value })} /> From 8b52248979edf70a8a53d576d2d057310c619350 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Mon, 4 Aug 2025 12:16:40 +0100 Subject: [PATCH 18/26] Example hybrid template --- app/components/ascii-art-generator.tsx | 9 ++---- app/components/output-options.tsx | 16 +++++++++- app/exampleImage.ts | 2 ++ app/templates.ts | 41 ++++++++++++++++++++++++-- 4 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 app/exampleImage.ts diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index afee351..59b404a 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -18,6 +18,7 @@ import { ExportOptions } from '~/components/export-options' import { OutputOptions } from '~/components/output-options' import { PreprocessingOptions } from '~/components/preprocessing-options' import { SourceSelector } from '~/components/source-selector' +import { exampleImage } from '~/exampleImage' import { useEsbuild } from '~/hooks/use-esbuild' import type { Program } from '~/lib/animation' import { createProgramFromProcessor, generateImageCode } from '~/lib/ascii-program' @@ -29,13 +30,7 @@ import { } from '~/lib/image-processor' import type { AsciiImageData } from '~/lib/types' import { cn } from '~/lib/utils' -import { - DEFAULT_CODE, - DEFAULT_SETTINGS, - exampleImage, - TEMPLATES, - TemplateType, -} from '~/templates' +import { DEFAULT_CODE, DEFAULT_SETTINGS, TEMPLATES, TemplateType } from '~/templates' import { AnimationOptions } from './animation-options' import { CodeSidebar } from './code-sidebar' diff --git a/app/components/output-options.tsx b/app/components/output-options.tsx index aaae1a9..bf2c0f1 100644 --- a/app/components/output-options.tsx +++ b/app/components/output-options.tsx @@ -5,7 +5,7 @@ * * Copyright Oxide Computer Company */ -import { useState } from 'react' +import { useEffect, useState } from 'react' import { InputSwitch } from '~/lib/ui/src' import { InputSelect } from '~/lib/ui/src/components/InputSelect/InputSelect' @@ -72,6 +72,15 @@ const gridOptions: GridType[] = ['none', 'horizontal', 'vertical', 'both'] const colorMappingOptions: ColorMappingType[] = ['brightness', 'hue', 'saturation'] +const findMatchingCharacterSet = (characterSet: string): CharacterSet => { + for (const [key, value] of Object.entries(predefinedCharacterSets)) { + if (value === characterSet) { + return key as CharacterSet + } + } + return 'custom' +} + export function OutputOptions({ settings, updateSettings, @@ -92,6 +101,11 @@ export function OutputOptions({ setSelectedCharSet('custom') } + useEffect(() => { + const matchingSet = findMatchingCharacterSet(settings.characterSet) + setSelectedCharSet(matchingSet) + }, [settings.characterSet]) + return ( diff --git a/app/exampleImage.ts b/app/exampleImage.ts new file mode 100644 index 0000000..1d15493 --- /dev/null +++ b/app/exampleImage.ts @@ -0,0 +1,2 @@ +export const exampleImage = + 'data:image/png;base64,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' diff --git a/app/templates.ts b/app/templates.ts index 503c911..b92bd89 100644 --- a/app/templates.ts +++ b/app/templates.ts @@ -7,6 +7,7 @@ */ import { AsciiSettings } from './components/ascii-art-generator' import { predefinedCharacterSets } from './components/output-options' +import { exampleImage } from './exampleImage' import { clock } from './scripts/clock' import { coins } from './scripts/coins' import { numbers } from './scripts/numbers' @@ -137,9 +138,43 @@ function main(coord, context, cursor, buffer) { frameRate: 1, }, }, + imageCode: { + ...DEFAULT_SETTINGS, + meta: { name: 'Image code' }, + source: { + data: exampleImage, + fileName: 'example-grad.png', + code: `import { valueToChar, getImageValue } from '@/utils' +import { imageData, frames } from '@/imageData' +import { characterSet } from '@/settings' + +const speed = 4; //~ number 0-20 step=1 + +const { sin, abs } = Math + +function main(pos, context) { + const { x, y } = pos + + let value = getImageValue(imageData, x, y) + + const mod = abs(sin(y + context.frame * speed * 0.01)) + return { + char: valueToChar(value * mod, characterSet) + } +}`, + }, + output: { + ...DEFAULT_SETTINGS.output, + characterSet: '=-:. ', + columns: 80, + rows: 40, + grid: 'none', + }, + animation: { + animationLength: 100, + frameRate: 30, + }, + }, } export type TemplateType = keyof typeof TEMPLATES - -export const exampleImage = - 'data:image/png;base64,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' From 115a564d4b6d263b1442b9a469c2e6204095e7f0 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Mon, 4 Aug 2025 12:18:40 +0100 Subject: [PATCH 19/26] Update app/exampleImage.ts Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- app/exampleImage.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/exampleImage.ts b/app/exampleImage.ts index 1d15493..9167de1 100644 --- a/app/exampleImage.ts +++ b/app/exampleImage.ts @@ -1,2 +1,10 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ + export const exampleImage = 'data:image/png;base64,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' From c2b73b815b153d37fad598fcc15423b448209a3e Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Thu, 7 Aug 2025 22:20:11 +0100 Subject: [PATCH 20/26] Cleanup --- app/components/animation-options.tsx | 3 --- app/lib/ascii-program.ts | 2 +- app/lib/code-processor.ts | 2 +- app/lib/image-processor.ts | 30 --------------------- app/lib/utils/image.ts | 40 ++++++++++++++++++++++++++++ app/lib/utils/index.ts | 1 + app/lib/utils/patterns.ts | 33 ----------------------- 7 files changed, 43 insertions(+), 68 deletions(-) create mode 100644 app/lib/utils/image.ts diff --git a/app/components/animation-options.tsx b/app/components/animation-options.tsx index cdedf17..59f6f56 100644 --- a/app/components/animation-options.tsx +++ b/app/components/animation-options.tsx @@ -23,15 +23,12 @@ interface AnimationOptionsProps { } export function AnimationOptions({ settings, updateSettings }: AnimationOptionsProps) { - const isMediaSource = false // Always show all options since we unified the approach - return ( updateSettings({ animationLength: val })} - disabled={isMediaSource} > Animation Length diff --git a/app/lib/ascii-program.ts b/app/lib/ascii-program.ts index 4e85e34..ce57db1 100644 --- a/app/lib/ascii-program.ts +++ b/app/lib/ascii-program.ts @@ -1,7 +1,7 @@ /* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * file, you can obtain one at https://mozilla.org/MPL/2.0/. * * Copyright Oxide Computer Company */ diff --git a/app/lib/code-processor.ts b/app/lib/code-processor.ts index c056128..feb27fb 100644 --- a/app/lib/code-processor.ts +++ b/app/lib/code-processor.ts @@ -11,7 +11,7 @@ import { AsciiSettings } from '~/components/ascii-art-generator' import { type EsbuildService } from '~/hooks/use-esbuild' import type { Program } from './animation' -import * as localUtils from './utils/patterns' +import * as localUtils from './utils' // Cache for fetched modules const moduleCache = new Map() diff --git a/app/lib/image-processor.ts b/app/lib/image-processor.ts index 9e7c0c7..12d4680 100644 --- a/app/lib/image-processor.ts +++ b/app/lib/image-processor.ts @@ -5,11 +5,8 @@ * * Copyright Oxide Computer Company */ -import * as esbuild from 'esbuild-wasm' - import type { AsciiSettings } from '~/components/ascii-art-generator' -import { processCodeModule as processCodeModuleNew } from './code-processor' import type { AsciiImageData } from './types' // Types @@ -656,30 +653,3 @@ async function loadGifFrame( frameImg.src = originalImg.src + cacheBuster }) } - -// Code module processing with TypeScript support -export async function processCodeModule( - code: string, - options: { esbuildService: typeof esbuild; timeout?: number }, -) { - const result = await processCodeModuleNew(code, options) - - if (!result.success) { - console.error('Error preparing user code module:', result.error) - if (result.warnings && result.warnings.length > 0) { - console.warn('Warnings:', result.warnings) - } - return null - } - - if (result.warnings && result.warnings.length > 0) { - console.warn('Code processing warnings:', result.warnings) - } - - // Return a simple wrapper that matches the legacy functionality - return { - async load() { - return await result.module!.load() - }, - } -} diff --git a/app/lib/utils/image.ts b/app/lib/utils/image.ts new file mode 100644 index 0000000..ac42c96 --- /dev/null +++ b/app/lib/utils/image.ts @@ -0,0 +1,40 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ + +/** + * Converts a 0-1 value to an ASCII character for rendering + * @param value - Normalized value between 0 and 1 + * @param chars - Optional character set to use (defaults to density-based ASCII) + * @returns ASCII character representing the value + */ +export function valueToChar(value: number, chars?: string): string { + // Clamp value between 0 and 1 + const clampedValue = Math.max(0, Math.min(1, value)) + + // Default ASCII density characters (from darkest to lightest) + const defaultChars = '@%#*+=-:. ' + const charSet = chars || defaultChars + + // Map value to character index + const index = Math.floor(clampedValue * (charSet.length - 1)) + return charSet[index] +} + +/** + * Gets a value from 2D image data array + * @param data - 2D array of 0-1 values [x][y] + * @param x - X coordinate + * @param y - Y coordinate + * @returns Value at coordinates or 0 if out of bounds + */ +export function getImageValue(data: number[][], x: number, y: number): number { + if (!data || !data[x] || data[x][y] === undefined) { + return 0 + } + return data[x][y] +} diff --git a/app/lib/utils/index.ts b/app/lib/utils/index.ts index 272c0b5..7f8eae1 100644 --- a/app/lib/utils/index.ts +++ b/app/lib/utils/index.ts @@ -7,3 +7,4 @@ */ export * from './patterns' +export * from './image' diff --git a/app/lib/utils/patterns.ts b/app/lib/utils/patterns.ts index 8e239a1..28ba051 100644 --- a/app/lib/utils/patterns.ts +++ b/app/lib/utils/patterns.ts @@ -43,36 +43,3 @@ export function stripes( return Math.floor(x / stripeWidth) % 2 } } - -/** - * Converts a 0-1 value to an ASCII character for rendering - * @param value - Normalized value between 0 and 1 - * @param chars - Optional character set to use (defaults to density-based ASCII) - * @returns ASCII character representing the value - */ -export function valueToChar(value: number, chars?: string): string { - // Clamp value between 0 and 1 - const clampedValue = Math.max(0, Math.min(1, value)) - - // Default ASCII density characters (from darkest to lightest) - const defaultChars = '@%#*+=-:. ' - const charSet = chars || defaultChars - - // Map value to character index - const index = Math.floor(clampedValue * (charSet.length - 1)) - return charSet[index] -} - -/** - * Gets a value from 2D image data array - * @param data - 2D array of 0-1 values [x][y] - * @param x - X coordinate - * @param y - Y coordinate - * @returns Value at coordinates or 0 if out of bounds - */ -export function getImageValue(data: number[][], x: number, y: number): number { - if (!data || !data[x] || data[x][y] === undefined) { - return 0 - } - return data[x][y] -} From 1f2c6385880232a43f8e9db6092cee5641e27040 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Tue, 19 Aug 2025 10:49:51 +0100 Subject: [PATCH 21/26] Rename --- app/components/code-sidebar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/code-sidebar.tsx b/app/components/code-sidebar.tsx index b5d5892..9767a8c 100644 --- a/app/components/code-sidebar.tsx +++ b/app/components/code-sidebar.tsx @@ -80,7 +80,7 @@ const UTILS = [ importStatement: "import { stripes } from '@/utils'", }, { - name: 'valueToChar', + name: 'value-to-char', description: 'Converts a 0-1 value to an ASCII character for rendering', type: '(value: number, chars?: string) => string', example: `import { valueToChar, getImageValue } from '@/utils' @@ -95,7 +95,7 @@ function main(pos, context) { "import { valueToChar } from '@/utils'\nimport { characterSet } from '@/settings'", }, { - name: 'getImageValue', + name: 'get-image-value', description: 'Gets a value from 2D image data array with bounds checking', type: '(data: number[][], x: number, y: number) => number', example: `import { getImageValue, valueToChar } from '@/utils' From ebbc5a7efd581454841a1e480cca8c0142f59ea0 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Tue, 19 Aug 2025 17:10:38 +0100 Subject: [PATCH 22/26] esbuild spinner and replace media fixes --- app/components/ascii-art-generator.tsx | 122 ++++++++++----------- app/components/ascii-preview.tsx | 17 ++- app/components/spinner.tsx | 123 ++++++++++++++++++++++ app/hooks/use-esbuild.tsx | 2 +- app/lib/code-processor.ts | 4 +- app/lib/{utils => localUtils}/image.ts | 0 app/lib/{utils => localUtils}/index.ts | 0 app/lib/{utils => localUtils}/patterns.ts | 0 bun.lock | 9 +- package.json | 3 +- 10 files changed, 206 insertions(+), 74 deletions(-) create mode 100644 app/components/spinner.tsx rename app/lib/{utils => localUtils}/image.ts (100%) rename app/lib/{utils => localUtils}/index.ts (100%) rename app/lib/{utils => localUtils}/patterns.ts (100%) diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index 59b404a..bbf94c4 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -35,6 +35,7 @@ import { DEFAULT_CODE, DEFAULT_SETTINGS, TEMPLATES, TemplateType } from '~/templ import { AnimationOptions } from './animation-options' import { CodeSidebar } from './code-sidebar' import { ProjectManagement } from './project-management' +import { DelayedSpinner } from './spinner' export type GridType = 'none' | 'horizontal' | 'vertical' | 'both' export type ColorMappingType = 'brightness' | 'hue' | 'saturation' @@ -80,6 +81,12 @@ export interface AsciiSettings { } export function AsciiArtGenerator() { + const { + esbuildService, + isInitialized: esbuildInitialized, + isInitializing: esbuildInitializing, + } = useEsbuild() + // Core state const [settings, setSettings] = useState(DEFAULT_SETTINGS) const [program, setProgram] = useState(null) @@ -135,12 +142,6 @@ export function AsciiArtGenerator() { [showCodeSidebar], ) - const { - esbuildService, - isInitialized: esbuildInitialized, - isInitializing: esbuildInitializing, - } = useEsbuild() - // Load template from URL parameter on mount useEffect(() => { if (!esbuildInitialized || esbuildInitializing) return @@ -301,15 +302,6 @@ export function AsciiArtGenerator() { frames: AsciiImageData[] processedImageUrl: string | null } | null> => { - if (!esbuildService || !esbuildInitialized) { - if (esbuildInitializing) { - toast('Code processor is still initializing. Please wait a moment.') - } else { - toast('Code processor not ready. Please try again.') - } - return null - } - const processGif = async (): Promise<{ frames: number imageData: AsciiImageData @@ -385,15 +377,6 @@ export function AsciiArtGenerator() { frames: AsciiImageData[] | null, ) => { try { - if (!esbuildService || !esbuildInitialized) { - if (esbuildInitializing) { - toast('Code processor is still initializing. Please wait a moment.') - } else { - toast('Code processor not ready. Please try again.') - } - return - } - const result = await processCodeModule(currentSettings.source.code, { esbuildService: esbuildService, timeout: 5000, @@ -424,10 +407,15 @@ export function AsciiArtGenerator() { lastProcessedSettings: AsciiSettings, currentSettings: AsciiSettings, ) => { - const { output, preprocessing } = currentSettings - const { output: prevOutput, preprocessing: prevPreprocessing } = lastProcessedSettings + const { output, preprocessing, source } = currentSettings + const { + output: prevOutput, + preprocessing: prevPreprocessing, + source: prevSource, + } = lastProcessedSettings return ( + prevSource.data !== source.data || prevOutput.columns !== output.columns || prevOutput.rows !== output.rows || prevOutput.colorMapping !== output.colorMapping || @@ -616,7 +604,6 @@ export function AsciiArtGenerator() { }, })) - setShowCodeSidebar(false) return true } @@ -874,47 +861,50 @@ export function AsciiArtGenerator() { - {/* Main Content Area */} -
    -
    - {/* ASCII Preview */} -
    - {dragActive && ( -
    - )} - - updateSourceAndAspectRatio(exampleImage, 'image', 'example-grad.png') - } +
    + + {/* Main Content Area */} + {esbuildInitialized && !esbuildInitializing && ( +
    + {/* ASCII Preview */} +
    + {dragActive && ( +
    + )} + + updateSourceAndAspectRatio(exampleImage, 'image', 'example-grad.png') + } + /> +
    + + {/* Code Sidebar */} + updateSettings('source', changes)} + isOpen={showCodeSidebar} />
    - - {/* Code Sidebar */} - updateSettings('source', changes)} - isOpen={showCodeSidebar} - /> -
    + )}
    ) diff --git a/app/components/ascii-preview.tsx b/app/components/ascii-preview.tsx index 1c72718..3745f8b 100644 --- a/app/components/ascii-preview.tsx +++ b/app/components/ascii-preview.tsx @@ -14,6 +14,7 @@ import { Resize16Icon, } from '@oxide/design-system/icons/react' import useResizeObserver from '@react-hook/resize-observer' +import { motion } from 'motion/react' import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react' import { useHotkeys } from 'react-hotkeys-hook' @@ -52,12 +53,21 @@ const DemoCard = ({ icon, title, onClick, + index, }: { icon: React.ReactNode title: string onClick?: () => void + index: number }) => ( -
    {title}
    - + ) const useSize = (target: HTMLDivElement | null) => { @@ -191,6 +201,7 @@ export function AsciiPreview({
    } title="Upload image or GIF" onClick={() => { @@ -203,11 +214,13 @@ export function AsciiPreview({ }} /> } title="Run example script" onClick={onExampleScriptClick} /> } title="Use example image" onClick={onExampleImageClick} diff --git a/app/components/spinner.tsx b/app/components/spinner.tsx new file mode 100644 index 0000000..cadaff0 --- /dev/null +++ b/app/components/spinner.tsx @@ -0,0 +1,123 @@ +import { useEffect, useRef, useState, type ReactNode } from 'react' +import { useInterval } from 'usehooks-ts' + +export const Spinner = ({ className }: { className?: string }) => { + const chars = ['|', '/', '—', '\\'] + + const [loader, setLoader] = useState({ + char: chars[0], + index: 0, + }) + + useInterval(() => { + let index = loader.index + if (index < chars.length - 1) { + index++ + } else { + index = 0 + } + + setLoader({ + char: chars[index], + index: index, + }) + }, 150) + + return {loader.char} +} + +type Props = { + isLoading: boolean + children?: ReactNode + minTime?: number +} + +/** Loading spinner that shows for a minimum of `minTime` */ +export const SpinnerLoader = ({ isLoading, children = null, minTime = 500 }: Props) => { + const [isVisible, setIsVisible] = useState(false) + const hideTimeout = useRef(null) + const showTimeout = useRef(null) + const loadingStartTime = useRef(0) + + useEffect(() => { + if (isLoading) { + loadingStartTime.current = Date.now() + // Only show spinner after 250ms delay + showTimeout.current = setTimeout(() => { + setIsVisible(true) + }, 250) + } else { + // Clear the show timer if it's still running + if (showTimeout.current) clearTimeout(showTimeout.current) + // Clear the hide timer if it's still running + if (hideTimeout.current) clearTimeout(hideTimeout.current) + + // If spinner is visible, turn it off making sure it showed for at least `minTime` + if (isVisible) { + const elapsedTime = Date.now() - loadingStartTime.current + const remainingTime = Math.max(0, minTime - elapsedTime) + if (remainingTime === 0) { + setIsVisible(false) // might as well not use a timeout + } else { + hideTimeout.current = setTimeout(() => setIsVisible(false), remainingTime) + } + } + } + + return () => { + if (hideTimeout.current) clearTimeout(hideTimeout.current) + if (showTimeout.current) clearTimeout(showTimeout.current) + } + }, [isLoading, minTime, isVisible]) + + return isVisible ? ( +
    + +
    Initializing…
    +
    + ) : ( + <>{children} + ) +} + +type DelayedSpinnerProps = { + isLoading: boolean + delay?: number +} + +/** Overlay spinner that only shows after a delay */ +export const DelayedSpinner = ({ isLoading, delay = 250 }: DelayedSpinnerProps) => { + const [showSpinner, setShowSpinner] = useState(false) + const showTimeout = useRef(null) + + useEffect(() => { + if (isLoading) { + // Show spinner after delay + showTimeout.current = setTimeout(() => { + setShowSpinner(true) + }, delay) + } else { + // Clear timeout and hide spinner immediately when loading stops + if (showTimeout.current) { + clearTimeout(showTimeout.current) + showTimeout.current = null + } + setShowSpinner(false) + } + + return () => { + if (showTimeout.current) { + clearTimeout(showTimeout.current) + } + } + }, [isLoading, delay]) + + if (!showSpinner) return null + + return ( +
    + +
    Initializing…
    +
    + ) +} diff --git a/app/hooks/use-esbuild.tsx b/app/hooks/use-esbuild.tsx index 894ef75..2b6471a 100644 --- a/app/hooks/use-esbuild.tsx +++ b/app/hooks/use-esbuild.tsx @@ -28,7 +28,7 @@ export function useEsbuild() { try { await esbuild.initialize({ - wasmURL: 'https://unpkg.com/esbuild-wasm/esbuild.wasm', + wasmURL: 'https://unpkg.com/esbuild-wasm@0.25.9/esbuild.wasm', }) esbuildService.current = esbuild setIsInitialized(true) diff --git a/app/lib/code-processor.ts b/app/lib/code-processor.ts index feb27fb..5d2c3be 100644 --- a/app/lib/code-processor.ts +++ b/app/lib/code-processor.ts @@ -11,13 +11,13 @@ import { AsciiSettings } from '~/components/ascii-art-generator' import { type EsbuildService } from '~/hooks/use-esbuild' import type { Program } from './animation' -import * as localUtils from './utils' +import * as localUtils from './localUtils' // Cache for fetched modules const moduleCache = new Map() export interface CodeProcessorOptions { - esbuildService: EsbuildService + esbuildService: EsbuildService | null timeout?: number target?: string imageData?: unknown diff --git a/app/lib/utils/image.ts b/app/lib/localUtils/image.ts similarity index 100% rename from app/lib/utils/image.ts rename to app/lib/localUtils/image.ts diff --git a/app/lib/utils/index.ts b/app/lib/localUtils/index.ts similarity index 100% rename from app/lib/utils/index.ts rename to app/lib/localUtils/index.ts diff --git a/app/lib/utils/patterns.ts b/app/lib/localUtils/patterns.ts similarity index 100% rename from app/lib/utils/patterns.ts rename to app/lib/localUtils/patterns.ts diff --git a/bun.lock b/bun.lock index 0ea23ba..1ccdca5 100644 --- a/bun.lock +++ b/bun.lock @@ -17,7 +17,7 @@ "@react-hook/resize-observer": "^2.0.2", "@uiw/react-codemirror": "^4.23.10", "clsx": "^2.1.1", - "esbuild-wasm": "^0.25.8", + "esbuild-wasm": "^0.25.9", "eslint-config-prettier": "^10.1.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-prettier": "^5.2.3", @@ -38,6 +38,7 @@ "sonner": "^2.0.2", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", + "usehooks-ts": "^3.1.1", "vite-tsconfig-paths": "^5.1.4", }, "devDependencies": { @@ -813,7 +814,7 @@ "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": "bin/esbuild" }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], - "esbuild-wasm": ["esbuild-wasm@0.25.8", "", { "bin": { "esbuild": "bin/esbuild" } }, "sha512-VFUDMoZdf/NsyCepv5heZqvNLYj9HL+xEKG5tktsFbx+shR8Dt9MchKBEdu/5the2RfTzgxkO6B/nUfzmsWN9Q=="], + "esbuild-wasm": ["esbuild-wasm@0.25.9", "", { "bin": { "esbuild": "bin/esbuild" } }, "sha512-Jpv5tCSwQg18aCqCRD3oHIX/prBhXMDapIoG//A+6+dV0e7KQMGFg85ihJ5T1EeMjbZjON3TqFy0VrGAnIHLDA=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -1059,6 +1060,8 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": "cli.js" }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], @@ -1389,6 +1392,8 @@ "use-sync-external-store": ["use-sync-external-store@1.5.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="], + "usehooks-ts": ["usehooks-ts@3.1.1", "", { "dependencies": { "lodash.debounce": "^4.0.8" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "utrie": ["utrie@1.0.2", "", { "dependencies": { "base64-arraybuffer": "^1.0.2" } }, "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw=="], diff --git a/package.json b/package.json index b31d94a..0fb22b7 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@react-hook/resize-observer": "^2.0.2", "@uiw/react-codemirror": "^4.23.10", "clsx": "^2.1.1", - "esbuild-wasm": "^0.25.8", + "esbuild-wasm": "^0.25.9", "eslint-config-prettier": "^10.1.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-prettier": "^5.2.3", @@ -51,6 +51,7 @@ "sonner": "^2.0.2", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", + "usehooks-ts": "^3.1.1", "vite-tsconfig-paths": "^5.1.4" }, "devDependencies": { From c638b79441774f5ec239ab07632aaf7ab58004b0 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Tue, 19 Aug 2025 17:11:35 +0100 Subject: [PATCH 23/26] Update app/components/spinner.tsx license Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- app/components/spinner.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/components/spinner.tsx b/app/components/spinner.tsx index cadaff0..58765f3 100644 --- a/app/components/spinner.tsx +++ b/app/components/spinner.tsx @@ -1,3 +1,11 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ + import { useEffect, useRef, useState, type ReactNode } from 'react' import { useInterval } from 'usehooks-ts' From ba058c7ce7209e27b2e36ee7211c239beb2485fd Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Tue, 19 Aug 2025 17:13:21 +0100 Subject: [PATCH 24/26] Remove unused component --- app/components/spinner.tsx | 67 ++++---------------------------------- 1 file changed, 7 insertions(+), 60 deletions(-) diff --git a/app/components/spinner.tsx b/app/components/spinner.tsx index 58765f3..bbd3bc2 100644 --- a/app/components/spinner.tsx +++ b/app/components/spinner.tsx @@ -6,7 +6,7 @@ * Copyright Oxide Computer Company */ -import { useEffect, useRef, useState, type ReactNode } from 'react' +import { useEffect, useRef, useState } from 'react' import { useInterval } from 'usehooks-ts' export const Spinner = ({ className }: { className?: string }) => { @@ -34,67 +34,14 @@ export const Spinner = ({ className }: { className?: string }) => { return {loader.char} } -type Props = { - isLoading: boolean - children?: ReactNode - minTime?: number -} - -/** Loading spinner that shows for a minimum of `minTime` */ -export const SpinnerLoader = ({ isLoading, children = null, minTime = 500 }: Props) => { - const [isVisible, setIsVisible] = useState(false) - const hideTimeout = useRef(null) - const showTimeout = useRef(null) - const loadingStartTime = useRef(0) - - useEffect(() => { - if (isLoading) { - loadingStartTime.current = Date.now() - // Only show spinner after 250ms delay - showTimeout.current = setTimeout(() => { - setIsVisible(true) - }, 250) - } else { - // Clear the show timer if it's still running - if (showTimeout.current) clearTimeout(showTimeout.current) - // Clear the hide timer if it's still running - if (hideTimeout.current) clearTimeout(hideTimeout.current) - - // If spinner is visible, turn it off making sure it showed for at least `minTime` - if (isVisible) { - const elapsedTime = Date.now() - loadingStartTime.current - const remainingTime = Math.max(0, minTime - elapsedTime) - if (remainingTime === 0) { - setIsVisible(false) // might as well not use a timeout - } else { - hideTimeout.current = setTimeout(() => setIsVisible(false), remainingTime) - } - } - } - - return () => { - if (hideTimeout.current) clearTimeout(hideTimeout.current) - if (showTimeout.current) clearTimeout(showTimeout.current) - } - }, [isLoading, minTime, isVisible]) - - return isVisible ? ( -
    - -
    Initializing…
    -
    - ) : ( - <>{children} - ) -} - -type DelayedSpinnerProps = { +/** Overlay spinner that only shows after a delay */ +export const DelayedSpinner = ({ + isLoading, + delay = 250, +}: { isLoading: boolean delay?: number -} - -/** Overlay spinner that only shows after a delay */ -export const DelayedSpinner = ({ isLoading, delay = 250 }: DelayedSpinnerProps) => { +}) => { const [showSpinner, setShowSpinner] = useState(false) const showTimeout = useRef(null) From d13bfc40ed93230e8aada56464ca04faef3cf9a2 Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Tue, 19 Aug 2025 17:15:42 +0100 Subject: [PATCH 25/26] Use imported character set --- app/templates.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/templates.ts b/app/templates.ts index b92bd89..5e2f71f 100644 --- a/app/templates.ts +++ b/app/templates.ts @@ -17,8 +17,8 @@ export const DEFAULT_CODE = `/** @author ertdfgcvb @url https://play.ertdfgcvb.xyz/#/src/basics/time_milliseconds */ +import { characterSet } from '@/settings' -const pattern = 'ABCxyz01═|+:. '; //~ text const speed = 1; //~ number 0-10 step=0.5 const amplitude = 18; //~ number 1-50 @@ -28,8 +28,8 @@ function main(coord, context, cursor, buffer) { const x = coord.x const y = coord.y const o = Math.sin(y * Math.sin(t) * 0.2 + x * 0.04 + t) * amplitude - const i = Math.round(Math.abs(x + y + o)) % pattern.length - return pattern[i] + const i = Math.round(Math.abs(x + y + o)) % characterSet.length + return characterSet[i] } // Optional: Runs once at startup From 4b6e6be1b3bbafcda412418c5fa6aeea750f2cbe Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Tue, 19 Aug 2025 17:25:53 +0100 Subject: [PATCH 26/26] Tweak default template behaviour --- app/components/ascii-art-generator.tsx | 19 ++++++----- app/scripts/sin.ts | 35 +++++++++++++++++++ app/templates.ts | 47 ++++++++------------------ 3 files changed, 59 insertions(+), 42 deletions(-) create mode 100644 app/scripts/sin.ts diff --git a/app/components/ascii-art-generator.tsx b/app/components/ascii-art-generator.tsx index bbf94c4..43ab023 100644 --- a/app/components/ascii-art-generator.tsx +++ b/app/components/ascii-art-generator.tsx @@ -30,7 +30,7 @@ import { } from '~/lib/image-processor' import type { AsciiImageData } from '~/lib/types' import { cn } from '~/lib/utils' -import { DEFAULT_CODE, DEFAULT_SETTINGS, TEMPLATES, TemplateType } from '~/templates' +import { DEFAULT_SETTINGS, TEMPLATES, TemplateType } from '~/templates' import { AnimationOptions } from './animation-options' import { CodeSidebar } from './code-sidebar' @@ -684,14 +684,15 @@ export function AsciiArtGenerator() { const handleExampleScriptClick = useCallback(() => { // Open code sidebar and load the clock example setShowCodeSidebar(true) - const defaultTemplate = TEMPLATES.default - setPendingCode(DEFAULT_CODE) - updateSettings('source', { - data: null, - code: DEFAULT_CODE, - }) - updateSettings('output', defaultTemplate.output) - updateSettings('animation', defaultTemplate.animation) + const template = TEMPLATES.sin + setPendingCode(template.source.code) + updateSettings('source', template.source) + updateSettings('output', template.output) + updateSettings('export', template.export) + updateSettings('preprocessing', template.preprocessing) + updateSettings('meta', template.meta) + updateSettings('source', template.source) + updateSettings('animation', template.animation) }, [updateSettings]) const handleTemplateChange = (template: TemplateType) => { diff --git a/app/scripts/sin.ts b/app/scripts/sin.ts new file mode 100644 index 0000000..7e6ff98 --- /dev/null +++ b/app/scripts/sin.ts @@ -0,0 +1,35 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright Oxide Computer Company + */ + +export const sin = `/** +@author ertdfgcvb +@url https://play.ertdfgcvb.xyz/#/src/basics/time_milliseconds +*/ +import { characterSet } from '@/settings' + +const speed = 1; //~ number 0-10 step=0.5 +const amplitude = 18; //~ number 1-50 + +// Renders each cell +function main(coord, context, cursor, buffer) { + const t = context.frame * 0.01 * speed + const x = coord.x + const y = coord.y + const o = Math.sin(y * Math.sin(t) * 0.2 + x * 0.04 + t) * amplitude + const i = Math.round(Math.abs(x + y + o)) % characterSet.length + return characterSet[i] +} + +// Optional: Runs once at startup +function boot(context, buffer, userData) {} + +// Optional: Runs at the start of each frame +function pre(context, cursor, buffer, userData) {} + +// Optional: Runs after each frame is complete +function post(context, cursor, buffer, userData) {}` diff --git a/app/templates.ts b/app/templates.ts index 5e2f71f..f23ff23 100644 --- a/app/templates.ts +++ b/app/templates.ts @@ -11,36 +11,9 @@ import { exampleImage } from './exampleImage' import { clock } from './scripts/clock' import { coins } from './scripts/coins' import { numbers } from './scripts/numbers' +import { sin } from './scripts/sin' import { unpkgDemo } from './scripts/unpkg-demo' -export const DEFAULT_CODE = `/** -@author ertdfgcvb -@url https://play.ertdfgcvb.xyz/#/src/basics/time_milliseconds -*/ -import { characterSet } from '@/settings' - -const speed = 1; //~ number 0-10 step=0.5 -const amplitude = 18; //~ number 1-50 - -// Renders each cell -function main(coord, context, cursor, buffer) { - const t = context.frame * 0.01 * speed - const x = coord.x - const y = coord.y - const o = Math.sin(y * Math.sin(t) * 0.2 + x * 0.04 + t) * amplitude - const i = Math.round(Math.abs(x + y + o)) % characterSet.length - return characterSet[i] -} - -// Optional: Runs once at startup -function boot(context, buffer, userData) {} - -// Optional: Runs at the start of each frame -function pre(context, cursor, buffer, userData) {} - -// Optional: Runs after each frame is complete -function post(context, cursor, buffer, userData) {}` - export const DEFAULT_SETTINGS: AsciiSettings = { meta: { name: 'Default' }, source: { @@ -78,13 +51,21 @@ export const DEFAULT_SETTINGS: AsciiSettings = { } export const TEMPLATES = { - default: DEFAULT_SETTINGS, + sin: { + ...DEFAULT_SETTINGS, + meta: { name: 'Sin' }, + source: { data: null, code: sin }, + animation: { + animationLength: 900, + frameRate: 15, + }, + }, custom: { ...DEFAULT_SETTINGS, meta: { name: 'Custom Project' } }, clock: { ...DEFAULT_SETTINGS, meta: { name: 'Clock' }, source: { data: null, code: clock }, - output: { ...DEFAULT_SETTINGS, columns: 61, rows: 9, grid: 'both' }, + output: { ...DEFAULT_SETTINGS.output, columns: 61, rows: 9, grid: 'both' }, animation: { animationLength: 900, frameRate: 15, @@ -94,7 +75,7 @@ export const TEMPLATES = { ...DEFAULT_SETTINGS, meta: { name: 'Numbers' }, source: { data: null, code: numbers }, - output: { ...DEFAULT_SETTINGS, columns: 98, rows: 9, grid: 'both' }, + output: { ...DEFAULT_SETTINGS.output, columns: 98, rows: 9, grid: 'both' }, animation: { animationLength: 1, frameRate: 1, @@ -104,7 +85,7 @@ export const TEMPLATES = { ...DEFAULT_SETTINGS, meta: { name: 'Coins' }, source: { data: null, code: coins }, - output: { ...DEFAULT_SETTINGS, columns: 120, rows: 40, grid: 'none' }, + output: { ...DEFAULT_SETTINGS.output, columns: 120, rows: 40, grid: 'none' }, animation: { animationLength: 100, frameRate: 30, @@ -114,7 +95,7 @@ export const TEMPLATES = { ...DEFAULT_SETTINGS, meta: { name: 'Perlin Noise (Unpkg)' }, source: { data: null, code: unpkgDemo }, - output: { ...DEFAULT_SETTINGS, columns: 80, rows: 40, grid: 'none' }, + output: { ...DEFAULT_SETTINGS.output, columns: 80, rows: 40, grid: 'none' }, animation: { animationLength: 300, frameRate: 30,