├── .gitignore
├── README.md
├── eslint.config.js
├── index.html
├── package.json
├── pnpm-lock.yaml
├── public
├── dev.png
└── vite.svg
├── src
├── App.tsx
├── components
│ └── button
│ │ └── index.tsx
├── configs
│ └── portfolio.json
├── index.css
├── layouts
│ ├── header.tsx
│ ├── index.tsx
│ └── wrapper.tsx
├── main.tsx
├── pages
│ └── homepage
│ │ ├── Bio.tsx
│ │ ├── Contacts.tsx
│ │ ├── Education.tsx
│ │ ├── Experience.tsx
│ │ ├── Projects.tsx
│ │ ├── Skills.tsx
│ │ └── index.tsx
└── vite-env.d.ts
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | *.log
3 |
4 | # Output directory
5 | dist
6 |
7 | # @vitjs/vit temporary directory
8 | .vit
9 |
10 | # Generated by rollup-plugin-visualizer
11 | stats.html
12 |
13 | .eslintcache
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # React Vite Portfolio Template
4 |
5 | A lightweight, modern, and customizable portfolio template built with [React](https://reactjs.org/) and [Vite](https://vitejs.dev/). This template is designed to help developers quickly showcase their projects, skills, and personal information in a clean and responsive layout. It uses `pnpm` for fast and efficient package management and includes a `portfolio.json` file to easily manage your portfolio data.
6 |
7 | ## Features
8 | - Built with React and Vite for fast development and optimal performance
9 | - Fully responsive design
10 | - Centralized portfolio data management via `portfolio.json`
11 | - Easy to customize and extend
12 | - Uses `pnpm` for lightweight and efficient dependency management
13 |
14 | ## Prerequisites
15 | Before you begin, ensure you have the following installed:
16 | - [Node.js](https://nodejs.org/) (v16 or higher recommended)
17 | - [pnpm](https://pnpm.io/) (install globally with `npm install -g pnpm`)
18 |
19 | ## Getting Started
20 |
21 | ### Installation
22 | 1. Clone the repository:
23 | ```bash
24 | git clone https://github.com/your-username/react-vite-portfolio-template.git
25 | cd react-vite-portfolio-template
26 | ```
27 | 2. Install dependencies using `pnpm`:
28 | ```bash
29 | pnpm install
30 | ```
31 | 3. Customize the `portfolio.json` file located in the `/src/configs`:
32 | ```json
33 | {
34 | "name": "Your Name",
35 | "title": "Your Job Title",
36 | "bio": "A short bio about yourself",
37 | "contacts": {
38 | "github": "https://github.com/your-username",
39 | "twitter": "https://twitter.com/your-username"
40 | },
41 | "education": {
42 | "logo": "University Logo",
43 | "degree": "Your Degree",
44 | "university": "Your University",
45 | "location": "Location",
46 | "graduation": "2025/01/01 00:00:00",
47 | "courseWork": [
48 | "Algorithms"
49 | ],
50 | "project": "Your senior project"
51 | },
52 | "meetingLink": "Calendly link",
53 | "projects": [
54 | {
55 | "name": "Project Name",
56 | "bio": "A short bio about the project",
57 | "logo": "Project Logo",
58 | "description": "The detailed descripion about the project",
59 | "skills": ["Used skills in an array"]
60 | }
61 | ],
62 | "skills": ["React", "Vite", "JavaScript", "CSS"]
63 | }
64 | ```
65 | 4. Build
66 | ```bash
67 | pnpm build
68 | ```
69 | 5. Run
70 | ```bash
71 | pnpm dev
72 | ```
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | React + Vite Portfolio
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "portfolio",
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 | "@tailwindcss/vite": "^4.0.8",
14 | "classnames": "^2.5.1",
15 | "dayjs": "^1.11.13",
16 | "react": "^19.0.0",
17 | "react-dom": "^19.0.0",
18 | "react-icons": "^5.5.0"
19 | },
20 | "devDependencies": {
21 | "@eslint/js": "^9.19.0",
22 | "@types/react": "^19.0.8",
23 | "@types/react-dom": "^19.0.3",
24 | "@vitejs/plugin-react": "^4.3.4",
25 | "autoprefixer": "^10.4.20",
26 | "eslint": "^9.19.0",
27 | "eslint-plugin-react-hooks": "^5.0.0",
28 | "eslint-plugin-react-refresh": "^0.4.18",
29 | "globals": "^15.14.0",
30 | "postcss": "^8.5.3",
31 | "tailwindcss": "^4.0.8",
32 | "typescript": "~5.7.2",
33 | "typescript-eslint": "^8.22.0",
34 | "vite": "^6.1.0"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@tailwindcss/vite':
12 | specifier: ^4.0.8
13 | version: 4.0.8(vite@6.1.1(jiti@2.4.2)(lightningcss@1.29.1))
14 | classnames:
15 | specifier: ^2.5.1
16 | version: 2.5.1
17 | dayjs:
18 | specifier: ^1.11.13
19 | version: 1.11.13
20 | react:
21 | specifier: ^19.0.0
22 | version: 19.0.0
23 | react-dom:
24 | specifier: ^19.0.0
25 | version: 19.0.0(react@19.0.0)
26 | react-icons:
27 | specifier: ^5.5.0
28 | version: 5.5.0(react@19.0.0)
29 | devDependencies:
30 | '@eslint/js':
31 | specifier: ^9.19.0
32 | version: 9.21.0
33 | '@types/react':
34 | specifier: ^19.0.8
35 | version: 19.0.10
36 | '@types/react-dom':
37 | specifier: ^19.0.3
38 | version: 19.0.4(@types/react@19.0.10)
39 | '@vitejs/plugin-react':
40 | specifier: ^4.3.4
41 | version: 4.3.4(vite@6.1.1(jiti@2.4.2)(lightningcss@1.29.1))
42 | autoprefixer:
43 | specifier: ^10.4.20
44 | version: 10.4.20(postcss@8.5.3)
45 | eslint:
46 | specifier: ^9.19.0
47 | version: 9.21.0(jiti@2.4.2)
48 | eslint-plugin-react-hooks:
49 | specifier: ^5.0.0
50 | version: 5.1.0(eslint@9.21.0(jiti@2.4.2))
51 | eslint-plugin-react-refresh:
52 | specifier: ^0.4.18
53 | version: 0.4.19(eslint@9.21.0(jiti@2.4.2))
54 | globals:
55 | specifier: ^15.14.0
56 | version: 15.15.0
57 | postcss:
58 | specifier: ^8.5.3
59 | version: 8.5.3
60 | tailwindcss:
61 | specifier: ^4.0.8
62 | version: 4.0.8
63 | typescript:
64 | specifier: ~5.7.2
65 | version: 5.7.3
66 | typescript-eslint:
67 | specifier: ^8.22.0
68 | version: 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
69 | vite:
70 | specifier: ^6.1.0
71 | version: 6.1.1(jiti@2.4.2)(lightningcss@1.29.1)
72 |
73 | packages:
74 |
75 | '@ampproject/remapping@2.3.0':
76 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
77 | engines: {node: '>=6.0.0'}
78 |
79 | '@babel/code-frame@7.26.2':
80 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
81 | engines: {node: '>=6.9.0'}
82 |
83 | '@babel/compat-data@7.26.8':
84 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
85 | engines: {node: '>=6.9.0'}
86 |
87 | '@babel/core@7.26.9':
88 | resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==}
89 | engines: {node: '>=6.9.0'}
90 |
91 | '@babel/generator@7.26.9':
92 | resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==}
93 | engines: {node: '>=6.9.0'}
94 |
95 | '@babel/helper-compilation-targets@7.26.5':
96 | resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
97 | engines: {node: '>=6.9.0'}
98 |
99 | '@babel/helper-module-imports@7.25.9':
100 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
101 | engines: {node: '>=6.9.0'}
102 |
103 | '@babel/helper-module-transforms@7.26.0':
104 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
105 | engines: {node: '>=6.9.0'}
106 | peerDependencies:
107 | '@babel/core': ^7.0.0
108 |
109 | '@babel/helper-plugin-utils@7.26.5':
110 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
111 | engines: {node: '>=6.9.0'}
112 |
113 | '@babel/helper-string-parser@7.25.9':
114 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
115 | engines: {node: '>=6.9.0'}
116 |
117 | '@babel/helper-validator-identifier@7.25.9':
118 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
119 | engines: {node: '>=6.9.0'}
120 |
121 | '@babel/helper-validator-option@7.25.9':
122 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
123 | engines: {node: '>=6.9.0'}
124 |
125 | '@babel/helpers@7.26.9':
126 | resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==}
127 | engines: {node: '>=6.9.0'}
128 |
129 | '@babel/parser@7.26.9':
130 | resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
131 | engines: {node: '>=6.0.0'}
132 | hasBin: true
133 |
134 | '@babel/plugin-transform-react-jsx-self@7.25.9':
135 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==}
136 | engines: {node: '>=6.9.0'}
137 | peerDependencies:
138 | '@babel/core': ^7.0.0-0
139 |
140 | '@babel/plugin-transform-react-jsx-source@7.25.9':
141 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==}
142 | engines: {node: '>=6.9.0'}
143 | peerDependencies:
144 | '@babel/core': ^7.0.0-0
145 |
146 | '@babel/template@7.26.9':
147 | resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
148 | engines: {node: '>=6.9.0'}
149 |
150 | '@babel/traverse@7.26.9':
151 | resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==}
152 | engines: {node: '>=6.9.0'}
153 |
154 | '@babel/types@7.26.9':
155 | resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
156 | engines: {node: '>=6.9.0'}
157 |
158 | '@esbuild/aix-ppc64@0.24.2':
159 | resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
160 | engines: {node: '>=18'}
161 | cpu: [ppc64]
162 | os: [aix]
163 |
164 | '@esbuild/android-arm64@0.24.2':
165 | resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
166 | engines: {node: '>=18'}
167 | cpu: [arm64]
168 | os: [android]
169 |
170 | '@esbuild/android-arm@0.24.2':
171 | resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
172 | engines: {node: '>=18'}
173 | cpu: [arm]
174 | os: [android]
175 |
176 | '@esbuild/android-x64@0.24.2':
177 | resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
178 | engines: {node: '>=18'}
179 | cpu: [x64]
180 | os: [android]
181 |
182 | '@esbuild/darwin-arm64@0.24.2':
183 | resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
184 | engines: {node: '>=18'}
185 | cpu: [arm64]
186 | os: [darwin]
187 |
188 | '@esbuild/darwin-x64@0.24.2':
189 | resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
190 | engines: {node: '>=18'}
191 | cpu: [x64]
192 | os: [darwin]
193 |
194 | '@esbuild/freebsd-arm64@0.24.2':
195 | resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
196 | engines: {node: '>=18'}
197 | cpu: [arm64]
198 | os: [freebsd]
199 |
200 | '@esbuild/freebsd-x64@0.24.2':
201 | resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
202 | engines: {node: '>=18'}
203 | cpu: [x64]
204 | os: [freebsd]
205 |
206 | '@esbuild/linux-arm64@0.24.2':
207 | resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
208 | engines: {node: '>=18'}
209 | cpu: [arm64]
210 | os: [linux]
211 |
212 | '@esbuild/linux-arm@0.24.2':
213 | resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
214 | engines: {node: '>=18'}
215 | cpu: [arm]
216 | os: [linux]
217 |
218 | '@esbuild/linux-ia32@0.24.2':
219 | resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
220 | engines: {node: '>=18'}
221 | cpu: [ia32]
222 | os: [linux]
223 |
224 | '@esbuild/linux-loong64@0.24.2':
225 | resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
226 | engines: {node: '>=18'}
227 | cpu: [loong64]
228 | os: [linux]
229 |
230 | '@esbuild/linux-mips64el@0.24.2':
231 | resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
232 | engines: {node: '>=18'}
233 | cpu: [mips64el]
234 | os: [linux]
235 |
236 | '@esbuild/linux-ppc64@0.24.2':
237 | resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
238 | engines: {node: '>=18'}
239 | cpu: [ppc64]
240 | os: [linux]
241 |
242 | '@esbuild/linux-riscv64@0.24.2':
243 | resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
244 | engines: {node: '>=18'}
245 | cpu: [riscv64]
246 | os: [linux]
247 |
248 | '@esbuild/linux-s390x@0.24.2':
249 | resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
250 | engines: {node: '>=18'}
251 | cpu: [s390x]
252 | os: [linux]
253 |
254 | '@esbuild/linux-x64@0.24.2':
255 | resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
256 | engines: {node: '>=18'}
257 | cpu: [x64]
258 | os: [linux]
259 |
260 | '@esbuild/netbsd-arm64@0.24.2':
261 | resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
262 | engines: {node: '>=18'}
263 | cpu: [arm64]
264 | os: [netbsd]
265 |
266 | '@esbuild/netbsd-x64@0.24.2':
267 | resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
268 | engines: {node: '>=18'}
269 | cpu: [x64]
270 | os: [netbsd]
271 |
272 | '@esbuild/openbsd-arm64@0.24.2':
273 | resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
274 | engines: {node: '>=18'}
275 | cpu: [arm64]
276 | os: [openbsd]
277 |
278 | '@esbuild/openbsd-x64@0.24.2':
279 | resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
280 | engines: {node: '>=18'}
281 | cpu: [x64]
282 | os: [openbsd]
283 |
284 | '@esbuild/sunos-x64@0.24.2':
285 | resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
286 | engines: {node: '>=18'}
287 | cpu: [x64]
288 | os: [sunos]
289 |
290 | '@esbuild/win32-arm64@0.24.2':
291 | resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
292 | engines: {node: '>=18'}
293 | cpu: [arm64]
294 | os: [win32]
295 |
296 | '@esbuild/win32-ia32@0.24.2':
297 | resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
298 | engines: {node: '>=18'}
299 | cpu: [ia32]
300 | os: [win32]
301 |
302 | '@esbuild/win32-x64@0.24.2':
303 | resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
304 | engines: {node: '>=18'}
305 | cpu: [x64]
306 | os: [win32]
307 |
308 | '@eslint-community/eslint-utils@4.4.1':
309 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
310 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
311 | peerDependencies:
312 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
313 |
314 | '@eslint-community/regexpp@4.12.1':
315 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
316 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
317 |
318 | '@eslint/config-array@0.19.2':
319 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
320 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
321 |
322 | '@eslint/core@0.12.0':
323 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
324 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
325 |
326 | '@eslint/eslintrc@3.3.0':
327 | resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
328 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
329 |
330 | '@eslint/js@9.21.0':
331 | resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==}
332 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
333 |
334 | '@eslint/object-schema@2.1.6':
335 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
336 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
337 |
338 | '@eslint/plugin-kit@0.2.7':
339 | resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
340 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
341 |
342 | '@humanfs/core@0.19.1':
343 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
344 | engines: {node: '>=18.18.0'}
345 |
346 | '@humanfs/node@0.16.6':
347 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
348 | engines: {node: '>=18.18.0'}
349 |
350 | '@humanwhocodes/module-importer@1.0.1':
351 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
352 | engines: {node: '>=12.22'}
353 |
354 | '@humanwhocodes/retry@0.3.1':
355 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
356 | engines: {node: '>=18.18'}
357 |
358 | '@humanwhocodes/retry@0.4.2':
359 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
360 | engines: {node: '>=18.18'}
361 |
362 | '@jridgewell/gen-mapping@0.3.8':
363 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
364 | engines: {node: '>=6.0.0'}
365 |
366 | '@jridgewell/resolve-uri@3.1.2':
367 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
368 | engines: {node: '>=6.0.0'}
369 |
370 | '@jridgewell/set-array@1.2.1':
371 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
372 | engines: {node: '>=6.0.0'}
373 |
374 | '@jridgewell/sourcemap-codec@1.5.0':
375 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
376 |
377 | '@jridgewell/trace-mapping@0.3.25':
378 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
379 |
380 | '@nodelib/fs.scandir@2.1.5':
381 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
382 | engines: {node: '>= 8'}
383 |
384 | '@nodelib/fs.stat@2.0.5':
385 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
386 | engines: {node: '>= 8'}
387 |
388 | '@nodelib/fs.walk@1.2.8':
389 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
390 | engines: {node: '>= 8'}
391 |
392 | '@rollup/rollup-android-arm-eabi@4.34.8':
393 | resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
394 | cpu: [arm]
395 | os: [android]
396 |
397 | '@rollup/rollup-android-arm64@4.34.8':
398 | resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
399 | cpu: [arm64]
400 | os: [android]
401 |
402 | '@rollup/rollup-darwin-arm64@4.34.8':
403 | resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
404 | cpu: [arm64]
405 | os: [darwin]
406 |
407 | '@rollup/rollup-darwin-x64@4.34.8':
408 | resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
409 | cpu: [x64]
410 | os: [darwin]
411 |
412 | '@rollup/rollup-freebsd-arm64@4.34.8':
413 | resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
414 | cpu: [arm64]
415 | os: [freebsd]
416 |
417 | '@rollup/rollup-freebsd-x64@4.34.8':
418 | resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
419 | cpu: [x64]
420 | os: [freebsd]
421 |
422 | '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
423 | resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
424 | cpu: [arm]
425 | os: [linux]
426 |
427 | '@rollup/rollup-linux-arm-musleabihf@4.34.8':
428 | resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
429 | cpu: [arm]
430 | os: [linux]
431 |
432 | '@rollup/rollup-linux-arm64-gnu@4.34.8':
433 | resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
434 | cpu: [arm64]
435 | os: [linux]
436 |
437 | '@rollup/rollup-linux-arm64-musl@4.34.8':
438 | resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
439 | cpu: [arm64]
440 | os: [linux]
441 |
442 | '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
443 | resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
444 | cpu: [loong64]
445 | os: [linux]
446 |
447 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
448 | resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
449 | cpu: [ppc64]
450 | os: [linux]
451 |
452 | '@rollup/rollup-linux-riscv64-gnu@4.34.8':
453 | resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
454 | cpu: [riscv64]
455 | os: [linux]
456 |
457 | '@rollup/rollup-linux-s390x-gnu@4.34.8':
458 | resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
459 | cpu: [s390x]
460 | os: [linux]
461 |
462 | '@rollup/rollup-linux-x64-gnu@4.34.8':
463 | resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
464 | cpu: [x64]
465 | os: [linux]
466 |
467 | '@rollup/rollup-linux-x64-musl@4.34.8':
468 | resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
469 | cpu: [x64]
470 | os: [linux]
471 |
472 | '@rollup/rollup-win32-arm64-msvc@4.34.8':
473 | resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
474 | cpu: [arm64]
475 | os: [win32]
476 |
477 | '@rollup/rollup-win32-ia32-msvc@4.34.8':
478 | resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
479 | cpu: [ia32]
480 | os: [win32]
481 |
482 | '@rollup/rollup-win32-x64-msvc@4.34.8':
483 | resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
484 | cpu: [x64]
485 | os: [win32]
486 |
487 | '@tailwindcss/node@4.0.8':
488 | resolution: {integrity: sha512-FKArQpbrbwv08TNT0k7ejYXpF+R8knZFAatNc0acOxbgeqLzwb86r+P3LGOjIeI3Idqe9CVkZrh4GlsJLJKkkw==}
489 |
490 | '@tailwindcss/oxide-android-arm64@4.0.8':
491 | resolution: {integrity: sha512-We7K79+Sm4mwJHk26Yzu/GAj7C7myemm7PeXvpgMxyxO70SSFSL3uCcqFbz9JA5M5UPkrl7N9fkBe/Y0iazqpA==}
492 | engines: {node: '>= 10'}
493 | cpu: [arm64]
494 | os: [android]
495 |
496 | '@tailwindcss/oxide-darwin-arm64@4.0.8':
497 | resolution: {integrity: sha512-Lv9Isi2EwkCTG1sRHNDi0uRNN1UGFdEThUAGFrydRmQZnraGLMjN8gahzg2FFnOizDl7LB2TykLUuiw833DSNg==}
498 | engines: {node: '>= 10'}
499 | cpu: [arm64]
500 | os: [darwin]
501 |
502 | '@tailwindcss/oxide-darwin-x64@4.0.8':
503 | resolution: {integrity: sha512-fWfywfYIlSWtKoqWTjukTHLWV3ARaBRjXCC2Eo0l6KVpaqGY4c2y8snUjp1xpxUtpqwMvCvFWFaleMoz1Vhzlw==}
504 | engines: {node: '>= 10'}
505 | cpu: [x64]
506 | os: [darwin]
507 |
508 | '@tailwindcss/oxide-freebsd-x64@4.0.8':
509 | resolution: {integrity: sha512-SO+dyvjJV9G94bnmq2288Ke0BIdvrbSbvtPLaQdqjqHR83v5L2fWADyFO+1oecHo9Owsk8MxcXh1agGVPIKIqw==}
510 | engines: {node: '>= 10'}
511 | cpu: [x64]
512 | os: [freebsd]
513 |
514 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.8':
515 | resolution: {integrity: sha512-ZSHggWiEblQNV69V0qUK5vuAtHP+I+S2eGrKGJ5lPgwgJeAd6GjLsVBN+Mqn2SPVfYM3BOpS9jX/zVg9RWQVDQ==}
516 | engines: {node: '>= 10'}
517 | cpu: [arm]
518 | os: [linux]
519 |
520 | '@tailwindcss/oxide-linux-arm64-gnu@4.0.8':
521 | resolution: {integrity: sha512-xWpr6M0OZLDNsr7+bQz+3X7zcnDJZJ1N9gtBWCtfhkEtDjjxYEp+Lr5L5nc/yXlL4MyCHnn0uonGVXy3fhxaVA==}
522 | engines: {node: '>= 10'}
523 | cpu: [arm64]
524 | os: [linux]
525 |
526 | '@tailwindcss/oxide-linux-arm64-musl@4.0.8':
527 | resolution: {integrity: sha512-5tz2IL7LN58ssGEq7h/staD7pu/izF/KeMWdlJ86WDe2Ah46LF3ET6ZGKTr5eZMrnEA0M9cVFuSPprKRHNgjeg==}
528 | engines: {node: '>= 10'}
529 | cpu: [arm64]
530 | os: [linux]
531 |
532 | '@tailwindcss/oxide-linux-x64-gnu@4.0.8':
533 | resolution: {integrity: sha512-KSzMkhyrxAQyY2o194NKVKU9j/c+NFSoMvnHWFaNHKi3P1lb+Vq1UC19tLHrmxSkKapcMMu69D7+G1+FVGNDXQ==}
534 | engines: {node: '>= 10'}
535 | cpu: [x64]
536 | os: [linux]
537 |
538 | '@tailwindcss/oxide-linux-x64-musl@4.0.8':
539 | resolution: {integrity: sha512-yFYKG5UtHTRimjtqxUWXBgI4Tc6NJe3USjRIVdlTczpLRxq/SFwgzGl5JbatCxgSRDPBFwRrNPxq+ukfQFGdrw==}
540 | engines: {node: '>= 10'}
541 | cpu: [x64]
542 | os: [linux]
543 |
544 | '@tailwindcss/oxide-win32-arm64-msvc@4.0.8':
545 | resolution: {integrity: sha512-tndGujmCSba85cRCnQzXgpA2jx5gXimyspsUYae5jlPyLRG0RjXbDshFKOheVXU4TLflo7FSG8EHCBJ0EHTKdQ==}
546 | engines: {node: '>= 10'}
547 | cpu: [arm64]
548 | os: [win32]
549 |
550 | '@tailwindcss/oxide-win32-x64-msvc@4.0.8':
551 | resolution: {integrity: sha512-T77jroAc0p4EHVVgTUiNeFn6Nj3jtD3IeNId2X+0k+N1XxfNipy81BEkYErpKLiOkNhpNFjPee8/ZVas29b2OQ==}
552 | engines: {node: '>= 10'}
553 | cpu: [x64]
554 | os: [win32]
555 |
556 | '@tailwindcss/oxide@4.0.8':
557 | resolution: {integrity: sha512-KfMcuAu/Iw+DcV1e8twrFyr2yN8/ZDC/odIGta4wuuJOGkrkHZbvJvRNIbQNhGh7erZTYV6Ie0IeD6WC9Y8Hcw==}
558 | engines: {node: '>= 10'}
559 |
560 | '@tailwindcss/vite@4.0.8':
561 | resolution: {integrity: sha512-+SAq44yLzYlzyrb7QTcFCdU8Xa7FOA0jp+Xby7fPMUie+MY9HhJysM7Vp+vL8qIp8ceQJfLD+FjgJuJ4lL6nyg==}
562 | peerDependencies:
563 | vite: ^5.2.0 || ^6
564 |
565 | '@types/babel__core@7.20.5':
566 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
567 |
568 | '@types/babel__generator@7.6.8':
569 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
570 |
571 | '@types/babel__template@7.4.4':
572 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
573 |
574 | '@types/babel__traverse@7.20.6':
575 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
576 |
577 | '@types/estree@1.0.6':
578 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
579 |
580 | '@types/json-schema@7.0.15':
581 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
582 |
583 | '@types/react-dom@19.0.4':
584 | resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==}
585 | peerDependencies:
586 | '@types/react': ^19.0.0
587 |
588 | '@types/react@19.0.10':
589 | resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==}
590 |
591 | '@typescript-eslint/eslint-plugin@8.24.1':
592 | resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==}
593 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
594 | peerDependencies:
595 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
596 | eslint: ^8.57.0 || ^9.0.0
597 | typescript: '>=4.8.4 <5.8.0'
598 |
599 | '@typescript-eslint/parser@8.24.1':
600 | resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==}
601 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
602 | peerDependencies:
603 | eslint: ^8.57.0 || ^9.0.0
604 | typescript: '>=4.8.4 <5.8.0'
605 |
606 | '@typescript-eslint/scope-manager@8.24.1':
607 | resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==}
608 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
609 |
610 | '@typescript-eslint/type-utils@8.24.1':
611 | resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==}
612 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
613 | peerDependencies:
614 | eslint: ^8.57.0 || ^9.0.0
615 | typescript: '>=4.8.4 <5.8.0'
616 |
617 | '@typescript-eslint/types@8.24.1':
618 | resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==}
619 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
620 |
621 | '@typescript-eslint/typescript-estree@8.24.1':
622 | resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==}
623 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
624 | peerDependencies:
625 | typescript: '>=4.8.4 <5.8.0'
626 |
627 | '@typescript-eslint/utils@8.24.1':
628 | resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==}
629 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
630 | peerDependencies:
631 | eslint: ^8.57.0 || ^9.0.0
632 | typescript: '>=4.8.4 <5.8.0'
633 |
634 | '@typescript-eslint/visitor-keys@8.24.1':
635 | resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==}
636 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
637 |
638 | '@vitejs/plugin-react@4.3.4':
639 | resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==}
640 | engines: {node: ^14.18.0 || >=16.0.0}
641 | peerDependencies:
642 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0
643 |
644 | acorn-jsx@5.3.2:
645 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
646 | peerDependencies:
647 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
648 |
649 | acorn@8.14.0:
650 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
651 | engines: {node: '>=0.4.0'}
652 | hasBin: true
653 |
654 | ajv@6.12.6:
655 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
656 |
657 | ansi-styles@4.3.0:
658 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
659 | engines: {node: '>=8'}
660 |
661 | argparse@2.0.1:
662 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
663 |
664 | autoprefixer@10.4.20:
665 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
666 | engines: {node: ^10 || ^12 || >=14}
667 | hasBin: true
668 | peerDependencies:
669 | postcss: ^8.1.0
670 |
671 | balanced-match@1.0.2:
672 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
673 |
674 | brace-expansion@1.1.11:
675 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
676 |
677 | brace-expansion@2.0.1:
678 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
679 |
680 | braces@3.0.3:
681 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
682 | engines: {node: '>=8'}
683 |
684 | browserslist@4.24.4:
685 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
686 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
687 | hasBin: true
688 |
689 | callsites@3.1.0:
690 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
691 | engines: {node: '>=6'}
692 |
693 | caniuse-lite@1.0.30001700:
694 | resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
695 |
696 | chalk@4.1.2:
697 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
698 | engines: {node: '>=10'}
699 |
700 | classnames@2.5.1:
701 | resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
702 |
703 | color-convert@2.0.1:
704 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
705 | engines: {node: '>=7.0.0'}
706 |
707 | color-name@1.1.4:
708 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
709 |
710 | concat-map@0.0.1:
711 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
712 |
713 | convert-source-map@2.0.0:
714 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
715 |
716 | cross-spawn@7.0.6:
717 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
718 | engines: {node: '>= 8'}
719 |
720 | csstype@3.1.3:
721 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
722 |
723 | dayjs@1.11.13:
724 | resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
725 |
726 | debug@4.4.0:
727 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
728 | engines: {node: '>=6.0'}
729 | peerDependencies:
730 | supports-color: '*'
731 | peerDependenciesMeta:
732 | supports-color:
733 | optional: true
734 |
735 | deep-is@0.1.4:
736 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
737 |
738 | detect-libc@1.0.3:
739 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
740 | engines: {node: '>=0.10'}
741 | hasBin: true
742 |
743 | electron-to-chromium@1.5.103:
744 | resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==}
745 |
746 | enhanced-resolve@5.18.1:
747 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
748 | engines: {node: '>=10.13.0'}
749 |
750 | esbuild@0.24.2:
751 | resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
752 | engines: {node: '>=18'}
753 | hasBin: true
754 |
755 | escalade@3.2.0:
756 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
757 | engines: {node: '>=6'}
758 |
759 | escape-string-regexp@4.0.0:
760 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
761 | engines: {node: '>=10'}
762 |
763 | eslint-plugin-react-hooks@5.1.0:
764 | resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==}
765 | engines: {node: '>=10'}
766 | peerDependencies:
767 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
768 |
769 | eslint-plugin-react-refresh@0.4.19:
770 | resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==}
771 | peerDependencies:
772 | eslint: '>=8.40'
773 |
774 | eslint-scope@8.2.0:
775 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
776 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
777 |
778 | eslint-visitor-keys@3.4.3:
779 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
780 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
781 |
782 | eslint-visitor-keys@4.2.0:
783 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
784 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
785 |
786 | eslint@9.21.0:
787 | resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==}
788 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
789 | hasBin: true
790 | peerDependencies:
791 | jiti: '*'
792 | peerDependenciesMeta:
793 | jiti:
794 | optional: true
795 |
796 | espree@10.3.0:
797 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
798 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
799 |
800 | esquery@1.6.0:
801 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
802 | engines: {node: '>=0.10'}
803 |
804 | esrecurse@4.3.0:
805 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
806 | engines: {node: '>=4.0'}
807 |
808 | estraverse@5.3.0:
809 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
810 | engines: {node: '>=4.0'}
811 |
812 | esutils@2.0.3:
813 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
814 | engines: {node: '>=0.10.0'}
815 |
816 | fast-deep-equal@3.1.3:
817 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
818 |
819 | fast-glob@3.3.3:
820 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
821 | engines: {node: '>=8.6.0'}
822 |
823 | fast-json-stable-stringify@2.1.0:
824 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
825 |
826 | fast-levenshtein@2.0.6:
827 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
828 |
829 | fastq@1.19.0:
830 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
831 |
832 | file-entry-cache@8.0.0:
833 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
834 | engines: {node: '>=16.0.0'}
835 |
836 | fill-range@7.1.1:
837 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
838 | engines: {node: '>=8'}
839 |
840 | find-up@5.0.0:
841 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
842 | engines: {node: '>=10'}
843 |
844 | flat-cache@4.0.1:
845 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
846 | engines: {node: '>=16'}
847 |
848 | flatted@3.3.3:
849 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
850 |
851 | fraction.js@4.3.7:
852 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
853 |
854 | fsevents@2.3.3:
855 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
856 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
857 | os: [darwin]
858 |
859 | gensync@1.0.0-beta.2:
860 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
861 | engines: {node: '>=6.9.0'}
862 |
863 | glob-parent@5.1.2:
864 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
865 | engines: {node: '>= 6'}
866 |
867 | glob-parent@6.0.2:
868 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
869 | engines: {node: '>=10.13.0'}
870 |
871 | globals@11.12.0:
872 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
873 | engines: {node: '>=4'}
874 |
875 | globals@14.0.0:
876 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
877 | engines: {node: '>=18'}
878 |
879 | globals@15.15.0:
880 | resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
881 | engines: {node: '>=18'}
882 |
883 | graceful-fs@4.2.11:
884 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
885 |
886 | graphemer@1.4.0:
887 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
888 |
889 | has-flag@4.0.0:
890 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
891 | engines: {node: '>=8'}
892 |
893 | ignore@5.3.2:
894 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
895 | engines: {node: '>= 4'}
896 |
897 | import-fresh@3.3.1:
898 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
899 | engines: {node: '>=6'}
900 |
901 | imurmurhash@0.1.4:
902 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
903 | engines: {node: '>=0.8.19'}
904 |
905 | is-extglob@2.1.1:
906 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
907 | engines: {node: '>=0.10.0'}
908 |
909 | is-glob@4.0.3:
910 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
911 | engines: {node: '>=0.10.0'}
912 |
913 | is-number@7.0.0:
914 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
915 | engines: {node: '>=0.12.0'}
916 |
917 | isexe@2.0.0:
918 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
919 |
920 | jiti@2.4.2:
921 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
922 | hasBin: true
923 |
924 | js-tokens@4.0.0:
925 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
926 |
927 | js-yaml@4.1.0:
928 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
929 | hasBin: true
930 |
931 | jsesc@3.1.0:
932 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
933 | engines: {node: '>=6'}
934 | hasBin: true
935 |
936 | json-buffer@3.0.1:
937 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
938 |
939 | json-schema-traverse@0.4.1:
940 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
941 |
942 | json-stable-stringify-without-jsonify@1.0.1:
943 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
944 |
945 | json5@2.2.3:
946 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
947 | engines: {node: '>=6'}
948 | hasBin: true
949 |
950 | keyv@4.5.4:
951 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
952 |
953 | levn@0.4.1:
954 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
955 | engines: {node: '>= 0.8.0'}
956 |
957 | lightningcss-darwin-arm64@1.29.1:
958 | resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==}
959 | engines: {node: '>= 12.0.0'}
960 | cpu: [arm64]
961 | os: [darwin]
962 |
963 | lightningcss-darwin-x64@1.29.1:
964 | resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==}
965 | engines: {node: '>= 12.0.0'}
966 | cpu: [x64]
967 | os: [darwin]
968 |
969 | lightningcss-freebsd-x64@1.29.1:
970 | resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==}
971 | engines: {node: '>= 12.0.0'}
972 | cpu: [x64]
973 | os: [freebsd]
974 |
975 | lightningcss-linux-arm-gnueabihf@1.29.1:
976 | resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==}
977 | engines: {node: '>= 12.0.0'}
978 | cpu: [arm]
979 | os: [linux]
980 |
981 | lightningcss-linux-arm64-gnu@1.29.1:
982 | resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==}
983 | engines: {node: '>= 12.0.0'}
984 | cpu: [arm64]
985 | os: [linux]
986 |
987 | lightningcss-linux-arm64-musl@1.29.1:
988 | resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==}
989 | engines: {node: '>= 12.0.0'}
990 | cpu: [arm64]
991 | os: [linux]
992 |
993 | lightningcss-linux-x64-gnu@1.29.1:
994 | resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==}
995 | engines: {node: '>= 12.0.0'}
996 | cpu: [x64]
997 | os: [linux]
998 |
999 | lightningcss-linux-x64-musl@1.29.1:
1000 | resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==}
1001 | engines: {node: '>= 12.0.0'}
1002 | cpu: [x64]
1003 | os: [linux]
1004 |
1005 | lightningcss-win32-arm64-msvc@1.29.1:
1006 | resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==}
1007 | engines: {node: '>= 12.0.0'}
1008 | cpu: [arm64]
1009 | os: [win32]
1010 |
1011 | lightningcss-win32-x64-msvc@1.29.1:
1012 | resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==}
1013 | engines: {node: '>= 12.0.0'}
1014 | cpu: [x64]
1015 | os: [win32]
1016 |
1017 | lightningcss@1.29.1:
1018 | resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==}
1019 | engines: {node: '>= 12.0.0'}
1020 |
1021 | locate-path@6.0.0:
1022 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1023 | engines: {node: '>=10'}
1024 |
1025 | lodash.merge@4.6.2:
1026 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1027 |
1028 | lru-cache@5.1.1:
1029 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1030 |
1031 | merge2@1.4.1:
1032 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1033 | engines: {node: '>= 8'}
1034 |
1035 | micromatch@4.0.8:
1036 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1037 | engines: {node: '>=8.6'}
1038 |
1039 | minimatch@3.1.2:
1040 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1041 |
1042 | minimatch@9.0.5:
1043 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1044 | engines: {node: '>=16 || 14 >=14.17'}
1045 |
1046 | ms@2.1.3:
1047 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1048 |
1049 | nanoid@3.3.8:
1050 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1051 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1052 | hasBin: true
1053 |
1054 | natural-compare@1.4.0:
1055 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1056 |
1057 | node-releases@2.0.19:
1058 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1059 |
1060 | normalize-range@0.1.2:
1061 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1062 | engines: {node: '>=0.10.0'}
1063 |
1064 | optionator@0.9.4:
1065 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1066 | engines: {node: '>= 0.8.0'}
1067 |
1068 | p-limit@3.1.0:
1069 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1070 | engines: {node: '>=10'}
1071 |
1072 | p-locate@5.0.0:
1073 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1074 | engines: {node: '>=10'}
1075 |
1076 | parent-module@1.0.1:
1077 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1078 | engines: {node: '>=6'}
1079 |
1080 | path-exists@4.0.0:
1081 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1082 | engines: {node: '>=8'}
1083 |
1084 | path-key@3.1.1:
1085 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1086 | engines: {node: '>=8'}
1087 |
1088 | picocolors@1.1.1:
1089 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1090 |
1091 | picomatch@2.3.1:
1092 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1093 | engines: {node: '>=8.6'}
1094 |
1095 | postcss-value-parser@4.2.0:
1096 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1097 |
1098 | postcss@8.5.3:
1099 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
1100 | engines: {node: ^10 || ^12 || >=14}
1101 |
1102 | prelude-ls@1.2.1:
1103 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1104 | engines: {node: '>= 0.8.0'}
1105 |
1106 | punycode@2.3.1:
1107 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1108 | engines: {node: '>=6'}
1109 |
1110 | queue-microtask@1.2.3:
1111 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1112 |
1113 | react-dom@19.0.0:
1114 | resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
1115 | peerDependencies:
1116 | react: ^19.0.0
1117 |
1118 | react-icons@5.5.0:
1119 | resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==}
1120 | peerDependencies:
1121 | react: '*'
1122 |
1123 | react-refresh@0.14.2:
1124 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
1125 | engines: {node: '>=0.10.0'}
1126 |
1127 | react@19.0.0:
1128 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
1129 | engines: {node: '>=0.10.0'}
1130 |
1131 | resolve-from@4.0.0:
1132 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1133 | engines: {node: '>=4'}
1134 |
1135 | reusify@1.0.4:
1136 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1137 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1138 |
1139 | rollup@4.34.8:
1140 | resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
1141 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1142 | hasBin: true
1143 |
1144 | run-parallel@1.2.0:
1145 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1146 |
1147 | scheduler@0.25.0:
1148 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
1149 |
1150 | semver@6.3.1:
1151 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1152 | hasBin: true
1153 |
1154 | semver@7.7.1:
1155 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1156 | engines: {node: '>=10'}
1157 | hasBin: true
1158 |
1159 | shebang-command@2.0.0:
1160 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1161 | engines: {node: '>=8'}
1162 |
1163 | shebang-regex@3.0.0:
1164 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1165 | engines: {node: '>=8'}
1166 |
1167 | source-map-js@1.2.1:
1168 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1169 | engines: {node: '>=0.10.0'}
1170 |
1171 | strip-json-comments@3.1.1:
1172 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1173 | engines: {node: '>=8'}
1174 |
1175 | supports-color@7.2.0:
1176 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1177 | engines: {node: '>=8'}
1178 |
1179 | tailwindcss@4.0.8:
1180 | resolution: {integrity: sha512-Me7N5CKR+D2A1xdWA5t5+kjjT7bwnxZOE6/yDI/ixJdJokszsn2n++mdU5yJwrsTpqFX2B9ZNMBJDwcqk9C9lw==}
1181 |
1182 | tapable@2.2.1:
1183 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
1184 | engines: {node: '>=6'}
1185 |
1186 | to-regex-range@5.0.1:
1187 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1188 | engines: {node: '>=8.0'}
1189 |
1190 | ts-api-utils@2.0.1:
1191 | resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==}
1192 | engines: {node: '>=18.12'}
1193 | peerDependencies:
1194 | typescript: '>=4.8.4'
1195 |
1196 | type-check@0.4.0:
1197 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1198 | engines: {node: '>= 0.8.0'}
1199 |
1200 | typescript-eslint@8.24.1:
1201 | resolution: {integrity: sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==}
1202 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1203 | peerDependencies:
1204 | eslint: ^8.57.0 || ^9.0.0
1205 | typescript: '>=4.8.4 <5.8.0'
1206 |
1207 | typescript@5.7.3:
1208 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
1209 | engines: {node: '>=14.17'}
1210 | hasBin: true
1211 |
1212 | update-browserslist-db@1.1.2:
1213 | resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
1214 | hasBin: true
1215 | peerDependencies:
1216 | browserslist: '>= 4.21.0'
1217 |
1218 | uri-js@4.4.1:
1219 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1220 |
1221 | vite@6.1.1:
1222 | resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==}
1223 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1224 | hasBin: true
1225 | peerDependencies:
1226 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1227 | jiti: '>=1.21.0'
1228 | less: '*'
1229 | lightningcss: ^1.21.0
1230 | sass: '*'
1231 | sass-embedded: '*'
1232 | stylus: '*'
1233 | sugarss: '*'
1234 | terser: ^5.16.0
1235 | tsx: ^4.8.1
1236 | yaml: ^2.4.2
1237 | peerDependenciesMeta:
1238 | '@types/node':
1239 | optional: true
1240 | jiti:
1241 | optional: true
1242 | less:
1243 | optional: true
1244 | lightningcss:
1245 | optional: true
1246 | sass:
1247 | optional: true
1248 | sass-embedded:
1249 | optional: true
1250 | stylus:
1251 | optional: true
1252 | sugarss:
1253 | optional: true
1254 | terser:
1255 | optional: true
1256 | tsx:
1257 | optional: true
1258 | yaml:
1259 | optional: true
1260 |
1261 | which@2.0.2:
1262 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1263 | engines: {node: '>= 8'}
1264 | hasBin: true
1265 |
1266 | word-wrap@1.2.5:
1267 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1268 | engines: {node: '>=0.10.0'}
1269 |
1270 | yallist@3.1.1:
1271 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1272 |
1273 | yocto-queue@0.1.0:
1274 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1275 | engines: {node: '>=10'}
1276 |
1277 | snapshots:
1278 |
1279 | '@ampproject/remapping@2.3.0':
1280 | dependencies:
1281 | '@jridgewell/gen-mapping': 0.3.8
1282 | '@jridgewell/trace-mapping': 0.3.25
1283 |
1284 | '@babel/code-frame@7.26.2':
1285 | dependencies:
1286 | '@babel/helper-validator-identifier': 7.25.9
1287 | js-tokens: 4.0.0
1288 | picocolors: 1.1.1
1289 |
1290 | '@babel/compat-data@7.26.8': {}
1291 |
1292 | '@babel/core@7.26.9':
1293 | dependencies:
1294 | '@ampproject/remapping': 2.3.0
1295 | '@babel/code-frame': 7.26.2
1296 | '@babel/generator': 7.26.9
1297 | '@babel/helper-compilation-targets': 7.26.5
1298 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9)
1299 | '@babel/helpers': 7.26.9
1300 | '@babel/parser': 7.26.9
1301 | '@babel/template': 7.26.9
1302 | '@babel/traverse': 7.26.9
1303 | '@babel/types': 7.26.9
1304 | convert-source-map: 2.0.0
1305 | debug: 4.4.0
1306 | gensync: 1.0.0-beta.2
1307 | json5: 2.2.3
1308 | semver: 6.3.1
1309 | transitivePeerDependencies:
1310 | - supports-color
1311 |
1312 | '@babel/generator@7.26.9':
1313 | dependencies:
1314 | '@babel/parser': 7.26.9
1315 | '@babel/types': 7.26.9
1316 | '@jridgewell/gen-mapping': 0.3.8
1317 | '@jridgewell/trace-mapping': 0.3.25
1318 | jsesc: 3.1.0
1319 |
1320 | '@babel/helper-compilation-targets@7.26.5':
1321 | dependencies:
1322 | '@babel/compat-data': 7.26.8
1323 | '@babel/helper-validator-option': 7.25.9
1324 | browserslist: 4.24.4
1325 | lru-cache: 5.1.1
1326 | semver: 6.3.1
1327 |
1328 | '@babel/helper-module-imports@7.25.9':
1329 | dependencies:
1330 | '@babel/traverse': 7.26.9
1331 | '@babel/types': 7.26.9
1332 | transitivePeerDependencies:
1333 | - supports-color
1334 |
1335 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)':
1336 | dependencies:
1337 | '@babel/core': 7.26.9
1338 | '@babel/helper-module-imports': 7.25.9
1339 | '@babel/helper-validator-identifier': 7.25.9
1340 | '@babel/traverse': 7.26.9
1341 | transitivePeerDependencies:
1342 | - supports-color
1343 |
1344 | '@babel/helper-plugin-utils@7.26.5': {}
1345 |
1346 | '@babel/helper-string-parser@7.25.9': {}
1347 |
1348 | '@babel/helper-validator-identifier@7.25.9': {}
1349 |
1350 | '@babel/helper-validator-option@7.25.9': {}
1351 |
1352 | '@babel/helpers@7.26.9':
1353 | dependencies:
1354 | '@babel/template': 7.26.9
1355 | '@babel/types': 7.26.9
1356 |
1357 | '@babel/parser@7.26.9':
1358 | dependencies:
1359 | '@babel/types': 7.26.9
1360 |
1361 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.9)':
1362 | dependencies:
1363 | '@babel/core': 7.26.9
1364 | '@babel/helper-plugin-utils': 7.26.5
1365 |
1366 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9)':
1367 | dependencies:
1368 | '@babel/core': 7.26.9
1369 | '@babel/helper-plugin-utils': 7.26.5
1370 |
1371 | '@babel/template@7.26.9':
1372 | dependencies:
1373 | '@babel/code-frame': 7.26.2
1374 | '@babel/parser': 7.26.9
1375 | '@babel/types': 7.26.9
1376 |
1377 | '@babel/traverse@7.26.9':
1378 | dependencies:
1379 | '@babel/code-frame': 7.26.2
1380 | '@babel/generator': 7.26.9
1381 | '@babel/parser': 7.26.9
1382 | '@babel/template': 7.26.9
1383 | '@babel/types': 7.26.9
1384 | debug: 4.4.0
1385 | globals: 11.12.0
1386 | transitivePeerDependencies:
1387 | - supports-color
1388 |
1389 | '@babel/types@7.26.9':
1390 | dependencies:
1391 | '@babel/helper-string-parser': 7.25.9
1392 | '@babel/helper-validator-identifier': 7.25.9
1393 |
1394 | '@esbuild/aix-ppc64@0.24.2':
1395 | optional: true
1396 |
1397 | '@esbuild/android-arm64@0.24.2':
1398 | optional: true
1399 |
1400 | '@esbuild/android-arm@0.24.2':
1401 | optional: true
1402 |
1403 | '@esbuild/android-x64@0.24.2':
1404 | optional: true
1405 |
1406 | '@esbuild/darwin-arm64@0.24.2':
1407 | optional: true
1408 |
1409 | '@esbuild/darwin-x64@0.24.2':
1410 | optional: true
1411 |
1412 | '@esbuild/freebsd-arm64@0.24.2':
1413 | optional: true
1414 |
1415 | '@esbuild/freebsd-x64@0.24.2':
1416 | optional: true
1417 |
1418 | '@esbuild/linux-arm64@0.24.2':
1419 | optional: true
1420 |
1421 | '@esbuild/linux-arm@0.24.2':
1422 | optional: true
1423 |
1424 | '@esbuild/linux-ia32@0.24.2':
1425 | optional: true
1426 |
1427 | '@esbuild/linux-loong64@0.24.2':
1428 | optional: true
1429 |
1430 | '@esbuild/linux-mips64el@0.24.2':
1431 | optional: true
1432 |
1433 | '@esbuild/linux-ppc64@0.24.2':
1434 | optional: true
1435 |
1436 | '@esbuild/linux-riscv64@0.24.2':
1437 | optional: true
1438 |
1439 | '@esbuild/linux-s390x@0.24.2':
1440 | optional: true
1441 |
1442 | '@esbuild/linux-x64@0.24.2':
1443 | optional: true
1444 |
1445 | '@esbuild/netbsd-arm64@0.24.2':
1446 | optional: true
1447 |
1448 | '@esbuild/netbsd-x64@0.24.2':
1449 | optional: true
1450 |
1451 | '@esbuild/openbsd-arm64@0.24.2':
1452 | optional: true
1453 |
1454 | '@esbuild/openbsd-x64@0.24.2':
1455 | optional: true
1456 |
1457 | '@esbuild/sunos-x64@0.24.2':
1458 | optional: true
1459 |
1460 | '@esbuild/win32-arm64@0.24.2':
1461 | optional: true
1462 |
1463 | '@esbuild/win32-ia32@0.24.2':
1464 | optional: true
1465 |
1466 | '@esbuild/win32-x64@0.24.2':
1467 | optional: true
1468 |
1469 | '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))':
1470 | dependencies:
1471 | eslint: 9.21.0(jiti@2.4.2)
1472 | eslint-visitor-keys: 3.4.3
1473 |
1474 | '@eslint-community/regexpp@4.12.1': {}
1475 |
1476 | '@eslint/config-array@0.19.2':
1477 | dependencies:
1478 | '@eslint/object-schema': 2.1.6
1479 | debug: 4.4.0
1480 | minimatch: 3.1.2
1481 | transitivePeerDependencies:
1482 | - supports-color
1483 |
1484 | '@eslint/core@0.12.0':
1485 | dependencies:
1486 | '@types/json-schema': 7.0.15
1487 |
1488 | '@eslint/eslintrc@3.3.0':
1489 | dependencies:
1490 | ajv: 6.12.6
1491 | debug: 4.4.0
1492 | espree: 10.3.0
1493 | globals: 14.0.0
1494 | ignore: 5.3.2
1495 | import-fresh: 3.3.1
1496 | js-yaml: 4.1.0
1497 | minimatch: 3.1.2
1498 | strip-json-comments: 3.1.1
1499 | transitivePeerDependencies:
1500 | - supports-color
1501 |
1502 | '@eslint/js@9.21.0': {}
1503 |
1504 | '@eslint/object-schema@2.1.6': {}
1505 |
1506 | '@eslint/plugin-kit@0.2.7':
1507 | dependencies:
1508 | '@eslint/core': 0.12.0
1509 | levn: 0.4.1
1510 |
1511 | '@humanfs/core@0.19.1': {}
1512 |
1513 | '@humanfs/node@0.16.6':
1514 | dependencies:
1515 | '@humanfs/core': 0.19.1
1516 | '@humanwhocodes/retry': 0.3.1
1517 |
1518 | '@humanwhocodes/module-importer@1.0.1': {}
1519 |
1520 | '@humanwhocodes/retry@0.3.1': {}
1521 |
1522 | '@humanwhocodes/retry@0.4.2': {}
1523 |
1524 | '@jridgewell/gen-mapping@0.3.8':
1525 | dependencies:
1526 | '@jridgewell/set-array': 1.2.1
1527 | '@jridgewell/sourcemap-codec': 1.5.0
1528 | '@jridgewell/trace-mapping': 0.3.25
1529 |
1530 | '@jridgewell/resolve-uri@3.1.2': {}
1531 |
1532 | '@jridgewell/set-array@1.2.1': {}
1533 |
1534 | '@jridgewell/sourcemap-codec@1.5.0': {}
1535 |
1536 | '@jridgewell/trace-mapping@0.3.25':
1537 | dependencies:
1538 | '@jridgewell/resolve-uri': 3.1.2
1539 | '@jridgewell/sourcemap-codec': 1.5.0
1540 |
1541 | '@nodelib/fs.scandir@2.1.5':
1542 | dependencies:
1543 | '@nodelib/fs.stat': 2.0.5
1544 | run-parallel: 1.2.0
1545 |
1546 | '@nodelib/fs.stat@2.0.5': {}
1547 |
1548 | '@nodelib/fs.walk@1.2.8':
1549 | dependencies:
1550 | '@nodelib/fs.scandir': 2.1.5
1551 | fastq: 1.19.0
1552 |
1553 | '@rollup/rollup-android-arm-eabi@4.34.8':
1554 | optional: true
1555 |
1556 | '@rollup/rollup-android-arm64@4.34.8':
1557 | optional: true
1558 |
1559 | '@rollup/rollup-darwin-arm64@4.34.8':
1560 | optional: true
1561 |
1562 | '@rollup/rollup-darwin-x64@4.34.8':
1563 | optional: true
1564 |
1565 | '@rollup/rollup-freebsd-arm64@4.34.8':
1566 | optional: true
1567 |
1568 | '@rollup/rollup-freebsd-x64@4.34.8':
1569 | optional: true
1570 |
1571 | '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
1572 | optional: true
1573 |
1574 | '@rollup/rollup-linux-arm-musleabihf@4.34.8':
1575 | optional: true
1576 |
1577 | '@rollup/rollup-linux-arm64-gnu@4.34.8':
1578 | optional: true
1579 |
1580 | '@rollup/rollup-linux-arm64-musl@4.34.8':
1581 | optional: true
1582 |
1583 | '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
1584 | optional: true
1585 |
1586 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
1587 | optional: true
1588 |
1589 | '@rollup/rollup-linux-riscv64-gnu@4.34.8':
1590 | optional: true
1591 |
1592 | '@rollup/rollup-linux-s390x-gnu@4.34.8':
1593 | optional: true
1594 |
1595 | '@rollup/rollup-linux-x64-gnu@4.34.8':
1596 | optional: true
1597 |
1598 | '@rollup/rollup-linux-x64-musl@4.34.8':
1599 | optional: true
1600 |
1601 | '@rollup/rollup-win32-arm64-msvc@4.34.8':
1602 | optional: true
1603 |
1604 | '@rollup/rollup-win32-ia32-msvc@4.34.8':
1605 | optional: true
1606 |
1607 | '@rollup/rollup-win32-x64-msvc@4.34.8':
1608 | optional: true
1609 |
1610 | '@tailwindcss/node@4.0.8':
1611 | dependencies:
1612 | enhanced-resolve: 5.18.1
1613 | jiti: 2.4.2
1614 | tailwindcss: 4.0.8
1615 |
1616 | '@tailwindcss/oxide-android-arm64@4.0.8':
1617 | optional: true
1618 |
1619 | '@tailwindcss/oxide-darwin-arm64@4.0.8':
1620 | optional: true
1621 |
1622 | '@tailwindcss/oxide-darwin-x64@4.0.8':
1623 | optional: true
1624 |
1625 | '@tailwindcss/oxide-freebsd-x64@4.0.8':
1626 | optional: true
1627 |
1628 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.8':
1629 | optional: true
1630 |
1631 | '@tailwindcss/oxide-linux-arm64-gnu@4.0.8':
1632 | optional: true
1633 |
1634 | '@tailwindcss/oxide-linux-arm64-musl@4.0.8':
1635 | optional: true
1636 |
1637 | '@tailwindcss/oxide-linux-x64-gnu@4.0.8':
1638 | optional: true
1639 |
1640 | '@tailwindcss/oxide-linux-x64-musl@4.0.8':
1641 | optional: true
1642 |
1643 | '@tailwindcss/oxide-win32-arm64-msvc@4.0.8':
1644 | optional: true
1645 |
1646 | '@tailwindcss/oxide-win32-x64-msvc@4.0.8':
1647 | optional: true
1648 |
1649 | '@tailwindcss/oxide@4.0.8':
1650 | optionalDependencies:
1651 | '@tailwindcss/oxide-android-arm64': 4.0.8
1652 | '@tailwindcss/oxide-darwin-arm64': 4.0.8
1653 | '@tailwindcss/oxide-darwin-x64': 4.0.8
1654 | '@tailwindcss/oxide-freebsd-x64': 4.0.8
1655 | '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.8
1656 | '@tailwindcss/oxide-linux-arm64-gnu': 4.0.8
1657 | '@tailwindcss/oxide-linux-arm64-musl': 4.0.8
1658 | '@tailwindcss/oxide-linux-x64-gnu': 4.0.8
1659 | '@tailwindcss/oxide-linux-x64-musl': 4.0.8
1660 | '@tailwindcss/oxide-win32-arm64-msvc': 4.0.8
1661 | '@tailwindcss/oxide-win32-x64-msvc': 4.0.8
1662 |
1663 | '@tailwindcss/vite@4.0.8(vite@6.1.1(jiti@2.4.2)(lightningcss@1.29.1))':
1664 | dependencies:
1665 | '@tailwindcss/node': 4.0.8
1666 | '@tailwindcss/oxide': 4.0.8
1667 | lightningcss: 1.29.1
1668 | tailwindcss: 4.0.8
1669 | vite: 6.1.1(jiti@2.4.2)(lightningcss@1.29.1)
1670 |
1671 | '@types/babel__core@7.20.5':
1672 | dependencies:
1673 | '@babel/parser': 7.26.9
1674 | '@babel/types': 7.26.9
1675 | '@types/babel__generator': 7.6.8
1676 | '@types/babel__template': 7.4.4
1677 | '@types/babel__traverse': 7.20.6
1678 |
1679 | '@types/babel__generator@7.6.8':
1680 | dependencies:
1681 | '@babel/types': 7.26.9
1682 |
1683 | '@types/babel__template@7.4.4':
1684 | dependencies:
1685 | '@babel/parser': 7.26.9
1686 | '@babel/types': 7.26.9
1687 |
1688 | '@types/babel__traverse@7.20.6':
1689 | dependencies:
1690 | '@babel/types': 7.26.9
1691 |
1692 | '@types/estree@1.0.6': {}
1693 |
1694 | '@types/json-schema@7.0.15': {}
1695 |
1696 | '@types/react-dom@19.0.4(@types/react@19.0.10)':
1697 | dependencies:
1698 | '@types/react': 19.0.10
1699 |
1700 | '@types/react@19.0.10':
1701 | dependencies:
1702 | csstype: 3.1.3
1703 |
1704 | '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
1705 | dependencies:
1706 | '@eslint-community/regexpp': 4.12.1
1707 | '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
1708 | '@typescript-eslint/scope-manager': 8.24.1
1709 | '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
1710 | '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
1711 | '@typescript-eslint/visitor-keys': 8.24.1
1712 | eslint: 9.21.0(jiti@2.4.2)
1713 | graphemer: 1.4.0
1714 | ignore: 5.3.2
1715 | natural-compare: 1.4.0
1716 | ts-api-utils: 2.0.1(typescript@5.7.3)
1717 | typescript: 5.7.3
1718 | transitivePeerDependencies:
1719 | - supports-color
1720 |
1721 | '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
1722 | dependencies:
1723 | '@typescript-eslint/scope-manager': 8.24.1
1724 | '@typescript-eslint/types': 8.24.1
1725 | '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
1726 | '@typescript-eslint/visitor-keys': 8.24.1
1727 | debug: 4.4.0
1728 | eslint: 9.21.0(jiti@2.4.2)
1729 | typescript: 5.7.3
1730 | transitivePeerDependencies:
1731 | - supports-color
1732 |
1733 | '@typescript-eslint/scope-manager@8.24.1':
1734 | dependencies:
1735 | '@typescript-eslint/types': 8.24.1
1736 | '@typescript-eslint/visitor-keys': 8.24.1
1737 |
1738 | '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
1739 | dependencies:
1740 | '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
1741 | '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
1742 | debug: 4.4.0
1743 | eslint: 9.21.0(jiti@2.4.2)
1744 | ts-api-utils: 2.0.1(typescript@5.7.3)
1745 | typescript: 5.7.3
1746 | transitivePeerDependencies:
1747 | - supports-color
1748 |
1749 | '@typescript-eslint/types@8.24.1': {}
1750 |
1751 | '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)':
1752 | dependencies:
1753 | '@typescript-eslint/types': 8.24.1
1754 | '@typescript-eslint/visitor-keys': 8.24.1
1755 | debug: 4.4.0
1756 | fast-glob: 3.3.3
1757 | is-glob: 4.0.3
1758 | minimatch: 9.0.5
1759 | semver: 7.7.1
1760 | ts-api-utils: 2.0.1(typescript@5.7.3)
1761 | typescript: 5.7.3
1762 | transitivePeerDependencies:
1763 | - supports-color
1764 |
1765 | '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
1766 | dependencies:
1767 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2))
1768 | '@typescript-eslint/scope-manager': 8.24.1
1769 | '@typescript-eslint/types': 8.24.1
1770 | '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
1771 | eslint: 9.21.0(jiti@2.4.2)
1772 | typescript: 5.7.3
1773 | transitivePeerDependencies:
1774 | - supports-color
1775 |
1776 | '@typescript-eslint/visitor-keys@8.24.1':
1777 | dependencies:
1778 | '@typescript-eslint/types': 8.24.1
1779 | eslint-visitor-keys: 4.2.0
1780 |
1781 | '@vitejs/plugin-react@4.3.4(vite@6.1.1(jiti@2.4.2)(lightningcss@1.29.1))':
1782 | dependencies:
1783 | '@babel/core': 7.26.9
1784 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9)
1785 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9)
1786 | '@types/babel__core': 7.20.5
1787 | react-refresh: 0.14.2
1788 | vite: 6.1.1(jiti@2.4.2)(lightningcss@1.29.1)
1789 | transitivePeerDependencies:
1790 | - supports-color
1791 |
1792 | acorn-jsx@5.3.2(acorn@8.14.0):
1793 | dependencies:
1794 | acorn: 8.14.0
1795 |
1796 | acorn@8.14.0: {}
1797 |
1798 | ajv@6.12.6:
1799 | dependencies:
1800 | fast-deep-equal: 3.1.3
1801 | fast-json-stable-stringify: 2.1.0
1802 | json-schema-traverse: 0.4.1
1803 | uri-js: 4.4.1
1804 |
1805 | ansi-styles@4.3.0:
1806 | dependencies:
1807 | color-convert: 2.0.1
1808 |
1809 | argparse@2.0.1: {}
1810 |
1811 | autoprefixer@10.4.20(postcss@8.5.3):
1812 | dependencies:
1813 | browserslist: 4.24.4
1814 | caniuse-lite: 1.0.30001700
1815 | fraction.js: 4.3.7
1816 | normalize-range: 0.1.2
1817 | picocolors: 1.1.1
1818 | postcss: 8.5.3
1819 | postcss-value-parser: 4.2.0
1820 |
1821 | balanced-match@1.0.2: {}
1822 |
1823 | brace-expansion@1.1.11:
1824 | dependencies:
1825 | balanced-match: 1.0.2
1826 | concat-map: 0.0.1
1827 |
1828 | brace-expansion@2.0.1:
1829 | dependencies:
1830 | balanced-match: 1.0.2
1831 |
1832 | braces@3.0.3:
1833 | dependencies:
1834 | fill-range: 7.1.1
1835 |
1836 | browserslist@4.24.4:
1837 | dependencies:
1838 | caniuse-lite: 1.0.30001700
1839 | electron-to-chromium: 1.5.103
1840 | node-releases: 2.0.19
1841 | update-browserslist-db: 1.1.2(browserslist@4.24.4)
1842 |
1843 | callsites@3.1.0: {}
1844 |
1845 | caniuse-lite@1.0.30001700: {}
1846 |
1847 | chalk@4.1.2:
1848 | dependencies:
1849 | ansi-styles: 4.3.0
1850 | supports-color: 7.2.0
1851 |
1852 | classnames@2.5.1: {}
1853 |
1854 | color-convert@2.0.1:
1855 | dependencies:
1856 | color-name: 1.1.4
1857 |
1858 | color-name@1.1.4: {}
1859 |
1860 | concat-map@0.0.1: {}
1861 |
1862 | convert-source-map@2.0.0: {}
1863 |
1864 | cross-spawn@7.0.6:
1865 | dependencies:
1866 | path-key: 3.1.1
1867 | shebang-command: 2.0.0
1868 | which: 2.0.2
1869 |
1870 | csstype@3.1.3: {}
1871 |
1872 | dayjs@1.11.13: {}
1873 |
1874 | debug@4.4.0:
1875 | dependencies:
1876 | ms: 2.1.3
1877 |
1878 | deep-is@0.1.4: {}
1879 |
1880 | detect-libc@1.0.3: {}
1881 |
1882 | electron-to-chromium@1.5.103: {}
1883 |
1884 | enhanced-resolve@5.18.1:
1885 | dependencies:
1886 | graceful-fs: 4.2.11
1887 | tapable: 2.2.1
1888 |
1889 | esbuild@0.24.2:
1890 | optionalDependencies:
1891 | '@esbuild/aix-ppc64': 0.24.2
1892 | '@esbuild/android-arm': 0.24.2
1893 | '@esbuild/android-arm64': 0.24.2
1894 | '@esbuild/android-x64': 0.24.2
1895 | '@esbuild/darwin-arm64': 0.24.2
1896 | '@esbuild/darwin-x64': 0.24.2
1897 | '@esbuild/freebsd-arm64': 0.24.2
1898 | '@esbuild/freebsd-x64': 0.24.2
1899 | '@esbuild/linux-arm': 0.24.2
1900 | '@esbuild/linux-arm64': 0.24.2
1901 | '@esbuild/linux-ia32': 0.24.2
1902 | '@esbuild/linux-loong64': 0.24.2
1903 | '@esbuild/linux-mips64el': 0.24.2
1904 | '@esbuild/linux-ppc64': 0.24.2
1905 | '@esbuild/linux-riscv64': 0.24.2
1906 | '@esbuild/linux-s390x': 0.24.2
1907 | '@esbuild/linux-x64': 0.24.2
1908 | '@esbuild/netbsd-arm64': 0.24.2
1909 | '@esbuild/netbsd-x64': 0.24.2
1910 | '@esbuild/openbsd-arm64': 0.24.2
1911 | '@esbuild/openbsd-x64': 0.24.2
1912 | '@esbuild/sunos-x64': 0.24.2
1913 | '@esbuild/win32-arm64': 0.24.2
1914 | '@esbuild/win32-ia32': 0.24.2
1915 | '@esbuild/win32-x64': 0.24.2
1916 |
1917 | escalade@3.2.0: {}
1918 |
1919 | escape-string-regexp@4.0.0: {}
1920 |
1921 | eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)):
1922 | dependencies:
1923 | eslint: 9.21.0(jiti@2.4.2)
1924 |
1925 | eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@2.4.2)):
1926 | dependencies:
1927 | eslint: 9.21.0(jiti@2.4.2)
1928 |
1929 | eslint-scope@8.2.0:
1930 | dependencies:
1931 | esrecurse: 4.3.0
1932 | estraverse: 5.3.0
1933 |
1934 | eslint-visitor-keys@3.4.3: {}
1935 |
1936 | eslint-visitor-keys@4.2.0: {}
1937 |
1938 | eslint@9.21.0(jiti@2.4.2):
1939 | dependencies:
1940 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2))
1941 | '@eslint-community/regexpp': 4.12.1
1942 | '@eslint/config-array': 0.19.2
1943 | '@eslint/core': 0.12.0
1944 | '@eslint/eslintrc': 3.3.0
1945 | '@eslint/js': 9.21.0
1946 | '@eslint/plugin-kit': 0.2.7
1947 | '@humanfs/node': 0.16.6
1948 | '@humanwhocodes/module-importer': 1.0.1
1949 | '@humanwhocodes/retry': 0.4.2
1950 | '@types/estree': 1.0.6
1951 | '@types/json-schema': 7.0.15
1952 | ajv: 6.12.6
1953 | chalk: 4.1.2
1954 | cross-spawn: 7.0.6
1955 | debug: 4.4.0
1956 | escape-string-regexp: 4.0.0
1957 | eslint-scope: 8.2.0
1958 | eslint-visitor-keys: 4.2.0
1959 | espree: 10.3.0
1960 | esquery: 1.6.0
1961 | esutils: 2.0.3
1962 | fast-deep-equal: 3.1.3
1963 | file-entry-cache: 8.0.0
1964 | find-up: 5.0.0
1965 | glob-parent: 6.0.2
1966 | ignore: 5.3.2
1967 | imurmurhash: 0.1.4
1968 | is-glob: 4.0.3
1969 | json-stable-stringify-without-jsonify: 1.0.1
1970 | lodash.merge: 4.6.2
1971 | minimatch: 3.1.2
1972 | natural-compare: 1.4.0
1973 | optionator: 0.9.4
1974 | optionalDependencies:
1975 | jiti: 2.4.2
1976 | transitivePeerDependencies:
1977 | - supports-color
1978 |
1979 | espree@10.3.0:
1980 | dependencies:
1981 | acorn: 8.14.0
1982 | acorn-jsx: 5.3.2(acorn@8.14.0)
1983 | eslint-visitor-keys: 4.2.0
1984 |
1985 | esquery@1.6.0:
1986 | dependencies:
1987 | estraverse: 5.3.0
1988 |
1989 | esrecurse@4.3.0:
1990 | dependencies:
1991 | estraverse: 5.3.0
1992 |
1993 | estraverse@5.3.0: {}
1994 |
1995 | esutils@2.0.3: {}
1996 |
1997 | fast-deep-equal@3.1.3: {}
1998 |
1999 | fast-glob@3.3.3:
2000 | dependencies:
2001 | '@nodelib/fs.stat': 2.0.5
2002 | '@nodelib/fs.walk': 1.2.8
2003 | glob-parent: 5.1.2
2004 | merge2: 1.4.1
2005 | micromatch: 4.0.8
2006 |
2007 | fast-json-stable-stringify@2.1.0: {}
2008 |
2009 | fast-levenshtein@2.0.6: {}
2010 |
2011 | fastq@1.19.0:
2012 | dependencies:
2013 | reusify: 1.0.4
2014 |
2015 | file-entry-cache@8.0.0:
2016 | dependencies:
2017 | flat-cache: 4.0.1
2018 |
2019 | fill-range@7.1.1:
2020 | dependencies:
2021 | to-regex-range: 5.0.1
2022 |
2023 | find-up@5.0.0:
2024 | dependencies:
2025 | locate-path: 6.0.0
2026 | path-exists: 4.0.0
2027 |
2028 | flat-cache@4.0.1:
2029 | dependencies:
2030 | flatted: 3.3.3
2031 | keyv: 4.5.4
2032 |
2033 | flatted@3.3.3: {}
2034 |
2035 | fraction.js@4.3.7: {}
2036 |
2037 | fsevents@2.3.3:
2038 | optional: true
2039 |
2040 | gensync@1.0.0-beta.2: {}
2041 |
2042 | glob-parent@5.1.2:
2043 | dependencies:
2044 | is-glob: 4.0.3
2045 |
2046 | glob-parent@6.0.2:
2047 | dependencies:
2048 | is-glob: 4.0.3
2049 |
2050 | globals@11.12.0: {}
2051 |
2052 | globals@14.0.0: {}
2053 |
2054 | globals@15.15.0: {}
2055 |
2056 | graceful-fs@4.2.11: {}
2057 |
2058 | graphemer@1.4.0: {}
2059 |
2060 | has-flag@4.0.0: {}
2061 |
2062 | ignore@5.3.2: {}
2063 |
2064 | import-fresh@3.3.1:
2065 | dependencies:
2066 | parent-module: 1.0.1
2067 | resolve-from: 4.0.0
2068 |
2069 | imurmurhash@0.1.4: {}
2070 |
2071 | is-extglob@2.1.1: {}
2072 |
2073 | is-glob@4.0.3:
2074 | dependencies:
2075 | is-extglob: 2.1.1
2076 |
2077 | is-number@7.0.0: {}
2078 |
2079 | isexe@2.0.0: {}
2080 |
2081 | jiti@2.4.2: {}
2082 |
2083 | js-tokens@4.0.0: {}
2084 |
2085 | js-yaml@4.1.0:
2086 | dependencies:
2087 | argparse: 2.0.1
2088 |
2089 | jsesc@3.1.0: {}
2090 |
2091 | json-buffer@3.0.1: {}
2092 |
2093 | json-schema-traverse@0.4.1: {}
2094 |
2095 | json-stable-stringify-without-jsonify@1.0.1: {}
2096 |
2097 | json5@2.2.3: {}
2098 |
2099 | keyv@4.5.4:
2100 | dependencies:
2101 | json-buffer: 3.0.1
2102 |
2103 | levn@0.4.1:
2104 | dependencies:
2105 | prelude-ls: 1.2.1
2106 | type-check: 0.4.0
2107 |
2108 | lightningcss-darwin-arm64@1.29.1:
2109 | optional: true
2110 |
2111 | lightningcss-darwin-x64@1.29.1:
2112 | optional: true
2113 |
2114 | lightningcss-freebsd-x64@1.29.1:
2115 | optional: true
2116 |
2117 | lightningcss-linux-arm-gnueabihf@1.29.1:
2118 | optional: true
2119 |
2120 | lightningcss-linux-arm64-gnu@1.29.1:
2121 | optional: true
2122 |
2123 | lightningcss-linux-arm64-musl@1.29.1:
2124 | optional: true
2125 |
2126 | lightningcss-linux-x64-gnu@1.29.1:
2127 | optional: true
2128 |
2129 | lightningcss-linux-x64-musl@1.29.1:
2130 | optional: true
2131 |
2132 | lightningcss-win32-arm64-msvc@1.29.1:
2133 | optional: true
2134 |
2135 | lightningcss-win32-x64-msvc@1.29.1:
2136 | optional: true
2137 |
2138 | lightningcss@1.29.1:
2139 | dependencies:
2140 | detect-libc: 1.0.3
2141 | optionalDependencies:
2142 | lightningcss-darwin-arm64: 1.29.1
2143 | lightningcss-darwin-x64: 1.29.1
2144 | lightningcss-freebsd-x64: 1.29.1
2145 | lightningcss-linux-arm-gnueabihf: 1.29.1
2146 | lightningcss-linux-arm64-gnu: 1.29.1
2147 | lightningcss-linux-arm64-musl: 1.29.1
2148 | lightningcss-linux-x64-gnu: 1.29.1
2149 | lightningcss-linux-x64-musl: 1.29.1
2150 | lightningcss-win32-arm64-msvc: 1.29.1
2151 | lightningcss-win32-x64-msvc: 1.29.1
2152 |
2153 | locate-path@6.0.0:
2154 | dependencies:
2155 | p-locate: 5.0.0
2156 |
2157 | lodash.merge@4.6.2: {}
2158 |
2159 | lru-cache@5.1.1:
2160 | dependencies:
2161 | yallist: 3.1.1
2162 |
2163 | merge2@1.4.1: {}
2164 |
2165 | micromatch@4.0.8:
2166 | dependencies:
2167 | braces: 3.0.3
2168 | picomatch: 2.3.1
2169 |
2170 | minimatch@3.1.2:
2171 | dependencies:
2172 | brace-expansion: 1.1.11
2173 |
2174 | minimatch@9.0.5:
2175 | dependencies:
2176 | brace-expansion: 2.0.1
2177 |
2178 | ms@2.1.3: {}
2179 |
2180 | nanoid@3.3.8: {}
2181 |
2182 | natural-compare@1.4.0: {}
2183 |
2184 | node-releases@2.0.19: {}
2185 |
2186 | normalize-range@0.1.2: {}
2187 |
2188 | optionator@0.9.4:
2189 | dependencies:
2190 | deep-is: 0.1.4
2191 | fast-levenshtein: 2.0.6
2192 | levn: 0.4.1
2193 | prelude-ls: 1.2.1
2194 | type-check: 0.4.0
2195 | word-wrap: 1.2.5
2196 |
2197 | p-limit@3.1.0:
2198 | dependencies:
2199 | yocto-queue: 0.1.0
2200 |
2201 | p-locate@5.0.0:
2202 | dependencies:
2203 | p-limit: 3.1.0
2204 |
2205 | parent-module@1.0.1:
2206 | dependencies:
2207 | callsites: 3.1.0
2208 |
2209 | path-exists@4.0.0: {}
2210 |
2211 | path-key@3.1.1: {}
2212 |
2213 | picocolors@1.1.1: {}
2214 |
2215 | picomatch@2.3.1: {}
2216 |
2217 | postcss-value-parser@4.2.0: {}
2218 |
2219 | postcss@8.5.3:
2220 | dependencies:
2221 | nanoid: 3.3.8
2222 | picocolors: 1.1.1
2223 | source-map-js: 1.2.1
2224 |
2225 | prelude-ls@1.2.1: {}
2226 |
2227 | punycode@2.3.1: {}
2228 |
2229 | queue-microtask@1.2.3: {}
2230 |
2231 | react-dom@19.0.0(react@19.0.0):
2232 | dependencies:
2233 | react: 19.0.0
2234 | scheduler: 0.25.0
2235 |
2236 | react-icons@5.5.0(react@19.0.0):
2237 | dependencies:
2238 | react: 19.0.0
2239 |
2240 | react-refresh@0.14.2: {}
2241 |
2242 | react@19.0.0: {}
2243 |
2244 | resolve-from@4.0.0: {}
2245 |
2246 | reusify@1.0.4: {}
2247 |
2248 | rollup@4.34.8:
2249 | dependencies:
2250 | '@types/estree': 1.0.6
2251 | optionalDependencies:
2252 | '@rollup/rollup-android-arm-eabi': 4.34.8
2253 | '@rollup/rollup-android-arm64': 4.34.8
2254 | '@rollup/rollup-darwin-arm64': 4.34.8
2255 | '@rollup/rollup-darwin-x64': 4.34.8
2256 | '@rollup/rollup-freebsd-arm64': 4.34.8
2257 | '@rollup/rollup-freebsd-x64': 4.34.8
2258 | '@rollup/rollup-linux-arm-gnueabihf': 4.34.8
2259 | '@rollup/rollup-linux-arm-musleabihf': 4.34.8
2260 | '@rollup/rollup-linux-arm64-gnu': 4.34.8
2261 | '@rollup/rollup-linux-arm64-musl': 4.34.8
2262 | '@rollup/rollup-linux-loongarch64-gnu': 4.34.8
2263 | '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
2264 | '@rollup/rollup-linux-riscv64-gnu': 4.34.8
2265 | '@rollup/rollup-linux-s390x-gnu': 4.34.8
2266 | '@rollup/rollup-linux-x64-gnu': 4.34.8
2267 | '@rollup/rollup-linux-x64-musl': 4.34.8
2268 | '@rollup/rollup-win32-arm64-msvc': 4.34.8
2269 | '@rollup/rollup-win32-ia32-msvc': 4.34.8
2270 | '@rollup/rollup-win32-x64-msvc': 4.34.8
2271 | fsevents: 2.3.3
2272 |
2273 | run-parallel@1.2.0:
2274 | dependencies:
2275 | queue-microtask: 1.2.3
2276 |
2277 | scheduler@0.25.0: {}
2278 |
2279 | semver@6.3.1: {}
2280 |
2281 | semver@7.7.1: {}
2282 |
2283 | shebang-command@2.0.0:
2284 | dependencies:
2285 | shebang-regex: 3.0.0
2286 |
2287 | shebang-regex@3.0.0: {}
2288 |
2289 | source-map-js@1.2.1: {}
2290 |
2291 | strip-json-comments@3.1.1: {}
2292 |
2293 | supports-color@7.2.0:
2294 | dependencies:
2295 | has-flag: 4.0.0
2296 |
2297 | tailwindcss@4.0.8: {}
2298 |
2299 | tapable@2.2.1: {}
2300 |
2301 | to-regex-range@5.0.1:
2302 | dependencies:
2303 | is-number: 7.0.0
2304 |
2305 | ts-api-utils@2.0.1(typescript@5.7.3):
2306 | dependencies:
2307 | typescript: 5.7.3
2308 |
2309 | type-check@0.4.0:
2310 | dependencies:
2311 | prelude-ls: 1.2.1
2312 |
2313 | typescript-eslint@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3):
2314 | dependencies:
2315 | '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
2316 | '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
2317 | '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
2318 | eslint: 9.21.0(jiti@2.4.2)
2319 | typescript: 5.7.3
2320 | transitivePeerDependencies:
2321 | - supports-color
2322 |
2323 | typescript@5.7.3: {}
2324 |
2325 | update-browserslist-db@1.1.2(browserslist@4.24.4):
2326 | dependencies:
2327 | browserslist: 4.24.4
2328 | escalade: 3.2.0
2329 | picocolors: 1.1.1
2330 |
2331 | uri-js@4.4.1:
2332 | dependencies:
2333 | punycode: 2.3.1
2334 |
2335 | vite@6.1.1(jiti@2.4.2)(lightningcss@1.29.1):
2336 | dependencies:
2337 | esbuild: 0.24.2
2338 | postcss: 8.5.3
2339 | rollup: 4.34.8
2340 | optionalDependencies:
2341 | fsevents: 2.3.3
2342 | jiti: 2.4.2
2343 | lightningcss: 1.29.1
2344 |
2345 | which@2.0.2:
2346 | dependencies:
2347 | isexe: 2.0.0
2348 |
2349 | word-wrap@1.2.5: {}
2350 |
2351 | yallist@3.1.1: {}
2352 |
2353 | yocto-queue@0.1.0: {}
2354 |
--------------------------------------------------------------------------------
/public/dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/block-stacker/react-portfolio-template/19da14b7244433392d45f7195e67a7f777f98acc/public/dev.png
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import Homepage from "./pages/homepage"
2 |
3 |
4 | function App() {
5 | return (
6 |
7 | )
8 | }
9 |
10 | export default App
11 |
--------------------------------------------------------------------------------
/src/components/button/index.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 | import cn from "classnames";
3 |
4 | interface ButtonProps {
5 | label: string;
6 | href?: string;
7 | onClick?: () => void;
8 | icon?: ReactNode;
9 | }
10 |
11 | export function PrimaryButton({ label, icon, href }: ButtonProps) {
12 | return href ? (
13 |
20 | {icon}
21 | {label}
22 |
23 | ) : (
24 |
33 | )
34 | }
35 |
36 | export function SecondaryButton({ label, icon, href, onClick }: ButtonProps) {
37 | return href ? (
38 |
39 | {icon}
40 | {label}
41 |
42 | ) : (
43 |
50 | )
51 | }
--------------------------------------------------------------------------------
/src/configs/portfolio.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Your Name",
3 | "bio": "I am a passionate full stack developer with over 8 years of experience building dynamic, user-focused web applications. I’m proficient in both front-end and back-end technologies, excelling at crafting seamless experiences using tools like React, Node.js, and PostgreSQL. With a keen eye for design and a knack for solving complex problems, I’ve contributed to projects ranging from sleek e-commerce platforms to robust enterprise solutions. When I’m not coding, I enjoy mentoring junior developers, exploring the latest tech trends, and sipping coffee while debugging late into the night.",
4 | "contacts": {
5 | "phone": "+1 2222 333 4444",
6 | "email": "for@example.com",
7 | "github": "https://github.com/your-username",
8 | "twitter": "https://x.com/your-username",
9 | "telegram": "https://t.me/your-username",
10 | "discord": "your-username",
11 | "linkedin": "https://linkedin.com/in/your-username"
12 | },
13 | "education": {
14 | "logo": "https://picsum.photos/id/231/300/300",
15 | "degree": "Your Degree",
16 | "university": "Your University",
17 | "location": "Location",
18 | "graduation": "2012/05/01 00:00:00",
19 | "courseWork": [
20 | "Algorithms"
21 | ],
22 | "project": "Your senior project"
23 | },
24 | "meetingLink": "https://meet.google.com",
25 | "skills": {
26 | "languages": [
27 | "JavaScript"
28 | ],
29 | "frameworks": [
30 | "React",
31 | "Next.js",
32 | "Nest.js"
33 | ]
34 | },
35 | "projects": [
36 | {
37 | "name": "Project1",
38 | "link": "https://project1.link",
39 | "logo": "https://picsum.photos/id/232/300/300",
40 | "description": "Lorem Ipsum dolor sit amet, consectetur adipiscing elit. Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem Ipsum duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem Ipsum excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
41 | "skills": [
42 | "React",
43 | "TypeScript",
44 | "Tailwind CSS"
45 | ]
46 | },
47 | {
48 | "name": "Project2",
49 | "link": "https://project2.link",
50 | "logo": "https://picsum.photos/id/233/300/300",
51 | "description": "Lorem Ipsum dolor sit amet, consectetur adipiscing elit. Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem Ipsum duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem Ipsum excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
52 | "skills": [
53 | "React",
54 | "TypeScript",
55 | "Tailwind CSS"
56 | ]
57 | },
58 | {
59 | "name": "Project3",
60 | "link": "https://project3.link",
61 | "logo": "https://picsum.photos/id/234/300/300",
62 | "description": "Lorem Ipsum dolor sit amet, consectetur adipiscing elit. Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem Ipsum duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem Ipsum excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
63 | "skills": [
64 | "React",
65 | "TypeScript",
66 | "Tailwind CSS"
67 | ]
68 | },
69 | {
70 | "name": "Project4",
71 | "link": "https://project4.link",
72 | "logo": "https://picsum.photos/id/235/300/300",
73 | "description": "Lorem Ipsum dolor sit amet, consectetur adipiscing elit. Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem Ipsum duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem Ipsum excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
74 | "skills": [
75 | "React",
76 | "TypeScript",
77 | "Tailwind CSS"
78 | ]
79 | }
80 | ],
81 | "experience": [
82 | {
83 | "from": 1730347070000,
84 | "to": 1740347070445,
85 | "company": "Microsft",
86 | "role": "Senior Software Engineer",
87 | "logo": "https://companiesmarketcap.com/img/company-logos/64/MSFT.webp",
88 | "descriptions": [
89 | "Lorem Ipsum dolor sit amet, consectetur adipiscing elit.",
90 | "Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
91 | "Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
92 | ]
93 | },
94 | {
95 | "from": 1730347070000,
96 | "to": 1740347070445,
97 | "company": "Microsft",
98 | "role": "Senior Software Engineer",
99 | "logo": "https://companiesmarketcap.com/img/company-logos/64/GOOG.webp",
100 | "descriptions": [
101 | "Lorem Ipsum dolor sit amet, consectetur adipiscing elit.",
102 | "Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
103 | "Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
104 | ]
105 | },
106 | {
107 | "from": 1730347070000,
108 | "to": 1740347070445,
109 | "company": "Nvidia",
110 | "role": "Senior Software Engineer",
111 | "logo": "https://companiesmarketcap.com/img/company-logos/64/NVDA.webp",
112 | "descriptions": [
113 | "Lorem Ipsum dolor sit amet, consectetur adipiscing elit.",
114 | "Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
115 | "Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
116 | ]
117 | },
118 | {
119 | "from": 1730347070000,
120 | "to": 1740347070445,
121 | "company": "Tesla",
122 | "role": "Senior Software Engineer",
123 | "logo": "https://companiesmarketcap.com/img/company-logos/64/TSLA.webp",
124 | "descriptions": [
125 | "Lorem Ipsum dolor sit amet, consectetur adipiscing elit.",
126 | "Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
127 | "Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
128 | ]
129 | },
130 | {
131 | "from": 1730347070000,
132 | "to": 1740347070445,
133 | "company": "Oracle",
134 | "role": "Senior Software Engineer",
135 | "logo": "https://companiesmarketcap.com/img/company-logos/64/ORCL.webp",
136 | "descriptions": [
137 | "Lorem Ipsum dolor sit amet, consectetur adipiscing elit.",
138 | "Lorem Ipsum sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
139 | "Lorem Ipsum ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
140 | ]
141 | }
142 | ]
143 | }
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import "tailwindcss";
2 |
3 | :root {
4 | font-family: "Inter", "Geist", system-ui, Avenir, Helvetica, Arial, sans-serif;
5 | line-height: 1.5;
6 | font-weight: 400;
7 |
8 | color-scheme: light dark;
9 | color: rgba(255, 255, 255, 0.87);
10 |
11 | font-synthesis: none;
12 | text-rendering: optimizeLegibility;
13 | -webkit-font-smoothing: antialiased;
14 | -moz-osx-font-smoothing: grayscale;
15 | }
16 |
17 | html {
18 | scroll-behavior: smooth;
19 | }
--------------------------------------------------------------------------------
/src/layouts/header.tsx:
--------------------------------------------------------------------------------
1 | import { FaAward, FaBrain, FaGraduationCap, FaHome, FaPaperPlane, FaProjectDiagram } from 'react-icons/fa';
2 | import WrapperBody from './wrapper';
3 | import { SecondaryButton } from '../components/button';
4 | import { DiReact } from 'react-icons/di';
5 |
6 | export default function Header() {
7 | const scrollTo = (elementId: string) => {
8 | const targetElement = document.querySelector(elementId);
9 | if (!targetElement) return;
10 | const headerHeight = 64;
11 | const elementPosition = targetElement.getBoundingClientRect().top + window.scrollY;
12 | const offsetPosition = elementPosition - headerHeight;
13 |
14 | window.scrollTo({
15 | top: offsetPosition,
16 | behavior: 'smooth'
17 | });
18 | };
19 |
20 | return (
21 |
22 |
23 |
24 |
25 | Vite.Dev
26 |
27 |
28 | scrollTo('#bio')} label="Bio" icon={} />
29 | scrollTo('#education')} label="Education" icon={} />
30 | scrollTo('#experience')} label="Experience" icon={} />
31 | scrollTo('#projects')} label="Projects" icon={} />
32 | scrollTo('#skills')} label="Skills" icon={} />
33 | scrollTo('#contacts')} label="Contacts" icon={} />
34 |
35 |
36 |
37 |
38 | )
39 | }
--------------------------------------------------------------------------------
/src/layouts/index.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 | import Header from "./header";
3 |
4 | export default function Layout({ children }: { children: ReactNode | Array }) {
5 | return (
6 |
7 |
8 |
9 | {children}
10 |
11 |
12 | )
13 | }
--------------------------------------------------------------------------------
/src/layouts/wrapper.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 |
3 | export default function WrapperBody({ children }: { children: ReactNode | Array }) {
4 | return (
5 |
6 | {children}
7 |
8 | )
9 | }
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from 'react'
2 | import { createRoot } from 'react-dom/client'
3 | import './index.css'
4 | import App from './App.tsx'
5 |
6 | createRoot(document.getElementById('root')!).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/src/pages/homepage/Bio.tsx:
--------------------------------------------------------------------------------
1 | import { PrimaryButton, SecondaryButton } from "../../components/button";
2 | import profile from "../../configs/portfolio.json";
3 | import WrapperBody from "../../layouts/wrapper";
4 |
5 | export default function Bio() {
6 | return (
7 |
8 |
9 |
10 |
👋 I'm {profile.name}
11 |
{profile.bio}
12 |
13 |
17 |
18 |
19 | );
20 | }
--------------------------------------------------------------------------------
/src/pages/homepage/Contacts.tsx:
--------------------------------------------------------------------------------
1 | import WrapperBody from "../../layouts/wrapper";
2 | import profile from "../../configs/portfolio.json";
3 | import { FaDiscord, FaEnvelope, FaGithub, FaLinkedin, FaPaperPlane, FaPhone, FaTelegram, FaTwitter } from "react-icons/fa";
4 |
5 | export default function Contacts() {
6 | return (
7 |
44 | )
45 | }
--------------------------------------------------------------------------------
/src/pages/homepage/Education.tsx:
--------------------------------------------------------------------------------
1 | import WrapperBody from "../../layouts/wrapper";
2 | import profile from "../../configs/portfolio.json";
3 | import { FaGraduationCap } from "react-icons/fa";
4 | import dayjs from "dayjs";
5 |
6 | export default function Education() {
7 | return (
8 |
9 |
10 |
11 |
Education
12 |
13 |
14 |

15 |
{profile.education.university}
16 |
17 |
Location:
18 | {profile.education.location}
19 |
20 |
21 |
Degree:
22 | {profile.education.degree}
23 |
24 |
25 |
Graduated:
26 | {dayjs(profile.education.graduation).format("MMM YYYY")}
27 |
28 |
29 |
Relevant Coursework:
30 | {profile.education.courseWork.join(', ')}
31 |
32 |
33 |
Senior Project:
34 | {profile.education.project}
35 |
36 |
37 |
38 |
39 |
40 |
41 | )
42 | }
--------------------------------------------------------------------------------
/src/pages/homepage/Experience.tsx:
--------------------------------------------------------------------------------
1 | import WrapperBody from "../../layouts/wrapper";
2 | import profile from "../../configs/portfolio.json";
3 | import { FaAward } from "react-icons/fa";
4 | import dayjs from "dayjs";
5 |
6 | export default function Experience() {
7 | return (
8 |
9 |
10 |
11 |
Experience
12 |
13 | {profile.experience.map((experience) => (
14 |
18 |
19 |

20 |
21 | {experience.company}
22 |
23 |
24 |
25 |
26 |
{experience.role}
27 |
28 | {dayjs(experience.from).format('MMM YYYY')} ~ {experience.to === 'present' ? 'Present' : dayjs(experience.to).format('MMM YYYY')}
29 |
30 |
31 |
32 | {experience.descriptions.map((description, index) => (
33 | -
34 | {description}
35 |
36 | ))}
37 |
38 |
39 |
40 | ))}
41 |
42 |
43 |
44 |
45 | )
46 | }
--------------------------------------------------------------------------------
/src/pages/homepage/Projects.tsx:
--------------------------------------------------------------------------------
1 | import WrapperBody from "../../layouts/wrapper";
2 | import profile from "../../configs/portfolio.json";
3 | import { FaProjectDiagram } from "react-icons/fa";
4 |
5 | export default function Projects() {
6 | return (
7 |
8 |
9 |
10 |
Projects
11 |
12 | {profile.projects.map((project) => (
13 |
17 |
18 |

19 |
{project.name}
20 |
{project.link}
21 |
{project.description}
22 |
23 |
24 | {project.skills?.map((skill) => (
25 |
{skill}
26 | ))}
27 |
28 |
29 | ))}
30 |
31 |
32 |
33 |
34 | )
35 | }
--------------------------------------------------------------------------------
/src/pages/homepage/Skills.tsx:
--------------------------------------------------------------------------------
1 | import WrapperBody from "../../layouts/wrapper";
2 | import profile from "../../configs/portfolio.json";
3 | import { FaBrain } from "react-icons/fa";
4 |
5 | export default function Skills() {
6 | const skillSection = (skillName: string, skills: Array) => (
7 |
8 |
{skillName}
9 | {skills.map((skill) => (
10 |
13 | ))}
14 |
15 | );
16 | return (
17 |
18 |
19 |
20 |
Skills
21 | {skillSection("Language", profile.skills.languages)}
22 | {skillSection("Frameworks", profile.skills.frameworks)}
23 |
24 |
25 |
26 | )
27 | }
--------------------------------------------------------------------------------
/src/pages/homepage/index.tsx:
--------------------------------------------------------------------------------
1 | import Layout from "../../layouts";
2 | import Bio from "./Bio";
3 | import Contacts from "./Contacts";
4 | import Education from "./Education";
5 | import Experience from "./Experience";
6 | import Projects from "./Projects";
7 | import Skills from "./Skills";
8 |
9 | export default function Homepage() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | )
20 | }
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import react from "@vitejs/plugin-react";
3 | import tailwindcss from "@tailwindcss/vite";
4 |
5 | // https://vite.dev/config/
6 | export default defineConfig({
7 | plugins: [react(), tailwindcss()],
8 | });
9 |
--------------------------------------------------------------------------------