├── postcss.config.js ├── tailwind.config.js ├── vite.config.ts ├── src ├── main.tsx ├── types │ └── viewer.ts ├── viewers │ ├── image-viewer.tsx │ ├── text-viewer.tsx │ ├── json-highlight-viewer.tsx │ ├── index.ts │ └── json-table-viewer.tsx ├── app.tsx ├── app.css ├── components │ ├── viewer-selector.tsx │ ├── file-uploader.tsx │ └── viewer-container.tsx └── utils │ └── file-detector.ts ├── tsconfig.node.json ├── .gitignore ├── index.html ├── examples ├── sample.json └── sample.txt ├── tsconfig.json ├── eslint.config.js ├── public └── vite.svg ├── package.json ├── README.md ├── LICENSE └── pnpm-lock.yaml /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | '@tailwindcss/postcss': {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: [ 4 | "./index.html", 5 | "./src/**/*.{js,ts,jsx,tsx}", 6 | ], 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | } 12 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | optimizeDeps: { 8 | exclude: ['pdfjs-dist'], 9 | }, 10 | }) 11 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './app.tsx' 4 | import './app.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | !.vscode/settings.json 19 | .idea 20 | .DS_Store 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | OmniViewer - Universal File Viewer 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/sample.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1, 4 | "name": "John Doe", 5 | "email": "john@example.com", 6 | "role": "Developer", 7 | "active": true 8 | }, 9 | { 10 | "id": 2, 11 | "name": "Jane Smith", 12 | "email": "jane@example.com", 13 | "role": "Designer", 14 | "active": true 15 | }, 16 | { 17 | "id": 3, 18 | "name": "Bob Johnson", 19 | "email": "bob@example.com", 20 | "role": "Manager", 21 | "active": false 22 | } 23 | ] 24 | -------------------------------------------------------------------------------- /examples/sample.txt: -------------------------------------------------------------------------------- 1 | Welcome to OmniViewer! 2 | 3 | This is a sample text file to demonstrate the text viewer functionality. 4 | 5 | Features: 6 | - Drag and drop file upload 7 | - Multiple viewer types for different file formats 8 | - Clean and modern UI 9 | - Extensible architecture 10 | 11 | You can view various file types including: 12 | * Images (JPG, PNG, GIF, WebP, etc.) 13 | * JSON files (with syntax highlighting or table view) 14 | * Text files 15 | * And more coming soon! 16 | 17 | Try uploading different file types to see OmniViewer in action. 18 | -------------------------------------------------------------------------------- /src/types/viewer.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Core types for the OmniViewer architecture 3 | */ 4 | 5 | export interface FileData { 6 | file: File; 7 | url: string; 8 | type: string; 9 | name: string; 10 | size: number; 11 | } 12 | 13 | export interface ViewerConfig { 14 | id: string; 15 | name: string; 16 | description?: string; 17 | icon?: string; 18 | supportedTypes: string[]; 19 | component: React.ComponentType; 20 | } 21 | 22 | export interface ViewerProps { 23 | fileData: FileData; 24 | onError?: (error: Error) => void; 25 | } 26 | 27 | export interface ViewerRegistry { 28 | [fileType: string]: ViewerConfig[]; 29 | } 30 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "react-jsx", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["src"], 24 | "references": [{ "path": "./tsconfig.node.json" }] 25 | } 26 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js' 2 | import globals from 'globals' 3 | import reactHooks from 'eslint-plugin-react-hooks' 4 | import reactRefresh from 'eslint-plugin-react-refresh' 5 | import tseslint from 'typescript-eslint' 6 | 7 | export default tseslint.config( 8 | { ignores: ['dist', 'node_modules'] }, 9 | { 10 | extends: [js.configs.recommended, ...tseslint.configs.recommended], 11 | files: ['**/*.{ts,tsx}'], 12 | languageOptions: { 13 | ecmaVersion: 2020, 14 | globals: globals.browser, 15 | }, 16 | plugins: { 17 | 'react-hooks': reactHooks, 18 | 'react-refresh': reactRefresh, 19 | }, 20 | rules: { 21 | ...reactHooks.configs.recommended.rules, 22 | 'react-refresh/only-export-components': [ 23 | 'warn', 24 | { allowConstantExport: true }, 25 | ], 26 | '@typescript-eslint/no-explicit-any': 'warn', 27 | }, 28 | }, 29 | ) 30 | -------------------------------------------------------------------------------- /src/viewers/image-viewer.tsx: -------------------------------------------------------------------------------- 1 | import { ViewerProps } from '../types/viewer' 2 | import { useState } from 'react' 3 | 4 | export default function ImageViewer({ fileData, onError }: ViewerProps) { 5 | const [imageError, setImageError] = useState(false) 6 | 7 | const handleError = () => { 8 | setImageError(true) 9 | onError?.(new Error('Failed to load image')) 10 | } 11 | 12 | if (imageError) { 13 | return ( 14 |
15 |

Failed to load image

16 |
17 | ) 18 | } 19 | 20 | return ( 21 |
22 | {fileData.name} 28 |
29 | ) 30 | } 31 | -------------------------------------------------------------------------------- /src/app.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useCallback } from 'react' 2 | import FileUploader from './components/file-uploader' 3 | import ViewerContainer from './components/viewer-container' 4 | import { FileData } from './types/viewer' 5 | import './app.css' 6 | 7 | function App() { 8 | const [fileData, setFileData] = useState(null) 9 | 10 | const handleFileSelect = useCallback((file: File) => { 11 | const url = URL.createObjectURL(file) 12 | setFileData({ 13 | file, 14 | url, 15 | type: file.type, 16 | name: file.name, 17 | size: file.size, 18 | }) 19 | }, []) 20 | 21 | const handleClose = useCallback(() => { 22 | if (fileData?.url) { 23 | URL.revokeObjectURL(fileData.url) 24 | } 25 | setFileData(null) 26 | }, [fileData]) 27 | 28 | return ( 29 |
30 | {fileData ? ( 31 | 32 | ) : ( 33 | 34 | )} 35 |
36 | ) 37 | } 38 | 39 | export default App 40 | -------------------------------------------------------------------------------- /src/viewers/text-viewer.tsx: -------------------------------------------------------------------------------- 1 | import { ViewerProps } from '../types/viewer' 2 | import { useEffect, useState } from 'react' 3 | 4 | export default function TextViewer({ fileData, onError }: ViewerProps) { 5 | const [content, setContent] = useState('') 6 | const [loading, setLoading] = useState(true) 7 | 8 | useEffect(() => { 9 | const loadText = async () => { 10 | try { 11 | const text = await fileData.file.text() 12 | setContent(text) 13 | } catch (error) { 14 | onError?.(error as Error) 15 | } finally { 16 | setLoading(false) 17 | } 18 | } 19 | 20 | loadText() 21 | }, [fileData.file, onError]) 22 | 23 | if (loading) { 24 | return ( 25 |
26 | Loading... 27 |
28 | ) 29 | } 30 | 31 | return ( 32 |
33 |
34 |         {content}
35 |       
36 |
37 | ) 38 | } 39 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | @import "tailwindcss/theme" layer(theme); 2 | @import "tailwindcss/preflight" layer(base); 3 | @import "tailwindcss/utilities" layer(utilities); 4 | 5 | @layer base { 6 | body { 7 | @apply antialiased; 8 | } 9 | 10 | code { 11 | font-family: 'Fira Code', 'Cascadia Code', 'Consolas', 'Monaco', 'Courier New', monospace; 12 | } 13 | } 14 | 15 | @layer components { 16 | /* Custom scrollbar */ 17 | .custom-scrollbar::-webkit-scrollbar { 18 | width: 0.75rem; 19 | height: 0.75rem; 20 | } 21 | 22 | .custom-scrollbar::-webkit-scrollbar-track { 23 | background-color: rgb(243 244 246); 24 | } 25 | 26 | .custom-scrollbar::-webkit-scrollbar-thumb { 27 | background-color: rgb(209 213 219); 28 | border-radius: 0.25rem; 29 | } 30 | 31 | .custom-scrollbar::-webkit-scrollbar-thumb:hover { 32 | background-color: rgb(156 163 175); 33 | } 34 | } 35 | 36 | /* Dark mode support - to be implemented */ 37 | @media (prefers-color-scheme: dark) { 38 | /* 39 | * Dark mode styles will be added here in future versions 40 | * This ensures the structure is ready for dark mode support 41 | */ 42 | } 43 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/components/viewer-selector.tsx: -------------------------------------------------------------------------------- 1 | import { ViewerConfig } from '../types/viewer' 2 | 3 | interface ViewerSelectorProps { 4 | viewers: ViewerConfig[] 5 | currentViewerId: string 6 | onViewerChange: (viewerId: string) => void 7 | } 8 | 9 | export default function ViewerSelector({ 10 | viewers, 11 | currentViewerId, 12 | onViewerChange 13 | }: ViewerSelectorProps) { 14 | // Don't render if there's only one viewer 15 | if (viewers.length <= 1) { 16 | return null 17 | } 18 | 19 | return ( 20 |
21 | 22 |
23 | {viewers.map((viewer) => ( 24 | 39 | ))} 40 |
41 |
42 | ) 43 | } 44 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "omni-viewer", 3 | "version": "0.1.0", 4 | "type": "module", 5 | "description": "A universal file viewer for the web - preview documents, images, and structured data directly in your browser", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview", 10 | "lint": "eslint . --max-warnings 0", 11 | "lint:fix": "eslint . --fix" 12 | }, 13 | "dependencies": { 14 | "mammoth": "^1.8.0", 15 | "pdfjs-dist": "^5.4.296", 16 | "react": "^19.2.0", 17 | "react-dom": "^19.2.0", 18 | "react-dropzone": "^14.2.3", 19 | "react-syntax-highlighter": "^16.1.0", 20 | "xlsx": "^0.18.5" 21 | }, 22 | "devDependencies": { 23 | "@eslint/js": "^9.15.0", 24 | "@tailwindcss/postcss": "^4.1.16", 25 | "@types/react": "^19.2.2", 26 | "@types/react-dom": "^19.2.2", 27 | "@types/react-syntax-highlighter": "^15.5.13", 28 | "@vitejs/plugin-react": "^5.1.0", 29 | "autoprefixer": "^10.4.20", 30 | "eslint": "^9.15.0", 31 | "eslint-plugin-react-hooks": "^7.0.1", 32 | "eslint-plugin-react-refresh": "^0.4.14", 33 | "globals": "^16.4.0", 34 | "postcss": "^8.4.47", 35 | "tailwindcss": "^4.1.16", 36 | "typescript": "^5.7.2", 37 | "typescript-eslint": "^8.14.0", 38 | "vite": "^7.1.12" 39 | }, 40 | "packageManager": "pnpm@10.20.0+sha512.cf9998222162dd85864d0a8102e7892e7ba4ceadebbf5a31f9c2fce48dfce317a9c53b9f6464d1ef9042cba2e02ae02a9f7c143a2b438cd93c91840f0192b9dd" 41 | } 42 | -------------------------------------------------------------------------------- /src/viewers/json-highlight-viewer.tsx: -------------------------------------------------------------------------------- 1 | import { ViewerProps } from '../types/viewer' 2 | import { useEffect, useState } from 'react' 3 | import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter' 4 | import { vscDarkPlus } from 'react-syntax-highlighter/dist/esm/styles/prism' 5 | 6 | export default function JsonHighlightViewer({ fileData, onError }: ViewerProps) { 7 | const [content, setContent] = useState('') 8 | const [loading, setLoading] = useState(true) 9 | 10 | useEffect(() => { 11 | const loadJson = async () => { 12 | try { 13 | const text = await fileData.file.text() 14 | const json = JSON.parse(text) 15 | const formatted = JSON.stringify(json, null, 2) 16 | setContent(formatted) 17 | } catch (error) { 18 | onError?.(error as Error) 19 | } finally { 20 | setLoading(false) 21 | } 22 | } 23 | 24 | loadJson() 25 | }, [fileData.file, onError]) 26 | 27 | if (loading) { 28 | return ( 29 |
30 | Loading... 31 |
32 | ) 33 | } 34 | 35 | return ( 36 |
37 | 47 | {content} 48 | 49 |
50 | ) 51 | } 52 | -------------------------------------------------------------------------------- /src/viewers/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Viewer Registry 3 | * Maps file types to available viewer components 4 | */ 5 | 6 | import { ViewerConfig, ViewerRegistry } from '../types/viewer'; 7 | import ImageViewer from './image-viewer'; 8 | import TextViewer from './text-viewer'; 9 | import JsonHighlightViewer from './json-highlight-viewer'; 10 | import JsonTableViewer from './json-table-viewer'; 11 | 12 | // Define all available viewers 13 | export const viewers: ViewerConfig[] = [ 14 | { 15 | id: 'image-viewer', 16 | name: 'Image Viewer', 17 | description: 'Display images', 18 | supportedTypes: ['image'], 19 | component: ImageViewer, 20 | }, 21 | { 22 | id: 'json-highlight', 23 | name: 'JSON Highlight', 24 | description: 'Syntax highlighted JSON', 25 | supportedTypes: ['json'], 26 | component: JsonHighlightViewer, 27 | }, 28 | { 29 | id: 'json-table', 30 | name: 'JSON Table', 31 | description: 'Display JSON as a table', 32 | supportedTypes: ['json'], 33 | component: JsonTableViewer, 34 | }, 35 | { 36 | id: 'text-viewer', 37 | name: 'Text Viewer', 38 | description: 'Plain text display', 39 | supportedTypes: ['text'], 40 | component: TextViewer, 41 | }, 42 | ]; 43 | 44 | // Build registry: fileType -> ViewerConfig[] 45 | export const viewerRegistry: ViewerRegistry = viewers.reduce((registry, viewer) => { 46 | viewer.supportedTypes.forEach(type => { 47 | if (!registry[type]) { 48 | registry[type] = []; 49 | } 50 | registry[type].push(viewer); 51 | }); 52 | return registry; 53 | }, {} as ViewerRegistry); 54 | 55 | export function getViewersForFileType(fileType: string): ViewerConfig[] { 56 | return viewerRegistry[fileType] || []; 57 | } 58 | -------------------------------------------------------------------------------- /src/utils/file-detector.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Utility to detect file types based on extension and MIME type 3 | */ 4 | 5 | export interface FileTypeInfo { 6 | category: string; 7 | extension: string; 8 | mimeType: string; 9 | } 10 | 11 | export function detectFileType(file: File): FileTypeInfo { 12 | const fileName = file.name.toLowerCase(); 13 | const mimeType = file.type; 14 | 15 | // Extract extension 16 | const lastDot = fileName.lastIndexOf('.'); 17 | const extension = lastDot !== -1 ? fileName.substring(lastDot + 1) : ''; 18 | 19 | // Image files 20 | if (mimeType.startsWith('image/') || ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp'].includes(extension)) { 21 | return { category: 'image', extension, mimeType }; 22 | } 23 | 24 | // PDF files 25 | if (mimeType === 'application/pdf' || extension === 'pdf') { 26 | return { category: 'pdf', extension, mimeType }; 27 | } 28 | 29 | // JSON files 30 | if (mimeType === 'application/json' || extension === 'json') { 31 | return { category: 'json', extension, mimeType }; 32 | } 33 | 34 | // Text files 35 | if (mimeType.startsWith('text/') || ['txt', 'md', 'markdown', 'log', 'csv'].includes(extension)) { 36 | return { category: 'text', extension, mimeType }; 37 | } 38 | 39 | // Office documents - Word 40 | if (mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || 41 | extension === 'docx') { 42 | return { category: 'word', extension, mimeType }; 43 | } 44 | 45 | // Office documents - Excel 46 | if (mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || 47 | ['xlsx', 'xls'].includes(extension)) { 48 | return { category: 'excel', extension, mimeType }; 49 | } 50 | 51 | // XML files 52 | if (mimeType === 'application/xml' || mimeType === 'text/xml' || extension === 'xml') { 53 | return { category: 'xml', extension, mimeType }; 54 | } 55 | 56 | // Default to unknown 57 | return { category: 'unknown', extension, mimeType }; 58 | } 59 | 60 | export function formatFileSize(bytes: number): string { 61 | if (bytes === 0) return '0 Bytes'; 62 | 63 | const k = 1024; 64 | const sizes = ['Bytes', 'KB', 'MB', 'GB']; 65 | const i = Math.floor(Math.log(bytes) / Math.log(k)); 66 | 67 | return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]; 68 | } 69 | -------------------------------------------------------------------------------- /src/components/file-uploader.tsx: -------------------------------------------------------------------------------- 1 | import { useCallback } from 'react' 2 | import { useDropzone } from 'react-dropzone' 3 | 4 | interface FileUploaderProps { 5 | onFileSelect: (file: File) => void 6 | } 7 | 8 | export default function FileUploader({ onFileSelect }: FileUploaderProps) { 9 | const onDrop = useCallback((acceptedFiles: File[]) => { 10 | if (acceptedFiles.length > 0) { 11 | onFileSelect(acceptedFiles[0]) 12 | } 13 | }, [onFileSelect]) 14 | 15 | const { getRootProps, getInputProps, isDragActive } = useDropzone({ 16 | onDrop, 17 | multiple: false, 18 | }) 19 | 20 | return ( 21 |
22 |
33 | 34 |
35 | 41 | 47 | 48 |
49 |

50 | {isDragActive ? 'Drop your file here' : 'Drag & drop a file here'} 51 |

52 |

or click to browse

53 |
54 |

Supported formats:

55 |
56 | Images 57 | JSON 58 | Text 59 | PDF 60 | Word 61 | Excel 62 |
63 |
64 |
65 |
66 | ) 67 | } 68 | -------------------------------------------------------------------------------- /src/viewers/json-table-viewer.tsx: -------------------------------------------------------------------------------- 1 | import { ViewerProps } from '../types/viewer' 2 | import { useEffect, useState } from 'react' 3 | 4 | interface TableData { 5 | headers: string[] 6 | rows: Record[] 7 | } 8 | 9 | export default function JsonTableViewer({ fileData, onError }: ViewerProps) { 10 | const [tableData, setTableData] = useState(null) 11 | const [loading, setLoading] = useState(true) 12 | const [error, setError] = useState('') 13 | 14 | useEffect(() => { 15 | const loadJson = async () => { 16 | try { 17 | const text = await fileData.file.text() 18 | const json = JSON.parse(text) 19 | 20 | // Try to convert JSON to table format 21 | if (Array.isArray(json) && json.length > 0) { 22 | // Array of objects - extract headers from first object 23 | const headers = Object.keys(json[0]) 24 | setTableData({ headers, rows: json }) 25 | } else if (typeof json === 'object' && json !== null) { 26 | // Single object - convert to single row 27 | const headers = Object.keys(json) 28 | setTableData({ headers, rows: [json] }) 29 | } else { 30 | setError('JSON data is not in a table-compatible format. Expected an array or object.') 31 | } 32 | } catch (error) { 33 | setError((error as Error).message) 34 | onError?.(error as Error) 35 | } finally { 36 | setLoading(false) 37 | } 38 | } 39 | 40 | loadJson() 41 | }, [fileData.file, onError]) 42 | 43 | if (loading) { 44 | return ( 45 |
46 | Loading... 47 |
48 | ) 49 | } 50 | 51 | if (error) { 52 | return ( 53 |
54 |

{error}

55 |

Try using JSON Highlight viewer instead.

56 |
57 | ) 58 | } 59 | 60 | if (!tableData) { 61 | return null 62 | } 63 | 64 | const renderValue = (value: unknown): string => { 65 | if (value === null) return 'null' 66 | if (value === undefined) return 'undefined' 67 | if (typeof value === 'object') return JSON.stringify(value) 68 | return String(value) 69 | } 70 | 71 | return ( 72 |
73 |
74 | 75 | 76 | 77 | {tableData.headers.map((header, idx) => ( 78 | 84 | ))} 85 | 86 | 87 | 88 | {tableData.rows.map((row, rowIdx) => ( 89 | 93 | {tableData.headers.map((header, colIdx) => ( 94 | 100 | ))} 101 | 102 | ))} 103 | 104 |
82 | {header} 83 |
98 | {renderValue(row[header])} 99 |
105 |
106 |
107 | ) 108 | } 109 | -------------------------------------------------------------------------------- /src/components/viewer-container.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import { FileData } from '../types/viewer' 3 | import { detectFileType, formatFileSize } from '../utils/file-detector' 4 | import { getViewersForFileType } from '../viewers' 5 | import ViewerSelector from './viewer-selector' 6 | 7 | interface ViewerContainerProps { 8 | fileData: FileData 9 | onClose: () => void 10 | } 11 | 12 | export default function ViewerContainer({ fileData, onClose }: ViewerContainerProps) { 13 | // These are lightweight operations, no need for useMemo in React 19 14 | const fileTypeInfo = detectFileType(fileData.file) 15 | const availableViewers = getViewersForFileType(fileTypeInfo.category) 16 | 17 | const [currentViewerId, setCurrentViewerId] = useState( 18 | availableViewers[0]?.id || '' 19 | ) 20 | const [error, setError] = useState(null) 21 | 22 | const currentViewer = availableViewers.find(v => v.id === currentViewerId) 23 | 24 | const handleError = (err: Error) => { 25 | setError(err) 26 | } 27 | 28 | if (availableViewers.length === 0) { 29 | return ( 30 |
31 |
36 |
37 |
38 |

39 | Unsupported File Type 40 |

41 |

42 | No viewer available for {fileTypeInfo.category} files. 43 |

44 |

45 | File: {fileData.name} ({fileTypeInfo.mimeType || 'unknown type'}) 46 |

47 |
48 |
49 |
50 | ) 51 | } 52 | 53 | return ( 54 |
55 |
60 | 61 | 66 | 67 |
68 | {error ? ( 69 |
70 |

Error

71 |

{error.message}

72 |
73 | ) : currentViewer ? ( 74 | 75 | ) : null} 76 |
77 |
78 | ) 79 | } 80 | 81 | interface HeaderProps { 82 | fileName: string 83 | fileSize: number 84 | onClose: () => void 85 | } 86 | 87 | function Header({ fileName, fileSize, onClose }: HeaderProps) { 88 | return ( 89 |
90 |
91 |

{fileName}

92 | {formatFileSize(fileSize)} 93 |
94 | 113 |
114 | ) 115 | } 116 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OmniViewer 2 | 3 | > A universal file viewer for the web - preview documents, images, and structured data directly in your browser 4 | 5 | ## ✨ Features 6 | 7 | - 🖼️ **Image Viewing** - Display all common image formats 8 | - 📊 **JSON Visualization** - View JSON with syntax highlighting or as an interactive table 9 | - 📝 **Text Files** - Read plain text files with proper formatting 10 | - 🎨 **Modern UI** - Clean, intuitive interface with drag-and-drop support 11 | - 🔌 **Extensible Architecture** - Easily add new file viewers 12 | - 🎯 **Multi-Instance Viewers** - Switch between different visualization modes for the same file type 13 | 14 | ## 🚀 Getting Started 15 | 16 | ### Prerequisites 17 | 18 | - Node.js 18+ and npm/yarn/pnpm 19 | 20 | ### Installation 21 | 22 | ```bash 23 | # Install dependencies 24 | pnpm install 25 | 26 | # Start development server 27 | pnpm dev 28 | 29 | # Build for production 30 | pnpm build 31 | 32 | # Preview production build 33 | pnpm preview 34 | 35 | # Lint code 36 | pnpm lint 37 | 38 | # Lint and fix 39 | pnpm lint:fix 40 | ``` 41 | 42 | ## 📖 Usage 43 | 44 | 1. Open the application in your browser 45 | 2. Drag and drop a file, or click to browse 46 | 3. View your file instantly 47 | 4. For files with multiple viewers (like JSON), switch between different visualization modes 48 | 49 | ## 🏗️ Architecture 50 | 51 | ### Core Concepts 52 | 53 | **OmniViewer** is built with extensibility in mind: 54 | 55 | - **Viewer Registry**: Central registry mapping file types to available viewers 56 | - **Multi-Instance Support**: Each file type can have multiple viewer implementations 57 | - **Type Detection**: Automatic file type detection based on extension and MIME type 58 | - **Component-Based**: Each viewer is an independent React component 59 | 60 | ### Project Structure 61 | 62 | ``` 63 | src/ 64 | ├── components/ # UI Components 65 | │ ├── file-uploader.tsx # Drag & drop file upload 66 | │ ├── viewer-container.tsx # Main viewer container 67 | │ └── viewer-selector.tsx # Viewer mode switcher 68 | ├── viewers/ # Viewer Implementations 69 | │ ├── image-viewer.tsx # Image display 70 | │ ├── text-viewer.tsx # Plain text 71 | │ ├── json-highlight-viewer.tsx # JSON with syntax highlighting 72 | │ ├── json-table-viewer.tsx # JSON as table 73 | │ └── index.ts # Viewer registry 74 | ├── types/ # TypeScript Definitions 75 | │ └── viewer.ts # Core types 76 | ├── utils/ # Utilities 77 | │ └── file-detector.ts # File type detection 78 | ├── app.tsx # Main application 79 | └── main.tsx # Entry point 80 | ``` 81 | 82 | ## 🔧 Adding New Viewers 83 | 84 | Adding a new viewer is straightforward: 85 | 86 | 1. **Create a Viewer Component**: 87 | 88 | ```typescript 89 | // src/viewers/my-viewer.tsx 90 | import { ViewerProps } from "../types/viewer"; 91 | 92 | export default function MyViewer({ fileData, onError }: ViewerProps) { 93 | // Your viewer implementation 94 | return
...
; 95 | } 96 | ``` 97 | 98 | 2. **Register the Viewer**: 99 | 100 | ```typescript 101 | // src/viewers/index.ts 102 | import MyViewer from "./my-viewer"; 103 | 104 | export const viewers: ViewerConfig[] = [ 105 | // ... existing viewers 106 | { 107 | id: "my-viewer", 108 | name: "My Viewer", 109 | description: "Description of my viewer", 110 | supportedTypes: ["mytype"], 111 | component: MyViewer, 112 | }, 113 | ]; 114 | ``` 115 | 116 | 3. **Update File Detection** (if needed): 117 | 118 | ```typescript 119 | // src/utils/file-detector.ts 120 | // Add detection logic for your file type 121 | ``` 122 | 123 | ## 🎨 Supported File Types 124 | 125 | Currently supported: 126 | 127 | - **Images**: JPG, PNG, GIF, WebP, SVG, BMP 128 | - **JSON**: Syntax highlighting and table views 129 | - **Text**: TXT, MD, LOG, CSV 130 | 131 | Coming soon: 132 | 133 | - **PDF** documents 134 | - **Word** documents (DOCX) 135 | - **Excel** spreadsheets (XLSX) 136 | - **XML** files 137 | - And more... 138 | 139 | ## 🌙 Dark Mode 140 | 141 | The UI is designed with dark mode support in mind. The structure is ready for theme implementation in future versions. 142 | 143 | ## 🔮 Future Enhancements 144 | 145 | - [ ] Dark mode toggle 146 | - [ ] PDF viewer integration 147 | - [ ] Office document support (Word, Excel, PowerPoint) 148 | - [ ] Browser extension integration 149 | - [ ] URL input support 150 | - [ ] File comparison mode 151 | - [ ] Export/download capabilities 152 | - [ ] Customizable themes 153 | - [ ] Keyboard shortcuts 154 | 155 | ## 🛠️ Technology Stack 156 | 157 | - **React 18** - UI framework 158 | - **TypeScript** - Type safety 159 | - **Vite** - Build tool and dev server 160 | - **Tailwind CSS** - Utility-first CSS framework 161 | - **react-dropzone** - File upload 162 | - **react-syntax-highlighter** - Code highlighting 163 | - **mammoth** - Word document parsing (planned) 164 | - **xlsx** - Excel parsing (planned) 165 | - **pdfjs-dist** - PDF rendering (planned) 166 | 167 | ## 📄 License 168 | 169 | See [LICENSE](./LICENSE) file for details. 170 | 171 | ## 🤝 Contributing 172 | 173 | Contributions are welcome! Feel free to: 174 | 175 | - Add new viewer implementations 176 | - Improve existing viewers 177 | - Enhance the UI/UX 178 | - Report bugs or suggest features 179 | 180 | ## 📝 Development Notes 181 | 182 | ### Browser Extension Integration 183 | 184 | The architecture supports future browser extension integration. The plan is to: 185 | 186 | 1. Allow opening files from browser context menus 187 | 2. Preview files before downloading 188 | 3. Enhance browser's native file viewing capabilities 189 | 190 | This will be implemented in a future version. 191 | 192 | --- 193 | 194 | Built with ❤️ for better file viewing experience 195 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | mammoth: 12 | specifier: ^1.8.0 13 | version: 1.11.0 14 | pdfjs-dist: 15 | specifier: ^5.4.296 16 | version: 5.4.296 17 | react: 18 | specifier: ^19.2.0 19 | version: 19.2.0 20 | react-dom: 21 | specifier: ^19.2.0 22 | version: 19.2.0(react@19.2.0) 23 | react-dropzone: 24 | specifier: ^14.2.3 25 | version: 14.3.8(react@19.2.0) 26 | react-syntax-highlighter: 27 | specifier: ^16.1.0 28 | version: 16.1.0(react@19.2.0) 29 | xlsx: 30 | specifier: ^0.18.5 31 | version: 0.18.5 32 | devDependencies: 33 | '@eslint/js': 34 | specifier: ^9.15.0 35 | version: 9.38.0 36 | '@tailwindcss/postcss': 37 | specifier: ^4.1.16 38 | version: 4.1.16 39 | '@types/react': 40 | specifier: ^19.2.2 41 | version: 19.2.2 42 | '@types/react-dom': 43 | specifier: ^19.2.2 44 | version: 19.2.2(@types/react@19.2.2) 45 | '@types/react-syntax-highlighter': 46 | specifier: ^15.5.13 47 | version: 15.5.13 48 | '@vitejs/plugin-react': 49 | specifier: ^5.1.0 50 | version: 5.1.0(vite@7.1.12(jiti@2.6.1)(lightningcss@1.30.2)) 51 | autoprefixer: 52 | specifier: ^10.4.20 53 | version: 10.4.21(postcss@8.5.6) 54 | eslint: 55 | specifier: ^9.15.0 56 | version: 9.38.0(jiti@2.6.1) 57 | eslint-plugin-react-hooks: 58 | specifier: ^7.0.1 59 | version: 7.0.1(eslint@9.38.0(jiti@2.6.1)) 60 | eslint-plugin-react-refresh: 61 | specifier: ^0.4.14 62 | version: 0.4.24(eslint@9.38.0(jiti@2.6.1)) 63 | globals: 64 | specifier: ^16.4.0 65 | version: 16.4.0 66 | postcss: 67 | specifier: ^8.4.47 68 | version: 8.5.6 69 | tailwindcss: 70 | specifier: ^4.1.16 71 | version: 4.1.16 72 | typescript: 73 | specifier: ^5.7.2 74 | version: 5.9.3 75 | typescript-eslint: 76 | specifier: ^8.14.0 77 | version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 78 | vite: 79 | specifier: ^7.1.12 80 | version: 7.1.12(jiti@2.6.1)(lightningcss@1.30.2) 81 | 82 | packages: 83 | 84 | '@alloc/quick-lru@5.2.0': 85 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 86 | engines: {node: '>=10'} 87 | 88 | '@babel/code-frame@7.27.1': 89 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 90 | engines: {node: '>=6.9.0'} 91 | 92 | '@babel/compat-data@7.28.5': 93 | resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} 94 | engines: {node: '>=6.9.0'} 95 | 96 | '@babel/core@7.28.5': 97 | resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} 98 | engines: {node: '>=6.9.0'} 99 | 100 | '@babel/generator@7.28.5': 101 | resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 102 | engines: {node: '>=6.9.0'} 103 | 104 | '@babel/helper-compilation-targets@7.27.2': 105 | resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} 106 | engines: {node: '>=6.9.0'} 107 | 108 | '@babel/helper-globals@7.28.0': 109 | resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 110 | engines: {node: '>=6.9.0'} 111 | 112 | '@babel/helper-module-imports@7.27.1': 113 | resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 114 | engines: {node: '>=6.9.0'} 115 | 116 | '@babel/helper-module-transforms@7.28.3': 117 | resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 118 | engines: {node: '>=6.9.0'} 119 | peerDependencies: 120 | '@babel/core': ^7.0.0 121 | 122 | '@babel/helper-plugin-utils@7.27.1': 123 | resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 124 | engines: {node: '>=6.9.0'} 125 | 126 | '@babel/helper-string-parser@7.27.1': 127 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 128 | engines: {node: '>=6.9.0'} 129 | 130 | '@babel/helper-validator-identifier@7.28.5': 131 | resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 132 | engines: {node: '>=6.9.0'} 133 | 134 | '@babel/helper-validator-option@7.27.1': 135 | resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 136 | engines: {node: '>=6.9.0'} 137 | 138 | '@babel/helpers@7.28.4': 139 | resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} 140 | engines: {node: '>=6.9.0'} 141 | 142 | '@babel/parser@7.28.5': 143 | resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 144 | engines: {node: '>=6.0.0'} 145 | hasBin: true 146 | 147 | '@babel/plugin-transform-react-jsx-self@7.27.1': 148 | resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} 149 | engines: {node: '>=6.9.0'} 150 | peerDependencies: 151 | '@babel/core': ^7.0.0-0 152 | 153 | '@babel/plugin-transform-react-jsx-source@7.27.1': 154 | resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} 155 | engines: {node: '>=6.9.0'} 156 | peerDependencies: 157 | '@babel/core': ^7.0.0-0 158 | 159 | '@babel/runtime@7.28.4': 160 | resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} 161 | engines: {node: '>=6.9.0'} 162 | 163 | '@babel/template@7.27.2': 164 | resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 165 | engines: {node: '>=6.9.0'} 166 | 167 | '@babel/traverse@7.28.5': 168 | resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} 169 | engines: {node: '>=6.9.0'} 170 | 171 | '@babel/types@7.28.5': 172 | resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 173 | engines: {node: '>=6.9.0'} 174 | 175 | '@esbuild/aix-ppc64@0.25.11': 176 | resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} 177 | engines: {node: '>=18'} 178 | cpu: [ppc64] 179 | os: [aix] 180 | 181 | '@esbuild/android-arm64@0.25.11': 182 | resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} 183 | engines: {node: '>=18'} 184 | cpu: [arm64] 185 | os: [android] 186 | 187 | '@esbuild/android-arm@0.25.11': 188 | resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} 189 | engines: {node: '>=18'} 190 | cpu: [arm] 191 | os: [android] 192 | 193 | '@esbuild/android-x64@0.25.11': 194 | resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} 195 | engines: {node: '>=18'} 196 | cpu: [x64] 197 | os: [android] 198 | 199 | '@esbuild/darwin-arm64@0.25.11': 200 | resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} 201 | engines: {node: '>=18'} 202 | cpu: [arm64] 203 | os: [darwin] 204 | 205 | '@esbuild/darwin-x64@0.25.11': 206 | resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} 207 | engines: {node: '>=18'} 208 | cpu: [x64] 209 | os: [darwin] 210 | 211 | '@esbuild/freebsd-arm64@0.25.11': 212 | resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} 213 | engines: {node: '>=18'} 214 | cpu: [arm64] 215 | os: [freebsd] 216 | 217 | '@esbuild/freebsd-x64@0.25.11': 218 | resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} 219 | engines: {node: '>=18'} 220 | cpu: [x64] 221 | os: [freebsd] 222 | 223 | '@esbuild/linux-arm64@0.25.11': 224 | resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} 225 | engines: {node: '>=18'} 226 | cpu: [arm64] 227 | os: [linux] 228 | 229 | '@esbuild/linux-arm@0.25.11': 230 | resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} 231 | engines: {node: '>=18'} 232 | cpu: [arm] 233 | os: [linux] 234 | 235 | '@esbuild/linux-ia32@0.25.11': 236 | resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} 237 | engines: {node: '>=18'} 238 | cpu: [ia32] 239 | os: [linux] 240 | 241 | '@esbuild/linux-loong64@0.25.11': 242 | resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} 243 | engines: {node: '>=18'} 244 | cpu: [loong64] 245 | os: [linux] 246 | 247 | '@esbuild/linux-mips64el@0.25.11': 248 | resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} 249 | engines: {node: '>=18'} 250 | cpu: [mips64el] 251 | os: [linux] 252 | 253 | '@esbuild/linux-ppc64@0.25.11': 254 | resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} 255 | engines: {node: '>=18'} 256 | cpu: [ppc64] 257 | os: [linux] 258 | 259 | '@esbuild/linux-riscv64@0.25.11': 260 | resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} 261 | engines: {node: '>=18'} 262 | cpu: [riscv64] 263 | os: [linux] 264 | 265 | '@esbuild/linux-s390x@0.25.11': 266 | resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} 267 | engines: {node: '>=18'} 268 | cpu: [s390x] 269 | os: [linux] 270 | 271 | '@esbuild/linux-x64@0.25.11': 272 | resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} 273 | engines: {node: '>=18'} 274 | cpu: [x64] 275 | os: [linux] 276 | 277 | '@esbuild/netbsd-arm64@0.25.11': 278 | resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} 279 | engines: {node: '>=18'} 280 | cpu: [arm64] 281 | os: [netbsd] 282 | 283 | '@esbuild/netbsd-x64@0.25.11': 284 | resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} 285 | engines: {node: '>=18'} 286 | cpu: [x64] 287 | os: [netbsd] 288 | 289 | '@esbuild/openbsd-arm64@0.25.11': 290 | resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} 291 | engines: {node: '>=18'} 292 | cpu: [arm64] 293 | os: [openbsd] 294 | 295 | '@esbuild/openbsd-x64@0.25.11': 296 | resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} 297 | engines: {node: '>=18'} 298 | cpu: [x64] 299 | os: [openbsd] 300 | 301 | '@esbuild/openharmony-arm64@0.25.11': 302 | resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} 303 | engines: {node: '>=18'} 304 | cpu: [arm64] 305 | os: [openharmony] 306 | 307 | '@esbuild/sunos-x64@0.25.11': 308 | resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} 309 | engines: {node: '>=18'} 310 | cpu: [x64] 311 | os: [sunos] 312 | 313 | '@esbuild/win32-arm64@0.25.11': 314 | resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} 315 | engines: {node: '>=18'} 316 | cpu: [arm64] 317 | os: [win32] 318 | 319 | '@esbuild/win32-ia32@0.25.11': 320 | resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} 321 | engines: {node: '>=18'} 322 | cpu: [ia32] 323 | os: [win32] 324 | 325 | '@esbuild/win32-x64@0.25.11': 326 | resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} 327 | engines: {node: '>=18'} 328 | cpu: [x64] 329 | os: [win32] 330 | 331 | '@eslint-community/eslint-utils@4.9.0': 332 | resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} 333 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 334 | peerDependencies: 335 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 336 | 337 | '@eslint-community/regexpp@4.12.2': 338 | resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} 339 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 340 | 341 | '@eslint/config-array@0.21.1': 342 | resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} 343 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 344 | 345 | '@eslint/config-helpers@0.4.2': 346 | resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} 347 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 348 | 349 | '@eslint/core@0.16.0': 350 | resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} 351 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 352 | 353 | '@eslint/core@0.17.0': 354 | resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} 355 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 356 | 357 | '@eslint/eslintrc@3.3.1': 358 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 359 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 360 | 361 | '@eslint/js@9.38.0': 362 | resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} 363 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 364 | 365 | '@eslint/object-schema@2.1.7': 366 | resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} 367 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 368 | 369 | '@eslint/plugin-kit@0.4.1': 370 | resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} 371 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 372 | 373 | '@humanfs/core@0.19.1': 374 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 375 | engines: {node: '>=18.18.0'} 376 | 377 | '@humanfs/node@0.16.7': 378 | resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 379 | engines: {node: '>=18.18.0'} 380 | 381 | '@humanwhocodes/module-importer@1.0.1': 382 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 383 | engines: {node: '>=12.22'} 384 | 385 | '@humanwhocodes/retry@0.4.3': 386 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 387 | engines: {node: '>=18.18'} 388 | 389 | '@jridgewell/gen-mapping@0.3.13': 390 | resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 391 | 392 | '@jridgewell/remapping@2.3.5': 393 | resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 394 | 395 | '@jridgewell/resolve-uri@3.1.2': 396 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 397 | engines: {node: '>=6.0.0'} 398 | 399 | '@jridgewell/sourcemap-codec@1.5.5': 400 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 401 | 402 | '@jridgewell/trace-mapping@0.3.31': 403 | resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 404 | 405 | '@napi-rs/canvas-android-arm64@0.1.81': 406 | resolution: {integrity: sha512-78Lz+AUi+MsWupyZjXwpwQrp1QCwncPvRZrdvrROcZ9Gq9grP7LfQZiGdR8LKyHIq3OR18mDP+JESGT15V1nXw==} 407 | engines: {node: '>= 10'} 408 | cpu: [arm64] 409 | os: [android] 410 | 411 | '@napi-rs/canvas-darwin-arm64@0.1.81': 412 | resolution: {integrity: sha512-omejuKgHWKDGoh8rsgsyhm/whwxMaryTQjJTd9zD7hiB9/rzcEEJLHnzXWR5ysy4/tTjHaQotE6k2t8eodTLnA==} 413 | engines: {node: '>= 10'} 414 | cpu: [arm64] 415 | os: [darwin] 416 | 417 | '@napi-rs/canvas-darwin-x64@0.1.81': 418 | resolution: {integrity: sha512-EYfk+co6BElq5DXNH9PBLYDYwc4QsvIVbyrsVHsxVpn4p6Y3/s8MChgC69AGqj3vzZBQ1qx2CRCMtg5cub+XuQ==} 419 | engines: {node: '>= 10'} 420 | cpu: [x64] 421 | os: [darwin] 422 | 423 | '@napi-rs/canvas-linux-arm-gnueabihf@0.1.81': 424 | resolution: {integrity: sha512-teh6Q74CyAcH31yLNQGR9MtXSFxlZa5CI6vvNUISI14gWIJWrhOwUAOly+KRe1aztWR0FWTVSPxM4p5y+06aow==} 425 | engines: {node: '>= 10'} 426 | cpu: [arm] 427 | os: [linux] 428 | 429 | '@napi-rs/canvas-linux-arm64-gnu@0.1.81': 430 | resolution: {integrity: sha512-AGEopHFYRzJOjxY+2G1RmHPRnuWvO3Qdhq7sIazlSjxb3Z6dZHg7OB/4ZimXaimPjDACm9qWa6t5bn9bhXvkcw==} 431 | engines: {node: '>= 10'} 432 | cpu: [arm64] 433 | os: [linux] 434 | 435 | '@napi-rs/canvas-linux-arm64-musl@0.1.81': 436 | resolution: {integrity: sha512-Bj3m1cl4GIhsigkdwOxii4g4Ump3/QhNpx85IgAlCCYXpaly6mcsWpuDYEabfIGWOWhDUNBOndaQUPfWK1czOQ==} 437 | engines: {node: '>= 10'} 438 | cpu: [arm64] 439 | os: [linux] 440 | 441 | '@napi-rs/canvas-linux-riscv64-gnu@0.1.81': 442 | resolution: {integrity: sha512-yg/5NkHykVdwPlD3XObwCa/EswkOwLHswJcI9rHrac+znHsmCSj5AMX/RTU9Z9F6lZTwL60JM2Esit33XhAMiw==} 443 | engines: {node: '>= 10'} 444 | cpu: [riscv64] 445 | os: [linux] 446 | 447 | '@napi-rs/canvas-linux-x64-gnu@0.1.81': 448 | resolution: {integrity: sha512-tPfMpSEBuV5dJSKexO/UZxpOqnYTaNbG8aKa1ek8QsWu+4SJ/foWkaxscra/RUv85vepx6WWDjzBNbNJsTnO0w==} 449 | engines: {node: '>= 10'} 450 | cpu: [x64] 451 | os: [linux] 452 | 453 | '@napi-rs/canvas-linux-x64-musl@0.1.81': 454 | resolution: {integrity: sha512-1L0xnYgzqn8Baef+inPvY4dKqdmw3KCBoe0NEDgezuBZN7MA5xElwifoG8609uNdrMtJ9J6QZarsslLRVqri7g==} 455 | engines: {node: '>= 10'} 456 | cpu: [x64] 457 | os: [linux] 458 | 459 | '@napi-rs/canvas-win32-x64-msvc@0.1.81': 460 | resolution: {integrity: sha512-57ryVbhm/z7RE9/UVcS7mrLPdlayLesy+9U0Uf6epCoeSGrs99tfieCcgZWFbIgmByQ1AZnNtFI2N6huqDLlWQ==} 461 | engines: {node: '>= 10'} 462 | cpu: [x64] 463 | os: [win32] 464 | 465 | '@napi-rs/canvas@0.1.81': 466 | resolution: {integrity: sha512-ReCjd5SYI/UKx/olaQLC4GtN6wUQGjlgHXs1lvUvWGXfBMR3Fxnik3cL+OxKN5ithNdoU0/GlCrdKcQDFh2XKQ==} 467 | engines: {node: '>= 10'} 468 | 469 | '@nodelib/fs.scandir@2.1.5': 470 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 471 | engines: {node: '>= 8'} 472 | 473 | '@nodelib/fs.stat@2.0.5': 474 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 475 | engines: {node: '>= 8'} 476 | 477 | '@nodelib/fs.walk@1.2.8': 478 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 479 | engines: {node: '>= 8'} 480 | 481 | '@rolldown/pluginutils@1.0.0-beta.43': 482 | resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} 483 | 484 | '@rollup/rollup-android-arm-eabi@4.52.5': 485 | resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 486 | cpu: [arm] 487 | os: [android] 488 | 489 | '@rollup/rollup-android-arm64@4.52.5': 490 | resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 491 | cpu: [arm64] 492 | os: [android] 493 | 494 | '@rollup/rollup-darwin-arm64@4.52.5': 495 | resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 496 | cpu: [arm64] 497 | os: [darwin] 498 | 499 | '@rollup/rollup-darwin-x64@4.52.5': 500 | resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 501 | cpu: [x64] 502 | os: [darwin] 503 | 504 | '@rollup/rollup-freebsd-arm64@4.52.5': 505 | resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 506 | cpu: [arm64] 507 | os: [freebsd] 508 | 509 | '@rollup/rollup-freebsd-x64@4.52.5': 510 | resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 511 | cpu: [x64] 512 | os: [freebsd] 513 | 514 | '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 515 | resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 516 | cpu: [arm] 517 | os: [linux] 518 | 519 | '@rollup/rollup-linux-arm-musleabihf@4.52.5': 520 | resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 521 | cpu: [arm] 522 | os: [linux] 523 | 524 | '@rollup/rollup-linux-arm64-gnu@4.52.5': 525 | resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 526 | cpu: [arm64] 527 | os: [linux] 528 | 529 | '@rollup/rollup-linux-arm64-musl@4.52.5': 530 | resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 531 | cpu: [arm64] 532 | os: [linux] 533 | 534 | '@rollup/rollup-linux-loong64-gnu@4.52.5': 535 | resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 536 | cpu: [loong64] 537 | os: [linux] 538 | 539 | '@rollup/rollup-linux-ppc64-gnu@4.52.5': 540 | resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 541 | cpu: [ppc64] 542 | os: [linux] 543 | 544 | '@rollup/rollup-linux-riscv64-gnu@4.52.5': 545 | resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 546 | cpu: [riscv64] 547 | os: [linux] 548 | 549 | '@rollup/rollup-linux-riscv64-musl@4.52.5': 550 | resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 551 | cpu: [riscv64] 552 | os: [linux] 553 | 554 | '@rollup/rollup-linux-s390x-gnu@4.52.5': 555 | resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 556 | cpu: [s390x] 557 | os: [linux] 558 | 559 | '@rollup/rollup-linux-x64-gnu@4.52.5': 560 | resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 561 | cpu: [x64] 562 | os: [linux] 563 | 564 | '@rollup/rollup-linux-x64-musl@4.52.5': 565 | resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 566 | cpu: [x64] 567 | os: [linux] 568 | 569 | '@rollup/rollup-openharmony-arm64@4.52.5': 570 | resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} 571 | cpu: [arm64] 572 | os: [openharmony] 573 | 574 | '@rollup/rollup-win32-arm64-msvc@4.52.5': 575 | resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} 576 | cpu: [arm64] 577 | os: [win32] 578 | 579 | '@rollup/rollup-win32-ia32-msvc@4.52.5': 580 | resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 581 | cpu: [ia32] 582 | os: [win32] 583 | 584 | '@rollup/rollup-win32-x64-gnu@4.52.5': 585 | resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 586 | cpu: [x64] 587 | os: [win32] 588 | 589 | '@rollup/rollup-win32-x64-msvc@4.52.5': 590 | resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 591 | cpu: [x64] 592 | os: [win32] 593 | 594 | '@tailwindcss/node@4.1.16': 595 | resolution: {integrity: sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==} 596 | 597 | '@tailwindcss/oxide-android-arm64@4.1.16': 598 | resolution: {integrity: sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==} 599 | engines: {node: '>= 10'} 600 | cpu: [arm64] 601 | os: [android] 602 | 603 | '@tailwindcss/oxide-darwin-arm64@4.1.16': 604 | resolution: {integrity: sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==} 605 | engines: {node: '>= 10'} 606 | cpu: [arm64] 607 | os: [darwin] 608 | 609 | '@tailwindcss/oxide-darwin-x64@4.1.16': 610 | resolution: {integrity: sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==} 611 | engines: {node: '>= 10'} 612 | cpu: [x64] 613 | os: [darwin] 614 | 615 | '@tailwindcss/oxide-freebsd-x64@4.1.16': 616 | resolution: {integrity: sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==} 617 | engines: {node: '>= 10'} 618 | cpu: [x64] 619 | os: [freebsd] 620 | 621 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': 622 | resolution: {integrity: sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==} 623 | engines: {node: '>= 10'} 624 | cpu: [arm] 625 | os: [linux] 626 | 627 | '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': 628 | resolution: {integrity: sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==} 629 | engines: {node: '>= 10'} 630 | cpu: [arm64] 631 | os: [linux] 632 | 633 | '@tailwindcss/oxide-linux-arm64-musl@4.1.16': 634 | resolution: {integrity: sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==} 635 | engines: {node: '>= 10'} 636 | cpu: [arm64] 637 | os: [linux] 638 | 639 | '@tailwindcss/oxide-linux-x64-gnu@4.1.16': 640 | resolution: {integrity: sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==} 641 | engines: {node: '>= 10'} 642 | cpu: [x64] 643 | os: [linux] 644 | 645 | '@tailwindcss/oxide-linux-x64-musl@4.1.16': 646 | resolution: {integrity: sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==} 647 | engines: {node: '>= 10'} 648 | cpu: [x64] 649 | os: [linux] 650 | 651 | '@tailwindcss/oxide-wasm32-wasi@4.1.16': 652 | resolution: {integrity: sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==} 653 | engines: {node: '>=14.0.0'} 654 | cpu: [wasm32] 655 | bundledDependencies: 656 | - '@napi-rs/wasm-runtime' 657 | - '@emnapi/core' 658 | - '@emnapi/runtime' 659 | - '@tybys/wasm-util' 660 | - '@emnapi/wasi-threads' 661 | - tslib 662 | 663 | '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': 664 | resolution: {integrity: sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==} 665 | engines: {node: '>= 10'} 666 | cpu: [arm64] 667 | os: [win32] 668 | 669 | '@tailwindcss/oxide-win32-x64-msvc@4.1.16': 670 | resolution: {integrity: sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==} 671 | engines: {node: '>= 10'} 672 | cpu: [x64] 673 | os: [win32] 674 | 675 | '@tailwindcss/oxide@4.1.16': 676 | resolution: {integrity: sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==} 677 | engines: {node: '>= 10'} 678 | 679 | '@tailwindcss/postcss@4.1.16': 680 | resolution: {integrity: sha512-Qn3SFGPXYQMKR/UtqS+dqvPrzEeBZHrFA92maT4zijCVggdsXnDBMsPFJo1eArX3J+O+Gi+8pV4PkqjLCNBk3A==} 681 | 682 | '@types/babel__core@7.20.5': 683 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 684 | 685 | '@types/babel__generator@7.27.0': 686 | resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 687 | 688 | '@types/babel__template@7.4.4': 689 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 690 | 691 | '@types/babel__traverse@7.28.0': 692 | resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 693 | 694 | '@types/estree@1.0.8': 695 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 696 | 697 | '@types/hast@3.0.4': 698 | resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 699 | 700 | '@types/json-schema@7.0.15': 701 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 702 | 703 | '@types/prismjs@1.26.5': 704 | resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} 705 | 706 | '@types/react-dom@19.2.2': 707 | resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} 708 | peerDependencies: 709 | '@types/react': ^19.2.0 710 | 711 | '@types/react-syntax-highlighter@15.5.13': 712 | resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} 713 | 714 | '@types/react@19.2.2': 715 | resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} 716 | 717 | '@types/unist@2.0.11': 718 | resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} 719 | 720 | '@types/unist@3.0.3': 721 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 722 | 723 | '@typescript-eslint/eslint-plugin@8.46.2': 724 | resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} 725 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 726 | peerDependencies: 727 | '@typescript-eslint/parser': ^8.46.2 728 | eslint: ^8.57.0 || ^9.0.0 729 | typescript: '>=4.8.4 <6.0.0' 730 | 731 | '@typescript-eslint/parser@8.46.2': 732 | resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} 733 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 734 | peerDependencies: 735 | eslint: ^8.57.0 || ^9.0.0 736 | typescript: '>=4.8.4 <6.0.0' 737 | 738 | '@typescript-eslint/project-service@8.46.2': 739 | resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} 740 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 741 | peerDependencies: 742 | typescript: '>=4.8.4 <6.0.0' 743 | 744 | '@typescript-eslint/scope-manager@8.46.2': 745 | resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} 746 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 747 | 748 | '@typescript-eslint/tsconfig-utils@8.46.2': 749 | resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} 750 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 751 | peerDependencies: 752 | typescript: '>=4.8.4 <6.0.0' 753 | 754 | '@typescript-eslint/type-utils@8.46.2': 755 | resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} 756 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 757 | peerDependencies: 758 | eslint: ^8.57.0 || ^9.0.0 759 | typescript: '>=4.8.4 <6.0.0' 760 | 761 | '@typescript-eslint/types@8.46.2': 762 | resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} 763 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 764 | 765 | '@typescript-eslint/typescript-estree@8.46.2': 766 | resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} 767 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 768 | peerDependencies: 769 | typescript: '>=4.8.4 <6.0.0' 770 | 771 | '@typescript-eslint/utils@8.46.2': 772 | resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} 773 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 774 | peerDependencies: 775 | eslint: ^8.57.0 || ^9.0.0 776 | typescript: '>=4.8.4 <6.0.0' 777 | 778 | '@typescript-eslint/visitor-keys@8.46.2': 779 | resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} 780 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 781 | 782 | '@vitejs/plugin-react@5.1.0': 783 | resolution: {integrity: sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==} 784 | engines: {node: ^20.19.0 || >=22.12.0} 785 | peerDependencies: 786 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 787 | 788 | '@xmldom/xmldom@0.8.11': 789 | resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} 790 | engines: {node: '>=10.0.0'} 791 | 792 | acorn-jsx@5.3.2: 793 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 794 | peerDependencies: 795 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 796 | 797 | acorn@8.15.0: 798 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 799 | engines: {node: '>=0.4.0'} 800 | hasBin: true 801 | 802 | adler-32@1.3.1: 803 | resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} 804 | engines: {node: '>=0.8'} 805 | 806 | ajv@6.12.6: 807 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 808 | 809 | ansi-styles@4.3.0: 810 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 811 | engines: {node: '>=8'} 812 | 813 | argparse@1.0.10: 814 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 815 | 816 | argparse@2.0.1: 817 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 818 | 819 | attr-accept@2.2.5: 820 | resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} 821 | engines: {node: '>=4'} 822 | 823 | autoprefixer@10.4.21: 824 | resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} 825 | engines: {node: ^10 || ^12 || >=14} 826 | hasBin: true 827 | peerDependencies: 828 | postcss: ^8.1.0 829 | 830 | balanced-match@1.0.2: 831 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 832 | 833 | base64-js@1.5.1: 834 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 835 | 836 | baseline-browser-mapping@2.8.21: 837 | resolution: {integrity: sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==} 838 | hasBin: true 839 | 840 | bluebird@3.4.7: 841 | resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} 842 | 843 | brace-expansion@1.1.12: 844 | resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 845 | 846 | brace-expansion@2.0.2: 847 | resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 848 | 849 | braces@3.0.3: 850 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 851 | engines: {node: '>=8'} 852 | 853 | browserslist@4.27.0: 854 | resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} 855 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 856 | hasBin: true 857 | 858 | callsites@3.1.0: 859 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 860 | engines: {node: '>=6'} 861 | 862 | caniuse-lite@1.0.30001751: 863 | resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} 864 | 865 | cfb@1.2.2: 866 | resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} 867 | engines: {node: '>=0.8'} 868 | 869 | chalk@4.1.2: 870 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 871 | engines: {node: '>=10'} 872 | 873 | character-entities-legacy@3.0.0: 874 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 875 | 876 | character-entities@2.0.2: 877 | resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} 878 | 879 | character-reference-invalid@2.0.1: 880 | resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} 881 | 882 | codepage@1.15.0: 883 | resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} 884 | engines: {node: '>=0.8'} 885 | 886 | color-convert@2.0.1: 887 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 888 | engines: {node: '>=7.0.0'} 889 | 890 | color-name@1.1.4: 891 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 892 | 893 | comma-separated-tokens@2.0.3: 894 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 895 | 896 | concat-map@0.0.1: 897 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 898 | 899 | convert-source-map@2.0.0: 900 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 901 | 902 | core-util-is@1.0.3: 903 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 904 | 905 | crc-32@1.2.2: 906 | resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} 907 | engines: {node: '>=0.8'} 908 | hasBin: true 909 | 910 | cross-spawn@7.0.6: 911 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 912 | engines: {node: '>= 8'} 913 | 914 | csstype@3.1.3: 915 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 916 | 917 | debug@4.4.3: 918 | resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 919 | engines: {node: '>=6.0'} 920 | peerDependencies: 921 | supports-color: '*' 922 | peerDependenciesMeta: 923 | supports-color: 924 | optional: true 925 | 926 | decode-named-character-reference@1.2.0: 927 | resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} 928 | 929 | deep-is@0.1.4: 930 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 931 | 932 | detect-libc@2.1.2: 933 | resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 934 | engines: {node: '>=8'} 935 | 936 | dingbat-to-unicode@1.0.1: 937 | resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==} 938 | 939 | duck@0.1.12: 940 | resolution: {integrity: sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==} 941 | 942 | electron-to-chromium@1.5.243: 943 | resolution: {integrity: sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g==} 944 | 945 | enhanced-resolve@5.18.3: 946 | resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} 947 | engines: {node: '>=10.13.0'} 948 | 949 | esbuild@0.25.11: 950 | resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} 951 | engines: {node: '>=18'} 952 | hasBin: true 953 | 954 | escalade@3.2.0: 955 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 956 | engines: {node: '>=6'} 957 | 958 | escape-string-regexp@4.0.0: 959 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 960 | engines: {node: '>=10'} 961 | 962 | eslint-plugin-react-hooks@7.0.1: 963 | resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} 964 | engines: {node: '>=18'} 965 | peerDependencies: 966 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 967 | 968 | eslint-plugin-react-refresh@0.4.24: 969 | resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} 970 | peerDependencies: 971 | eslint: '>=8.40' 972 | 973 | eslint-scope@8.4.0: 974 | resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 975 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 976 | 977 | eslint-visitor-keys@3.4.3: 978 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 979 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 980 | 981 | eslint-visitor-keys@4.2.1: 982 | resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 983 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 984 | 985 | eslint@9.38.0: 986 | resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} 987 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 988 | hasBin: true 989 | peerDependencies: 990 | jiti: '*' 991 | peerDependenciesMeta: 992 | jiti: 993 | optional: true 994 | 995 | espree@10.4.0: 996 | resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 997 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 998 | 999 | esquery@1.6.0: 1000 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1001 | engines: {node: '>=0.10'} 1002 | 1003 | esrecurse@4.3.0: 1004 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1005 | engines: {node: '>=4.0'} 1006 | 1007 | estraverse@5.3.0: 1008 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1009 | engines: {node: '>=4.0'} 1010 | 1011 | esutils@2.0.3: 1012 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1013 | engines: {node: '>=0.10.0'} 1014 | 1015 | fast-deep-equal@3.1.3: 1016 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1017 | 1018 | fast-glob@3.3.3: 1019 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1020 | engines: {node: '>=8.6.0'} 1021 | 1022 | fast-json-stable-stringify@2.1.0: 1023 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1024 | 1025 | fast-levenshtein@2.0.6: 1026 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1027 | 1028 | fastq@1.19.1: 1029 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1030 | 1031 | fault@1.0.4: 1032 | resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} 1033 | 1034 | fdir@6.5.0: 1035 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 1036 | engines: {node: '>=12.0.0'} 1037 | peerDependencies: 1038 | picomatch: ^3 || ^4 1039 | peerDependenciesMeta: 1040 | picomatch: 1041 | optional: true 1042 | 1043 | file-entry-cache@8.0.0: 1044 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1045 | engines: {node: '>=16.0.0'} 1046 | 1047 | file-selector@2.1.2: 1048 | resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} 1049 | engines: {node: '>= 12'} 1050 | 1051 | fill-range@7.1.1: 1052 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1053 | engines: {node: '>=8'} 1054 | 1055 | find-up@5.0.0: 1056 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1057 | engines: {node: '>=10'} 1058 | 1059 | flat-cache@4.0.1: 1060 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1061 | engines: {node: '>=16'} 1062 | 1063 | flatted@3.3.3: 1064 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1065 | 1066 | format@0.2.2: 1067 | resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} 1068 | engines: {node: '>=0.4.x'} 1069 | 1070 | frac@1.1.2: 1071 | resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} 1072 | engines: {node: '>=0.8'} 1073 | 1074 | fraction.js@4.3.7: 1075 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 1076 | 1077 | fsevents@2.3.3: 1078 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1079 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1080 | os: [darwin] 1081 | 1082 | gensync@1.0.0-beta.2: 1083 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1084 | engines: {node: '>=6.9.0'} 1085 | 1086 | glob-parent@5.1.2: 1087 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1088 | engines: {node: '>= 6'} 1089 | 1090 | glob-parent@6.0.2: 1091 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1092 | engines: {node: '>=10.13.0'} 1093 | 1094 | globals@14.0.0: 1095 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1096 | engines: {node: '>=18'} 1097 | 1098 | globals@16.4.0: 1099 | resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} 1100 | engines: {node: '>=18'} 1101 | 1102 | graceful-fs@4.2.11: 1103 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1104 | 1105 | graphemer@1.4.0: 1106 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1107 | 1108 | has-flag@4.0.0: 1109 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1110 | engines: {node: '>=8'} 1111 | 1112 | hast-util-parse-selector@4.0.0: 1113 | resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} 1114 | 1115 | hastscript@9.0.1: 1116 | resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} 1117 | 1118 | hermes-estree@0.25.1: 1119 | resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} 1120 | 1121 | hermes-parser@0.25.1: 1122 | resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} 1123 | 1124 | highlight.js@10.7.3: 1125 | resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} 1126 | 1127 | highlightjs-vue@1.0.0: 1128 | resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} 1129 | 1130 | ignore@5.3.2: 1131 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1132 | engines: {node: '>= 4'} 1133 | 1134 | ignore@7.0.5: 1135 | resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} 1136 | engines: {node: '>= 4'} 1137 | 1138 | immediate@3.0.6: 1139 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 1140 | 1141 | import-fresh@3.3.1: 1142 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1143 | engines: {node: '>=6'} 1144 | 1145 | imurmurhash@0.1.4: 1146 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1147 | engines: {node: '>=0.8.19'} 1148 | 1149 | inherits@2.0.4: 1150 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1151 | 1152 | is-alphabetical@2.0.1: 1153 | resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} 1154 | 1155 | is-alphanumerical@2.0.1: 1156 | resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} 1157 | 1158 | is-decimal@2.0.1: 1159 | resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} 1160 | 1161 | is-extglob@2.1.1: 1162 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1163 | engines: {node: '>=0.10.0'} 1164 | 1165 | is-glob@4.0.3: 1166 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1167 | engines: {node: '>=0.10.0'} 1168 | 1169 | is-hexadecimal@2.0.1: 1170 | resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} 1171 | 1172 | is-number@7.0.0: 1173 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1174 | engines: {node: '>=0.12.0'} 1175 | 1176 | isarray@1.0.0: 1177 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1178 | 1179 | isexe@2.0.0: 1180 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1181 | 1182 | jiti@2.6.1: 1183 | resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 1184 | hasBin: true 1185 | 1186 | js-tokens@4.0.0: 1187 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1188 | 1189 | js-yaml@4.1.0: 1190 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1191 | hasBin: true 1192 | 1193 | jsesc@3.1.0: 1194 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1195 | engines: {node: '>=6'} 1196 | hasBin: true 1197 | 1198 | json-buffer@3.0.1: 1199 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1200 | 1201 | json-schema-traverse@0.4.1: 1202 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1203 | 1204 | json-stable-stringify-without-jsonify@1.0.1: 1205 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1206 | 1207 | json5@2.2.3: 1208 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1209 | engines: {node: '>=6'} 1210 | hasBin: true 1211 | 1212 | jszip@3.10.1: 1213 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} 1214 | 1215 | keyv@4.5.4: 1216 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1217 | 1218 | levn@0.4.1: 1219 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1220 | engines: {node: '>= 0.8.0'} 1221 | 1222 | lie@3.3.0: 1223 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} 1224 | 1225 | lightningcss-android-arm64@1.30.2: 1226 | resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 1227 | engines: {node: '>= 12.0.0'} 1228 | cpu: [arm64] 1229 | os: [android] 1230 | 1231 | lightningcss-darwin-arm64@1.30.2: 1232 | resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} 1233 | engines: {node: '>= 12.0.0'} 1234 | cpu: [arm64] 1235 | os: [darwin] 1236 | 1237 | lightningcss-darwin-x64@1.30.2: 1238 | resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} 1239 | engines: {node: '>= 12.0.0'} 1240 | cpu: [x64] 1241 | os: [darwin] 1242 | 1243 | lightningcss-freebsd-x64@1.30.2: 1244 | resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} 1245 | engines: {node: '>= 12.0.0'} 1246 | cpu: [x64] 1247 | os: [freebsd] 1248 | 1249 | lightningcss-linux-arm-gnueabihf@1.30.2: 1250 | resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} 1251 | engines: {node: '>= 12.0.0'} 1252 | cpu: [arm] 1253 | os: [linux] 1254 | 1255 | lightningcss-linux-arm64-gnu@1.30.2: 1256 | resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} 1257 | engines: {node: '>= 12.0.0'} 1258 | cpu: [arm64] 1259 | os: [linux] 1260 | 1261 | lightningcss-linux-arm64-musl@1.30.2: 1262 | resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} 1263 | engines: {node: '>= 12.0.0'} 1264 | cpu: [arm64] 1265 | os: [linux] 1266 | 1267 | lightningcss-linux-x64-gnu@1.30.2: 1268 | resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} 1269 | engines: {node: '>= 12.0.0'} 1270 | cpu: [x64] 1271 | os: [linux] 1272 | 1273 | lightningcss-linux-x64-musl@1.30.2: 1274 | resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} 1275 | engines: {node: '>= 12.0.0'} 1276 | cpu: [x64] 1277 | os: [linux] 1278 | 1279 | lightningcss-win32-arm64-msvc@1.30.2: 1280 | resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} 1281 | engines: {node: '>= 12.0.0'} 1282 | cpu: [arm64] 1283 | os: [win32] 1284 | 1285 | lightningcss-win32-x64-msvc@1.30.2: 1286 | resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} 1287 | engines: {node: '>= 12.0.0'} 1288 | cpu: [x64] 1289 | os: [win32] 1290 | 1291 | lightningcss@1.30.2: 1292 | resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 1293 | engines: {node: '>= 12.0.0'} 1294 | 1295 | locate-path@6.0.0: 1296 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1297 | engines: {node: '>=10'} 1298 | 1299 | lodash.merge@4.6.2: 1300 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1301 | 1302 | loose-envify@1.4.0: 1303 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1304 | hasBin: true 1305 | 1306 | lop@0.4.2: 1307 | resolution: {integrity: sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==} 1308 | 1309 | lowlight@1.20.0: 1310 | resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} 1311 | 1312 | lru-cache@5.1.1: 1313 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1314 | 1315 | magic-string@0.30.21: 1316 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 1317 | 1318 | mammoth@1.11.0: 1319 | resolution: {integrity: sha512-BcEqqY/BOwIcI1iR5tqyVlqc3KIaMRa4egSoK83YAVrBf6+yqdAAbtUcFDCWX8Zef8/fgNZ6rl4VUv+vVX8ddQ==} 1320 | engines: {node: '>=12.0.0'} 1321 | hasBin: true 1322 | 1323 | merge2@1.4.1: 1324 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1325 | engines: {node: '>= 8'} 1326 | 1327 | micromatch@4.0.8: 1328 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1329 | engines: {node: '>=8.6'} 1330 | 1331 | minimatch@3.1.2: 1332 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1333 | 1334 | minimatch@9.0.5: 1335 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1336 | engines: {node: '>=16 || 14 >=14.17'} 1337 | 1338 | ms@2.1.3: 1339 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1340 | 1341 | nanoid@3.3.11: 1342 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1343 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1344 | hasBin: true 1345 | 1346 | natural-compare@1.4.0: 1347 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1348 | 1349 | node-releases@2.0.27: 1350 | resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} 1351 | 1352 | normalize-range@0.1.2: 1353 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1354 | engines: {node: '>=0.10.0'} 1355 | 1356 | object-assign@4.1.1: 1357 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1358 | engines: {node: '>=0.10.0'} 1359 | 1360 | option@0.2.4: 1361 | resolution: {integrity: sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==} 1362 | 1363 | optionator@0.9.4: 1364 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1365 | engines: {node: '>= 0.8.0'} 1366 | 1367 | p-limit@3.1.0: 1368 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1369 | engines: {node: '>=10'} 1370 | 1371 | p-locate@5.0.0: 1372 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1373 | engines: {node: '>=10'} 1374 | 1375 | pako@1.0.11: 1376 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 1377 | 1378 | parent-module@1.0.1: 1379 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1380 | engines: {node: '>=6'} 1381 | 1382 | parse-entities@4.0.2: 1383 | resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} 1384 | 1385 | path-exists@4.0.0: 1386 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1387 | engines: {node: '>=8'} 1388 | 1389 | path-is-absolute@1.0.1: 1390 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1391 | engines: {node: '>=0.10.0'} 1392 | 1393 | path-key@3.1.1: 1394 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1395 | engines: {node: '>=8'} 1396 | 1397 | pdfjs-dist@5.4.296: 1398 | resolution: {integrity: sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==} 1399 | engines: {node: '>=20.16.0 || >=22.3.0'} 1400 | 1401 | picocolors@1.1.1: 1402 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1403 | 1404 | picomatch@2.3.1: 1405 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1406 | engines: {node: '>=8.6'} 1407 | 1408 | picomatch@4.0.3: 1409 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1410 | engines: {node: '>=12'} 1411 | 1412 | postcss-value-parser@4.2.0: 1413 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1414 | 1415 | postcss@8.5.6: 1416 | resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1417 | engines: {node: ^10 || ^12 || >=14} 1418 | 1419 | prelude-ls@1.2.1: 1420 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1421 | engines: {node: '>= 0.8.0'} 1422 | 1423 | prismjs@1.30.0: 1424 | resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} 1425 | engines: {node: '>=6'} 1426 | 1427 | process-nextick-args@2.0.1: 1428 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1429 | 1430 | prop-types@15.8.1: 1431 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1432 | 1433 | property-information@7.1.0: 1434 | resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 1435 | 1436 | punycode@2.3.1: 1437 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1438 | engines: {node: '>=6'} 1439 | 1440 | queue-microtask@1.2.3: 1441 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1442 | 1443 | react-dom@19.2.0: 1444 | resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} 1445 | peerDependencies: 1446 | react: ^19.2.0 1447 | 1448 | react-dropzone@14.3.8: 1449 | resolution: {integrity: sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==} 1450 | engines: {node: '>= 10.13'} 1451 | peerDependencies: 1452 | react: '>= 16.8 || 18.0.0' 1453 | 1454 | react-is@16.13.1: 1455 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1456 | 1457 | react-refresh@0.18.0: 1458 | resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} 1459 | engines: {node: '>=0.10.0'} 1460 | 1461 | react-syntax-highlighter@16.1.0: 1462 | resolution: {integrity: sha512-E40/hBiP5rCNwkeBN1vRP+xow1X0pndinO+z3h7HLsHyjztbyjfzNWNKuAsJj+7DLam9iT4AaaOZnueCU+Nplg==} 1463 | engines: {node: '>= 16.20.2'} 1464 | peerDependencies: 1465 | react: '>= 0.14.0' 1466 | 1467 | react@19.2.0: 1468 | resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} 1469 | engines: {node: '>=0.10.0'} 1470 | 1471 | readable-stream@2.3.8: 1472 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 1473 | 1474 | refractor@5.0.0: 1475 | resolution: {integrity: sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==} 1476 | 1477 | resolve-from@4.0.0: 1478 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1479 | engines: {node: '>=4'} 1480 | 1481 | reusify@1.1.0: 1482 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1483 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1484 | 1485 | rollup@4.52.5: 1486 | resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 1487 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1488 | hasBin: true 1489 | 1490 | run-parallel@1.2.0: 1491 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1492 | 1493 | safe-buffer@5.1.2: 1494 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1495 | 1496 | scheduler@0.27.0: 1497 | resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} 1498 | 1499 | semver@6.3.1: 1500 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1501 | hasBin: true 1502 | 1503 | semver@7.7.3: 1504 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 1505 | engines: {node: '>=10'} 1506 | hasBin: true 1507 | 1508 | setimmediate@1.0.5: 1509 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 1510 | 1511 | shebang-command@2.0.0: 1512 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1513 | engines: {node: '>=8'} 1514 | 1515 | shebang-regex@3.0.0: 1516 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1517 | engines: {node: '>=8'} 1518 | 1519 | source-map-js@1.2.1: 1520 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1521 | engines: {node: '>=0.10.0'} 1522 | 1523 | space-separated-tokens@2.0.2: 1524 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 1525 | 1526 | sprintf-js@1.0.3: 1527 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1528 | 1529 | ssf@0.11.2: 1530 | resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} 1531 | engines: {node: '>=0.8'} 1532 | 1533 | string_decoder@1.1.1: 1534 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1535 | 1536 | strip-json-comments@3.1.1: 1537 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1538 | engines: {node: '>=8'} 1539 | 1540 | supports-color@7.2.0: 1541 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1542 | engines: {node: '>=8'} 1543 | 1544 | tailwindcss@4.1.16: 1545 | resolution: {integrity: sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==} 1546 | 1547 | tapable@2.3.0: 1548 | resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} 1549 | engines: {node: '>=6'} 1550 | 1551 | tinyglobby@0.2.15: 1552 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1553 | engines: {node: '>=12.0.0'} 1554 | 1555 | to-regex-range@5.0.1: 1556 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1557 | engines: {node: '>=8.0'} 1558 | 1559 | ts-api-utils@2.1.0: 1560 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1561 | engines: {node: '>=18.12'} 1562 | peerDependencies: 1563 | typescript: '>=4.8.4' 1564 | 1565 | tslib@2.8.1: 1566 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1567 | 1568 | type-check@0.4.0: 1569 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1570 | engines: {node: '>= 0.8.0'} 1571 | 1572 | typescript-eslint@8.46.2: 1573 | resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} 1574 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1575 | peerDependencies: 1576 | eslint: ^8.57.0 || ^9.0.0 1577 | typescript: '>=4.8.4 <6.0.0' 1578 | 1579 | typescript@5.9.3: 1580 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 1581 | engines: {node: '>=14.17'} 1582 | hasBin: true 1583 | 1584 | underscore@1.13.7: 1585 | resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} 1586 | 1587 | update-browserslist-db@1.1.4: 1588 | resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} 1589 | hasBin: true 1590 | peerDependencies: 1591 | browserslist: '>= 4.21.0' 1592 | 1593 | uri-js@4.4.1: 1594 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1595 | 1596 | util-deprecate@1.0.2: 1597 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1598 | 1599 | vite@7.1.12: 1600 | resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} 1601 | engines: {node: ^20.19.0 || >=22.12.0} 1602 | hasBin: true 1603 | peerDependencies: 1604 | '@types/node': ^20.19.0 || >=22.12.0 1605 | jiti: '>=1.21.0' 1606 | less: ^4.0.0 1607 | lightningcss: ^1.21.0 1608 | sass: ^1.70.0 1609 | sass-embedded: ^1.70.0 1610 | stylus: '>=0.54.8' 1611 | sugarss: ^5.0.0 1612 | terser: ^5.16.0 1613 | tsx: ^4.8.1 1614 | yaml: ^2.4.2 1615 | peerDependenciesMeta: 1616 | '@types/node': 1617 | optional: true 1618 | jiti: 1619 | optional: true 1620 | less: 1621 | optional: true 1622 | lightningcss: 1623 | optional: true 1624 | sass: 1625 | optional: true 1626 | sass-embedded: 1627 | optional: true 1628 | stylus: 1629 | optional: true 1630 | sugarss: 1631 | optional: true 1632 | terser: 1633 | optional: true 1634 | tsx: 1635 | optional: true 1636 | yaml: 1637 | optional: true 1638 | 1639 | which@2.0.2: 1640 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1641 | engines: {node: '>= 8'} 1642 | hasBin: true 1643 | 1644 | wmf@1.0.2: 1645 | resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} 1646 | engines: {node: '>=0.8'} 1647 | 1648 | word-wrap@1.2.5: 1649 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1650 | engines: {node: '>=0.10.0'} 1651 | 1652 | word@0.3.0: 1653 | resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} 1654 | engines: {node: '>=0.8'} 1655 | 1656 | xlsx@0.18.5: 1657 | resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} 1658 | engines: {node: '>=0.8'} 1659 | hasBin: true 1660 | 1661 | xmlbuilder@10.1.1: 1662 | resolution: {integrity: sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==} 1663 | engines: {node: '>=4.0'} 1664 | 1665 | yallist@3.1.1: 1666 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1667 | 1668 | yocto-queue@0.1.0: 1669 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1670 | engines: {node: '>=10'} 1671 | 1672 | zod-validation-error@4.0.2: 1673 | resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} 1674 | engines: {node: '>=18.0.0'} 1675 | peerDependencies: 1676 | zod: ^3.25.0 || ^4.0.0 1677 | 1678 | zod@4.1.12: 1679 | resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} 1680 | 1681 | snapshots: 1682 | 1683 | '@alloc/quick-lru@5.2.0': {} 1684 | 1685 | '@babel/code-frame@7.27.1': 1686 | dependencies: 1687 | '@babel/helper-validator-identifier': 7.28.5 1688 | js-tokens: 4.0.0 1689 | picocolors: 1.1.1 1690 | 1691 | '@babel/compat-data@7.28.5': {} 1692 | 1693 | '@babel/core@7.28.5': 1694 | dependencies: 1695 | '@babel/code-frame': 7.27.1 1696 | '@babel/generator': 7.28.5 1697 | '@babel/helper-compilation-targets': 7.27.2 1698 | '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) 1699 | '@babel/helpers': 7.28.4 1700 | '@babel/parser': 7.28.5 1701 | '@babel/template': 7.27.2 1702 | '@babel/traverse': 7.28.5 1703 | '@babel/types': 7.28.5 1704 | '@jridgewell/remapping': 2.3.5 1705 | convert-source-map: 2.0.0 1706 | debug: 4.4.3 1707 | gensync: 1.0.0-beta.2 1708 | json5: 2.2.3 1709 | semver: 6.3.1 1710 | transitivePeerDependencies: 1711 | - supports-color 1712 | 1713 | '@babel/generator@7.28.5': 1714 | dependencies: 1715 | '@babel/parser': 7.28.5 1716 | '@babel/types': 7.28.5 1717 | '@jridgewell/gen-mapping': 0.3.13 1718 | '@jridgewell/trace-mapping': 0.3.31 1719 | jsesc: 3.1.0 1720 | 1721 | '@babel/helper-compilation-targets@7.27.2': 1722 | dependencies: 1723 | '@babel/compat-data': 7.28.5 1724 | '@babel/helper-validator-option': 7.27.1 1725 | browserslist: 4.27.0 1726 | lru-cache: 5.1.1 1727 | semver: 6.3.1 1728 | 1729 | '@babel/helper-globals@7.28.0': {} 1730 | 1731 | '@babel/helper-module-imports@7.27.1': 1732 | dependencies: 1733 | '@babel/traverse': 7.28.5 1734 | '@babel/types': 7.28.5 1735 | transitivePeerDependencies: 1736 | - supports-color 1737 | 1738 | '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': 1739 | dependencies: 1740 | '@babel/core': 7.28.5 1741 | '@babel/helper-module-imports': 7.27.1 1742 | '@babel/helper-validator-identifier': 7.28.5 1743 | '@babel/traverse': 7.28.5 1744 | transitivePeerDependencies: 1745 | - supports-color 1746 | 1747 | '@babel/helper-plugin-utils@7.27.1': {} 1748 | 1749 | '@babel/helper-string-parser@7.27.1': {} 1750 | 1751 | '@babel/helper-validator-identifier@7.28.5': {} 1752 | 1753 | '@babel/helper-validator-option@7.27.1': {} 1754 | 1755 | '@babel/helpers@7.28.4': 1756 | dependencies: 1757 | '@babel/template': 7.27.2 1758 | '@babel/types': 7.28.5 1759 | 1760 | '@babel/parser@7.28.5': 1761 | dependencies: 1762 | '@babel/types': 7.28.5 1763 | 1764 | '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': 1765 | dependencies: 1766 | '@babel/core': 7.28.5 1767 | '@babel/helper-plugin-utils': 7.27.1 1768 | 1769 | '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': 1770 | dependencies: 1771 | '@babel/core': 7.28.5 1772 | '@babel/helper-plugin-utils': 7.27.1 1773 | 1774 | '@babel/runtime@7.28.4': {} 1775 | 1776 | '@babel/template@7.27.2': 1777 | dependencies: 1778 | '@babel/code-frame': 7.27.1 1779 | '@babel/parser': 7.28.5 1780 | '@babel/types': 7.28.5 1781 | 1782 | '@babel/traverse@7.28.5': 1783 | dependencies: 1784 | '@babel/code-frame': 7.27.1 1785 | '@babel/generator': 7.28.5 1786 | '@babel/helper-globals': 7.28.0 1787 | '@babel/parser': 7.28.5 1788 | '@babel/template': 7.27.2 1789 | '@babel/types': 7.28.5 1790 | debug: 4.4.3 1791 | transitivePeerDependencies: 1792 | - supports-color 1793 | 1794 | '@babel/types@7.28.5': 1795 | dependencies: 1796 | '@babel/helper-string-parser': 7.27.1 1797 | '@babel/helper-validator-identifier': 7.28.5 1798 | 1799 | '@esbuild/aix-ppc64@0.25.11': 1800 | optional: true 1801 | 1802 | '@esbuild/android-arm64@0.25.11': 1803 | optional: true 1804 | 1805 | '@esbuild/android-arm@0.25.11': 1806 | optional: true 1807 | 1808 | '@esbuild/android-x64@0.25.11': 1809 | optional: true 1810 | 1811 | '@esbuild/darwin-arm64@0.25.11': 1812 | optional: true 1813 | 1814 | '@esbuild/darwin-x64@0.25.11': 1815 | optional: true 1816 | 1817 | '@esbuild/freebsd-arm64@0.25.11': 1818 | optional: true 1819 | 1820 | '@esbuild/freebsd-x64@0.25.11': 1821 | optional: true 1822 | 1823 | '@esbuild/linux-arm64@0.25.11': 1824 | optional: true 1825 | 1826 | '@esbuild/linux-arm@0.25.11': 1827 | optional: true 1828 | 1829 | '@esbuild/linux-ia32@0.25.11': 1830 | optional: true 1831 | 1832 | '@esbuild/linux-loong64@0.25.11': 1833 | optional: true 1834 | 1835 | '@esbuild/linux-mips64el@0.25.11': 1836 | optional: true 1837 | 1838 | '@esbuild/linux-ppc64@0.25.11': 1839 | optional: true 1840 | 1841 | '@esbuild/linux-riscv64@0.25.11': 1842 | optional: true 1843 | 1844 | '@esbuild/linux-s390x@0.25.11': 1845 | optional: true 1846 | 1847 | '@esbuild/linux-x64@0.25.11': 1848 | optional: true 1849 | 1850 | '@esbuild/netbsd-arm64@0.25.11': 1851 | optional: true 1852 | 1853 | '@esbuild/netbsd-x64@0.25.11': 1854 | optional: true 1855 | 1856 | '@esbuild/openbsd-arm64@0.25.11': 1857 | optional: true 1858 | 1859 | '@esbuild/openbsd-x64@0.25.11': 1860 | optional: true 1861 | 1862 | '@esbuild/openharmony-arm64@0.25.11': 1863 | optional: true 1864 | 1865 | '@esbuild/sunos-x64@0.25.11': 1866 | optional: true 1867 | 1868 | '@esbuild/win32-arm64@0.25.11': 1869 | optional: true 1870 | 1871 | '@esbuild/win32-ia32@0.25.11': 1872 | optional: true 1873 | 1874 | '@esbuild/win32-x64@0.25.11': 1875 | optional: true 1876 | 1877 | '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': 1878 | dependencies: 1879 | eslint: 9.38.0(jiti@2.6.1) 1880 | eslint-visitor-keys: 3.4.3 1881 | 1882 | '@eslint-community/regexpp@4.12.2': {} 1883 | 1884 | '@eslint/config-array@0.21.1': 1885 | dependencies: 1886 | '@eslint/object-schema': 2.1.7 1887 | debug: 4.4.3 1888 | minimatch: 3.1.2 1889 | transitivePeerDependencies: 1890 | - supports-color 1891 | 1892 | '@eslint/config-helpers@0.4.2': 1893 | dependencies: 1894 | '@eslint/core': 0.17.0 1895 | 1896 | '@eslint/core@0.16.0': 1897 | dependencies: 1898 | '@types/json-schema': 7.0.15 1899 | 1900 | '@eslint/core@0.17.0': 1901 | dependencies: 1902 | '@types/json-schema': 7.0.15 1903 | 1904 | '@eslint/eslintrc@3.3.1': 1905 | dependencies: 1906 | ajv: 6.12.6 1907 | debug: 4.4.3 1908 | espree: 10.4.0 1909 | globals: 14.0.0 1910 | ignore: 5.3.2 1911 | import-fresh: 3.3.1 1912 | js-yaml: 4.1.0 1913 | minimatch: 3.1.2 1914 | strip-json-comments: 3.1.1 1915 | transitivePeerDependencies: 1916 | - supports-color 1917 | 1918 | '@eslint/js@9.38.0': {} 1919 | 1920 | '@eslint/object-schema@2.1.7': {} 1921 | 1922 | '@eslint/plugin-kit@0.4.1': 1923 | dependencies: 1924 | '@eslint/core': 0.17.0 1925 | levn: 0.4.1 1926 | 1927 | '@humanfs/core@0.19.1': {} 1928 | 1929 | '@humanfs/node@0.16.7': 1930 | dependencies: 1931 | '@humanfs/core': 0.19.1 1932 | '@humanwhocodes/retry': 0.4.3 1933 | 1934 | '@humanwhocodes/module-importer@1.0.1': {} 1935 | 1936 | '@humanwhocodes/retry@0.4.3': {} 1937 | 1938 | '@jridgewell/gen-mapping@0.3.13': 1939 | dependencies: 1940 | '@jridgewell/sourcemap-codec': 1.5.5 1941 | '@jridgewell/trace-mapping': 0.3.31 1942 | 1943 | '@jridgewell/remapping@2.3.5': 1944 | dependencies: 1945 | '@jridgewell/gen-mapping': 0.3.13 1946 | '@jridgewell/trace-mapping': 0.3.31 1947 | 1948 | '@jridgewell/resolve-uri@3.1.2': {} 1949 | 1950 | '@jridgewell/sourcemap-codec@1.5.5': {} 1951 | 1952 | '@jridgewell/trace-mapping@0.3.31': 1953 | dependencies: 1954 | '@jridgewell/resolve-uri': 3.1.2 1955 | '@jridgewell/sourcemap-codec': 1.5.5 1956 | 1957 | '@napi-rs/canvas-android-arm64@0.1.81': 1958 | optional: true 1959 | 1960 | '@napi-rs/canvas-darwin-arm64@0.1.81': 1961 | optional: true 1962 | 1963 | '@napi-rs/canvas-darwin-x64@0.1.81': 1964 | optional: true 1965 | 1966 | '@napi-rs/canvas-linux-arm-gnueabihf@0.1.81': 1967 | optional: true 1968 | 1969 | '@napi-rs/canvas-linux-arm64-gnu@0.1.81': 1970 | optional: true 1971 | 1972 | '@napi-rs/canvas-linux-arm64-musl@0.1.81': 1973 | optional: true 1974 | 1975 | '@napi-rs/canvas-linux-riscv64-gnu@0.1.81': 1976 | optional: true 1977 | 1978 | '@napi-rs/canvas-linux-x64-gnu@0.1.81': 1979 | optional: true 1980 | 1981 | '@napi-rs/canvas-linux-x64-musl@0.1.81': 1982 | optional: true 1983 | 1984 | '@napi-rs/canvas-win32-x64-msvc@0.1.81': 1985 | optional: true 1986 | 1987 | '@napi-rs/canvas@0.1.81': 1988 | optionalDependencies: 1989 | '@napi-rs/canvas-android-arm64': 0.1.81 1990 | '@napi-rs/canvas-darwin-arm64': 0.1.81 1991 | '@napi-rs/canvas-darwin-x64': 0.1.81 1992 | '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.81 1993 | '@napi-rs/canvas-linux-arm64-gnu': 0.1.81 1994 | '@napi-rs/canvas-linux-arm64-musl': 0.1.81 1995 | '@napi-rs/canvas-linux-riscv64-gnu': 0.1.81 1996 | '@napi-rs/canvas-linux-x64-gnu': 0.1.81 1997 | '@napi-rs/canvas-linux-x64-musl': 0.1.81 1998 | '@napi-rs/canvas-win32-x64-msvc': 0.1.81 1999 | optional: true 2000 | 2001 | '@nodelib/fs.scandir@2.1.5': 2002 | dependencies: 2003 | '@nodelib/fs.stat': 2.0.5 2004 | run-parallel: 1.2.0 2005 | 2006 | '@nodelib/fs.stat@2.0.5': {} 2007 | 2008 | '@nodelib/fs.walk@1.2.8': 2009 | dependencies: 2010 | '@nodelib/fs.scandir': 2.1.5 2011 | fastq: 1.19.1 2012 | 2013 | '@rolldown/pluginutils@1.0.0-beta.43': {} 2014 | 2015 | '@rollup/rollup-android-arm-eabi@4.52.5': 2016 | optional: true 2017 | 2018 | '@rollup/rollup-android-arm64@4.52.5': 2019 | optional: true 2020 | 2021 | '@rollup/rollup-darwin-arm64@4.52.5': 2022 | optional: true 2023 | 2024 | '@rollup/rollup-darwin-x64@4.52.5': 2025 | optional: true 2026 | 2027 | '@rollup/rollup-freebsd-arm64@4.52.5': 2028 | optional: true 2029 | 2030 | '@rollup/rollup-freebsd-x64@4.52.5': 2031 | optional: true 2032 | 2033 | '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 2034 | optional: true 2035 | 2036 | '@rollup/rollup-linux-arm-musleabihf@4.52.5': 2037 | optional: true 2038 | 2039 | '@rollup/rollup-linux-arm64-gnu@4.52.5': 2040 | optional: true 2041 | 2042 | '@rollup/rollup-linux-arm64-musl@4.52.5': 2043 | optional: true 2044 | 2045 | '@rollup/rollup-linux-loong64-gnu@4.52.5': 2046 | optional: true 2047 | 2048 | '@rollup/rollup-linux-ppc64-gnu@4.52.5': 2049 | optional: true 2050 | 2051 | '@rollup/rollup-linux-riscv64-gnu@4.52.5': 2052 | optional: true 2053 | 2054 | '@rollup/rollup-linux-riscv64-musl@4.52.5': 2055 | optional: true 2056 | 2057 | '@rollup/rollup-linux-s390x-gnu@4.52.5': 2058 | optional: true 2059 | 2060 | '@rollup/rollup-linux-x64-gnu@4.52.5': 2061 | optional: true 2062 | 2063 | '@rollup/rollup-linux-x64-musl@4.52.5': 2064 | optional: true 2065 | 2066 | '@rollup/rollup-openharmony-arm64@4.52.5': 2067 | optional: true 2068 | 2069 | '@rollup/rollup-win32-arm64-msvc@4.52.5': 2070 | optional: true 2071 | 2072 | '@rollup/rollup-win32-ia32-msvc@4.52.5': 2073 | optional: true 2074 | 2075 | '@rollup/rollup-win32-x64-gnu@4.52.5': 2076 | optional: true 2077 | 2078 | '@rollup/rollup-win32-x64-msvc@4.52.5': 2079 | optional: true 2080 | 2081 | '@tailwindcss/node@4.1.16': 2082 | dependencies: 2083 | '@jridgewell/remapping': 2.3.5 2084 | enhanced-resolve: 5.18.3 2085 | jiti: 2.6.1 2086 | lightningcss: 1.30.2 2087 | magic-string: 0.30.21 2088 | source-map-js: 1.2.1 2089 | tailwindcss: 4.1.16 2090 | 2091 | '@tailwindcss/oxide-android-arm64@4.1.16': 2092 | optional: true 2093 | 2094 | '@tailwindcss/oxide-darwin-arm64@4.1.16': 2095 | optional: true 2096 | 2097 | '@tailwindcss/oxide-darwin-x64@4.1.16': 2098 | optional: true 2099 | 2100 | '@tailwindcss/oxide-freebsd-x64@4.1.16': 2101 | optional: true 2102 | 2103 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': 2104 | optional: true 2105 | 2106 | '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': 2107 | optional: true 2108 | 2109 | '@tailwindcss/oxide-linux-arm64-musl@4.1.16': 2110 | optional: true 2111 | 2112 | '@tailwindcss/oxide-linux-x64-gnu@4.1.16': 2113 | optional: true 2114 | 2115 | '@tailwindcss/oxide-linux-x64-musl@4.1.16': 2116 | optional: true 2117 | 2118 | '@tailwindcss/oxide-wasm32-wasi@4.1.16': 2119 | optional: true 2120 | 2121 | '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': 2122 | optional: true 2123 | 2124 | '@tailwindcss/oxide-win32-x64-msvc@4.1.16': 2125 | optional: true 2126 | 2127 | '@tailwindcss/oxide@4.1.16': 2128 | optionalDependencies: 2129 | '@tailwindcss/oxide-android-arm64': 4.1.16 2130 | '@tailwindcss/oxide-darwin-arm64': 4.1.16 2131 | '@tailwindcss/oxide-darwin-x64': 4.1.16 2132 | '@tailwindcss/oxide-freebsd-x64': 4.1.16 2133 | '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.16 2134 | '@tailwindcss/oxide-linux-arm64-gnu': 4.1.16 2135 | '@tailwindcss/oxide-linux-arm64-musl': 4.1.16 2136 | '@tailwindcss/oxide-linux-x64-gnu': 4.1.16 2137 | '@tailwindcss/oxide-linux-x64-musl': 4.1.16 2138 | '@tailwindcss/oxide-wasm32-wasi': 4.1.16 2139 | '@tailwindcss/oxide-win32-arm64-msvc': 4.1.16 2140 | '@tailwindcss/oxide-win32-x64-msvc': 4.1.16 2141 | 2142 | '@tailwindcss/postcss@4.1.16': 2143 | dependencies: 2144 | '@alloc/quick-lru': 5.2.0 2145 | '@tailwindcss/node': 4.1.16 2146 | '@tailwindcss/oxide': 4.1.16 2147 | postcss: 8.5.6 2148 | tailwindcss: 4.1.16 2149 | 2150 | '@types/babel__core@7.20.5': 2151 | dependencies: 2152 | '@babel/parser': 7.28.5 2153 | '@babel/types': 7.28.5 2154 | '@types/babel__generator': 7.27.0 2155 | '@types/babel__template': 7.4.4 2156 | '@types/babel__traverse': 7.28.0 2157 | 2158 | '@types/babel__generator@7.27.0': 2159 | dependencies: 2160 | '@babel/types': 7.28.5 2161 | 2162 | '@types/babel__template@7.4.4': 2163 | dependencies: 2164 | '@babel/parser': 7.28.5 2165 | '@babel/types': 7.28.5 2166 | 2167 | '@types/babel__traverse@7.28.0': 2168 | dependencies: 2169 | '@babel/types': 7.28.5 2170 | 2171 | '@types/estree@1.0.8': {} 2172 | 2173 | '@types/hast@3.0.4': 2174 | dependencies: 2175 | '@types/unist': 3.0.3 2176 | 2177 | '@types/json-schema@7.0.15': {} 2178 | 2179 | '@types/prismjs@1.26.5': {} 2180 | 2181 | '@types/react-dom@19.2.2(@types/react@19.2.2)': 2182 | dependencies: 2183 | '@types/react': 19.2.2 2184 | 2185 | '@types/react-syntax-highlighter@15.5.13': 2186 | dependencies: 2187 | '@types/react': 19.2.2 2188 | 2189 | '@types/react@19.2.2': 2190 | dependencies: 2191 | csstype: 3.1.3 2192 | 2193 | '@types/unist@2.0.11': {} 2194 | 2195 | '@types/unist@3.0.3': {} 2196 | 2197 | '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': 2198 | dependencies: 2199 | '@eslint-community/regexpp': 4.12.2 2200 | '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 2201 | '@typescript-eslint/scope-manager': 8.46.2 2202 | '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 2203 | '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 2204 | '@typescript-eslint/visitor-keys': 8.46.2 2205 | eslint: 9.38.0(jiti@2.6.1) 2206 | graphemer: 1.4.0 2207 | ignore: 7.0.5 2208 | natural-compare: 1.4.0 2209 | ts-api-utils: 2.1.0(typescript@5.9.3) 2210 | typescript: 5.9.3 2211 | transitivePeerDependencies: 2212 | - supports-color 2213 | 2214 | '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': 2215 | dependencies: 2216 | '@typescript-eslint/scope-manager': 8.46.2 2217 | '@typescript-eslint/types': 8.46.2 2218 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 2219 | '@typescript-eslint/visitor-keys': 8.46.2 2220 | debug: 4.4.3 2221 | eslint: 9.38.0(jiti@2.6.1) 2222 | typescript: 5.9.3 2223 | transitivePeerDependencies: 2224 | - supports-color 2225 | 2226 | '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': 2227 | dependencies: 2228 | '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) 2229 | '@typescript-eslint/types': 8.46.2 2230 | debug: 4.4.3 2231 | typescript: 5.9.3 2232 | transitivePeerDependencies: 2233 | - supports-color 2234 | 2235 | '@typescript-eslint/scope-manager@8.46.2': 2236 | dependencies: 2237 | '@typescript-eslint/types': 8.46.2 2238 | '@typescript-eslint/visitor-keys': 8.46.2 2239 | 2240 | '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': 2241 | dependencies: 2242 | typescript: 5.9.3 2243 | 2244 | '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': 2245 | dependencies: 2246 | '@typescript-eslint/types': 8.46.2 2247 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 2248 | '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 2249 | debug: 4.4.3 2250 | eslint: 9.38.0(jiti@2.6.1) 2251 | ts-api-utils: 2.1.0(typescript@5.9.3) 2252 | typescript: 5.9.3 2253 | transitivePeerDependencies: 2254 | - supports-color 2255 | 2256 | '@typescript-eslint/types@8.46.2': {} 2257 | 2258 | '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': 2259 | dependencies: 2260 | '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) 2261 | '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) 2262 | '@typescript-eslint/types': 8.46.2 2263 | '@typescript-eslint/visitor-keys': 8.46.2 2264 | debug: 4.4.3 2265 | fast-glob: 3.3.3 2266 | is-glob: 4.0.3 2267 | minimatch: 9.0.5 2268 | semver: 7.7.3 2269 | ts-api-utils: 2.1.0(typescript@5.9.3) 2270 | typescript: 5.9.3 2271 | transitivePeerDependencies: 2272 | - supports-color 2273 | 2274 | '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': 2275 | dependencies: 2276 | '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) 2277 | '@typescript-eslint/scope-manager': 8.46.2 2278 | '@typescript-eslint/types': 8.46.2 2279 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 2280 | eslint: 9.38.0(jiti@2.6.1) 2281 | typescript: 5.9.3 2282 | transitivePeerDependencies: 2283 | - supports-color 2284 | 2285 | '@typescript-eslint/visitor-keys@8.46.2': 2286 | dependencies: 2287 | '@typescript-eslint/types': 8.46.2 2288 | eslint-visitor-keys: 4.2.1 2289 | 2290 | '@vitejs/plugin-react@5.1.0(vite@7.1.12(jiti@2.6.1)(lightningcss@1.30.2))': 2291 | dependencies: 2292 | '@babel/core': 7.28.5 2293 | '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) 2294 | '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) 2295 | '@rolldown/pluginutils': 1.0.0-beta.43 2296 | '@types/babel__core': 7.20.5 2297 | react-refresh: 0.18.0 2298 | vite: 7.1.12(jiti@2.6.1)(lightningcss@1.30.2) 2299 | transitivePeerDependencies: 2300 | - supports-color 2301 | 2302 | '@xmldom/xmldom@0.8.11': {} 2303 | 2304 | acorn-jsx@5.3.2(acorn@8.15.0): 2305 | dependencies: 2306 | acorn: 8.15.0 2307 | 2308 | acorn@8.15.0: {} 2309 | 2310 | adler-32@1.3.1: {} 2311 | 2312 | ajv@6.12.6: 2313 | dependencies: 2314 | fast-deep-equal: 3.1.3 2315 | fast-json-stable-stringify: 2.1.0 2316 | json-schema-traverse: 0.4.1 2317 | uri-js: 4.4.1 2318 | 2319 | ansi-styles@4.3.0: 2320 | dependencies: 2321 | color-convert: 2.0.1 2322 | 2323 | argparse@1.0.10: 2324 | dependencies: 2325 | sprintf-js: 1.0.3 2326 | 2327 | argparse@2.0.1: {} 2328 | 2329 | attr-accept@2.2.5: {} 2330 | 2331 | autoprefixer@10.4.21(postcss@8.5.6): 2332 | dependencies: 2333 | browserslist: 4.27.0 2334 | caniuse-lite: 1.0.30001751 2335 | fraction.js: 4.3.7 2336 | normalize-range: 0.1.2 2337 | picocolors: 1.1.1 2338 | postcss: 8.5.6 2339 | postcss-value-parser: 4.2.0 2340 | 2341 | balanced-match@1.0.2: {} 2342 | 2343 | base64-js@1.5.1: {} 2344 | 2345 | baseline-browser-mapping@2.8.21: {} 2346 | 2347 | bluebird@3.4.7: {} 2348 | 2349 | brace-expansion@1.1.12: 2350 | dependencies: 2351 | balanced-match: 1.0.2 2352 | concat-map: 0.0.1 2353 | 2354 | brace-expansion@2.0.2: 2355 | dependencies: 2356 | balanced-match: 1.0.2 2357 | 2358 | braces@3.0.3: 2359 | dependencies: 2360 | fill-range: 7.1.1 2361 | 2362 | browserslist@4.27.0: 2363 | dependencies: 2364 | baseline-browser-mapping: 2.8.21 2365 | caniuse-lite: 1.0.30001751 2366 | electron-to-chromium: 1.5.243 2367 | node-releases: 2.0.27 2368 | update-browserslist-db: 1.1.4(browserslist@4.27.0) 2369 | 2370 | callsites@3.1.0: {} 2371 | 2372 | caniuse-lite@1.0.30001751: {} 2373 | 2374 | cfb@1.2.2: 2375 | dependencies: 2376 | adler-32: 1.3.1 2377 | crc-32: 1.2.2 2378 | 2379 | chalk@4.1.2: 2380 | dependencies: 2381 | ansi-styles: 4.3.0 2382 | supports-color: 7.2.0 2383 | 2384 | character-entities-legacy@3.0.0: {} 2385 | 2386 | character-entities@2.0.2: {} 2387 | 2388 | character-reference-invalid@2.0.1: {} 2389 | 2390 | codepage@1.15.0: {} 2391 | 2392 | color-convert@2.0.1: 2393 | dependencies: 2394 | color-name: 1.1.4 2395 | 2396 | color-name@1.1.4: {} 2397 | 2398 | comma-separated-tokens@2.0.3: {} 2399 | 2400 | concat-map@0.0.1: {} 2401 | 2402 | convert-source-map@2.0.0: {} 2403 | 2404 | core-util-is@1.0.3: {} 2405 | 2406 | crc-32@1.2.2: {} 2407 | 2408 | cross-spawn@7.0.6: 2409 | dependencies: 2410 | path-key: 3.1.1 2411 | shebang-command: 2.0.0 2412 | which: 2.0.2 2413 | 2414 | csstype@3.1.3: {} 2415 | 2416 | debug@4.4.3: 2417 | dependencies: 2418 | ms: 2.1.3 2419 | 2420 | decode-named-character-reference@1.2.0: 2421 | dependencies: 2422 | character-entities: 2.0.2 2423 | 2424 | deep-is@0.1.4: {} 2425 | 2426 | detect-libc@2.1.2: {} 2427 | 2428 | dingbat-to-unicode@1.0.1: {} 2429 | 2430 | duck@0.1.12: 2431 | dependencies: 2432 | underscore: 1.13.7 2433 | 2434 | electron-to-chromium@1.5.243: {} 2435 | 2436 | enhanced-resolve@5.18.3: 2437 | dependencies: 2438 | graceful-fs: 4.2.11 2439 | tapable: 2.3.0 2440 | 2441 | esbuild@0.25.11: 2442 | optionalDependencies: 2443 | '@esbuild/aix-ppc64': 0.25.11 2444 | '@esbuild/android-arm': 0.25.11 2445 | '@esbuild/android-arm64': 0.25.11 2446 | '@esbuild/android-x64': 0.25.11 2447 | '@esbuild/darwin-arm64': 0.25.11 2448 | '@esbuild/darwin-x64': 0.25.11 2449 | '@esbuild/freebsd-arm64': 0.25.11 2450 | '@esbuild/freebsd-x64': 0.25.11 2451 | '@esbuild/linux-arm': 0.25.11 2452 | '@esbuild/linux-arm64': 0.25.11 2453 | '@esbuild/linux-ia32': 0.25.11 2454 | '@esbuild/linux-loong64': 0.25.11 2455 | '@esbuild/linux-mips64el': 0.25.11 2456 | '@esbuild/linux-ppc64': 0.25.11 2457 | '@esbuild/linux-riscv64': 0.25.11 2458 | '@esbuild/linux-s390x': 0.25.11 2459 | '@esbuild/linux-x64': 0.25.11 2460 | '@esbuild/netbsd-arm64': 0.25.11 2461 | '@esbuild/netbsd-x64': 0.25.11 2462 | '@esbuild/openbsd-arm64': 0.25.11 2463 | '@esbuild/openbsd-x64': 0.25.11 2464 | '@esbuild/openharmony-arm64': 0.25.11 2465 | '@esbuild/sunos-x64': 0.25.11 2466 | '@esbuild/win32-arm64': 0.25.11 2467 | '@esbuild/win32-ia32': 0.25.11 2468 | '@esbuild/win32-x64': 0.25.11 2469 | 2470 | escalade@3.2.0: {} 2471 | 2472 | escape-string-regexp@4.0.0: {} 2473 | 2474 | eslint-plugin-react-hooks@7.0.1(eslint@9.38.0(jiti@2.6.1)): 2475 | dependencies: 2476 | '@babel/core': 7.28.5 2477 | '@babel/parser': 7.28.5 2478 | eslint: 9.38.0(jiti@2.6.1) 2479 | hermes-parser: 0.25.1 2480 | zod: 4.1.12 2481 | zod-validation-error: 4.0.2(zod@4.1.12) 2482 | transitivePeerDependencies: 2483 | - supports-color 2484 | 2485 | eslint-plugin-react-refresh@0.4.24(eslint@9.38.0(jiti@2.6.1)): 2486 | dependencies: 2487 | eslint: 9.38.0(jiti@2.6.1) 2488 | 2489 | eslint-scope@8.4.0: 2490 | dependencies: 2491 | esrecurse: 4.3.0 2492 | estraverse: 5.3.0 2493 | 2494 | eslint-visitor-keys@3.4.3: {} 2495 | 2496 | eslint-visitor-keys@4.2.1: {} 2497 | 2498 | eslint@9.38.0(jiti@2.6.1): 2499 | dependencies: 2500 | '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) 2501 | '@eslint-community/regexpp': 4.12.2 2502 | '@eslint/config-array': 0.21.1 2503 | '@eslint/config-helpers': 0.4.2 2504 | '@eslint/core': 0.16.0 2505 | '@eslint/eslintrc': 3.3.1 2506 | '@eslint/js': 9.38.0 2507 | '@eslint/plugin-kit': 0.4.1 2508 | '@humanfs/node': 0.16.7 2509 | '@humanwhocodes/module-importer': 1.0.1 2510 | '@humanwhocodes/retry': 0.4.3 2511 | '@types/estree': 1.0.8 2512 | ajv: 6.12.6 2513 | chalk: 4.1.2 2514 | cross-spawn: 7.0.6 2515 | debug: 4.4.3 2516 | escape-string-regexp: 4.0.0 2517 | eslint-scope: 8.4.0 2518 | eslint-visitor-keys: 4.2.1 2519 | espree: 10.4.0 2520 | esquery: 1.6.0 2521 | esutils: 2.0.3 2522 | fast-deep-equal: 3.1.3 2523 | file-entry-cache: 8.0.0 2524 | find-up: 5.0.0 2525 | glob-parent: 6.0.2 2526 | ignore: 5.3.2 2527 | imurmurhash: 0.1.4 2528 | is-glob: 4.0.3 2529 | json-stable-stringify-without-jsonify: 1.0.1 2530 | lodash.merge: 4.6.2 2531 | minimatch: 3.1.2 2532 | natural-compare: 1.4.0 2533 | optionator: 0.9.4 2534 | optionalDependencies: 2535 | jiti: 2.6.1 2536 | transitivePeerDependencies: 2537 | - supports-color 2538 | 2539 | espree@10.4.0: 2540 | dependencies: 2541 | acorn: 8.15.0 2542 | acorn-jsx: 5.3.2(acorn@8.15.0) 2543 | eslint-visitor-keys: 4.2.1 2544 | 2545 | esquery@1.6.0: 2546 | dependencies: 2547 | estraverse: 5.3.0 2548 | 2549 | esrecurse@4.3.0: 2550 | dependencies: 2551 | estraverse: 5.3.0 2552 | 2553 | estraverse@5.3.0: {} 2554 | 2555 | esutils@2.0.3: {} 2556 | 2557 | fast-deep-equal@3.1.3: {} 2558 | 2559 | fast-glob@3.3.3: 2560 | dependencies: 2561 | '@nodelib/fs.stat': 2.0.5 2562 | '@nodelib/fs.walk': 1.2.8 2563 | glob-parent: 5.1.2 2564 | merge2: 1.4.1 2565 | micromatch: 4.0.8 2566 | 2567 | fast-json-stable-stringify@2.1.0: {} 2568 | 2569 | fast-levenshtein@2.0.6: {} 2570 | 2571 | fastq@1.19.1: 2572 | dependencies: 2573 | reusify: 1.1.0 2574 | 2575 | fault@1.0.4: 2576 | dependencies: 2577 | format: 0.2.2 2578 | 2579 | fdir@6.5.0(picomatch@4.0.3): 2580 | optionalDependencies: 2581 | picomatch: 4.0.3 2582 | 2583 | file-entry-cache@8.0.0: 2584 | dependencies: 2585 | flat-cache: 4.0.1 2586 | 2587 | file-selector@2.1.2: 2588 | dependencies: 2589 | tslib: 2.8.1 2590 | 2591 | fill-range@7.1.1: 2592 | dependencies: 2593 | to-regex-range: 5.0.1 2594 | 2595 | find-up@5.0.0: 2596 | dependencies: 2597 | locate-path: 6.0.0 2598 | path-exists: 4.0.0 2599 | 2600 | flat-cache@4.0.1: 2601 | dependencies: 2602 | flatted: 3.3.3 2603 | keyv: 4.5.4 2604 | 2605 | flatted@3.3.3: {} 2606 | 2607 | format@0.2.2: {} 2608 | 2609 | frac@1.1.2: {} 2610 | 2611 | fraction.js@4.3.7: {} 2612 | 2613 | fsevents@2.3.3: 2614 | optional: true 2615 | 2616 | gensync@1.0.0-beta.2: {} 2617 | 2618 | glob-parent@5.1.2: 2619 | dependencies: 2620 | is-glob: 4.0.3 2621 | 2622 | glob-parent@6.0.2: 2623 | dependencies: 2624 | is-glob: 4.0.3 2625 | 2626 | globals@14.0.0: {} 2627 | 2628 | globals@16.4.0: {} 2629 | 2630 | graceful-fs@4.2.11: {} 2631 | 2632 | graphemer@1.4.0: {} 2633 | 2634 | has-flag@4.0.0: {} 2635 | 2636 | hast-util-parse-selector@4.0.0: 2637 | dependencies: 2638 | '@types/hast': 3.0.4 2639 | 2640 | hastscript@9.0.1: 2641 | dependencies: 2642 | '@types/hast': 3.0.4 2643 | comma-separated-tokens: 2.0.3 2644 | hast-util-parse-selector: 4.0.0 2645 | property-information: 7.1.0 2646 | space-separated-tokens: 2.0.2 2647 | 2648 | hermes-estree@0.25.1: {} 2649 | 2650 | hermes-parser@0.25.1: 2651 | dependencies: 2652 | hermes-estree: 0.25.1 2653 | 2654 | highlight.js@10.7.3: {} 2655 | 2656 | highlightjs-vue@1.0.0: {} 2657 | 2658 | ignore@5.3.2: {} 2659 | 2660 | ignore@7.0.5: {} 2661 | 2662 | immediate@3.0.6: {} 2663 | 2664 | import-fresh@3.3.1: 2665 | dependencies: 2666 | parent-module: 1.0.1 2667 | resolve-from: 4.0.0 2668 | 2669 | imurmurhash@0.1.4: {} 2670 | 2671 | inherits@2.0.4: {} 2672 | 2673 | is-alphabetical@2.0.1: {} 2674 | 2675 | is-alphanumerical@2.0.1: 2676 | dependencies: 2677 | is-alphabetical: 2.0.1 2678 | is-decimal: 2.0.1 2679 | 2680 | is-decimal@2.0.1: {} 2681 | 2682 | is-extglob@2.1.1: {} 2683 | 2684 | is-glob@4.0.3: 2685 | dependencies: 2686 | is-extglob: 2.1.1 2687 | 2688 | is-hexadecimal@2.0.1: {} 2689 | 2690 | is-number@7.0.0: {} 2691 | 2692 | isarray@1.0.0: {} 2693 | 2694 | isexe@2.0.0: {} 2695 | 2696 | jiti@2.6.1: {} 2697 | 2698 | js-tokens@4.0.0: {} 2699 | 2700 | js-yaml@4.1.0: 2701 | dependencies: 2702 | argparse: 2.0.1 2703 | 2704 | jsesc@3.1.0: {} 2705 | 2706 | json-buffer@3.0.1: {} 2707 | 2708 | json-schema-traverse@0.4.1: {} 2709 | 2710 | json-stable-stringify-without-jsonify@1.0.1: {} 2711 | 2712 | json5@2.2.3: {} 2713 | 2714 | jszip@3.10.1: 2715 | dependencies: 2716 | lie: 3.3.0 2717 | pako: 1.0.11 2718 | readable-stream: 2.3.8 2719 | setimmediate: 1.0.5 2720 | 2721 | keyv@4.5.4: 2722 | dependencies: 2723 | json-buffer: 3.0.1 2724 | 2725 | levn@0.4.1: 2726 | dependencies: 2727 | prelude-ls: 1.2.1 2728 | type-check: 0.4.0 2729 | 2730 | lie@3.3.0: 2731 | dependencies: 2732 | immediate: 3.0.6 2733 | 2734 | lightningcss-android-arm64@1.30.2: 2735 | optional: true 2736 | 2737 | lightningcss-darwin-arm64@1.30.2: 2738 | optional: true 2739 | 2740 | lightningcss-darwin-x64@1.30.2: 2741 | optional: true 2742 | 2743 | lightningcss-freebsd-x64@1.30.2: 2744 | optional: true 2745 | 2746 | lightningcss-linux-arm-gnueabihf@1.30.2: 2747 | optional: true 2748 | 2749 | lightningcss-linux-arm64-gnu@1.30.2: 2750 | optional: true 2751 | 2752 | lightningcss-linux-arm64-musl@1.30.2: 2753 | optional: true 2754 | 2755 | lightningcss-linux-x64-gnu@1.30.2: 2756 | optional: true 2757 | 2758 | lightningcss-linux-x64-musl@1.30.2: 2759 | optional: true 2760 | 2761 | lightningcss-win32-arm64-msvc@1.30.2: 2762 | optional: true 2763 | 2764 | lightningcss-win32-x64-msvc@1.30.2: 2765 | optional: true 2766 | 2767 | lightningcss@1.30.2: 2768 | dependencies: 2769 | detect-libc: 2.1.2 2770 | optionalDependencies: 2771 | lightningcss-android-arm64: 1.30.2 2772 | lightningcss-darwin-arm64: 1.30.2 2773 | lightningcss-darwin-x64: 1.30.2 2774 | lightningcss-freebsd-x64: 1.30.2 2775 | lightningcss-linux-arm-gnueabihf: 1.30.2 2776 | lightningcss-linux-arm64-gnu: 1.30.2 2777 | lightningcss-linux-arm64-musl: 1.30.2 2778 | lightningcss-linux-x64-gnu: 1.30.2 2779 | lightningcss-linux-x64-musl: 1.30.2 2780 | lightningcss-win32-arm64-msvc: 1.30.2 2781 | lightningcss-win32-x64-msvc: 1.30.2 2782 | 2783 | locate-path@6.0.0: 2784 | dependencies: 2785 | p-locate: 5.0.0 2786 | 2787 | lodash.merge@4.6.2: {} 2788 | 2789 | loose-envify@1.4.0: 2790 | dependencies: 2791 | js-tokens: 4.0.0 2792 | 2793 | lop@0.4.2: 2794 | dependencies: 2795 | duck: 0.1.12 2796 | option: 0.2.4 2797 | underscore: 1.13.7 2798 | 2799 | lowlight@1.20.0: 2800 | dependencies: 2801 | fault: 1.0.4 2802 | highlight.js: 10.7.3 2803 | 2804 | lru-cache@5.1.1: 2805 | dependencies: 2806 | yallist: 3.1.1 2807 | 2808 | magic-string@0.30.21: 2809 | dependencies: 2810 | '@jridgewell/sourcemap-codec': 1.5.5 2811 | 2812 | mammoth@1.11.0: 2813 | dependencies: 2814 | '@xmldom/xmldom': 0.8.11 2815 | argparse: 1.0.10 2816 | base64-js: 1.5.1 2817 | bluebird: 3.4.7 2818 | dingbat-to-unicode: 1.0.1 2819 | jszip: 3.10.1 2820 | lop: 0.4.2 2821 | path-is-absolute: 1.0.1 2822 | underscore: 1.13.7 2823 | xmlbuilder: 10.1.1 2824 | 2825 | merge2@1.4.1: {} 2826 | 2827 | micromatch@4.0.8: 2828 | dependencies: 2829 | braces: 3.0.3 2830 | picomatch: 2.3.1 2831 | 2832 | minimatch@3.1.2: 2833 | dependencies: 2834 | brace-expansion: 1.1.12 2835 | 2836 | minimatch@9.0.5: 2837 | dependencies: 2838 | brace-expansion: 2.0.2 2839 | 2840 | ms@2.1.3: {} 2841 | 2842 | nanoid@3.3.11: {} 2843 | 2844 | natural-compare@1.4.0: {} 2845 | 2846 | node-releases@2.0.27: {} 2847 | 2848 | normalize-range@0.1.2: {} 2849 | 2850 | object-assign@4.1.1: {} 2851 | 2852 | option@0.2.4: {} 2853 | 2854 | optionator@0.9.4: 2855 | dependencies: 2856 | deep-is: 0.1.4 2857 | fast-levenshtein: 2.0.6 2858 | levn: 0.4.1 2859 | prelude-ls: 1.2.1 2860 | type-check: 0.4.0 2861 | word-wrap: 1.2.5 2862 | 2863 | p-limit@3.1.0: 2864 | dependencies: 2865 | yocto-queue: 0.1.0 2866 | 2867 | p-locate@5.0.0: 2868 | dependencies: 2869 | p-limit: 3.1.0 2870 | 2871 | pako@1.0.11: {} 2872 | 2873 | parent-module@1.0.1: 2874 | dependencies: 2875 | callsites: 3.1.0 2876 | 2877 | parse-entities@4.0.2: 2878 | dependencies: 2879 | '@types/unist': 2.0.11 2880 | character-entities-legacy: 3.0.0 2881 | character-reference-invalid: 2.0.1 2882 | decode-named-character-reference: 1.2.0 2883 | is-alphanumerical: 2.0.1 2884 | is-decimal: 2.0.1 2885 | is-hexadecimal: 2.0.1 2886 | 2887 | path-exists@4.0.0: {} 2888 | 2889 | path-is-absolute@1.0.1: {} 2890 | 2891 | path-key@3.1.1: {} 2892 | 2893 | pdfjs-dist@5.4.296: 2894 | optionalDependencies: 2895 | '@napi-rs/canvas': 0.1.81 2896 | 2897 | picocolors@1.1.1: {} 2898 | 2899 | picomatch@2.3.1: {} 2900 | 2901 | picomatch@4.0.3: {} 2902 | 2903 | postcss-value-parser@4.2.0: {} 2904 | 2905 | postcss@8.5.6: 2906 | dependencies: 2907 | nanoid: 3.3.11 2908 | picocolors: 1.1.1 2909 | source-map-js: 1.2.1 2910 | 2911 | prelude-ls@1.2.1: {} 2912 | 2913 | prismjs@1.30.0: {} 2914 | 2915 | process-nextick-args@2.0.1: {} 2916 | 2917 | prop-types@15.8.1: 2918 | dependencies: 2919 | loose-envify: 1.4.0 2920 | object-assign: 4.1.1 2921 | react-is: 16.13.1 2922 | 2923 | property-information@7.1.0: {} 2924 | 2925 | punycode@2.3.1: {} 2926 | 2927 | queue-microtask@1.2.3: {} 2928 | 2929 | react-dom@19.2.0(react@19.2.0): 2930 | dependencies: 2931 | react: 19.2.0 2932 | scheduler: 0.27.0 2933 | 2934 | react-dropzone@14.3.8(react@19.2.0): 2935 | dependencies: 2936 | attr-accept: 2.2.5 2937 | file-selector: 2.1.2 2938 | prop-types: 15.8.1 2939 | react: 19.2.0 2940 | 2941 | react-is@16.13.1: {} 2942 | 2943 | react-refresh@0.18.0: {} 2944 | 2945 | react-syntax-highlighter@16.1.0(react@19.2.0): 2946 | dependencies: 2947 | '@babel/runtime': 7.28.4 2948 | highlight.js: 10.7.3 2949 | highlightjs-vue: 1.0.0 2950 | lowlight: 1.20.0 2951 | prismjs: 1.30.0 2952 | react: 19.2.0 2953 | refractor: 5.0.0 2954 | 2955 | react@19.2.0: {} 2956 | 2957 | readable-stream@2.3.8: 2958 | dependencies: 2959 | core-util-is: 1.0.3 2960 | inherits: 2.0.4 2961 | isarray: 1.0.0 2962 | process-nextick-args: 2.0.1 2963 | safe-buffer: 5.1.2 2964 | string_decoder: 1.1.1 2965 | util-deprecate: 1.0.2 2966 | 2967 | refractor@5.0.0: 2968 | dependencies: 2969 | '@types/hast': 3.0.4 2970 | '@types/prismjs': 1.26.5 2971 | hastscript: 9.0.1 2972 | parse-entities: 4.0.2 2973 | 2974 | resolve-from@4.0.0: {} 2975 | 2976 | reusify@1.1.0: {} 2977 | 2978 | rollup@4.52.5: 2979 | dependencies: 2980 | '@types/estree': 1.0.8 2981 | optionalDependencies: 2982 | '@rollup/rollup-android-arm-eabi': 4.52.5 2983 | '@rollup/rollup-android-arm64': 4.52.5 2984 | '@rollup/rollup-darwin-arm64': 4.52.5 2985 | '@rollup/rollup-darwin-x64': 4.52.5 2986 | '@rollup/rollup-freebsd-arm64': 4.52.5 2987 | '@rollup/rollup-freebsd-x64': 4.52.5 2988 | '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 2989 | '@rollup/rollup-linux-arm-musleabihf': 4.52.5 2990 | '@rollup/rollup-linux-arm64-gnu': 4.52.5 2991 | '@rollup/rollup-linux-arm64-musl': 4.52.5 2992 | '@rollup/rollup-linux-loong64-gnu': 4.52.5 2993 | '@rollup/rollup-linux-ppc64-gnu': 4.52.5 2994 | '@rollup/rollup-linux-riscv64-gnu': 4.52.5 2995 | '@rollup/rollup-linux-riscv64-musl': 4.52.5 2996 | '@rollup/rollup-linux-s390x-gnu': 4.52.5 2997 | '@rollup/rollup-linux-x64-gnu': 4.52.5 2998 | '@rollup/rollup-linux-x64-musl': 4.52.5 2999 | '@rollup/rollup-openharmony-arm64': 4.52.5 3000 | '@rollup/rollup-win32-arm64-msvc': 4.52.5 3001 | '@rollup/rollup-win32-ia32-msvc': 4.52.5 3002 | '@rollup/rollup-win32-x64-gnu': 4.52.5 3003 | '@rollup/rollup-win32-x64-msvc': 4.52.5 3004 | fsevents: 2.3.3 3005 | 3006 | run-parallel@1.2.0: 3007 | dependencies: 3008 | queue-microtask: 1.2.3 3009 | 3010 | safe-buffer@5.1.2: {} 3011 | 3012 | scheduler@0.27.0: {} 3013 | 3014 | semver@6.3.1: {} 3015 | 3016 | semver@7.7.3: {} 3017 | 3018 | setimmediate@1.0.5: {} 3019 | 3020 | shebang-command@2.0.0: 3021 | dependencies: 3022 | shebang-regex: 3.0.0 3023 | 3024 | shebang-regex@3.0.0: {} 3025 | 3026 | source-map-js@1.2.1: {} 3027 | 3028 | space-separated-tokens@2.0.2: {} 3029 | 3030 | sprintf-js@1.0.3: {} 3031 | 3032 | ssf@0.11.2: 3033 | dependencies: 3034 | frac: 1.1.2 3035 | 3036 | string_decoder@1.1.1: 3037 | dependencies: 3038 | safe-buffer: 5.1.2 3039 | 3040 | strip-json-comments@3.1.1: {} 3041 | 3042 | supports-color@7.2.0: 3043 | dependencies: 3044 | has-flag: 4.0.0 3045 | 3046 | tailwindcss@4.1.16: {} 3047 | 3048 | tapable@2.3.0: {} 3049 | 3050 | tinyglobby@0.2.15: 3051 | dependencies: 3052 | fdir: 6.5.0(picomatch@4.0.3) 3053 | picomatch: 4.0.3 3054 | 3055 | to-regex-range@5.0.1: 3056 | dependencies: 3057 | is-number: 7.0.0 3058 | 3059 | ts-api-utils@2.1.0(typescript@5.9.3): 3060 | dependencies: 3061 | typescript: 5.9.3 3062 | 3063 | tslib@2.8.1: {} 3064 | 3065 | type-check@0.4.0: 3066 | dependencies: 3067 | prelude-ls: 1.2.1 3068 | 3069 | typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): 3070 | dependencies: 3071 | '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 3072 | '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 3073 | '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) 3074 | '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) 3075 | eslint: 9.38.0(jiti@2.6.1) 3076 | typescript: 5.9.3 3077 | transitivePeerDependencies: 3078 | - supports-color 3079 | 3080 | typescript@5.9.3: {} 3081 | 3082 | underscore@1.13.7: {} 3083 | 3084 | update-browserslist-db@1.1.4(browserslist@4.27.0): 3085 | dependencies: 3086 | browserslist: 4.27.0 3087 | escalade: 3.2.0 3088 | picocolors: 1.1.1 3089 | 3090 | uri-js@4.4.1: 3091 | dependencies: 3092 | punycode: 2.3.1 3093 | 3094 | util-deprecate@1.0.2: {} 3095 | 3096 | vite@7.1.12(jiti@2.6.1)(lightningcss@1.30.2): 3097 | dependencies: 3098 | esbuild: 0.25.11 3099 | fdir: 6.5.0(picomatch@4.0.3) 3100 | picomatch: 4.0.3 3101 | postcss: 8.5.6 3102 | rollup: 4.52.5 3103 | tinyglobby: 0.2.15 3104 | optionalDependencies: 3105 | fsevents: 2.3.3 3106 | jiti: 2.6.1 3107 | lightningcss: 1.30.2 3108 | 3109 | which@2.0.2: 3110 | dependencies: 3111 | isexe: 2.0.0 3112 | 3113 | wmf@1.0.2: {} 3114 | 3115 | word-wrap@1.2.5: {} 3116 | 3117 | word@0.3.0: {} 3118 | 3119 | xlsx@0.18.5: 3120 | dependencies: 3121 | adler-32: 1.3.1 3122 | cfb: 1.2.2 3123 | codepage: 1.15.0 3124 | crc-32: 1.2.2 3125 | ssf: 0.11.2 3126 | wmf: 1.0.2 3127 | word: 0.3.0 3128 | 3129 | xmlbuilder@10.1.1: {} 3130 | 3131 | yallist@3.1.1: {} 3132 | 3133 | yocto-queue@0.1.0: {} 3134 | 3135 | zod-validation-error@4.0.2(zod@4.1.12): 3136 | dependencies: 3137 | zod: 4.1.12 3138 | 3139 | zod@4.1.12: {} 3140 | --------------------------------------------------------------------------------