Commit
dc7c195
·
verified ·
1 Parent(s): 867c634

Upload 9 files

Browse files
Files changed (9) hide show
  1. Dockerfile +17 -0
  2. README.md +14 -10
  3. index.html +238 -0
  4. index.tsx +130 -0
  5. metadata.json +6 -0
  6. package-lock.json +1169 -0
  7. package.json +23 -0
  8. tsconfig.json +30 -0
  9. vite.config.ts +17 -0
Dockerfile ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Stage 1: Build the app
2
+ FROM node:20 AS build
3
+
4
+ WORKDIR /app
5
+ COPY . .
6
+ RUN npm install
7
+ RUN npm run build
8
+
9
+ # Stage 2: Serve the app
10
+ FROM node:20 AS serve
11
+
12
+ WORKDIR /app
13
+ RUN npm install -g serve
14
+ COPY --from=build /app/dist ./dist
15
+
16
+ EXPOSE 3000
17
+ CMD ["serve", "-s", "dist", "-l", "3000"]
README.md CHANGED
@@ -1,10 +1,14 @@
1
- ---
2
- title: Transformers
3
- emoji: 🏃
4
- colorFrom: indigo
5
- colorTo: indigo
6
- sdk: docker
7
- pinned: false
8
- ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
1
+ # Run and deploy your AI Studio app
2
+
3
+ This contains everything you need to run your app locally.
4
+
5
+ ## Run Locally
6
+
7
+ **Prerequisites:** Node.js
8
+
9
+
10
+ 1. Install dependencies:
11
+ `npm install`
12
+ 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
13
+ 3. Run the app:
14
+ `npm run dev`
index.html ADDED
@@ -0,0 +1,238 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Interactive Transformer Architecture</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500&family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
10
+ <style>
11
+ :root {
12
+ --bg-color: #121212;
13
+ --surface-color: #1e1e1e;
14
+ --primary-color: #bb86fc;
15
+ --primary-variant-color: #3700b3;
16
+ --secondary-color: #03dac6;
17
+ --text-color: #e0e0e0;
18
+ --border-color: #333;
19
+ --label-color: #bbb;
20
+ }
21
+
22
+ *, *::before, *::after {
23
+ box-sizing: border-box;
24
+ margin: 0;
25
+ padding: 0;
26
+ }
27
+
28
+ body {
29
+ font-family: 'Inter', sans-serif;
30
+ background-color: var(--bg-color);
31
+ color: var(--text-color);
32
+ line-height: 1.6;
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: center;
36
+ padding: 2rem;
37
+ min-height: 100vh;
38
+ }
39
+
40
+ #root {
41
+ width: 100%;
42
+ max-width: 1600px; /* Increased max-width for the new layout */
43
+ margin: 0 auto;
44
+ }
45
+
46
+ .app-container {
47
+ display: flex;
48
+ flex-direction: column;
49
+ align-items: center;
50
+ gap: 2rem;
51
+ position: relative;
52
+ }
53
+
54
+ .header {
55
+ text-align: center;
56
+ }
57
+
58
+ .header h1 {
59
+ font-size: 2.5rem;
60
+ font-weight: 700;
61
+ color: var(--primary-color);
62
+ margin-bottom: 0.5rem;
63
+ }
64
+
65
+ .header p {
66
+ font-size: 1.1rem;
67
+ max-width: 800px;
68
+ }
69
+
70
+ .save-button-container {
71
+ width: 100%;
72
+ display: flex;
73
+ justify-content: center;
74
+ margin-bottom: 2rem;
75
+ }
76
+
77
+ .save-button {
78
+ background-color: var(--primary-color);
79
+ color: var(--bg-color);
80
+ border: none;
81
+ padding: 12px 24px;
82
+ font-size: 1rem;
83
+ font-weight: 500;
84
+ border-radius: 8px;
85
+ cursor: pointer;
86
+ transition: background-color 0.3s ease, transform 0.2s ease;
87
+ box-shadow: 0 4px 6px rgba(0,0,0,0.2);
88
+ }
89
+
90
+ .save-button:hover {
91
+ background-color: var(--secondary-color);
92
+ }
93
+
94
+ .save-button:active {
95
+ transform: scale(0.98);
96
+ }
97
+
98
+ .toast {
99
+ position: fixed;
100
+ bottom: 20px;
101
+ background-color: var(--secondary-color);
102
+ color: var(--bg-color);
103
+ padding: 10px 20px;
104
+ border-radius: 5px;
105
+ box-shadow: 0 2px 10px rgba(0,0,0,0.2);
106
+ opacity: 0;
107
+ visibility: hidden;
108
+ transition: opacity 0.3s, visibility 0.3s, transform 0.3s;
109
+ transform: translateY(20px);
110
+ z-index: 1000;
111
+ }
112
+
113
+ .toast.show {
114
+ opacity: 1;
115
+ visibility: visible;
116
+ transform: translateY(0);
117
+ }
118
+
119
+ .architecture-container {
120
+ display: grid;
121
+ grid-template-columns: 1fr auto 1fr;
122
+ align-items: start;
123
+ gap: 2rem;
124
+ width: 100%;
125
+ }
126
+
127
+ .notes-column {
128
+ display: flex;
129
+ flex-direction: column;
130
+ gap: 1.5rem;
131
+ height: 100%;
132
+ }
133
+
134
+ .column-title {
135
+ font-family: 'Roboto Mono', monospace;
136
+ font-size: 1.5rem;
137
+ color: var(--secondary-color);
138
+ margin-bottom: 1rem;
139
+ border-bottom: 2px solid var(--secondary-color);
140
+ padding-bottom: 0.5rem;
141
+ text-align: center;
142
+ }
143
+
144
+ .note-block {
145
+ display: flex;
146
+ flex-direction: column;
147
+ gap: 0.5rem;
148
+ }
149
+
150
+ .note-label {
151
+ font-size: 1rem;
152
+ font-weight: 500;
153
+ color: var(--label-color);
154
+ font-family: 'Roboto Mono', monospace;
155
+ }
156
+
157
+ .note-block textarea {
158
+ width: 100%;
159
+ min-height: 120px;
160
+ background-color: var(--surface-color);
161
+ border: 1px solid var(--border-color);
162
+ border-radius: 8px;
163
+ color: var(--text-color);
164
+ padding: 10px;
165
+ font-family: 'Inter', sans-serif;
166
+ font-size: 0.9rem;
167
+ resize: vertical;
168
+ transition: border-color 0.3s, box-shadow 0.3s;
169
+ }
170
+
171
+ .note-block textarea:focus {
172
+ outline: none;
173
+ border-color: var(--primary-color);
174
+ box-shadow: 0 0 0 3px rgba(187, 134, 252, 0.2);
175
+ }
176
+
177
+ .image-column {
178
+ display: flex;
179
+ align-items: center;
180
+ justify-content: center;
181
+ padding-top: 5rem; /* Align image with note sections */
182
+ }
183
+
184
+ .architecture-image {
185
+ max-width: 500px;
186
+ width: 100%;
187
+ height: auto;
188
+ border-radius: 8px;
189
+ background: #fff; /* Add a white background for the transparent PNG */
190
+ padding: 1rem;
191
+ box-shadow: 0 8px 16px rgba(0,0,0,0.3);
192
+ }
193
+
194
+ @media (max-width: 1200px) {
195
+ .architecture-container {
196
+ grid-template-columns: 1fr;
197
+ gap: 3rem;
198
+ }
199
+ .image-column {
200
+ padding-top: 0;
201
+ }
202
+ }
203
+
204
+ @media (max-width: 768px) {
205
+ body {
206
+ padding: 1rem;
207
+ }
208
+ .header h1 {
209
+ font-size: 2rem;
210
+ }
211
+ .header p {
212
+ font-size: 1rem;
213
+ }
214
+ .architecture-image {
215
+ max-width: 100%;
216
+ padding: 0.5rem;
217
+ }
218
+ .note-block textarea {
219
+ min-height: 100px;
220
+ }
221
+ }
222
+ </style>
223
+ <script type="importmap">
224
+ {
225
+ "imports": {
226
+ "react/": "https://esm.sh/react@^19.1.0/",
227
+ "react": "https://esm.sh/react@^19.1.0",
228
+ "react-dom/": "https://esm.sh/react-dom@^19.1.0/"
229
+ }
230
+ }
231
+ </script>
232
+ <link rel="stylesheet" href="/index.css">
233
+ </head>
234
+ <body>
235
+ <div id="root"></div>
236
+ <script type="module" src="/index.tsx"></script>
237
+ </body>
238
+ </html>
index.tsx ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useState, useEffect } from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import html2canvas from 'html2canvas';
4
+
5
+ const transformerImageDataUri = '/0_WGCl24jT_rWfgZWL.png';
6
+
7
+ const App = () => {
8
+ // Component definitions for the Transformer architecture
9
+ const components = [
10
+ { id: 'inputs', label: 'Inputs', side: 'encoder' },
11
+ { id: 'input-embedding', label: 'Input Embedding', side: 'encoder' },
12
+ { id: 'positional-encoding', label: 'Positional Encoding', side: 'encoder' },
13
+ { id: 'multi-head-attention', label: 'Multi-Head Attention', side: 'encoder' },
14
+ { id: 'add-norm', label: 'Add & Norm', side: 'encoder' },
15
+ { id: 'feedforward', label: 'Feedforward', side: 'encoder' },
16
+ { id: 'outputs', label: 'Outputs (shifted right)', side: 'decoder' },
17
+ { id: 'output-embedding', label: 'Output Embedding', side: 'decoder' },
18
+ { id: 'decoder-positional-encoding', label: 'Positional Encoding', side: 'decoder' },
19
+ { id: 'masked-multi-head-attention', label: 'Masked Multi-Head Attention', side: 'decoder' },
20
+ { id: 'decoder-add-norm', label: 'Add & Norm', side: 'decoder' },
21
+ { id: 'cross-attention', label: 'Cross Attention', side: 'decoder' },
22
+ { id: 'decoder-feedforward', label: 'Feedforward', side: 'decoder' },
23
+ { id: 'linear', label: 'Linear', side: 'decoder' },
24
+ { id: 'softmax', label: 'Softmax', side: 'decoder' },
25
+ { id: 'output-probabilities', label: 'Output Probabilities', side: 'decoder' },
26
+ ];
27
+
28
+ const [notes, setNotes] = useState<{ [key: string]: string }>({});
29
+ const [showToast, setShowToast] = useState(false);
30
+ const [name, setName] = useState('');
31
+
32
+ // Load notes from localStorage on initial render
33
+ useEffect(() => {
34
+ try {
35
+ const savedNotes = localStorage.getItem('transformer-notes');
36
+ if (savedNotes) {
37
+ setNotes(JSON.parse(savedNotes));
38
+ }
39
+ } catch (error) {
40
+ console.error("Failed to load notes from localStorage", error);
41
+ }
42
+ }, []);
43
+
44
+ const handleNoteChange = (id: string, value: string) => {
45
+ setNotes((prev: { [key: string]: string }) => ({ ...prev, [id]: value }));
46
+ };
47
+
48
+ const handleSaveNotes = async () => {
49
+ const appContainer = document.querySelector('.app-container') as HTMLElement;
50
+ if (!appContainer) return;
51
+ try {
52
+ const canvas = await html2canvas(appContainer, { backgroundColor: '#121212' });
53
+ const image = canvas.toDataURL('image/png');
54
+ const link = document.createElement('a');
55
+ link.href = image;
56
+ link.download = 'transformer-notes.png';
57
+ link.click();
58
+ } catch (error) {
59
+ console.error('Failed to capture screenshot', error);
60
+ }
61
+ };
62
+
63
+ const encoderComponents = components.filter(c => c.side === 'encoder');
64
+ const decoderComponents = components.filter(c => c.side === 'decoder');
65
+
66
+ const renderNoteColumn = (title: string, componentsToRender: { id: string; label: string; side: string }[]) => (
67
+ <div className="notes-column">
68
+ <h2 className="column-title">{title}</h2>
69
+ {componentsToRender.map(comp => (
70
+ <div className="note-block" key={comp.id}>
71
+ <label className="note-label" htmlFor={comp.id}>{comp.label}</label>
72
+ <textarea
73
+ id={comp.id}
74
+ aria-label={`Notes for ${comp.label}`}
75
+ value={notes[comp.id] || ''}
76
+ onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => handleNoteChange(comp.id, e.target.value)}
77
+ placeholder={`Explain ${comp.label}...`}
78
+ />
79
+ </div>
80
+ ))}
81
+ </div>
82
+ );
83
+
84
+ return (
85
+ <div className="app-container">
86
+ <header className="header">
87
+ <h1>Interactive Transformer Architecture</h1>
88
+ <p>An interactive diagram of the Transformer model from "Attention Is All You Need". Add your notes in the text boxes to explain each part. Your notes will be saved locally in your browser.</p>
89
+ </header>
90
+
91
+ <div className="save-button-container" style={{ flexDirection: 'column', alignItems: 'center', gap: '1rem' }}>
92
+ <input
93
+ type="text"
94
+ className="name-input"
95
+ placeholder="Enter your name..."
96
+ value={name}
97
+ onChange={e => setName(e.target.value)}
98
+ style={{ padding: '10px', borderRadius: '6px', border: '1px solid #333', width: '250px', fontSize: '1rem', marginBottom: '0.5rem' }}
99
+ />
100
+ <button className="save-button" onClick={handleSaveNotes}>
101
+ Save Notes
102
+ </button>
103
+ </div>
104
+
105
+ <div className="architecture-container">
106
+ {renderNoteColumn('Encoder', encoderComponents)}
107
+
108
+ <div className="image-column">
109
+ <img
110
+ src={transformerImageDataUri}
111
+ alt="Transformer Architecture Diagram"
112
+ className="architecture-image"
113
+ />
114
+ </div>
115
+
116
+ {renderNoteColumn('Decoder', decoderComponents)}
117
+ </div>
118
+
119
+ <div className={`toast ${showToast ? 'show' : ''}`}>
120
+ Notes saved successfully!
121
+ </div>
122
+ </div>
123
+ );
124
+ };
125
+
126
+ const container = document.getElementById('root');
127
+ if (container) {
128
+ const root = createRoot(container);
129
+ root.render(<App />);
130
+ }
metadata.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "description": "Generated by Gemini.",
3
+ "prompt": "make a page that shows transformers archeitre in middle with text box at each block on left andright so u user can fill them save them and expalin each part ",
4
+ "requestFramePermissions": [],
5
+ "name": "App"
6
+ }
package-lock.json ADDED
@@ -0,0 +1,1169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "app",
3
+ "version": "0.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "app",
9
+ "version": "0.0.0",
10
+ "dependencies": {
11
+ "html2canvas": "^1.4.1",
12
+ "react": "^19.1.0",
13
+ "react-dom": "^19.1.0"
14
+ },
15
+ "devDependencies": {
16
+ "@types/node": "^22.14.0",
17
+ "@types/react": "^19.1.8",
18
+ "@types/react-dom": "^19.1.6",
19
+ "typescript": "~5.7.2",
20
+ "vite": "^6.2.0"
21
+ }
22
+ },
23
+ "node_modules/@esbuild/aix-ppc64": {
24
+ "version": "0.25.6",
25
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
26
+ "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
27
+ "cpu": [
28
+ "ppc64"
29
+ ],
30
+ "dev": true,
31
+ "license": "MIT",
32
+ "optional": true,
33
+ "os": [
34
+ "aix"
35
+ ],
36
+ "engines": {
37
+ "node": ">=18"
38
+ }
39
+ },
40
+ "node_modules/@esbuild/android-arm": {
41
+ "version": "0.25.6",
42
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
43
+ "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
44
+ "cpu": [
45
+ "arm"
46
+ ],
47
+ "dev": true,
48
+ "license": "MIT",
49
+ "optional": true,
50
+ "os": [
51
+ "android"
52
+ ],
53
+ "engines": {
54
+ "node": ">=18"
55
+ }
56
+ },
57
+ "node_modules/@esbuild/android-arm64": {
58
+ "version": "0.25.6",
59
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
60
+ "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
61
+ "cpu": [
62
+ "arm64"
63
+ ],
64
+ "dev": true,
65
+ "license": "MIT",
66
+ "optional": true,
67
+ "os": [
68
+ "android"
69
+ ],
70
+ "engines": {
71
+ "node": ">=18"
72
+ }
73
+ },
74
+ "node_modules/@esbuild/android-x64": {
75
+ "version": "0.25.6",
76
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
77
+ "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
78
+ "cpu": [
79
+ "x64"
80
+ ],
81
+ "dev": true,
82
+ "license": "MIT",
83
+ "optional": true,
84
+ "os": [
85
+ "android"
86
+ ],
87
+ "engines": {
88
+ "node": ">=18"
89
+ }
90
+ },
91
+ "node_modules/@esbuild/darwin-arm64": {
92
+ "version": "0.25.6",
93
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
94
+ "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
95
+ "cpu": [
96
+ "arm64"
97
+ ],
98
+ "dev": true,
99
+ "license": "MIT",
100
+ "optional": true,
101
+ "os": [
102
+ "darwin"
103
+ ],
104
+ "engines": {
105
+ "node": ">=18"
106
+ }
107
+ },
108
+ "node_modules/@esbuild/darwin-x64": {
109
+ "version": "0.25.6",
110
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
111
+ "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
112
+ "cpu": [
113
+ "x64"
114
+ ],
115
+ "dev": true,
116
+ "license": "MIT",
117
+ "optional": true,
118
+ "os": [
119
+ "darwin"
120
+ ],
121
+ "engines": {
122
+ "node": ">=18"
123
+ }
124
+ },
125
+ "node_modules/@esbuild/freebsd-arm64": {
126
+ "version": "0.25.6",
127
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
128
+ "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
129
+ "cpu": [
130
+ "arm64"
131
+ ],
132
+ "dev": true,
133
+ "license": "MIT",
134
+ "optional": true,
135
+ "os": [
136
+ "freebsd"
137
+ ],
138
+ "engines": {
139
+ "node": ">=18"
140
+ }
141
+ },
142
+ "node_modules/@esbuild/freebsd-x64": {
143
+ "version": "0.25.6",
144
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
145
+ "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
146
+ "cpu": [
147
+ "x64"
148
+ ],
149
+ "dev": true,
150
+ "license": "MIT",
151
+ "optional": true,
152
+ "os": [
153
+ "freebsd"
154
+ ],
155
+ "engines": {
156
+ "node": ">=18"
157
+ }
158
+ },
159
+ "node_modules/@esbuild/linux-arm": {
160
+ "version": "0.25.6",
161
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
162
+ "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
163
+ "cpu": [
164
+ "arm"
165
+ ],
166
+ "dev": true,
167
+ "license": "MIT",
168
+ "optional": true,
169
+ "os": [
170
+ "linux"
171
+ ],
172
+ "engines": {
173
+ "node": ">=18"
174
+ }
175
+ },
176
+ "node_modules/@esbuild/linux-arm64": {
177
+ "version": "0.25.6",
178
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
179
+ "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
180
+ "cpu": [
181
+ "arm64"
182
+ ],
183
+ "dev": true,
184
+ "license": "MIT",
185
+ "optional": true,
186
+ "os": [
187
+ "linux"
188
+ ],
189
+ "engines": {
190
+ "node": ">=18"
191
+ }
192
+ },
193
+ "node_modules/@esbuild/linux-ia32": {
194
+ "version": "0.25.6",
195
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
196
+ "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
197
+ "cpu": [
198
+ "ia32"
199
+ ],
200
+ "dev": true,
201
+ "license": "MIT",
202
+ "optional": true,
203
+ "os": [
204
+ "linux"
205
+ ],
206
+ "engines": {
207
+ "node": ">=18"
208
+ }
209
+ },
210
+ "node_modules/@esbuild/linux-loong64": {
211
+ "version": "0.25.6",
212
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
213
+ "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
214
+ "cpu": [
215
+ "loong64"
216
+ ],
217
+ "dev": true,
218
+ "license": "MIT",
219
+ "optional": true,
220
+ "os": [
221
+ "linux"
222
+ ],
223
+ "engines": {
224
+ "node": ">=18"
225
+ }
226
+ },
227
+ "node_modules/@esbuild/linux-mips64el": {
228
+ "version": "0.25.6",
229
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
230
+ "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
231
+ "cpu": [
232
+ "mips64el"
233
+ ],
234
+ "dev": true,
235
+ "license": "MIT",
236
+ "optional": true,
237
+ "os": [
238
+ "linux"
239
+ ],
240
+ "engines": {
241
+ "node": ">=18"
242
+ }
243
+ },
244
+ "node_modules/@esbuild/linux-ppc64": {
245
+ "version": "0.25.6",
246
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
247
+ "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
248
+ "cpu": [
249
+ "ppc64"
250
+ ],
251
+ "dev": true,
252
+ "license": "MIT",
253
+ "optional": true,
254
+ "os": [
255
+ "linux"
256
+ ],
257
+ "engines": {
258
+ "node": ">=18"
259
+ }
260
+ },
261
+ "node_modules/@esbuild/linux-riscv64": {
262
+ "version": "0.25.6",
263
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
264
+ "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
265
+ "cpu": [
266
+ "riscv64"
267
+ ],
268
+ "dev": true,
269
+ "license": "MIT",
270
+ "optional": true,
271
+ "os": [
272
+ "linux"
273
+ ],
274
+ "engines": {
275
+ "node": ">=18"
276
+ }
277
+ },
278
+ "node_modules/@esbuild/linux-s390x": {
279
+ "version": "0.25.6",
280
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
281
+ "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
282
+ "cpu": [
283
+ "s390x"
284
+ ],
285
+ "dev": true,
286
+ "license": "MIT",
287
+ "optional": true,
288
+ "os": [
289
+ "linux"
290
+ ],
291
+ "engines": {
292
+ "node": ">=18"
293
+ }
294
+ },
295
+ "node_modules/@esbuild/linux-x64": {
296
+ "version": "0.25.6",
297
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
298
+ "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
299
+ "cpu": [
300
+ "x64"
301
+ ],
302
+ "dev": true,
303
+ "license": "MIT",
304
+ "optional": true,
305
+ "os": [
306
+ "linux"
307
+ ],
308
+ "engines": {
309
+ "node": ">=18"
310
+ }
311
+ },
312
+ "node_modules/@esbuild/netbsd-arm64": {
313
+ "version": "0.25.6",
314
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
315
+ "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
316
+ "cpu": [
317
+ "arm64"
318
+ ],
319
+ "dev": true,
320
+ "license": "MIT",
321
+ "optional": true,
322
+ "os": [
323
+ "netbsd"
324
+ ],
325
+ "engines": {
326
+ "node": ">=18"
327
+ }
328
+ },
329
+ "node_modules/@esbuild/netbsd-x64": {
330
+ "version": "0.25.6",
331
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
332
+ "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
333
+ "cpu": [
334
+ "x64"
335
+ ],
336
+ "dev": true,
337
+ "license": "MIT",
338
+ "optional": true,
339
+ "os": [
340
+ "netbsd"
341
+ ],
342
+ "engines": {
343
+ "node": ">=18"
344
+ }
345
+ },
346
+ "node_modules/@esbuild/openbsd-arm64": {
347
+ "version": "0.25.6",
348
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
349
+ "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
350
+ "cpu": [
351
+ "arm64"
352
+ ],
353
+ "dev": true,
354
+ "license": "MIT",
355
+ "optional": true,
356
+ "os": [
357
+ "openbsd"
358
+ ],
359
+ "engines": {
360
+ "node": ">=18"
361
+ }
362
+ },
363
+ "node_modules/@esbuild/openbsd-x64": {
364
+ "version": "0.25.6",
365
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
366
+ "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
367
+ "cpu": [
368
+ "x64"
369
+ ],
370
+ "dev": true,
371
+ "license": "MIT",
372
+ "optional": true,
373
+ "os": [
374
+ "openbsd"
375
+ ],
376
+ "engines": {
377
+ "node": ">=18"
378
+ }
379
+ },
380
+ "node_modules/@esbuild/openharmony-arm64": {
381
+ "version": "0.25.6",
382
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
383
+ "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
384
+ "cpu": [
385
+ "arm64"
386
+ ],
387
+ "dev": true,
388
+ "license": "MIT",
389
+ "optional": true,
390
+ "os": [
391
+ "openharmony"
392
+ ],
393
+ "engines": {
394
+ "node": ">=18"
395
+ }
396
+ },
397
+ "node_modules/@esbuild/sunos-x64": {
398
+ "version": "0.25.6",
399
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
400
+ "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
401
+ "cpu": [
402
+ "x64"
403
+ ],
404
+ "dev": true,
405
+ "license": "MIT",
406
+ "optional": true,
407
+ "os": [
408
+ "sunos"
409
+ ],
410
+ "engines": {
411
+ "node": ">=18"
412
+ }
413
+ },
414
+ "node_modules/@esbuild/win32-arm64": {
415
+ "version": "0.25.6",
416
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
417
+ "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
418
+ "cpu": [
419
+ "arm64"
420
+ ],
421
+ "dev": true,
422
+ "license": "MIT",
423
+ "optional": true,
424
+ "os": [
425
+ "win32"
426
+ ],
427
+ "engines": {
428
+ "node": ">=18"
429
+ }
430
+ },
431
+ "node_modules/@esbuild/win32-ia32": {
432
+ "version": "0.25.6",
433
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
434
+ "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
435
+ "cpu": [
436
+ "ia32"
437
+ ],
438
+ "dev": true,
439
+ "license": "MIT",
440
+ "optional": true,
441
+ "os": [
442
+ "win32"
443
+ ],
444
+ "engines": {
445
+ "node": ">=18"
446
+ }
447
+ },
448
+ "node_modules/@esbuild/win32-x64": {
449
+ "version": "0.25.6",
450
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
451
+ "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
452
+ "cpu": [
453
+ "x64"
454
+ ],
455
+ "dev": true,
456
+ "license": "MIT",
457
+ "optional": true,
458
+ "os": [
459
+ "win32"
460
+ ],
461
+ "engines": {
462
+ "node": ">=18"
463
+ }
464
+ },
465
+ "node_modules/@rollup/rollup-android-arm-eabi": {
466
+ "version": "4.45.1",
467
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz",
468
+ "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==",
469
+ "cpu": [
470
+ "arm"
471
+ ],
472
+ "dev": true,
473
+ "license": "MIT",
474
+ "optional": true,
475
+ "os": [
476
+ "android"
477
+ ]
478
+ },
479
+ "node_modules/@rollup/rollup-android-arm64": {
480
+ "version": "4.45.1",
481
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz",
482
+ "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==",
483
+ "cpu": [
484
+ "arm64"
485
+ ],
486
+ "dev": true,
487
+ "license": "MIT",
488
+ "optional": true,
489
+ "os": [
490
+ "android"
491
+ ]
492
+ },
493
+ "node_modules/@rollup/rollup-darwin-arm64": {
494
+ "version": "4.45.1",
495
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz",
496
+ "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==",
497
+ "cpu": [
498
+ "arm64"
499
+ ],
500
+ "dev": true,
501
+ "license": "MIT",
502
+ "optional": true,
503
+ "os": [
504
+ "darwin"
505
+ ]
506
+ },
507
+ "node_modules/@rollup/rollup-darwin-x64": {
508
+ "version": "4.45.1",
509
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz",
510
+ "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==",
511
+ "cpu": [
512
+ "x64"
513
+ ],
514
+ "dev": true,
515
+ "license": "MIT",
516
+ "optional": true,
517
+ "os": [
518
+ "darwin"
519
+ ]
520
+ },
521
+ "node_modules/@rollup/rollup-freebsd-arm64": {
522
+ "version": "4.45.1",
523
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz",
524
+ "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==",
525
+ "cpu": [
526
+ "arm64"
527
+ ],
528
+ "dev": true,
529
+ "license": "MIT",
530
+ "optional": true,
531
+ "os": [
532
+ "freebsd"
533
+ ]
534
+ },
535
+ "node_modules/@rollup/rollup-freebsd-x64": {
536
+ "version": "4.45.1",
537
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz",
538
+ "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==",
539
+ "cpu": [
540
+ "x64"
541
+ ],
542
+ "dev": true,
543
+ "license": "MIT",
544
+ "optional": true,
545
+ "os": [
546
+ "freebsd"
547
+ ]
548
+ },
549
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
550
+ "version": "4.45.1",
551
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz",
552
+ "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==",
553
+ "cpu": [
554
+ "arm"
555
+ ],
556
+ "dev": true,
557
+ "license": "MIT",
558
+ "optional": true,
559
+ "os": [
560
+ "linux"
561
+ ]
562
+ },
563
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
564
+ "version": "4.45.1",
565
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz",
566
+ "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==",
567
+ "cpu": [
568
+ "arm"
569
+ ],
570
+ "dev": true,
571
+ "license": "MIT",
572
+ "optional": true,
573
+ "os": [
574
+ "linux"
575
+ ]
576
+ },
577
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
578
+ "version": "4.45.1",
579
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz",
580
+ "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==",
581
+ "cpu": [
582
+ "arm64"
583
+ ],
584
+ "dev": true,
585
+ "license": "MIT",
586
+ "optional": true,
587
+ "os": [
588
+ "linux"
589
+ ]
590
+ },
591
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
592
+ "version": "4.45.1",
593
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz",
594
+ "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==",
595
+ "cpu": [
596
+ "arm64"
597
+ ],
598
+ "dev": true,
599
+ "license": "MIT",
600
+ "optional": true,
601
+ "os": [
602
+ "linux"
603
+ ]
604
+ },
605
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
606
+ "version": "4.45.1",
607
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz",
608
+ "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==",
609
+ "cpu": [
610
+ "loong64"
611
+ ],
612
+ "dev": true,
613
+ "license": "MIT",
614
+ "optional": true,
615
+ "os": [
616
+ "linux"
617
+ ]
618
+ },
619
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
620
+ "version": "4.45.1",
621
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz",
622
+ "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==",
623
+ "cpu": [
624
+ "ppc64"
625
+ ],
626
+ "dev": true,
627
+ "license": "MIT",
628
+ "optional": true,
629
+ "os": [
630
+ "linux"
631
+ ]
632
+ },
633
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
634
+ "version": "4.45.1",
635
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz",
636
+ "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==",
637
+ "cpu": [
638
+ "riscv64"
639
+ ],
640
+ "dev": true,
641
+ "license": "MIT",
642
+ "optional": true,
643
+ "os": [
644
+ "linux"
645
+ ]
646
+ },
647
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
648
+ "version": "4.45.1",
649
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz",
650
+ "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==",
651
+ "cpu": [
652
+ "riscv64"
653
+ ],
654
+ "dev": true,
655
+ "license": "MIT",
656
+ "optional": true,
657
+ "os": [
658
+ "linux"
659
+ ]
660
+ },
661
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
662
+ "version": "4.45.1",
663
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz",
664
+ "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==",
665
+ "cpu": [
666
+ "s390x"
667
+ ],
668
+ "dev": true,
669
+ "license": "MIT",
670
+ "optional": true,
671
+ "os": [
672
+ "linux"
673
+ ]
674
+ },
675
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
676
+ "version": "4.45.1",
677
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz",
678
+ "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==",
679
+ "cpu": [
680
+ "x64"
681
+ ],
682
+ "dev": true,
683
+ "license": "MIT",
684
+ "optional": true,
685
+ "os": [
686
+ "linux"
687
+ ]
688
+ },
689
+ "node_modules/@rollup/rollup-linux-x64-musl": {
690
+ "version": "4.45.1",
691
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz",
692
+ "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==",
693
+ "cpu": [
694
+ "x64"
695
+ ],
696
+ "dev": true,
697
+ "license": "MIT",
698
+ "optional": true,
699
+ "os": [
700
+ "linux"
701
+ ]
702
+ },
703
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
704
+ "version": "4.45.1",
705
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz",
706
+ "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==",
707
+ "cpu": [
708
+ "arm64"
709
+ ],
710
+ "dev": true,
711
+ "license": "MIT",
712
+ "optional": true,
713
+ "os": [
714
+ "win32"
715
+ ]
716
+ },
717
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
718
+ "version": "4.45.1",
719
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz",
720
+ "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==",
721
+ "cpu": [
722
+ "ia32"
723
+ ],
724
+ "dev": true,
725
+ "license": "MIT",
726
+ "optional": true,
727
+ "os": [
728
+ "win32"
729
+ ]
730
+ },
731
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
732
+ "version": "4.45.1",
733
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz",
734
+ "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==",
735
+ "cpu": [
736
+ "x64"
737
+ ],
738
+ "dev": true,
739
+ "license": "MIT",
740
+ "optional": true,
741
+ "os": [
742
+ "win32"
743
+ ]
744
+ },
745
+ "node_modules/@types/estree": {
746
+ "version": "1.0.8",
747
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
748
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
749
+ "dev": true,
750
+ "license": "MIT"
751
+ },
752
+ "node_modules/@types/node": {
753
+ "version": "22.16.4",
754
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.4.tgz",
755
+ "integrity": "sha512-PYRhNtZdm2wH/NT2k/oAJ6/f2VD2N2Dag0lGlx2vWgMSJXGNmlce5MiTQzoWAiIJtso30mjnfQCOKVH+kAQC/g==",
756
+ "dev": true,
757
+ "license": "MIT",
758
+ "dependencies": {
759
+ "undici-types": "~6.21.0"
760
+ }
761
+ },
762
+ "node_modules/@types/react": {
763
+ "version": "19.1.8",
764
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
765
+ "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
766
+ "dev": true,
767
+ "license": "MIT",
768
+ "dependencies": {
769
+ "csstype": "^3.0.2"
770
+ }
771
+ },
772
+ "node_modules/@types/react-dom": {
773
+ "version": "19.1.6",
774
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz",
775
+ "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==",
776
+ "dev": true,
777
+ "license": "MIT",
778
+ "peerDependencies": {
779
+ "@types/react": "^19.0.0"
780
+ }
781
+ },
782
+ "node_modules/base64-arraybuffer": {
783
+ "version": "1.0.2",
784
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
785
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
786
+ "license": "MIT",
787
+ "engines": {
788
+ "node": ">= 0.6.0"
789
+ }
790
+ },
791
+ "node_modules/css-line-break": {
792
+ "version": "2.1.0",
793
+ "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
794
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
795
+ "license": "MIT",
796
+ "dependencies": {
797
+ "utrie": "^1.0.2"
798
+ }
799
+ },
800
+ "node_modules/csstype": {
801
+ "version": "3.1.3",
802
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
803
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
804
+ "dev": true,
805
+ "license": "MIT"
806
+ },
807
+ "node_modules/esbuild": {
808
+ "version": "0.25.6",
809
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
810
+ "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
811
+ "dev": true,
812
+ "hasInstallScript": true,
813
+ "license": "MIT",
814
+ "bin": {
815
+ "esbuild": "bin/esbuild"
816
+ },
817
+ "engines": {
818
+ "node": ">=18"
819
+ },
820
+ "optionalDependencies": {
821
+ "@esbuild/aix-ppc64": "0.25.6",
822
+ "@esbuild/android-arm": "0.25.6",
823
+ "@esbuild/android-arm64": "0.25.6",
824
+ "@esbuild/android-x64": "0.25.6",
825
+ "@esbuild/darwin-arm64": "0.25.6",
826
+ "@esbuild/darwin-x64": "0.25.6",
827
+ "@esbuild/freebsd-arm64": "0.25.6",
828
+ "@esbuild/freebsd-x64": "0.25.6",
829
+ "@esbuild/linux-arm": "0.25.6",
830
+ "@esbuild/linux-arm64": "0.25.6",
831
+ "@esbuild/linux-ia32": "0.25.6",
832
+ "@esbuild/linux-loong64": "0.25.6",
833
+ "@esbuild/linux-mips64el": "0.25.6",
834
+ "@esbuild/linux-ppc64": "0.25.6",
835
+ "@esbuild/linux-riscv64": "0.25.6",
836
+ "@esbuild/linux-s390x": "0.25.6",
837
+ "@esbuild/linux-x64": "0.25.6",
838
+ "@esbuild/netbsd-arm64": "0.25.6",
839
+ "@esbuild/netbsd-x64": "0.25.6",
840
+ "@esbuild/openbsd-arm64": "0.25.6",
841
+ "@esbuild/openbsd-x64": "0.25.6",
842
+ "@esbuild/openharmony-arm64": "0.25.6",
843
+ "@esbuild/sunos-x64": "0.25.6",
844
+ "@esbuild/win32-arm64": "0.25.6",
845
+ "@esbuild/win32-ia32": "0.25.6",
846
+ "@esbuild/win32-x64": "0.25.6"
847
+ }
848
+ },
849
+ "node_modules/fdir": {
850
+ "version": "6.4.6",
851
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
852
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
853
+ "dev": true,
854
+ "license": "MIT",
855
+ "peerDependencies": {
856
+ "picomatch": "^3 || ^4"
857
+ },
858
+ "peerDependenciesMeta": {
859
+ "picomatch": {
860
+ "optional": true
861
+ }
862
+ }
863
+ },
864
+ "node_modules/fsevents": {
865
+ "version": "2.3.3",
866
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
867
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
868
+ "dev": true,
869
+ "hasInstallScript": true,
870
+ "license": "MIT",
871
+ "optional": true,
872
+ "os": [
873
+ "darwin"
874
+ ],
875
+ "engines": {
876
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
877
+ }
878
+ },
879
+ "node_modules/html2canvas": {
880
+ "version": "1.4.1",
881
+ "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
882
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
883
+ "license": "MIT",
884
+ "dependencies": {
885
+ "css-line-break": "^2.1.0",
886
+ "text-segmentation": "^1.0.3"
887
+ },
888
+ "engines": {
889
+ "node": ">=8.0.0"
890
+ }
891
+ },
892
+ "node_modules/nanoid": {
893
+ "version": "3.3.11",
894
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
895
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
896
+ "dev": true,
897
+ "funding": [
898
+ {
899
+ "type": "github",
900
+ "url": "https://github.com/sponsors/ai"
901
+ }
902
+ ],
903
+ "license": "MIT",
904
+ "bin": {
905
+ "nanoid": "bin/nanoid.cjs"
906
+ },
907
+ "engines": {
908
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
909
+ }
910
+ },
911
+ "node_modules/picocolors": {
912
+ "version": "1.1.1",
913
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
914
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
915
+ "dev": true,
916
+ "license": "ISC"
917
+ },
918
+ "node_modules/picomatch": {
919
+ "version": "4.0.3",
920
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
921
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
922
+ "dev": true,
923
+ "license": "MIT",
924
+ "engines": {
925
+ "node": ">=12"
926
+ },
927
+ "funding": {
928
+ "url": "https://github.com/sponsors/jonschlinkert"
929
+ }
930
+ },
931
+ "node_modules/postcss": {
932
+ "version": "8.5.6",
933
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
934
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
935
+ "dev": true,
936
+ "funding": [
937
+ {
938
+ "type": "opencollective",
939
+ "url": "https://opencollective.com/postcss/"
940
+ },
941
+ {
942
+ "type": "tidelift",
943
+ "url": "https://tidelift.com/funding/github/npm/postcss"
944
+ },
945
+ {
946
+ "type": "github",
947
+ "url": "https://github.com/sponsors/ai"
948
+ }
949
+ ],
950
+ "license": "MIT",
951
+ "dependencies": {
952
+ "nanoid": "^3.3.11",
953
+ "picocolors": "^1.1.1",
954
+ "source-map-js": "^1.2.1"
955
+ },
956
+ "engines": {
957
+ "node": "^10 || ^12 || >=14"
958
+ }
959
+ },
960
+ "node_modules/react": {
961
+ "version": "19.1.0",
962
+ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
963
+ "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
964
+ "license": "MIT",
965
+ "engines": {
966
+ "node": ">=0.10.0"
967
+ }
968
+ },
969
+ "node_modules/react-dom": {
970
+ "version": "19.1.0",
971
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
972
+ "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
973
+ "license": "MIT",
974
+ "dependencies": {
975
+ "scheduler": "^0.26.0"
976
+ },
977
+ "peerDependencies": {
978
+ "react": "^19.1.0"
979
+ }
980
+ },
981
+ "node_modules/rollup": {
982
+ "version": "4.45.1",
983
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
984
+ "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==",
985
+ "dev": true,
986
+ "license": "MIT",
987
+ "dependencies": {
988
+ "@types/estree": "1.0.8"
989
+ },
990
+ "bin": {
991
+ "rollup": "dist/bin/rollup"
992
+ },
993
+ "engines": {
994
+ "node": ">=18.0.0",
995
+ "npm": ">=8.0.0"
996
+ },
997
+ "optionalDependencies": {
998
+ "@rollup/rollup-android-arm-eabi": "4.45.1",
999
+ "@rollup/rollup-android-arm64": "4.45.1",
1000
+ "@rollup/rollup-darwin-arm64": "4.45.1",
1001
+ "@rollup/rollup-darwin-x64": "4.45.1",
1002
+ "@rollup/rollup-freebsd-arm64": "4.45.1",
1003
+ "@rollup/rollup-freebsd-x64": "4.45.1",
1004
+ "@rollup/rollup-linux-arm-gnueabihf": "4.45.1",
1005
+ "@rollup/rollup-linux-arm-musleabihf": "4.45.1",
1006
+ "@rollup/rollup-linux-arm64-gnu": "4.45.1",
1007
+ "@rollup/rollup-linux-arm64-musl": "4.45.1",
1008
+ "@rollup/rollup-linux-loongarch64-gnu": "4.45.1",
1009
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1",
1010
+ "@rollup/rollup-linux-riscv64-gnu": "4.45.1",
1011
+ "@rollup/rollup-linux-riscv64-musl": "4.45.1",
1012
+ "@rollup/rollup-linux-s390x-gnu": "4.45.1",
1013
+ "@rollup/rollup-linux-x64-gnu": "4.45.1",
1014
+ "@rollup/rollup-linux-x64-musl": "4.45.1",
1015
+ "@rollup/rollup-win32-arm64-msvc": "4.45.1",
1016
+ "@rollup/rollup-win32-ia32-msvc": "4.45.1",
1017
+ "@rollup/rollup-win32-x64-msvc": "4.45.1",
1018
+ "fsevents": "~2.3.2"
1019
+ }
1020
+ },
1021
+ "node_modules/scheduler": {
1022
+ "version": "0.26.0",
1023
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
1024
+ "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
1025
+ "license": "MIT"
1026
+ },
1027
+ "node_modules/source-map-js": {
1028
+ "version": "1.2.1",
1029
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1030
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1031
+ "dev": true,
1032
+ "license": "BSD-3-Clause",
1033
+ "engines": {
1034
+ "node": ">=0.10.0"
1035
+ }
1036
+ },
1037
+ "node_modules/text-segmentation": {
1038
+ "version": "1.0.3",
1039
+ "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
1040
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
1041
+ "license": "MIT",
1042
+ "dependencies": {
1043
+ "utrie": "^1.0.2"
1044
+ }
1045
+ },
1046
+ "node_modules/tinyglobby": {
1047
+ "version": "0.2.14",
1048
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
1049
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
1050
+ "dev": true,
1051
+ "license": "MIT",
1052
+ "dependencies": {
1053
+ "fdir": "^6.4.4",
1054
+ "picomatch": "^4.0.2"
1055
+ },
1056
+ "engines": {
1057
+ "node": ">=12.0.0"
1058
+ },
1059
+ "funding": {
1060
+ "url": "https://github.com/sponsors/SuperchupuDev"
1061
+ }
1062
+ },
1063
+ "node_modules/typescript": {
1064
+ "version": "5.7.3",
1065
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
1066
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
1067
+ "dev": true,
1068
+ "license": "Apache-2.0",
1069
+ "bin": {
1070
+ "tsc": "bin/tsc",
1071
+ "tsserver": "bin/tsserver"
1072
+ },
1073
+ "engines": {
1074
+ "node": ">=14.17"
1075
+ }
1076
+ },
1077
+ "node_modules/undici-types": {
1078
+ "version": "6.21.0",
1079
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
1080
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
1081
+ "dev": true,
1082
+ "license": "MIT"
1083
+ },
1084
+ "node_modules/utrie": {
1085
+ "version": "1.0.2",
1086
+ "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
1087
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
1088
+ "license": "MIT",
1089
+ "dependencies": {
1090
+ "base64-arraybuffer": "^1.0.2"
1091
+ }
1092
+ },
1093
+ "node_modules/vite": {
1094
+ "version": "6.3.5",
1095
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
1096
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
1097
+ "dev": true,
1098
+ "license": "MIT",
1099
+ "dependencies": {
1100
+ "esbuild": "^0.25.0",
1101
+ "fdir": "^6.4.4",
1102
+ "picomatch": "^4.0.2",
1103
+ "postcss": "^8.5.3",
1104
+ "rollup": "^4.34.9",
1105
+ "tinyglobby": "^0.2.13"
1106
+ },
1107
+ "bin": {
1108
+ "vite": "bin/vite.js"
1109
+ },
1110
+ "engines": {
1111
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
1112
+ },
1113
+ "funding": {
1114
+ "url": "https://github.com/vitejs/vite?sponsor=1"
1115
+ },
1116
+ "optionalDependencies": {
1117
+ "fsevents": "~2.3.3"
1118
+ },
1119
+ "peerDependencies": {
1120
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
1121
+ "jiti": ">=1.21.0",
1122
+ "less": "*",
1123
+ "lightningcss": "^1.21.0",
1124
+ "sass": "*",
1125
+ "sass-embedded": "*",
1126
+ "stylus": "*",
1127
+ "sugarss": "*",
1128
+ "terser": "^5.16.0",
1129
+ "tsx": "^4.8.1",
1130
+ "yaml": "^2.4.2"
1131
+ },
1132
+ "peerDependenciesMeta": {
1133
+ "@types/node": {
1134
+ "optional": true
1135
+ },
1136
+ "jiti": {
1137
+ "optional": true
1138
+ },
1139
+ "less": {
1140
+ "optional": true
1141
+ },
1142
+ "lightningcss": {
1143
+ "optional": true
1144
+ },
1145
+ "sass": {
1146
+ "optional": true
1147
+ },
1148
+ "sass-embedded": {
1149
+ "optional": true
1150
+ },
1151
+ "stylus": {
1152
+ "optional": true
1153
+ },
1154
+ "sugarss": {
1155
+ "optional": true
1156
+ },
1157
+ "terser": {
1158
+ "optional": true
1159
+ },
1160
+ "tsx": {
1161
+ "optional": true
1162
+ },
1163
+ "yaml": {
1164
+ "optional": true
1165
+ }
1166
+ }
1167
+ }
1168
+ }
1169
+ }
package.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "app",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "html2canvas": "^1.4.1",
13
+ "react": "^19.1.0",
14
+ "react-dom": "^19.1.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^22.14.0",
18
+ "@types/react": "^19.1.8",
19
+ "@types/react-dom": "^19.1.6",
20
+ "typescript": "~5.7.2",
21
+ "vite": "^6.2.0"
22
+ }
23
+ }
tsconfig.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "experimentalDecorators": true,
5
+ "useDefineForClassFields": false,
6
+ "module": "ESNext",
7
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "isolatedModules": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+ "allowJs": true,
17
+ "jsx": "react-jsx",
18
+
19
+ /* Linting */
20
+ "strict": true,
21
+ "noUnusedLocals": true,
22
+ "noUnusedParameters": true,
23
+ "noFallthroughCasesInSwitch": true,
24
+ "noUncheckedSideEffectImports": true,
25
+
26
+ "paths": {
27
+ "@/*" : ["./*"]
28
+ }
29
+ }
30
+ }
vite.config.ts ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import path from 'path';
2
+ import { defineConfig, loadEnv } from 'vite';
3
+
4
+ export default defineConfig(({ mode }) => {
5
+ const env = loadEnv(mode, '.', '');
6
+ return {
7
+ define: {
8
+ 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
9
+ 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
10
+ },
11
+ resolve: {
12
+ alias: {
13
+ '@': path.resolve(__dirname, '.'),
14
+ }
15
+ }
16
+ };
17
+ });