reset-framework-cli 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +25 -25
  3. package/package.json +7 -7
  4. package/src/commands/build.js +144 -144
  5. package/src/commands/dev.js +195 -195
  6. package/src/commands/doctor.js +140 -140
  7. package/src/commands/init.js +946 -946
  8. package/src/commands/package.js +68 -68
  9. package/src/index.js +195 -195
  10. package/src/lib/backend.js +123 -123
  11. package/src/lib/context.js +66 -66
  12. package/src/lib/framework.js +57 -57
  13. package/src/lib/logger.js +11 -11
  14. package/src/lib/output.js +283 -283
  15. package/src/lib/process.js +303 -303
  16. package/src/lib/project.js +893 -866
  17. package/src/lib/toolchain.js +62 -62
  18. package/src/lib/ui.js +244 -244
  19. package/templates/basic/README.md +15 -15
  20. package/templates/basic/frontend/README.md +73 -73
  21. package/templates/basic/frontend/eslint.config.js +23 -23
  22. package/templates/basic/frontend/index.html +13 -13
  23. package/templates/basic/frontend/package.json +31 -31
  24. package/templates/basic/frontend/public/icons.svg +24 -24
  25. package/templates/basic/frontend/src/App.css +216 -216
  26. package/templates/basic/frontend/src/App.tsx +77 -77
  27. package/templates/basic/frontend/src/assets/vite.svg +1 -1
  28. package/templates/basic/frontend/src/index.css +111 -111
  29. package/templates/basic/frontend/src/lib/reset.ts +1 -1
  30. package/templates/basic/frontend/src/main.tsx +10 -10
  31. package/templates/basic/frontend/tsconfig.app.json +28 -28
  32. package/templates/basic/frontend/tsconfig.json +7 -7
  33. package/templates/basic/frontend/tsconfig.node.json +26 -26
  34. package/templates/basic/frontend/vite.config.ts +16 -16
  35. package/templates/basic/reset.config.json +58 -58
@@ -1,216 +1,216 @@
1
- .reset-premium-container {
2
- min-height: 100svh;
3
- display: flex;
4
- flex-direction: column;
5
- align-items: center;
6
- justify-content: center;
7
- padding: 2rem;
8
- position: relative;
9
- overflow: hidden;
10
- background-color: var(--bg);
11
- opacity: 0;
12
- transition: opacity 0.8s filter 0.8s cubic-bezier(0.16, 1, 0.3, 1);
13
- filter: blur(10px);
14
- }
15
-
16
- .reset-premium-container.loaded {
17
- opacity: 1;
18
- filter: blur(0);
19
- }
20
-
21
- .ambient-glow {
22
- position: absolute;
23
- top: -20vh;
24
- left: 50%;
25
- transform: translateX(-50%);
26
- width: 60vw;
27
- height: 60vw;
28
- background: radial-gradient(circle, var(--accent-bg) 0%, transparent 60%);
29
- opacity: 0.6;
30
- z-index: 0;
31
- pointer-events: none;
32
- filter: blur(40px);
33
- }
34
-
35
- .content {
36
- position: relative;
37
- z-index: 1;
38
- max-width: 800px;
39
- text-align: center;
40
- display: flex;
41
- flex-direction: column;
42
- align-items: center;
43
- animation: float-up 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
44
- }
45
-
46
- .status-pill {
47
- display: inline-flex;
48
- align-items: center;
49
- gap: 8px;
50
- padding: 6px 16px;
51
- border-radius: 9999px;
52
- background: rgba(255, 255, 255, 0.03);
53
- backdrop-filter: blur(10px);
54
- border: 1px solid var(--border);
55
- color: var(--text-h);
56
- font-size: 0.85rem;
57
- font-weight: 500;
58
- letter-spacing: 0.3px;
59
- margin-bottom: 2.5rem;
60
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.04);
61
- transition: transform 0.3s ease, box-shadow 0.3s ease;
62
- }
63
-
64
- .status-pill:hover {
65
- transform: translateY(-1px);
66
- box-shadow: 0 6px 32px rgba(0, 0, 0, 0.08);
67
- }
68
-
69
- .status-dot {
70
- width: 8px;
71
- height: 8px;
72
- border-radius: 50%;
73
- background-color: var(--accent);
74
- box-shadow: 0 0 12px var(--accent);
75
- animation: pulse 2s infinite ease-in-out;
76
- }
77
-
78
- .hero-title {
79
- font-size: 5rem;
80
- line-height: 1.1;
81
- margin: 0 0 1.5rem 0;
82
- letter-spacing: -0.05em;
83
- font-weight: 700;
84
- color: var(--text-h);
85
- }
86
-
87
- .hero-title span {
88
- display: inline-block;
89
- background: linear-gradient(135deg, var(--text-h) 0%, var(--text) 100%);
90
- -webkit-background-clip: text;
91
- -webkit-text-fill-color: transparent;
92
- }
93
-
94
- .hero-title .text-dim {
95
- background: linear-gradient(135deg, var(--text) 0%, rgba(100,100,100,0.5) 100%);
96
- -webkit-background-clip: text;
97
- -webkit-text-fill-color: transparent;
98
- opacity: 0.8;
99
- }
100
-
101
- .hero-subtitle {
102
- font-size: 1.15rem;
103
- color: var(--text);
104
- margin: 0 auto 3.5rem auto;
105
- line-height: 1.6;
106
- max-width: 500px;
107
- font-weight: 400;
108
- letter-spacing: -0.01em;
109
- }
110
-
111
- .button-group {
112
- display: flex;
113
- gap: 1.25rem;
114
- margin-bottom: 3.5rem;
115
- }
116
-
117
- .btn-primary, .btn-secondary {
118
- padding: 0.8rem 1.8rem;
119
- border-radius: 12px;
120
- font-size: 0.95rem;
121
- font-weight: 500;
122
- cursor: pointer;
123
- transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
124
- font-family: inherit;
125
- text-decoration: none;
126
- display: inline-flex;
127
- align-items: center;
128
- justify-content: center;
129
- }
130
-
131
- .btn-primary {
132
- background: var(--text-h);
133
- color: var(--bg);
134
- border: 1px solid transparent;
135
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
136
- }
137
-
138
- .btn-primary:hover {
139
- transform: translateY(-2px);
140
- box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15);
141
- background: var(--text);
142
- }
143
-
144
- .btn-primary:active {
145
- transform: translateY(0);
146
- }
147
-
148
- .btn-secondary {
149
- background: rgba(255, 255, 255, 0.02);
150
- color: var(--text-h);
151
- border: 1px solid var(--border);
152
- backdrop-filter: blur(10px);
153
- }
154
-
155
- .btn-secondary:hover {
156
- background: var(--code-bg);
157
- border-color: var(--text);
158
- transform: translateY(-2px);
159
- }
160
-
161
- .btn-secondary:active {
162
- transform: translateY(0);
163
- }
164
-
165
- .code-snippet-box {
166
- padding: 1rem 1.75rem;
167
- border-radius: 12px;
168
- background: rgba(0, 0, 0, 0.02);
169
- border: 1px solid var(--border);
170
- backdrop-filter: blur(20px);
171
- transition: all 0.3s ease;
172
- }
173
-
174
- @media (prefers-color-scheme: dark) {
175
- .code-snippet-box {
176
- background: rgba(255, 255, 255, 0.02);
177
- }
178
- }
179
-
180
- .code-snippet-box:hover {
181
- border-color: var(--text);
182
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.05);
183
- }
184
-
185
- .code-snippet-box code {
186
- background: transparent;
187
- padding: 0;
188
- font-family: var(--mono);
189
- font-size: 0.9rem;
190
- color: var(--text-h);
191
- letter-spacing: 0px;
192
- }
193
-
194
- .code-prompt {
195
- color: var(--accent);
196
- margin-right: 0.5rem;
197
- user-select: none;
198
- }
199
-
200
- @keyframes float-up {
201
- from { opacity: 0; transform: translateY(20px); }
202
- to { opacity: 1; transform: translateY(0); }
203
- }
204
-
205
- @keyframes pulse {
206
- 0% { opacity: 0.6; transform: scale(0.95); }
207
- 50% { opacity: 1; transform: scale(1.05); }
208
- 100% { opacity: 0.6; transform: scale(0.95); }
209
- }
210
-
211
- @media (max-width: 768px) {
212
- .hero-title { font-size: 3.5rem; }
213
- .button-group { flex-direction: column; width: 100%; max-width: 280px; }
214
- .btn-primary, .btn-secondary { width: 100%; }
215
- }
216
-
1
+ .reset-premium-container {
2
+ min-height: 100svh;
3
+ display: flex;
4
+ flex-direction: column;
5
+ align-items: center;
6
+ justify-content: center;
7
+ padding: 2rem;
8
+ position: relative;
9
+ overflow: hidden;
10
+ background-color: var(--bg);
11
+ opacity: 0;
12
+ transition: opacity 0.8s filter 0.8s cubic-bezier(0.16, 1, 0.3, 1);
13
+ filter: blur(10px);
14
+ }
15
+
16
+ .reset-premium-container.loaded {
17
+ opacity: 1;
18
+ filter: blur(0);
19
+ }
20
+
21
+ .ambient-glow {
22
+ position: absolute;
23
+ top: -20vh;
24
+ left: 50%;
25
+ transform: translateX(-50%);
26
+ width: 60vw;
27
+ height: 60vw;
28
+ background: radial-gradient(circle, var(--accent-bg) 0%, transparent 60%);
29
+ opacity: 0.6;
30
+ z-index: 0;
31
+ pointer-events: none;
32
+ filter: blur(40px);
33
+ }
34
+
35
+ .content {
36
+ position: relative;
37
+ z-index: 1;
38
+ max-width: 800px;
39
+ text-align: center;
40
+ display: flex;
41
+ flex-direction: column;
42
+ align-items: center;
43
+ animation: float-up 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
44
+ }
45
+
46
+ .status-pill {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ gap: 8px;
50
+ padding: 6px 16px;
51
+ border-radius: 9999px;
52
+ background: rgba(255, 255, 255, 0.03);
53
+ backdrop-filter: blur(10px);
54
+ border: 1px solid var(--border);
55
+ color: var(--text-h);
56
+ font-size: 0.85rem;
57
+ font-weight: 500;
58
+ letter-spacing: 0.3px;
59
+ margin-bottom: 2.5rem;
60
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.04);
61
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
62
+ }
63
+
64
+ .status-pill:hover {
65
+ transform: translateY(-1px);
66
+ box-shadow: 0 6px 32px rgba(0, 0, 0, 0.08);
67
+ }
68
+
69
+ .status-dot {
70
+ width: 8px;
71
+ height: 8px;
72
+ border-radius: 50%;
73
+ background-color: var(--accent);
74
+ box-shadow: 0 0 12px var(--accent);
75
+ animation: pulse 2s infinite ease-in-out;
76
+ }
77
+
78
+ .hero-title {
79
+ font-size: 5rem;
80
+ line-height: 1.1;
81
+ margin: 0 0 1.5rem 0;
82
+ letter-spacing: -0.05em;
83
+ font-weight: 700;
84
+ color: var(--text-h);
85
+ }
86
+
87
+ .hero-title span {
88
+ display: inline-block;
89
+ background: linear-gradient(135deg, var(--text-h) 0%, var(--text) 100%);
90
+ -webkit-background-clip: text;
91
+ -webkit-text-fill-color: transparent;
92
+ }
93
+
94
+ .hero-title .text-dim {
95
+ background: linear-gradient(135deg, var(--text) 0%, rgba(100,100,100,0.5) 100%);
96
+ -webkit-background-clip: text;
97
+ -webkit-text-fill-color: transparent;
98
+ opacity: 0.8;
99
+ }
100
+
101
+ .hero-subtitle {
102
+ font-size: 1.15rem;
103
+ color: var(--text);
104
+ margin: 0 auto 3.5rem auto;
105
+ line-height: 1.6;
106
+ max-width: 500px;
107
+ font-weight: 400;
108
+ letter-spacing: -0.01em;
109
+ }
110
+
111
+ .button-group {
112
+ display: flex;
113
+ gap: 1.25rem;
114
+ margin-bottom: 3.5rem;
115
+ }
116
+
117
+ .btn-primary, .btn-secondary {
118
+ padding: 0.8rem 1.8rem;
119
+ border-radius: 12px;
120
+ font-size: 0.95rem;
121
+ font-weight: 500;
122
+ cursor: pointer;
123
+ transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
124
+ font-family: inherit;
125
+ text-decoration: none;
126
+ display: inline-flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ }
130
+
131
+ .btn-primary {
132
+ background: var(--text-h);
133
+ color: var(--bg);
134
+ border: 1px solid transparent;
135
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
136
+ }
137
+
138
+ .btn-primary:hover {
139
+ transform: translateY(-2px);
140
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15);
141
+ background: var(--text);
142
+ }
143
+
144
+ .btn-primary:active {
145
+ transform: translateY(0);
146
+ }
147
+
148
+ .btn-secondary {
149
+ background: rgba(255, 255, 255, 0.02);
150
+ color: var(--text-h);
151
+ border: 1px solid var(--border);
152
+ backdrop-filter: blur(10px);
153
+ }
154
+
155
+ .btn-secondary:hover {
156
+ background: var(--code-bg);
157
+ border-color: var(--text);
158
+ transform: translateY(-2px);
159
+ }
160
+
161
+ .btn-secondary:active {
162
+ transform: translateY(0);
163
+ }
164
+
165
+ .code-snippet-box {
166
+ padding: 1rem 1.75rem;
167
+ border-radius: 12px;
168
+ background: rgba(0, 0, 0, 0.02);
169
+ border: 1px solid var(--border);
170
+ backdrop-filter: blur(20px);
171
+ transition: all 0.3s ease;
172
+ }
173
+
174
+ @media (prefers-color-scheme: dark) {
175
+ .code-snippet-box {
176
+ background: rgba(255, 255, 255, 0.02);
177
+ }
178
+ }
179
+
180
+ .code-snippet-box:hover {
181
+ border-color: var(--text);
182
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.05);
183
+ }
184
+
185
+ .code-snippet-box code {
186
+ background: transparent;
187
+ padding: 0;
188
+ font-family: var(--mono);
189
+ font-size: 0.9rem;
190
+ color: var(--text-h);
191
+ letter-spacing: 0px;
192
+ }
193
+
194
+ .code-prompt {
195
+ color: var(--accent);
196
+ margin-right: 0.5rem;
197
+ user-select: none;
198
+ }
199
+
200
+ @keyframes float-up {
201
+ from { opacity: 0; transform: translateY(20px); }
202
+ to { opacity: 1; transform: translateY(0); }
203
+ }
204
+
205
+ @keyframes pulse {
206
+ 0% { opacity: 0.6; transform: scale(0.95); }
207
+ 50% { opacity: 1; transform: scale(1.05); }
208
+ 100% { opacity: 0.6; transform: scale(0.95); }
209
+ }
210
+
211
+ @media (max-width: 768px) {
212
+ .hero-title { font-size: 3.5rem; }
213
+ .button-group { flex-direction: column; width: 100%; max-width: 280px; }
214
+ .btn-primary, .btn-secondary { width: 100%; }
215
+ }
216
+
@@ -1,77 +1,77 @@
1
- import { useEffect, useState } from 'react'
2
- import './App.css'
3
- import { reset } from './lib/reset'
4
-
5
- function App() {
6
- const [count, setCount] = useState(0)
7
- const [appInfo, setAppInfo] = useState({ name: 'Reset App', version: '0.0.0' })
8
- const [runtimeInfo, setRuntimeInfo] = useState({ platform: 'unknown', bridge: '1' })
9
- const [isLoaded, setIsLoaded] = useState(false)
10
-
11
- useEffect(() => {
12
- let cancelled = false
13
-
14
- async function loadRuntimeInfo() {
15
- try {
16
- const [app, runtime] = await Promise.all([
17
- reset.app.getInfo(),
18
- reset.runtime.getInfo(),
19
- ])
20
-
21
- if (cancelled) return
22
-
23
- setAppInfo({ name: app.name, version: app.version })
24
- setRuntimeInfo({ platform: runtime.platform, bridge: runtime.bridgeVersion })
25
- setIsLoaded(true)
26
- } catch (error) {
27
- console.error('Failed to load runtime info', error)
28
- setIsLoaded(true)
29
- }
30
- }
31
-
32
- loadRuntimeInfo()
33
-
34
- return () => {
35
- cancelled = true
36
- }
37
- }, [])
38
-
39
- return (
40
- <div className={`reset-premium-container ${isLoaded ? 'loaded' : ''}`}>
41
- <div className="ambient-glow" />
42
-
43
- <main className="content">
44
- <div className="status-pill">
45
- <div className="status-dot" />
46
- <span>{appInfo.name} v{appInfo.version} &mdash; {runtimeInfo.platform}</span>
47
- </div>
48
-
49
- <h1 className="hero-title">
50
- <span>Native performance.</span><br />
51
- <span className="text-dim">Web experience.</span>
52
- </h1>
53
-
54
- <p className="hero-subtitle">
55
- A radically lightweight desktop runtime. <br/>
56
- Drop the heavy Chromium baggage and build with the tools you already know.
57
- </p>
58
-
59
- <div className="button-group">
60
- <button className="btn-primary" onClick={() => setCount(c => c + 1)}>
61
- Clicked {count} times
62
- </button>
63
- <a href="https://github.com/reset-framework" target="_blank" rel="noreferrer" className="btn-secondary">
64
- View Documentation
65
- </a>
66
- </div>
67
-
68
- <div className="code-snippet-box">
69
- <code><span className="code-prompt">$</span> reset-framework-cli dev</code>
70
- </div>
71
- </main>
72
- </div>
73
- )
74
- }
75
-
76
- export default App
77
-
1
+ import { useEffect, useState } from 'react'
2
+ import './App.css'
3
+ import { reset } from './lib/reset'
4
+
5
+ function App() {
6
+ const [count, setCount] = useState(0)
7
+ const [appInfo, setAppInfo] = useState({ name: 'Reset App', version: '0.0.0' })
8
+ const [runtimeInfo, setRuntimeInfo] = useState({ platform: 'unknown', bridge: '1' })
9
+ const [isLoaded, setIsLoaded] = useState(false)
10
+
11
+ useEffect(() => {
12
+ let cancelled = false
13
+
14
+ async function loadRuntimeInfo() {
15
+ try {
16
+ const [app, runtime] = await Promise.all([
17
+ reset.app.getInfo(),
18
+ reset.runtime.getInfo(),
19
+ ])
20
+
21
+ if (cancelled) return
22
+
23
+ setAppInfo({ name: app.name, version: app.version })
24
+ setRuntimeInfo({ platform: runtime.platform, bridge: runtime.bridgeVersion })
25
+ setIsLoaded(true)
26
+ } catch (error) {
27
+ console.error('Failed to load runtime info', error)
28
+ setIsLoaded(true)
29
+ }
30
+ }
31
+
32
+ loadRuntimeInfo()
33
+
34
+ return () => {
35
+ cancelled = true
36
+ }
37
+ }, [])
38
+
39
+ return (
40
+ <div className={`reset-premium-container ${isLoaded ? 'loaded' : ''}`}>
41
+ <div className="ambient-glow" />
42
+
43
+ <main className="content">
44
+ <div className="status-pill">
45
+ <div className="status-dot" />
46
+ <span>{appInfo.name} v{appInfo.version} &mdash; {runtimeInfo.platform}</span>
47
+ </div>
48
+
49
+ <h1 className="hero-title">
50
+ <span>Native performance.</span><br />
51
+ <span className="text-dim">Web experience.</span>
52
+ </h1>
53
+
54
+ <p className="hero-subtitle">
55
+ A radically lightweight desktop runtime. <br/>
56
+ Drop the heavy Chromium baggage and build with the tools you already know.
57
+ </p>
58
+
59
+ <div className="button-group">
60
+ <button className="btn-primary" onClick={() => setCount(c => c + 1)}>
61
+ Clicked {count} times
62
+ </button>
63
+ <a href="https://github.com/reset-framework" target="_blank" rel="noreferrer" className="btn-secondary">
64
+ View Documentation
65
+ </a>
66
+ </div>
67
+
68
+ <div className="code-snippet-box">
69
+ <code><span className="code-prompt">$</span> reset-framework-cli dev</code>
70
+ </div>
71
+ </main>
72
+ </div>
73
+ )
74
+ }
75
+
76
+ export default App
77
+
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="77" height="47" fill="none" aria-labelledby="vite-logo-title" viewBox="0 0 77 47"><title id="vite-logo-title">Vite</title><style>.parenthesis{fill:#000}@media (prefers-color-scheme:dark){.parenthesis{fill:#fff}}</style><path fill="#9135ff" d="M40.151 45.71c-.663.844-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.493c-.92 0-1.457-1.04-.92-1.788l7.479-10.471c1.07-1.498 0-3.578-1.842-3.578H15.443c-.92 0-1.456-1.04-.92-1.788l9.696-13.576c.213-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.472c-1.07 1.497 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.087.89 1.83L40.153 45.712z"/><mask id="a" width="48" height="47" x="14" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M40.047 45.71c-.663.843-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.389c-.92 0-1.457-1.04-.92-1.788l7.479-10.472c1.07-1.497 0-3.578-1.842-3.578H15.34c-.92 0-1.456-1.04-.92-1.788l9.696-13.575c.213-.297.556-.474.92-.474H53.93c.92 0 1.456 1.04.92 1.788L47.37 13.03c-1.07 1.498 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.088.89 1.831L40.049 45.712z"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#eee6ff" rx="5.508" ry="14.704" transform="rotate(269.814 20.96 11.29)scale(-1 1)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#eee6ff" rx="10.399" ry="29.851" transform="rotate(89.814 -16.902 -8.275)scale(1 -1)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#8900ff" rx="5.508" ry="30.487" transform="rotate(89.814 -19.197 -7.127)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.928 4.177)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.738 5.52)scale(1 -1)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#eee6ff" rx="14.072" ry="22.078" transform="rotate(93.35 31.245 55.578)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx="14.592" cy="9.743" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(39.51 14.592 9.743)"/></g><g filter="url(#k)"><ellipse cx="61.728" cy="-5.321" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 61.728 -5.32)"/></g><g filter="url(#l)"><ellipse cx="55.618" cy="7.104" fill="#00c2ff" rx="5.971" ry="9.665" transform="rotate(37.892 55.618 7.104)"/></g><g filter="url(#m)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#n)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#o)"><ellipse cx="49.857" cy="30.678" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 49.857 30.678)"/></g><g filter="url(#p)"><ellipse cx="52.623" cy="33.171" fill="#00c2ff" rx="5.971" ry="15.297" transform="rotate(37.892 52.623 33.17)"/></g></g><path d="M6.919 0c-9.198 13.166-9.252 33.575 0 46.789h6.215c-9.25-13.214-9.196-33.623 0-46.789zm62.424 0h-6.215c9.198 13.166 9.252 33.575 0 46.789h6.215c9.25-13.214 9.196-33.623 0-46.789" class="parenthesis"/><defs><filter id="b" width="60.045" height="41.654" x="-5.564" y="16.92" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-40.407" y="-6.762" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-35.435" y="2.801" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-30.84" y="20.8" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-29.307" y="21.949" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="29.961" y="-17.13" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-13.43" y="-22.082" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="34.321" y="-37.644" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="38.847" y="-10.552" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="22.45" y="-1.645" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="32.919" y="11.36" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter></defs></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="77" height="47" fill="none" aria-labelledby="vite-logo-title" viewBox="0 0 77 47"><title id="vite-logo-title">Vite</title><style>.parenthesis{fill:#000}@media (prefers-color-scheme:dark){.parenthesis{fill:#fff}}</style><path fill="#9135ff" d="M40.151 45.71c-.663.844-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.493c-.92 0-1.457-1.04-.92-1.788l7.479-10.471c1.07-1.498 0-3.578-1.842-3.578H15.443c-.92 0-1.456-1.04-.92-1.788l9.696-13.576c.213-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.472c-1.07 1.497 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.087.89 1.83L40.153 45.712z"/><mask id="a" width="48" height="47" x="14" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M40.047 45.71c-.663.843-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.389c-.92 0-1.457-1.04-.92-1.788l7.479-10.472c1.07-1.497 0-3.578-1.842-3.578H15.34c-.92 0-1.456-1.04-.92-1.788l9.696-13.575c.213-.297.556-.474.92-.474H53.93c.92 0 1.456 1.04.92 1.788L47.37 13.03c-1.07 1.498 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.088.89 1.831L40.049 45.712z"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#eee6ff" rx="5.508" ry="14.704" transform="rotate(269.814 20.96 11.29)scale(-1 1)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#eee6ff" rx="10.399" ry="29.851" transform="rotate(89.814 -16.902 -8.275)scale(1 -1)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#8900ff" rx="5.508" ry="30.487" transform="rotate(89.814 -19.197 -7.127)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.928 4.177)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.738 5.52)scale(1 -1)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#eee6ff" rx="14.072" ry="22.078" transform="rotate(93.35 31.245 55.578)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx="14.592" cy="9.743" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(39.51 14.592 9.743)"/></g><g filter="url(#k)"><ellipse cx="61.728" cy="-5.321" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 61.728 -5.32)"/></g><g filter="url(#l)"><ellipse cx="55.618" cy="7.104" fill="#00c2ff" rx="5.971" ry="9.665" transform="rotate(37.892 55.618 7.104)"/></g><g filter="url(#m)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#n)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#o)"><ellipse cx="49.857" cy="30.678" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 49.857 30.678)"/></g><g filter="url(#p)"><ellipse cx="52.623" cy="33.171" fill="#00c2ff" rx="5.971" ry="15.297" transform="rotate(37.892 52.623 33.17)"/></g></g><path d="M6.919 0c-9.198 13.166-9.252 33.575 0 46.789h6.215c-9.25-13.214-9.196-33.623 0-46.789zm62.424 0h-6.215c9.198 13.166 9.252 33.575 0 46.789h6.215c9.25-13.214 9.196-33.623 0-46.789" class="parenthesis"/><defs><filter id="b" width="60.045" height="41.654" x="-5.564" y="16.92" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-40.407" y="-6.762" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-35.435" y="2.801" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-30.84" y="20.8" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-29.307" y="21.949" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="29.961" y="-17.13" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-13.43" y="-22.082" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="34.321" y="-37.644" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="38.847" y="-10.552" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="22.45" y="-1.645" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="32.919" y="11.36" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter></defs></svg>