algorembrant commited on
Commit
da980ac
·
verified ·
1 Parent(s): 0e8af4c

Upload 23 files

Browse files
TextcodeEditor/.gitignore ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ dist-ssr
13
+ *.local
14
+
15
+ # Editor directories and files
16
+ .vscode/*
17
+ !.vscode/extensions.json
18
+ .idea
19
+ .DS_Store
20
+ *.suo
21
+ *.ntvs*
22
+ *.njsproj
23
+ *.sln
24
+ *.sw?
TextcodeEditor/README.md ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # React + TypeScript + Vite
2
+
3
+ This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
4
+
5
+ Currently, two official plugins are available:
6
+
7
+ - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
8
+ - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
9
+
10
+ ## React Compiler
11
+
12
+ The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
13
+
14
+ ## Expanding the ESLint configuration
15
+
16
+ If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
17
+
18
+ ```js
19
+ export default defineConfig([
20
+ globalIgnores(['dist']),
21
+ {
22
+ files: ['**/*.{ts,tsx}'],
23
+ extends: [
24
+ // Other configs...
25
+
26
+ // Remove tseslint.configs.recommended and replace with this
27
+ tseslint.configs.recommendedTypeChecked,
28
+ // Alternatively, use this for stricter rules
29
+ tseslint.configs.strictTypeChecked,
30
+ // Optionally, add this for stylistic rules
31
+ tseslint.configs.stylisticTypeChecked,
32
+
33
+ // Other configs...
34
+ ],
35
+ languageOptions: {
36
+ parserOptions: {
37
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
38
+ tsconfigRootDir: import.meta.dirname,
39
+ },
40
+ // other options...
41
+ },
42
+ },
43
+ ])
44
+ ```
45
+
46
+ You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
47
+
48
+ ```js
49
+ // eslint.config.js
50
+ import reactX from 'eslint-plugin-react-x'
51
+ import reactDom from 'eslint-plugin-react-dom'
52
+
53
+ export default defineConfig([
54
+ globalIgnores(['dist']),
55
+ {
56
+ files: ['**/*.{ts,tsx}'],
57
+ extends: [
58
+ // Other configs...
59
+ // Enable lint rules for React
60
+ reactX.configs['recommended-typescript'],
61
+ // Enable lint rules for React DOM
62
+ reactDom.configs.recommended,
63
+ ],
64
+ languageOptions: {
65
+ parserOptions: {
66
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
67
+ tsconfigRootDir: import.meta.dirname,
68
+ },
69
+ // other options...
70
+ },
71
+ },
72
+ ])
73
+ ```
TextcodeEditor/database.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ \begin{define}
2
+ \setfont{Consolas}
3
+ \textcolor{#FFE5B4!50}{candle_extreme}
4
+ \textcolor{#FF0000!50}{candle_low}
5
+ \textcolor{#0000FF!50}{candle_high}
6
+ \texthighlight{#008080!20}{quick}
7
+ \texthighlight{#008080!20}{brown fox}
8
+ \texthighlight{#008080!20}{`...`}
9
+ \texthighlight{#008080!10}{{...}}
10
+ \texthighlight{#800000!20}{[...]}
11
+ \texthighlight{#008015!20}{(...)}
12
+ \texthighlight{#3B5250!20}{p_0^{high}}
13
+ \texthighlight{#AC5420!20}{p_0^{low}}
14
+ \texthighlight{#742C4D!20}{p_{-1}^{high}}
15
+ \texthighlight{#52E40E!20}{p_{-1}^{low}}
16
+ \texthighlight{#79A8BA!20}{-->}
17
+ \end{define}
18
+
19
+
20
+
21
+ \sigma = \sqrt{\underbrace{\frac{1}{T}\sum_{t=1}^{T} \left(rt - \underbrace{\left(\frac{1}{T}\sum{t=1}^{T}rt\right)}{\overline{r}}\right)^2t}{\text{Var}(\varepsilon), \quad{\text{average}}}}, \quad \text{volatility, standard deviation}\\
22
+ \sigma^\text{drag}=\underbrace{\left(\frac{1}{T}\sum_{t=1}^{T}rt\right)}{\overline{r}, \quad{\text{arithmetic mean return}}} - \underbrace{\left(1 -\underbrace{\left(\prod_{t=1}^T(1+rt) \right)^{\frac{1}{T}}}{\text{geometric mean gross return factor}}\right)}_{\text{geometric mean return}}, \quad \text{volatility drag}
23
+
24
+
25
+ if `p_0^{high} > p_0^{low} > p_{-1}^{high} > p_{-1}^{low}` then assign `adjustedExtreme` at p_0^{high} --> migrates into new price,
26
+ if `p_{-1}^{high} > p_{-1}^{low} > p_0^{high} > p_0^{low}` then assign `adjustedExtreme` at p_0^{low} --> migrates into new price,
27
+ if `p_0^{high} > p_{-1}^{high} > p_0^{low} > p_{-1}^{low}` then assign `adjustedExtreme` at p_0^{high} --> migrates into new price,
28
+ if `p_{-1}^{high} > p_0^{high} > p_{-1}^{low} > p_0^{low}` then assign `adjustedExtreme` at p_0^{low} --> migrates into new price,
29
+ if `p_0^{high} > p_{-1}^{high} > p_{-1}^{low} > p_0^{low}` then assign `adjustedExtreme` at p_0^{low} only if (p_{-1}^{low} - p_0^{low}) > (p_0^{high} - p_{-1}^{high}) --> migrates into new price,
30
+ if `p_0^{high} > p_{-1}^{high} > p_{-1}^{low} > p_0^{low}` then assign `adjustedExtreme` at p_0^{high} only if (p_0^{high} - p_{-1}^{high}) > (p_{-1}^{low} - p_0^{low}) --> migrates into new price,
31
+ if `p_{-1}^{high} > p_0^{high} > p_0^{low} > p_{-1}^{low}` then assign the same price as the `adjustedExtreme` of p_{-1} --> did not migrate,
32
+
33
+
34
+ make a one time series indicator of adjustedExtreme, plot it using one lineplot, (and also mark as red arrow up absolute at the adjustedExtreme_low and teal arrow down absolute at the adjustedExtreme_high)
35
+
36
+ \nani[sample{sample sample (sample)}]
37
+ \text{sample(sample sample (sample sample (sample sample(sample(sample(sample))))sample)sample)sample}
38
+
39
+
40
+
TextcodeEditor/eslint.config.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ import { defineConfig, globalIgnores } from 'eslint/config'
7
+
8
+ export default defineConfig([
9
+ globalIgnores(['dist']),
10
+ {
11
+ files: ['**/*.{ts,tsx}'],
12
+ extends: [
13
+ js.configs.recommended,
14
+ tseslint.configs.recommended,
15
+ reactHooks.configs.flat.recommended,
16
+ reactRefresh.configs.vite,
17
+ ],
18
+ languageOptions: {
19
+ globals: globals.browser,
20
+ },
21
+ },
22
+ ])
TextcodeEditor/index.html ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>textcodeeditor</title>
8
+ </head>
9
+ <body>
10
+ <div id="root"></div>
11
+ <script type="module" src="/src/main.tsx"></script>
12
+ </body>
13
+ </html>
TextcodeEditor/package-lock.json ADDED
@@ -0,0 +1,2765 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "textcodeeditor",
3
+ "version": "0.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "textcodeeditor",
9
+ "version": "0.0.0",
10
+ "dependencies": {
11
+ "react": "^19.2.6",
12
+ "react-dom": "^19.2.6",
13
+ "react-icons": "^5.6.0",
14
+ "uuid": "^14.0.0"
15
+ },
16
+ "devDependencies": {
17
+ "@eslint/js": "^10.0.1",
18
+ "@types/node": "^24.12.3",
19
+ "@types/react": "^19.2.14",
20
+ "@types/react-dom": "^19.2.3",
21
+ "@vitejs/plugin-react": "^6.0.1",
22
+ "eslint": "^10.3.0",
23
+ "eslint-plugin-react-hooks": "^7.1.1",
24
+ "eslint-plugin-react-refresh": "^0.5.2",
25
+ "globals": "^17.6.0",
26
+ "typescript": "~6.0.2",
27
+ "typescript-eslint": "^8.59.2",
28
+ "vite": "^8.0.12"
29
+ }
30
+ },
31
+ "node_modules/@babel/code-frame": {
32
+ "version": "7.29.7",
33
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
34
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
35
+ "dev": true,
36
+ "license": "MIT",
37
+ "dependencies": {
38
+ "@babel/helper-validator-identifier": "^7.29.7",
39
+ "js-tokens": "^4.0.0",
40
+ "picocolors": "^1.1.1"
41
+ },
42
+ "engines": {
43
+ "node": ">=6.9.0"
44
+ }
45
+ },
46
+ "node_modules/@babel/compat-data": {
47
+ "version": "7.29.7",
48
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
49
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
50
+ "dev": true,
51
+ "license": "MIT",
52
+ "engines": {
53
+ "node": ">=6.9.0"
54
+ }
55
+ },
56
+ "node_modules/@babel/core": {
57
+ "version": "7.29.7",
58
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
59
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
60
+ "dev": true,
61
+ "license": "MIT",
62
+ "dependencies": {
63
+ "@babel/code-frame": "^7.29.7",
64
+ "@babel/generator": "^7.29.7",
65
+ "@babel/helper-compilation-targets": "^7.29.7",
66
+ "@babel/helper-module-transforms": "^7.29.7",
67
+ "@babel/helpers": "^7.29.7",
68
+ "@babel/parser": "^7.29.7",
69
+ "@babel/template": "^7.29.7",
70
+ "@babel/traverse": "^7.29.7",
71
+ "@babel/types": "^7.29.7",
72
+ "@jridgewell/remapping": "^2.3.5",
73
+ "convert-source-map": "^2.0.0",
74
+ "debug": "^4.1.0",
75
+ "gensync": "^1.0.0-beta.2",
76
+ "json5": "^2.2.3",
77
+ "semver": "^6.3.1"
78
+ },
79
+ "engines": {
80
+ "node": ">=6.9.0"
81
+ },
82
+ "funding": {
83
+ "type": "opencollective",
84
+ "url": "https://opencollective.com/babel"
85
+ }
86
+ },
87
+ "node_modules/@babel/generator": {
88
+ "version": "7.29.7",
89
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz",
90
+ "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
91
+ "dev": true,
92
+ "license": "MIT",
93
+ "dependencies": {
94
+ "@babel/parser": "^7.29.7",
95
+ "@babel/types": "^7.29.7",
96
+ "@jridgewell/gen-mapping": "^0.3.12",
97
+ "@jridgewell/trace-mapping": "^0.3.28",
98
+ "jsesc": "^3.0.2"
99
+ },
100
+ "engines": {
101
+ "node": ">=6.9.0"
102
+ }
103
+ },
104
+ "node_modules/@babel/helper-compilation-targets": {
105
+ "version": "7.29.7",
106
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
107
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
108
+ "dev": true,
109
+ "license": "MIT",
110
+ "dependencies": {
111
+ "@babel/compat-data": "^7.29.7",
112
+ "@babel/helper-validator-option": "^7.29.7",
113
+ "browserslist": "^4.24.0",
114
+ "lru-cache": "^5.1.1",
115
+ "semver": "^6.3.1"
116
+ },
117
+ "engines": {
118
+ "node": ">=6.9.0"
119
+ }
120
+ },
121
+ "node_modules/@babel/helper-globals": {
122
+ "version": "7.29.7",
123
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
124
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
125
+ "dev": true,
126
+ "license": "MIT",
127
+ "engines": {
128
+ "node": ">=6.9.0"
129
+ }
130
+ },
131
+ "node_modules/@babel/helper-module-imports": {
132
+ "version": "7.29.7",
133
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
134
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
135
+ "dev": true,
136
+ "license": "MIT",
137
+ "dependencies": {
138
+ "@babel/traverse": "^7.29.7",
139
+ "@babel/types": "^7.29.7"
140
+ },
141
+ "engines": {
142
+ "node": ">=6.9.0"
143
+ }
144
+ },
145
+ "node_modules/@babel/helper-module-transforms": {
146
+ "version": "7.29.7",
147
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
148
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
149
+ "dev": true,
150
+ "license": "MIT",
151
+ "dependencies": {
152
+ "@babel/helper-module-imports": "^7.29.7",
153
+ "@babel/helper-validator-identifier": "^7.29.7",
154
+ "@babel/traverse": "^7.29.7"
155
+ },
156
+ "engines": {
157
+ "node": ">=6.9.0"
158
+ },
159
+ "peerDependencies": {
160
+ "@babel/core": "^7.0.0"
161
+ }
162
+ },
163
+ "node_modules/@babel/helper-string-parser": {
164
+ "version": "7.29.7",
165
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
166
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
167
+ "dev": true,
168
+ "license": "MIT",
169
+ "engines": {
170
+ "node": ">=6.9.0"
171
+ }
172
+ },
173
+ "node_modules/@babel/helper-validator-identifier": {
174
+ "version": "7.29.7",
175
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
176
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
177
+ "dev": true,
178
+ "license": "MIT",
179
+ "engines": {
180
+ "node": ">=6.9.0"
181
+ }
182
+ },
183
+ "node_modules/@babel/helper-validator-option": {
184
+ "version": "7.29.7",
185
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
186
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
187
+ "dev": true,
188
+ "license": "MIT",
189
+ "engines": {
190
+ "node": ">=6.9.0"
191
+ }
192
+ },
193
+ "node_modules/@babel/helpers": {
194
+ "version": "7.29.7",
195
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
196
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
197
+ "dev": true,
198
+ "license": "MIT",
199
+ "dependencies": {
200
+ "@babel/template": "^7.29.7",
201
+ "@babel/types": "^7.29.7"
202
+ },
203
+ "engines": {
204
+ "node": ">=6.9.0"
205
+ }
206
+ },
207
+ "node_modules/@babel/parser": {
208
+ "version": "7.29.7",
209
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
210
+ "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
211
+ "dev": true,
212
+ "license": "MIT",
213
+ "dependencies": {
214
+ "@babel/types": "^7.29.7"
215
+ },
216
+ "bin": {
217
+ "parser": "bin/babel-parser.js"
218
+ },
219
+ "engines": {
220
+ "node": ">=6.0.0"
221
+ }
222
+ },
223
+ "node_modules/@babel/template": {
224
+ "version": "7.29.7",
225
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
226
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
227
+ "dev": true,
228
+ "license": "MIT",
229
+ "dependencies": {
230
+ "@babel/code-frame": "^7.29.7",
231
+ "@babel/parser": "^7.29.7",
232
+ "@babel/types": "^7.29.7"
233
+ },
234
+ "engines": {
235
+ "node": ">=6.9.0"
236
+ }
237
+ },
238
+ "node_modules/@babel/traverse": {
239
+ "version": "7.29.7",
240
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz",
241
+ "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
242
+ "dev": true,
243
+ "license": "MIT",
244
+ "dependencies": {
245
+ "@babel/code-frame": "^7.29.7",
246
+ "@babel/generator": "^7.29.7",
247
+ "@babel/helper-globals": "^7.29.7",
248
+ "@babel/parser": "^7.29.7",
249
+ "@babel/template": "^7.29.7",
250
+ "@babel/types": "^7.29.7",
251
+ "debug": "^4.3.1"
252
+ },
253
+ "engines": {
254
+ "node": ">=6.9.0"
255
+ }
256
+ },
257
+ "node_modules/@babel/types": {
258
+ "version": "7.29.7",
259
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
260
+ "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
261
+ "dev": true,
262
+ "license": "MIT",
263
+ "dependencies": {
264
+ "@babel/helper-string-parser": "^7.29.7",
265
+ "@babel/helper-validator-identifier": "^7.29.7"
266
+ },
267
+ "engines": {
268
+ "node": ">=6.9.0"
269
+ }
270
+ },
271
+ "node_modules/@emnapi/core": {
272
+ "version": "1.10.0",
273
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
274
+ "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
275
+ "dev": true,
276
+ "license": "MIT",
277
+ "optional": true,
278
+ "dependencies": {
279
+ "@emnapi/wasi-threads": "1.2.1",
280
+ "tslib": "^2.4.0"
281
+ }
282
+ },
283
+ "node_modules/@emnapi/runtime": {
284
+ "version": "1.10.0",
285
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
286
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
287
+ "dev": true,
288
+ "license": "MIT",
289
+ "optional": true,
290
+ "dependencies": {
291
+ "tslib": "^2.4.0"
292
+ }
293
+ },
294
+ "node_modules/@emnapi/wasi-threads": {
295
+ "version": "1.2.1",
296
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
297
+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
298
+ "dev": true,
299
+ "license": "MIT",
300
+ "optional": true,
301
+ "dependencies": {
302
+ "tslib": "^2.4.0"
303
+ }
304
+ },
305
+ "node_modules/@eslint-community/eslint-utils": {
306
+ "version": "4.9.1",
307
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
308
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
309
+ "dev": true,
310
+ "license": "MIT",
311
+ "dependencies": {
312
+ "eslint-visitor-keys": "^3.4.3"
313
+ },
314
+ "engines": {
315
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
316
+ },
317
+ "funding": {
318
+ "url": "https://opencollective.com/eslint"
319
+ },
320
+ "peerDependencies": {
321
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
322
+ }
323
+ },
324
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
325
+ "version": "3.4.3",
326
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
327
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
328
+ "dev": true,
329
+ "license": "Apache-2.0",
330
+ "engines": {
331
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
332
+ },
333
+ "funding": {
334
+ "url": "https://opencollective.com/eslint"
335
+ }
336
+ },
337
+ "node_modules/@eslint-community/regexpp": {
338
+ "version": "4.12.2",
339
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
340
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
341
+ "dev": true,
342
+ "license": "MIT",
343
+ "engines": {
344
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
345
+ }
346
+ },
347
+ "node_modules/@eslint/config-array": {
348
+ "version": "0.23.5",
349
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz",
350
+ "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==",
351
+ "dev": true,
352
+ "license": "Apache-2.0",
353
+ "dependencies": {
354
+ "@eslint/object-schema": "^3.0.5",
355
+ "debug": "^4.3.1",
356
+ "minimatch": "^10.2.4"
357
+ },
358
+ "engines": {
359
+ "node": "^20.19.0 || ^22.13.0 || >=24"
360
+ }
361
+ },
362
+ "node_modules/@eslint/config-helpers": {
363
+ "version": "0.6.0",
364
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz",
365
+ "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==",
366
+ "dev": true,
367
+ "license": "Apache-2.0",
368
+ "dependencies": {
369
+ "@eslint/core": "^1.2.1"
370
+ },
371
+ "engines": {
372
+ "node": "^20.19.0 || ^22.13.0 || >=24"
373
+ }
374
+ },
375
+ "node_modules/@eslint/core": {
376
+ "version": "1.2.1",
377
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz",
378
+ "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==",
379
+ "dev": true,
380
+ "license": "Apache-2.0",
381
+ "dependencies": {
382
+ "@types/json-schema": "^7.0.15"
383
+ },
384
+ "engines": {
385
+ "node": "^20.19.0 || ^22.13.0 || >=24"
386
+ }
387
+ },
388
+ "node_modules/@eslint/js": {
389
+ "version": "10.0.1",
390
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz",
391
+ "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==",
392
+ "dev": true,
393
+ "license": "MIT",
394
+ "engines": {
395
+ "node": "^20.19.0 || ^22.13.0 || >=24"
396
+ },
397
+ "funding": {
398
+ "url": "https://eslint.org/donate"
399
+ },
400
+ "peerDependencies": {
401
+ "eslint": "^10.0.0"
402
+ },
403
+ "peerDependenciesMeta": {
404
+ "eslint": {
405
+ "optional": true
406
+ }
407
+ }
408
+ },
409
+ "node_modules/@eslint/object-schema": {
410
+ "version": "3.0.5",
411
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz",
412
+ "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==",
413
+ "dev": true,
414
+ "license": "Apache-2.0",
415
+ "engines": {
416
+ "node": "^20.19.0 || ^22.13.0 || >=24"
417
+ }
418
+ },
419
+ "node_modules/@eslint/plugin-kit": {
420
+ "version": "0.7.2",
421
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz",
422
+ "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==",
423
+ "dev": true,
424
+ "license": "Apache-2.0",
425
+ "dependencies": {
426
+ "@eslint/core": "^1.2.1",
427
+ "levn": "^0.4.1"
428
+ },
429
+ "engines": {
430
+ "node": "^20.19.0 || ^22.13.0 || >=24"
431
+ }
432
+ },
433
+ "node_modules/@humanfs/core": {
434
+ "version": "0.19.2",
435
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
436
+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
437
+ "dev": true,
438
+ "license": "Apache-2.0",
439
+ "dependencies": {
440
+ "@humanfs/types": "^0.15.0"
441
+ },
442
+ "engines": {
443
+ "node": ">=18.18.0"
444
+ }
445
+ },
446
+ "node_modules/@humanfs/node": {
447
+ "version": "0.16.8",
448
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
449
+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
450
+ "dev": true,
451
+ "license": "Apache-2.0",
452
+ "dependencies": {
453
+ "@humanfs/core": "^0.19.2",
454
+ "@humanfs/types": "^0.15.0",
455
+ "@humanwhocodes/retry": "^0.4.0"
456
+ },
457
+ "engines": {
458
+ "node": ">=18.18.0"
459
+ }
460
+ },
461
+ "node_modules/@humanfs/types": {
462
+ "version": "0.15.0",
463
+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
464
+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
465
+ "dev": true,
466
+ "license": "Apache-2.0",
467
+ "engines": {
468
+ "node": ">=18.18.0"
469
+ }
470
+ },
471
+ "node_modules/@humanwhocodes/module-importer": {
472
+ "version": "1.0.1",
473
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
474
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
475
+ "dev": true,
476
+ "license": "Apache-2.0",
477
+ "engines": {
478
+ "node": ">=12.22"
479
+ },
480
+ "funding": {
481
+ "type": "github",
482
+ "url": "https://github.com/sponsors/nzakas"
483
+ }
484
+ },
485
+ "node_modules/@humanwhocodes/retry": {
486
+ "version": "0.4.3",
487
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
488
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
489
+ "dev": true,
490
+ "license": "Apache-2.0",
491
+ "engines": {
492
+ "node": ">=18.18"
493
+ },
494
+ "funding": {
495
+ "type": "github",
496
+ "url": "https://github.com/sponsors/nzakas"
497
+ }
498
+ },
499
+ "node_modules/@jridgewell/gen-mapping": {
500
+ "version": "0.3.13",
501
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
502
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
503
+ "dev": true,
504
+ "license": "MIT",
505
+ "dependencies": {
506
+ "@jridgewell/sourcemap-codec": "^1.5.0",
507
+ "@jridgewell/trace-mapping": "^0.3.24"
508
+ }
509
+ },
510
+ "node_modules/@jridgewell/remapping": {
511
+ "version": "2.3.5",
512
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
513
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
514
+ "dev": true,
515
+ "license": "MIT",
516
+ "dependencies": {
517
+ "@jridgewell/gen-mapping": "^0.3.5",
518
+ "@jridgewell/trace-mapping": "^0.3.24"
519
+ }
520
+ },
521
+ "node_modules/@jridgewell/resolve-uri": {
522
+ "version": "3.1.2",
523
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
524
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
525
+ "dev": true,
526
+ "license": "MIT",
527
+ "engines": {
528
+ "node": ">=6.0.0"
529
+ }
530
+ },
531
+ "node_modules/@jridgewell/sourcemap-codec": {
532
+ "version": "1.5.5",
533
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
534
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
535
+ "dev": true,
536
+ "license": "MIT"
537
+ },
538
+ "node_modules/@jridgewell/trace-mapping": {
539
+ "version": "0.3.31",
540
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
541
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
542
+ "dev": true,
543
+ "license": "MIT",
544
+ "dependencies": {
545
+ "@jridgewell/resolve-uri": "^3.1.0",
546
+ "@jridgewell/sourcemap-codec": "^1.4.14"
547
+ }
548
+ },
549
+ "node_modules/@napi-rs/wasm-runtime": {
550
+ "version": "1.1.5",
551
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz",
552
+ "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==",
553
+ "dev": true,
554
+ "license": "MIT",
555
+ "optional": true,
556
+ "dependencies": {
557
+ "@tybys/wasm-util": "^0.10.2"
558
+ },
559
+ "funding": {
560
+ "type": "github",
561
+ "url": "https://github.com/sponsors/Brooooooklyn"
562
+ },
563
+ "peerDependencies": {
564
+ "@emnapi/core": "^1.7.1",
565
+ "@emnapi/runtime": "^1.7.1"
566
+ }
567
+ },
568
+ "node_modules/@oxc-project/types": {
569
+ "version": "0.133.0",
570
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz",
571
+ "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==",
572
+ "dev": true,
573
+ "license": "MIT",
574
+ "funding": {
575
+ "url": "https://github.com/sponsors/Boshen"
576
+ }
577
+ },
578
+ "node_modules/@rolldown/binding-android-arm64": {
579
+ "version": "1.0.3",
580
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz",
581
+ "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==",
582
+ "cpu": [
583
+ "arm64"
584
+ ],
585
+ "dev": true,
586
+ "license": "MIT",
587
+ "optional": true,
588
+ "os": [
589
+ "android"
590
+ ],
591
+ "engines": {
592
+ "node": "^20.19.0 || >=22.12.0"
593
+ }
594
+ },
595
+ "node_modules/@rolldown/binding-darwin-arm64": {
596
+ "version": "1.0.3",
597
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz",
598
+ "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==",
599
+ "cpu": [
600
+ "arm64"
601
+ ],
602
+ "dev": true,
603
+ "license": "MIT",
604
+ "optional": true,
605
+ "os": [
606
+ "darwin"
607
+ ],
608
+ "engines": {
609
+ "node": "^20.19.0 || >=22.12.0"
610
+ }
611
+ },
612
+ "node_modules/@rolldown/binding-darwin-x64": {
613
+ "version": "1.0.3",
614
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz",
615
+ "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==",
616
+ "cpu": [
617
+ "x64"
618
+ ],
619
+ "dev": true,
620
+ "license": "MIT",
621
+ "optional": true,
622
+ "os": [
623
+ "darwin"
624
+ ],
625
+ "engines": {
626
+ "node": "^20.19.0 || >=22.12.0"
627
+ }
628
+ },
629
+ "node_modules/@rolldown/binding-freebsd-x64": {
630
+ "version": "1.0.3",
631
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz",
632
+ "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==",
633
+ "cpu": [
634
+ "x64"
635
+ ],
636
+ "dev": true,
637
+ "license": "MIT",
638
+ "optional": true,
639
+ "os": [
640
+ "freebsd"
641
+ ],
642
+ "engines": {
643
+ "node": "^20.19.0 || >=22.12.0"
644
+ }
645
+ },
646
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
647
+ "version": "1.0.3",
648
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz",
649
+ "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==",
650
+ "cpu": [
651
+ "arm"
652
+ ],
653
+ "dev": true,
654
+ "license": "MIT",
655
+ "optional": true,
656
+ "os": [
657
+ "linux"
658
+ ],
659
+ "engines": {
660
+ "node": "^20.19.0 || >=22.12.0"
661
+ }
662
+ },
663
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
664
+ "version": "1.0.3",
665
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz",
666
+ "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==",
667
+ "cpu": [
668
+ "arm64"
669
+ ],
670
+ "dev": true,
671
+ "license": "MIT",
672
+ "optional": true,
673
+ "os": [
674
+ "linux"
675
+ ],
676
+ "engines": {
677
+ "node": "^20.19.0 || >=22.12.0"
678
+ }
679
+ },
680
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
681
+ "version": "1.0.3",
682
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz",
683
+ "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==",
684
+ "cpu": [
685
+ "arm64"
686
+ ],
687
+ "dev": true,
688
+ "license": "MIT",
689
+ "optional": true,
690
+ "os": [
691
+ "linux"
692
+ ],
693
+ "engines": {
694
+ "node": "^20.19.0 || >=22.12.0"
695
+ }
696
+ },
697
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
698
+ "version": "1.0.3",
699
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz",
700
+ "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==",
701
+ "cpu": [
702
+ "ppc64"
703
+ ],
704
+ "dev": true,
705
+ "license": "MIT",
706
+ "optional": true,
707
+ "os": [
708
+ "linux"
709
+ ],
710
+ "engines": {
711
+ "node": "^20.19.0 || >=22.12.0"
712
+ }
713
+ },
714
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
715
+ "version": "1.0.3",
716
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz",
717
+ "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==",
718
+ "cpu": [
719
+ "s390x"
720
+ ],
721
+ "dev": true,
722
+ "license": "MIT",
723
+ "optional": true,
724
+ "os": [
725
+ "linux"
726
+ ],
727
+ "engines": {
728
+ "node": "^20.19.0 || >=22.12.0"
729
+ }
730
+ },
731
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
732
+ "version": "1.0.3",
733
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz",
734
+ "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==",
735
+ "cpu": [
736
+ "x64"
737
+ ],
738
+ "dev": true,
739
+ "license": "MIT",
740
+ "optional": true,
741
+ "os": [
742
+ "linux"
743
+ ],
744
+ "engines": {
745
+ "node": "^20.19.0 || >=22.12.0"
746
+ }
747
+ },
748
+ "node_modules/@rolldown/binding-linux-x64-musl": {
749
+ "version": "1.0.3",
750
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz",
751
+ "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==",
752
+ "cpu": [
753
+ "x64"
754
+ ],
755
+ "dev": true,
756
+ "license": "MIT",
757
+ "optional": true,
758
+ "os": [
759
+ "linux"
760
+ ],
761
+ "engines": {
762
+ "node": "^20.19.0 || >=22.12.0"
763
+ }
764
+ },
765
+ "node_modules/@rolldown/binding-openharmony-arm64": {
766
+ "version": "1.0.3",
767
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz",
768
+ "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==",
769
+ "cpu": [
770
+ "arm64"
771
+ ],
772
+ "dev": true,
773
+ "license": "MIT",
774
+ "optional": true,
775
+ "os": [
776
+ "openharmony"
777
+ ],
778
+ "engines": {
779
+ "node": "^20.19.0 || >=22.12.0"
780
+ }
781
+ },
782
+ "node_modules/@rolldown/binding-wasm32-wasi": {
783
+ "version": "1.0.3",
784
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz",
785
+ "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==",
786
+ "cpu": [
787
+ "wasm32"
788
+ ],
789
+ "dev": true,
790
+ "license": "MIT",
791
+ "optional": true,
792
+ "dependencies": {
793
+ "@emnapi/core": "1.10.0",
794
+ "@emnapi/runtime": "1.10.0",
795
+ "@napi-rs/wasm-runtime": "^1.1.4"
796
+ },
797
+ "engines": {
798
+ "node": "^20.19.0 || >=22.12.0"
799
+ }
800
+ },
801
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
802
+ "version": "1.0.3",
803
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz",
804
+ "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==",
805
+ "cpu": [
806
+ "arm64"
807
+ ],
808
+ "dev": true,
809
+ "license": "MIT",
810
+ "optional": true,
811
+ "os": [
812
+ "win32"
813
+ ],
814
+ "engines": {
815
+ "node": "^20.19.0 || >=22.12.0"
816
+ }
817
+ },
818
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
819
+ "version": "1.0.3",
820
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz",
821
+ "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==",
822
+ "cpu": [
823
+ "x64"
824
+ ],
825
+ "dev": true,
826
+ "license": "MIT",
827
+ "optional": true,
828
+ "os": [
829
+ "win32"
830
+ ],
831
+ "engines": {
832
+ "node": "^20.19.0 || >=22.12.0"
833
+ }
834
+ },
835
+ "node_modules/@rolldown/pluginutils": {
836
+ "version": "1.0.1",
837
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
838
+ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
839
+ "dev": true,
840
+ "license": "MIT"
841
+ },
842
+ "node_modules/@tybys/wasm-util": {
843
+ "version": "0.10.2",
844
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
845
+ "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
846
+ "dev": true,
847
+ "license": "MIT",
848
+ "optional": true,
849
+ "dependencies": {
850
+ "tslib": "^2.4.0"
851
+ }
852
+ },
853
+ "node_modules/@types/esrecurse": {
854
+ "version": "4.3.1",
855
+ "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
856
+ "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==",
857
+ "dev": true,
858
+ "license": "MIT"
859
+ },
860
+ "node_modules/@types/estree": {
861
+ "version": "1.0.9",
862
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
863
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
864
+ "dev": true,
865
+ "license": "MIT"
866
+ },
867
+ "node_modules/@types/json-schema": {
868
+ "version": "7.0.15",
869
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
870
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
871
+ "dev": true,
872
+ "license": "MIT"
873
+ },
874
+ "node_modules/@types/node": {
875
+ "version": "24.13.2",
876
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz",
877
+ "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==",
878
+ "dev": true,
879
+ "license": "MIT",
880
+ "dependencies": {
881
+ "undici-types": "~7.18.0"
882
+ }
883
+ },
884
+ "node_modules/@types/react": {
885
+ "version": "19.2.17",
886
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
887
+ "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
888
+ "dev": true,
889
+ "license": "MIT",
890
+ "dependencies": {
891
+ "csstype": "^3.2.2"
892
+ }
893
+ },
894
+ "node_modules/@types/react-dom": {
895
+ "version": "19.2.3",
896
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
897
+ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
898
+ "dev": true,
899
+ "license": "MIT",
900
+ "peerDependencies": {
901
+ "@types/react": "^19.2.0"
902
+ }
903
+ },
904
+ "node_modules/@typescript-eslint/eslint-plugin": {
905
+ "version": "8.61.1",
906
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.1.tgz",
907
+ "integrity": "sha512-ZPlVl3PB3et/59Ne0fv/sci6ZXz4T4Hp4nTJ56i/Y0gR89ARb+KphojTq6j+56E5PIezmOIOOWyY+aWQFd+IkQ==",
908
+ "dev": true,
909
+ "license": "MIT",
910
+ "dependencies": {
911
+ "@eslint-community/regexpp": "^4.12.2",
912
+ "@typescript-eslint/scope-manager": "8.61.1",
913
+ "@typescript-eslint/type-utils": "8.61.1",
914
+ "@typescript-eslint/utils": "8.61.1",
915
+ "@typescript-eslint/visitor-keys": "8.61.1",
916
+ "ignore": "^7.0.5",
917
+ "natural-compare": "^1.4.0",
918
+ "ts-api-utils": "^2.5.0"
919
+ },
920
+ "engines": {
921
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
922
+ },
923
+ "funding": {
924
+ "type": "opencollective",
925
+ "url": "https://opencollective.com/typescript-eslint"
926
+ },
927
+ "peerDependencies": {
928
+ "@typescript-eslint/parser": "^8.61.1",
929
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
930
+ "typescript": ">=4.8.4 <6.1.0"
931
+ }
932
+ },
933
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
934
+ "version": "7.0.5",
935
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
936
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
937
+ "dev": true,
938
+ "license": "MIT",
939
+ "engines": {
940
+ "node": ">= 4"
941
+ }
942
+ },
943
+ "node_modules/@typescript-eslint/parser": {
944
+ "version": "8.61.1",
945
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.1.tgz",
946
+ "integrity": "sha512-PJ5vePq5/ognBbrIcoC5+SHO5dfpeLPzP9FpLkzWrguoYQEeeSjlJpVwOpo1JRSTEi7dRcwNy4h4dzV70PqHcg==",
947
+ "dev": true,
948
+ "license": "MIT",
949
+ "dependencies": {
950
+ "@typescript-eslint/scope-manager": "8.61.1",
951
+ "@typescript-eslint/types": "8.61.1",
952
+ "@typescript-eslint/typescript-estree": "8.61.1",
953
+ "@typescript-eslint/visitor-keys": "8.61.1",
954
+ "debug": "^4.4.3"
955
+ },
956
+ "engines": {
957
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
958
+ },
959
+ "funding": {
960
+ "type": "opencollective",
961
+ "url": "https://opencollective.com/typescript-eslint"
962
+ },
963
+ "peerDependencies": {
964
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
965
+ "typescript": ">=4.8.4 <6.1.0"
966
+ }
967
+ },
968
+ "node_modules/@typescript-eslint/project-service": {
969
+ "version": "8.61.1",
970
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.1.tgz",
971
+ "integrity": "sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA==",
972
+ "dev": true,
973
+ "license": "MIT",
974
+ "dependencies": {
975
+ "@typescript-eslint/tsconfig-utils": "^8.61.1",
976
+ "@typescript-eslint/types": "^8.61.1",
977
+ "debug": "^4.4.3"
978
+ },
979
+ "engines": {
980
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
981
+ },
982
+ "funding": {
983
+ "type": "opencollective",
984
+ "url": "https://opencollective.com/typescript-eslint"
985
+ },
986
+ "peerDependencies": {
987
+ "typescript": ">=4.8.4 <6.1.0"
988
+ }
989
+ },
990
+ "node_modules/@typescript-eslint/scope-manager": {
991
+ "version": "8.61.1",
992
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.1.tgz",
993
+ "integrity": "sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==",
994
+ "dev": true,
995
+ "license": "MIT",
996
+ "dependencies": {
997
+ "@typescript-eslint/types": "8.61.1",
998
+ "@typescript-eslint/visitor-keys": "8.61.1"
999
+ },
1000
+ "engines": {
1001
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1002
+ },
1003
+ "funding": {
1004
+ "type": "opencollective",
1005
+ "url": "https://opencollective.com/typescript-eslint"
1006
+ }
1007
+ },
1008
+ "node_modules/@typescript-eslint/tsconfig-utils": {
1009
+ "version": "8.61.1",
1010
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.1.tgz",
1011
+ "integrity": "sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg==",
1012
+ "dev": true,
1013
+ "license": "MIT",
1014
+ "engines": {
1015
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1016
+ },
1017
+ "funding": {
1018
+ "type": "opencollective",
1019
+ "url": "https://opencollective.com/typescript-eslint"
1020
+ },
1021
+ "peerDependencies": {
1022
+ "typescript": ">=4.8.4 <6.1.0"
1023
+ }
1024
+ },
1025
+ "node_modules/@typescript-eslint/type-utils": {
1026
+ "version": "8.61.1",
1027
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.1.tgz",
1028
+ "integrity": "sha512-GYRicKmVK0C4fsKgaACaknOUAq9Oa2kwsjnpFhFcS/5p4Ht5IP9OVLbgIgcK4SRk92nVHFluurg1lumD9dBcLw==",
1029
+ "dev": true,
1030
+ "license": "MIT",
1031
+ "dependencies": {
1032
+ "@typescript-eslint/types": "8.61.1",
1033
+ "@typescript-eslint/typescript-estree": "8.61.1",
1034
+ "@typescript-eslint/utils": "8.61.1",
1035
+ "debug": "^4.4.3",
1036
+ "ts-api-utils": "^2.5.0"
1037
+ },
1038
+ "engines": {
1039
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1040
+ },
1041
+ "funding": {
1042
+ "type": "opencollective",
1043
+ "url": "https://opencollective.com/typescript-eslint"
1044
+ },
1045
+ "peerDependencies": {
1046
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
1047
+ "typescript": ">=4.8.4 <6.1.0"
1048
+ }
1049
+ },
1050
+ "node_modules/@typescript-eslint/types": {
1051
+ "version": "8.61.1",
1052
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.1.tgz",
1053
+ "integrity": "sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==",
1054
+ "dev": true,
1055
+ "license": "MIT",
1056
+ "engines": {
1057
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1058
+ },
1059
+ "funding": {
1060
+ "type": "opencollective",
1061
+ "url": "https://opencollective.com/typescript-eslint"
1062
+ }
1063
+ },
1064
+ "node_modules/@typescript-eslint/typescript-estree": {
1065
+ "version": "8.61.1",
1066
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.1.tgz",
1067
+ "integrity": "sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg==",
1068
+ "dev": true,
1069
+ "license": "MIT",
1070
+ "dependencies": {
1071
+ "@typescript-eslint/project-service": "8.61.1",
1072
+ "@typescript-eslint/tsconfig-utils": "8.61.1",
1073
+ "@typescript-eslint/types": "8.61.1",
1074
+ "@typescript-eslint/visitor-keys": "8.61.1",
1075
+ "debug": "^4.4.3",
1076
+ "minimatch": "^10.2.2",
1077
+ "semver": "^7.7.3",
1078
+ "tinyglobby": "^0.2.15",
1079
+ "ts-api-utils": "^2.5.0"
1080
+ },
1081
+ "engines": {
1082
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1083
+ },
1084
+ "funding": {
1085
+ "type": "opencollective",
1086
+ "url": "https://opencollective.com/typescript-eslint"
1087
+ },
1088
+ "peerDependencies": {
1089
+ "typescript": ">=4.8.4 <6.1.0"
1090
+ }
1091
+ },
1092
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
1093
+ "version": "7.8.4",
1094
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
1095
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
1096
+ "dev": true,
1097
+ "license": "ISC",
1098
+ "bin": {
1099
+ "semver": "bin/semver.js"
1100
+ },
1101
+ "engines": {
1102
+ "node": ">=10"
1103
+ }
1104
+ },
1105
+ "node_modules/@typescript-eslint/utils": {
1106
+ "version": "8.61.1",
1107
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.1.tgz",
1108
+ "integrity": "sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA==",
1109
+ "dev": true,
1110
+ "license": "MIT",
1111
+ "dependencies": {
1112
+ "@eslint-community/eslint-utils": "^4.9.1",
1113
+ "@typescript-eslint/scope-manager": "8.61.1",
1114
+ "@typescript-eslint/types": "8.61.1",
1115
+ "@typescript-eslint/typescript-estree": "8.61.1"
1116
+ },
1117
+ "engines": {
1118
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1119
+ },
1120
+ "funding": {
1121
+ "type": "opencollective",
1122
+ "url": "https://opencollective.com/typescript-eslint"
1123
+ },
1124
+ "peerDependencies": {
1125
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
1126
+ "typescript": ">=4.8.4 <6.1.0"
1127
+ }
1128
+ },
1129
+ "node_modules/@typescript-eslint/visitor-keys": {
1130
+ "version": "8.61.1",
1131
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.1.tgz",
1132
+ "integrity": "sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==",
1133
+ "dev": true,
1134
+ "license": "MIT",
1135
+ "dependencies": {
1136
+ "@typescript-eslint/types": "8.61.1",
1137
+ "eslint-visitor-keys": "^5.0.0"
1138
+ },
1139
+ "engines": {
1140
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1141
+ },
1142
+ "funding": {
1143
+ "type": "opencollective",
1144
+ "url": "https://opencollective.com/typescript-eslint"
1145
+ }
1146
+ },
1147
+ "node_modules/@vitejs/plugin-react": {
1148
+ "version": "6.0.2",
1149
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz",
1150
+ "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==",
1151
+ "dev": true,
1152
+ "license": "MIT",
1153
+ "dependencies": {
1154
+ "@rolldown/pluginutils": "^1.0.0"
1155
+ },
1156
+ "engines": {
1157
+ "node": "^20.19.0 || >=22.12.0"
1158
+ },
1159
+ "peerDependencies": {
1160
+ "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0",
1161
+ "babel-plugin-react-compiler": "^1.0.0",
1162
+ "vite": "^8.0.0"
1163
+ },
1164
+ "peerDependenciesMeta": {
1165
+ "@rolldown/plugin-babel": {
1166
+ "optional": true
1167
+ },
1168
+ "babel-plugin-react-compiler": {
1169
+ "optional": true
1170
+ }
1171
+ }
1172
+ },
1173
+ "node_modules/acorn": {
1174
+ "version": "8.17.0",
1175
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
1176
+ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
1177
+ "dev": true,
1178
+ "license": "MIT",
1179
+ "bin": {
1180
+ "acorn": "bin/acorn"
1181
+ },
1182
+ "engines": {
1183
+ "node": ">=0.4.0"
1184
+ }
1185
+ },
1186
+ "node_modules/acorn-jsx": {
1187
+ "version": "5.3.2",
1188
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1189
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1190
+ "dev": true,
1191
+ "license": "MIT",
1192
+ "peerDependencies": {
1193
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1194
+ }
1195
+ },
1196
+ "node_modules/ajv": {
1197
+ "version": "6.15.0",
1198
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
1199
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
1200
+ "dev": true,
1201
+ "license": "MIT",
1202
+ "dependencies": {
1203
+ "fast-deep-equal": "^3.1.1",
1204
+ "fast-json-stable-stringify": "^2.0.0",
1205
+ "json-schema-traverse": "^0.4.1",
1206
+ "uri-js": "^4.2.2"
1207
+ },
1208
+ "funding": {
1209
+ "type": "github",
1210
+ "url": "https://github.com/sponsors/epoberezkin"
1211
+ }
1212
+ },
1213
+ "node_modules/balanced-match": {
1214
+ "version": "4.0.4",
1215
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
1216
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
1217
+ "dev": true,
1218
+ "license": "MIT",
1219
+ "engines": {
1220
+ "node": "18 || 20 || >=22"
1221
+ }
1222
+ },
1223
+ "node_modules/baseline-browser-mapping": {
1224
+ "version": "2.10.37",
1225
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.37.tgz",
1226
+ "integrity": "sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==",
1227
+ "dev": true,
1228
+ "license": "Apache-2.0",
1229
+ "bin": {
1230
+ "baseline-browser-mapping": "dist/cli.cjs"
1231
+ },
1232
+ "engines": {
1233
+ "node": ">=6.0.0"
1234
+ }
1235
+ },
1236
+ "node_modules/brace-expansion": {
1237
+ "version": "5.0.6",
1238
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
1239
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
1240
+ "dev": true,
1241
+ "license": "MIT",
1242
+ "dependencies": {
1243
+ "balanced-match": "^4.0.2"
1244
+ },
1245
+ "engines": {
1246
+ "node": "18 || 20 || >=22"
1247
+ }
1248
+ },
1249
+ "node_modules/browserslist": {
1250
+ "version": "4.28.2",
1251
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
1252
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
1253
+ "dev": true,
1254
+ "funding": [
1255
+ {
1256
+ "type": "opencollective",
1257
+ "url": "https://opencollective.com/browserslist"
1258
+ },
1259
+ {
1260
+ "type": "tidelift",
1261
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
1262
+ },
1263
+ {
1264
+ "type": "github",
1265
+ "url": "https://github.com/sponsors/ai"
1266
+ }
1267
+ ],
1268
+ "license": "MIT",
1269
+ "dependencies": {
1270
+ "baseline-browser-mapping": "^2.10.12",
1271
+ "caniuse-lite": "^1.0.30001782",
1272
+ "electron-to-chromium": "^1.5.328",
1273
+ "node-releases": "^2.0.36",
1274
+ "update-browserslist-db": "^1.2.3"
1275
+ },
1276
+ "bin": {
1277
+ "browserslist": "cli.js"
1278
+ },
1279
+ "engines": {
1280
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1281
+ }
1282
+ },
1283
+ "node_modules/caniuse-lite": {
1284
+ "version": "1.0.30001799",
1285
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz",
1286
+ "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==",
1287
+ "dev": true,
1288
+ "funding": [
1289
+ {
1290
+ "type": "opencollective",
1291
+ "url": "https://opencollective.com/browserslist"
1292
+ },
1293
+ {
1294
+ "type": "tidelift",
1295
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1296
+ },
1297
+ {
1298
+ "type": "github",
1299
+ "url": "https://github.com/sponsors/ai"
1300
+ }
1301
+ ],
1302
+ "license": "CC-BY-4.0"
1303
+ },
1304
+ "node_modules/convert-source-map": {
1305
+ "version": "2.0.0",
1306
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1307
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1308
+ "dev": true,
1309
+ "license": "MIT"
1310
+ },
1311
+ "node_modules/cross-spawn": {
1312
+ "version": "7.0.6",
1313
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1314
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1315
+ "dev": true,
1316
+ "license": "MIT",
1317
+ "dependencies": {
1318
+ "path-key": "^3.1.0",
1319
+ "shebang-command": "^2.0.0",
1320
+ "which": "^2.0.1"
1321
+ },
1322
+ "engines": {
1323
+ "node": ">= 8"
1324
+ }
1325
+ },
1326
+ "node_modules/csstype": {
1327
+ "version": "3.2.3",
1328
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
1329
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
1330
+ "dev": true,
1331
+ "license": "MIT"
1332
+ },
1333
+ "node_modules/debug": {
1334
+ "version": "4.4.3",
1335
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
1336
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
1337
+ "dev": true,
1338
+ "license": "MIT",
1339
+ "dependencies": {
1340
+ "ms": "^2.1.3"
1341
+ },
1342
+ "engines": {
1343
+ "node": ">=6.0"
1344
+ },
1345
+ "peerDependenciesMeta": {
1346
+ "supports-color": {
1347
+ "optional": true
1348
+ }
1349
+ }
1350
+ },
1351
+ "node_modules/deep-is": {
1352
+ "version": "0.1.4",
1353
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1354
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1355
+ "dev": true,
1356
+ "license": "MIT"
1357
+ },
1358
+ "node_modules/detect-libc": {
1359
+ "version": "2.1.2",
1360
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
1361
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
1362
+ "dev": true,
1363
+ "license": "Apache-2.0",
1364
+ "engines": {
1365
+ "node": ">=8"
1366
+ }
1367
+ },
1368
+ "node_modules/electron-to-chromium": {
1369
+ "version": "1.5.373",
1370
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.373.tgz",
1371
+ "integrity": "sha512-G2Hym8JIf/QreuseqkDibgH8Ci8KfJzqGDKdakbhSx9UltwRBH2cBLAWU/lBX0sCdv0TlhyxQyDCnSfxgMWsjA==",
1372
+ "dev": true,
1373
+ "license": "ISC"
1374
+ },
1375
+ "node_modules/escalade": {
1376
+ "version": "3.2.0",
1377
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1378
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1379
+ "dev": true,
1380
+ "license": "MIT",
1381
+ "engines": {
1382
+ "node": ">=6"
1383
+ }
1384
+ },
1385
+ "node_modules/escape-string-regexp": {
1386
+ "version": "4.0.0",
1387
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1388
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1389
+ "dev": true,
1390
+ "license": "MIT",
1391
+ "engines": {
1392
+ "node": ">=10"
1393
+ },
1394
+ "funding": {
1395
+ "url": "https://github.com/sponsors/sindresorhus"
1396
+ }
1397
+ },
1398
+ "node_modules/eslint": {
1399
+ "version": "10.5.0",
1400
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.5.0.tgz",
1401
+ "integrity": "sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==",
1402
+ "dev": true,
1403
+ "license": "MIT",
1404
+ "workspaces": [
1405
+ "packages/*"
1406
+ ],
1407
+ "dependencies": {
1408
+ "@eslint-community/eslint-utils": "^4.8.0",
1409
+ "@eslint-community/regexpp": "^4.12.2",
1410
+ "@eslint/config-array": "^0.23.5",
1411
+ "@eslint/config-helpers": "^0.6.0",
1412
+ "@eslint/core": "^1.2.1",
1413
+ "@eslint/plugin-kit": "^0.7.2",
1414
+ "@humanfs/node": "^0.16.6",
1415
+ "@humanwhocodes/module-importer": "^1.0.1",
1416
+ "@humanwhocodes/retry": "^0.4.2",
1417
+ "@types/estree": "^1.0.6",
1418
+ "ajv": "^6.14.0",
1419
+ "cross-spawn": "^7.0.6",
1420
+ "debug": "^4.3.2",
1421
+ "escape-string-regexp": "^4.0.0",
1422
+ "eslint-scope": "^9.1.2",
1423
+ "eslint-visitor-keys": "^5.0.1",
1424
+ "espree": "^11.2.0",
1425
+ "esquery": "^1.7.0",
1426
+ "esutils": "^2.0.2",
1427
+ "fast-deep-equal": "^3.1.3",
1428
+ "file-entry-cache": "^8.0.0",
1429
+ "find-up": "^5.0.0",
1430
+ "glob-parent": "^6.0.2",
1431
+ "ignore": "^5.2.0",
1432
+ "imurmurhash": "^0.1.4",
1433
+ "is-glob": "^4.0.0",
1434
+ "json-stable-stringify-without-jsonify": "^1.0.1",
1435
+ "minimatch": "^10.2.4",
1436
+ "natural-compare": "^1.4.0",
1437
+ "optionator": "^0.9.3"
1438
+ },
1439
+ "bin": {
1440
+ "eslint": "bin/eslint.js"
1441
+ },
1442
+ "engines": {
1443
+ "node": "^20.19.0 || ^22.13.0 || >=24"
1444
+ },
1445
+ "funding": {
1446
+ "url": "https://eslint.org/donate"
1447
+ },
1448
+ "peerDependencies": {
1449
+ "jiti": "*"
1450
+ },
1451
+ "peerDependenciesMeta": {
1452
+ "jiti": {
1453
+ "optional": true
1454
+ }
1455
+ }
1456
+ },
1457
+ "node_modules/eslint-plugin-react-hooks": {
1458
+ "version": "7.1.1",
1459
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz",
1460
+ "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==",
1461
+ "dev": true,
1462
+ "license": "MIT",
1463
+ "dependencies": {
1464
+ "@babel/core": "^7.24.4",
1465
+ "@babel/parser": "^7.24.4",
1466
+ "hermes-parser": "^0.25.1",
1467
+ "zod": "^3.25.0 || ^4.0.0",
1468
+ "zod-validation-error": "^3.5.0 || ^4.0.0"
1469
+ },
1470
+ "engines": {
1471
+ "node": ">=18"
1472
+ },
1473
+ "peerDependencies": {
1474
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
1475
+ }
1476
+ },
1477
+ "node_modules/eslint-plugin-react-refresh": {
1478
+ "version": "0.5.3",
1479
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.3.tgz",
1480
+ "integrity": "sha512-5EMmLCV98Pi4o/f/3DP/v/tNqLHMIc9I8LKClNDWhZ9JTho89/kQcitCXQBMG7sAfVRK0Ie3T2EDOzp1YXYiVA==",
1481
+ "dev": true,
1482
+ "license": "MIT",
1483
+ "peerDependencies": {
1484
+ "eslint": "^9 || ^10"
1485
+ }
1486
+ },
1487
+ "node_modules/eslint-scope": {
1488
+ "version": "9.1.2",
1489
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz",
1490
+ "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==",
1491
+ "dev": true,
1492
+ "license": "BSD-2-Clause",
1493
+ "dependencies": {
1494
+ "@types/esrecurse": "^4.3.1",
1495
+ "@types/estree": "^1.0.8",
1496
+ "esrecurse": "^4.3.0",
1497
+ "estraverse": "^5.2.0"
1498
+ },
1499
+ "engines": {
1500
+ "node": "^20.19.0 || ^22.13.0 || >=24"
1501
+ },
1502
+ "funding": {
1503
+ "url": "https://opencollective.com/eslint"
1504
+ }
1505
+ },
1506
+ "node_modules/eslint-visitor-keys": {
1507
+ "version": "5.0.1",
1508
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
1509
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
1510
+ "dev": true,
1511
+ "license": "Apache-2.0",
1512
+ "engines": {
1513
+ "node": "^20.19.0 || ^22.13.0 || >=24"
1514
+ },
1515
+ "funding": {
1516
+ "url": "https://opencollective.com/eslint"
1517
+ }
1518
+ },
1519
+ "node_modules/espree": {
1520
+ "version": "11.2.0",
1521
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
1522
+ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
1523
+ "dev": true,
1524
+ "license": "BSD-2-Clause",
1525
+ "dependencies": {
1526
+ "acorn": "^8.16.0",
1527
+ "acorn-jsx": "^5.3.2",
1528
+ "eslint-visitor-keys": "^5.0.1"
1529
+ },
1530
+ "engines": {
1531
+ "node": "^20.19.0 || ^22.13.0 || >=24"
1532
+ },
1533
+ "funding": {
1534
+ "url": "https://opencollective.com/eslint"
1535
+ }
1536
+ },
1537
+ "node_modules/esquery": {
1538
+ "version": "1.7.0",
1539
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
1540
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
1541
+ "dev": true,
1542
+ "license": "BSD-3-Clause",
1543
+ "dependencies": {
1544
+ "estraverse": "^5.1.0"
1545
+ },
1546
+ "engines": {
1547
+ "node": ">=0.10"
1548
+ }
1549
+ },
1550
+ "node_modules/esrecurse": {
1551
+ "version": "4.3.0",
1552
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1553
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1554
+ "dev": true,
1555
+ "license": "BSD-2-Clause",
1556
+ "dependencies": {
1557
+ "estraverse": "^5.2.0"
1558
+ },
1559
+ "engines": {
1560
+ "node": ">=4.0"
1561
+ }
1562
+ },
1563
+ "node_modules/estraverse": {
1564
+ "version": "5.3.0",
1565
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1566
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1567
+ "dev": true,
1568
+ "license": "BSD-2-Clause",
1569
+ "engines": {
1570
+ "node": ">=4.0"
1571
+ }
1572
+ },
1573
+ "node_modules/esutils": {
1574
+ "version": "2.0.3",
1575
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1576
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1577
+ "dev": true,
1578
+ "license": "BSD-2-Clause",
1579
+ "engines": {
1580
+ "node": ">=0.10.0"
1581
+ }
1582
+ },
1583
+ "node_modules/fast-deep-equal": {
1584
+ "version": "3.1.3",
1585
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1586
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1587
+ "dev": true,
1588
+ "license": "MIT"
1589
+ },
1590
+ "node_modules/fast-json-stable-stringify": {
1591
+ "version": "2.1.0",
1592
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1593
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1594
+ "dev": true,
1595
+ "license": "MIT"
1596
+ },
1597
+ "node_modules/fast-levenshtein": {
1598
+ "version": "2.0.6",
1599
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1600
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
1601
+ "dev": true,
1602
+ "license": "MIT"
1603
+ },
1604
+ "node_modules/fdir": {
1605
+ "version": "6.5.0",
1606
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
1607
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
1608
+ "dev": true,
1609
+ "license": "MIT",
1610
+ "engines": {
1611
+ "node": ">=12.0.0"
1612
+ },
1613
+ "peerDependencies": {
1614
+ "picomatch": "^3 || ^4"
1615
+ },
1616
+ "peerDependenciesMeta": {
1617
+ "picomatch": {
1618
+ "optional": true
1619
+ }
1620
+ }
1621
+ },
1622
+ "node_modules/file-entry-cache": {
1623
+ "version": "8.0.0",
1624
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
1625
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
1626
+ "dev": true,
1627
+ "license": "MIT",
1628
+ "dependencies": {
1629
+ "flat-cache": "^4.0.0"
1630
+ },
1631
+ "engines": {
1632
+ "node": ">=16.0.0"
1633
+ }
1634
+ },
1635
+ "node_modules/find-up": {
1636
+ "version": "5.0.0",
1637
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
1638
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
1639
+ "dev": true,
1640
+ "license": "MIT",
1641
+ "dependencies": {
1642
+ "locate-path": "^6.0.0",
1643
+ "path-exists": "^4.0.0"
1644
+ },
1645
+ "engines": {
1646
+ "node": ">=10"
1647
+ },
1648
+ "funding": {
1649
+ "url": "https://github.com/sponsors/sindresorhus"
1650
+ }
1651
+ },
1652
+ "node_modules/flat-cache": {
1653
+ "version": "4.0.1",
1654
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
1655
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
1656
+ "dev": true,
1657
+ "license": "MIT",
1658
+ "dependencies": {
1659
+ "flatted": "^3.2.9",
1660
+ "keyv": "^4.5.4"
1661
+ },
1662
+ "engines": {
1663
+ "node": ">=16"
1664
+ }
1665
+ },
1666
+ "node_modules/flatted": {
1667
+ "version": "3.4.2",
1668
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
1669
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
1670
+ "dev": true,
1671
+ "license": "ISC"
1672
+ },
1673
+ "node_modules/fsevents": {
1674
+ "version": "2.3.3",
1675
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1676
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1677
+ "dev": true,
1678
+ "hasInstallScript": true,
1679
+ "license": "MIT",
1680
+ "optional": true,
1681
+ "os": [
1682
+ "darwin"
1683
+ ],
1684
+ "engines": {
1685
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1686
+ }
1687
+ },
1688
+ "node_modules/gensync": {
1689
+ "version": "1.0.0-beta.2",
1690
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1691
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1692
+ "dev": true,
1693
+ "license": "MIT",
1694
+ "engines": {
1695
+ "node": ">=6.9.0"
1696
+ }
1697
+ },
1698
+ "node_modules/glob-parent": {
1699
+ "version": "6.0.2",
1700
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1701
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1702
+ "dev": true,
1703
+ "license": "ISC",
1704
+ "dependencies": {
1705
+ "is-glob": "^4.0.3"
1706
+ },
1707
+ "engines": {
1708
+ "node": ">=10.13.0"
1709
+ }
1710
+ },
1711
+ "node_modules/globals": {
1712
+ "version": "17.6.0",
1713
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz",
1714
+ "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==",
1715
+ "dev": true,
1716
+ "license": "MIT",
1717
+ "engines": {
1718
+ "node": ">=18"
1719
+ },
1720
+ "funding": {
1721
+ "url": "https://github.com/sponsors/sindresorhus"
1722
+ }
1723
+ },
1724
+ "node_modules/hermes-estree": {
1725
+ "version": "0.25.1",
1726
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
1727
+ "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
1728
+ "dev": true,
1729
+ "license": "MIT"
1730
+ },
1731
+ "node_modules/hermes-parser": {
1732
+ "version": "0.25.1",
1733
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
1734
+ "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
1735
+ "dev": true,
1736
+ "license": "MIT",
1737
+ "dependencies": {
1738
+ "hermes-estree": "0.25.1"
1739
+ }
1740
+ },
1741
+ "node_modules/ignore": {
1742
+ "version": "5.3.2",
1743
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
1744
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
1745
+ "dev": true,
1746
+ "license": "MIT",
1747
+ "engines": {
1748
+ "node": ">= 4"
1749
+ }
1750
+ },
1751
+ "node_modules/imurmurhash": {
1752
+ "version": "0.1.4",
1753
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1754
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
1755
+ "dev": true,
1756
+ "license": "MIT",
1757
+ "engines": {
1758
+ "node": ">=0.8.19"
1759
+ }
1760
+ },
1761
+ "node_modules/is-extglob": {
1762
+ "version": "2.1.1",
1763
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1764
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1765
+ "dev": true,
1766
+ "license": "MIT",
1767
+ "engines": {
1768
+ "node": ">=0.10.0"
1769
+ }
1770
+ },
1771
+ "node_modules/is-glob": {
1772
+ "version": "4.0.3",
1773
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1774
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1775
+ "dev": true,
1776
+ "license": "MIT",
1777
+ "dependencies": {
1778
+ "is-extglob": "^2.1.1"
1779
+ },
1780
+ "engines": {
1781
+ "node": ">=0.10.0"
1782
+ }
1783
+ },
1784
+ "node_modules/isexe": {
1785
+ "version": "2.0.0",
1786
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1787
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1788
+ "dev": true,
1789
+ "license": "ISC"
1790
+ },
1791
+ "node_modules/js-tokens": {
1792
+ "version": "4.0.0",
1793
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1794
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1795
+ "dev": true,
1796
+ "license": "MIT"
1797
+ },
1798
+ "node_modules/jsesc": {
1799
+ "version": "3.1.0",
1800
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
1801
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
1802
+ "dev": true,
1803
+ "license": "MIT",
1804
+ "bin": {
1805
+ "jsesc": "bin/jsesc"
1806
+ },
1807
+ "engines": {
1808
+ "node": ">=6"
1809
+ }
1810
+ },
1811
+ "node_modules/json-buffer": {
1812
+ "version": "3.0.1",
1813
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
1814
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
1815
+ "dev": true,
1816
+ "license": "MIT"
1817
+ },
1818
+ "node_modules/json-schema-traverse": {
1819
+ "version": "0.4.1",
1820
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1821
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1822
+ "dev": true,
1823
+ "license": "MIT"
1824
+ },
1825
+ "node_modules/json-stable-stringify-without-jsonify": {
1826
+ "version": "1.0.1",
1827
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1828
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
1829
+ "dev": true,
1830
+ "license": "MIT"
1831
+ },
1832
+ "node_modules/json5": {
1833
+ "version": "2.2.3",
1834
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1835
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1836
+ "dev": true,
1837
+ "license": "MIT",
1838
+ "bin": {
1839
+ "json5": "lib/cli.js"
1840
+ },
1841
+ "engines": {
1842
+ "node": ">=6"
1843
+ }
1844
+ },
1845
+ "node_modules/keyv": {
1846
+ "version": "4.5.4",
1847
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
1848
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
1849
+ "dev": true,
1850
+ "license": "MIT",
1851
+ "dependencies": {
1852
+ "json-buffer": "3.0.1"
1853
+ }
1854
+ },
1855
+ "node_modules/levn": {
1856
+ "version": "0.4.1",
1857
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
1858
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
1859
+ "dev": true,
1860
+ "license": "MIT",
1861
+ "dependencies": {
1862
+ "prelude-ls": "^1.2.1",
1863
+ "type-check": "~0.4.0"
1864
+ },
1865
+ "engines": {
1866
+ "node": ">= 0.8.0"
1867
+ }
1868
+ },
1869
+ "node_modules/lightningcss": {
1870
+ "version": "1.32.0",
1871
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
1872
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
1873
+ "dev": true,
1874
+ "license": "MPL-2.0",
1875
+ "dependencies": {
1876
+ "detect-libc": "^2.0.3"
1877
+ },
1878
+ "engines": {
1879
+ "node": ">= 12.0.0"
1880
+ },
1881
+ "funding": {
1882
+ "type": "opencollective",
1883
+ "url": "https://opencollective.com/parcel"
1884
+ },
1885
+ "optionalDependencies": {
1886
+ "lightningcss-android-arm64": "1.32.0",
1887
+ "lightningcss-darwin-arm64": "1.32.0",
1888
+ "lightningcss-darwin-x64": "1.32.0",
1889
+ "lightningcss-freebsd-x64": "1.32.0",
1890
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
1891
+ "lightningcss-linux-arm64-gnu": "1.32.0",
1892
+ "lightningcss-linux-arm64-musl": "1.32.0",
1893
+ "lightningcss-linux-x64-gnu": "1.32.0",
1894
+ "lightningcss-linux-x64-musl": "1.32.0",
1895
+ "lightningcss-win32-arm64-msvc": "1.32.0",
1896
+ "lightningcss-win32-x64-msvc": "1.32.0"
1897
+ }
1898
+ },
1899
+ "node_modules/lightningcss-android-arm64": {
1900
+ "version": "1.32.0",
1901
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
1902
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
1903
+ "cpu": [
1904
+ "arm64"
1905
+ ],
1906
+ "dev": true,
1907
+ "license": "MPL-2.0",
1908
+ "optional": true,
1909
+ "os": [
1910
+ "android"
1911
+ ],
1912
+ "engines": {
1913
+ "node": ">= 12.0.0"
1914
+ },
1915
+ "funding": {
1916
+ "type": "opencollective",
1917
+ "url": "https://opencollective.com/parcel"
1918
+ }
1919
+ },
1920
+ "node_modules/lightningcss-darwin-arm64": {
1921
+ "version": "1.32.0",
1922
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
1923
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
1924
+ "cpu": [
1925
+ "arm64"
1926
+ ],
1927
+ "dev": true,
1928
+ "license": "MPL-2.0",
1929
+ "optional": true,
1930
+ "os": [
1931
+ "darwin"
1932
+ ],
1933
+ "engines": {
1934
+ "node": ">= 12.0.0"
1935
+ },
1936
+ "funding": {
1937
+ "type": "opencollective",
1938
+ "url": "https://opencollective.com/parcel"
1939
+ }
1940
+ },
1941
+ "node_modules/lightningcss-darwin-x64": {
1942
+ "version": "1.32.0",
1943
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
1944
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
1945
+ "cpu": [
1946
+ "x64"
1947
+ ],
1948
+ "dev": true,
1949
+ "license": "MPL-2.0",
1950
+ "optional": true,
1951
+ "os": [
1952
+ "darwin"
1953
+ ],
1954
+ "engines": {
1955
+ "node": ">= 12.0.0"
1956
+ },
1957
+ "funding": {
1958
+ "type": "opencollective",
1959
+ "url": "https://opencollective.com/parcel"
1960
+ }
1961
+ },
1962
+ "node_modules/lightningcss-freebsd-x64": {
1963
+ "version": "1.32.0",
1964
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
1965
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
1966
+ "cpu": [
1967
+ "x64"
1968
+ ],
1969
+ "dev": true,
1970
+ "license": "MPL-2.0",
1971
+ "optional": true,
1972
+ "os": [
1973
+ "freebsd"
1974
+ ],
1975
+ "engines": {
1976
+ "node": ">= 12.0.0"
1977
+ },
1978
+ "funding": {
1979
+ "type": "opencollective",
1980
+ "url": "https://opencollective.com/parcel"
1981
+ }
1982
+ },
1983
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
1984
+ "version": "1.32.0",
1985
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
1986
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
1987
+ "cpu": [
1988
+ "arm"
1989
+ ],
1990
+ "dev": true,
1991
+ "license": "MPL-2.0",
1992
+ "optional": true,
1993
+ "os": [
1994
+ "linux"
1995
+ ],
1996
+ "engines": {
1997
+ "node": ">= 12.0.0"
1998
+ },
1999
+ "funding": {
2000
+ "type": "opencollective",
2001
+ "url": "https://opencollective.com/parcel"
2002
+ }
2003
+ },
2004
+ "node_modules/lightningcss-linux-arm64-gnu": {
2005
+ "version": "1.32.0",
2006
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
2007
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
2008
+ "cpu": [
2009
+ "arm64"
2010
+ ],
2011
+ "dev": true,
2012
+ "license": "MPL-2.0",
2013
+ "optional": true,
2014
+ "os": [
2015
+ "linux"
2016
+ ],
2017
+ "engines": {
2018
+ "node": ">= 12.0.0"
2019
+ },
2020
+ "funding": {
2021
+ "type": "opencollective",
2022
+ "url": "https://opencollective.com/parcel"
2023
+ }
2024
+ },
2025
+ "node_modules/lightningcss-linux-arm64-musl": {
2026
+ "version": "1.32.0",
2027
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
2028
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
2029
+ "cpu": [
2030
+ "arm64"
2031
+ ],
2032
+ "dev": true,
2033
+ "license": "MPL-2.0",
2034
+ "optional": true,
2035
+ "os": [
2036
+ "linux"
2037
+ ],
2038
+ "engines": {
2039
+ "node": ">= 12.0.0"
2040
+ },
2041
+ "funding": {
2042
+ "type": "opencollective",
2043
+ "url": "https://opencollective.com/parcel"
2044
+ }
2045
+ },
2046
+ "node_modules/lightningcss-linux-x64-gnu": {
2047
+ "version": "1.32.0",
2048
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
2049
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
2050
+ "cpu": [
2051
+ "x64"
2052
+ ],
2053
+ "dev": true,
2054
+ "license": "MPL-2.0",
2055
+ "optional": true,
2056
+ "os": [
2057
+ "linux"
2058
+ ],
2059
+ "engines": {
2060
+ "node": ">= 12.0.0"
2061
+ },
2062
+ "funding": {
2063
+ "type": "opencollective",
2064
+ "url": "https://opencollective.com/parcel"
2065
+ }
2066
+ },
2067
+ "node_modules/lightningcss-linux-x64-musl": {
2068
+ "version": "1.32.0",
2069
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
2070
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
2071
+ "cpu": [
2072
+ "x64"
2073
+ ],
2074
+ "dev": true,
2075
+ "license": "MPL-2.0",
2076
+ "optional": true,
2077
+ "os": [
2078
+ "linux"
2079
+ ],
2080
+ "engines": {
2081
+ "node": ">= 12.0.0"
2082
+ },
2083
+ "funding": {
2084
+ "type": "opencollective",
2085
+ "url": "https://opencollective.com/parcel"
2086
+ }
2087
+ },
2088
+ "node_modules/lightningcss-win32-arm64-msvc": {
2089
+ "version": "1.32.0",
2090
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
2091
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
2092
+ "cpu": [
2093
+ "arm64"
2094
+ ],
2095
+ "dev": true,
2096
+ "license": "MPL-2.0",
2097
+ "optional": true,
2098
+ "os": [
2099
+ "win32"
2100
+ ],
2101
+ "engines": {
2102
+ "node": ">= 12.0.0"
2103
+ },
2104
+ "funding": {
2105
+ "type": "opencollective",
2106
+ "url": "https://opencollective.com/parcel"
2107
+ }
2108
+ },
2109
+ "node_modules/lightningcss-win32-x64-msvc": {
2110
+ "version": "1.32.0",
2111
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
2112
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
2113
+ "cpu": [
2114
+ "x64"
2115
+ ],
2116
+ "dev": true,
2117
+ "license": "MPL-2.0",
2118
+ "optional": true,
2119
+ "os": [
2120
+ "win32"
2121
+ ],
2122
+ "engines": {
2123
+ "node": ">= 12.0.0"
2124
+ },
2125
+ "funding": {
2126
+ "type": "opencollective",
2127
+ "url": "https://opencollective.com/parcel"
2128
+ }
2129
+ },
2130
+ "node_modules/locate-path": {
2131
+ "version": "6.0.0",
2132
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2133
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2134
+ "dev": true,
2135
+ "license": "MIT",
2136
+ "dependencies": {
2137
+ "p-locate": "^5.0.0"
2138
+ },
2139
+ "engines": {
2140
+ "node": ">=10"
2141
+ },
2142
+ "funding": {
2143
+ "url": "https://github.com/sponsors/sindresorhus"
2144
+ }
2145
+ },
2146
+ "node_modules/lru-cache": {
2147
+ "version": "5.1.1",
2148
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
2149
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
2150
+ "dev": true,
2151
+ "license": "ISC",
2152
+ "dependencies": {
2153
+ "yallist": "^3.0.2"
2154
+ }
2155
+ },
2156
+ "node_modules/minimatch": {
2157
+ "version": "10.2.5",
2158
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
2159
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
2160
+ "dev": true,
2161
+ "license": "BlueOak-1.0.0",
2162
+ "dependencies": {
2163
+ "brace-expansion": "^5.0.5"
2164
+ },
2165
+ "engines": {
2166
+ "node": "18 || 20 || >=22"
2167
+ },
2168
+ "funding": {
2169
+ "url": "https://github.com/sponsors/isaacs"
2170
+ }
2171
+ },
2172
+ "node_modules/ms": {
2173
+ "version": "2.1.3",
2174
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2175
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2176
+ "dev": true,
2177
+ "license": "MIT"
2178
+ },
2179
+ "node_modules/nanoid": {
2180
+ "version": "3.3.12",
2181
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
2182
+ "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
2183
+ "dev": true,
2184
+ "funding": [
2185
+ {
2186
+ "type": "github",
2187
+ "url": "https://github.com/sponsors/ai"
2188
+ }
2189
+ ],
2190
+ "license": "MIT",
2191
+ "bin": {
2192
+ "nanoid": "bin/nanoid.cjs"
2193
+ },
2194
+ "engines": {
2195
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2196
+ }
2197
+ },
2198
+ "node_modules/natural-compare": {
2199
+ "version": "1.4.0",
2200
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2201
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
2202
+ "dev": true,
2203
+ "license": "MIT"
2204
+ },
2205
+ "node_modules/node-releases": {
2206
+ "version": "2.0.47",
2207
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz",
2208
+ "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==",
2209
+ "dev": true,
2210
+ "license": "MIT",
2211
+ "engines": {
2212
+ "node": ">=18"
2213
+ }
2214
+ },
2215
+ "node_modules/optionator": {
2216
+ "version": "0.9.4",
2217
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
2218
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
2219
+ "dev": true,
2220
+ "license": "MIT",
2221
+ "dependencies": {
2222
+ "deep-is": "^0.1.3",
2223
+ "fast-levenshtein": "^2.0.6",
2224
+ "levn": "^0.4.1",
2225
+ "prelude-ls": "^1.2.1",
2226
+ "type-check": "^0.4.0",
2227
+ "word-wrap": "^1.2.5"
2228
+ },
2229
+ "engines": {
2230
+ "node": ">= 0.8.0"
2231
+ }
2232
+ },
2233
+ "node_modules/p-limit": {
2234
+ "version": "3.1.0",
2235
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2236
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2237
+ "dev": true,
2238
+ "license": "MIT",
2239
+ "dependencies": {
2240
+ "yocto-queue": "^0.1.0"
2241
+ },
2242
+ "engines": {
2243
+ "node": ">=10"
2244
+ },
2245
+ "funding": {
2246
+ "url": "https://github.com/sponsors/sindresorhus"
2247
+ }
2248
+ },
2249
+ "node_modules/p-locate": {
2250
+ "version": "5.0.0",
2251
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
2252
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
2253
+ "dev": true,
2254
+ "license": "MIT",
2255
+ "dependencies": {
2256
+ "p-limit": "^3.0.2"
2257
+ },
2258
+ "engines": {
2259
+ "node": ">=10"
2260
+ },
2261
+ "funding": {
2262
+ "url": "https://github.com/sponsors/sindresorhus"
2263
+ }
2264
+ },
2265
+ "node_modules/path-exists": {
2266
+ "version": "4.0.0",
2267
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2268
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2269
+ "dev": true,
2270
+ "license": "MIT",
2271
+ "engines": {
2272
+ "node": ">=8"
2273
+ }
2274
+ },
2275
+ "node_modules/path-key": {
2276
+ "version": "3.1.1",
2277
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2278
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2279
+ "dev": true,
2280
+ "license": "MIT",
2281
+ "engines": {
2282
+ "node": ">=8"
2283
+ }
2284
+ },
2285
+ "node_modules/picocolors": {
2286
+ "version": "1.1.1",
2287
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
2288
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
2289
+ "dev": true,
2290
+ "license": "ISC"
2291
+ },
2292
+ "node_modules/picomatch": {
2293
+ "version": "4.0.4",
2294
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
2295
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
2296
+ "dev": true,
2297
+ "license": "MIT",
2298
+ "engines": {
2299
+ "node": ">=12"
2300
+ },
2301
+ "funding": {
2302
+ "url": "https://github.com/sponsors/jonschlinkert"
2303
+ }
2304
+ },
2305
+ "node_modules/postcss": {
2306
+ "version": "8.5.15",
2307
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
2308
+ "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
2309
+ "dev": true,
2310
+ "funding": [
2311
+ {
2312
+ "type": "opencollective",
2313
+ "url": "https://opencollective.com/postcss/"
2314
+ },
2315
+ {
2316
+ "type": "tidelift",
2317
+ "url": "https://tidelift.com/funding/github/npm/postcss"
2318
+ },
2319
+ {
2320
+ "type": "github",
2321
+ "url": "https://github.com/sponsors/ai"
2322
+ }
2323
+ ],
2324
+ "license": "MIT",
2325
+ "dependencies": {
2326
+ "nanoid": "^3.3.12",
2327
+ "picocolors": "^1.1.1",
2328
+ "source-map-js": "^1.2.1"
2329
+ },
2330
+ "engines": {
2331
+ "node": "^10 || ^12 || >=14"
2332
+ }
2333
+ },
2334
+ "node_modules/prelude-ls": {
2335
+ "version": "1.2.1",
2336
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2337
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2338
+ "dev": true,
2339
+ "license": "MIT",
2340
+ "engines": {
2341
+ "node": ">= 0.8.0"
2342
+ }
2343
+ },
2344
+ "node_modules/punycode": {
2345
+ "version": "2.3.1",
2346
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
2347
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
2348
+ "dev": true,
2349
+ "license": "MIT",
2350
+ "engines": {
2351
+ "node": ">=6"
2352
+ }
2353
+ },
2354
+ "node_modules/react": {
2355
+ "version": "19.2.7",
2356
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz",
2357
+ "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==",
2358
+ "license": "MIT",
2359
+ "engines": {
2360
+ "node": ">=0.10.0"
2361
+ }
2362
+ },
2363
+ "node_modules/react-dom": {
2364
+ "version": "19.2.7",
2365
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz",
2366
+ "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==",
2367
+ "license": "MIT",
2368
+ "dependencies": {
2369
+ "scheduler": "^0.27.0"
2370
+ },
2371
+ "peerDependencies": {
2372
+ "react": "^19.2.7"
2373
+ }
2374
+ },
2375
+ "node_modules/react-icons": {
2376
+ "version": "5.6.0",
2377
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.6.0.tgz",
2378
+ "integrity": "sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==",
2379
+ "license": "MIT",
2380
+ "peerDependencies": {
2381
+ "react": "*"
2382
+ }
2383
+ },
2384
+ "node_modules/rolldown": {
2385
+ "version": "1.0.3",
2386
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz",
2387
+ "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==",
2388
+ "dev": true,
2389
+ "license": "MIT",
2390
+ "dependencies": {
2391
+ "@oxc-project/types": "=0.133.0",
2392
+ "@rolldown/pluginutils": "^1.0.0"
2393
+ },
2394
+ "bin": {
2395
+ "rolldown": "bin/cli.mjs"
2396
+ },
2397
+ "engines": {
2398
+ "node": "^20.19.0 || >=22.12.0"
2399
+ },
2400
+ "optionalDependencies": {
2401
+ "@rolldown/binding-android-arm64": "1.0.3",
2402
+ "@rolldown/binding-darwin-arm64": "1.0.3",
2403
+ "@rolldown/binding-darwin-x64": "1.0.3",
2404
+ "@rolldown/binding-freebsd-x64": "1.0.3",
2405
+ "@rolldown/binding-linux-arm-gnueabihf": "1.0.3",
2406
+ "@rolldown/binding-linux-arm64-gnu": "1.0.3",
2407
+ "@rolldown/binding-linux-arm64-musl": "1.0.3",
2408
+ "@rolldown/binding-linux-ppc64-gnu": "1.0.3",
2409
+ "@rolldown/binding-linux-s390x-gnu": "1.0.3",
2410
+ "@rolldown/binding-linux-x64-gnu": "1.0.3",
2411
+ "@rolldown/binding-linux-x64-musl": "1.0.3",
2412
+ "@rolldown/binding-openharmony-arm64": "1.0.3",
2413
+ "@rolldown/binding-wasm32-wasi": "1.0.3",
2414
+ "@rolldown/binding-win32-arm64-msvc": "1.0.3",
2415
+ "@rolldown/binding-win32-x64-msvc": "1.0.3"
2416
+ }
2417
+ },
2418
+ "node_modules/scheduler": {
2419
+ "version": "0.27.0",
2420
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
2421
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
2422
+ "license": "MIT"
2423
+ },
2424
+ "node_modules/semver": {
2425
+ "version": "6.3.1",
2426
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
2427
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2428
+ "dev": true,
2429
+ "license": "ISC",
2430
+ "bin": {
2431
+ "semver": "bin/semver.js"
2432
+ }
2433
+ },
2434
+ "node_modules/shebang-command": {
2435
+ "version": "2.0.0",
2436
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2437
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2438
+ "dev": true,
2439
+ "license": "MIT",
2440
+ "dependencies": {
2441
+ "shebang-regex": "^3.0.0"
2442
+ },
2443
+ "engines": {
2444
+ "node": ">=8"
2445
+ }
2446
+ },
2447
+ "node_modules/shebang-regex": {
2448
+ "version": "3.0.0",
2449
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2450
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2451
+ "dev": true,
2452
+ "license": "MIT",
2453
+ "engines": {
2454
+ "node": ">=8"
2455
+ }
2456
+ },
2457
+ "node_modules/source-map-js": {
2458
+ "version": "1.2.1",
2459
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
2460
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
2461
+ "dev": true,
2462
+ "license": "BSD-3-Clause",
2463
+ "engines": {
2464
+ "node": ">=0.10.0"
2465
+ }
2466
+ },
2467
+ "node_modules/tinyglobby": {
2468
+ "version": "0.2.17",
2469
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
2470
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
2471
+ "dev": true,
2472
+ "license": "MIT",
2473
+ "dependencies": {
2474
+ "fdir": "^6.5.0",
2475
+ "picomatch": "^4.0.4"
2476
+ },
2477
+ "engines": {
2478
+ "node": ">=12.0.0"
2479
+ },
2480
+ "funding": {
2481
+ "url": "https://github.com/sponsors/SuperchupuDev"
2482
+ }
2483
+ },
2484
+ "node_modules/ts-api-utils": {
2485
+ "version": "2.5.0",
2486
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
2487
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
2488
+ "dev": true,
2489
+ "license": "MIT",
2490
+ "engines": {
2491
+ "node": ">=18.12"
2492
+ },
2493
+ "peerDependencies": {
2494
+ "typescript": ">=4.8.4"
2495
+ }
2496
+ },
2497
+ "node_modules/tslib": {
2498
+ "version": "2.8.1",
2499
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
2500
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
2501
+ "dev": true,
2502
+ "license": "0BSD",
2503
+ "optional": true
2504
+ },
2505
+ "node_modules/type-check": {
2506
+ "version": "0.4.0",
2507
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2508
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2509
+ "dev": true,
2510
+ "license": "MIT",
2511
+ "dependencies": {
2512
+ "prelude-ls": "^1.2.1"
2513
+ },
2514
+ "engines": {
2515
+ "node": ">= 0.8.0"
2516
+ }
2517
+ },
2518
+ "node_modules/typescript": {
2519
+ "version": "6.0.3",
2520
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
2521
+ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
2522
+ "dev": true,
2523
+ "license": "Apache-2.0",
2524
+ "bin": {
2525
+ "tsc": "bin/tsc",
2526
+ "tsserver": "bin/tsserver"
2527
+ },
2528
+ "engines": {
2529
+ "node": ">=14.17"
2530
+ }
2531
+ },
2532
+ "node_modules/typescript-eslint": {
2533
+ "version": "8.61.1",
2534
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.1.tgz",
2535
+ "integrity": "sha512-V7PayAfJokV3pEHgN7/v03D1SpujhRfQtYLbLIiBfDDncdg4PAiRBfoS4cnCANK4jmAPncczi59QO3afiXUlNw==",
2536
+ "dev": true,
2537
+ "license": "MIT",
2538
+ "dependencies": {
2539
+ "@typescript-eslint/eslint-plugin": "8.61.1",
2540
+ "@typescript-eslint/parser": "8.61.1",
2541
+ "@typescript-eslint/typescript-estree": "8.61.1",
2542
+ "@typescript-eslint/utils": "8.61.1"
2543
+ },
2544
+ "engines": {
2545
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2546
+ },
2547
+ "funding": {
2548
+ "type": "opencollective",
2549
+ "url": "https://opencollective.com/typescript-eslint"
2550
+ },
2551
+ "peerDependencies": {
2552
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2553
+ "typescript": ">=4.8.4 <6.1.0"
2554
+ }
2555
+ },
2556
+ "node_modules/undici-types": {
2557
+ "version": "7.18.2",
2558
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
2559
+ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
2560
+ "dev": true,
2561
+ "license": "MIT"
2562
+ },
2563
+ "node_modules/update-browserslist-db": {
2564
+ "version": "1.2.3",
2565
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
2566
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
2567
+ "dev": true,
2568
+ "funding": [
2569
+ {
2570
+ "type": "opencollective",
2571
+ "url": "https://opencollective.com/browserslist"
2572
+ },
2573
+ {
2574
+ "type": "tidelift",
2575
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
2576
+ },
2577
+ {
2578
+ "type": "github",
2579
+ "url": "https://github.com/sponsors/ai"
2580
+ }
2581
+ ],
2582
+ "license": "MIT",
2583
+ "dependencies": {
2584
+ "escalade": "^3.2.0",
2585
+ "picocolors": "^1.1.1"
2586
+ },
2587
+ "bin": {
2588
+ "update-browserslist-db": "cli.js"
2589
+ },
2590
+ "peerDependencies": {
2591
+ "browserslist": ">= 4.21.0"
2592
+ }
2593
+ },
2594
+ "node_modules/uri-js": {
2595
+ "version": "4.4.1",
2596
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2597
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2598
+ "dev": true,
2599
+ "license": "BSD-2-Clause",
2600
+ "dependencies": {
2601
+ "punycode": "^2.1.0"
2602
+ }
2603
+ },
2604
+ "node_modules/uuid": {
2605
+ "version": "14.0.0",
2606
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz",
2607
+ "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==",
2608
+ "funding": [
2609
+ "https://github.com/sponsors/broofa",
2610
+ "https://github.com/sponsors/ctavan"
2611
+ ],
2612
+ "license": "MIT",
2613
+ "bin": {
2614
+ "uuid": "dist-node/bin/uuid"
2615
+ }
2616
+ },
2617
+ "node_modules/vite": {
2618
+ "version": "8.0.16",
2619
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz",
2620
+ "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==",
2621
+ "dev": true,
2622
+ "license": "MIT",
2623
+ "dependencies": {
2624
+ "lightningcss": "^1.32.0",
2625
+ "picomatch": "^4.0.4",
2626
+ "postcss": "^8.5.15",
2627
+ "rolldown": "1.0.3",
2628
+ "tinyglobby": "^0.2.17"
2629
+ },
2630
+ "bin": {
2631
+ "vite": "bin/vite.js"
2632
+ },
2633
+ "engines": {
2634
+ "node": "^20.19.0 || >=22.12.0"
2635
+ },
2636
+ "funding": {
2637
+ "url": "https://github.com/vitejs/vite?sponsor=1"
2638
+ },
2639
+ "optionalDependencies": {
2640
+ "fsevents": "~2.3.3"
2641
+ },
2642
+ "peerDependencies": {
2643
+ "@types/node": "^20.19.0 || >=22.12.0",
2644
+ "@vitejs/devtools": "^0.1.18",
2645
+ "esbuild": "^0.27.0 || ^0.28.0",
2646
+ "jiti": ">=1.21.0",
2647
+ "less": "^4.0.0",
2648
+ "sass": "^1.70.0",
2649
+ "sass-embedded": "^1.70.0",
2650
+ "stylus": ">=0.54.8",
2651
+ "sugarss": "^5.0.0",
2652
+ "terser": "^5.16.0",
2653
+ "tsx": "^4.8.1",
2654
+ "yaml": "^2.4.2"
2655
+ },
2656
+ "peerDependenciesMeta": {
2657
+ "@types/node": {
2658
+ "optional": true
2659
+ },
2660
+ "@vitejs/devtools": {
2661
+ "optional": true
2662
+ },
2663
+ "esbuild": {
2664
+ "optional": true
2665
+ },
2666
+ "jiti": {
2667
+ "optional": true
2668
+ },
2669
+ "less": {
2670
+ "optional": true
2671
+ },
2672
+ "sass": {
2673
+ "optional": true
2674
+ },
2675
+ "sass-embedded": {
2676
+ "optional": true
2677
+ },
2678
+ "stylus": {
2679
+ "optional": true
2680
+ },
2681
+ "sugarss": {
2682
+ "optional": true
2683
+ },
2684
+ "terser": {
2685
+ "optional": true
2686
+ },
2687
+ "tsx": {
2688
+ "optional": true
2689
+ },
2690
+ "yaml": {
2691
+ "optional": true
2692
+ }
2693
+ }
2694
+ },
2695
+ "node_modules/which": {
2696
+ "version": "2.0.2",
2697
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2698
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2699
+ "dev": true,
2700
+ "license": "ISC",
2701
+ "dependencies": {
2702
+ "isexe": "^2.0.0"
2703
+ },
2704
+ "bin": {
2705
+ "node-which": "bin/node-which"
2706
+ },
2707
+ "engines": {
2708
+ "node": ">= 8"
2709
+ }
2710
+ },
2711
+ "node_modules/word-wrap": {
2712
+ "version": "1.2.5",
2713
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
2714
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
2715
+ "dev": true,
2716
+ "license": "MIT",
2717
+ "engines": {
2718
+ "node": ">=0.10.0"
2719
+ }
2720
+ },
2721
+ "node_modules/yallist": {
2722
+ "version": "3.1.1",
2723
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
2724
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
2725
+ "dev": true,
2726
+ "license": "ISC"
2727
+ },
2728
+ "node_modules/yocto-queue": {
2729
+ "version": "0.1.0",
2730
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
2731
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
2732
+ "dev": true,
2733
+ "license": "MIT",
2734
+ "engines": {
2735
+ "node": ">=10"
2736
+ },
2737
+ "funding": {
2738
+ "url": "https://github.com/sponsors/sindresorhus"
2739
+ }
2740
+ },
2741
+ "node_modules/zod": {
2742
+ "version": "4.4.3",
2743
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
2744
+ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
2745
+ "dev": true,
2746
+ "license": "MIT",
2747
+ "funding": {
2748
+ "url": "https://github.com/sponsors/colinhacks"
2749
+ }
2750
+ },
2751
+ "node_modules/zod-validation-error": {
2752
+ "version": "4.0.2",
2753
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
2754
+ "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==",
2755
+ "dev": true,
2756
+ "license": "MIT",
2757
+ "engines": {
2758
+ "node": ">=18.0.0"
2759
+ },
2760
+ "peerDependencies": {
2761
+ "zod": "^3.25.0 || ^4.0.0"
2762
+ }
2763
+ }
2764
+ }
2765
+ }
TextcodeEditor/package.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "textcodeeditor",
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
+ "react": "^19.2.6",
14
+ "react-dom": "^19.2.6",
15
+ "react-icons": "^5.6.0",
16
+ "uuid": "^14.0.0"
17
+ },
18
+ "devDependencies": {
19
+ "@eslint/js": "^10.0.1",
20
+ "@types/node": "^24.12.3",
21
+ "@types/react": "^19.2.14",
22
+ "@types/react-dom": "^19.2.3",
23
+ "@vitejs/plugin-react": "^6.0.1",
24
+ "eslint": "^10.3.0",
25
+ "eslint-plugin-react-hooks": "^7.1.1",
26
+ "eslint-plugin-react-refresh": "^0.5.2",
27
+ "globals": "^17.6.0",
28
+ "typescript": "~6.0.2",
29
+ "typescript-eslint": "^8.59.2",
30
+ "vite": "^8.0.12"
31
+ }
32
+ }
TextcodeEditor/public/favicon.svg ADDED
TextcodeEditor/public/icons.svg ADDED
TextcodeEditor/src/App.css ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .counter {
2
+ font-size: 16px;
3
+ padding: 5px 10px;
4
+ border-radius: 5px;
5
+ color: var(--accent);
6
+ background: var(--accent-bg);
7
+ border: 2px solid transparent;
8
+ transition: border-color 0.3s;
9
+ margin-bottom: 24px;
10
+
11
+ &:hover {
12
+ border-color: var(--accent-border);
13
+ }
14
+ &:focus-visible {
15
+ outline: 2px solid var(--accent);
16
+ outline-offset: 2px;
17
+ }
18
+ }
19
+
20
+ .hero {
21
+ position: relative;
22
+
23
+ .base,
24
+ .framework,
25
+ .vite {
26
+ inset-inline: 0;
27
+ margin: 0 auto;
28
+ }
29
+
30
+ .base {
31
+ width: 170px;
32
+ position: relative;
33
+ z-index: 0;
34
+ }
35
+
36
+ .framework,
37
+ .vite {
38
+ position: absolute;
39
+ }
40
+
41
+ .framework {
42
+ z-index: 1;
43
+ top: 34px;
44
+ height: 28px;
45
+ transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg)
46
+ scale(1.4);
47
+ }
48
+
49
+ .vite {
50
+ z-index: 0;
51
+ top: 107px;
52
+ height: 26px;
53
+ width: auto;
54
+ transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg)
55
+ scale(0.8);
56
+ }
57
+ }
58
+
59
+ #center {
60
+ display: flex;
61
+ flex-direction: column;
62
+ gap: 25px;
63
+ place-content: center;
64
+ place-items: center;
65
+ flex-grow: 1;
66
+
67
+ @media (max-width: 1024px) {
68
+ padding: 32px 20px 24px;
69
+ gap: 18px;
70
+ }
71
+ }
72
+
73
+ #next-steps {
74
+ display: flex;
75
+ border-top: 1px solid var(--border);
76
+ text-align: left;
77
+
78
+ & > div {
79
+ flex: 1 1 0;
80
+ padding: 32px;
81
+ @media (max-width: 1024px) {
82
+ padding: 24px 20px;
83
+ }
84
+ }
85
+
86
+ .icon {
87
+ margin-bottom: 16px;
88
+ width: 22px;
89
+ height: 22px;
90
+ }
91
+
92
+ @media (max-width: 1024px) {
93
+ flex-direction: column;
94
+ text-align: center;
95
+ }
96
+ }
97
+
98
+ #docs {
99
+ border-right: 1px solid var(--border);
100
+
101
+ @media (max-width: 1024px) {
102
+ border-right: none;
103
+ border-bottom: 1px solid var(--border);
104
+ }
105
+ }
106
+
107
+ #next-steps ul {
108
+ list-style: none;
109
+ padding: 0;
110
+ display: flex;
111
+ gap: 8px;
112
+ margin: 32px 0 0;
113
+
114
+ .logo {
115
+ height: 18px;
116
+ }
117
+
118
+ a {
119
+ color: var(--text-h);
120
+ font-size: 16px;
121
+ border-radius: 6px;
122
+ background: var(--social-bg);
123
+ display: flex;
124
+ padding: 6px 12px;
125
+ align-items: center;
126
+ gap: 8px;
127
+ text-decoration: none;
128
+ transition: box-shadow 0.3s;
129
+
130
+ &:hover {
131
+ box-shadow: var(--shadow);
132
+ }
133
+ .button-icon {
134
+ height: 18px;
135
+ width: 18px;
136
+ }
137
+ }
138
+
139
+ @media (max-width: 1024px) {
140
+ margin-top: 20px;
141
+ flex-wrap: wrap;
142
+ justify-content: center;
143
+
144
+ li {
145
+ flex: 1 1 calc(50% - 8px);
146
+ }
147
+
148
+ a {
149
+ width: 100%;
150
+ justify-content: center;
151
+ box-sizing: border-box;
152
+ }
153
+ }
154
+ }
155
+
156
+ #spacer {
157
+ height: 88px;
158
+ border-top: 1px solid var(--border);
159
+ @media (max-width: 1024px) {
160
+ height: 48px;
161
+ }
162
+ }
163
+
164
+ .ticks {
165
+ position: relative;
166
+ width: 100%;
167
+
168
+ &::before,
169
+ &::after {
170
+ content: '';
171
+ position: absolute;
172
+ top: -4.5px;
173
+ border: 5px solid transparent;
174
+ }
175
+
176
+ &::before {
177
+ left: 0;
178
+ border-left-color: var(--border);
179
+ }
180
+ &::after {
181
+ right: 0;
182
+ border-right-color: var(--border);
183
+ }
184
+ }
TextcodeEditor/src/App.tsx ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { Editor } from './components/Editor';
3
+
4
+ function App() {
5
+ return (
6
+ <Editor />
7
+ );
8
+ }
9
+
10
+ export default App;
TextcodeEditor/src/assets/hero.png ADDED
TextcodeEditor/src/assets/react.svg ADDED
TextcodeEditor/src/assets/vite.svg ADDED
TextcodeEditor/src/components/Editor.css ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .editor-container {
2
+ position: relative;
3
+ width: 100%;
4
+ height: 100%;
5
+ flex: 1;
6
+ overflow: hidden;
7
+ background: white;
8
+ }
9
+
10
+ .editor-layer {
11
+ position: absolute;
12
+ top: 0;
13
+ left: 0;
14
+ width: 100%;
15
+ height: 100%;
16
+ margin: 0;
17
+ padding: 0;
18
+ box-sizing: border-box;
19
+ overflow-y: auto;
20
+ overflow-x: hidden;
21
+ white-space: pre-wrap;
22
+ word-wrap: break-word;
23
+ color: #333;
24
+ pointer-events: none; /* Let clicks pass through to textarea */
25
+ }
26
+
27
+ .editor-textarea {
28
+ position: absolute;
29
+ top: 0;
30
+ left: 0;
31
+ width: 100%;
32
+ height: 100%;
33
+ margin: 0;
34
+ padding: 0;
35
+ box-sizing: border-box;
36
+ resize: none;
37
+ border: none;
38
+ outline: none;
39
+ overflow-y: auto;
40
+ overflow-x: hidden;
41
+ white-space: pre-wrap;
42
+ word-wrap: break-word;
43
+
44
+ /* Make text transparent so we only see the rendered layer below */
45
+ color: transparent;
46
+ background: transparent;
47
+ caret-color: black;
48
+ }
49
+
50
+ /* Ensure padding matches exactly between layer and textarea */
51
+ /* We need padding-left for the line numbers. */
52
+ .editor-layer, .editor-textarea {
53
+ padding: 10px;
54
+ padding-left: 50px;
55
+ line-height: 1.5;
56
+ font-size: 16px;
57
+ }
58
+
59
+ .editor-line {
60
+ position: relative;
61
+ min-height: 1.5em; /* Match line-height */
62
+ }
63
+
64
+ .line-number {
65
+ position: absolute;
66
+ left: -50px; /* Offset into the padding-left area */
67
+ width: 40px;
68
+ color: #ccc;
69
+ font-family: monospace;
70
+ font-size: 14px;
71
+ user-select: none;
72
+ display: flex;
73
+ justify-content: flex-end;
74
+ align-items: center;
75
+ gap: 4px;
76
+ }
77
+
78
+ .line-content {
79
+ display: inline;
80
+ }
81
+
82
+ .fold-btn {
83
+ background: none;
84
+ border: none;
85
+ color: #888;
86
+ cursor: pointer;
87
+ padding: 0;
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ height: 100%;
92
+ pointer-events: auto;
93
+ position: relative;
94
+ z-index: 10;
95
+ }
96
+
97
+ .fold-btn:hover {
98
+ color: #333;
99
+ }
100
+
101
+ .reset-btn {
102
+ position: absolute;
103
+ top: 15px;
104
+ right: 20px;
105
+ z-index: 100;
106
+ background: #fff;
107
+ border: 1px solid #ddd;
108
+ border-radius: 50%;
109
+ width: 40px;
110
+ height: 40px;
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: center;
114
+ cursor: pointer;
115
+ color: #555;
116
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
117
+ transition: all 0.2s;
118
+ }
119
+
120
+ .reset-btn:hover {
121
+ background: #f0f0f0;
122
+ color: #000;
123
+ transform: rotate(90deg);
124
+ }
125
+
126
+ .color-picker-input {
127
+ width: 32px;
128
+ height: 32px;
129
+ padding: 0;
130
+ border: none;
131
+ border-radius: 4px;
132
+ cursor: pointer;
133
+ background: transparent;
134
+ }
135
+
136
+ /* Hide scrollbar on layer so only textarea scrollbar is visible */
137
+ .editor-layer::-webkit-scrollbar {
138
+ width: 0;
139
+ background: transparent;
140
+ }
TextcodeEditor/src/components/Editor.tsx ADDED
@@ -0,0 +1,383 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useState, useRef, useEffect } from 'react';
2
+ import { parseDefinitions, generateCharacterStyles } from '../utils/parser';
3
+ import { MdFormatColorText, MdHighlight, MdExpandMore, MdChevronRight, MdRefresh, MdMoreHoriz } from 'react-icons/md';
4
+
5
+ import './Editor.css';
6
+
7
+ const DEFAULT_TEXT = `\\begin{define}
8
+ \\setfont{Consolas}
9
+ \\textcolor{#FFE5B4!50}{candle_extreme}
10
+ \\textcolor{#FF0000!50}{candle_low}
11
+ \\textcolor{#0000FF!50}{candle_high}
12
+ \\texthighlight{#008080!20}{quick}
13
+ \\texthighlight{#008080!20}{brown fox}
14
+ \\texthighlight{#008080!20}{\`...\`}
15
+ \\texthighlight{#008080!20}{{...}}
16
+ \\texthighlight{#008080!20}{[...]}
17
+ \\texthighlight{#008080!20}{(...)}
18
+ \\end{define}
19
+
20
+ // Your code here
21
+ function test() {
22
+ const candle_extreme = "very hot!";
23
+ console.log("this is a \`highlighted\` text.");
24
+ }
25
+ `;
26
+
27
+ export const Editor: React.FC = () => {
28
+ const [text, setText] = useState('');
29
+ const [isLoaded, setIsLoaded] = useState(false);
30
+ const [isFolded, setIsFolded] = useState(false);
31
+ const saveTimeoutRef = useRef<NodeJS.Timeout | null>(null);
32
+
33
+ const [selection, setSelection] = useState<{ start: number; end: number; text: string } | null>(null);
34
+ const [toolbarPos, setToolbarPos] = useState({ top: 0, left: 0 });
35
+ const textareaRef = useRef<HTMLTextAreaElement>(null);
36
+ const preRef = useRef<HTMLDivElement>(null);
37
+
38
+ // Load from backend on mount
39
+ useEffect(() => {
40
+ fetch('/api/data')
41
+ .then(res => {
42
+ if (res.ok) return res.text();
43
+ throw new Error('Not found');
44
+ })
45
+ .then(data => {
46
+ setText(data);
47
+ setIsLoaded(true);
48
+ })
49
+ .catch(() => {
50
+ setText(DEFAULT_TEXT);
51
+ setIsLoaded(true);
52
+ });
53
+ }, []);
54
+
55
+ // Sync scroll
56
+ const handleScroll = () => {
57
+ if (textareaRef.current && preRef.current) {
58
+ preRef.current.scrollTop = textareaRef.current.scrollTop;
59
+ preRef.current.scrollLeft = textareaRef.current.scrollLeft;
60
+ }
61
+ };
62
+
63
+ const FOLDED_PLACEHOLDER = '\\begin{define}\n\\end{define}';
64
+
65
+ const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
66
+ const newVal = e.target.value;
67
+
68
+ let newText = newVal;
69
+ if (isFolded) {
70
+ const match = text.match(/(\\begin\{define\})[\s\S]*?(\\end\{define\})/);
71
+ if (match) {
72
+ const hiddenContent = match[0];
73
+ const newValMatch = newVal.match(/\\begin\{define\}\n\\end\{define\}/);
74
+ if (newValMatch) {
75
+ newText = newVal.replace(newValMatch[0], hiddenContent);
76
+ } else {
77
+ setIsFolded(false);
78
+ newText = text; // revert if they mess with the placeholder
79
+ }
80
+ } else {
81
+ setIsFolded(false);
82
+ }
83
+ }
84
+
85
+ setText(newText);
86
+ setSelection(null);
87
+
88
+ // Debounce save to backend to fix typing lag
89
+ if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
90
+ saveTimeoutRef.current = setTimeout(() => {
91
+ fetch('/api/data', {
92
+ method: 'POST',
93
+ body: newText
94
+ });
95
+ }, 500);
96
+ };
97
+
98
+ // Skip rendering until loaded to avoid flickering
99
+ if (!isLoaded) return null;
100
+
101
+ const handleReset = () => {
102
+ if (window.confirm('Are you sure you want to reset to default?')) {
103
+ setText(DEFAULT_TEXT);
104
+ setIsFolded(false);
105
+ fetch('/api/data', { method: 'POST', body: DEFAULT_TEXT });
106
+ }
107
+ };
108
+
109
+ const handleSelect = () => {
110
+ if (!textareaRef.current) return;
111
+ const { selectionStart, selectionEnd } = textareaRef.current;
112
+ if (selectionStart !== selectionEnd) {
113
+ const selectedText = displayValue.substring(selectionStart, selectionEnd);
114
+ setSelection({ start: selectionStart, end: selectionEnd, text: selectedText });
115
+
116
+ // Calculate a rough position (top center of window for simplicity, or we can just stick it to a fixed spot)
117
+ setToolbarPos({ top: 20, left: window.innerWidth / 2 - 50 });
118
+ } else {
119
+ setSelection(null);
120
+ }
121
+ };
122
+
123
+ const addCommand = (type: 'color' | 'highlight_text' | 'highlight_series') => {
124
+ if (!selection) return;
125
+ const parseResult = parseDefinitions(text);
126
+ if (parseResult.defineStartIdx === -1) return; // No define block found
127
+
128
+ const randomHex = '#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0').toUpperCase();
129
+
130
+ let newCommand = '';
131
+ const exactSelection = selection.text.trim();
132
+
133
+ if (type === 'color') {
134
+ newCommand = `\\textcolor{${randomHex}!20}{${exactSelection}}`;
135
+ } else if (type === 'highlight_text') {
136
+ newCommand = `\\texthighlight{${randomHex}!20}{${exactSelection}}`;
137
+ } else if (type === 'highlight_series') {
138
+ let startChar = exactSelection[0];
139
+ let endChar = exactSelection[exactSelection.length - 1];
140
+ if (exactSelection.length === 1) endChar = startChar;
141
+ newCommand = `\\texthighlight{${randomHex}!20}{${startChar}...${endChar}}`;
142
+ }
143
+
144
+ // Insert before \end{define}
145
+ const endDefineIdx = text.indexOf('\\end{define}');
146
+ if (endDefineIdx !== -1) {
147
+ const before = text.substring(0, endDefineIdx);
148
+ const after = text.substring(endDefineIdx);
149
+ // add newline if needed
150
+ const insert = before.endsWith('\n') ? newCommand + '\n' : '\n' + newCommand + '\n';
151
+ const newText = before + insert + after;
152
+ setText(newText);
153
+ fetch('/api/data', {
154
+ method: 'POST',
155
+ body: newText
156
+ });
157
+ }
158
+ setSelection(null);
159
+ if (textareaRef.current) textareaRef.current.focus();
160
+ };
161
+
162
+ // Render logic
163
+ const parseResult = parseDefinitions(text);
164
+
165
+ let displayValue = text;
166
+ let displayParseResult = { ...parseResult };
167
+
168
+ let lineMapping: number[] = [];
169
+ const realLines = text.split('\n');
170
+
171
+ const defineMatch = text.match(/(\\begin\{define\})[\s\S]*?(\\end\{define\})/);
172
+ if (isFolded && defineMatch) {
173
+ displayValue = text.replace(defineMatch[0], FOLDED_PLACEHOLDER);
174
+ const phIdx = displayValue.indexOf(FOLDED_PLACEHOLDER);
175
+ displayParseResult.defineStartIdx = phIdx;
176
+ displayParseResult.defineEndIdx = phIdx + FOLDED_PLACEHOLDER.length;
177
+
178
+ const startIdx = realLines.findIndex(l => l.startsWith('\\begin{define}'));
179
+ const endIdx = realLines.findIndex(l => l.startsWith('\\end{define}'));
180
+ if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
181
+ for (let i = 0; i <= startIdx; i++) lineMapping.push(i);
182
+ for (let i = endIdx; i < realLines.length; i++) lineMapping.push(i);
183
+ } else {
184
+ for (let i = 0; i < realLines.length; i++) lineMapping.push(i);
185
+ }
186
+ } else {
187
+ for (let i = 0; i < realLines.length; i++) lineMapping.push(i);
188
+ }
189
+
190
+ const styles = generateCharacterStyles(displayValue, displayParseResult);
191
+
192
+ const lines = displayValue.split('\n');
193
+ let charIdx = 0;
194
+
195
+ const renderLine = (line: string, lineIdx: number) => {
196
+ const lineElements = [];
197
+
198
+ let currentStyleStr = '';
199
+ let currentChunkStart = 0;
200
+
201
+ const getStyleStr = (idx: number) => {
202
+ if (idx >= styles.length) return '';
203
+ const s = styles[idx];
204
+ return [s.color.join(','), s.highlight.join(',')].join('|');
205
+ };
206
+
207
+ const pushChunk = (start: number, end: number, styleStr: string) => {
208
+ if (start >= end) return;
209
+ const chunkText = line.substring(start, end);
210
+
211
+ if (!styleStr || styleStr === '|') {
212
+ lineElements.push(<span key={start}>{chunkText}</span>);
213
+ return;
214
+ }
215
+
216
+ const absoluteStart = charIdx + start;
217
+ const s = styles[absoluteStart];
218
+
219
+ let el = <span key={start}>{chunkText}</span>;
220
+
221
+ // Apply text colors (inner to outer)
222
+ if (s.color.length > 0) {
223
+ el = <span style={{ color: s.color[s.color.length - 1] }}>{el}</span>; // innermost wins
224
+ }
225
+
226
+ // Apply highlights (stacking backgrounds)
227
+ if (s.highlight.length > 0) {
228
+ // Nest spans to stack background colors
229
+ s.highlight.forEach((bg, i) => {
230
+ el = <span style={{ backgroundColor: bg }}>{el}</span>;
231
+ });
232
+ }
233
+
234
+ lineElements.push(el);
235
+ };
236
+
237
+ if (line.length === 0) {
238
+ // Empty line needs a zero-width space or newline to render its height properly
239
+ pushChunk(0, 0, '');
240
+ } else {
241
+ for (let i = 0; i < line.length; i++) {
242
+ const absoluteIdx = charIdx + i;
243
+ const styleStr = getStyleStr(absoluteIdx);
244
+
245
+ if (i === 0) {
246
+ currentStyleStr = styleStr;
247
+ } else if (styleStr !== currentStyleStr) {
248
+ pushChunk(currentChunkStart, i, currentStyleStr);
249
+ currentChunkStart = i;
250
+ currentStyleStr = styleStr;
251
+ }
252
+ }
253
+ pushChunk(currentChunkStart, line.length, currentStyleStr);
254
+ }
255
+
256
+ // Add +1 to charIdx for the newline character
257
+ charIdx += line.length + 1;
258
+
259
+ // Check if this line is the start of the define block
260
+ const isDefineStartLine = line.trim().startsWith('\\begin{define}');
261
+ const realLineIdx = lineMapping[lineIdx] ?? lineIdx;
262
+
263
+ return (
264
+ <div key={lineIdx} className="editor-line">
265
+ <div className="line-number">
266
+ {isDefineStartLine && (
267
+ <button
268
+ className="fold-btn"
269
+ onClick={() => setIsFolded(!isFolded)}
270
+ title={isFolded ? "Expand" : "Fold"}
271
+ >
272
+ {isFolded ? <MdChevronRight size={14}/> : <MdExpandMore size={14}/>}
273
+ </button>
274
+ )}
275
+ <span>{realLineIdx + 1}</span>
276
+ </div>
277
+ <span className="line-content">{lineElements.length > 0 ? lineElements : '\n'}</span>
278
+ </div>
279
+ );
280
+ };
281
+
282
+ const renderedLines = lines.map((line, idx) => renderLine(line, idx));
283
+
284
+ // Ensure minimum 10 lines as requested
285
+ if (lines.length < 10) {
286
+ for (let i = lines.length; i < 10; i++) {
287
+ renderedLines.push(
288
+ <div key={i} className="editor-line">
289
+ <span className="line-number">{i + 1}</span>
290
+ <span className="line-content">{'\n'}</span>
291
+ </div>
292
+ );
293
+ }
294
+ }
295
+
296
+ const getValidHex = (str: string) => {
297
+ const match = str.match(/[0-9A-Fa-f]{3,6}/);
298
+ if (!match) return '#000000';
299
+ let hex = match[0];
300
+ if (hex.length === 3) hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
301
+ return '#' + hex.toUpperCase();
302
+ };
303
+
304
+ return (
305
+ <div className="editor-container" style={{ fontFamily: parseResult.font }}>
306
+ <div className="editor-layer" ref={preRef} aria-hidden="true">
307
+ {renderedLines}
308
+ </div>
309
+
310
+ <textarea
311
+ ref={textareaRef}
312
+ className="editor-textarea"
313
+ value={displayValue}
314
+ onChange={handleChange}
315
+ onScroll={handleScroll}
316
+ onSelect={handleSelect}
317
+ spellCheck={false}
318
+ style={{ fontFamily: parseResult.font }}
319
+ />
320
+
321
+ <button className="reset-btn" onClick={handleReset} title="Reset App">
322
+ <MdRefresh size={24} />
323
+ </button>
324
+
325
+ {selection && (
326
+ <div className="floating-toolbar" style={{ top: toolbarPos.top, left: toolbarPos.left }}>
327
+ {/^#?[0-9A-Fa-f]{3,6}(![0-9]+)?$/i.test(selection.text.trim()) ? (
328
+ <input
329
+ type="color"
330
+ value={getValidHex(selection.text)}
331
+ className="color-picker-input"
332
+ title="Adjust Color"
333
+ onChange={(e) => {
334
+ const newColor = e.target.value.toUpperCase();
335
+ let realStart = selection.start;
336
+ let realEnd = selection.end;
337
+
338
+ if (isFolded) {
339
+ const phIdx = displayValue.indexOf(FOLDED_PLACEHOLDER);
340
+ if (phIdx !== -1 && selection.start >= phIdx + FOLDED_PLACEHOLDER.length) {
341
+ const match = text.match(/\\begin\{define\}[\s\S]*?\\end\{define\}/);
342
+ if (match) {
343
+ const diff = match[0].length - FOLDED_PLACEHOLDER.length;
344
+ realStart += diff;
345
+ realEnd += diff;
346
+ }
347
+ }
348
+ }
349
+
350
+ let replacement = newColor;
351
+ const opacityMatch = selection.text.match(/![0-9]+/);
352
+ if (opacityMatch) {
353
+ replacement += opacityMatch[0];
354
+ } else if (!selection.text.trim().startsWith('#')) {
355
+ replacement = newColor.substring(1);
356
+ }
357
+
358
+ const before = text.substring(0, realStart);
359
+ const after = text.substring(realEnd);
360
+ const newText = before + replacement + after;
361
+ setText(newText);
362
+ setSelection({ start: selection.start, end: selection.start + replacement.length, text: replacement });
363
+ fetch('/api/data', { method: 'POST', body: newText });
364
+ }}
365
+ />
366
+ ) : (
367
+ <>
368
+ <button onClick={() => addCommand('color')} className="toolbar-btn" title="Add as Text Color">
369
+ <MdFormatColorText size={18} />
370
+ </button>
371
+ <button onClick={() => addCommand('highlight_series')} className="toolbar-btn" title="Add as Text Highlight Series">
372
+ <MdMoreHoriz size={18} />
373
+ </button>
374
+ <button onClick={() => addCommand('highlight_text')} className="toolbar-btn" title="Add as Text Highlight Text">
375
+ <MdHighlight size={18} />
376
+ </button>
377
+ </>
378
+ )}
379
+ </div>
380
+ )}
381
+ </div>
382
+ );
383
+ };
TextcodeEditor/src/index.css ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
3
+ line-height: 1.5;
4
+ font-weight: 400;
5
+
6
+ color-scheme: light;
7
+ color: #111;
8
+ background-color: #ffffff;
9
+
10
+ font-synthesis: none;
11
+ text-rendering: optimizeLegibility;
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ }
15
+
16
+ body {
17
+ margin: 0;
18
+ padding: 0;
19
+ width: 100vw;
20
+ height: 100vh;
21
+ overflow: hidden;
22
+ }
23
+
24
+ #root {
25
+ width: 100%;
26
+ height: 100%;
27
+ display: flex;
28
+ flex-direction: column;
29
+ }
30
+
31
+ * {
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ .floating-toolbar {
36
+ position: absolute;
37
+ z-index: 100;
38
+ background: white;
39
+ border: 1px solid #ddd;
40
+ border-radius: 6px;
41
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
42
+ display: flex;
43
+ gap: 4px;
44
+ padding: 4px;
45
+ }
46
+
47
+ .toolbar-btn {
48
+ background: transparent;
49
+ border: none;
50
+ cursor: pointer;
51
+ padding: 6px;
52
+ border-radius: 4px;
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ color: #555;
57
+ transition: all 0.2s;
58
+ }
59
+
60
+ .toolbar-btn:hover {
61
+ background: #f0f0f0;
62
+ color: #000;
63
+ }
TextcodeEditor/src/main.tsx ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
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
+ <StrictMode>
8
+ <App />
9
+ </StrictMode>,
10
+ )
TextcodeEditor/src/utils/parser.ts ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export interface StyleRule {
2
+ type: 'color' | 'highlight';
3
+ rgba: string;
4
+ target?: string;
5
+ start?: string;
6
+ end?: string;
7
+ }
8
+
9
+ export interface ParseResult {
10
+ font: string;
11
+ rules: StyleRule[];
12
+ cleanText: string; // The text without the define block (optional, if we want to render it, but we render the whole text including define block as per normal editor, we just apply styles outside it or everywhere?)
13
+ defineStartIdx: number;
14
+ defineEndIdx: number;
15
+ }
16
+
17
+ export function hexToRgba(hexOpacity: string): string {
18
+ const parts = hexOpacity.split('!');
19
+ let hex = parts[0].trim();
20
+ const opacityStr = parts[1] ? parts[1].trim() : '100';
21
+ const opacity = parseInt(opacityStr, 10) / 100;
22
+
23
+ if (hex.startsWith('#')) hex = hex.substring(1);
24
+
25
+ let r = 0, g = 0, b = 0;
26
+ if (hex.length === 3) {
27
+ r = parseInt(hex[0] + hex[0], 16);
28
+ g = parseInt(hex[1] + hex[1], 16);
29
+ b = parseInt(hex[2] + hex[2], 16);
30
+ } else if (hex.length === 6) {
31
+ r = parseInt(hex.substring(0, 2), 16);
32
+ g = parseInt(hex.substring(2, 4), 16);
33
+ b = parseInt(hex.substring(4, 6), 16);
34
+ }
35
+
36
+ if (isNaN(r) || isNaN(g) || isNaN(b)) {
37
+ return `rgba(0,0,0,${opacity})`; // fallback
38
+ }
39
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
40
+ }
41
+
42
+ export function parseDefinitions(text: string): ParseResult {
43
+ const result: ParseResult = {
44
+ font: 'monospace',
45
+ rules: [],
46
+ cleanText: text,
47
+ defineStartIdx: -1,
48
+ defineEndIdx: -1
49
+ };
50
+
51
+ const startIdx = text.indexOf('\\begin{define}');
52
+ const endIdx = text.indexOf('\\end{define}', startIdx);
53
+
54
+ if (startIdx !== -1 && endIdx !== -1) {
55
+ result.defineStartIdx = startIdx;
56
+ result.defineEndIdx = endIdx + 12;
57
+
58
+ const defineBlock = text.substring(startIdx, endIdx);
59
+ const lines = defineBlock.split('\n');
60
+
61
+ for (const line of lines) {
62
+ const trimmed = line.trim();
63
+ if (trimmed.startsWith('\\setfont')) {
64
+ const match = trimmed.match(/\\setfont\{([^}]+)\}/);
65
+ if (match) result.font = match[1];
66
+ } else if (trimmed.startsWith('\\textcolor')) {
67
+ const match = trimmed.match(/\\textcolor\{([^}]+)\}\{(.*)\}/);
68
+ if (match) {
69
+ result.rules.push({
70
+ type: 'color',
71
+ rgba: hexToRgba(match[1]),
72
+ target: match[2].replace(/\\([{}])/g, '$1')
73
+ });
74
+ }
75
+ } else if (trimmed.startsWith('\\texthighlight')) {
76
+ const match = trimmed.match(/\\texthighlight\{([^}]+)\}\{(.*)\}/);
77
+ if (match) {
78
+ const hex = match[1];
79
+ const targetStr = match[2].replace(/\\([{}])/g, '$1');
80
+
81
+ const dotIdx = targetStr.indexOf('...');
82
+ if (dotIdx !== -1) {
83
+ result.rules.push({
84
+ type: 'highlight',
85
+ rgba: hexToRgba(hex),
86
+ start: targetStr.substring(0, dotIdx),
87
+ end: targetStr.substring(dotIdx + 3)
88
+ });
89
+ } else {
90
+ result.rules.push({
91
+ type: 'highlight',
92
+ rgba: hexToRgba(hex),
93
+ target: targetStr
94
+ });
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+
101
+ return result;
102
+ }
103
+
104
+ // Generate an array of style layers for each character
105
+ export function generateCharacterStyles(text: string, parseResult: ParseResult) {
106
+ const styles: Array<{ color: string[], highlight: string[] }> = Array(text.length).fill(null).map(() => ({ color: [], highlight: [] }));
107
+
108
+ // We only apply styles outside the define block!
109
+ // Wait, user says "Anything outside the container section \begin{define}...\end{define} is where the user may start writing texts or symbols ... and these contents will automatically applied to itself."
110
+
111
+ const rules = parseResult.rules;
112
+
113
+ // Apply colors and exact match highlights (simple string match)
114
+ rules.filter(r => r.target).forEach(rule => {
115
+ let i = 0;
116
+ while (i < text.length) {
117
+ const idx = text.indexOf(rule.target!, i);
118
+ if (idx === -1) break;
119
+
120
+ // Check if inside define block
121
+ const inDefine = (idx >= parseResult.defineStartIdx && idx < parseResult.defineEndIdx);
122
+
123
+ if (!inDefine) {
124
+ for (let j = 0; j < rule.target!.length; j++) {
125
+ if (rule.type === 'color') styles[idx + j].color.push(rule.rgba);
126
+ if (rule.type === 'highlight') styles[idx + j].highlight.push(rule.rgba);
127
+ }
128
+ }
129
+ i = idx + rule.target!.length;
130
+ }
131
+ });
132
+
133
+ // Apply nested/block highlights (start to end match)
134
+ rules.filter(r => r.type === 'highlight' && r.start && r.end).forEach(rule => {
135
+ const isDefine = (idx: number) => idx >= parseResult.defineStartIdx && idx < parseResult.defineEndIdx;
136
+
137
+ if (rule.start === rule.end) {
138
+ // Toggle mode for identical start/end (e.g. backticks, quotes)
139
+ const validPairs: {start: number, end: number}[] = [];
140
+ let activeStart = -1;
141
+ let j = 0;
142
+ while (j < text.length) {
143
+ if (text.startsWith(rule.start!, j)) {
144
+ if (activeStart !== -1) {
145
+ validPairs.push({ start: activeStart, end: j + rule.end!.length });
146
+ activeStart = -1;
147
+ } else {
148
+ activeStart = j;
149
+ }
150
+ j += rule.start!.length;
151
+ } else {
152
+ j++;
153
+ }
154
+ }
155
+
156
+ validPairs.forEach(pair => {
157
+ for (let k = pair.start; k < pair.end; k++) {
158
+ if (!isDefine(k)) styles[k].highlight.push(rule.rgba);
159
+ }
160
+ });
161
+
162
+ } else {
163
+ // Nested mode for distinct start/end (e.g. parentheses, brackets)
164
+ const starts: number[] = [];
165
+ const validPairs: {start: number, end: number}[] = [];
166
+ let j = 0;
167
+
168
+ while (j < text.length) {
169
+ if (text.startsWith(rule.start!, j)) {
170
+ starts.push(j);
171
+ j += rule.start!.length;
172
+ } else if (text.startsWith(rule.end!, j)) {
173
+ if (starts.length > 0) {
174
+ const startIdx = starts.pop()!;
175
+ validPairs.push({ start: startIdx, end: j + rule.end!.length });
176
+ }
177
+ j += rule.end!.length;
178
+ } else {
179
+ j++;
180
+ }
181
+ }
182
+
183
+ validPairs.forEach(pair => {
184
+ for (let k = pair.start; k < pair.end; k++) {
185
+ if (!isDefine(k)) styles[k].highlight.push(rule.rgba);
186
+ }
187
+ });
188
+ }
189
+ });
190
+
191
+ return styles;
192
+ }
TextcodeEditor/tsconfig.app.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
+ "target": "es2023",
5
+ "lib": ["ES2023", "DOM"],
6
+ "module": "esnext",
7
+ "types": ["vite/client"],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "verbatimModuleSyntax": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+ "jsx": "react-jsx",
17
+
18
+ /* Linting */
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "erasableSyntaxOnly": true,
22
+ "noFallthroughCasesInSwitch": true
23
+ },
24
+ "include": ["src"]
25
+ }
TextcodeEditor/tsconfig.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
TextcodeEditor/tsconfig.node.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
+ "target": "es2023",
5
+ "lib": ["ES2023"],
6
+ "module": "esnext",
7
+ "types": ["node"],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "verbatimModuleSyntax": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+
17
+ /* Linting */
18
+ "noUnusedLocals": true,
19
+ "noUnusedParameters": true,
20
+ "erasableSyntaxOnly": true,
21
+ "noFallthroughCasesInSwitch": true
22
+ },
23
+ "include": ["vite.config.ts"]
24
+ }
TextcodeEditor/vite.config.ts ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { defineConfig } from 'vite'
2
+ import react from '@vitejs/plugin-react'
3
+ import fs from 'fs'
4
+ import path from 'path'
5
+
6
+ // Vite plugin to handle local file saving
7
+ function localFileBackend() {
8
+ return {
9
+ name: 'local-file-backend',
10
+ configureServer(server) {
11
+ server.middlewares.use(async (req, res, next) => {
12
+ const dbPath = path.resolve(__dirname, 'database.md');
13
+
14
+ if (req.url === '/api/data' && req.method === 'GET') {
15
+ try {
16
+ if (fs.existsSync(dbPath)) {
17
+ const data = fs.readFileSync(dbPath, 'utf-8');
18
+ res.setHeader('Content-Type', 'text/plain');
19
+ res.end(data);
20
+ } else {
21
+ res.statusCode = 404;
22
+ res.end('Not found');
23
+ }
24
+ } catch (e) {
25
+ res.statusCode = 500;
26
+ res.end('Error reading file');
27
+ }
28
+ return;
29
+ }
30
+
31
+ if (req.url === '/api/data' && req.method === 'POST') {
32
+ let body = '';
33
+ req.on('data', chunk => {
34
+ body += chunk.toString();
35
+ });
36
+ req.on('end', () => {
37
+ try {
38
+ fs.writeFileSync(dbPath, body);
39
+ res.statusCode = 200;
40
+ res.end('Saved');
41
+ } catch (e) {
42
+ res.statusCode = 500;
43
+ res.end('Error writing file');
44
+ }
45
+ });
46
+ return;
47
+ }
48
+
49
+ next();
50
+ })
51
+ }
52
+ }
53
+ }
54
+
55
+ // https://vite.dev/config/
56
+ export default defineConfig({
57
+ plugins: [react(), localFileBackend()],
58
+ })