├── 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 | {label}
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 | Themes
19 |
20 | {themes.map((t) => (
21 | setTheme(t)}
25 | >
26 | {theme === t ? : null}
27 | {t}
28 |
29 | ))}
30 |
31 |
32 |
33 |
34 | Font size
35 |
36 | {fontSizes.map((f) => (
37 | setFontSize(f)}>
38 | {fontSize === f ? : null}
39 | {f}
40 |
41 | ))}
42 |
43 |
44 |
45 |
46 | Font style
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 | //
H2
82 | //
Strong
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 | Formatting controls ⌘E
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 |
--------------------------------------------------------------------------------