├── src ├── vite-env.d.ts ├── shared │ └── Flex.tsx ├── main.tsx ├── editor │ ├── SettingsOption.tsx │ ├── useSetting.ts │ ├── ThemeSettings.tsx │ ├── EditorControls.tsx │ ├── Editor.tsx │ ├── useNotes.ts │ ├── useTheme.tsx │ ├── NotesList.tsx │ ├── Settings.tsx │ └── useEditor.ts ├── style.ts └── App.tsx ├── public └── favicon.ico ├── tsconfig.json ├── vite.config.ts ├── .gitignore ├── README.md ├── index.html ├── tsconfig.node.json ├── tsconfig.app.json ├── eslint.config.js ├── package.json └── pnpm-lock.yaml /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethanhamilthon/notez/master/public/favicon.ico -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import react from "@vitejs/plugin-react"; 3 | 4 | // https://vite.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }); 8 | -------------------------------------------------------------------------------- /src/shared/Flex.tsx: -------------------------------------------------------------------------------- 1 | import { styled } from "../style"; 2 | 3 | export const Flex = styled("div", { 4 | width: "100%", 5 | display: "flex", 6 | alignItems: "center", 7 | gap: "$small", 8 | }); 9 | 10 | export const FlexCol = styled(Flex, { 11 | flexDirection: "column", 12 | alignItems: "flex-start", 13 | }); 14 | -------------------------------------------------------------------------------- /.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 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Notez - Zen Note App 2 | 3 | A simple app for writing something. When the interface of a writing app is so complex, so much functionality it is very hard to focus. So I created this simple application. To just write 4 | 5 | ## Features 6 | 7 | - 4 themes 8 | - Font size can be edited 9 | - Local first. All notes are saved on local storage. No network requests 10 | 11 | ## Tech stack: React + Vite + Stitches 12 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from "react"; 2 | import { createRoot } from "react-dom/client"; 3 | import App from "./App.tsx"; 4 | import { globalCss } from "./style.ts"; 5 | 6 | const globalStyles = globalCss({ 7 | "*": { margin: 0, padding: 0, boxSizing: "border-box" }, 8 | body: { fontFamily: "$free", backgroundColor: "$back", color: "$text" }, 9 | }); 10 | 11 | createRoot(document.getElementById("root")!).render( 12 | 13 | 14 | 15 | ); 16 | 17 | globalStyles(); 18 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | Notez | Zen notes 12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 | "target": "ES2022", 5 | "lib": ["ES2023"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true, 21 | "noUncheckedSideEffectImports": true 22 | }, 23 | "include": ["vite.config.ts"] 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 | "target": "ES2020", 5 | "useDefineForClassFields": true, 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "module": "ESNext", 8 | "skipLibCheck": true, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "isolatedModules": true, 14 | "moduleDetection": "force", 15 | "noEmit": true, 16 | "jsx": "react-jsx", 17 | 18 | /* Linting */ 19 | "strict": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "noFallthroughCasesInSwitch": true, 23 | "noUncheckedSideEffectImports": true 24 | }, 25 | "include": ["src"] 26 | } 27 | -------------------------------------------------------------------------------- /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'] }, 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 | }, 27 | }, 28 | ) 29 | -------------------------------------------------------------------------------- /src/editor/SettingsOption.tsx: -------------------------------------------------------------------------------- 1 | import { Check } from "lucide-react"; 2 | import { Setting, ThemeContainer, ThemeItem } from "./Settings"; 3 | 4 | type SettingsOptionProps = { 5 | label: string; 6 | options: string[]; 7 | currentValue: string; 8 | onSelect: (value: string) => void; 9 | getClassName?: (value: string) => string; 10 | }; 11 | 12 | export const SettingsOption = ({ 13 | label, 14 | options, 15 | currentValue, 16 | onSelect, 17 | getClassName, 18 | }: SettingsOptionProps) => ( 19 | 20 | 21 | 22 | {options.map((option) => ( 23 | onSelect(option)} 27 | > 28 | {currentValue === option ? : null} 29 | {option} 30 | 31 | ))} 32 | 33 | 34 | ); -------------------------------------------------------------------------------- /src/editor/useSetting.ts: -------------------------------------------------------------------------------- 1 | import { create } from "zustand"; 2 | import { persist } from "zustand/middleware"; 3 | 4 | type SettingsState = { 5 | isMenuOpen: boolean; 6 | showControls: boolean; 7 | setIsMenuOpen: (isOpen: boolean) => void; 8 | toggleMenu: () => void; 9 | toggleControls: () => void; 10 | setShowControls: (show: boolean) => void; 11 | }; 12 | 13 | export const useSettingsStore = create()( 14 | persist( 15 | (set) => ({ 16 | isMenuOpen: false, 17 | showControls: true, 18 | setIsMenuOpen: (isOpen) => set({ isMenuOpen: isOpen }), 19 | toggleMenu: () => set((state) => ({ isMenuOpen: !state.isMenuOpen })), 20 | toggleControls: () => 21 | set((state) => ({ showControls: !state.showControls })), 22 | setShowControls: (show) => set({ showControls: show }), 23 | }), 24 | { 25 | name: "settings-storage", 26 | } 27 | ) 28 | ); 29 | 30 | // Simple hook to access the store 31 | export const useSetting = () => useSettingsStore(); 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zen-note", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc -b && vite build", 9 | "lint": "eslint .", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@stitches/react": "^1.2.8", 14 | "lucide-react": "^0.477.0", 15 | "react": "^19.0.0", 16 | "react-dom": "^19.0.0", 17 | "styled-components": "^6.1.15", 18 | "uuid": "^11.1.0", 19 | "zustand": "^5.0.3" 20 | }, 21 | "devDependencies": { 22 | "@eslint/js": "^9.21.0", 23 | "@types/react": "^19.0.10", 24 | "@types/react-dom": "^19.0.4", 25 | "@types/styled-components": "^5.1.34", 26 | "@vitejs/plugin-react": "^4.3.4", 27 | "eslint": "^9.21.0", 28 | "eslint-plugin-react-hooks": "^5.2.0", 29 | "eslint-plugin-react-refresh": "^0.4.19", 30 | "globals": "^15.15.0", 31 | "typescript": "~5.7.3", 32 | "typescript-eslint": "^8.26.0", 33 | "vite": "^6.2.0" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/editor/ThemeSettings.tsx: -------------------------------------------------------------------------------- 1 | import { Check } from "lucide-react"; 2 | import { Setting, ThemeContainer, ThemeItem } from "./Settings"; 3 | import { 4 | fontSizes, 5 | fontStyles, 6 | themeClasses, 7 | themes, 8 | useTheme, 9 | } from "./useTheme"; 10 | 11 | export const ThemeSettings = () => { 12 | const { theme, setTheme, fontSize, fontStyle, setFontSize, setFontStyle } = 13 | useTheme(); 14 | 15 | return ( 16 | <> 17 | 18 | 19 | 20 | {themes.map((t) => ( 21 | setTheme(t)} 25 | > 26 | {theme === t ? : null} 27 | {t} 28 | 29 | ))} 30 | 31 | 32 | 33 | 34 | 35 | 36 | {fontSizes.map((f) => ( 37 | setFontSize(f)}> 38 | {fontSize === f ? : null} 39 | {f} 40 | 41 | ))} 42 | 43 | 44 | 45 | 46 | 47 | 48 | {fontStyles.map((f) => ( 49 | setFontStyle(f)}> 50 | {fontStyle === f ? : null} 51 | {f} 52 | 53 | ))} 54 | 55 | 56 | 57 | ); 58 | }; 59 | -------------------------------------------------------------------------------- /src/editor/EditorControls.tsx: -------------------------------------------------------------------------------- 1 | import { Bold, Heading, Italic, Type } from "lucide-react"; 2 | import { styled } from "../style"; 3 | 4 | const ControlsContainer = styled("div", { 5 | position: "fixed", 6 | bottom: "$medium", 7 | left: "50%", 8 | display: "flex", 9 | gap: "$small", 10 | padding: "4px", 11 | backgroundColor: "$baseBack", 12 | borderRadius: "4px", 13 | boxShadow: 14 | "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", 15 | zIndex: 1, 16 | 17 | // Animation properties 18 | opacity: 0, 19 | transition: "opacity 0.2s ease-out, transform 0.2s ease-out", 20 | transform: "translateX(-50%) translateY(20px)", 21 | 22 | "&.visible": { 23 | opacity: 1, 24 | transform: "translateX(-50%) translateY(0)", 25 | }, 26 | }); 27 | 28 | const ControlButton = styled("button", { 29 | all: "unset", 30 | cursor: "pointer", 31 | padding: "$small", 32 | borderRadius: "4px", 33 | color: "$text", 34 | display: "flex", 35 | alignItems: "center", 36 | justifyContent: "center", 37 | "&:hover": { 38 | backgroundColor: "$back", 39 | }, 40 | }); 41 | 42 | type EditorControlsProps = { 43 | onMakeTitle: () => void; 44 | onMakeBold: () => void; 45 | onMakeItalic: () => void; 46 | onMakeNormal: () => void; 47 | className?: string; 48 | }; 49 | 50 | export const EditorControls = ({ 51 | onMakeTitle, 52 | onMakeBold, 53 | onMakeItalic, 54 | onMakeNormal, 55 | className, 56 | }: EditorControlsProps) => { 57 | return ( 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | ); 73 | }; 74 | -------------------------------------------------------------------------------- /src/style.ts: -------------------------------------------------------------------------------- 1 | import { createStitches } from "@stitches/react"; 2 | 3 | export const { styled, css, globalCss, keyframes, theme, config, createTheme } = 4 | createStitches({ 5 | theme: { 6 | colors: { 7 | back: "#181926", 8 | text: "#cad3f5", 9 | baseBack: "#24273a", 10 | }, 11 | space: { 12 | small: "8px", 13 | medium: "16px", 14 | large: "32px", 15 | }, 16 | fontSizes: { 17 | small: "12px", 18 | medium: "16px", 19 | large: "24px", 20 | xlarge: "32px", 21 | normal: "16px", 22 | title: "32px", 23 | }, 24 | 25 | fonts: { 26 | old: "serif", 27 | simple: "sans-serif", 28 | free: "monospace", 29 | normal: "monospace", 30 | }, 31 | }, 32 | }); 33 | 34 | export const SoftColorTheme = createTheme({ 35 | colors: { 36 | back: "#222831", 37 | text: "#EEEEEE", 38 | baseBack: "#393E46", 39 | }, 40 | }); 41 | 42 | export const PurpleColorTheme = createTheme({ 43 | colors: { 44 | back: "#181926", 45 | text: "#cad3f5", 46 | baseBack: "#24273a", 47 | }, 48 | }); 49 | 50 | export const BlueColorTheme = createTheme({ 51 | colors: { 52 | back: "#FFF2F2", 53 | text: "#2D336B", 54 | baseBack: "#A9B5DF", 55 | }, 56 | }); 57 | 58 | export const DarkColorTheme = createTheme({ 59 | colors: { 60 | back: "#000000", 61 | text: "#F7F7F7", 62 | baseBack: "#854836", 63 | }, 64 | }); 65 | 66 | export const YellowColorTheme = createTheme({ 67 | colors: { 68 | back: "#000000", 69 | text: "#FFB22C", 70 | baseBack: "#493628", 71 | }, 72 | }); 73 | 74 | export const SmallFontTheme = createTheme({ 75 | fontSizes: { 76 | normal: "12px", 77 | title: "24px", 78 | }, 79 | }); 80 | 81 | export const MediumFontTheme = createTheme({ 82 | fontSizes: { 83 | normal: "16px", 84 | title: "32px", 85 | }, 86 | }); 87 | 88 | export const LargeFontTheme = createTheme({ 89 | fontSizes: { 90 | normal: "24px", 91 | title: "48px", 92 | }, 93 | }); 94 | 95 | export const SerifFontTheme = createTheme({ 96 | fonts: { 97 | normal: "serif", 98 | }, 99 | }); 100 | 101 | export const SansFontTheme = createTheme({ 102 | fonts: { 103 | normal: "sans-serif", 104 | }, 105 | }); 106 | 107 | export const MonoFontTheme = createTheme({ 108 | fonts: { 109 | normal: "monospace", 110 | }, 111 | }); 112 | -------------------------------------------------------------------------------- /src/editor/Editor.tsx: -------------------------------------------------------------------------------- 1 | import { styled } from "../style"; 2 | import { SettingComponent } from "./Settings"; 3 | import { useEditor } from "./useEditor"; 4 | import { EditorControls } from "./EditorControls"; 5 | import { useSetting } from "./useSetting"; 6 | import { useEffect, useState } from "react"; 7 | 8 | const EditorContainer = styled("div", { 9 | position: "relative", 10 | width: "100vw", 11 | height: "100vh", 12 | overflow: "scroll", 13 | }); 14 | 15 | const Editor = styled("div", { 16 | width: "100vw", 17 | height: "100vh", 18 | display: "flex", 19 | position: "relative", 20 | flexDirection: "column", 21 | padding: "$medium", 22 | fontSize: "$normal", 23 | fontFamily: "$normal", 24 | "&[contenteditable]:focus": { 25 | outline: "none", 26 | }, 27 | "& strong": { 28 | fontWeight: "bold", 29 | }, 30 | "& em": { 31 | fontStyle: "italic", 32 | }, 33 | "& h1": { 34 | fontSize: "$title", 35 | fontWeight: "bold", 36 | }, 37 | }); 38 | 39 | export const EditorComponent = () => { 40 | const { 41 | handlePaste, 42 | handleInput, 43 | divRef, 44 | makeTitle, 45 | makeBold, 46 | makeItalic, 47 | makeNormal, 48 | } = useEditor(); 49 | const { showControls, toggleControls } = useSetting(); 50 | const [isVisible, setIsVisible] = useState(false); 51 | 52 | useEffect(() => { 53 | if (showControls) { 54 | // Small delay to ensure DOM is ready for animation 55 | const timer = setTimeout(() => setIsVisible(true), 50); 56 | return () => clearTimeout(timer); 57 | } else { 58 | setIsVisible(false); 59 | } 60 | }, [showControls]); 61 | useEffect(() => { 62 | const handleKeyDown = (e: KeyboardEvent) => { 63 | if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "e") { 64 | e.preventDefault(); 65 | toggleControls(); 66 | } 67 | }; 68 | 69 | window.addEventListener("keydown", handleKeyDown); 70 | return () => window.removeEventListener("keydown", handleKeyDown); 71 | }, [toggleControls]); 72 | return ( 73 | 74 | 81 | {showControls && ( 82 | 89 | )} 90 | 91 | 92 | ); 93 | }; 94 | -------------------------------------------------------------------------------- /src/editor/useNotes.ts: -------------------------------------------------------------------------------- 1 | import { create } from "zustand"; 2 | import { persist } from "zustand/middleware"; 3 | import { v4 } from "uuid"; 4 | 5 | type Note = { 6 | id: string; 7 | title: string; 8 | content: string; 9 | }; 10 | 11 | type NotesState = { 12 | notes: Note[]; 13 | currentNote: Note | null; 14 | editingId: string | null; 15 | setCurrentNote: (note: Note) => void; 16 | setNotes: (notes: Note[]) => void; 17 | setCurrentNoteContent: (content: string) => void; 18 | changeCurrentNote: (id: string) => void; 19 | addNewNote: () => void; 20 | setNoteTitle: (title: string, id: string) => void; 21 | setEditingId: (id: string | null) => void; 22 | }; 23 | 24 | export const useNotesStore = create()( 25 | persist( 26 | (set, get) => ({ 27 | notes: [], 28 | currentNote: null, 29 | editingId: null, 30 | 31 | setCurrentNote: (note) => set({ currentNote: note }), 32 | setNotes: (notes) => set({ notes }), 33 | 34 | setCurrentNoteContent: (content) => { 35 | const { currentNote } = get(); 36 | if (!currentNote) return; 37 | set({ currentNote: { ...currentNote, content } }); 38 | }, 39 | 40 | changeCurrentNote: (id) => { 41 | const { notes, currentNote } = get(); 42 | if (!notes || !currentNote) return; 43 | const nextNote = notes.find((note) => note.id === id); 44 | const nextNotes = notes.map((note) => 45 | note.id === currentNote.id ? currentNote : note 46 | ); 47 | if (nextNote) { 48 | set({ 49 | currentNote: nextNote, 50 | notes: nextNotes, 51 | editingId: null, 52 | }); 53 | } 54 | }, 55 | 56 | addNewNote: () => { 57 | const { notes } = get(); 58 | if (!notes) return; 59 | const newNote = { 60 | id: v4(), 61 | title: new Date().toLocaleString(), 62 | content: "", 63 | }; 64 | set({ 65 | notes: [...notes, newNote], 66 | currentNote: newNote, 67 | }); 68 | return newNote; 69 | }, 70 | 71 | setNoteTitle: (title, id) => { 72 | const { notes, currentNote } = get(); 73 | if (!notes) return; 74 | const nextNotes = notes.map((note) => 75 | note.id === id ? { ...note, title } : note 76 | ); 77 | set({ 78 | notes: nextNotes, 79 | currentNote: 80 | currentNote?.id === id ? { ...currentNote, title } : currentNote, 81 | }); 82 | }, 83 | 84 | setEditingId: (id) => set({ editingId: id }), 85 | }), 86 | { 87 | name: "notes-storage", 88 | } 89 | ) 90 | ); 91 | 92 | // Simple hook to access the store 93 | export const useNotes = () => useNotesStore(); 94 | -------------------------------------------------------------------------------- /src/editor/useTheme.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | import { 3 | BlueColorTheme, 4 | DarkColorTheme, 5 | LargeFontTheme, 6 | MediumFontTheme, 7 | MonoFontTheme, 8 | PurpleColorTheme, 9 | SansFontTheme, 10 | SerifFontTheme, 11 | SmallFontTheme, 12 | SoftColorTheme, 13 | YellowColorTheme, 14 | } from "../style"; 15 | 16 | export const themes = ["soft", "purple", "blue", "dark", "yellow"] as const; 17 | 18 | export const themeClasses: Record<(typeof themes)[number], string> = { 19 | soft: SoftColorTheme.className, 20 | purple: PurpleColorTheme.className, 21 | blue: BlueColorTheme.className, 22 | dark: DarkColorTheme.className, 23 | yellow: YellowColorTheme.className, 24 | }; 25 | 26 | export const fontSizes = ["small", "medium", "large"] as const; 27 | 28 | export const fontSizeClasses: Record<(typeof fontSizes)[number], string> = { 29 | small: SmallFontTheme.className, 30 | medium: MediumFontTheme.className, 31 | large: LargeFontTheme.className, 32 | }; 33 | 34 | export const fontStyles = ["sans", "serif", "mono"] as const; 35 | 36 | export const fontStyleClasses: Record<(typeof fontStyles)[number], string> = { 37 | sans: SansFontTheme.className, 38 | serif: SerifFontTheme.className, 39 | mono: MonoFontTheme.className, 40 | }; 41 | 42 | export const useTheme = () => { 43 | const [theme, setTheme] = useState<(typeof themes)[number] | null>(null); 44 | const [fontSize, setFontSize] = useState<(typeof fontSizes)[number] | null>( 45 | null 46 | ); 47 | const [fontStyle, setFontStyle] = useState< 48 | (typeof fontStyles)[number] | null 49 | >(null); 50 | useEffect(() => { 51 | if (theme === null || fontSize === null || fontStyle === null) { 52 | const savedTheme = localStorage.getItem("ColorTheme"); 53 | const savedFontSize = localStorage.getItem("FontSize"); 54 | const savedFontStyle = localStorage.getItem("FontStyle"); 55 | if (savedFontSize) { 56 | setFontSize(savedFontSize as (typeof fontSizes)[number]); 57 | } else { 58 | setFontSize("medium"); 59 | } 60 | if (savedFontStyle) { 61 | setFontStyle(savedFontStyle as (typeof fontStyles)[number]); 62 | } else { 63 | setFontStyle("sans"); 64 | } 65 | if (savedTheme) { 66 | setTheme(savedTheme as (typeof themes)[number]); 67 | } else { 68 | setTheme("soft"); 69 | } 70 | } else { 71 | document.body.className = `${themeClasses[theme]} ${fontSizeClasses[fontSize]} ${fontStyleClasses[fontStyle]}`; 72 | localStorage.setItem("ColorTheme", theme); 73 | localStorage.setItem("FontSize", fontSize); 74 | localStorage.setItem("FontStyle", fontStyle); 75 | } 76 | }, [theme, fontSize, fontStyle]); 77 | 78 | return { theme, setTheme, fontSize, setFontSize, fontStyle, setFontStyle }; 79 | }; 80 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { EditorComponent } from "./editor/Editor"; 2 | 3 | export default function App() { 4 | return ; 5 | } 6 | 7 | // import { useRef } from "react"; 8 | 9 | // export function Editor() { 10 | // const editorRef = useRef(null); 11 | 12 | // const wrapSelectionWithH2 = () => { 13 | // const selection = window.getSelection(); 14 | // if (!selection?.rangeCount) return; 15 | 16 | // const range = selection?.getRangeAt(0); 17 | // const selectedText = range?.toString().trim(); 18 | 19 | // if (!selectedText) return; 20 | 21 | // // Проверяем, находится ли выделенный текст уже внутри

22 | // const parentElement = range.commonAncestorContainer.parentElement; 23 | // if (parentElement?.tagName === "H2") { 24 | // // Если уже

, просто разворачиваем обратно в текст 25 | // const textNode = document.createTextNode(parentElement.textContent || ""); 26 | // parentElement.replaceWith(textNode); 27 | // return; 28 | // } 29 | 30 | // // Если текст не в

, оборачиваем в

31 | // const h2 = document.createElement("h2"); 32 | // h2.textContent = selectedText; 33 | 34 | // range.deleteContents(); // Удаляем старый текст 35 | // range.insertNode(h2); // Вставляем новый узел 36 | 37 | // // Перемещаем курсор за h2 38 | // const newRange = document.createRange(); 39 | // newRange.setStartAfter(h2); 40 | // newRange.collapse(true); 41 | // selection?.removeAllRanges(); 42 | // selection?.addRange(newRange); 43 | // }; 44 | 45 | // const wrapSelectionWithStrong = () => { 46 | // const selection = window.getSelection(); 47 | // if (!selection?.rangeCount) return; 48 | 49 | // const range = selection?.getRangeAt(0); 50 | // const selectedText = range?.toString().trim(); 51 | 52 | // if (!selectedText) return; 53 | 54 | // // Проверяем, находится ли выделенный текст уже внутри

55 | // const parentElement = range.commonAncestorContainer.parentElement; 56 | 57 | // if (parentElement?.tagName === "STRONG") { 58 | // // Если уже

, просто разворачиваем обратно в текст 59 | // const textNode = document.createTextNode(parentElement.textContent || ""); 60 | // parentElement.replaceWith(textNode); 61 | // return; 62 | // } 63 | 64 | // // Если текст не в

, оборачиваем в

65 | // const h2 = document.createElement("strong"); 66 | // h2.textContent = selectedText; 67 | 68 | // range.deleteContents(); // Удаляем старый текст 69 | // range.insertNode(h2); // Вставляем новый узел 70 | 71 | // // Перемещаем курсор за h2 72 | // const newRange = document.createRange(); 73 | // newRange.setStartAfter(h2); 74 | // newRange.collapse(true); 75 | // selection?.removeAllRanges(); 76 | // selection?.addRange(newRange); 77 | // }; 78 | 79 | // return ( 80 | //
81 | // 82 | // 83 | //
92 | // Выделите текст и нажмите H2 93 | //
94 | //
95 | // ); 96 | // } 97 | -------------------------------------------------------------------------------- /src/editor/NotesList.tsx: -------------------------------------------------------------------------------- 1 | import { Check, Pencil, Plus } from "lucide-react"; 2 | import { styled } from "../style"; 3 | import { Flex } from "../shared/Flex"; 4 | import { useNotes } from "./useNotes"; 5 | 6 | const AddNewNote = styled(Flex, { 7 | width: "100%", 8 | textDecoration: "underline", 9 | cursor: "pointer", 10 | }); 11 | 12 | const ThemeContainer = styled("div", { 13 | display: "flex", 14 | gap: "$small", 15 | flexWrap: "wrap", 16 | }); 17 | 18 | const NoteItem = styled("span", { 19 | color: "$text", 20 | cursor: "pointer", 21 | "&:hover": { 22 | textDecoration: "underline", 23 | }, 24 | variants: { 25 | active: { 26 | true: { 27 | color: "$text", 28 | }, 29 | false: { 30 | color: "$text", 31 | opacity: 0.5, 32 | }, 33 | }, 34 | }, 35 | }); 36 | 37 | const NoteTitleInput = styled("input", { 38 | all: "unset", 39 | width: "100%", 40 | borderRadius: "4px", 41 | padding: "4px", 42 | border: "1px solid $back", 43 | color: "black", 44 | }); 45 | 46 | const EditButton = styled("button", { 47 | all: "unset", 48 | cursor: "pointer", 49 | color: "$text", 50 | transition: "0.2s ease-out", 51 | "&:hover": { 52 | color: "$text", 53 | opacity: 0.5, 54 | }, 55 | }); 56 | 57 | // Move other styled components here... 58 | 59 | export const NotesList = () => { 60 | const { 61 | notes, 62 | changeCurrentNote, 63 | setNoteTitle, 64 | currentNote, 65 | addNewNote, 66 | editingId, 67 | setEditingId, 68 | } = useNotes(); 69 | 70 | const handleKeyDown = (e: React.KeyboardEvent) => { 71 | if (e.key === "Enter") { 72 | setEditingId(null); 73 | } 74 | }; 75 | 76 | return ( 77 | 88 | 89 | New note 90 | 91 | 92 | {notes?.map((note) => { 93 | if (editingId === note.id) { 94 | return ( 95 | 96 | setNoteTitle(e.target.value, note.id)} 99 | onKeyDown={handleKeyDown} 100 | autoFocus 101 | /> 102 | setEditingId(null)}> 103 | 104 | 105 | 106 | ); 107 | } else { 108 | return ( 109 | 110 | changeCurrentNote(note.id)} 113 | > 114 | {note.title} 115 | 116 | setEditingId(note.id)}> 117 | 118 | 119 | 120 | ); 121 | } 122 | })} 123 | 124 | ); 125 | }; 126 | -------------------------------------------------------------------------------- /src/editor/Settings.tsx: -------------------------------------------------------------------------------- 1 | import { Settings2, X } from "lucide-react"; 2 | import { styled } from "../style"; 3 | import { useSetting } from "./useSetting"; 4 | 5 | import { Flex, FlexCol } from "../shared/Flex"; 6 | 7 | import { NotesList } from "./NotesList"; 8 | import { ThemeSettings } from "./ThemeSettings"; 9 | 10 | export const SettingsLayout = styled("button", { 11 | all: "unset", 12 | position: "absolute", 13 | display: "flex", 14 | flexDirection: "column", 15 | alignItems: "center", 16 | justifyContent: "center", 17 | cursor: "pointer", 18 | top: "$small", 19 | right: "$small", 20 | padding: "$small", 21 | backgroundColor: "$baseBack", 22 | color: "$text", 23 | fontSize: "$small", 24 | // border: "1px solid $text", 25 | borderRadius: "4px", 26 | zIndex: 1, 27 | }); 28 | 29 | export const SettingsMenu = styled("div", { 30 | display: "flex", 31 | flexDirection: "column", 32 | justifyContent: "space-between", 33 | gap: "$medium", 34 | position: "absolute", 35 | width: "300px", 36 | height: "calc(100dvh - 8px * 2)", 37 | backgroundColor: "$baseBack", 38 | top: "$small", 39 | right: "$small", 40 | padding: "$medium", 41 | transition: "0.2s ease-out", 42 | borderRadius: "8px", 43 | boxShadow: 44 | "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", 45 | "&.hidden": { 46 | right: "-400px", 47 | }, 48 | "& header": { 49 | display: "flex", 50 | justifyContent: "space-between", 51 | alignItems: "center", 52 | "& > .x-icon": { 53 | cursor: "pointer", 54 | }, 55 | }, 56 | 57 | zIndex: 2, 58 | }); 59 | 60 | export const Setting = styled("div", { 61 | display: "flex", 62 | flexDirection: "column", 63 | gap: "$small", 64 | "& > label": { 65 | color: "$text", 66 | }, 67 | 68 | variants: { 69 | alignContent: { 70 | start: { 71 | "& > div": { 72 | justifyContent: "flex-start", 73 | }, 74 | }, 75 | end: { 76 | "& > div": { 77 | justifyContent: "flex-end", 78 | }, 79 | }, 80 | between: { 81 | "& > div": { 82 | justifyContent: "space-between", 83 | }, 84 | }, 85 | }, 86 | }, 87 | }); 88 | 89 | export const ThemeItem = styled("span", { 90 | display: "flex", 91 | alignItems: "center", 92 | cursor: "pointer", 93 | padding: "4px", 94 | borderRadius: "4px", 95 | backgroundColor: "$back", 96 | color: "$text", 97 | }); 98 | 99 | export const ThemeContainer = styled("div", { 100 | display: "flex", 101 | gap: "$small", 102 | flexWrap: "wrap", 103 | }); 104 | 105 | const Toggle = styled("div", { 106 | width: "40px", 107 | height: "20px", 108 | backgroundColor: "$back", 109 | borderRadius: "10px", 110 | position: "relative", 111 | cursor: "pointer", 112 | transition: "0.2s ease-out", 113 | 114 | "&::after": { 115 | content: "", 116 | position: "absolute", 117 | width: "16px", 118 | height: "16px", 119 | borderRadius: "50%", 120 | backgroundColor: "$text", 121 | top: "2px", 122 | left: "2px", 123 | transition: "0.2s ease-out", 124 | }, 125 | 126 | variants: { 127 | active: { 128 | true: { 129 | "&::after": { 130 | left: "22px", 131 | }, 132 | }, 133 | }, 134 | }, 135 | }); 136 | 137 | export const SettingComponent = () => { 138 | const { isMenuOpen, toggleMenu, showControls, toggleControls } = useSetting(); 139 | 140 | return ( 141 | <> 142 | 143 | 144 | 151 | Notez 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 |
162 | Help 163 |
164 |
165 | 166 | 167 | 168 | 169 | ); 170 | }; 171 | -------------------------------------------------------------------------------- /src/editor/useEditor.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from "react"; 2 | import { useNotes } from "./useNotes"; 3 | 4 | export const useEditor = () => { 5 | const { currentNote, setCurrentNoteContent, addNewNote } = useNotes(); 6 | const divRef = useRef(null); 7 | 8 | useEffect(() => { 9 | if (!currentNote) return; 10 | if (divRef.current && divRef.current.innerHTML !== currentNote.content) { 11 | divRef.current.innerHTML = currentNote.content; 12 | } 13 | }, [currentNote]); 14 | 15 | const handleInput = () => { 16 | if (divRef.current) { 17 | if (!currentNote) { 18 | // Create a new note if none exists 19 | addNewNote(); 20 | setCurrentNoteContent(divRef.current.innerHTML); 21 | return; 22 | } 23 | setCurrentNoteContent(divRef.current.innerHTML); 24 | } 25 | }; 26 | 27 | const handlePaste = (event: React.ClipboardEvent) => { 28 | event.preventDefault(); 29 | const text = event.clipboardData?.getData("text/plain"); 30 | 31 | if (!currentNote) { 32 | // Create a new note if none exists 33 | addNewNote(); 34 | // Need to wait for the next tick for currentNote to be updated 35 | setTimeout(() => { 36 | document.execCommand("insertText", false, text); 37 | }, 0); 38 | return; 39 | } 40 | 41 | document.execCommand("insertText", false, text); 42 | }; 43 | 44 | const makeTitle = () => { 45 | const selection = window.getSelection(); 46 | if (!selection?.rangeCount) return; 47 | 48 | const range = selection.getRangeAt(0); 49 | const selectedText = range.toString().trim(); 50 | 51 | if (!selectedText) return; 52 | 53 | const parentElement = range.commonAncestorContainer.parentElement; 54 | if (parentElement?.tagName === "H1") { 55 | const textNode = document.createTextNode(parentElement.textContent || ""); 56 | parentElement.replaceWith(textNode); 57 | } else { 58 | const h1 = document.createElement("h1"); 59 | h1.textContent = selectedText; 60 | range.deleteContents(); 61 | range.insertNode(h1); 62 | } 63 | 64 | handleInput(); 65 | }; 66 | 67 | const makeBold = () => { 68 | const selection = window.getSelection(); 69 | if (!selection?.rangeCount) return; 70 | 71 | const range = selection.getRangeAt(0); 72 | const selectedText = range.toString().trim(); 73 | 74 | if (!selectedText) return; 75 | 76 | const parentElement = range.commonAncestorContainer.parentElement; 77 | if (parentElement?.tagName === "STRONG") { 78 | const textNode = document.createTextNode(parentElement.textContent || ""); 79 | parentElement.replaceWith(textNode); 80 | } else { 81 | const strong = document.createElement("strong"); 82 | strong.textContent = selectedText; 83 | range.deleteContents(); 84 | range.insertNode(strong); 85 | } 86 | 87 | handleInput(); 88 | }; 89 | 90 | const makeItalic = () => { 91 | const selection = window.getSelection(); 92 | if (!selection?.rangeCount) return; 93 | 94 | const range = selection.getRangeAt(0); 95 | const selectedText = range.toString().trim(); 96 | 97 | if (!selectedText) return; 98 | 99 | const parentElement = range.commonAncestorContainer.parentElement; 100 | if (parentElement?.tagName === "EM") { 101 | const textNode = document.createTextNode(parentElement.textContent || ""); 102 | parentElement.replaceWith(textNode); 103 | } else { 104 | const em = document.createElement("em"); 105 | em.textContent = selectedText; 106 | range.deleteContents(); 107 | range.insertNode(em); 108 | } 109 | 110 | handleInput(); 111 | }; 112 | 113 | const makeNormal = () => { 114 | const selection = window.getSelection(); 115 | if (!selection?.rangeCount) return; 116 | 117 | const range = selection.getRangeAt(0); 118 | const selectedText = range.toString().trim(); 119 | 120 | if (!selectedText) return; 121 | 122 | const parentElement = range.commonAncestorContainer.parentElement; 123 | if ( 124 | parentElement && 125 | ["H1", "STRONG", "EM"].includes(parentElement.tagName) 126 | ) { 127 | const textNode = document.createTextNode(parentElement.textContent || ""); 128 | parentElement.replaceWith(textNode); 129 | } else { 130 | // If text is not already formatted, just ensure it's plain text 131 | const textNode = document.createTextNode(selectedText); 132 | range.deleteContents(); 133 | range.insertNode(textNode); 134 | } 135 | 136 | handleInput(); // Moved outside the if condition 137 | }; 138 | 139 | return { 140 | handlePaste, 141 | handleInput, 142 | divRef, 143 | currentNote, 144 | setCurrentNoteContent, 145 | makeTitle, 146 | makeBold, 147 | makeItalic, 148 | makeNormal, 149 | }; 150 | }; 151 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@stitches/react': 12 | specifier: ^1.2.8 13 | version: 1.2.8(react@19.0.0) 14 | lucide-react: 15 | specifier: ^0.477.0 16 | version: 0.477.0(react@19.0.0) 17 | react: 18 | specifier: ^19.0.0 19 | version: 19.0.0 20 | react-dom: 21 | specifier: ^19.0.0 22 | version: 19.0.0(react@19.0.0) 23 | styled-components: 24 | specifier: ^6.1.15 25 | version: 6.1.15(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 26 | uuid: 27 | specifier: ^11.1.0 28 | version: 11.1.0 29 | zustand: 30 | specifier: ^5.0.3 31 | version: 5.0.3(@types/react@19.0.10)(react@19.0.0) 32 | devDependencies: 33 | '@eslint/js': 34 | specifier: ^9.21.0 35 | version: 9.21.0 36 | '@types/react': 37 | specifier: ^19.0.10 38 | version: 19.0.10 39 | '@types/react-dom': 40 | specifier: ^19.0.4 41 | version: 19.0.4(@types/react@19.0.10) 42 | '@types/styled-components': 43 | specifier: ^5.1.34 44 | version: 5.1.34 45 | '@vitejs/plugin-react': 46 | specifier: ^4.3.4 47 | version: 4.3.4(vite@6.2.0(@types/node@22.13.9)) 48 | eslint: 49 | specifier: ^9.21.0 50 | version: 9.21.0 51 | eslint-plugin-react-hooks: 52 | specifier: ^5.2.0 53 | version: 5.2.0(eslint@9.21.0) 54 | eslint-plugin-react-refresh: 55 | specifier: ^0.4.19 56 | version: 0.4.19(eslint@9.21.0) 57 | globals: 58 | specifier: ^15.15.0 59 | version: 15.15.0 60 | typescript: 61 | specifier: ~5.7.3 62 | version: 5.7.3 63 | typescript-eslint: 64 | specifier: ^8.26.0 65 | version: 8.26.0(eslint@9.21.0)(typescript@5.7.3) 66 | vite: 67 | specifier: ^6.2.0 68 | version: 6.2.0(@types/node@22.13.9) 69 | 70 | packages: 71 | 72 | '@ampproject/remapping@2.3.0': 73 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 74 | engines: {node: '>=6.0.0'} 75 | 76 | '@babel/code-frame@7.26.2': 77 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 78 | engines: {node: '>=6.9.0'} 79 | 80 | '@babel/compat-data@7.26.8': 81 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 82 | engines: {node: '>=6.9.0'} 83 | 84 | '@babel/core@7.26.9': 85 | resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} 86 | engines: {node: '>=6.9.0'} 87 | 88 | '@babel/generator@7.26.9': 89 | resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} 90 | engines: {node: '>=6.9.0'} 91 | 92 | '@babel/helper-compilation-targets@7.26.5': 93 | resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} 94 | engines: {node: '>=6.9.0'} 95 | 96 | '@babel/helper-module-imports@7.25.9': 97 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 98 | engines: {node: '>=6.9.0'} 99 | 100 | '@babel/helper-module-transforms@7.26.0': 101 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 102 | engines: {node: '>=6.9.0'} 103 | peerDependencies: 104 | '@babel/core': ^7.0.0 105 | 106 | '@babel/helper-plugin-utils@7.26.5': 107 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 108 | engines: {node: '>=6.9.0'} 109 | 110 | '@babel/helper-string-parser@7.25.9': 111 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 112 | engines: {node: '>=6.9.0'} 113 | 114 | '@babel/helper-validator-identifier@7.25.9': 115 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 116 | engines: {node: '>=6.9.0'} 117 | 118 | '@babel/helper-validator-option@7.25.9': 119 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 120 | engines: {node: '>=6.9.0'} 121 | 122 | '@babel/helpers@7.26.9': 123 | resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} 124 | engines: {node: '>=6.9.0'} 125 | 126 | '@babel/parser@7.26.9': 127 | resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} 128 | engines: {node: '>=6.0.0'} 129 | hasBin: true 130 | 131 | '@babel/plugin-transform-react-jsx-self@7.25.9': 132 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} 133 | engines: {node: '>=6.9.0'} 134 | peerDependencies: 135 | '@babel/core': ^7.0.0-0 136 | 137 | '@babel/plugin-transform-react-jsx-source@7.25.9': 138 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} 139 | engines: {node: '>=6.9.0'} 140 | peerDependencies: 141 | '@babel/core': ^7.0.0-0 142 | 143 | '@babel/template@7.26.9': 144 | resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} 145 | engines: {node: '>=6.9.0'} 146 | 147 | '@babel/traverse@7.26.9': 148 | resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} 149 | engines: {node: '>=6.9.0'} 150 | 151 | '@babel/types@7.26.9': 152 | resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} 153 | engines: {node: '>=6.9.0'} 154 | 155 | '@emotion/is-prop-valid@1.2.2': 156 | resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} 157 | 158 | '@emotion/memoize@0.8.1': 159 | resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} 160 | 161 | '@emotion/unitless@0.8.1': 162 | resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} 163 | 164 | '@esbuild/aix-ppc64@0.25.0': 165 | resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} 166 | engines: {node: '>=18'} 167 | cpu: [ppc64] 168 | os: [aix] 169 | 170 | '@esbuild/android-arm64@0.25.0': 171 | resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} 172 | engines: {node: '>=18'} 173 | cpu: [arm64] 174 | os: [android] 175 | 176 | '@esbuild/android-arm@0.25.0': 177 | resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} 178 | engines: {node: '>=18'} 179 | cpu: [arm] 180 | os: [android] 181 | 182 | '@esbuild/android-x64@0.25.0': 183 | resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} 184 | engines: {node: '>=18'} 185 | cpu: [x64] 186 | os: [android] 187 | 188 | '@esbuild/darwin-arm64@0.25.0': 189 | resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} 190 | engines: {node: '>=18'} 191 | cpu: [arm64] 192 | os: [darwin] 193 | 194 | '@esbuild/darwin-x64@0.25.0': 195 | resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} 196 | engines: {node: '>=18'} 197 | cpu: [x64] 198 | os: [darwin] 199 | 200 | '@esbuild/freebsd-arm64@0.25.0': 201 | resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} 202 | engines: {node: '>=18'} 203 | cpu: [arm64] 204 | os: [freebsd] 205 | 206 | '@esbuild/freebsd-x64@0.25.0': 207 | resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} 208 | engines: {node: '>=18'} 209 | cpu: [x64] 210 | os: [freebsd] 211 | 212 | '@esbuild/linux-arm64@0.25.0': 213 | resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} 214 | engines: {node: '>=18'} 215 | cpu: [arm64] 216 | os: [linux] 217 | 218 | '@esbuild/linux-arm@0.25.0': 219 | resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} 220 | engines: {node: '>=18'} 221 | cpu: [arm] 222 | os: [linux] 223 | 224 | '@esbuild/linux-ia32@0.25.0': 225 | resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} 226 | engines: {node: '>=18'} 227 | cpu: [ia32] 228 | os: [linux] 229 | 230 | '@esbuild/linux-loong64@0.25.0': 231 | resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} 232 | engines: {node: '>=18'} 233 | cpu: [loong64] 234 | os: [linux] 235 | 236 | '@esbuild/linux-mips64el@0.25.0': 237 | resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} 238 | engines: {node: '>=18'} 239 | cpu: [mips64el] 240 | os: [linux] 241 | 242 | '@esbuild/linux-ppc64@0.25.0': 243 | resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} 244 | engines: {node: '>=18'} 245 | cpu: [ppc64] 246 | os: [linux] 247 | 248 | '@esbuild/linux-riscv64@0.25.0': 249 | resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} 250 | engines: {node: '>=18'} 251 | cpu: [riscv64] 252 | os: [linux] 253 | 254 | '@esbuild/linux-s390x@0.25.0': 255 | resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} 256 | engines: {node: '>=18'} 257 | cpu: [s390x] 258 | os: [linux] 259 | 260 | '@esbuild/linux-x64@0.25.0': 261 | resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} 262 | engines: {node: '>=18'} 263 | cpu: [x64] 264 | os: [linux] 265 | 266 | '@esbuild/netbsd-arm64@0.25.0': 267 | resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} 268 | engines: {node: '>=18'} 269 | cpu: [arm64] 270 | os: [netbsd] 271 | 272 | '@esbuild/netbsd-x64@0.25.0': 273 | resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} 274 | engines: {node: '>=18'} 275 | cpu: [x64] 276 | os: [netbsd] 277 | 278 | '@esbuild/openbsd-arm64@0.25.0': 279 | resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} 280 | engines: {node: '>=18'} 281 | cpu: [arm64] 282 | os: [openbsd] 283 | 284 | '@esbuild/openbsd-x64@0.25.0': 285 | resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} 286 | engines: {node: '>=18'} 287 | cpu: [x64] 288 | os: [openbsd] 289 | 290 | '@esbuild/sunos-x64@0.25.0': 291 | resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} 292 | engines: {node: '>=18'} 293 | cpu: [x64] 294 | os: [sunos] 295 | 296 | '@esbuild/win32-arm64@0.25.0': 297 | resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} 298 | engines: {node: '>=18'} 299 | cpu: [arm64] 300 | os: [win32] 301 | 302 | '@esbuild/win32-ia32@0.25.0': 303 | resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} 304 | engines: {node: '>=18'} 305 | cpu: [ia32] 306 | os: [win32] 307 | 308 | '@esbuild/win32-x64@0.25.0': 309 | resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} 310 | engines: {node: '>=18'} 311 | cpu: [x64] 312 | os: [win32] 313 | 314 | '@eslint-community/eslint-utils@4.4.1': 315 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 316 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 317 | peerDependencies: 318 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 319 | 320 | '@eslint-community/regexpp@4.12.1': 321 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 322 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 323 | 324 | '@eslint/config-array@0.19.2': 325 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 326 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 327 | 328 | '@eslint/core@0.12.0': 329 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 330 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 331 | 332 | '@eslint/eslintrc@3.3.0': 333 | resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} 334 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 335 | 336 | '@eslint/js@9.21.0': 337 | resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} 338 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 339 | 340 | '@eslint/object-schema@2.1.6': 341 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 342 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 343 | 344 | '@eslint/plugin-kit@0.2.7': 345 | resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} 346 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 347 | 348 | '@humanfs/core@0.19.1': 349 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 350 | engines: {node: '>=18.18.0'} 351 | 352 | '@humanfs/node@0.16.6': 353 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 354 | engines: {node: '>=18.18.0'} 355 | 356 | '@humanwhocodes/module-importer@1.0.1': 357 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 358 | engines: {node: '>=12.22'} 359 | 360 | '@humanwhocodes/retry@0.3.1': 361 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 362 | engines: {node: '>=18.18'} 363 | 364 | '@humanwhocodes/retry@0.4.2': 365 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 366 | engines: {node: '>=18.18'} 367 | 368 | '@jridgewell/gen-mapping@0.3.8': 369 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 370 | engines: {node: '>=6.0.0'} 371 | 372 | '@jridgewell/resolve-uri@3.1.2': 373 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 374 | engines: {node: '>=6.0.0'} 375 | 376 | '@jridgewell/set-array@1.2.1': 377 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 378 | engines: {node: '>=6.0.0'} 379 | 380 | '@jridgewell/sourcemap-codec@1.5.0': 381 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 382 | 383 | '@jridgewell/trace-mapping@0.3.25': 384 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 385 | 386 | '@nodelib/fs.scandir@2.1.5': 387 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 388 | engines: {node: '>= 8'} 389 | 390 | '@nodelib/fs.stat@2.0.5': 391 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 392 | engines: {node: '>= 8'} 393 | 394 | '@nodelib/fs.walk@1.2.8': 395 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 396 | engines: {node: '>= 8'} 397 | 398 | '@rollup/rollup-android-arm-eabi@4.34.9': 399 | resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} 400 | cpu: [arm] 401 | os: [android] 402 | 403 | '@rollup/rollup-android-arm64@4.34.9': 404 | resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} 405 | cpu: [arm64] 406 | os: [android] 407 | 408 | '@rollup/rollup-darwin-arm64@4.34.9': 409 | resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} 410 | cpu: [arm64] 411 | os: [darwin] 412 | 413 | '@rollup/rollup-darwin-x64@4.34.9': 414 | resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} 415 | cpu: [x64] 416 | os: [darwin] 417 | 418 | '@rollup/rollup-freebsd-arm64@4.34.9': 419 | resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} 420 | cpu: [arm64] 421 | os: [freebsd] 422 | 423 | '@rollup/rollup-freebsd-x64@4.34.9': 424 | resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} 425 | cpu: [x64] 426 | os: [freebsd] 427 | 428 | '@rollup/rollup-linux-arm-gnueabihf@4.34.9': 429 | resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} 430 | cpu: [arm] 431 | os: [linux] 432 | 433 | '@rollup/rollup-linux-arm-musleabihf@4.34.9': 434 | resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} 435 | cpu: [arm] 436 | os: [linux] 437 | 438 | '@rollup/rollup-linux-arm64-gnu@4.34.9': 439 | resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} 440 | cpu: [arm64] 441 | os: [linux] 442 | 443 | '@rollup/rollup-linux-arm64-musl@4.34.9': 444 | resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} 445 | cpu: [arm64] 446 | os: [linux] 447 | 448 | '@rollup/rollup-linux-loongarch64-gnu@4.34.9': 449 | resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} 450 | cpu: [loong64] 451 | os: [linux] 452 | 453 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': 454 | resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} 455 | cpu: [ppc64] 456 | os: [linux] 457 | 458 | '@rollup/rollup-linux-riscv64-gnu@4.34.9': 459 | resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} 460 | cpu: [riscv64] 461 | os: [linux] 462 | 463 | '@rollup/rollup-linux-s390x-gnu@4.34.9': 464 | resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} 465 | cpu: [s390x] 466 | os: [linux] 467 | 468 | '@rollup/rollup-linux-x64-gnu@4.34.9': 469 | resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} 470 | cpu: [x64] 471 | os: [linux] 472 | 473 | '@rollup/rollup-linux-x64-musl@4.34.9': 474 | resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} 475 | cpu: [x64] 476 | os: [linux] 477 | 478 | '@rollup/rollup-win32-arm64-msvc@4.34.9': 479 | resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} 480 | cpu: [arm64] 481 | os: [win32] 482 | 483 | '@rollup/rollup-win32-ia32-msvc@4.34.9': 484 | resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} 485 | cpu: [ia32] 486 | os: [win32] 487 | 488 | '@rollup/rollup-win32-x64-msvc@4.34.9': 489 | resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} 490 | cpu: [x64] 491 | os: [win32] 492 | 493 | '@stitches/react@1.2.8': 494 | resolution: {integrity: sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==} 495 | peerDependencies: 496 | react: '>= 16.3.0' 497 | 498 | '@types/babel__core@7.20.5': 499 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 500 | 501 | '@types/babel__generator@7.6.8': 502 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 503 | 504 | '@types/babel__template@7.4.4': 505 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 506 | 507 | '@types/babel__traverse@7.20.6': 508 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 509 | 510 | '@types/estree@1.0.6': 511 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 512 | 513 | '@types/hoist-non-react-statics@3.3.6': 514 | resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} 515 | 516 | '@types/json-schema@7.0.15': 517 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 518 | 519 | '@types/node@22.13.9': 520 | resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} 521 | 522 | '@types/react-dom@19.0.4': 523 | resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} 524 | peerDependencies: 525 | '@types/react': ^19.0.0 526 | 527 | '@types/react@19.0.10': 528 | resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} 529 | 530 | '@types/styled-components@5.1.34': 531 | resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} 532 | 533 | '@types/stylis@4.2.5': 534 | resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} 535 | 536 | '@typescript-eslint/eslint-plugin@8.26.0': 537 | resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} 538 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 539 | peerDependencies: 540 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 541 | eslint: ^8.57.0 || ^9.0.0 542 | typescript: '>=4.8.4 <5.9.0' 543 | 544 | '@typescript-eslint/parser@8.26.0': 545 | resolution: {integrity: sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==} 546 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 547 | peerDependencies: 548 | eslint: ^8.57.0 || ^9.0.0 549 | typescript: '>=4.8.4 <5.9.0' 550 | 551 | '@typescript-eslint/scope-manager@8.26.0': 552 | resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} 553 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 554 | 555 | '@typescript-eslint/type-utils@8.26.0': 556 | resolution: {integrity: sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==} 557 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 558 | peerDependencies: 559 | eslint: ^8.57.0 || ^9.0.0 560 | typescript: '>=4.8.4 <5.9.0' 561 | 562 | '@typescript-eslint/types@8.26.0': 563 | resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} 564 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 565 | 566 | '@typescript-eslint/typescript-estree@8.26.0': 567 | resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} 568 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 569 | peerDependencies: 570 | typescript: '>=4.8.4 <5.9.0' 571 | 572 | '@typescript-eslint/utils@8.26.0': 573 | resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} 574 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 575 | peerDependencies: 576 | eslint: ^8.57.0 || ^9.0.0 577 | typescript: '>=4.8.4 <5.9.0' 578 | 579 | '@typescript-eslint/visitor-keys@8.26.0': 580 | resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} 581 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 582 | 583 | '@vitejs/plugin-react@4.3.4': 584 | resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} 585 | engines: {node: ^14.18.0 || >=16.0.0} 586 | peerDependencies: 587 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0 588 | 589 | acorn-jsx@5.3.2: 590 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 591 | peerDependencies: 592 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 593 | 594 | acorn@8.14.0: 595 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 596 | engines: {node: '>=0.4.0'} 597 | hasBin: true 598 | 599 | ajv@6.12.6: 600 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 601 | 602 | ansi-styles@4.3.0: 603 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 604 | engines: {node: '>=8'} 605 | 606 | argparse@2.0.1: 607 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 608 | 609 | balanced-match@1.0.2: 610 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 611 | 612 | brace-expansion@1.1.11: 613 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 614 | 615 | brace-expansion@2.0.1: 616 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 617 | 618 | braces@3.0.3: 619 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 620 | engines: {node: '>=8'} 621 | 622 | browserslist@4.24.4: 623 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 624 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 625 | hasBin: true 626 | 627 | callsites@3.1.0: 628 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 629 | engines: {node: '>=6'} 630 | 631 | camelize@1.0.1: 632 | resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} 633 | 634 | caniuse-lite@1.0.30001702: 635 | resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} 636 | 637 | chalk@4.1.2: 638 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 639 | engines: {node: '>=10'} 640 | 641 | color-convert@2.0.1: 642 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 643 | engines: {node: '>=7.0.0'} 644 | 645 | color-name@1.1.4: 646 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 647 | 648 | concat-map@0.0.1: 649 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 650 | 651 | convert-source-map@2.0.0: 652 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 653 | 654 | cross-spawn@7.0.6: 655 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 656 | engines: {node: '>= 8'} 657 | 658 | css-color-keywords@1.0.0: 659 | resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} 660 | engines: {node: '>=4'} 661 | 662 | css-to-react-native@3.2.0: 663 | resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} 664 | 665 | csstype@3.1.3: 666 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 667 | 668 | debug@4.4.0: 669 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 670 | engines: {node: '>=6.0'} 671 | peerDependencies: 672 | supports-color: '*' 673 | peerDependenciesMeta: 674 | supports-color: 675 | optional: true 676 | 677 | deep-is@0.1.4: 678 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 679 | 680 | electron-to-chromium@1.5.112: 681 | resolution: {integrity: sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==} 682 | 683 | esbuild@0.25.0: 684 | resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} 685 | engines: {node: '>=18'} 686 | hasBin: true 687 | 688 | escalade@3.2.0: 689 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 690 | engines: {node: '>=6'} 691 | 692 | escape-string-regexp@4.0.0: 693 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 694 | engines: {node: '>=10'} 695 | 696 | eslint-plugin-react-hooks@5.2.0: 697 | resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} 698 | engines: {node: '>=10'} 699 | peerDependencies: 700 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 701 | 702 | eslint-plugin-react-refresh@0.4.19: 703 | resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} 704 | peerDependencies: 705 | eslint: '>=8.40' 706 | 707 | eslint-scope@8.2.0: 708 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 709 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 710 | 711 | eslint-visitor-keys@3.4.3: 712 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 713 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 714 | 715 | eslint-visitor-keys@4.2.0: 716 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 717 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 718 | 719 | eslint@9.21.0: 720 | resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==} 721 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 722 | hasBin: true 723 | peerDependencies: 724 | jiti: '*' 725 | peerDependenciesMeta: 726 | jiti: 727 | optional: true 728 | 729 | espree@10.3.0: 730 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 731 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 732 | 733 | esquery@1.6.0: 734 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 735 | engines: {node: '>=0.10'} 736 | 737 | esrecurse@4.3.0: 738 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 739 | engines: {node: '>=4.0'} 740 | 741 | estraverse@5.3.0: 742 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 743 | engines: {node: '>=4.0'} 744 | 745 | esutils@2.0.3: 746 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 747 | engines: {node: '>=0.10.0'} 748 | 749 | fast-deep-equal@3.1.3: 750 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 751 | 752 | fast-glob@3.3.3: 753 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 754 | engines: {node: '>=8.6.0'} 755 | 756 | fast-json-stable-stringify@2.1.0: 757 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 758 | 759 | fast-levenshtein@2.0.6: 760 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 761 | 762 | fastq@1.19.1: 763 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 764 | 765 | file-entry-cache@8.0.0: 766 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 767 | engines: {node: '>=16.0.0'} 768 | 769 | fill-range@7.1.1: 770 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 771 | engines: {node: '>=8'} 772 | 773 | find-up@5.0.0: 774 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 775 | engines: {node: '>=10'} 776 | 777 | flat-cache@4.0.1: 778 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 779 | engines: {node: '>=16'} 780 | 781 | flatted@3.3.3: 782 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 783 | 784 | fsevents@2.3.3: 785 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 786 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 787 | os: [darwin] 788 | 789 | gensync@1.0.0-beta.2: 790 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 791 | engines: {node: '>=6.9.0'} 792 | 793 | glob-parent@5.1.2: 794 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 795 | engines: {node: '>= 6'} 796 | 797 | glob-parent@6.0.2: 798 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 799 | engines: {node: '>=10.13.0'} 800 | 801 | globals@11.12.0: 802 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 803 | engines: {node: '>=4'} 804 | 805 | globals@14.0.0: 806 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 807 | engines: {node: '>=18'} 808 | 809 | globals@15.15.0: 810 | resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} 811 | engines: {node: '>=18'} 812 | 813 | graphemer@1.4.0: 814 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 815 | 816 | has-flag@4.0.0: 817 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 818 | engines: {node: '>=8'} 819 | 820 | hoist-non-react-statics@3.3.2: 821 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} 822 | 823 | ignore@5.3.2: 824 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 825 | engines: {node: '>= 4'} 826 | 827 | import-fresh@3.3.1: 828 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 829 | engines: {node: '>=6'} 830 | 831 | imurmurhash@0.1.4: 832 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 833 | engines: {node: '>=0.8.19'} 834 | 835 | is-extglob@2.1.1: 836 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 837 | engines: {node: '>=0.10.0'} 838 | 839 | is-glob@4.0.3: 840 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 841 | engines: {node: '>=0.10.0'} 842 | 843 | is-number@7.0.0: 844 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 845 | engines: {node: '>=0.12.0'} 846 | 847 | isexe@2.0.0: 848 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 849 | 850 | js-tokens@4.0.0: 851 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 852 | 853 | js-yaml@4.1.0: 854 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 855 | hasBin: true 856 | 857 | jsesc@3.1.0: 858 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 859 | engines: {node: '>=6'} 860 | hasBin: true 861 | 862 | json-buffer@3.0.1: 863 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 864 | 865 | json-schema-traverse@0.4.1: 866 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 867 | 868 | json-stable-stringify-without-jsonify@1.0.1: 869 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 870 | 871 | json5@2.2.3: 872 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 873 | engines: {node: '>=6'} 874 | hasBin: true 875 | 876 | keyv@4.5.4: 877 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 878 | 879 | levn@0.4.1: 880 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 881 | engines: {node: '>= 0.8.0'} 882 | 883 | locate-path@6.0.0: 884 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 885 | engines: {node: '>=10'} 886 | 887 | lodash.merge@4.6.2: 888 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 889 | 890 | lru-cache@5.1.1: 891 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 892 | 893 | lucide-react@0.477.0: 894 | resolution: {integrity: sha512-yCf7aYxerFZAbd8jHJxjwe1j7jEMPptjnaOqdYeirFnEy85cNR3/L+o0I875CYFYya+eEVzZSbNuRk8BZPDpVw==} 895 | peerDependencies: 896 | react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 897 | 898 | merge2@1.4.1: 899 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 900 | engines: {node: '>= 8'} 901 | 902 | micromatch@4.0.8: 903 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 904 | engines: {node: '>=8.6'} 905 | 906 | minimatch@3.1.2: 907 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 908 | 909 | minimatch@9.0.5: 910 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 911 | engines: {node: '>=16 || 14 >=14.17'} 912 | 913 | ms@2.1.3: 914 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 915 | 916 | nanoid@3.3.8: 917 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 918 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 919 | hasBin: true 920 | 921 | natural-compare@1.4.0: 922 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 923 | 924 | node-releases@2.0.19: 925 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 926 | 927 | optionator@0.9.4: 928 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 929 | engines: {node: '>= 0.8.0'} 930 | 931 | p-limit@3.1.0: 932 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 933 | engines: {node: '>=10'} 934 | 935 | p-locate@5.0.0: 936 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 937 | engines: {node: '>=10'} 938 | 939 | parent-module@1.0.1: 940 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 941 | engines: {node: '>=6'} 942 | 943 | path-exists@4.0.0: 944 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 945 | engines: {node: '>=8'} 946 | 947 | path-key@3.1.1: 948 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 949 | engines: {node: '>=8'} 950 | 951 | picocolors@1.1.1: 952 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 953 | 954 | picomatch@2.3.1: 955 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 956 | engines: {node: '>=8.6'} 957 | 958 | postcss-value-parser@4.2.0: 959 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 960 | 961 | postcss@8.4.49: 962 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 963 | engines: {node: ^10 || ^12 || >=14} 964 | 965 | postcss@8.5.3: 966 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 967 | engines: {node: ^10 || ^12 || >=14} 968 | 969 | prelude-ls@1.2.1: 970 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 971 | engines: {node: '>= 0.8.0'} 972 | 973 | punycode@2.3.1: 974 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 975 | engines: {node: '>=6'} 976 | 977 | queue-microtask@1.2.3: 978 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 979 | 980 | react-dom@19.0.0: 981 | resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} 982 | peerDependencies: 983 | react: ^19.0.0 984 | 985 | react-is@16.13.1: 986 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 987 | 988 | react-refresh@0.14.2: 989 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} 990 | engines: {node: '>=0.10.0'} 991 | 992 | react@19.0.0: 993 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} 994 | engines: {node: '>=0.10.0'} 995 | 996 | resolve-from@4.0.0: 997 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 998 | engines: {node: '>=4'} 999 | 1000 | reusify@1.1.0: 1001 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1002 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1003 | 1004 | rollup@4.34.9: 1005 | resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} 1006 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1007 | hasBin: true 1008 | 1009 | run-parallel@1.2.0: 1010 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1011 | 1012 | scheduler@0.25.0: 1013 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} 1014 | 1015 | semver@6.3.1: 1016 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1017 | hasBin: true 1018 | 1019 | semver@7.7.1: 1020 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1021 | engines: {node: '>=10'} 1022 | hasBin: true 1023 | 1024 | shallowequal@1.1.0: 1025 | resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} 1026 | 1027 | shebang-command@2.0.0: 1028 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1029 | engines: {node: '>=8'} 1030 | 1031 | shebang-regex@3.0.0: 1032 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1033 | engines: {node: '>=8'} 1034 | 1035 | source-map-js@1.2.1: 1036 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1037 | engines: {node: '>=0.10.0'} 1038 | 1039 | strip-json-comments@3.1.1: 1040 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1041 | engines: {node: '>=8'} 1042 | 1043 | styled-components@6.1.15: 1044 | resolution: {integrity: sha512-PpOTEztW87Ua2xbmLa7yssjNyUF9vE7wdldRfn1I2E6RTkqknkBYpj771OxM/xrvRGinLy2oysa7GOd7NcZZIA==} 1045 | engines: {node: '>= 16'} 1046 | peerDependencies: 1047 | react: '>= 16.8.0' 1048 | react-dom: '>= 16.8.0' 1049 | 1050 | stylis@4.3.2: 1051 | resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} 1052 | 1053 | supports-color@7.2.0: 1054 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1055 | engines: {node: '>=8'} 1056 | 1057 | to-regex-range@5.0.1: 1058 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1059 | engines: {node: '>=8.0'} 1060 | 1061 | ts-api-utils@2.0.1: 1062 | resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} 1063 | engines: {node: '>=18.12'} 1064 | peerDependencies: 1065 | typescript: '>=4.8.4' 1066 | 1067 | tslib@2.6.2: 1068 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1069 | 1070 | type-check@0.4.0: 1071 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1072 | engines: {node: '>= 0.8.0'} 1073 | 1074 | typescript-eslint@8.26.0: 1075 | resolution: {integrity: sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==} 1076 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1077 | peerDependencies: 1078 | eslint: ^8.57.0 || ^9.0.0 1079 | typescript: '>=4.8.4 <5.9.0' 1080 | 1081 | typescript@5.7.3: 1082 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 1083 | engines: {node: '>=14.17'} 1084 | hasBin: true 1085 | 1086 | undici-types@6.20.0: 1087 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1088 | 1089 | update-browserslist-db@1.1.3: 1090 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1091 | hasBin: true 1092 | peerDependencies: 1093 | browserslist: '>= 4.21.0' 1094 | 1095 | uri-js@4.4.1: 1096 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1097 | 1098 | uuid@11.1.0: 1099 | resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} 1100 | hasBin: true 1101 | 1102 | vite@6.2.0: 1103 | resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==} 1104 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1105 | hasBin: true 1106 | peerDependencies: 1107 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1108 | jiti: '>=1.21.0' 1109 | less: '*' 1110 | lightningcss: ^1.21.0 1111 | sass: '*' 1112 | sass-embedded: '*' 1113 | stylus: '*' 1114 | sugarss: '*' 1115 | terser: ^5.16.0 1116 | tsx: ^4.8.1 1117 | yaml: ^2.4.2 1118 | peerDependenciesMeta: 1119 | '@types/node': 1120 | optional: true 1121 | jiti: 1122 | optional: true 1123 | less: 1124 | optional: true 1125 | lightningcss: 1126 | optional: true 1127 | sass: 1128 | optional: true 1129 | sass-embedded: 1130 | optional: true 1131 | stylus: 1132 | optional: true 1133 | sugarss: 1134 | optional: true 1135 | terser: 1136 | optional: true 1137 | tsx: 1138 | optional: true 1139 | yaml: 1140 | optional: true 1141 | 1142 | which@2.0.2: 1143 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1144 | engines: {node: '>= 8'} 1145 | hasBin: true 1146 | 1147 | word-wrap@1.2.5: 1148 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1149 | engines: {node: '>=0.10.0'} 1150 | 1151 | yallist@3.1.1: 1152 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1153 | 1154 | yocto-queue@0.1.0: 1155 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1156 | engines: {node: '>=10'} 1157 | 1158 | zustand@5.0.3: 1159 | resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} 1160 | engines: {node: '>=12.20.0'} 1161 | peerDependencies: 1162 | '@types/react': '>=18.0.0' 1163 | immer: '>=9.0.6' 1164 | react: '>=18.0.0' 1165 | use-sync-external-store: '>=1.2.0' 1166 | peerDependenciesMeta: 1167 | '@types/react': 1168 | optional: true 1169 | immer: 1170 | optional: true 1171 | react: 1172 | optional: true 1173 | use-sync-external-store: 1174 | optional: true 1175 | 1176 | snapshots: 1177 | 1178 | '@ampproject/remapping@2.3.0': 1179 | dependencies: 1180 | '@jridgewell/gen-mapping': 0.3.8 1181 | '@jridgewell/trace-mapping': 0.3.25 1182 | 1183 | '@babel/code-frame@7.26.2': 1184 | dependencies: 1185 | '@babel/helper-validator-identifier': 7.25.9 1186 | js-tokens: 4.0.0 1187 | picocolors: 1.1.1 1188 | 1189 | '@babel/compat-data@7.26.8': {} 1190 | 1191 | '@babel/core@7.26.9': 1192 | dependencies: 1193 | '@ampproject/remapping': 2.3.0 1194 | '@babel/code-frame': 7.26.2 1195 | '@babel/generator': 7.26.9 1196 | '@babel/helper-compilation-targets': 7.26.5 1197 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) 1198 | '@babel/helpers': 7.26.9 1199 | '@babel/parser': 7.26.9 1200 | '@babel/template': 7.26.9 1201 | '@babel/traverse': 7.26.9 1202 | '@babel/types': 7.26.9 1203 | convert-source-map: 2.0.0 1204 | debug: 4.4.0 1205 | gensync: 1.0.0-beta.2 1206 | json5: 2.2.3 1207 | semver: 6.3.1 1208 | transitivePeerDependencies: 1209 | - supports-color 1210 | 1211 | '@babel/generator@7.26.9': 1212 | dependencies: 1213 | '@babel/parser': 7.26.9 1214 | '@babel/types': 7.26.9 1215 | '@jridgewell/gen-mapping': 0.3.8 1216 | '@jridgewell/trace-mapping': 0.3.25 1217 | jsesc: 3.1.0 1218 | 1219 | '@babel/helper-compilation-targets@7.26.5': 1220 | dependencies: 1221 | '@babel/compat-data': 7.26.8 1222 | '@babel/helper-validator-option': 7.25.9 1223 | browserslist: 4.24.4 1224 | lru-cache: 5.1.1 1225 | semver: 6.3.1 1226 | 1227 | '@babel/helper-module-imports@7.25.9': 1228 | dependencies: 1229 | '@babel/traverse': 7.26.9 1230 | '@babel/types': 7.26.9 1231 | transitivePeerDependencies: 1232 | - supports-color 1233 | 1234 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': 1235 | dependencies: 1236 | '@babel/core': 7.26.9 1237 | '@babel/helper-module-imports': 7.25.9 1238 | '@babel/helper-validator-identifier': 7.25.9 1239 | '@babel/traverse': 7.26.9 1240 | transitivePeerDependencies: 1241 | - supports-color 1242 | 1243 | '@babel/helper-plugin-utils@7.26.5': {} 1244 | 1245 | '@babel/helper-string-parser@7.25.9': {} 1246 | 1247 | '@babel/helper-validator-identifier@7.25.9': {} 1248 | 1249 | '@babel/helper-validator-option@7.25.9': {} 1250 | 1251 | '@babel/helpers@7.26.9': 1252 | dependencies: 1253 | '@babel/template': 7.26.9 1254 | '@babel/types': 7.26.9 1255 | 1256 | '@babel/parser@7.26.9': 1257 | dependencies: 1258 | '@babel/types': 7.26.9 1259 | 1260 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.9)': 1261 | dependencies: 1262 | '@babel/core': 7.26.9 1263 | '@babel/helper-plugin-utils': 7.26.5 1264 | 1265 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9)': 1266 | dependencies: 1267 | '@babel/core': 7.26.9 1268 | '@babel/helper-plugin-utils': 7.26.5 1269 | 1270 | '@babel/template@7.26.9': 1271 | dependencies: 1272 | '@babel/code-frame': 7.26.2 1273 | '@babel/parser': 7.26.9 1274 | '@babel/types': 7.26.9 1275 | 1276 | '@babel/traverse@7.26.9': 1277 | dependencies: 1278 | '@babel/code-frame': 7.26.2 1279 | '@babel/generator': 7.26.9 1280 | '@babel/parser': 7.26.9 1281 | '@babel/template': 7.26.9 1282 | '@babel/types': 7.26.9 1283 | debug: 4.4.0 1284 | globals: 11.12.0 1285 | transitivePeerDependencies: 1286 | - supports-color 1287 | 1288 | '@babel/types@7.26.9': 1289 | dependencies: 1290 | '@babel/helper-string-parser': 7.25.9 1291 | '@babel/helper-validator-identifier': 7.25.9 1292 | 1293 | '@emotion/is-prop-valid@1.2.2': 1294 | dependencies: 1295 | '@emotion/memoize': 0.8.1 1296 | 1297 | '@emotion/memoize@0.8.1': {} 1298 | 1299 | '@emotion/unitless@0.8.1': {} 1300 | 1301 | '@esbuild/aix-ppc64@0.25.0': 1302 | optional: true 1303 | 1304 | '@esbuild/android-arm64@0.25.0': 1305 | optional: true 1306 | 1307 | '@esbuild/android-arm@0.25.0': 1308 | optional: true 1309 | 1310 | '@esbuild/android-x64@0.25.0': 1311 | optional: true 1312 | 1313 | '@esbuild/darwin-arm64@0.25.0': 1314 | optional: true 1315 | 1316 | '@esbuild/darwin-x64@0.25.0': 1317 | optional: true 1318 | 1319 | '@esbuild/freebsd-arm64@0.25.0': 1320 | optional: true 1321 | 1322 | '@esbuild/freebsd-x64@0.25.0': 1323 | optional: true 1324 | 1325 | '@esbuild/linux-arm64@0.25.0': 1326 | optional: true 1327 | 1328 | '@esbuild/linux-arm@0.25.0': 1329 | optional: true 1330 | 1331 | '@esbuild/linux-ia32@0.25.0': 1332 | optional: true 1333 | 1334 | '@esbuild/linux-loong64@0.25.0': 1335 | optional: true 1336 | 1337 | '@esbuild/linux-mips64el@0.25.0': 1338 | optional: true 1339 | 1340 | '@esbuild/linux-ppc64@0.25.0': 1341 | optional: true 1342 | 1343 | '@esbuild/linux-riscv64@0.25.0': 1344 | optional: true 1345 | 1346 | '@esbuild/linux-s390x@0.25.0': 1347 | optional: true 1348 | 1349 | '@esbuild/linux-x64@0.25.0': 1350 | optional: true 1351 | 1352 | '@esbuild/netbsd-arm64@0.25.0': 1353 | optional: true 1354 | 1355 | '@esbuild/netbsd-x64@0.25.0': 1356 | optional: true 1357 | 1358 | '@esbuild/openbsd-arm64@0.25.0': 1359 | optional: true 1360 | 1361 | '@esbuild/openbsd-x64@0.25.0': 1362 | optional: true 1363 | 1364 | '@esbuild/sunos-x64@0.25.0': 1365 | optional: true 1366 | 1367 | '@esbuild/win32-arm64@0.25.0': 1368 | optional: true 1369 | 1370 | '@esbuild/win32-ia32@0.25.0': 1371 | optional: true 1372 | 1373 | '@esbuild/win32-x64@0.25.0': 1374 | optional: true 1375 | 1376 | '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)': 1377 | dependencies: 1378 | eslint: 9.21.0 1379 | eslint-visitor-keys: 3.4.3 1380 | 1381 | '@eslint-community/regexpp@4.12.1': {} 1382 | 1383 | '@eslint/config-array@0.19.2': 1384 | dependencies: 1385 | '@eslint/object-schema': 2.1.6 1386 | debug: 4.4.0 1387 | minimatch: 3.1.2 1388 | transitivePeerDependencies: 1389 | - supports-color 1390 | 1391 | '@eslint/core@0.12.0': 1392 | dependencies: 1393 | '@types/json-schema': 7.0.15 1394 | 1395 | '@eslint/eslintrc@3.3.0': 1396 | dependencies: 1397 | ajv: 6.12.6 1398 | debug: 4.4.0 1399 | espree: 10.3.0 1400 | globals: 14.0.0 1401 | ignore: 5.3.2 1402 | import-fresh: 3.3.1 1403 | js-yaml: 4.1.0 1404 | minimatch: 3.1.2 1405 | strip-json-comments: 3.1.1 1406 | transitivePeerDependencies: 1407 | - supports-color 1408 | 1409 | '@eslint/js@9.21.0': {} 1410 | 1411 | '@eslint/object-schema@2.1.6': {} 1412 | 1413 | '@eslint/plugin-kit@0.2.7': 1414 | dependencies: 1415 | '@eslint/core': 0.12.0 1416 | levn: 0.4.1 1417 | 1418 | '@humanfs/core@0.19.1': {} 1419 | 1420 | '@humanfs/node@0.16.6': 1421 | dependencies: 1422 | '@humanfs/core': 0.19.1 1423 | '@humanwhocodes/retry': 0.3.1 1424 | 1425 | '@humanwhocodes/module-importer@1.0.1': {} 1426 | 1427 | '@humanwhocodes/retry@0.3.1': {} 1428 | 1429 | '@humanwhocodes/retry@0.4.2': {} 1430 | 1431 | '@jridgewell/gen-mapping@0.3.8': 1432 | dependencies: 1433 | '@jridgewell/set-array': 1.2.1 1434 | '@jridgewell/sourcemap-codec': 1.5.0 1435 | '@jridgewell/trace-mapping': 0.3.25 1436 | 1437 | '@jridgewell/resolve-uri@3.1.2': {} 1438 | 1439 | '@jridgewell/set-array@1.2.1': {} 1440 | 1441 | '@jridgewell/sourcemap-codec@1.5.0': {} 1442 | 1443 | '@jridgewell/trace-mapping@0.3.25': 1444 | dependencies: 1445 | '@jridgewell/resolve-uri': 3.1.2 1446 | '@jridgewell/sourcemap-codec': 1.5.0 1447 | 1448 | '@nodelib/fs.scandir@2.1.5': 1449 | dependencies: 1450 | '@nodelib/fs.stat': 2.0.5 1451 | run-parallel: 1.2.0 1452 | 1453 | '@nodelib/fs.stat@2.0.5': {} 1454 | 1455 | '@nodelib/fs.walk@1.2.8': 1456 | dependencies: 1457 | '@nodelib/fs.scandir': 2.1.5 1458 | fastq: 1.19.1 1459 | 1460 | '@rollup/rollup-android-arm-eabi@4.34.9': 1461 | optional: true 1462 | 1463 | '@rollup/rollup-android-arm64@4.34.9': 1464 | optional: true 1465 | 1466 | '@rollup/rollup-darwin-arm64@4.34.9': 1467 | optional: true 1468 | 1469 | '@rollup/rollup-darwin-x64@4.34.9': 1470 | optional: true 1471 | 1472 | '@rollup/rollup-freebsd-arm64@4.34.9': 1473 | optional: true 1474 | 1475 | '@rollup/rollup-freebsd-x64@4.34.9': 1476 | optional: true 1477 | 1478 | '@rollup/rollup-linux-arm-gnueabihf@4.34.9': 1479 | optional: true 1480 | 1481 | '@rollup/rollup-linux-arm-musleabihf@4.34.9': 1482 | optional: true 1483 | 1484 | '@rollup/rollup-linux-arm64-gnu@4.34.9': 1485 | optional: true 1486 | 1487 | '@rollup/rollup-linux-arm64-musl@4.34.9': 1488 | optional: true 1489 | 1490 | '@rollup/rollup-linux-loongarch64-gnu@4.34.9': 1491 | optional: true 1492 | 1493 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': 1494 | optional: true 1495 | 1496 | '@rollup/rollup-linux-riscv64-gnu@4.34.9': 1497 | optional: true 1498 | 1499 | '@rollup/rollup-linux-s390x-gnu@4.34.9': 1500 | optional: true 1501 | 1502 | '@rollup/rollup-linux-x64-gnu@4.34.9': 1503 | optional: true 1504 | 1505 | '@rollup/rollup-linux-x64-musl@4.34.9': 1506 | optional: true 1507 | 1508 | '@rollup/rollup-win32-arm64-msvc@4.34.9': 1509 | optional: true 1510 | 1511 | '@rollup/rollup-win32-ia32-msvc@4.34.9': 1512 | optional: true 1513 | 1514 | '@rollup/rollup-win32-x64-msvc@4.34.9': 1515 | optional: true 1516 | 1517 | '@stitches/react@1.2.8(react@19.0.0)': 1518 | dependencies: 1519 | react: 19.0.0 1520 | 1521 | '@types/babel__core@7.20.5': 1522 | dependencies: 1523 | '@babel/parser': 7.26.9 1524 | '@babel/types': 7.26.9 1525 | '@types/babel__generator': 7.6.8 1526 | '@types/babel__template': 7.4.4 1527 | '@types/babel__traverse': 7.20.6 1528 | 1529 | '@types/babel__generator@7.6.8': 1530 | dependencies: 1531 | '@babel/types': 7.26.9 1532 | 1533 | '@types/babel__template@7.4.4': 1534 | dependencies: 1535 | '@babel/parser': 7.26.9 1536 | '@babel/types': 7.26.9 1537 | 1538 | '@types/babel__traverse@7.20.6': 1539 | dependencies: 1540 | '@babel/types': 7.26.9 1541 | 1542 | '@types/estree@1.0.6': {} 1543 | 1544 | '@types/hoist-non-react-statics@3.3.6': 1545 | dependencies: 1546 | '@types/react': 19.0.10 1547 | hoist-non-react-statics: 3.3.2 1548 | 1549 | '@types/json-schema@7.0.15': {} 1550 | 1551 | '@types/node@22.13.9': 1552 | dependencies: 1553 | undici-types: 6.20.0 1554 | optional: true 1555 | 1556 | '@types/react-dom@19.0.4(@types/react@19.0.10)': 1557 | dependencies: 1558 | '@types/react': 19.0.10 1559 | 1560 | '@types/react@19.0.10': 1561 | dependencies: 1562 | csstype: 3.1.3 1563 | 1564 | '@types/styled-components@5.1.34': 1565 | dependencies: 1566 | '@types/hoist-non-react-statics': 3.3.6 1567 | '@types/react': 19.0.10 1568 | csstype: 3.1.3 1569 | 1570 | '@types/stylis@4.2.5': {} 1571 | 1572 | '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3)': 1573 | dependencies: 1574 | '@eslint-community/regexpp': 4.12.1 1575 | '@typescript-eslint/parser': 8.26.0(eslint@9.21.0)(typescript@5.7.3) 1576 | '@typescript-eslint/scope-manager': 8.26.0 1577 | '@typescript-eslint/type-utils': 8.26.0(eslint@9.21.0)(typescript@5.7.3) 1578 | '@typescript-eslint/utils': 8.26.0(eslint@9.21.0)(typescript@5.7.3) 1579 | '@typescript-eslint/visitor-keys': 8.26.0 1580 | eslint: 9.21.0 1581 | graphemer: 1.4.0 1582 | ignore: 5.3.2 1583 | natural-compare: 1.4.0 1584 | ts-api-utils: 2.0.1(typescript@5.7.3) 1585 | typescript: 5.7.3 1586 | transitivePeerDependencies: 1587 | - supports-color 1588 | 1589 | '@typescript-eslint/parser@8.26.0(eslint@9.21.0)(typescript@5.7.3)': 1590 | dependencies: 1591 | '@typescript-eslint/scope-manager': 8.26.0 1592 | '@typescript-eslint/types': 8.26.0 1593 | '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) 1594 | '@typescript-eslint/visitor-keys': 8.26.0 1595 | debug: 4.4.0 1596 | eslint: 9.21.0 1597 | typescript: 5.7.3 1598 | transitivePeerDependencies: 1599 | - supports-color 1600 | 1601 | '@typescript-eslint/scope-manager@8.26.0': 1602 | dependencies: 1603 | '@typescript-eslint/types': 8.26.0 1604 | '@typescript-eslint/visitor-keys': 8.26.0 1605 | 1606 | '@typescript-eslint/type-utils@8.26.0(eslint@9.21.0)(typescript@5.7.3)': 1607 | dependencies: 1608 | '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) 1609 | '@typescript-eslint/utils': 8.26.0(eslint@9.21.0)(typescript@5.7.3) 1610 | debug: 4.4.0 1611 | eslint: 9.21.0 1612 | ts-api-utils: 2.0.1(typescript@5.7.3) 1613 | typescript: 5.7.3 1614 | transitivePeerDependencies: 1615 | - supports-color 1616 | 1617 | '@typescript-eslint/types@8.26.0': {} 1618 | 1619 | '@typescript-eslint/typescript-estree@8.26.0(typescript@5.7.3)': 1620 | dependencies: 1621 | '@typescript-eslint/types': 8.26.0 1622 | '@typescript-eslint/visitor-keys': 8.26.0 1623 | debug: 4.4.0 1624 | fast-glob: 3.3.3 1625 | is-glob: 4.0.3 1626 | minimatch: 9.0.5 1627 | semver: 7.7.1 1628 | ts-api-utils: 2.0.1(typescript@5.7.3) 1629 | typescript: 5.7.3 1630 | transitivePeerDependencies: 1631 | - supports-color 1632 | 1633 | '@typescript-eslint/utils@8.26.0(eslint@9.21.0)(typescript@5.7.3)': 1634 | dependencies: 1635 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) 1636 | '@typescript-eslint/scope-manager': 8.26.0 1637 | '@typescript-eslint/types': 8.26.0 1638 | '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) 1639 | eslint: 9.21.0 1640 | typescript: 5.7.3 1641 | transitivePeerDependencies: 1642 | - supports-color 1643 | 1644 | '@typescript-eslint/visitor-keys@8.26.0': 1645 | dependencies: 1646 | '@typescript-eslint/types': 8.26.0 1647 | eslint-visitor-keys: 4.2.0 1648 | 1649 | '@vitejs/plugin-react@4.3.4(vite@6.2.0(@types/node@22.13.9))': 1650 | dependencies: 1651 | '@babel/core': 7.26.9 1652 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) 1653 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) 1654 | '@types/babel__core': 7.20.5 1655 | react-refresh: 0.14.2 1656 | vite: 6.2.0(@types/node@22.13.9) 1657 | transitivePeerDependencies: 1658 | - supports-color 1659 | 1660 | acorn-jsx@5.3.2(acorn@8.14.0): 1661 | dependencies: 1662 | acorn: 8.14.0 1663 | 1664 | acorn@8.14.0: {} 1665 | 1666 | ajv@6.12.6: 1667 | dependencies: 1668 | fast-deep-equal: 3.1.3 1669 | fast-json-stable-stringify: 2.1.0 1670 | json-schema-traverse: 0.4.1 1671 | uri-js: 4.4.1 1672 | 1673 | ansi-styles@4.3.0: 1674 | dependencies: 1675 | color-convert: 2.0.1 1676 | 1677 | argparse@2.0.1: {} 1678 | 1679 | balanced-match@1.0.2: {} 1680 | 1681 | brace-expansion@1.1.11: 1682 | dependencies: 1683 | balanced-match: 1.0.2 1684 | concat-map: 0.0.1 1685 | 1686 | brace-expansion@2.0.1: 1687 | dependencies: 1688 | balanced-match: 1.0.2 1689 | 1690 | braces@3.0.3: 1691 | dependencies: 1692 | fill-range: 7.1.1 1693 | 1694 | browserslist@4.24.4: 1695 | dependencies: 1696 | caniuse-lite: 1.0.30001702 1697 | electron-to-chromium: 1.5.112 1698 | node-releases: 2.0.19 1699 | update-browserslist-db: 1.1.3(browserslist@4.24.4) 1700 | 1701 | callsites@3.1.0: {} 1702 | 1703 | camelize@1.0.1: {} 1704 | 1705 | caniuse-lite@1.0.30001702: {} 1706 | 1707 | chalk@4.1.2: 1708 | dependencies: 1709 | ansi-styles: 4.3.0 1710 | supports-color: 7.2.0 1711 | 1712 | color-convert@2.0.1: 1713 | dependencies: 1714 | color-name: 1.1.4 1715 | 1716 | color-name@1.1.4: {} 1717 | 1718 | concat-map@0.0.1: {} 1719 | 1720 | convert-source-map@2.0.0: {} 1721 | 1722 | cross-spawn@7.0.6: 1723 | dependencies: 1724 | path-key: 3.1.1 1725 | shebang-command: 2.0.0 1726 | which: 2.0.2 1727 | 1728 | css-color-keywords@1.0.0: {} 1729 | 1730 | css-to-react-native@3.2.0: 1731 | dependencies: 1732 | camelize: 1.0.1 1733 | css-color-keywords: 1.0.0 1734 | postcss-value-parser: 4.2.0 1735 | 1736 | csstype@3.1.3: {} 1737 | 1738 | debug@4.4.0: 1739 | dependencies: 1740 | ms: 2.1.3 1741 | 1742 | deep-is@0.1.4: {} 1743 | 1744 | electron-to-chromium@1.5.112: {} 1745 | 1746 | esbuild@0.25.0: 1747 | optionalDependencies: 1748 | '@esbuild/aix-ppc64': 0.25.0 1749 | '@esbuild/android-arm': 0.25.0 1750 | '@esbuild/android-arm64': 0.25.0 1751 | '@esbuild/android-x64': 0.25.0 1752 | '@esbuild/darwin-arm64': 0.25.0 1753 | '@esbuild/darwin-x64': 0.25.0 1754 | '@esbuild/freebsd-arm64': 0.25.0 1755 | '@esbuild/freebsd-x64': 0.25.0 1756 | '@esbuild/linux-arm': 0.25.0 1757 | '@esbuild/linux-arm64': 0.25.0 1758 | '@esbuild/linux-ia32': 0.25.0 1759 | '@esbuild/linux-loong64': 0.25.0 1760 | '@esbuild/linux-mips64el': 0.25.0 1761 | '@esbuild/linux-ppc64': 0.25.0 1762 | '@esbuild/linux-riscv64': 0.25.0 1763 | '@esbuild/linux-s390x': 0.25.0 1764 | '@esbuild/linux-x64': 0.25.0 1765 | '@esbuild/netbsd-arm64': 0.25.0 1766 | '@esbuild/netbsd-x64': 0.25.0 1767 | '@esbuild/openbsd-arm64': 0.25.0 1768 | '@esbuild/openbsd-x64': 0.25.0 1769 | '@esbuild/sunos-x64': 0.25.0 1770 | '@esbuild/win32-arm64': 0.25.0 1771 | '@esbuild/win32-ia32': 0.25.0 1772 | '@esbuild/win32-x64': 0.25.0 1773 | 1774 | escalade@3.2.0: {} 1775 | 1776 | escape-string-regexp@4.0.0: {} 1777 | 1778 | eslint-plugin-react-hooks@5.2.0(eslint@9.21.0): 1779 | dependencies: 1780 | eslint: 9.21.0 1781 | 1782 | eslint-plugin-react-refresh@0.4.19(eslint@9.21.0): 1783 | dependencies: 1784 | eslint: 9.21.0 1785 | 1786 | eslint-scope@8.2.0: 1787 | dependencies: 1788 | esrecurse: 4.3.0 1789 | estraverse: 5.3.0 1790 | 1791 | eslint-visitor-keys@3.4.3: {} 1792 | 1793 | eslint-visitor-keys@4.2.0: {} 1794 | 1795 | eslint@9.21.0: 1796 | dependencies: 1797 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) 1798 | '@eslint-community/regexpp': 4.12.1 1799 | '@eslint/config-array': 0.19.2 1800 | '@eslint/core': 0.12.0 1801 | '@eslint/eslintrc': 3.3.0 1802 | '@eslint/js': 9.21.0 1803 | '@eslint/plugin-kit': 0.2.7 1804 | '@humanfs/node': 0.16.6 1805 | '@humanwhocodes/module-importer': 1.0.1 1806 | '@humanwhocodes/retry': 0.4.2 1807 | '@types/estree': 1.0.6 1808 | '@types/json-schema': 7.0.15 1809 | ajv: 6.12.6 1810 | chalk: 4.1.2 1811 | cross-spawn: 7.0.6 1812 | debug: 4.4.0 1813 | escape-string-regexp: 4.0.0 1814 | eslint-scope: 8.2.0 1815 | eslint-visitor-keys: 4.2.0 1816 | espree: 10.3.0 1817 | esquery: 1.6.0 1818 | esutils: 2.0.3 1819 | fast-deep-equal: 3.1.3 1820 | file-entry-cache: 8.0.0 1821 | find-up: 5.0.0 1822 | glob-parent: 6.0.2 1823 | ignore: 5.3.2 1824 | imurmurhash: 0.1.4 1825 | is-glob: 4.0.3 1826 | json-stable-stringify-without-jsonify: 1.0.1 1827 | lodash.merge: 4.6.2 1828 | minimatch: 3.1.2 1829 | natural-compare: 1.4.0 1830 | optionator: 0.9.4 1831 | transitivePeerDependencies: 1832 | - supports-color 1833 | 1834 | espree@10.3.0: 1835 | dependencies: 1836 | acorn: 8.14.0 1837 | acorn-jsx: 5.3.2(acorn@8.14.0) 1838 | eslint-visitor-keys: 4.2.0 1839 | 1840 | esquery@1.6.0: 1841 | dependencies: 1842 | estraverse: 5.3.0 1843 | 1844 | esrecurse@4.3.0: 1845 | dependencies: 1846 | estraverse: 5.3.0 1847 | 1848 | estraverse@5.3.0: {} 1849 | 1850 | esutils@2.0.3: {} 1851 | 1852 | fast-deep-equal@3.1.3: {} 1853 | 1854 | fast-glob@3.3.3: 1855 | dependencies: 1856 | '@nodelib/fs.stat': 2.0.5 1857 | '@nodelib/fs.walk': 1.2.8 1858 | glob-parent: 5.1.2 1859 | merge2: 1.4.1 1860 | micromatch: 4.0.8 1861 | 1862 | fast-json-stable-stringify@2.1.0: {} 1863 | 1864 | fast-levenshtein@2.0.6: {} 1865 | 1866 | fastq@1.19.1: 1867 | dependencies: 1868 | reusify: 1.1.0 1869 | 1870 | file-entry-cache@8.0.0: 1871 | dependencies: 1872 | flat-cache: 4.0.1 1873 | 1874 | fill-range@7.1.1: 1875 | dependencies: 1876 | to-regex-range: 5.0.1 1877 | 1878 | find-up@5.0.0: 1879 | dependencies: 1880 | locate-path: 6.0.0 1881 | path-exists: 4.0.0 1882 | 1883 | flat-cache@4.0.1: 1884 | dependencies: 1885 | flatted: 3.3.3 1886 | keyv: 4.5.4 1887 | 1888 | flatted@3.3.3: {} 1889 | 1890 | fsevents@2.3.3: 1891 | optional: true 1892 | 1893 | gensync@1.0.0-beta.2: {} 1894 | 1895 | glob-parent@5.1.2: 1896 | dependencies: 1897 | is-glob: 4.0.3 1898 | 1899 | glob-parent@6.0.2: 1900 | dependencies: 1901 | is-glob: 4.0.3 1902 | 1903 | globals@11.12.0: {} 1904 | 1905 | globals@14.0.0: {} 1906 | 1907 | globals@15.15.0: {} 1908 | 1909 | graphemer@1.4.0: {} 1910 | 1911 | has-flag@4.0.0: {} 1912 | 1913 | hoist-non-react-statics@3.3.2: 1914 | dependencies: 1915 | react-is: 16.13.1 1916 | 1917 | ignore@5.3.2: {} 1918 | 1919 | import-fresh@3.3.1: 1920 | dependencies: 1921 | parent-module: 1.0.1 1922 | resolve-from: 4.0.0 1923 | 1924 | imurmurhash@0.1.4: {} 1925 | 1926 | is-extglob@2.1.1: {} 1927 | 1928 | is-glob@4.0.3: 1929 | dependencies: 1930 | is-extglob: 2.1.1 1931 | 1932 | is-number@7.0.0: {} 1933 | 1934 | isexe@2.0.0: {} 1935 | 1936 | js-tokens@4.0.0: {} 1937 | 1938 | js-yaml@4.1.0: 1939 | dependencies: 1940 | argparse: 2.0.1 1941 | 1942 | jsesc@3.1.0: {} 1943 | 1944 | json-buffer@3.0.1: {} 1945 | 1946 | json-schema-traverse@0.4.1: {} 1947 | 1948 | json-stable-stringify-without-jsonify@1.0.1: {} 1949 | 1950 | json5@2.2.3: {} 1951 | 1952 | keyv@4.5.4: 1953 | dependencies: 1954 | json-buffer: 3.0.1 1955 | 1956 | levn@0.4.1: 1957 | dependencies: 1958 | prelude-ls: 1.2.1 1959 | type-check: 0.4.0 1960 | 1961 | locate-path@6.0.0: 1962 | dependencies: 1963 | p-locate: 5.0.0 1964 | 1965 | lodash.merge@4.6.2: {} 1966 | 1967 | lru-cache@5.1.1: 1968 | dependencies: 1969 | yallist: 3.1.1 1970 | 1971 | lucide-react@0.477.0(react@19.0.0): 1972 | dependencies: 1973 | react: 19.0.0 1974 | 1975 | merge2@1.4.1: {} 1976 | 1977 | micromatch@4.0.8: 1978 | dependencies: 1979 | braces: 3.0.3 1980 | picomatch: 2.3.1 1981 | 1982 | minimatch@3.1.2: 1983 | dependencies: 1984 | brace-expansion: 1.1.11 1985 | 1986 | minimatch@9.0.5: 1987 | dependencies: 1988 | brace-expansion: 2.0.1 1989 | 1990 | ms@2.1.3: {} 1991 | 1992 | nanoid@3.3.8: {} 1993 | 1994 | natural-compare@1.4.0: {} 1995 | 1996 | node-releases@2.0.19: {} 1997 | 1998 | optionator@0.9.4: 1999 | dependencies: 2000 | deep-is: 0.1.4 2001 | fast-levenshtein: 2.0.6 2002 | levn: 0.4.1 2003 | prelude-ls: 1.2.1 2004 | type-check: 0.4.0 2005 | word-wrap: 1.2.5 2006 | 2007 | p-limit@3.1.0: 2008 | dependencies: 2009 | yocto-queue: 0.1.0 2010 | 2011 | p-locate@5.0.0: 2012 | dependencies: 2013 | p-limit: 3.1.0 2014 | 2015 | parent-module@1.0.1: 2016 | dependencies: 2017 | callsites: 3.1.0 2018 | 2019 | path-exists@4.0.0: {} 2020 | 2021 | path-key@3.1.1: {} 2022 | 2023 | picocolors@1.1.1: {} 2024 | 2025 | picomatch@2.3.1: {} 2026 | 2027 | postcss-value-parser@4.2.0: {} 2028 | 2029 | postcss@8.4.49: 2030 | dependencies: 2031 | nanoid: 3.3.8 2032 | picocolors: 1.1.1 2033 | source-map-js: 1.2.1 2034 | 2035 | postcss@8.5.3: 2036 | dependencies: 2037 | nanoid: 3.3.8 2038 | picocolors: 1.1.1 2039 | source-map-js: 1.2.1 2040 | 2041 | prelude-ls@1.2.1: {} 2042 | 2043 | punycode@2.3.1: {} 2044 | 2045 | queue-microtask@1.2.3: {} 2046 | 2047 | react-dom@19.0.0(react@19.0.0): 2048 | dependencies: 2049 | react: 19.0.0 2050 | scheduler: 0.25.0 2051 | 2052 | react-is@16.13.1: {} 2053 | 2054 | react-refresh@0.14.2: {} 2055 | 2056 | react@19.0.0: {} 2057 | 2058 | resolve-from@4.0.0: {} 2059 | 2060 | reusify@1.1.0: {} 2061 | 2062 | rollup@4.34.9: 2063 | dependencies: 2064 | '@types/estree': 1.0.6 2065 | optionalDependencies: 2066 | '@rollup/rollup-android-arm-eabi': 4.34.9 2067 | '@rollup/rollup-android-arm64': 4.34.9 2068 | '@rollup/rollup-darwin-arm64': 4.34.9 2069 | '@rollup/rollup-darwin-x64': 4.34.9 2070 | '@rollup/rollup-freebsd-arm64': 4.34.9 2071 | '@rollup/rollup-freebsd-x64': 4.34.9 2072 | '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 2073 | '@rollup/rollup-linux-arm-musleabihf': 4.34.9 2074 | '@rollup/rollup-linux-arm64-gnu': 4.34.9 2075 | '@rollup/rollup-linux-arm64-musl': 4.34.9 2076 | '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 2077 | '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 2078 | '@rollup/rollup-linux-riscv64-gnu': 4.34.9 2079 | '@rollup/rollup-linux-s390x-gnu': 4.34.9 2080 | '@rollup/rollup-linux-x64-gnu': 4.34.9 2081 | '@rollup/rollup-linux-x64-musl': 4.34.9 2082 | '@rollup/rollup-win32-arm64-msvc': 4.34.9 2083 | '@rollup/rollup-win32-ia32-msvc': 4.34.9 2084 | '@rollup/rollup-win32-x64-msvc': 4.34.9 2085 | fsevents: 2.3.3 2086 | 2087 | run-parallel@1.2.0: 2088 | dependencies: 2089 | queue-microtask: 1.2.3 2090 | 2091 | scheduler@0.25.0: {} 2092 | 2093 | semver@6.3.1: {} 2094 | 2095 | semver@7.7.1: {} 2096 | 2097 | shallowequal@1.1.0: {} 2098 | 2099 | shebang-command@2.0.0: 2100 | dependencies: 2101 | shebang-regex: 3.0.0 2102 | 2103 | shebang-regex@3.0.0: {} 2104 | 2105 | source-map-js@1.2.1: {} 2106 | 2107 | strip-json-comments@3.1.1: {} 2108 | 2109 | styled-components@6.1.15(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 2110 | dependencies: 2111 | '@emotion/is-prop-valid': 1.2.2 2112 | '@emotion/unitless': 0.8.1 2113 | '@types/stylis': 4.2.5 2114 | css-to-react-native: 3.2.0 2115 | csstype: 3.1.3 2116 | postcss: 8.4.49 2117 | react: 19.0.0 2118 | react-dom: 19.0.0(react@19.0.0) 2119 | shallowequal: 1.1.0 2120 | stylis: 4.3.2 2121 | tslib: 2.6.2 2122 | 2123 | stylis@4.3.2: {} 2124 | 2125 | supports-color@7.2.0: 2126 | dependencies: 2127 | has-flag: 4.0.0 2128 | 2129 | to-regex-range@5.0.1: 2130 | dependencies: 2131 | is-number: 7.0.0 2132 | 2133 | ts-api-utils@2.0.1(typescript@5.7.3): 2134 | dependencies: 2135 | typescript: 5.7.3 2136 | 2137 | tslib@2.6.2: {} 2138 | 2139 | type-check@0.4.0: 2140 | dependencies: 2141 | prelude-ls: 1.2.1 2142 | 2143 | typescript-eslint@8.26.0(eslint@9.21.0)(typescript@5.7.3): 2144 | dependencies: 2145 | '@typescript-eslint/eslint-plugin': 8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3) 2146 | '@typescript-eslint/parser': 8.26.0(eslint@9.21.0)(typescript@5.7.3) 2147 | '@typescript-eslint/utils': 8.26.0(eslint@9.21.0)(typescript@5.7.3) 2148 | eslint: 9.21.0 2149 | typescript: 5.7.3 2150 | transitivePeerDependencies: 2151 | - supports-color 2152 | 2153 | typescript@5.7.3: {} 2154 | 2155 | undici-types@6.20.0: 2156 | optional: true 2157 | 2158 | update-browserslist-db@1.1.3(browserslist@4.24.4): 2159 | dependencies: 2160 | browserslist: 4.24.4 2161 | escalade: 3.2.0 2162 | picocolors: 1.1.1 2163 | 2164 | uri-js@4.4.1: 2165 | dependencies: 2166 | punycode: 2.3.1 2167 | 2168 | uuid@11.1.0: {} 2169 | 2170 | vite@6.2.0(@types/node@22.13.9): 2171 | dependencies: 2172 | esbuild: 0.25.0 2173 | postcss: 8.5.3 2174 | rollup: 4.34.9 2175 | optionalDependencies: 2176 | '@types/node': 22.13.9 2177 | fsevents: 2.3.3 2178 | 2179 | which@2.0.2: 2180 | dependencies: 2181 | isexe: 2.0.0 2182 | 2183 | word-wrap@1.2.5: {} 2184 | 2185 | yallist@3.1.1: {} 2186 | 2187 | yocto-queue@0.1.0: {} 2188 | 2189 | zustand@5.0.3(@types/react@19.0.10)(react@19.0.0): 2190 | optionalDependencies: 2191 | '@types/react': 19.0.10 2192 | react: 19.0.0 2193 | --------------------------------------------------------------------------------