algorembrant commited on
Commit
619120c
·
verified ·
1 Parent(s): 2ed9d2f

Upload 26 files

Browse files
.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?
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
README.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # React + 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 [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
8
+ - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
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 using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
STRUCTURE.md ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Project Structure
2
+
3
+ ```text
4
+ GlobeHk/
5
+ ├── public/
6
+ │ └── vite.svg
7
+ ├── src/
8
+ │ ├── assets/
9
+ │ │ └── react.svg
10
+ │ ├── components/
11
+ │ │ ├── Dashboard/
12
+ │ │ │ ├── NetworkMap.jsx
13
+ │ │ │ ├── StatsCard.jsx
14
+ │ │ │ └── UserTable.jsx
15
+ │ │ ├── Layout/
16
+ │ │ │ ├── Header.jsx
17
+ │ │ │ └── Sidebar.jsx
18
+ │ │ └── UI/
19
+ │ │ └── Badge.jsx
20
+ │ ├── data/
21
+ │ │ └── mockUsers.js
22
+ │ ├── styles/
23
+ │ │ ├── global.css
24
+ │ │ └── variables.css
25
+ │ ├── App.css
26
+ │ ├── App.jsx
27
+ │ ├── ErrorBoundary.jsx
28
+ │ ├── index.css
29
+ │ └── main.jsx
30
+ ├── .gitignore
31
+ ├── eslint.config.js
32
+ ├── index.html
33
+ ├── LICENSE
34
+ ├── package-lock.json
35
+ ├── package.json
36
+ ├── README.md
37
+ ├── TECHSTACK.md
38
+ └── vite.config.js
39
+ ```
TECHSTACK.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Techstack
2
+
3
+ Audit of **GlobeHk** project files (excluding environment and cache):
4
+
5
+ | File Type | Count | Size (KB) |
6
+ | :--- | :--- | :--- |
7
+ | JSX (React) (.jsx) | 9 | 22.7 |
8
+ | CSS (.css) | 4 | 3.6 |
9
+ | JavaScript (.js) | 3 | 2.9 |
10
+ | (no extension) | 2 | 11.5 |
11
+ | JSON (.json) | 2 | 94.3 |
12
+ | SVG Image (.svg) | 2 | 5.5 |
13
+ | HTML (.html) | 1 | 0.4 |
14
+ | Markdown (.md) | 1 | 1.1 |
15
+ | **Total** | **24** | **142.0** |
eslint.config.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { defineConfig, globalIgnores } from 'eslint/config'
6
+
7
+ export default defineConfig([
8
+ globalIgnores(['dist']),
9
+ {
10
+ files: ['**/*.{js,jsx}'],
11
+ extends: [
12
+ js.configs.recommended,
13
+ reactHooks.configs.flat.recommended,
14
+ reactRefresh.configs.vite,
15
+ ],
16
+ languageOptions: {
17
+ ecmaVersion: 2020,
18
+ globals: globals.browser,
19
+ parserOptions: {
20
+ ecmaVersion: 'latest',
21
+ ecmaFeatures: { jsx: true },
22
+ sourceType: 'module',
23
+ },
24
+ },
25
+ rules: {
26
+ 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
27
+ },
28
+ },
29
+ ])
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="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>globesim-temp</title>
8
+ </head>
9
+ <body>
10
+ <div id="root"></div>
11
+ <script type="module" src="/src/main.jsx"></script>
12
+ </body>
13
+ </html>
package-lock.json ADDED
@@ -0,0 +1,2887 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "globesim-temp",
3
+ "version": "0.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "globesim-temp",
9
+ "version": "0.0.0",
10
+ "dependencies": {
11
+ "lucide-react": "^0.563.0",
12
+ "react": "^19.2.0",
13
+ "react-dom": "^19.2.0"
14
+ },
15
+ "devDependencies": {
16
+ "@eslint/js": "^9.39.1",
17
+ "@types/react": "^19.2.5",
18
+ "@types/react-dom": "^19.2.3",
19
+ "@vitejs/plugin-react": "^5.1.1",
20
+ "eslint": "^9.39.1",
21
+ "eslint-plugin-react-hooks": "^7.0.1",
22
+ "eslint-plugin-react-refresh": "^0.4.24",
23
+ "globals": "^16.5.0",
24
+ "vite": "^7.2.4"
25
+ }
26
+ },
27
+ "node_modules/@babel/code-frame": {
28
+ "version": "7.29.0",
29
+ "dev": true,
30
+ "license": "MIT",
31
+ "dependencies": {
32
+ "@babel/helper-validator-identifier": "^7.28.5",
33
+ "js-tokens": "^4.0.0",
34
+ "picocolors": "^1.1.1"
35
+ },
36
+ "engines": {
37
+ "node": ">=6.9.0"
38
+ }
39
+ },
40
+ "node_modules/@babel/compat-data": {
41
+ "version": "7.29.0",
42
+ "dev": true,
43
+ "license": "MIT",
44
+ "engines": {
45
+ "node": ">=6.9.0"
46
+ }
47
+ },
48
+ "node_modules/@babel/core": {
49
+ "version": "7.29.0",
50
+ "dev": true,
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "@babel/code-frame": "^7.29.0",
54
+ "@babel/generator": "^7.29.0",
55
+ "@babel/helper-compilation-targets": "^7.28.6",
56
+ "@babel/helper-module-transforms": "^7.28.6",
57
+ "@babel/helpers": "^7.28.6",
58
+ "@babel/parser": "^7.29.0",
59
+ "@babel/template": "^7.28.6",
60
+ "@babel/traverse": "^7.29.0",
61
+ "@babel/types": "^7.29.0",
62
+ "@jridgewell/remapping": "^2.3.5",
63
+ "convert-source-map": "^2.0.0",
64
+ "debug": "^4.1.0",
65
+ "gensync": "^1.0.0-beta.2",
66
+ "json5": "^2.2.3",
67
+ "semver": "^6.3.1"
68
+ },
69
+ "engines": {
70
+ "node": ">=6.9.0"
71
+ },
72
+ "funding": {
73
+ "type": "opencollective",
74
+ "url": "https://opencollective.com/babel"
75
+ }
76
+ },
77
+ "node_modules/@babel/core/node_modules/@babel/helpers": {
78
+ "version": "7.28.6",
79
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
80
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
81
+ "dev": true,
82
+ "license": "MIT",
83
+ "dependencies": {
84
+ "@babel/template": "^7.28.6",
85
+ "@babel/types": "^7.28.6"
86
+ },
87
+ "engines": {
88
+ "node": ">=6.9.0"
89
+ }
90
+ },
91
+ "node_modules/@babel/generator": {
92
+ "version": "7.29.0",
93
+ "dev": true,
94
+ "license": "MIT",
95
+ "dependencies": {
96
+ "@babel/parser": "^7.29.0",
97
+ "@babel/types": "^7.29.0",
98
+ "@jridgewell/gen-mapping": "^0.3.12",
99
+ "@jridgewell/trace-mapping": "^0.3.28",
100
+ "jsesc": "^3.0.2"
101
+ },
102
+ "engines": {
103
+ "node": ">=6.9.0"
104
+ }
105
+ },
106
+ "node_modules/@babel/helper-compilation-targets": {
107
+ "version": "7.28.6",
108
+ "dev": true,
109
+ "license": "MIT",
110
+ "dependencies": {
111
+ "@babel/compat-data": "^7.28.6",
112
+ "@babel/helper-validator-option": "^7.27.1",
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.28.0",
123
+ "dev": true,
124
+ "license": "MIT",
125
+ "engines": {
126
+ "node": ">=6.9.0"
127
+ }
128
+ },
129
+ "node_modules/@babel/helper-module-imports": {
130
+ "version": "7.28.6",
131
+ "dev": true,
132
+ "license": "MIT",
133
+ "dependencies": {
134
+ "@babel/traverse": "^7.28.6",
135
+ "@babel/types": "^7.28.6"
136
+ },
137
+ "engines": {
138
+ "node": ">=6.9.0"
139
+ }
140
+ },
141
+ "node_modules/@babel/helper-module-transforms": {
142
+ "version": "7.28.6",
143
+ "dev": true,
144
+ "license": "MIT",
145
+ "dependencies": {
146
+ "@babel/helper-module-imports": "^7.28.6",
147
+ "@babel/helper-validator-identifier": "^7.28.5",
148
+ "@babel/traverse": "^7.28.6"
149
+ },
150
+ "engines": {
151
+ "node": ">=6.9.0"
152
+ },
153
+ "peerDependencies": {
154
+ "@babel/core": "^7.0.0"
155
+ }
156
+ },
157
+ "node_modules/@babel/helper-plugin-utils": {
158
+ "version": "7.28.6",
159
+ "dev": true,
160
+ "license": "MIT",
161
+ "engines": {
162
+ "node": ">=6.9.0"
163
+ }
164
+ },
165
+ "node_modules/@babel/helper-string-parser": {
166
+ "version": "7.27.1",
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.28.5",
175
+ "dev": true,
176
+ "license": "MIT",
177
+ "engines": {
178
+ "node": ">=6.9.0"
179
+ }
180
+ },
181
+ "node_modules/@babel/helper-validator-option": {
182
+ "version": "7.27.1",
183
+ "dev": true,
184
+ "license": "MIT",
185
+ "engines": {
186
+ "node": ">=6.9.0"
187
+ }
188
+ },
189
+ "node_modules/@babel/parser": {
190
+ "version": "7.29.0",
191
+ "dev": true,
192
+ "license": "MIT",
193
+ "dependencies": {
194
+ "@babel/types": "^7.29.0"
195
+ },
196
+ "bin": {
197
+ "parser": "bin/babel-parser.js"
198
+ },
199
+ "engines": {
200
+ "node": ">=6.0.0"
201
+ }
202
+ },
203
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
204
+ "version": "7.27.1",
205
+ "dev": true,
206
+ "license": "MIT",
207
+ "dependencies": {
208
+ "@babel/helper-plugin-utils": "^7.27.1"
209
+ },
210
+ "engines": {
211
+ "node": ">=6.9.0"
212
+ },
213
+ "peerDependencies": {
214
+ "@babel/core": "^7.0.0-0"
215
+ }
216
+ },
217
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
218
+ "version": "7.27.1",
219
+ "dev": true,
220
+ "license": "MIT",
221
+ "dependencies": {
222
+ "@babel/helper-plugin-utils": "^7.27.1"
223
+ },
224
+ "engines": {
225
+ "node": ">=6.9.0"
226
+ },
227
+ "peerDependencies": {
228
+ "@babel/core": "^7.0.0-0"
229
+ }
230
+ },
231
+ "node_modules/@babel/template": {
232
+ "version": "7.28.6",
233
+ "dev": true,
234
+ "license": "MIT",
235
+ "dependencies": {
236
+ "@babel/code-frame": "^7.28.6",
237
+ "@babel/parser": "^7.28.6",
238
+ "@babel/types": "^7.28.6"
239
+ },
240
+ "engines": {
241
+ "node": ">=6.9.0"
242
+ }
243
+ },
244
+ "node_modules/@babel/traverse": {
245
+ "version": "7.29.0",
246
+ "dev": true,
247
+ "license": "MIT",
248
+ "dependencies": {
249
+ "@babel/code-frame": "^7.29.0",
250
+ "@babel/generator": "^7.29.0",
251
+ "@babel/helper-globals": "^7.28.0",
252
+ "@babel/parser": "^7.29.0",
253
+ "@babel/template": "^7.28.6",
254
+ "@babel/types": "^7.29.0",
255
+ "debug": "^4.3.1"
256
+ },
257
+ "engines": {
258
+ "node": ">=6.9.0"
259
+ }
260
+ },
261
+ "node_modules/@babel/types": {
262
+ "version": "7.29.0",
263
+ "dev": true,
264
+ "license": "MIT",
265
+ "dependencies": {
266
+ "@babel/helper-string-parser": "^7.27.1",
267
+ "@babel/helper-validator-identifier": "^7.28.5"
268
+ },
269
+ "engines": {
270
+ "node": ">=6.9.0"
271
+ }
272
+ },
273
+ "node_modules/@esbuild/aix-ppc64": {
274
+ "version": "0.27.2",
275
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
276
+ "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
277
+ "cpu": [
278
+ "ppc64"
279
+ ],
280
+ "dev": true,
281
+ "license": "MIT",
282
+ "optional": true,
283
+ "os": [
284
+ "aix"
285
+ ],
286
+ "engines": {
287
+ "node": ">=18"
288
+ }
289
+ },
290
+ "node_modules/@esbuild/android-arm": {
291
+ "version": "0.27.2",
292
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
293
+ "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
294
+ "cpu": [
295
+ "arm"
296
+ ],
297
+ "dev": true,
298
+ "license": "MIT",
299
+ "optional": true,
300
+ "os": [
301
+ "android"
302
+ ],
303
+ "engines": {
304
+ "node": ">=18"
305
+ }
306
+ },
307
+ "node_modules/@esbuild/android-arm64": {
308
+ "version": "0.27.2",
309
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
310
+ "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
311
+ "cpu": [
312
+ "arm64"
313
+ ],
314
+ "dev": true,
315
+ "license": "MIT",
316
+ "optional": true,
317
+ "os": [
318
+ "android"
319
+ ],
320
+ "engines": {
321
+ "node": ">=18"
322
+ }
323
+ },
324
+ "node_modules/@esbuild/android-x64": {
325
+ "version": "0.27.2",
326
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
327
+ "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
328
+ "cpu": [
329
+ "x64"
330
+ ],
331
+ "dev": true,
332
+ "license": "MIT",
333
+ "optional": true,
334
+ "os": [
335
+ "android"
336
+ ],
337
+ "engines": {
338
+ "node": ">=18"
339
+ }
340
+ },
341
+ "node_modules/@esbuild/darwin-arm64": {
342
+ "version": "0.27.2",
343
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
344
+ "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
345
+ "cpu": [
346
+ "arm64"
347
+ ],
348
+ "dev": true,
349
+ "license": "MIT",
350
+ "optional": true,
351
+ "os": [
352
+ "darwin"
353
+ ],
354
+ "engines": {
355
+ "node": ">=18"
356
+ }
357
+ },
358
+ "node_modules/@esbuild/darwin-x64": {
359
+ "version": "0.27.2",
360
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
361
+ "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
362
+ "cpu": [
363
+ "x64"
364
+ ],
365
+ "dev": true,
366
+ "license": "MIT",
367
+ "optional": true,
368
+ "os": [
369
+ "darwin"
370
+ ],
371
+ "engines": {
372
+ "node": ">=18"
373
+ }
374
+ },
375
+ "node_modules/@esbuild/freebsd-arm64": {
376
+ "version": "0.27.2",
377
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
378
+ "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
379
+ "cpu": [
380
+ "arm64"
381
+ ],
382
+ "dev": true,
383
+ "license": "MIT",
384
+ "optional": true,
385
+ "os": [
386
+ "freebsd"
387
+ ],
388
+ "engines": {
389
+ "node": ">=18"
390
+ }
391
+ },
392
+ "node_modules/@esbuild/freebsd-x64": {
393
+ "version": "0.27.2",
394
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
395
+ "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
396
+ "cpu": [
397
+ "x64"
398
+ ],
399
+ "dev": true,
400
+ "license": "MIT",
401
+ "optional": true,
402
+ "os": [
403
+ "freebsd"
404
+ ],
405
+ "engines": {
406
+ "node": ">=18"
407
+ }
408
+ },
409
+ "node_modules/@esbuild/linux-arm": {
410
+ "version": "0.27.2",
411
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
412
+ "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
413
+ "cpu": [
414
+ "arm"
415
+ ],
416
+ "dev": true,
417
+ "license": "MIT",
418
+ "optional": true,
419
+ "os": [
420
+ "linux"
421
+ ],
422
+ "engines": {
423
+ "node": ">=18"
424
+ }
425
+ },
426
+ "node_modules/@esbuild/linux-arm64": {
427
+ "version": "0.27.2",
428
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
429
+ "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
430
+ "cpu": [
431
+ "arm64"
432
+ ],
433
+ "dev": true,
434
+ "license": "MIT",
435
+ "optional": true,
436
+ "os": [
437
+ "linux"
438
+ ],
439
+ "engines": {
440
+ "node": ">=18"
441
+ }
442
+ },
443
+ "node_modules/@esbuild/linux-ia32": {
444
+ "version": "0.27.2",
445
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
446
+ "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
447
+ "cpu": [
448
+ "ia32"
449
+ ],
450
+ "dev": true,
451
+ "license": "MIT",
452
+ "optional": true,
453
+ "os": [
454
+ "linux"
455
+ ],
456
+ "engines": {
457
+ "node": ">=18"
458
+ }
459
+ },
460
+ "node_modules/@esbuild/linux-loong64": {
461
+ "version": "0.27.2",
462
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
463
+ "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
464
+ "cpu": [
465
+ "loong64"
466
+ ],
467
+ "dev": true,
468
+ "license": "MIT",
469
+ "optional": true,
470
+ "os": [
471
+ "linux"
472
+ ],
473
+ "engines": {
474
+ "node": ">=18"
475
+ }
476
+ },
477
+ "node_modules/@esbuild/linux-mips64el": {
478
+ "version": "0.27.2",
479
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
480
+ "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
481
+ "cpu": [
482
+ "mips64el"
483
+ ],
484
+ "dev": true,
485
+ "license": "MIT",
486
+ "optional": true,
487
+ "os": [
488
+ "linux"
489
+ ],
490
+ "engines": {
491
+ "node": ">=18"
492
+ }
493
+ },
494
+ "node_modules/@esbuild/linux-ppc64": {
495
+ "version": "0.27.2",
496
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
497
+ "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
498
+ "cpu": [
499
+ "ppc64"
500
+ ],
501
+ "dev": true,
502
+ "license": "MIT",
503
+ "optional": true,
504
+ "os": [
505
+ "linux"
506
+ ],
507
+ "engines": {
508
+ "node": ">=18"
509
+ }
510
+ },
511
+ "node_modules/@esbuild/linux-riscv64": {
512
+ "version": "0.27.2",
513
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
514
+ "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
515
+ "cpu": [
516
+ "riscv64"
517
+ ],
518
+ "dev": true,
519
+ "license": "MIT",
520
+ "optional": true,
521
+ "os": [
522
+ "linux"
523
+ ],
524
+ "engines": {
525
+ "node": ">=18"
526
+ }
527
+ },
528
+ "node_modules/@esbuild/linux-s390x": {
529
+ "version": "0.27.2",
530
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
531
+ "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
532
+ "cpu": [
533
+ "s390x"
534
+ ],
535
+ "dev": true,
536
+ "license": "MIT",
537
+ "optional": true,
538
+ "os": [
539
+ "linux"
540
+ ],
541
+ "engines": {
542
+ "node": ">=18"
543
+ }
544
+ },
545
+ "node_modules/@esbuild/linux-x64": {
546
+ "version": "0.27.2",
547
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
548
+ "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
549
+ "cpu": [
550
+ "x64"
551
+ ],
552
+ "dev": true,
553
+ "license": "MIT",
554
+ "optional": true,
555
+ "os": [
556
+ "linux"
557
+ ],
558
+ "engines": {
559
+ "node": ">=18"
560
+ }
561
+ },
562
+ "node_modules/@esbuild/netbsd-arm64": {
563
+ "version": "0.27.2",
564
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
565
+ "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
566
+ "cpu": [
567
+ "arm64"
568
+ ],
569
+ "dev": true,
570
+ "license": "MIT",
571
+ "optional": true,
572
+ "os": [
573
+ "netbsd"
574
+ ],
575
+ "engines": {
576
+ "node": ">=18"
577
+ }
578
+ },
579
+ "node_modules/@esbuild/netbsd-x64": {
580
+ "version": "0.27.2",
581
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
582
+ "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
583
+ "cpu": [
584
+ "x64"
585
+ ],
586
+ "dev": true,
587
+ "license": "MIT",
588
+ "optional": true,
589
+ "os": [
590
+ "netbsd"
591
+ ],
592
+ "engines": {
593
+ "node": ">=18"
594
+ }
595
+ },
596
+ "node_modules/@esbuild/openbsd-arm64": {
597
+ "version": "0.27.2",
598
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
599
+ "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
600
+ "cpu": [
601
+ "arm64"
602
+ ],
603
+ "dev": true,
604
+ "license": "MIT",
605
+ "optional": true,
606
+ "os": [
607
+ "openbsd"
608
+ ],
609
+ "engines": {
610
+ "node": ">=18"
611
+ }
612
+ },
613
+ "node_modules/@esbuild/openbsd-x64": {
614
+ "version": "0.27.2",
615
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
616
+ "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
617
+ "cpu": [
618
+ "x64"
619
+ ],
620
+ "dev": true,
621
+ "license": "MIT",
622
+ "optional": true,
623
+ "os": [
624
+ "openbsd"
625
+ ],
626
+ "engines": {
627
+ "node": ">=18"
628
+ }
629
+ },
630
+ "node_modules/@esbuild/openharmony-arm64": {
631
+ "version": "0.27.2",
632
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
633
+ "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
634
+ "cpu": [
635
+ "arm64"
636
+ ],
637
+ "dev": true,
638
+ "license": "MIT",
639
+ "optional": true,
640
+ "os": [
641
+ "openharmony"
642
+ ],
643
+ "engines": {
644
+ "node": ">=18"
645
+ }
646
+ },
647
+ "node_modules/@esbuild/sunos-x64": {
648
+ "version": "0.27.2",
649
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
650
+ "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
651
+ "cpu": [
652
+ "x64"
653
+ ],
654
+ "dev": true,
655
+ "license": "MIT",
656
+ "optional": true,
657
+ "os": [
658
+ "sunos"
659
+ ],
660
+ "engines": {
661
+ "node": ">=18"
662
+ }
663
+ },
664
+ "node_modules/@esbuild/win32-arm64": {
665
+ "version": "0.27.2",
666
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
667
+ "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
668
+ "cpu": [
669
+ "arm64"
670
+ ],
671
+ "dev": true,
672
+ "license": "MIT",
673
+ "optional": true,
674
+ "os": [
675
+ "win32"
676
+ ],
677
+ "engines": {
678
+ "node": ">=18"
679
+ }
680
+ },
681
+ "node_modules/@esbuild/win32-ia32": {
682
+ "version": "0.27.2",
683
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
684
+ "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
685
+ "cpu": [
686
+ "ia32"
687
+ ],
688
+ "dev": true,
689
+ "license": "MIT",
690
+ "optional": true,
691
+ "os": [
692
+ "win32"
693
+ ],
694
+ "engines": {
695
+ "node": ">=18"
696
+ }
697
+ },
698
+ "node_modules/@esbuild/win32-x64": {
699
+ "version": "0.27.2",
700
+ "cpu": [
701
+ "x64"
702
+ ],
703
+ "dev": true,
704
+ "license": "MIT",
705
+ "optional": true,
706
+ "os": [
707
+ "win32"
708
+ ],
709
+ "engines": {
710
+ "node": ">=18"
711
+ }
712
+ },
713
+ "node_modules/@eslint-community/eslint-utils": {
714
+ "version": "4.9.1",
715
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
716
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
717
+ "dev": true,
718
+ "license": "MIT",
719
+ "dependencies": {
720
+ "eslint-visitor-keys": "^3.4.3"
721
+ },
722
+ "engines": {
723
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
724
+ },
725
+ "funding": {
726
+ "url": "https://opencollective.com/eslint"
727
+ },
728
+ "peerDependencies": {
729
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
730
+ }
731
+ },
732
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
733
+ "version": "3.4.3",
734
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
735
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
736
+ "dev": true,
737
+ "license": "Apache-2.0",
738
+ "engines": {
739
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
740
+ },
741
+ "funding": {
742
+ "url": "https://opencollective.com/eslint"
743
+ }
744
+ },
745
+ "node_modules/@eslint-community/regexpp": {
746
+ "version": "4.12.2",
747
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
748
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
749
+ "dev": true,
750
+ "license": "MIT",
751
+ "engines": {
752
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
753
+ }
754
+ },
755
+ "node_modules/@eslint/config-array": {
756
+ "version": "0.21.1",
757
+ "dev": true,
758
+ "license": "Apache-2.0",
759
+ "dependencies": {
760
+ "@eslint/object-schema": "^2.1.7",
761
+ "debug": "^4.3.1",
762
+ "minimatch": "^3.1.2"
763
+ },
764
+ "engines": {
765
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
766
+ }
767
+ },
768
+ "node_modules/@eslint/config-helpers": {
769
+ "version": "0.4.2",
770
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
771
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
772
+ "dev": true,
773
+ "license": "Apache-2.0",
774
+ "dependencies": {
775
+ "@eslint/core": "^0.17.0"
776
+ },
777
+ "engines": {
778
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
779
+ }
780
+ },
781
+ "node_modules/@eslint/core": {
782
+ "version": "0.17.0",
783
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
784
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
785
+ "dev": true,
786
+ "license": "Apache-2.0",
787
+ "dependencies": {
788
+ "@types/json-schema": "^7.0.15"
789
+ },
790
+ "engines": {
791
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
792
+ }
793
+ },
794
+ "node_modules/@eslint/eslintrc": {
795
+ "version": "3.3.3",
796
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
797
+ "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
798
+ "dev": true,
799
+ "license": "MIT",
800
+ "dependencies": {
801
+ "ajv": "^6.12.4",
802
+ "debug": "^4.3.2",
803
+ "espree": "^10.0.1",
804
+ "globals": "^14.0.0",
805
+ "ignore": "^5.2.0",
806
+ "import-fresh": "^3.2.1",
807
+ "js-yaml": "^4.1.1",
808
+ "minimatch": "^3.1.2",
809
+ "strip-json-comments": "^3.1.1"
810
+ },
811
+ "engines": {
812
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
813
+ },
814
+ "funding": {
815
+ "url": "https://opencollective.com/eslint"
816
+ }
817
+ },
818
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
819
+ "version": "14.0.0",
820
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
821
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
822
+ "dev": true,
823
+ "license": "MIT",
824
+ "engines": {
825
+ "node": ">=18"
826
+ },
827
+ "funding": {
828
+ "url": "https://github.com/sponsors/sindresorhus"
829
+ }
830
+ },
831
+ "node_modules/@eslint/js": {
832
+ "version": "9.39.2",
833
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
834
+ "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
835
+ "dev": true,
836
+ "license": "MIT",
837
+ "engines": {
838
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
839
+ },
840
+ "funding": {
841
+ "url": "https://eslint.org/donate"
842
+ }
843
+ },
844
+ "node_modules/@eslint/object-schema": {
845
+ "version": "2.1.7",
846
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
847
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
848
+ "dev": true,
849
+ "license": "Apache-2.0",
850
+ "engines": {
851
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
852
+ }
853
+ },
854
+ "node_modules/@eslint/plugin-kit": {
855
+ "version": "0.4.1",
856
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
857
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
858
+ "dev": true,
859
+ "license": "Apache-2.0",
860
+ "dependencies": {
861
+ "@eslint/core": "^0.17.0",
862
+ "levn": "^0.4.1"
863
+ },
864
+ "engines": {
865
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
866
+ }
867
+ },
868
+ "node_modules/@humanfs/core": {
869
+ "version": "0.19.1",
870
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
871
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
872
+ "dev": true,
873
+ "license": "Apache-2.0",
874
+ "engines": {
875
+ "node": ">=18.18.0"
876
+ }
877
+ },
878
+ "node_modules/@humanfs/node": {
879
+ "version": "0.16.7",
880
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
881
+ "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
882
+ "dev": true,
883
+ "license": "Apache-2.0",
884
+ "dependencies": {
885
+ "@humanfs/core": "^0.19.1",
886
+ "@humanwhocodes/retry": "^0.4.0"
887
+ },
888
+ "engines": {
889
+ "node": ">=18.18.0"
890
+ }
891
+ },
892
+ "node_modules/@humanwhocodes/module-importer": {
893
+ "version": "1.0.1",
894
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
895
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
896
+ "dev": true,
897
+ "license": "Apache-2.0",
898
+ "engines": {
899
+ "node": ">=12.22"
900
+ },
901
+ "funding": {
902
+ "type": "github",
903
+ "url": "https://github.com/sponsors/nzakas"
904
+ }
905
+ },
906
+ "node_modules/@humanwhocodes/retry": {
907
+ "version": "0.4.3",
908
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
909
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
910
+ "dev": true,
911
+ "license": "Apache-2.0",
912
+ "engines": {
913
+ "node": ">=18.18"
914
+ },
915
+ "funding": {
916
+ "type": "github",
917
+ "url": "https://github.com/sponsors/nzakas"
918
+ }
919
+ },
920
+ "node_modules/@jridgewell/gen-mapping": {
921
+ "version": "0.3.13",
922
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
923
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
924
+ "dev": true,
925
+ "license": "MIT",
926
+ "dependencies": {
927
+ "@jridgewell/sourcemap-codec": "^1.5.0",
928
+ "@jridgewell/trace-mapping": "^0.3.24"
929
+ }
930
+ },
931
+ "node_modules/@jridgewell/remapping": {
932
+ "version": "2.3.5",
933
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
934
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
935
+ "dev": true,
936
+ "license": "MIT",
937
+ "dependencies": {
938
+ "@jridgewell/gen-mapping": "^0.3.5",
939
+ "@jridgewell/trace-mapping": "^0.3.24"
940
+ }
941
+ },
942
+ "node_modules/@jridgewell/resolve-uri": {
943
+ "version": "3.1.2",
944
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
945
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
946
+ "dev": true,
947
+ "license": "MIT",
948
+ "engines": {
949
+ "node": ">=6.0.0"
950
+ }
951
+ },
952
+ "node_modules/@jridgewell/sourcemap-codec": {
953
+ "version": "1.5.5",
954
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
955
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
956
+ "dev": true,
957
+ "license": "MIT"
958
+ },
959
+ "node_modules/@jridgewell/trace-mapping": {
960
+ "version": "0.3.31",
961
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
962
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
963
+ "dev": true,
964
+ "license": "MIT",
965
+ "dependencies": {
966
+ "@jridgewell/resolve-uri": "^3.1.0",
967
+ "@jridgewell/sourcemap-codec": "^1.4.14"
968
+ }
969
+ },
970
+ "node_modules/@rolldown/pluginutils": {
971
+ "version": "1.0.0-rc.2",
972
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz",
973
+ "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==",
974
+ "dev": true,
975
+ "license": "MIT"
976
+ },
977
+ "node_modules/@rollup/rollup-android-arm-eabi": {
978
+ "version": "4.57.1",
979
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz",
980
+ "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==",
981
+ "cpu": [
982
+ "arm"
983
+ ],
984
+ "dev": true,
985
+ "license": "MIT",
986
+ "optional": true,
987
+ "os": [
988
+ "android"
989
+ ]
990
+ },
991
+ "node_modules/@rollup/rollup-android-arm64": {
992
+ "version": "4.57.1",
993
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz",
994
+ "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==",
995
+ "cpu": [
996
+ "arm64"
997
+ ],
998
+ "dev": true,
999
+ "license": "MIT",
1000
+ "optional": true,
1001
+ "os": [
1002
+ "android"
1003
+ ]
1004
+ },
1005
+ "node_modules/@rollup/rollup-darwin-arm64": {
1006
+ "version": "4.57.1",
1007
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz",
1008
+ "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==",
1009
+ "cpu": [
1010
+ "arm64"
1011
+ ],
1012
+ "dev": true,
1013
+ "license": "MIT",
1014
+ "optional": true,
1015
+ "os": [
1016
+ "darwin"
1017
+ ]
1018
+ },
1019
+ "node_modules/@rollup/rollup-darwin-x64": {
1020
+ "version": "4.57.1",
1021
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz",
1022
+ "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==",
1023
+ "cpu": [
1024
+ "x64"
1025
+ ],
1026
+ "dev": true,
1027
+ "license": "MIT",
1028
+ "optional": true,
1029
+ "os": [
1030
+ "darwin"
1031
+ ]
1032
+ },
1033
+ "node_modules/@rollup/rollup-freebsd-arm64": {
1034
+ "version": "4.57.1",
1035
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz",
1036
+ "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==",
1037
+ "cpu": [
1038
+ "arm64"
1039
+ ],
1040
+ "dev": true,
1041
+ "license": "MIT",
1042
+ "optional": true,
1043
+ "os": [
1044
+ "freebsd"
1045
+ ]
1046
+ },
1047
+ "node_modules/@rollup/rollup-freebsd-x64": {
1048
+ "version": "4.57.1",
1049
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz",
1050
+ "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==",
1051
+ "cpu": [
1052
+ "x64"
1053
+ ],
1054
+ "dev": true,
1055
+ "license": "MIT",
1056
+ "optional": true,
1057
+ "os": [
1058
+ "freebsd"
1059
+ ]
1060
+ },
1061
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
1062
+ "version": "4.57.1",
1063
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz",
1064
+ "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==",
1065
+ "cpu": [
1066
+ "arm"
1067
+ ],
1068
+ "dev": true,
1069
+ "license": "MIT",
1070
+ "optional": true,
1071
+ "os": [
1072
+ "linux"
1073
+ ]
1074
+ },
1075
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
1076
+ "version": "4.57.1",
1077
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz",
1078
+ "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==",
1079
+ "cpu": [
1080
+ "arm"
1081
+ ],
1082
+ "dev": true,
1083
+ "license": "MIT",
1084
+ "optional": true,
1085
+ "os": [
1086
+ "linux"
1087
+ ]
1088
+ },
1089
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
1090
+ "version": "4.57.1",
1091
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz",
1092
+ "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==",
1093
+ "cpu": [
1094
+ "arm64"
1095
+ ],
1096
+ "dev": true,
1097
+ "license": "MIT",
1098
+ "optional": true,
1099
+ "os": [
1100
+ "linux"
1101
+ ]
1102
+ },
1103
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
1104
+ "version": "4.57.1",
1105
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz",
1106
+ "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==",
1107
+ "cpu": [
1108
+ "arm64"
1109
+ ],
1110
+ "dev": true,
1111
+ "license": "MIT",
1112
+ "optional": true,
1113
+ "os": [
1114
+ "linux"
1115
+ ]
1116
+ },
1117
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
1118
+ "version": "4.57.1",
1119
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz",
1120
+ "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==",
1121
+ "cpu": [
1122
+ "loong64"
1123
+ ],
1124
+ "dev": true,
1125
+ "license": "MIT",
1126
+ "optional": true,
1127
+ "os": [
1128
+ "linux"
1129
+ ]
1130
+ },
1131
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
1132
+ "version": "4.57.1",
1133
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz",
1134
+ "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==",
1135
+ "cpu": [
1136
+ "loong64"
1137
+ ],
1138
+ "dev": true,
1139
+ "license": "MIT",
1140
+ "optional": true,
1141
+ "os": [
1142
+ "linux"
1143
+ ]
1144
+ },
1145
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
1146
+ "version": "4.57.1",
1147
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz",
1148
+ "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==",
1149
+ "cpu": [
1150
+ "ppc64"
1151
+ ],
1152
+ "dev": true,
1153
+ "license": "MIT",
1154
+ "optional": true,
1155
+ "os": [
1156
+ "linux"
1157
+ ]
1158
+ },
1159
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
1160
+ "version": "4.57.1",
1161
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz",
1162
+ "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==",
1163
+ "cpu": [
1164
+ "ppc64"
1165
+ ],
1166
+ "dev": true,
1167
+ "license": "MIT",
1168
+ "optional": true,
1169
+ "os": [
1170
+ "linux"
1171
+ ]
1172
+ },
1173
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1174
+ "version": "4.57.1",
1175
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz",
1176
+ "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==",
1177
+ "cpu": [
1178
+ "riscv64"
1179
+ ],
1180
+ "dev": true,
1181
+ "license": "MIT",
1182
+ "optional": true,
1183
+ "os": [
1184
+ "linux"
1185
+ ]
1186
+ },
1187
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
1188
+ "version": "4.57.1",
1189
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz",
1190
+ "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==",
1191
+ "cpu": [
1192
+ "riscv64"
1193
+ ],
1194
+ "dev": true,
1195
+ "license": "MIT",
1196
+ "optional": true,
1197
+ "os": [
1198
+ "linux"
1199
+ ]
1200
+ },
1201
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
1202
+ "version": "4.57.1",
1203
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz",
1204
+ "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==",
1205
+ "cpu": [
1206
+ "s390x"
1207
+ ],
1208
+ "dev": true,
1209
+ "license": "MIT",
1210
+ "optional": true,
1211
+ "os": [
1212
+ "linux"
1213
+ ]
1214
+ },
1215
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
1216
+ "version": "4.57.1",
1217
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz",
1218
+ "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==",
1219
+ "cpu": [
1220
+ "x64"
1221
+ ],
1222
+ "dev": true,
1223
+ "license": "MIT",
1224
+ "optional": true,
1225
+ "os": [
1226
+ "linux"
1227
+ ]
1228
+ },
1229
+ "node_modules/@rollup/rollup-linux-x64-musl": {
1230
+ "version": "4.57.1",
1231
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz",
1232
+ "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==",
1233
+ "cpu": [
1234
+ "x64"
1235
+ ],
1236
+ "dev": true,
1237
+ "license": "MIT",
1238
+ "optional": true,
1239
+ "os": [
1240
+ "linux"
1241
+ ]
1242
+ },
1243
+ "node_modules/@rollup/rollup-openbsd-x64": {
1244
+ "version": "4.57.1",
1245
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz",
1246
+ "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==",
1247
+ "cpu": [
1248
+ "x64"
1249
+ ],
1250
+ "dev": true,
1251
+ "license": "MIT",
1252
+ "optional": true,
1253
+ "os": [
1254
+ "openbsd"
1255
+ ]
1256
+ },
1257
+ "node_modules/@rollup/rollup-openharmony-arm64": {
1258
+ "version": "4.57.1",
1259
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz",
1260
+ "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==",
1261
+ "cpu": [
1262
+ "arm64"
1263
+ ],
1264
+ "dev": true,
1265
+ "license": "MIT",
1266
+ "optional": true,
1267
+ "os": [
1268
+ "openharmony"
1269
+ ]
1270
+ },
1271
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
1272
+ "version": "4.57.1",
1273
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz",
1274
+ "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==",
1275
+ "cpu": [
1276
+ "arm64"
1277
+ ],
1278
+ "dev": true,
1279
+ "license": "MIT",
1280
+ "optional": true,
1281
+ "os": [
1282
+ "win32"
1283
+ ]
1284
+ },
1285
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
1286
+ "version": "4.57.1",
1287
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz",
1288
+ "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==",
1289
+ "cpu": [
1290
+ "ia32"
1291
+ ],
1292
+ "dev": true,
1293
+ "license": "MIT",
1294
+ "optional": true,
1295
+ "os": [
1296
+ "win32"
1297
+ ]
1298
+ },
1299
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
1300
+ "version": "4.57.1",
1301
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz",
1302
+ "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==",
1303
+ "cpu": [
1304
+ "x64"
1305
+ ],
1306
+ "dev": true,
1307
+ "license": "MIT",
1308
+ "optional": true,
1309
+ "os": [
1310
+ "win32"
1311
+ ]
1312
+ },
1313
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
1314
+ "version": "4.57.1",
1315
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz",
1316
+ "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==",
1317
+ "cpu": [
1318
+ "x64"
1319
+ ],
1320
+ "dev": true,
1321
+ "license": "MIT",
1322
+ "optional": true,
1323
+ "os": [
1324
+ "win32"
1325
+ ]
1326
+ },
1327
+ "node_modules/@types/babel__core": {
1328
+ "version": "7.20.5",
1329
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
1330
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
1331
+ "dev": true,
1332
+ "license": "MIT",
1333
+ "dependencies": {
1334
+ "@babel/parser": "^7.20.7",
1335
+ "@babel/types": "^7.20.7",
1336
+ "@types/babel__generator": "*",
1337
+ "@types/babel__template": "*",
1338
+ "@types/babel__traverse": "*"
1339
+ }
1340
+ },
1341
+ "node_modules/@types/babel__generator": {
1342
+ "version": "7.27.0",
1343
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
1344
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
1345
+ "dev": true,
1346
+ "license": "MIT",
1347
+ "dependencies": {
1348
+ "@babel/types": "^7.0.0"
1349
+ }
1350
+ },
1351
+ "node_modules/@types/babel__template": {
1352
+ "version": "7.4.4",
1353
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
1354
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
1355
+ "dev": true,
1356
+ "license": "MIT",
1357
+ "dependencies": {
1358
+ "@babel/parser": "^7.1.0",
1359
+ "@babel/types": "^7.0.0"
1360
+ }
1361
+ },
1362
+ "node_modules/@types/babel__traverse": {
1363
+ "version": "7.28.0",
1364
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
1365
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
1366
+ "dev": true,
1367
+ "license": "MIT",
1368
+ "dependencies": {
1369
+ "@babel/types": "^7.28.2"
1370
+ }
1371
+ },
1372
+ "node_modules/@types/estree": {
1373
+ "version": "1.0.8",
1374
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1375
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
1376
+ "dev": true,
1377
+ "license": "MIT"
1378
+ },
1379
+ "node_modules/@types/json-schema": {
1380
+ "version": "7.0.15",
1381
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
1382
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
1383
+ "dev": true,
1384
+ "license": "MIT"
1385
+ },
1386
+ "node_modules/@types/react": {
1387
+ "version": "19.2.10",
1388
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.10.tgz",
1389
+ "integrity": "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==",
1390
+ "dev": true,
1391
+ "license": "MIT",
1392
+ "dependencies": {
1393
+ "csstype": "^3.2.2"
1394
+ }
1395
+ },
1396
+ "node_modules/@types/react-dom": {
1397
+ "version": "19.2.3",
1398
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
1399
+ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
1400
+ "dev": true,
1401
+ "license": "MIT",
1402
+ "peerDependencies": {
1403
+ "@types/react": "^19.2.0"
1404
+ }
1405
+ },
1406
+ "node_modules/@vitejs/plugin-react": {
1407
+ "version": "5.1.3",
1408
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.3.tgz",
1409
+ "integrity": "sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==",
1410
+ "dev": true,
1411
+ "license": "MIT",
1412
+ "dependencies": {
1413
+ "@babel/core": "^7.29.0",
1414
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
1415
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
1416
+ "@rolldown/pluginutils": "1.0.0-rc.2",
1417
+ "@types/babel__core": "^7.20.5",
1418
+ "react-refresh": "^0.18.0"
1419
+ },
1420
+ "engines": {
1421
+ "node": "^20.19.0 || >=22.12.0"
1422
+ },
1423
+ "peerDependencies": {
1424
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
1425
+ }
1426
+ },
1427
+ "node_modules/acorn": {
1428
+ "version": "8.15.0",
1429
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
1430
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
1431
+ "dev": true,
1432
+ "license": "MIT",
1433
+ "bin": {
1434
+ "acorn": "bin/acorn"
1435
+ },
1436
+ "engines": {
1437
+ "node": ">=0.4.0"
1438
+ }
1439
+ },
1440
+ "node_modules/acorn-jsx": {
1441
+ "version": "5.3.2",
1442
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1443
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1444
+ "dev": true,
1445
+ "license": "MIT",
1446
+ "peerDependencies": {
1447
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1448
+ }
1449
+ },
1450
+ "node_modules/ajv": {
1451
+ "version": "6.12.6",
1452
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1453
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1454
+ "dev": true,
1455
+ "license": "MIT",
1456
+ "dependencies": {
1457
+ "fast-deep-equal": "^3.1.1",
1458
+ "fast-json-stable-stringify": "^2.0.0",
1459
+ "json-schema-traverse": "^0.4.1",
1460
+ "uri-js": "^4.2.2"
1461
+ },
1462
+ "funding": {
1463
+ "type": "github",
1464
+ "url": "https://github.com/sponsors/epoberezkin"
1465
+ }
1466
+ },
1467
+ "node_modules/ansi-styles": {
1468
+ "version": "4.3.0",
1469
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1470
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1471
+ "dev": true,
1472
+ "license": "MIT",
1473
+ "dependencies": {
1474
+ "color-convert": "^2.0.1"
1475
+ },
1476
+ "engines": {
1477
+ "node": ">=8"
1478
+ },
1479
+ "funding": {
1480
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1481
+ }
1482
+ },
1483
+ "node_modules/argparse": {
1484
+ "version": "2.0.1",
1485
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1486
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1487
+ "dev": true,
1488
+ "license": "Python-2.0"
1489
+ },
1490
+ "node_modules/balanced-match": {
1491
+ "version": "1.0.2",
1492
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1493
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1494
+ "dev": true,
1495
+ "license": "MIT"
1496
+ },
1497
+ "node_modules/baseline-browser-mapping": {
1498
+ "version": "2.9.19",
1499
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
1500
+ "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
1501
+ "dev": true,
1502
+ "license": "Apache-2.0",
1503
+ "bin": {
1504
+ "baseline-browser-mapping": "dist/cli.js"
1505
+ }
1506
+ },
1507
+ "node_modules/brace-expansion": {
1508
+ "version": "1.1.12",
1509
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
1510
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
1511
+ "dev": true,
1512
+ "license": "MIT",
1513
+ "dependencies": {
1514
+ "balanced-match": "^1.0.0",
1515
+ "concat-map": "0.0.1"
1516
+ }
1517
+ },
1518
+ "node_modules/browserslist": {
1519
+ "version": "4.28.1",
1520
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
1521
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
1522
+ "dev": true,
1523
+ "funding": [
1524
+ {
1525
+ "type": "opencollective",
1526
+ "url": "https://opencollective.com/browserslist"
1527
+ },
1528
+ {
1529
+ "type": "tidelift",
1530
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
1531
+ },
1532
+ {
1533
+ "type": "github",
1534
+ "url": "https://github.com/sponsors/ai"
1535
+ }
1536
+ ],
1537
+ "license": "MIT",
1538
+ "dependencies": {
1539
+ "baseline-browser-mapping": "^2.9.0",
1540
+ "caniuse-lite": "^1.0.30001759",
1541
+ "electron-to-chromium": "^1.5.263",
1542
+ "node-releases": "^2.0.27",
1543
+ "update-browserslist-db": "^1.2.0"
1544
+ },
1545
+ "bin": {
1546
+ "browserslist": "cli.js"
1547
+ },
1548
+ "engines": {
1549
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1550
+ }
1551
+ },
1552
+ "node_modules/callsites": {
1553
+ "version": "3.1.0",
1554
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1555
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1556
+ "dev": true,
1557
+ "license": "MIT",
1558
+ "engines": {
1559
+ "node": ">=6"
1560
+ }
1561
+ },
1562
+ "node_modules/caniuse-lite": {
1563
+ "version": "1.0.30001767",
1564
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz",
1565
+ "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==",
1566
+ "dev": true,
1567
+ "funding": [
1568
+ {
1569
+ "type": "opencollective",
1570
+ "url": "https://opencollective.com/browserslist"
1571
+ },
1572
+ {
1573
+ "type": "tidelift",
1574
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1575
+ },
1576
+ {
1577
+ "type": "github",
1578
+ "url": "https://github.com/sponsors/ai"
1579
+ }
1580
+ ],
1581
+ "license": "CC-BY-4.0"
1582
+ },
1583
+ "node_modules/chalk": {
1584
+ "version": "4.1.2",
1585
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1586
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1587
+ "dev": true,
1588
+ "license": "MIT",
1589
+ "dependencies": {
1590
+ "ansi-styles": "^4.1.0",
1591
+ "supports-color": "^7.1.0"
1592
+ },
1593
+ "engines": {
1594
+ "node": ">=10"
1595
+ },
1596
+ "funding": {
1597
+ "url": "https://github.com/chalk/chalk?sponsor=1"
1598
+ }
1599
+ },
1600
+ "node_modules/color-convert": {
1601
+ "version": "2.0.1",
1602
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1603
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1604
+ "dev": true,
1605
+ "license": "MIT",
1606
+ "dependencies": {
1607
+ "color-name": "~1.1.4"
1608
+ },
1609
+ "engines": {
1610
+ "node": ">=7.0.0"
1611
+ }
1612
+ },
1613
+ "node_modules/color-name": {
1614
+ "version": "1.1.4",
1615
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1616
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1617
+ "dev": true,
1618
+ "license": "MIT"
1619
+ },
1620
+ "node_modules/concat-map": {
1621
+ "version": "0.0.1",
1622
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1623
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1624
+ "dev": true,
1625
+ "license": "MIT"
1626
+ },
1627
+ "node_modules/convert-source-map": {
1628
+ "version": "2.0.0",
1629
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1630
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1631
+ "dev": true,
1632
+ "license": "MIT"
1633
+ },
1634
+ "node_modules/cross-spawn": {
1635
+ "version": "7.0.6",
1636
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1637
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1638
+ "dev": true,
1639
+ "license": "MIT",
1640
+ "dependencies": {
1641
+ "path-key": "^3.1.0",
1642
+ "shebang-command": "^2.0.0",
1643
+ "which": "^2.0.1"
1644
+ },
1645
+ "engines": {
1646
+ "node": ">= 8"
1647
+ }
1648
+ },
1649
+ "node_modules/csstype": {
1650
+ "version": "3.2.3",
1651
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
1652
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
1653
+ "dev": true,
1654
+ "license": "MIT"
1655
+ },
1656
+ "node_modules/debug": {
1657
+ "version": "4.4.3",
1658
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
1659
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
1660
+ "dev": true,
1661
+ "license": "MIT",
1662
+ "dependencies": {
1663
+ "ms": "^2.1.3"
1664
+ },
1665
+ "engines": {
1666
+ "node": ">=6.0"
1667
+ },
1668
+ "peerDependenciesMeta": {
1669
+ "supports-color": {
1670
+ "optional": true
1671
+ }
1672
+ }
1673
+ },
1674
+ "node_modules/deep-is": {
1675
+ "version": "0.1.4",
1676
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1677
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1678
+ "dev": true,
1679
+ "license": "MIT"
1680
+ },
1681
+ "node_modules/electron-to-chromium": {
1682
+ "version": "1.5.286",
1683
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
1684
+ "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==",
1685
+ "dev": true,
1686
+ "license": "ISC"
1687
+ },
1688
+ "node_modules/esbuild": {
1689
+ "version": "0.27.2",
1690
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
1691
+ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
1692
+ "dev": true,
1693
+ "hasInstallScript": true,
1694
+ "license": "MIT",
1695
+ "bin": {
1696
+ "esbuild": "bin/esbuild"
1697
+ },
1698
+ "engines": {
1699
+ "node": ">=18"
1700
+ },
1701
+ "optionalDependencies": {
1702
+ "@esbuild/aix-ppc64": "0.27.2",
1703
+ "@esbuild/android-arm": "0.27.2",
1704
+ "@esbuild/android-arm64": "0.27.2",
1705
+ "@esbuild/android-x64": "0.27.2",
1706
+ "@esbuild/darwin-arm64": "0.27.2",
1707
+ "@esbuild/darwin-x64": "0.27.2",
1708
+ "@esbuild/freebsd-arm64": "0.27.2",
1709
+ "@esbuild/freebsd-x64": "0.27.2",
1710
+ "@esbuild/linux-arm": "0.27.2",
1711
+ "@esbuild/linux-arm64": "0.27.2",
1712
+ "@esbuild/linux-ia32": "0.27.2",
1713
+ "@esbuild/linux-loong64": "0.27.2",
1714
+ "@esbuild/linux-mips64el": "0.27.2",
1715
+ "@esbuild/linux-ppc64": "0.27.2",
1716
+ "@esbuild/linux-riscv64": "0.27.2",
1717
+ "@esbuild/linux-s390x": "0.27.2",
1718
+ "@esbuild/linux-x64": "0.27.2",
1719
+ "@esbuild/netbsd-arm64": "0.27.2",
1720
+ "@esbuild/netbsd-x64": "0.27.2",
1721
+ "@esbuild/openbsd-arm64": "0.27.2",
1722
+ "@esbuild/openbsd-x64": "0.27.2",
1723
+ "@esbuild/openharmony-arm64": "0.27.2",
1724
+ "@esbuild/sunos-x64": "0.27.2",
1725
+ "@esbuild/win32-arm64": "0.27.2",
1726
+ "@esbuild/win32-ia32": "0.27.2",
1727
+ "@esbuild/win32-x64": "0.27.2"
1728
+ }
1729
+ },
1730
+ "node_modules/escalade": {
1731
+ "version": "3.2.0",
1732
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1733
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1734
+ "dev": true,
1735
+ "license": "MIT",
1736
+ "engines": {
1737
+ "node": ">=6"
1738
+ }
1739
+ },
1740
+ "node_modules/escape-string-regexp": {
1741
+ "version": "4.0.0",
1742
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1743
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1744
+ "dev": true,
1745
+ "license": "MIT",
1746
+ "engines": {
1747
+ "node": ">=10"
1748
+ },
1749
+ "funding": {
1750
+ "url": "https://github.com/sponsors/sindresorhus"
1751
+ }
1752
+ },
1753
+ "node_modules/eslint": {
1754
+ "version": "9.39.2",
1755
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
1756
+ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
1757
+ "dev": true,
1758
+ "license": "MIT",
1759
+ "dependencies": {
1760
+ "@eslint-community/eslint-utils": "^4.8.0",
1761
+ "@eslint-community/regexpp": "^4.12.1",
1762
+ "@eslint/config-array": "^0.21.1",
1763
+ "@eslint/config-helpers": "^0.4.2",
1764
+ "@eslint/core": "^0.17.0",
1765
+ "@eslint/eslintrc": "^3.3.1",
1766
+ "@eslint/js": "9.39.2",
1767
+ "@eslint/plugin-kit": "^0.4.1",
1768
+ "@humanfs/node": "^0.16.6",
1769
+ "@humanwhocodes/module-importer": "^1.0.1",
1770
+ "@humanwhocodes/retry": "^0.4.2",
1771
+ "@types/estree": "^1.0.6",
1772
+ "ajv": "^6.12.4",
1773
+ "chalk": "^4.0.0",
1774
+ "cross-spawn": "^7.0.6",
1775
+ "debug": "^4.3.2",
1776
+ "escape-string-regexp": "^4.0.0",
1777
+ "eslint-scope": "^8.4.0",
1778
+ "eslint-visitor-keys": "^4.2.1",
1779
+ "espree": "^10.4.0",
1780
+ "esquery": "^1.5.0",
1781
+ "esutils": "^2.0.2",
1782
+ "fast-deep-equal": "^3.1.3",
1783
+ "file-entry-cache": "^8.0.0",
1784
+ "find-up": "^5.0.0",
1785
+ "glob-parent": "^6.0.2",
1786
+ "ignore": "^5.2.0",
1787
+ "imurmurhash": "^0.1.4",
1788
+ "is-glob": "^4.0.0",
1789
+ "json-stable-stringify-without-jsonify": "^1.0.1",
1790
+ "lodash.merge": "^4.6.2",
1791
+ "minimatch": "^3.1.2",
1792
+ "natural-compare": "^1.4.0",
1793
+ "optionator": "^0.9.3"
1794
+ },
1795
+ "bin": {
1796
+ "eslint": "bin/eslint.js"
1797
+ },
1798
+ "engines": {
1799
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1800
+ },
1801
+ "funding": {
1802
+ "url": "https://eslint.org/donate"
1803
+ },
1804
+ "peerDependencies": {
1805
+ "jiti": "*"
1806
+ },
1807
+ "peerDependenciesMeta": {
1808
+ "jiti": {
1809
+ "optional": true
1810
+ }
1811
+ }
1812
+ },
1813
+ "node_modules/eslint-plugin-react-hooks": {
1814
+ "version": "7.0.1",
1815
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz",
1816
+ "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==",
1817
+ "dev": true,
1818
+ "license": "MIT",
1819
+ "dependencies": {
1820
+ "@babel/core": "^7.24.4",
1821
+ "@babel/parser": "^7.24.4",
1822
+ "hermes-parser": "^0.25.1",
1823
+ "zod": "^3.25.0 || ^4.0.0",
1824
+ "zod-validation-error": "^3.5.0 || ^4.0.0"
1825
+ },
1826
+ "engines": {
1827
+ "node": ">=18"
1828
+ },
1829
+ "peerDependencies": {
1830
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
1831
+ }
1832
+ },
1833
+ "node_modules/eslint-plugin-react-refresh": {
1834
+ "version": "0.4.26",
1835
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz",
1836
+ "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==",
1837
+ "dev": true,
1838
+ "license": "MIT",
1839
+ "peerDependencies": {
1840
+ "eslint": ">=8.40"
1841
+ }
1842
+ },
1843
+ "node_modules/eslint-scope": {
1844
+ "version": "8.4.0",
1845
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
1846
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
1847
+ "dev": true,
1848
+ "license": "BSD-2-Clause",
1849
+ "dependencies": {
1850
+ "esrecurse": "^4.3.0",
1851
+ "estraverse": "^5.2.0"
1852
+ },
1853
+ "engines": {
1854
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1855
+ },
1856
+ "funding": {
1857
+ "url": "https://opencollective.com/eslint"
1858
+ }
1859
+ },
1860
+ "node_modules/eslint-visitor-keys": {
1861
+ "version": "4.2.1",
1862
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
1863
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
1864
+ "dev": true,
1865
+ "license": "Apache-2.0",
1866
+ "engines": {
1867
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1868
+ },
1869
+ "funding": {
1870
+ "url": "https://opencollective.com/eslint"
1871
+ }
1872
+ },
1873
+ "node_modules/espree": {
1874
+ "version": "10.4.0",
1875
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
1876
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
1877
+ "dev": true,
1878
+ "license": "BSD-2-Clause",
1879
+ "dependencies": {
1880
+ "acorn": "^8.15.0",
1881
+ "acorn-jsx": "^5.3.2",
1882
+ "eslint-visitor-keys": "^4.2.1"
1883
+ },
1884
+ "engines": {
1885
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1886
+ },
1887
+ "funding": {
1888
+ "url": "https://opencollective.com/eslint"
1889
+ }
1890
+ },
1891
+ "node_modules/esquery": {
1892
+ "version": "1.7.0",
1893
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
1894
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
1895
+ "dev": true,
1896
+ "license": "BSD-3-Clause",
1897
+ "dependencies": {
1898
+ "estraverse": "^5.1.0"
1899
+ },
1900
+ "engines": {
1901
+ "node": ">=0.10"
1902
+ }
1903
+ },
1904
+ "node_modules/esrecurse": {
1905
+ "version": "4.3.0",
1906
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1907
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1908
+ "dev": true,
1909
+ "license": "BSD-2-Clause",
1910
+ "dependencies": {
1911
+ "estraverse": "^5.2.0"
1912
+ },
1913
+ "engines": {
1914
+ "node": ">=4.0"
1915
+ }
1916
+ },
1917
+ "node_modules/estraverse": {
1918
+ "version": "5.3.0",
1919
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1920
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1921
+ "dev": true,
1922
+ "license": "BSD-2-Clause",
1923
+ "engines": {
1924
+ "node": ">=4.0"
1925
+ }
1926
+ },
1927
+ "node_modules/esutils": {
1928
+ "version": "2.0.3",
1929
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1930
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1931
+ "dev": true,
1932
+ "license": "BSD-2-Clause",
1933
+ "engines": {
1934
+ "node": ">=0.10.0"
1935
+ }
1936
+ },
1937
+ "node_modules/fast-deep-equal": {
1938
+ "version": "3.1.3",
1939
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1940
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1941
+ "dev": true,
1942
+ "license": "MIT"
1943
+ },
1944
+ "node_modules/fast-json-stable-stringify": {
1945
+ "version": "2.1.0",
1946
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1947
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1948
+ "dev": true,
1949
+ "license": "MIT"
1950
+ },
1951
+ "node_modules/fast-levenshtein": {
1952
+ "version": "2.0.6",
1953
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1954
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
1955
+ "dev": true,
1956
+ "license": "MIT"
1957
+ },
1958
+ "node_modules/fdir": {
1959
+ "version": "6.5.0",
1960
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
1961
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
1962
+ "dev": true,
1963
+ "license": "MIT",
1964
+ "engines": {
1965
+ "node": ">=12.0.0"
1966
+ },
1967
+ "peerDependencies": {
1968
+ "picomatch": "^3 || ^4"
1969
+ },
1970
+ "peerDependenciesMeta": {
1971
+ "picomatch": {
1972
+ "optional": true
1973
+ }
1974
+ }
1975
+ },
1976
+ "node_modules/file-entry-cache": {
1977
+ "version": "8.0.0",
1978
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
1979
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
1980
+ "dev": true,
1981
+ "license": "MIT",
1982
+ "dependencies": {
1983
+ "flat-cache": "^4.0.0"
1984
+ },
1985
+ "engines": {
1986
+ "node": ">=16.0.0"
1987
+ }
1988
+ },
1989
+ "node_modules/find-up": {
1990
+ "version": "5.0.0",
1991
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
1992
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
1993
+ "dev": true,
1994
+ "license": "MIT",
1995
+ "dependencies": {
1996
+ "locate-path": "^6.0.0",
1997
+ "path-exists": "^4.0.0"
1998
+ },
1999
+ "engines": {
2000
+ "node": ">=10"
2001
+ },
2002
+ "funding": {
2003
+ "url": "https://github.com/sponsors/sindresorhus"
2004
+ }
2005
+ },
2006
+ "node_modules/flat-cache": {
2007
+ "version": "4.0.1",
2008
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
2009
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
2010
+ "dev": true,
2011
+ "license": "MIT",
2012
+ "dependencies": {
2013
+ "flatted": "^3.2.9",
2014
+ "keyv": "^4.5.4"
2015
+ },
2016
+ "engines": {
2017
+ "node": ">=16"
2018
+ }
2019
+ },
2020
+ "node_modules/flatted": {
2021
+ "version": "3.3.3",
2022
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
2023
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
2024
+ "dev": true,
2025
+ "license": "ISC"
2026
+ },
2027
+ "node_modules/fsevents": {
2028
+ "version": "2.3.3",
2029
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
2030
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
2031
+ "dev": true,
2032
+ "hasInstallScript": true,
2033
+ "license": "MIT",
2034
+ "optional": true,
2035
+ "os": [
2036
+ "darwin"
2037
+ ],
2038
+ "engines": {
2039
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2040
+ }
2041
+ },
2042
+ "node_modules/gensync": {
2043
+ "version": "1.0.0-beta.2",
2044
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
2045
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
2046
+ "dev": true,
2047
+ "license": "MIT",
2048
+ "engines": {
2049
+ "node": ">=6.9.0"
2050
+ }
2051
+ },
2052
+ "node_modules/glob-parent": {
2053
+ "version": "6.0.2",
2054
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2055
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2056
+ "dev": true,
2057
+ "license": "ISC",
2058
+ "dependencies": {
2059
+ "is-glob": "^4.0.3"
2060
+ },
2061
+ "engines": {
2062
+ "node": ">=10.13.0"
2063
+ }
2064
+ },
2065
+ "node_modules/globals": {
2066
+ "version": "16.5.0",
2067
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz",
2068
+ "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==",
2069
+ "dev": true,
2070
+ "license": "MIT",
2071
+ "engines": {
2072
+ "node": ">=18"
2073
+ },
2074
+ "funding": {
2075
+ "url": "https://github.com/sponsors/sindresorhus"
2076
+ }
2077
+ },
2078
+ "node_modules/has-flag": {
2079
+ "version": "4.0.0",
2080
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2081
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2082
+ "dev": true,
2083
+ "license": "MIT",
2084
+ "engines": {
2085
+ "node": ">=8"
2086
+ }
2087
+ },
2088
+ "node_modules/hermes-estree": {
2089
+ "version": "0.25.1",
2090
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
2091
+ "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
2092
+ "dev": true,
2093
+ "license": "MIT"
2094
+ },
2095
+ "node_modules/hermes-parser": {
2096
+ "version": "0.25.1",
2097
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
2098
+ "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
2099
+ "dev": true,
2100
+ "license": "MIT",
2101
+ "dependencies": {
2102
+ "hermes-estree": "0.25.1"
2103
+ }
2104
+ },
2105
+ "node_modules/ignore": {
2106
+ "version": "5.3.2",
2107
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
2108
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
2109
+ "dev": true,
2110
+ "license": "MIT",
2111
+ "engines": {
2112
+ "node": ">= 4"
2113
+ }
2114
+ },
2115
+ "node_modules/import-fresh": {
2116
+ "version": "3.3.1",
2117
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
2118
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
2119
+ "dev": true,
2120
+ "license": "MIT",
2121
+ "dependencies": {
2122
+ "parent-module": "^1.0.0",
2123
+ "resolve-from": "^4.0.0"
2124
+ },
2125
+ "engines": {
2126
+ "node": ">=6"
2127
+ },
2128
+ "funding": {
2129
+ "url": "https://github.com/sponsors/sindresorhus"
2130
+ }
2131
+ },
2132
+ "node_modules/imurmurhash": {
2133
+ "version": "0.1.4",
2134
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2135
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
2136
+ "dev": true,
2137
+ "license": "MIT",
2138
+ "engines": {
2139
+ "node": ">=0.8.19"
2140
+ }
2141
+ },
2142
+ "node_modules/is-extglob": {
2143
+ "version": "2.1.1",
2144
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2145
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2146
+ "dev": true,
2147
+ "license": "MIT",
2148
+ "engines": {
2149
+ "node": ">=0.10.0"
2150
+ }
2151
+ },
2152
+ "node_modules/is-glob": {
2153
+ "version": "4.0.3",
2154
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2155
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2156
+ "dev": true,
2157
+ "license": "MIT",
2158
+ "dependencies": {
2159
+ "is-extglob": "^2.1.1"
2160
+ },
2161
+ "engines": {
2162
+ "node": ">=0.10.0"
2163
+ }
2164
+ },
2165
+ "node_modules/isexe": {
2166
+ "version": "2.0.0",
2167
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2168
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2169
+ "dev": true,
2170
+ "license": "ISC"
2171
+ },
2172
+ "node_modules/js-tokens": {
2173
+ "version": "4.0.0",
2174
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2175
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
2176
+ "dev": true,
2177
+ "license": "MIT"
2178
+ },
2179
+ "node_modules/js-yaml": {
2180
+ "version": "4.1.1",
2181
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
2182
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
2183
+ "dev": true,
2184
+ "license": "MIT",
2185
+ "dependencies": {
2186
+ "argparse": "^2.0.1"
2187
+ },
2188
+ "bin": {
2189
+ "js-yaml": "bin/js-yaml.js"
2190
+ }
2191
+ },
2192
+ "node_modules/jsesc": {
2193
+ "version": "3.1.0",
2194
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
2195
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
2196
+ "dev": true,
2197
+ "license": "MIT",
2198
+ "bin": {
2199
+ "jsesc": "bin/jsesc"
2200
+ },
2201
+ "engines": {
2202
+ "node": ">=6"
2203
+ }
2204
+ },
2205
+ "node_modules/json-buffer": {
2206
+ "version": "3.0.1",
2207
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
2208
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
2209
+ "dev": true,
2210
+ "license": "MIT"
2211
+ },
2212
+ "node_modules/json-schema-traverse": {
2213
+ "version": "0.4.1",
2214
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2215
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2216
+ "dev": true,
2217
+ "license": "MIT"
2218
+ },
2219
+ "node_modules/json-stable-stringify-without-jsonify": {
2220
+ "version": "1.0.1",
2221
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2222
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
2223
+ "dev": true,
2224
+ "license": "MIT"
2225
+ },
2226
+ "node_modules/json5": {
2227
+ "version": "2.2.3",
2228
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
2229
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
2230
+ "dev": true,
2231
+ "license": "MIT",
2232
+ "bin": {
2233
+ "json5": "lib/cli.js"
2234
+ },
2235
+ "engines": {
2236
+ "node": ">=6"
2237
+ }
2238
+ },
2239
+ "node_modules/keyv": {
2240
+ "version": "4.5.4",
2241
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
2242
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
2243
+ "dev": true,
2244
+ "license": "MIT",
2245
+ "dependencies": {
2246
+ "json-buffer": "3.0.1"
2247
+ }
2248
+ },
2249
+ "node_modules/levn": {
2250
+ "version": "0.4.1",
2251
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2252
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2253
+ "dev": true,
2254
+ "license": "MIT",
2255
+ "dependencies": {
2256
+ "prelude-ls": "^1.2.1",
2257
+ "type-check": "~0.4.0"
2258
+ },
2259
+ "engines": {
2260
+ "node": ">= 0.8.0"
2261
+ }
2262
+ },
2263
+ "node_modules/locate-path": {
2264
+ "version": "6.0.0",
2265
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2266
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2267
+ "dev": true,
2268
+ "license": "MIT",
2269
+ "dependencies": {
2270
+ "p-locate": "^5.0.0"
2271
+ },
2272
+ "engines": {
2273
+ "node": ">=10"
2274
+ },
2275
+ "funding": {
2276
+ "url": "https://github.com/sponsors/sindresorhus"
2277
+ }
2278
+ },
2279
+ "node_modules/lodash.merge": {
2280
+ "version": "4.6.2",
2281
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2282
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2283
+ "dev": true,
2284
+ "license": "MIT"
2285
+ },
2286
+ "node_modules/lru-cache": {
2287
+ "version": "5.1.1",
2288
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
2289
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
2290
+ "dev": true,
2291
+ "license": "ISC",
2292
+ "dependencies": {
2293
+ "yallist": "^3.0.2"
2294
+ }
2295
+ },
2296
+ "node_modules/lucide-react": {
2297
+ "version": "0.563.0",
2298
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz",
2299
+ "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==",
2300
+ "license": "ISC",
2301
+ "peerDependencies": {
2302
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
2303
+ }
2304
+ },
2305
+ "node_modules/minimatch": {
2306
+ "version": "3.1.2",
2307
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2308
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2309
+ "dev": true,
2310
+ "license": "ISC",
2311
+ "dependencies": {
2312
+ "brace-expansion": "^1.1.7"
2313
+ },
2314
+ "engines": {
2315
+ "node": "*"
2316
+ }
2317
+ },
2318
+ "node_modules/ms": {
2319
+ "version": "2.1.3",
2320
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2321
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2322
+ "dev": true,
2323
+ "license": "MIT"
2324
+ },
2325
+ "node_modules/nanoid": {
2326
+ "version": "3.3.11",
2327
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
2328
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
2329
+ "dev": true,
2330
+ "funding": [
2331
+ {
2332
+ "type": "github",
2333
+ "url": "https://github.com/sponsors/ai"
2334
+ }
2335
+ ],
2336
+ "license": "MIT",
2337
+ "bin": {
2338
+ "nanoid": "bin/nanoid.cjs"
2339
+ },
2340
+ "engines": {
2341
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2342
+ }
2343
+ },
2344
+ "node_modules/natural-compare": {
2345
+ "version": "1.4.0",
2346
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2347
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
2348
+ "dev": true,
2349
+ "license": "MIT"
2350
+ },
2351
+ "node_modules/node-releases": {
2352
+ "version": "2.0.27",
2353
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
2354
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
2355
+ "dev": true,
2356
+ "license": "MIT"
2357
+ },
2358
+ "node_modules/optionator": {
2359
+ "version": "0.9.4",
2360
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
2361
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
2362
+ "dev": true,
2363
+ "license": "MIT",
2364
+ "dependencies": {
2365
+ "deep-is": "^0.1.3",
2366
+ "fast-levenshtein": "^2.0.6",
2367
+ "levn": "^0.4.1",
2368
+ "prelude-ls": "^1.2.1",
2369
+ "type-check": "^0.4.0",
2370
+ "word-wrap": "^1.2.5"
2371
+ },
2372
+ "engines": {
2373
+ "node": ">= 0.8.0"
2374
+ }
2375
+ },
2376
+ "node_modules/p-limit": {
2377
+ "version": "3.1.0",
2378
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2379
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2380
+ "dev": true,
2381
+ "license": "MIT",
2382
+ "dependencies": {
2383
+ "yocto-queue": "^0.1.0"
2384
+ },
2385
+ "engines": {
2386
+ "node": ">=10"
2387
+ },
2388
+ "funding": {
2389
+ "url": "https://github.com/sponsors/sindresorhus"
2390
+ }
2391
+ },
2392
+ "node_modules/p-locate": {
2393
+ "version": "5.0.0",
2394
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
2395
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
2396
+ "dev": true,
2397
+ "license": "MIT",
2398
+ "dependencies": {
2399
+ "p-limit": "^3.0.2"
2400
+ },
2401
+ "engines": {
2402
+ "node": ">=10"
2403
+ },
2404
+ "funding": {
2405
+ "url": "https://github.com/sponsors/sindresorhus"
2406
+ }
2407
+ },
2408
+ "node_modules/parent-module": {
2409
+ "version": "1.0.1",
2410
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2411
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2412
+ "dev": true,
2413
+ "license": "MIT",
2414
+ "dependencies": {
2415
+ "callsites": "^3.0.0"
2416
+ },
2417
+ "engines": {
2418
+ "node": ">=6"
2419
+ }
2420
+ },
2421
+ "node_modules/path-exists": {
2422
+ "version": "4.0.0",
2423
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2424
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2425
+ "dev": true,
2426
+ "license": "MIT",
2427
+ "engines": {
2428
+ "node": ">=8"
2429
+ }
2430
+ },
2431
+ "node_modules/path-key": {
2432
+ "version": "3.1.1",
2433
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2434
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2435
+ "dev": true,
2436
+ "license": "MIT",
2437
+ "engines": {
2438
+ "node": ">=8"
2439
+ }
2440
+ },
2441
+ "node_modules/picocolors": {
2442
+ "version": "1.1.1",
2443
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
2444
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
2445
+ "dev": true,
2446
+ "license": "ISC"
2447
+ },
2448
+ "node_modules/picomatch": {
2449
+ "version": "4.0.3",
2450
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
2451
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
2452
+ "dev": true,
2453
+ "license": "MIT",
2454
+ "engines": {
2455
+ "node": ">=12"
2456
+ },
2457
+ "funding": {
2458
+ "url": "https://github.com/sponsors/jonschlinkert"
2459
+ }
2460
+ },
2461
+ "node_modules/postcss": {
2462
+ "version": "8.5.6",
2463
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
2464
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
2465
+ "dev": true,
2466
+ "funding": [
2467
+ {
2468
+ "type": "opencollective",
2469
+ "url": "https://opencollective.com/postcss/"
2470
+ },
2471
+ {
2472
+ "type": "tidelift",
2473
+ "url": "https://tidelift.com/funding/github/npm/postcss"
2474
+ },
2475
+ {
2476
+ "type": "github",
2477
+ "url": "https://github.com/sponsors/ai"
2478
+ }
2479
+ ],
2480
+ "license": "MIT",
2481
+ "dependencies": {
2482
+ "nanoid": "^3.3.11",
2483
+ "picocolors": "^1.1.1",
2484
+ "source-map-js": "^1.2.1"
2485
+ },
2486
+ "engines": {
2487
+ "node": "^10 || ^12 || >=14"
2488
+ }
2489
+ },
2490
+ "node_modules/prelude-ls": {
2491
+ "version": "1.2.1",
2492
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2493
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2494
+ "dev": true,
2495
+ "license": "MIT",
2496
+ "engines": {
2497
+ "node": ">= 0.8.0"
2498
+ }
2499
+ },
2500
+ "node_modules/punycode": {
2501
+ "version": "2.3.1",
2502
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
2503
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
2504
+ "dev": true,
2505
+ "license": "MIT",
2506
+ "engines": {
2507
+ "node": ">=6"
2508
+ }
2509
+ },
2510
+ "node_modules/react": {
2511
+ "version": "19.2.4",
2512
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
2513
+ "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
2514
+ "license": "MIT",
2515
+ "engines": {
2516
+ "node": ">=0.10.0"
2517
+ }
2518
+ },
2519
+ "node_modules/react-dom": {
2520
+ "version": "19.2.4",
2521
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
2522
+ "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
2523
+ "license": "MIT",
2524
+ "dependencies": {
2525
+ "scheduler": "^0.27.0"
2526
+ },
2527
+ "peerDependencies": {
2528
+ "react": "^19.2.4"
2529
+ }
2530
+ },
2531
+ "node_modules/react-refresh": {
2532
+ "version": "0.18.0",
2533
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
2534
+ "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
2535
+ "dev": true,
2536
+ "license": "MIT",
2537
+ "engines": {
2538
+ "node": ">=0.10.0"
2539
+ }
2540
+ },
2541
+ "node_modules/resolve-from": {
2542
+ "version": "4.0.0",
2543
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2544
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2545
+ "dev": true,
2546
+ "license": "MIT",
2547
+ "engines": {
2548
+ "node": ">=4"
2549
+ }
2550
+ },
2551
+ "node_modules/rollup": {
2552
+ "version": "4.57.1",
2553
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz",
2554
+ "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==",
2555
+ "dev": true,
2556
+ "license": "MIT",
2557
+ "dependencies": {
2558
+ "@types/estree": "1.0.8"
2559
+ },
2560
+ "bin": {
2561
+ "rollup": "dist/bin/rollup"
2562
+ },
2563
+ "engines": {
2564
+ "node": ">=18.0.0",
2565
+ "npm": ">=8.0.0"
2566
+ },
2567
+ "optionalDependencies": {
2568
+ "@rollup/rollup-android-arm-eabi": "4.57.1",
2569
+ "@rollup/rollup-android-arm64": "4.57.1",
2570
+ "@rollup/rollup-darwin-arm64": "4.57.1",
2571
+ "@rollup/rollup-darwin-x64": "4.57.1",
2572
+ "@rollup/rollup-freebsd-arm64": "4.57.1",
2573
+ "@rollup/rollup-freebsd-x64": "4.57.1",
2574
+ "@rollup/rollup-linux-arm-gnueabihf": "4.57.1",
2575
+ "@rollup/rollup-linux-arm-musleabihf": "4.57.1",
2576
+ "@rollup/rollup-linux-arm64-gnu": "4.57.1",
2577
+ "@rollup/rollup-linux-arm64-musl": "4.57.1",
2578
+ "@rollup/rollup-linux-loong64-gnu": "4.57.1",
2579
+ "@rollup/rollup-linux-loong64-musl": "4.57.1",
2580
+ "@rollup/rollup-linux-ppc64-gnu": "4.57.1",
2581
+ "@rollup/rollup-linux-ppc64-musl": "4.57.1",
2582
+ "@rollup/rollup-linux-riscv64-gnu": "4.57.1",
2583
+ "@rollup/rollup-linux-riscv64-musl": "4.57.1",
2584
+ "@rollup/rollup-linux-s390x-gnu": "4.57.1",
2585
+ "@rollup/rollup-linux-x64-gnu": "4.57.1",
2586
+ "@rollup/rollup-linux-x64-musl": "4.57.1",
2587
+ "@rollup/rollup-openbsd-x64": "4.57.1",
2588
+ "@rollup/rollup-openharmony-arm64": "4.57.1",
2589
+ "@rollup/rollup-win32-arm64-msvc": "4.57.1",
2590
+ "@rollup/rollup-win32-ia32-msvc": "4.57.1",
2591
+ "@rollup/rollup-win32-x64-gnu": "4.57.1",
2592
+ "@rollup/rollup-win32-x64-msvc": "4.57.1",
2593
+ "fsevents": "~2.3.2"
2594
+ }
2595
+ },
2596
+ "node_modules/scheduler": {
2597
+ "version": "0.27.0",
2598
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
2599
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
2600
+ "license": "MIT"
2601
+ },
2602
+ "node_modules/semver": {
2603
+ "version": "6.3.1",
2604
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
2605
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2606
+ "dev": true,
2607
+ "license": "ISC",
2608
+ "bin": {
2609
+ "semver": "bin/semver.js"
2610
+ }
2611
+ },
2612
+ "node_modules/shebang-command": {
2613
+ "version": "2.0.0",
2614
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2615
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2616
+ "dev": true,
2617
+ "license": "MIT",
2618
+ "dependencies": {
2619
+ "shebang-regex": "^3.0.0"
2620
+ },
2621
+ "engines": {
2622
+ "node": ">=8"
2623
+ }
2624
+ },
2625
+ "node_modules/shebang-regex": {
2626
+ "version": "3.0.0",
2627
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2628
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2629
+ "dev": true,
2630
+ "license": "MIT",
2631
+ "engines": {
2632
+ "node": ">=8"
2633
+ }
2634
+ },
2635
+ "node_modules/source-map-js": {
2636
+ "version": "1.2.1",
2637
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
2638
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
2639
+ "dev": true,
2640
+ "license": "BSD-3-Clause",
2641
+ "engines": {
2642
+ "node": ">=0.10.0"
2643
+ }
2644
+ },
2645
+ "node_modules/strip-json-comments": {
2646
+ "version": "3.1.1",
2647
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2648
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2649
+ "dev": true,
2650
+ "license": "MIT",
2651
+ "engines": {
2652
+ "node": ">=8"
2653
+ },
2654
+ "funding": {
2655
+ "url": "https://github.com/sponsors/sindresorhus"
2656
+ }
2657
+ },
2658
+ "node_modules/supports-color": {
2659
+ "version": "7.2.0",
2660
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2661
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2662
+ "dev": true,
2663
+ "license": "MIT",
2664
+ "dependencies": {
2665
+ "has-flag": "^4.0.0"
2666
+ },
2667
+ "engines": {
2668
+ "node": ">=8"
2669
+ }
2670
+ },
2671
+ "node_modules/tinyglobby": {
2672
+ "version": "0.2.15",
2673
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
2674
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
2675
+ "dev": true,
2676
+ "license": "MIT",
2677
+ "dependencies": {
2678
+ "fdir": "^6.5.0",
2679
+ "picomatch": "^4.0.3"
2680
+ },
2681
+ "engines": {
2682
+ "node": ">=12.0.0"
2683
+ },
2684
+ "funding": {
2685
+ "url": "https://github.com/sponsors/SuperchupuDev"
2686
+ }
2687
+ },
2688
+ "node_modules/type-check": {
2689
+ "version": "0.4.0",
2690
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2691
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2692
+ "dev": true,
2693
+ "license": "MIT",
2694
+ "dependencies": {
2695
+ "prelude-ls": "^1.2.1"
2696
+ },
2697
+ "engines": {
2698
+ "node": ">= 0.8.0"
2699
+ }
2700
+ },
2701
+ "node_modules/update-browserslist-db": {
2702
+ "version": "1.2.3",
2703
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
2704
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
2705
+ "dev": true,
2706
+ "funding": [
2707
+ {
2708
+ "type": "opencollective",
2709
+ "url": "https://opencollective.com/browserslist"
2710
+ },
2711
+ {
2712
+ "type": "tidelift",
2713
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
2714
+ },
2715
+ {
2716
+ "type": "github",
2717
+ "url": "https://github.com/sponsors/ai"
2718
+ }
2719
+ ],
2720
+ "license": "MIT",
2721
+ "dependencies": {
2722
+ "escalade": "^3.2.0",
2723
+ "picocolors": "^1.1.1"
2724
+ },
2725
+ "bin": {
2726
+ "update-browserslist-db": "cli.js"
2727
+ },
2728
+ "peerDependencies": {
2729
+ "browserslist": ">= 4.21.0"
2730
+ }
2731
+ },
2732
+ "node_modules/uri-js": {
2733
+ "version": "4.4.1",
2734
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2735
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2736
+ "dev": true,
2737
+ "license": "BSD-2-Clause",
2738
+ "dependencies": {
2739
+ "punycode": "^2.1.0"
2740
+ }
2741
+ },
2742
+ "node_modules/vite": {
2743
+ "version": "7.3.1",
2744
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
2745
+ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
2746
+ "dev": true,
2747
+ "license": "MIT",
2748
+ "dependencies": {
2749
+ "esbuild": "^0.27.0",
2750
+ "fdir": "^6.5.0",
2751
+ "picomatch": "^4.0.3",
2752
+ "postcss": "^8.5.6",
2753
+ "rollup": "^4.43.0",
2754
+ "tinyglobby": "^0.2.15"
2755
+ },
2756
+ "bin": {
2757
+ "vite": "bin/vite.js"
2758
+ },
2759
+ "engines": {
2760
+ "node": "^20.19.0 || >=22.12.0"
2761
+ },
2762
+ "funding": {
2763
+ "url": "https://github.com/vitejs/vite?sponsor=1"
2764
+ },
2765
+ "optionalDependencies": {
2766
+ "fsevents": "~2.3.3"
2767
+ },
2768
+ "peerDependencies": {
2769
+ "@types/node": "^20.19.0 || >=22.12.0",
2770
+ "jiti": ">=1.21.0",
2771
+ "less": "^4.0.0",
2772
+ "lightningcss": "^1.21.0",
2773
+ "sass": "^1.70.0",
2774
+ "sass-embedded": "^1.70.0",
2775
+ "stylus": ">=0.54.8",
2776
+ "sugarss": "^5.0.0",
2777
+ "terser": "^5.16.0",
2778
+ "tsx": "^4.8.1",
2779
+ "yaml": "^2.4.2"
2780
+ },
2781
+ "peerDependenciesMeta": {
2782
+ "@types/node": {
2783
+ "optional": true
2784
+ },
2785
+ "jiti": {
2786
+ "optional": true
2787
+ },
2788
+ "less": {
2789
+ "optional": true
2790
+ },
2791
+ "lightningcss": {
2792
+ "optional": true
2793
+ },
2794
+ "sass": {
2795
+ "optional": true
2796
+ },
2797
+ "sass-embedded": {
2798
+ "optional": true
2799
+ },
2800
+ "stylus": {
2801
+ "optional": true
2802
+ },
2803
+ "sugarss": {
2804
+ "optional": true
2805
+ },
2806
+ "terser": {
2807
+ "optional": true
2808
+ },
2809
+ "tsx": {
2810
+ "optional": true
2811
+ },
2812
+ "yaml": {
2813
+ "optional": true
2814
+ }
2815
+ }
2816
+ },
2817
+ "node_modules/which": {
2818
+ "version": "2.0.2",
2819
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2820
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2821
+ "dev": true,
2822
+ "license": "ISC",
2823
+ "dependencies": {
2824
+ "isexe": "^2.0.0"
2825
+ },
2826
+ "bin": {
2827
+ "node-which": "bin/node-which"
2828
+ },
2829
+ "engines": {
2830
+ "node": ">= 8"
2831
+ }
2832
+ },
2833
+ "node_modules/word-wrap": {
2834
+ "version": "1.2.5",
2835
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
2836
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
2837
+ "dev": true,
2838
+ "license": "MIT",
2839
+ "engines": {
2840
+ "node": ">=0.10.0"
2841
+ }
2842
+ },
2843
+ "node_modules/yallist": {
2844
+ "version": "3.1.1",
2845
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
2846
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
2847
+ "dev": true,
2848
+ "license": "ISC"
2849
+ },
2850
+ "node_modules/yocto-queue": {
2851
+ "version": "0.1.0",
2852
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
2853
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
2854
+ "dev": true,
2855
+ "license": "MIT",
2856
+ "engines": {
2857
+ "node": ">=10"
2858
+ },
2859
+ "funding": {
2860
+ "url": "https://github.com/sponsors/sindresorhus"
2861
+ }
2862
+ },
2863
+ "node_modules/zod": {
2864
+ "version": "4.3.6",
2865
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
2866
+ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
2867
+ "dev": true,
2868
+ "license": "MIT",
2869
+ "funding": {
2870
+ "url": "https://github.com/sponsors/colinhacks"
2871
+ }
2872
+ },
2873
+ "node_modules/zod-validation-error": {
2874
+ "version": "4.0.2",
2875
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
2876
+ "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==",
2877
+ "dev": true,
2878
+ "license": "MIT",
2879
+ "engines": {
2880
+ "node": ">=18.0.0"
2881
+ },
2882
+ "peerDependencies": {
2883
+ "zod": "^3.25.0 || ^4.0.0"
2884
+ }
2885
+ }
2886
+ }
2887
+ }
package.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "globesim-temp",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "lint": "eslint .",
10
+ "preview": "vite preview"
11
+ },
12
+ "dependencies": {
13
+ "lucide-react": "^0.563.0",
14
+ "react": "^19.2.0",
15
+ "react-dom": "^19.2.0"
16
+ },
17
+ "devDependencies": {
18
+ "@eslint/js": "^9.39.1",
19
+ "@types/react": "^19.2.5",
20
+ "@types/react-dom": "^19.2.3",
21
+ "@vitejs/plugin-react": "^5.1.1",
22
+ "eslint": "^9.39.1",
23
+ "eslint-plugin-react-hooks": "^7.0.1",
24
+ "eslint-plugin-react-refresh": "^0.4.24",
25
+ "globals": "^16.5.0",
26
+ "vite": "^7.2.4"
27
+ }
28
+ }
public/vite.svg ADDED
src/App.css ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #root {
2
+ max-width: 1280px;
3
+ margin: 0 auto;
4
+ padding: 2rem;
5
+ text-align: center;
6
+ }
7
+
8
+ .logo {
9
+ height: 6em;
10
+ padding: 1.5em;
11
+ will-change: filter;
12
+ transition: filter 300ms;
13
+ }
14
+ .logo:hover {
15
+ filter: drop-shadow(0 0 2em #646cffaa);
16
+ }
17
+ .logo.react:hover {
18
+ filter: drop-shadow(0 0 2em #61dafbaa);
19
+ }
20
+
21
+ @keyframes logo-spin {
22
+ from {
23
+ transform: rotate(0deg);
24
+ }
25
+ to {
26
+ transform: rotate(360deg);
27
+ }
28
+ }
29
+
30
+ @media (prefers-reduced-motion: no-preference) {
31
+ a:nth-of-type(2) .logo {
32
+ animation: logo-spin infinite 20s linear;
33
+ }
34
+ }
35
+
36
+ .card {
37
+ padding: 2em;
38
+ }
39
+
40
+ .read-the-docs {
41
+ color: #888;
42
+ }
src/App.jsx ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useMemo } from 'react';
2
+ import Sidebar from './components/Layout/Sidebar';
3
+ import Header from './components/Layout/Header';
4
+ import StatsCard from './components/Dashboard/StatsCard';
5
+ import UserTable from './components/Dashboard/UserTable';
6
+ import NetworkMap from './components/Dashboard/NetworkMap';
7
+ import { mockUsers } from './data/mockUsers';
8
+ import { Users, Globe2, Activity, RadioReceiver } from 'lucide-react';
9
+
10
+ function App() {
11
+ const stats = useMemo(() => {
12
+ return {
13
+ total: mockUsers.length,
14
+ online: mockUsers.filter(u => u.status === 'Online').length,
15
+ roaming: mockUsers.filter(u => u.isRoaming).length,
16
+ avgSignal: (mockUsers.reduce((acc, u) => acc + u.signalStrength, 0) / mockUsers.length).toFixed(1)
17
+ };
18
+ }, []);
19
+
20
+ return (
21
+ <div style={{ display: 'flex', width: '100%', height: '100vh', background: 'var(--bg-app)', color: 'var(--text-main)' }}>
22
+ <Sidebar />
23
+ <div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden', position: 'relative' }}>
24
+
25
+ {/* Background Grid/Effect */}
26
+ <div style={{
27
+ position: 'absolute', inset: 0,
28
+ backgroundImage: 'linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px)',
29
+ backgroundSize: '40px 40px',
30
+ pointerEvents: 'none'
31
+ }} />
32
+
33
+ <Header />
34
+
35
+ <main style={{ flex: 1, padding: 'var(--space-md)', overflowY: 'auto', zIndex: 1 }}>
36
+ <div style={{ marginBottom: 'var(--space-xl)' }}>
37
+ <h1 className="text-glow" style={{ fontSize: '1.5rem', marginBottom: 'var(--space-xs)' }}>Network Overview</h1>
38
+ <p style={{ color: 'var(--text-muted)' }}>Real-time monitoring of GlobeSIM subscriber activities.</p>
39
+ </div>
40
+
41
+ {/* KPI Cards */}
42
+ <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 'var(--space-md)', marginBottom: 'var(--space-xl)' }}>
43
+ <StatsCard title="Total Subscribers" value={stats.total} icon={Users} trend={2.5} />
44
+ <StatsCard title="Active Connections" value={stats.online} icon={Activity} trend={5.2} />
45
+ <StatsCard title="Roaming Users" value={stats.roaming} icon={Globe2} trend={-1.1} />
46
+ <StatsCard title="Avg Signal Strength" value={`${stats.avgSignal}/5`} icon={RadioReceiver} />
47
+ </div>
48
+
49
+ <div style={{ display: 'grid', gridTemplateColumns: '2fr 1fr', gap: 'var(--space-md)', marginBottom: 'var(--space-xl)', height: '500px' }}>
50
+ <UserTable users={mockUsers} />
51
+ <NetworkMap users={mockUsers} />
52
+ </div>
53
+ </main>
54
+ </div>
55
+ </div>
56
+ );
57
+ }
58
+
59
+ export default App;
src/ErrorBoundary.jsx ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+
3
+ class ErrorBoundary extends React.Component {
4
+ constructor(props) {
5
+ super(props);
6
+ this.state = { hasError: false, error: null, errorInfo: null };
7
+ }
8
+
9
+ static getDerivedStateFromError(error) {
10
+ return { hasError: true, error };
11
+ }
12
+
13
+ componentDidCatch(error, errorInfo) {
14
+ console.error("Uncaught error:", error, errorInfo);
15
+ this.setState({ errorInfo });
16
+ }
17
+
18
+ render() {
19
+ if (this.state.hasError) {
20
+ return (
21
+ <div style={{ padding: '20px', color: 'red', background: '#ffebee', fontFamily: 'monospace' }}>
22
+ <h1>Something went wrong.</h1>
23
+ <details style={{ whiteSpace: 'pre-wrap' }}>
24
+ {this.state.error && this.state.error.toString()}
25
+ <br />
26
+ {this.state.errorInfo && this.state.errorInfo.componentStack}
27
+ </details>
28
+ </div>
29
+ );
30
+ }
31
+
32
+ return this.props.children;
33
+ }
34
+ }
35
+
36
+ export default ErrorBoundary;
src/assets/react.svg ADDED
src/components/Dashboard/NetworkMap.jsx ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useRef, useEffect, useState } from 'react';
2
+
3
+ const NetworkMap = ({ users }) => {
4
+ const canvasRef = useRef(null);
5
+ const [hoveredUser, setHoveredUser] = useState(null);
6
+
7
+ useEffect(() => {
8
+ const canvas = canvasRef.current;
9
+ if (!canvas) return;
10
+ const ctx = canvas.getContext('2d');
11
+ let animationFrameId;
12
+
13
+ // Simple auto-scaling projection
14
+ const lats = users.map(u => u.location.lat);
15
+ const lngs = users.map(u => u.location.lng);
16
+ const minLat = Math.min(...lats) - 5;
17
+ const maxLat = Math.max(...lats) + 5;
18
+ const minLng = Math.min(...lngs) - 5;
19
+ const maxLng = Math.max(...lngs) + 5;
20
+
21
+ const project = (lat, lng) => {
22
+ const x = ((lng - minLng) / (maxLng - minLng)) * canvas.width;
23
+ const y = canvas.height - ((lat - minLat) / (maxLat - minLat)) * canvas.height;
24
+ return { x, y };
25
+ };
26
+
27
+ const render = () => {
28
+ // Resize canvas to parent
29
+ if (canvas.width !== canvas.parentElement.clientWidth || canvas.height !== canvas.parentElement.clientHeight) {
30
+ canvas.width = canvas.parentElement.clientWidth;
31
+ canvas.height = canvas.parentElement.clientHeight;
32
+ }
33
+
34
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
35
+
36
+ // Draw Grid
37
+ ctx.strokeStyle = 'rgba(255, 255, 255, 0.05)';
38
+ ctx.lineWidth = 1;
39
+ const gridSize = 40;
40
+ for (let x = 0; x < canvas.width; x += gridSize) {
41
+ ctx.beginPath(); ctx.moveTo(x, 0); ctx.lineTo(x, canvas.height); ctx.stroke();
42
+ }
43
+ for (let y = 0; y < canvas.height; y += gridSize) {
44
+ ctx.beginPath(); ctx.moveTo(0, y); ctx.lineTo(canvas.width, y); ctx.stroke();
45
+ }
46
+
47
+ // Draw Connections (just for visual flair)
48
+ ctx.strokeStyle = 'rgba(0, 240, 255, 0.05)';
49
+ ctx.lineWidth = 0.5;
50
+ users.forEach((u, i) => {
51
+ const p1 = project(u.location.lat, u.location.lng);
52
+ // Connect to nearest neighbor (simplified, just connect to next few)
53
+ for (let j = i + 1; j < Math.min(i + 3, users.length); j++) {
54
+ const p2 = project(users[j].location.lat, users[j].location.lng);
55
+ ctx.beginPath(); ctx.moveTo(p1.x, p1.y); ctx.lineTo(p2.x, p2.y); ctx.stroke();
56
+ }
57
+ });
58
+
59
+ // Draw Users
60
+ users.forEach(user => {
61
+ const { x, y } = project(user.location.lat, user.location.lng);
62
+ const isActive = user.status === 'Online';
63
+ const isRoaming = user.isRoaming;
64
+ const color = isActive ? '#00ff9d' : (isRoaming ? '#ffbf00' : '#ff0055');
65
+
66
+ // Pulse
67
+ if (isActive) {
68
+ const time = Date.now() / 1000;
69
+ const radius = 4 + Math.sin(time * 2 + user.id) * 2;
70
+ ctx.beginPath();
71
+ ctx.arc(x, y, radius * 2, 0, Math.PI * 2);
72
+ ctx.fillStyle = `color-mix(in srgb, ${color} 20%, transparent)`;
73
+ ctx.fill();
74
+ }
75
+
76
+ ctx.beginPath();
77
+ ctx.arc(x, y, 4, 0, Math.PI * 2);
78
+ ctx.fillStyle = color;
79
+ ctx.fill();
80
+
81
+ // Label if active or Roaming
82
+ if (isRoaming) {
83
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
84
+ ctx.font = '10px Inter';
85
+ ctx.fillText(user.location.city, x + 8, y + 3);
86
+ }
87
+ });
88
+
89
+ animationFrameId = requestAnimationFrame(render);
90
+ };
91
+
92
+ render();
93
+ return () => cancelAnimationFrame(animationFrameId);
94
+ }, [users]);
95
+
96
+ return (
97
+ <div className="glass-panel" style={{ height: '100%', minHeight: '400px', position: 'relative', overflow: 'hidden' }}>
98
+ <canvas ref={canvasRef} style={{ width: '100%', height: '100%', display: 'block' }} />
99
+ <div style={{ position: 'absolute', top: 20, right: 20, background: 'rgba(0,0,0,0.5)', padding: '10px', borderRadius: '8px', fontSize: '12px' }}>
100
+ <div style={{ display: 'flex', alignItems: 'center', gap: '6px', marginBottom: '4px' }}>
101
+ <span style={{ width: 8, height: 8, borderRadius: '50%', background: '#00ff9d' }}></span> Online
102
+ </div>
103
+ <div style={{ display: 'flex', alignItems: 'center', gap: '6px', marginBottom: '4px' }}>
104
+ <span style={{ width: 8, height: 8, borderRadius: '50%', background: '#ffbf00' }}></span> Roaming
105
+ </div>
106
+ <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>
107
+ <span style={{ width: 8, height: 8, borderRadius: '50%', background: '#ff0055' }}></span> Offline
108
+ </div>
109
+ </div>
110
+ </div>
111
+ );
112
+ };
113
+
114
+ export default NetworkMap;
src/components/Dashboard/StatsCard.jsx ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+
3
+ const StatsCard = ({ title, value, icon: Icon, trend }) => {
4
+ return (
5
+ <div className="glass-panel" style={{ padding: 'var(--space-lg)', position: 'relative', overflow: 'hidden' }}>
6
+ <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>
7
+ <div>
8
+ <p style={{ color: 'var(--text-muted)', fontSize: '0.875rem', marginBottom: 'var(--space-xs)' }}>{title}</p>
9
+ <h3 style={{ fontSize: '2rem', fontWeight: 'bold' }} className="text-glow">{value}</h3>
10
+
11
+ {trend && (
12
+ <div style={{ marginTop: 'var(--space-sm)', fontSize: '0.75rem', color: trend > 0 ? 'var(--status-online)' : 'var(--status-offline)' }}>
13
+ {trend > 0 ? '↑' : '↓'} {Math.abs(trend)}% from last hour
14
+ </div>
15
+ )}
16
+ </div>
17
+
18
+ <div style={{
19
+ padding: '12px',
20
+ borderRadius: '12px',
21
+ background: 'rgba(0, 240, 255, 0.1)',
22
+ color: 'var(--primary)',
23
+ display: 'flex',
24
+ alignItems: 'center',
25
+ justifyContent: 'center'
26
+ }}>
27
+ <Icon size={24} />
28
+ </div>
29
+ </div>
30
+
31
+ {/* Decorative Glow */}
32
+ <div style={{
33
+ position: 'absolute',
34
+ bottom: '-20px',
35
+ right: '-20px',
36
+ width: '100px',
37
+ height: '100px',
38
+ background: 'var(--primary)',
39
+ filter: 'blur(50px)',
40
+ opacity: 0.1,
41
+ pointerEvents: 'none'
42
+ }} />
43
+ </div>
44
+ );
45
+ };
46
+
47
+ export default StatsCard;
src/components/Dashboard/UserTable.jsx ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import Badge from '../UI/Badge';
3
+ import { Signal, SignalHigh, SignalMedium, SignalLow } from 'lucide-react';
4
+
5
+ const UserTable = ({ users }) => {
6
+ const getSignalIcon = (strength) => {
7
+ if (strength >= 4) return <SignalHigh size={16} color="var(--status-online)" />;
8
+ if (strength === 3) return <SignalMedium size={16} color="var(--status-roaming)" />;
9
+ return <SignalLow size={16} color="var(--status-offline)" />;
10
+ };
11
+
12
+ return (
13
+ <div className="glass-panel" style={{ marginTop: 'var(--space-lg)', overflow: 'hidden' }}>
14
+ <div style={{ padding: 'var(--space-md)', borderBottom: '1px solid var(--border-color)', display: 'flex', justifyContent: 'space-between' }}>
15
+ <h3 style={{ fontSize: '1.125rem' }}>Active Subscribers</h3>
16
+ <button style={{ background: 'transparent', border: '1px solid var(--border-color)', color: 'var(--text-muted)', padding: '4px 12px', borderRadius: '4px', cursor: 'pointer' }}>Filter</button>
17
+ </div>
18
+
19
+ <div style={{ overflowX: 'auto' }}>
20
+ <table style={{ width: '100%', borderCollapse: 'collapse', fontSize: '0.875rem' }}>
21
+ <thead>
22
+ <tr style={{ textAlign: 'left', color: 'var(--text-muted)', borderBottom: '1px solid var(--border-color)' }}>
23
+ <th style={{ padding: 'var(--space-md)' }}>ID</th>
24
+ <th style={{ padding: 'var(--space-md)' }}>Subscriber</th>
25
+ <th style={{ padding: 'var(--space-md)' }}>Connection</th>
26
+ <th style={{ padding: 'var(--space-md)' }}>Signal</th>
27
+ <th style={{ padding: 'var(--space-md)' }}>Location</th>
28
+ <th style={{ padding: 'var(--space-md)' }}>Status</th>
29
+ </tr>
30
+ </thead>
31
+ <tbody>
32
+ {users.map((user) => (
33
+ <tr key={user.id} style={{ borderBottom: '1px solid rgba(255,255,255,0.02)', transition: 'background 0.2s' }}
34
+ onMouseEnter={(e) => e.currentTarget.style.background = 'rgba(255,255,255,0.03)'}
35
+ onMouseLeave={(e) => e.currentTarget.style.background = 'transparent'}>
36
+ <td style={{ padding: 'var(--space-md)', fontFamily: 'monospace', color: 'var(--primary)' }}>{user.id}</td>
37
+ <td style={{ padding: 'var(--space-md)' }}>
38
+ <div style={{ display: 'flex', flexDirection: 'column' }}>
39
+ <span style={{ fontWeight: 500 }}>{user.name}</span>
40
+ <span style={{ fontSize: '0.75rem', color: 'var(--text-muted)' }}>{user.phoneNumber}</span>
41
+ </div>
42
+ </td>
43
+ <td style={{ padding: 'var(--space-md)' }}>
44
+ <Badge status={user.connectionType} text={user.connectionType} />
45
+ </td>
46
+ <td style={{ padding: 'var(--space-md)' }}>
47
+ <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>
48
+ {getSignalIcon(user.signalStrength)}
49
+ <span style={{ color: 'var(--text-muted)' }}>{user.signalStrength}/5</span>
50
+ </div>
51
+ </td>
52
+ <td style={{ padding: 'var(--space-md)' }}>
53
+ <div style={{ display: 'flex', flexDirection: 'column' }}>
54
+ <span>{user.location.city}</span>
55
+ <span style={{ fontSize: '0.75rem', color: 'var(--text-muted)' }}>{user.location.country}</span>
56
+ </div>
57
+ </td>
58
+ <td style={{ padding: 'var(--space-md)' }}>
59
+ <Badge status={user.status} />
60
+ </td>
61
+ </tr>
62
+ ))}
63
+ </tbody>
64
+ </table>
65
+ </div>
66
+ </div>
67
+ );
68
+ };
69
+
70
+ export default UserTable;
src/components/Layout/Header.jsx ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { Bell, Search, Activity } from 'lucide-react';
3
+
4
+ const Header = () => {
5
+ return (
6
+ <header style={{
7
+ height: '80px',
8
+ display: 'flex',
9
+ alignItems: 'center',
10
+ justifyContent: 'space-between',
11
+ padding: '0 var(--space-md)',
12
+ marginTop: 'var(--space-md)'
13
+ }}>
14
+ <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-md)', flex: 1 }}>
15
+ <div className="glass-panel" style={{
16
+ display: 'flex',
17
+ alignItems: 'center',
18
+ padding: 'var(--space-sm) var(--space-md)',
19
+ gap: 'var(--space-sm)',
20
+ width: '300px'
21
+ }}>
22
+ <Search size={18} color="var(--text-muted)" />
23
+ <input
24
+ type="text"
25
+ placeholder="Search by IMSI, Number, or Location..."
26
+ style={{
27
+ background: 'transparent',
28
+ border: 'none',
29
+ color: 'var(--text-main)',
30
+ outline: 'none',
31
+ width: '100%'
32
+ }}
33
+ />
34
+ </div>
35
+ </div>
36
+
37
+ <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-lg)' }}>
38
+ <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-sm)', color: 'var(--text-muted)', fontSize: '0.875rem' }}>
39
+ <Activity size={16} color="var(--status-online)" />
40
+ <span>Network Load: <strong style={{ color: 'var(--text-main)' }}>42%</strong></span>
41
+ </div>
42
+
43
+ <button style={{
44
+ background: 'transparent',
45
+ border: 'none',
46
+ color: 'var(--text-main)',
47
+ cursor: 'pointer',
48
+ position: 'relative'
49
+ }}>
50
+ <Bell size={20} />
51
+ <span style={{
52
+ position: 'absolute',
53
+ top: -2,
54
+ right: -2,
55
+ width: '8px',
56
+ height: '8px',
57
+ background: 'var(--accent)',
58
+ borderRadius: '50%'
59
+ }} />
60
+ </button>
61
+ </div>
62
+ </header>
63
+ );
64
+ };
65
+
66
+ export default Header;
src/components/Layout/Sidebar.jsx ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { LayoutDashboard, Users, Map, Settings, Signal } from 'lucide-react';
3
+
4
+ const Sidebar = () => {
5
+ const navItems = [
6
+ { icon: LayoutDashboard, label: 'Dashboard', active: true },
7
+ { icon: Users, label: 'Subscribers' },
8
+ { icon: Map, label: 'Geo Map' },
9
+ { icon: Settings, label: 'Settings' },
10
+ ];
11
+
12
+ return (
13
+ <aside className="glass-panel" style={{
14
+ width: '260px',
15
+ margin: 'var(--space-md)',
16
+ marginRight: 0,
17
+ display: 'flex',
18
+ flexDirection: 'column',
19
+ padding: 'var(--space-lg)'
20
+ }}>
21
+ <div className="flex-center" style={{ marginBottom: 'var(--space-xl)', justifyContent: 'flex-start', gap: 'var(--space-sm)' }}>
22
+ <div style={{ color: 'var(--primary)', filter: 'drop-shadow(0 0 5px var(--primary-glow))' }}>
23
+ <Signal size={32} />
24
+ </div>
25
+ <div>
26
+ <h2 style={{ fontSize: '1.25rem', fontWeight: 'bold', lineHeight: 1 }}>GlobeSIM</h2>
27
+ <span style={{ fontSize: '0.75rem', color: 'var(--text-muted)', letterSpacing: '2px' }}>MONITOR</span>
28
+ </div>
29
+ </div>
30
+
31
+ <nav style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 'var(--space-sm)' }}>
32
+ {navItems.map((item, index) => (
33
+ <button
34
+ key={index}
35
+ style={{
36
+ display: 'flex',
37
+ alignItems: 'center',
38
+ gap: 'var(--space-md)',
39
+ background: item.active ? 'linear-gradient(90deg, rgba(0, 240, 255, 0.1), transparent)' : 'transparent',
40
+ border: 'none',
41
+ borderLeft: item.active ? '3px solid var(--primary)' : '3px solid transparent',
42
+ padding: 'var(--space-md)',
43
+ color: item.active ? 'var(--primary)' : 'var(--text-muted)',
44
+ cursor: 'pointer',
45
+ textAlign: 'left',
46
+ transition: 'all 0.3s ease',
47
+ borderRadius: '0 8px 8px 0'
48
+ }}
49
+ >
50
+ <item.icon size={20} />
51
+ <span style={{ fontWeight: item.active ? 600 : 400 }}>{item.label}</span>
52
+ </button>
53
+ ))}
54
+ </nav>
55
+
56
+ <div style={{ marginTop: 'auto', paddingTop: 'var(--space-md)', borderTop: '1px solid var(--border-color)' }}>
57
+ <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-sm)' }}>
58
+ <div style={{ width: '36px', height: '36px', borderRadius: '50%', background: 'var(--bg-panel-hover)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
59
+ <span style={{ fontWeight: 'bold', color: 'var(--primary)' }}>A</span>
60
+ </div>
61
+ <div style={{ display: 'flex', flexDirection: 'column' }}>
62
+ <span style={{ fontSize: '0.875rem' }}>Admin User</span>
63
+ <span style={{ fontSize: '0.75rem', color: 'var(--status-online)' }}>● Online</span>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ </aside>
68
+ );
69
+ };
70
+
71
+ export default Sidebar;
src/components/UI/Badge.jsx ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+
3
+ const Badge = ({ status, text }) => {
4
+ const getStatusColor = (s) => {
5
+ switch (s?.toLowerCase()) {
6
+ case 'online': return 'var(--status-online)';
7
+ case 'offline': return 'var(--status-offline)';
8
+ case 'roaming': return 'var(--status-roaming)';
9
+ case '5g': return 'var(--primary)';
10
+ case '4g lte': return '#a855f7';
11
+ default: return 'var(--text-muted)';
12
+ }
13
+ };
14
+
15
+ const color = getStatusColor(status);
16
+
17
+ return (
18
+ <span style={{
19
+ display: 'inline-flex',
20
+ alignItems: 'center',
21
+ gap: '6px',
22
+ padding: '4px 10px',
23
+ borderRadius: '20px',
24
+ background: `color-mix(in srgb, ${color} 15%, transparent)`,
25
+ color: color,
26
+ fontSize: '0.75rem',
27
+ fontWeight: 600,
28
+ border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`
29
+ }}>
30
+ <span style={{
31
+ width: '6px',
32
+ height: '6px',
33
+ borderRadius: '50%',
34
+ backgroundColor: color,
35
+ boxShadow: `0 0 5px ${color}`
36
+ }} />
37
+ {text || status}
38
+ </span>
39
+ );
40
+ };
41
+
42
+ export default Badge;
src/data/mockUsers.js ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const firstNames = ['Maria', 'Juan', 'Jose', 'Ana', 'Luis', 'Sofia', 'Miguel', 'Isabella', 'Pedro', 'Carmen', 'Ramon', 'Elena'];
2
+ const lastNames = ['Santos', 'Reyes', 'Cruz', 'Bautista', 'Ocampo', 'Garcia', 'Mendoza', 'Torres', 'Aquino', 'Flores'];
3
+ const localLocations = [
4
+ { city: 'Makati, Metro Manila', lat: 14.5547, lng: 121.0244, country: 'Philippines' },
5
+ { city: 'BGC, Taguig', lat: 14.5454, lng: 121.0503, country: 'Philippines' },
6
+ { city: 'Cebu City', lat: 10.3157, lng: 123.8854, country: 'Philippines' },
7
+ { city: 'Davao City', lat: 7.1907, lng: 125.4553, country: 'Philippines' },
8
+ { city: 'Quezon City', lat: 14.6760, lng: 121.0437, country: 'Philippines' },
9
+ ];
10
+ const roamingLocations = [
11
+ { city: 'Tokyo', lat: 35.6762, lng: 139.6503, country: 'Japan' },
12
+ { city: 'Singapore', lat: 1.3521, lng: 103.8198, country: 'Singapore' },
13
+ { city: 'Hong Kong', lat: 22.3193, lng: 114.1694, country: 'Hong Kong' },
14
+ { city: 'Los Angeles', lat: 34.0522, lng: -118.2437, country: 'USA' },
15
+ ];
16
+
17
+ const generateUser = (id) => {
18
+ const isRoaming = Math.random() > 0.8;
19
+ const location = isRoaming
20
+ ? roamingLocations[Math.floor(Math.random() * roamingLocations.length)]
21
+ : localLocations[Math.floor(Math.random() * localLocations.length)];
22
+
23
+ const firstName = firstNames[Math.floor(Math.random() * firstNames.length)];
24
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
25
+
26
+ return {
27
+ id: `GS-${1000 + id}`,
28
+ name: `${firstName} ${lastName}`,
29
+ phoneNumber: `09${Math.floor(Math.random() * 900 + 100)}-${Math.floor(Math.random() * 9000 + 1000)}`,
30
+ status: Math.random() > 0.2 ? 'Online' : 'Offline',
31
+ signalStrength: Math.floor(Math.random() * 5) + 1, // 1-5 bars
32
+ dataUsage: (Math.random() * 10).toFixed(2) + ' GB',
33
+ isRoaming,
34
+ location,
35
+ connectionType: Math.random() > 0.5 ? '5G' : '4G LTE'
36
+ };
37
+ };
38
+
39
+ export const mockUsers = Array.from({ length: 50 }, (_, i) => generateUser(i));
src/index.css ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
3
+ line-height: 1.5;
4
+ font-weight: 400;
5
+
6
+ color-scheme: light dark;
7
+ color: rgba(255, 255, 255, 0.87);
8
+ background-color: #242424;
9
+
10
+ font-synthesis: none;
11
+ text-rendering: optimizeLegibility;
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ }
15
+
16
+ a {
17
+ font-weight: 500;
18
+ color: #646cff;
19
+ text-decoration: inherit;
20
+ }
21
+ a:hover {
22
+ color: #535bf2;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ display: flex;
28
+ place-items: center;
29
+ min-width: 320px;
30
+ min-height: 100vh;
31
+ }
32
+
33
+ h1 {
34
+ font-size: 3.2em;
35
+ line-height: 1.1;
36
+ }
37
+
38
+ button {
39
+ border-radius: 8px;
40
+ border: 1px solid transparent;
41
+ padding: 0.6em 1.2em;
42
+ font-size: 1em;
43
+ font-weight: 500;
44
+ font-family: inherit;
45
+ background-color: #1a1a1a;
46
+ cursor: pointer;
47
+ transition: border-color 0.25s;
48
+ }
49
+ button:hover {
50
+ border-color: #646cff;
51
+ }
52
+ button:focus,
53
+ button:focus-visible {
54
+ outline: 4px auto -webkit-focus-ring-color;
55
+ }
56
+
57
+ @media (prefers-color-scheme: light) {
58
+ :root {
59
+ color: #213547;
60
+ background-color: #ffffff;
61
+ }
62
+ a:hover {
63
+ color: #747bff;
64
+ }
65
+ button {
66
+ background-color: #f9f9f9;
67
+ }
68
+ }
src/main.jsx ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react'
2
+ import ReactDOM from 'react-dom/client'
3
+ import App from './App.jsx'
4
+ import './styles/global.css'
5
+
6
+ import ErrorBoundary from './ErrorBoundary.jsx'
7
+
8
+ ReactDOM.createRoot(document.getElementById('root')).render(
9
+ <React.StrictMode>
10
+ <ErrorBoundary>
11
+ <App />
12
+ </ErrorBoundary>
13
+ </React.StrictMode>,
14
+ )
src/styles/global.css ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import './variables.css';
2
+
3
+ * {
4
+ box-sizing: border-box;
5
+ margin: 0;
6
+ padding: 0;
7
+ }
8
+
9
+ body {
10
+ font-family: var(--font-sans);
11
+ background-color: var(--bg-app);
12
+ color: var(--text-main);
13
+ line-height: 1.5;
14
+ overflow: hidden; /* App-like feel */
15
+ -webkit-font-smoothing: antialiased;
16
+ }
17
+
18
+ #root {
19
+ height: 100vh;
20
+ width: 100vw;
21
+ display: flex;
22
+ }
23
+
24
+ /* Scrollbar */
25
+ ::-webkit-scrollbar {
26
+ width: 8px;
27
+ }
28
+ ::-webkit-scrollbar-track {
29
+ background: transparent;
30
+ }
31
+ ::-webkit-scrollbar-thumb {
32
+ background: rgba(255, 255, 255, 0.1);
33
+ border-radius: 4px;
34
+ }
35
+ ::-webkit-scrollbar-thumb:hover {
36
+ background: rgba(255, 255, 255, 0.2);
37
+ }
38
+
39
+ /* Utility Classes */
40
+ .glass-panel {
41
+ background: var(--bg-panel);
42
+ backdrop-filter: blur(var(--glass-blur));
43
+ -webkit-backdrop-filter: blur(var(--glass-blur));
44
+ border: var(--glass-border);
45
+ border-radius: 12px;
46
+ }
47
+
48
+ .text-glow {
49
+ text-shadow: 0 0 10px var(--primary-glow);
50
+ }
51
+
52
+ .flex-center {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ }
src/styles/variables.css ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ /* Colors */
3
+ --bg-app: #02040a;
4
+ --bg-panel: rgba(13, 22, 45, 0.6);
5
+ --bg-panel-hover: rgba(20, 30, 60, 0.7);
6
+
7
+ --primary: #00f0ff;
8
+ --primary-glow: rgba(0, 240, 255, 0.4);
9
+ --secondary: #7000ff;
10
+ --accent: #ff0055;
11
+
12
+ --text-main: #ffffff;
13
+ --text-muted: #94a3b8;
14
+ --border-color: rgba(255, 255, 255, 0.1);
15
+
16
+ /* Status Colors */
17
+ --status-online: #00ff9d;
18
+ --status-offline: #ff0055;
19
+ --status-roaming: #ffbf00;
20
+
21
+ /* Typography */
22
+ --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
23
+
24
+ /* Spacing */
25
+ --space-xs: 0.25rem;
26
+ --space-sm: 0.5rem;
27
+ --space-md: 1rem;
28
+ --space-lg: 1.5rem;
29
+ --space-xl: 2rem;
30
+
31
+ /* Effects */
32
+ --glass-blur: 12px;
33
+ --glass-border: 1px solid rgba(255, 255, 255, 0.05);
34
+ --shadow-sm: 0 4px 6px -1px rgba(0, 0, 0, 0.5);
35
+ --shadow-glow: 0 0 15px var(--primary-glow);
36
+ }
vite.config.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import { defineConfig } from 'vite'
2
+ import react from '@vitejs/plugin-react'
3
+
4
+ // https://vite.dev/config/
5
+ export default defineConfig({
6
+ plugins: [react()],
7
+ })