├── 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 |

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 |
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 | |
82 | {header}
83 | |
84 | ))}
85 |
86 |
87 |
88 | {tableData.rows.map((row, rowIdx) => (
89 |
93 | {tableData.headers.map((header, colIdx) => (
94 | |
98 | {renderValue(row[header])}
99 | |
100 | ))}
101 |
102 | ))}
103 |
104 |
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 |
--------------------------------------------------------------------------------