vatts 1.2.2 → 1.2.3
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.
- package/dist/hotReload.js +2 -1
- package/dist/react/BuildingPage.js +36 -31
- package/dist/react/DefaultNotFound.js +38 -32
- package/dist/vue/BuildingPage.vue +46 -53
- package/dist/vue/DefaultNotFound.vue +40 -30
- package/package.json +1 -1
package/dist/hotReload.js
CHANGED
|
@@ -291,7 +291,8 @@ class HotReloadManager {
|
|
|
291
291
|
filePath.includes('not-found.tsx') ||
|
|
292
292
|
filePath.endsWith('.tsx') ||
|
|
293
293
|
filePath.endsWith(".ts") ||
|
|
294
|
-
filePath.endsWith(".vue")
|
|
294
|
+
filePath.endsWith(".vue") ||
|
|
295
|
+
filePath.endsWith(".css");
|
|
295
296
|
const isBackendFile = filePath.includes(path.join('src', 'backend')) && !isFrontendFile;
|
|
296
297
|
(0, router_1.clearFileCache)(filePath);
|
|
297
298
|
this.clearBackendCache(filePath);
|
|
@@ -31,11 +31,13 @@ function BuildingScreen() {
|
|
|
31
31
|
:root {
|
|
32
32
|
--bg-solid: #000000;
|
|
33
33
|
--card-bg: #0a0a0a;
|
|
34
|
-
/* PALETA:
|
|
34
|
+
/* PALETA: React Theme */
|
|
35
|
+
--react-cyan: #61DAFB; /* O azul/ciano clássico do React */
|
|
36
|
+
--react-dark: #20232a; /* Fundo escuro azulado */
|
|
35
37
|
--primary: #ffffff;
|
|
36
|
-
--primary-glow: rgba(
|
|
38
|
+
--primary-glow: rgba(97, 218, 251, 0.1);
|
|
37
39
|
--text-main: #ffffff;
|
|
38
|
-
--text-muted: #
|
|
40
|
+
--text-muted: #8ea9c7; /* Cinza azulado para combinar */
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
body {
|
|
@@ -68,8 +70,8 @@ function BuildingScreen() {
|
|
|
68
70
|
width: 100%;
|
|
69
71
|
max-width: 420px;
|
|
70
72
|
background: var(--card-bg);
|
|
71
|
-
/* Borda sutil
|
|
72
|
-
box-shadow: 0 0 0 1px rgba(
|
|
73
|
+
/* Borda sutil com brilho React Cyan */
|
|
74
|
+
box-shadow: 0 0 0 1px rgba(97, 218, 251, 0.1), 0 40px 80px -20px rgba(0, 0, 0, 0.9);
|
|
73
75
|
border-radius: 20px;
|
|
74
76
|
overflow: hidden;
|
|
75
77
|
display: flex;
|
|
@@ -81,9 +83,9 @@ function BuildingScreen() {
|
|
|
81
83
|
.neon-line {
|
|
82
84
|
height: 1px;
|
|
83
85
|
width: 100%;
|
|
84
|
-
/* Linha de luz
|
|
85
|
-
background: linear-gradient(90deg, transparent,
|
|
86
|
-
box-shadow: 0 0 15px rgba(
|
|
86
|
+
/* Linha de luz: Gradiente usando o Cyan */
|
|
87
|
+
background: linear-gradient(90deg, transparent, var(--react-dark), var(--react-cyan), var(--react-dark), transparent);
|
|
88
|
+
box-shadow: 0 0 15px rgba(97, 218, 251, 0.2);
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
.content {
|
|
@@ -106,8 +108,8 @@ function BuildingScreen() {
|
|
|
106
108
|
object-fit: contain;
|
|
107
109
|
position: relative;
|
|
108
110
|
z-index: 2;
|
|
109
|
-
/*
|
|
110
|
-
filter:
|
|
111
|
+
/* Removi o grayscale para a logo brilhar na cor natural se tiver cor, ou ficar nítida */
|
|
112
|
+
filter: none;
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
.logo-glow {
|
|
@@ -117,9 +119,10 @@ function BuildingScreen() {
|
|
|
117
119
|
transform: translate(-50%, -50%);
|
|
118
120
|
width: 100%;
|
|
119
121
|
height: 100%;
|
|
120
|
-
|
|
122
|
+
/* Glow Cyan do React */
|
|
123
|
+
background: var(--react-cyan);
|
|
121
124
|
filter: blur(25px);
|
|
122
|
-
opacity: 0.
|
|
125
|
+
opacity: 0.2;
|
|
123
126
|
border-radius: 50%;
|
|
124
127
|
animation: pulse 2s ease-in-out infinite;
|
|
125
128
|
}
|
|
@@ -129,14 +132,16 @@ function BuildingScreen() {
|
|
|
129
132
|
font-size: 2rem;
|
|
130
133
|
font-weight: 800;
|
|
131
134
|
letter-spacing: -0.03em;
|
|
132
|
-
|
|
135
|
+
/* Gradiente do texto: Branco para Cyan */
|
|
136
|
+
background: linear-gradient(180deg, #ffffff 0%, var(--react-cyan) 100%);
|
|
133
137
|
-webkit-background-clip: text;
|
|
134
138
|
-webkit-text-fill-color: transparent;
|
|
135
139
|
}
|
|
136
140
|
|
|
137
141
|
h1 span {
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
/* Span .js em Cyan Sólido */
|
|
143
|
+
color: var(--react-cyan);
|
|
144
|
+
-webkit-text-fill-color: var(--react-cyan);
|
|
140
145
|
}
|
|
141
146
|
|
|
142
147
|
p {
|
|
@@ -148,14 +153,14 @@ function BuildingScreen() {
|
|
|
148
153
|
|
|
149
154
|
.terminal-box {
|
|
150
155
|
width: 100%;
|
|
151
|
-
background: rgba(
|
|
152
|
-
border: 1px solid rgba(
|
|
156
|
+
background: rgba(97, 218, 251, 0.03); /* Fundo azulado bem sutil */
|
|
157
|
+
border: 1px solid rgba(97, 218, 251, 0.1); /* Borda ciano sutil */
|
|
153
158
|
border-radius: 12px;
|
|
154
159
|
padding: 16px;
|
|
155
160
|
text-align: left;
|
|
156
161
|
font-family: 'JetBrains Mono', monospace;
|
|
157
162
|
font-size: 0.75rem;
|
|
158
|
-
color:
|
|
163
|
+
color: var(--text-muted);
|
|
159
164
|
box-sizing: border-box;
|
|
160
165
|
display: flex;
|
|
161
166
|
flex-direction: column;
|
|
@@ -171,25 +176,25 @@ function BuildingScreen() {
|
|
|
171
176
|
.term-spinner {
|
|
172
177
|
width: 10px;
|
|
173
178
|
height: 10px;
|
|
174
|
-
border: 2px solid rgba(
|
|
175
|
-
border-top-color:
|
|
179
|
+
border: 2px solid rgba(97, 218, 251, 0.1);
|
|
180
|
+
border-top-color: var(--react-cyan); /* Spinner Cyan */
|
|
176
181
|
border-radius: 50%;
|
|
177
182
|
animation: spin 0.6s linear infinite;
|
|
178
183
|
}
|
|
179
184
|
|
|
180
|
-
.file-name { color: #
|
|
181
|
-
.accent { color:
|
|
185
|
+
.file-name { color: #8ea9c7; }
|
|
186
|
+
.accent { color: var(--react-cyan); }
|
|
182
187
|
|
|
183
188
|
.card-footer {
|
|
184
189
|
width: 100%;
|
|
185
190
|
padding: 12px 32px;
|
|
186
|
-
background: rgba(
|
|
187
|
-
border-top: 1px solid rgba(
|
|
191
|
+
background: rgba(97, 218, 251, 0.02);
|
|
192
|
+
border-top: 1px solid rgba(97, 218, 251, 0.05);
|
|
188
193
|
display: flex;
|
|
189
194
|
justify-content: space-between;
|
|
190
195
|
align-items: center;
|
|
191
196
|
font-size: 11px;
|
|
192
|
-
color: rgba(255,255,255,0.
|
|
197
|
+
color: rgba(255,255,255,0.3);
|
|
193
198
|
box-sizing: border-box;
|
|
194
199
|
}
|
|
195
200
|
|
|
@@ -197,7 +202,7 @@ function BuildingScreen() {
|
|
|
197
202
|
display: flex;
|
|
198
203
|
align-items: center;
|
|
199
204
|
gap: 6px;
|
|
200
|
-
color:
|
|
205
|
+
color: var(--react-cyan);
|
|
201
206
|
font-weight: 600;
|
|
202
207
|
text-transform: uppercase;
|
|
203
208
|
letter-spacing: 0.05em;
|
|
@@ -206,14 +211,14 @@ function BuildingScreen() {
|
|
|
206
211
|
.dot {
|
|
207
212
|
width: 6px;
|
|
208
213
|
height: 6px;
|
|
209
|
-
background-color:
|
|
214
|
+
background-color: var(--react-cyan);
|
|
210
215
|
border-radius: 50%;
|
|
211
|
-
box-shadow: 0 0 8px
|
|
216
|
+
box-shadow: 0 0 8px var(--react-cyan);
|
|
212
217
|
}
|
|
213
218
|
|
|
214
219
|
@keyframes pulse {
|
|
215
|
-
0%, 100% { opacity: 0.
|
|
216
|
-
50% { opacity: 0.
|
|
220
|
+
0%, 100% { opacity: 0.15; transform: translate(-50%, -50%) scale(1); }
|
|
221
|
+
50% { opacity: 0.25; transform: translate(-50%, -50%) scale(1.1); }
|
|
217
222
|
}
|
|
218
223
|
|
|
219
224
|
@keyframes spin {
|
|
@@ -249,7 +254,7 @@ function BuildingScreen() {
|
|
|
249
254
|
react_1.default.createElement("span", { className: "accent" }, "src/vatts.ts"),
|
|
250
255
|
"...")),
|
|
251
256
|
react_1.default.createElement("div", { className: "term-line", style: { opacity: 0.5 } },
|
|
252
|
-
react_1.default.createElement("span",
|
|
257
|
+
react_1.default.createElement("span", { style: { color: "var(--react-cyan)" } }, "\u2713"),
|
|
253
258
|
react_1.default.createElement("span", { className: "file-name" }, "Optimizing assets")))),
|
|
254
259
|
react_1.default.createElement("div", { className: "card-footer" },
|
|
255
260
|
react_1.default.createElement("span", null, "Building..."),
|
|
@@ -60,6 +60,14 @@ function ErrorPage() {
|
|
|
60
60
|
setPath(window.location.pathname);
|
|
61
61
|
}
|
|
62
62
|
}, []);
|
|
63
|
+
// --- CORES DO TEMA REACT ---
|
|
64
|
+
const theme = {
|
|
65
|
+
cyan: '#61DAFB', // React Blue/Cyan
|
|
66
|
+
dark: '#20232a', // React Dark BG Accent
|
|
67
|
+
textMuted: '#8ea9c7', // Azul acinzentado
|
|
68
|
+
bg: '#000000',
|
|
69
|
+
cardBg: '#0a0a0a'
|
|
70
|
+
};
|
|
63
71
|
// --- GLOBAL STYLES ---
|
|
64
72
|
const globalStyles = `
|
|
65
73
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&family=JetBrains+Mono:wght@400;500&display=swap');
|
|
@@ -67,7 +75,7 @@ function ErrorPage() {
|
|
|
67
75
|
body {
|
|
68
76
|
margin: 0;
|
|
69
77
|
padding: 0;
|
|
70
|
-
background-color:
|
|
78
|
+
background-color: ${theme.bg};
|
|
71
79
|
color: #ffffff;
|
|
72
80
|
font-family: 'Inter', system-ui, sans-serif;
|
|
73
81
|
overflow: hidden;
|
|
@@ -78,10 +86,6 @@ function ErrorPage() {
|
|
|
78
86
|
* { box-sizing: border-box; }
|
|
79
87
|
`;
|
|
80
88
|
// --- INLINE STYLES ---
|
|
81
|
-
// Paleta Estilo Next.js (Preto, Branco, Cinza)
|
|
82
|
-
const primaryColor = '#ffffff';
|
|
83
|
-
const primaryColorDark = '#64748b';
|
|
84
|
-
const primaryRgb = '255, 255, 255';
|
|
85
89
|
const containerStyle = {
|
|
86
90
|
position: 'fixed',
|
|
87
91
|
top: 0,
|
|
@@ -95,15 +99,15 @@ function ErrorPage() {
|
|
|
95
99
|
justifyContent: 'center',
|
|
96
100
|
width: '100vw',
|
|
97
101
|
height: '100vh',
|
|
98
|
-
background:
|
|
102
|
+
background: theme.bg,
|
|
99
103
|
};
|
|
100
104
|
const cardStyle = {
|
|
101
105
|
width: 'min(90%, 500px)',
|
|
102
106
|
display: 'flex',
|
|
103
107
|
flexDirection: 'column',
|
|
104
|
-
background:
|
|
105
|
-
// Borda sutil
|
|
106
|
-
boxShadow: `0 0 0 1px rgba(
|
|
108
|
+
background: theme.cardBg,
|
|
109
|
+
// Borda sutil com brilho Cyan
|
|
110
|
+
boxShadow: `0 0 0 1px rgba(97, 218, 251, 0.1), 0 40px 80px -20px rgba(0, 0, 0, 0.9)`,
|
|
107
111
|
borderRadius: 20,
|
|
108
112
|
overflow: 'hidden',
|
|
109
113
|
position: 'relative',
|
|
@@ -111,10 +115,10 @@ function ErrorPage() {
|
|
|
111
115
|
const neonLine = {
|
|
112
116
|
height: '1px',
|
|
113
117
|
width: '100%',
|
|
114
|
-
// Gradiente
|
|
115
|
-
background: `linear-gradient(90deg, transparent,
|
|
116
|
-
// Brilho
|
|
117
|
-
boxShadow: `0 0 15px rgba(
|
|
118
|
+
// Gradiente usando o Cyan do React
|
|
119
|
+
background: `linear-gradient(90deg, transparent, ${theme.dark}, ${theme.cyan}, ${theme.dark}, transparent)`,
|
|
120
|
+
// Brilho Cyan suave
|
|
121
|
+
boxShadow: `0 0 15px rgba(97, 218, 251, 0.2)`,
|
|
118
122
|
};
|
|
119
123
|
const contentStyle = {
|
|
120
124
|
padding: '32px',
|
|
@@ -129,23 +133,24 @@ function ErrorPage() {
|
|
|
129
133
|
lineHeight: 1,
|
|
130
134
|
letterSpacing: '-0.04em',
|
|
131
135
|
color: '#fff',
|
|
132
|
-
|
|
136
|
+
// Gradiente Branco -> Cyan
|
|
137
|
+
background: `linear-gradient(180deg, #ffffff 0%, ${theme.cyan} 100%)`,
|
|
133
138
|
WebkitBackgroundClip: 'text',
|
|
134
139
|
WebkitTextFillColor: 'transparent',
|
|
135
140
|
marginBottom: 16,
|
|
136
|
-
filter: `drop-shadow(0 0 20px rgba(
|
|
141
|
+
filter: `drop-shadow(0 0 20px rgba(97, 218, 251, 0.1))`,
|
|
137
142
|
};
|
|
138
143
|
const terminalBoxStyle = {
|
|
139
144
|
width: '100%',
|
|
140
|
-
background: 'rgba(
|
|
145
|
+
background: 'rgba(97, 218, 251, 0.03)', // Fundo azulado sutil
|
|
141
146
|
borderRadius: 12,
|
|
142
147
|
padding: '16px',
|
|
143
148
|
marginBottom: 24,
|
|
144
|
-
border: '1px solid rgba(
|
|
149
|
+
border: '1px solid rgba(97, 218, 251, 0.1)', // Borda cyan sutil
|
|
145
150
|
fontFamily: '"JetBrains Mono", monospace',
|
|
146
151
|
fontSize: 12,
|
|
147
152
|
textAlign: 'left',
|
|
148
|
-
color:
|
|
153
|
+
color: theme.textMuted,
|
|
149
154
|
};
|
|
150
155
|
const getBtnStyle = (kind, hovering) => {
|
|
151
156
|
const base = {
|
|
@@ -166,17 +171,18 @@ function ErrorPage() {
|
|
|
166
171
|
if (kind === 'primary') {
|
|
167
172
|
return {
|
|
168
173
|
...base,
|
|
169
|
-
|
|
174
|
+
// Botão Primário agora é o Cyan do React com texto escuro (contraste alto)
|
|
175
|
+
background: hovering ? '#ffffff' : theme.cyan,
|
|
170
176
|
color: '#000000',
|
|
171
|
-
boxShadow: hovering ? `0 0 20px rgba(
|
|
177
|
+
boxShadow: hovering ? `0 0 20px rgba(97, 218, 251, 0.4)` : 'none',
|
|
172
178
|
};
|
|
173
179
|
}
|
|
174
180
|
return {
|
|
175
181
|
...base,
|
|
176
|
-
background: hovering ? 'rgba(
|
|
177
|
-
color: hovering ? '#fff' :
|
|
178
|
-
border: '1px solid
|
|
179
|
-
borderColor: hovering ?
|
|
182
|
+
background: hovering ? 'rgba(97, 218, 251, 0.1)' : 'transparent',
|
|
183
|
+
color: hovering ? '#fff' : theme.textMuted,
|
|
184
|
+
border: '1px solid',
|
|
185
|
+
borderColor: hovering ? theme.cyan : 'rgba(255, 255, 255, 0.1)',
|
|
180
186
|
};
|
|
181
187
|
};
|
|
182
188
|
const brandStyle = {
|
|
@@ -202,10 +208,10 @@ function ErrorPage() {
|
|
|
202
208
|
react_1.default.createElement("div", { style: { width: 8, height: 8, borderRadius: '50%', background: '#fff' } }),
|
|
203
209
|
react_1.default.createElement("div", { style: { width: 8, height: 8, borderRadius: '50%', background: '#fff' } })),
|
|
204
210
|
react_1.default.createElement("div", null,
|
|
205
|
-
react_1.default.createElement("span", { style: { color:
|
|
211
|
+
react_1.default.createElement("span", { style: { color: theme.cyan } }, "GET"),
|
|
206
212
|
' ',
|
|
207
213
|
react_1.default.createElement("span", { style: { color: '#fff' } }, path)),
|
|
208
|
-
react_1.default.createElement("div", { style: { marginTop: 4, color:
|
|
214
|
+
react_1.default.createElement("div", { style: { marginTop: 4, color: theme.textMuted } },
|
|
209
215
|
react_1.default.createElement("span", null, "Error: Route not found"))),
|
|
210
216
|
react_1.default.createElement("div", { style: { display: 'flex', gap: 12, width: '100%' } },
|
|
211
217
|
react_1.default.createElement("a", { href: "/", onMouseEnter: () => setHoverHome(true), onMouseLeave: () => setHoverHome(false), style: { ...getBtnStyle('primary', hoverHome), flex: 1, justifyContent: 'center' } },
|
|
@@ -222,8 +228,8 @@ function ErrorPage() {
|
|
|
222
228
|
"Retry"))),
|
|
223
229
|
react_1.default.createElement("div", { style: {
|
|
224
230
|
padding: '12px 32px',
|
|
225
|
-
background: 'rgba(
|
|
226
|
-
borderTop: '1px solid rgba(
|
|
231
|
+
background: 'rgba(97, 218, 251, 0.02)',
|
|
232
|
+
borderTop: '1px solid rgba(97, 218, 251, 0.05)',
|
|
227
233
|
display: 'flex',
|
|
228
234
|
justifyContent: 'space-between',
|
|
229
235
|
alignItems: 'center',
|
|
@@ -232,11 +238,11 @@ function ErrorPage() {
|
|
|
232
238
|
} },
|
|
233
239
|
react_1.default.createElement("span", null, "Vatts Server"),
|
|
234
240
|
react_1.default.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: 6 } },
|
|
235
|
-
react_1.default.createElement("div", { style: { width: 6, height: 6, borderRadius: '50%', background:
|
|
236
|
-
react_1.default.createElement("span", { style: { color:
|
|
241
|
+
react_1.default.createElement("div", { style: { width: 6, height: 6, borderRadius: '50%', background: theme.cyan, boxShadow: `0 0 6px ${theme.cyan}` } }),
|
|
242
|
+
react_1.default.createElement("span", { style: { color: theme.cyan } }, "Not Found")))),
|
|
237
243
|
react_1.default.createElement("a", { href: "https://npmjs.com/package/vatts", target: "_blank", rel: "noopener noreferrer", style: brandStyle, onMouseEnter: (e) => e.currentTarget.style.opacity = '1', onMouseLeave: (e) => e.currentTarget.style.opacity = '0.4' },
|
|
238
|
-
react_1.default.createElement("img", { src: "https://raw.githubusercontent.com/mfrazlab/vatts.js/master/docs/public/logo.png", alt: "Vatts Logo", style: { width: 20, height: 20
|
|
244
|
+
react_1.default.createElement("img", { src: "https://raw.githubusercontent.com/mfrazlab/vatts.js/master/docs/public/logo.png", alt: "Vatts Logo", style: { width: 20, height: 20 } }),
|
|
239
245
|
react_1.default.createElement("span", { style: { fontSize: 13, fontWeight: 600, color: '#fff' } },
|
|
240
246
|
"Vatts",
|
|
241
|
-
react_1.default.createElement("span", { style: { color:
|
|
247
|
+
react_1.default.createElement("span", { style: { color: theme.cyan } }, ".js"))))));
|
|
242
248
|
}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
This file is part of the Vatts.js Project.
|
|
3
|
-
Copyright (c) 2026 mfraz
|
|
4
|
-
|
|
5
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
you may not use this file except in compliance with the License.
|
|
7
|
-
You may obtain a copy of the License at
|
|
8
|
-
|
|
9
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
|
|
11
|
-
Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
See the License for the specific language governing permissions and
|
|
15
|
-
limitations under the License.
|
|
16
|
-
-->
|
|
17
1
|
<script setup>
|
|
18
2
|
import { onMounted, ref } from 'vue';
|
|
19
3
|
|
|
@@ -24,15 +8,18 @@ try {
|
|
|
24
8
|
} catch (e) {}
|
|
25
9
|
|
|
26
10
|
// CSS extraído para evitar que o Vue escape caracteres como '>' ou aspas
|
|
11
|
+
// ATUALIZADO: Paleta de cores alterada para Vue.js Green
|
|
27
12
|
const cssStyles = `
|
|
28
13
|
:root {
|
|
29
14
|
--bg-solid: #000000;
|
|
30
15
|
--card-bg: #0a0a0a;
|
|
31
|
-
/* PALETA:
|
|
16
|
+
/* PALETA: Vue.js Theme */
|
|
17
|
+
--vue-green: #42b883; /* O verde principal do Vue */
|
|
18
|
+
--vue-dark: #35495e; /* O azul escuro secundário do Vue (para substituir cinzas escuros) */
|
|
32
19
|
--primary: #ffffff;
|
|
33
|
-
--primary-glow: rgba(255, 255, 255, 0.1);
|
|
34
20
|
--text-main: #ffffff;
|
|
35
|
-
|
|
21
|
+
/* Mudei o texto mudo de cinza para um tom mais claro do verde */
|
|
22
|
+
--text-muted: #a7c4bc;
|
|
36
23
|
}
|
|
37
24
|
|
|
38
25
|
body {
|
|
@@ -65,8 +52,8 @@ const cssStyles = `
|
|
|
65
52
|
width: 100%;
|
|
66
53
|
max-width: 420px;
|
|
67
54
|
background: var(--card-bg);
|
|
68
|
-
/* Borda sutil
|
|
69
|
-
box-shadow: 0 0 0 1px rgba(
|
|
55
|
+
/* Borda sutil, mudei o brilho para verde */
|
|
56
|
+
box-shadow: 0 0 0 1px rgba(66, 184, 131, 0.1), 0 40px 80px -20px rgba(0, 0, 0, 0.9);
|
|
70
57
|
border-radius: 20px;
|
|
71
58
|
overflow: hidden;
|
|
72
59
|
display: flex;
|
|
@@ -78,9 +65,9 @@ const cssStyles = `
|
|
|
78
65
|
.neon-line {
|
|
79
66
|
height: 1px;
|
|
80
67
|
width: 100%;
|
|
81
|
-
/* Linha de luz
|
|
82
|
-
background: linear-gradient(90deg, transparent,
|
|
83
|
-
box-shadow: 0 0 15px rgba(
|
|
68
|
+
/* Linha de luz: Mudei do gradiente cinza/branco para o verde Vue */
|
|
69
|
+
background: linear-gradient(90deg, transparent, var(--vue-dark), var(--vue-green), var(--vue-dark), transparent);
|
|
70
|
+
box-shadow: 0 0 15px rgba(66, 184, 131, 0.2);
|
|
84
71
|
}
|
|
85
72
|
|
|
86
73
|
.content {
|
|
@@ -103,8 +90,8 @@ const cssStyles = `
|
|
|
103
90
|
object-fit: contain;
|
|
104
91
|
position: relative;
|
|
105
92
|
z-index: 2;
|
|
106
|
-
/*
|
|
107
|
-
filter:
|
|
93
|
+
/* Removi o filtro grayscale para a logo do Vue brilhar na cor original */
|
|
94
|
+
filter: none;
|
|
108
95
|
}
|
|
109
96
|
|
|
110
97
|
.logo-glow {
|
|
@@ -114,9 +101,10 @@ const cssStyles = `
|
|
|
114
101
|
transform: translate(-50%, -50%);
|
|
115
102
|
width: 100%;
|
|
116
103
|
height: 100%;
|
|
117
|
-
|
|
104
|
+
/* Mudei o brilho de fundo de branco para Verde Vue */
|
|
105
|
+
background: var(--vue-green);
|
|
118
106
|
filter: blur(25px);
|
|
119
|
-
opacity: 0.
|
|
107
|
+
opacity: 0.2; /* Aumentei um pouco a opacidade para destacar o verde */
|
|
120
108
|
border-radius: 50%;
|
|
121
109
|
animation: pulse 2s ease-in-out infinite;
|
|
122
110
|
}
|
|
@@ -126,14 +114,16 @@ const cssStyles = `
|
|
|
126
114
|
font-size: 2rem;
|
|
127
115
|
font-weight: 800;
|
|
128
116
|
letter-spacing: -0.03em;
|
|
129
|
-
|
|
117
|
+
/* Gradiente do texto: De branco para Verde Vue */
|
|
118
|
+
background: linear-gradient(180deg, #ffffff 0%, var(--vue-green) 100%);
|
|
130
119
|
-webkit-background-clip: text;
|
|
131
120
|
-webkit-text-fill-color: transparent;
|
|
132
121
|
}
|
|
133
122
|
|
|
134
123
|
h1 span {
|
|
135
|
-
|
|
136
|
-
|
|
124
|
+
/* O ".js" agora é verde sólido */
|
|
125
|
+
color: var(--vue-green);
|
|
126
|
+
-webkit-text-fill-color: var(--vue-green);
|
|
137
127
|
}
|
|
138
128
|
|
|
139
129
|
p {
|
|
@@ -145,14 +135,15 @@ const cssStyles = `
|
|
|
145
135
|
|
|
146
136
|
.terminal-box {
|
|
147
137
|
width: 100%;
|
|
148
|
-
background: rgba(
|
|
149
|
-
border: 1px solid rgba(
|
|
138
|
+
background: rgba(66, 184, 131, 0.03); /* Fundo sutilmente verde */
|
|
139
|
+
border: 1px solid rgba(66, 184, 131, 0.1); /* Borda verde sutil */
|
|
150
140
|
border-radius: 12px;
|
|
151
141
|
padding: 16px;
|
|
152
142
|
text-align: left;
|
|
153
143
|
font-family: 'JetBrains Mono', monospace;
|
|
154
144
|
font-size: 0.75rem;
|
|
155
|
-
|
|
145
|
+
/* Cor do texto base do terminal alterada de cinza para um tom claro */
|
|
146
|
+
color: var(--text-muted);
|
|
156
147
|
box-sizing: border-box;
|
|
157
148
|
display: flex;
|
|
158
149
|
flex-direction: column;
|
|
@@ -168,25 +159,31 @@ const cssStyles = `
|
|
|
168
159
|
.term-spinner {
|
|
169
160
|
width: 10px;
|
|
170
161
|
height: 10px;
|
|
171
|
-
border: 2px solid rgba(
|
|
172
|
-
border-top-color:
|
|
162
|
+
border: 2px solid rgba(66, 184, 131, 0.1); /* Borda inativa verde clara */
|
|
163
|
+
border-top-color: var(--vue-green); /* Spinner ativo verde vibrante */
|
|
173
164
|
border-radius: 50%;
|
|
174
165
|
animation: spin 0.6s linear infinite;
|
|
175
166
|
}
|
|
176
167
|
|
|
177
|
-
.file-name {
|
|
178
|
-
|
|
168
|
+
.file-name {
|
|
169
|
+
/* Nomes de arquivo agora num tom azulado/esverdeado claro */
|
|
170
|
+
color: #8fa3b3;
|
|
171
|
+
}
|
|
172
|
+
.accent {
|
|
173
|
+
/* O destaque "src/vatts.ts" agora é Verde Vue */
|
|
174
|
+
color: var(--vue-green);
|
|
175
|
+
}
|
|
179
176
|
|
|
180
177
|
.card-footer {
|
|
181
178
|
width: 100%;
|
|
182
179
|
padding: 12px 32px;
|
|
183
|
-
background: rgba(
|
|
184
|
-
border-top: 1px solid rgba(
|
|
180
|
+
background: rgba(66, 184, 131, 0.03); /* Fundo sutil verde */
|
|
181
|
+
border-top: 1px solid rgba(66, 184, 131, 0.05); /* Borda sutil verde */
|
|
185
182
|
display: flex;
|
|
186
183
|
justify-content: space-between;
|
|
187
184
|
align-items: center;
|
|
188
185
|
font-size: 11px;
|
|
189
|
-
color: rgba(255,255,255,0.
|
|
186
|
+
color: rgba(255,255,255,0.4);
|
|
190
187
|
box-sizing: border-box;
|
|
191
188
|
}
|
|
192
189
|
|
|
@@ -194,7 +191,8 @@ const cssStyles = `
|
|
|
194
191
|
display: flex;
|
|
195
192
|
align-items: center;
|
|
196
193
|
gap: 6px;
|
|
197
|
-
|
|
194
|
+
/* Texto de status e versão agora em Verde Vue */
|
|
195
|
+
color: var(--vue-green);
|
|
198
196
|
font-weight: 600;
|
|
199
197
|
text-transform: uppercase;
|
|
200
198
|
letter-spacing: 0.05em;
|
|
@@ -203,14 +201,15 @@ const cssStyles = `
|
|
|
203
201
|
.dot {
|
|
204
202
|
width: 6px;
|
|
205
203
|
height: 6px;
|
|
206
|
-
|
|
204
|
+
/* O ponto de status agora é Verde Vue com brilho verde */
|
|
205
|
+
background-color: var(--vue-green);
|
|
207
206
|
border-radius: 50%;
|
|
208
|
-
box-shadow: 0 0 8px
|
|
207
|
+
box-shadow: 0 0 8px var(--vue-green);
|
|
209
208
|
}
|
|
210
209
|
|
|
211
210
|
@keyframes pulse {
|
|
212
|
-
0%, 100% { opacity: 0.
|
|
213
|
-
50% { opacity: 0.
|
|
211
|
+
0%, 100% { opacity: 0.15; transform: translate(-50%, -50%) scale(1); }
|
|
212
|
+
50% { opacity: 0.25; transform: translate(-50%, -50%) scale(1.1); }
|
|
214
213
|
}
|
|
215
214
|
|
|
216
215
|
@keyframes spin {
|
|
@@ -236,15 +235,10 @@ const clientReloadScript = `
|
|
|
236
235
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
237
236
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
238
237
|
|
|
239
|
-
<!-- v-html garante que o CSS seja renderizado sem escape (ex: '>' permanece '>') -->
|
|
240
238
|
<style v-html="cssStyles"></style>
|
|
241
239
|
</head>
|
|
242
240
|
<body>
|
|
243
241
|
<div class="building-screen-body">
|
|
244
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
245
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
246
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
247
|
-
|
|
248
242
|
<div class="container">
|
|
249
243
|
<div class="build-card">
|
|
250
244
|
<div class="neon-line"></div>
|
|
@@ -264,7 +258,7 @@ const clientReloadScript = `
|
|
|
264
258
|
<span class="file-name">Compiling <span class="accent">src/vatts.ts</span>...</span>
|
|
265
259
|
</div>
|
|
266
260
|
<div class="term-line" style="opacity: 0.5">
|
|
267
|
-
<span>✓</span>
|
|
261
|
+
<span style="color: var(--vue-green)">✓</span>
|
|
268
262
|
<span class="file-name">Optimizing assets</span>
|
|
269
263
|
</div>
|
|
270
264
|
</div>
|
|
@@ -281,7 +275,6 @@ const clientReloadScript = `
|
|
|
281
275
|
</div>
|
|
282
276
|
</div>
|
|
283
277
|
|
|
284
|
-
<!-- v-html para o script garante que a arrow function não quebre com '>' -->
|
|
285
278
|
<script v-html="clientReloadScript"></script>
|
|
286
279
|
</body>
|
|
287
280
|
</html>
|
|
@@ -32,7 +32,6 @@ const reload = () => {
|
|
|
32
32
|
|
|
33
33
|
<template>
|
|
34
34
|
<div class="error-page-wrapper">
|
|
35
|
-
<!-- Fonts -->
|
|
36
35
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
37
36
|
|
|
38
37
|
<div class="container">
|
|
@@ -103,11 +102,13 @@ const reload = () => {
|
|
|
103
102
|
box-sizing: border-box;
|
|
104
103
|
}
|
|
105
104
|
|
|
106
|
-
/*
|
|
107
|
-
Os estilos globais foram movidos para .container para não afetar o resto do site.
|
|
108
|
-
*/
|
|
109
|
-
|
|
105
|
+
/* Variáveis CSS locais para facilitar manutenção das cores Vue */
|
|
110
106
|
.container {
|
|
107
|
+
--vue-green: #42b883;
|
|
108
|
+
--vue-dark: #35495e;
|
|
109
|
+
--bg-color: #000000;
|
|
110
|
+
--card-bg: #0a0a0a;
|
|
111
|
+
|
|
111
112
|
position: fixed;
|
|
112
113
|
top: 0;
|
|
113
114
|
left: 0;
|
|
@@ -120,8 +121,7 @@ const reload = () => {
|
|
|
120
121
|
justify-content: center;
|
|
121
122
|
width: 100vw;
|
|
122
123
|
height: 100vh;
|
|
123
|
-
|
|
124
|
-
background: #000000;
|
|
124
|
+
background: var(--bg-color);
|
|
125
125
|
color: #ffffff;
|
|
126
126
|
overflow: hidden;
|
|
127
127
|
margin: 0;
|
|
@@ -132,8 +132,9 @@ const reload = () => {
|
|
|
132
132
|
width: min(90%, 500px);
|
|
133
133
|
display: flex;
|
|
134
134
|
flex-direction: column;
|
|
135
|
-
background:
|
|
136
|
-
|
|
135
|
+
background: var(--card-bg);
|
|
136
|
+
/* Sombra com leve toque de verde */
|
|
137
|
+
box-shadow: 0 0 0 1px rgba(66, 184, 131, 0.1), 0 40px 80px -20px rgba(0, 0, 0, 0.9);
|
|
137
138
|
border-radius: 20px;
|
|
138
139
|
overflow: hidden;
|
|
139
140
|
position: relative;
|
|
@@ -142,8 +143,9 @@ const reload = () => {
|
|
|
142
143
|
.neon-line {
|
|
143
144
|
height: 1px;
|
|
144
145
|
width: 100%;
|
|
145
|
-
|
|
146
|
-
|
|
146
|
+
/* Gradiente Verde Vue */
|
|
147
|
+
background: linear-gradient(90deg, transparent, var(--vue-dark), var(--vue-green), var(--vue-dark), transparent);
|
|
148
|
+
box-shadow: 0 0 15px rgba(66, 184, 131, 0.2);
|
|
147
149
|
}
|
|
148
150
|
|
|
149
151
|
.content {
|
|
@@ -160,26 +162,29 @@ const reload = () => {
|
|
|
160
162
|
line-height: 1;
|
|
161
163
|
letter-spacing: -0.04em;
|
|
162
164
|
color: #fff;
|
|
163
|
-
|
|
165
|
+
/* Gradiente Texto: Branco para Verde */
|
|
166
|
+
background: linear-gradient(180deg, #ffffff 0%, var(--vue-green) 100%);
|
|
164
167
|
-webkit-background-clip: text;
|
|
165
168
|
-webkit-text-fill-color: transparent;
|
|
166
169
|
/* Fallback */
|
|
167
|
-
color:
|
|
170
|
+
color: var(--vue-green);
|
|
168
171
|
margin-bottom: 16px;
|
|
169
|
-
filter: drop-shadow(0 0 20px rgba(
|
|
172
|
+
filter: drop-shadow(0 0 20px rgba(66, 184, 131, 0.1));
|
|
170
173
|
}
|
|
171
174
|
|
|
172
175
|
.terminal-box {
|
|
173
176
|
width: 100%;
|
|
174
|
-
|
|
177
|
+
/* Fundo esverdeado muito sutil */
|
|
178
|
+
background: rgba(66, 184, 131, 0.03);
|
|
175
179
|
border-radius: 12px;
|
|
176
180
|
padding: 16px;
|
|
177
181
|
margin-bottom: 24px;
|
|
178
|
-
|
|
182
|
+
/* Borda verde sutil */
|
|
183
|
+
border: 1px solid rgba(66, 184, 131, 0.1);
|
|
179
184
|
font-family: "JetBrains Mono", monospace;
|
|
180
185
|
font-size: 12px;
|
|
181
186
|
text-align: left;
|
|
182
|
-
color: #
|
|
187
|
+
color: #a7c4bc; /* Texto terminal mais claro */
|
|
183
188
|
box-sizing: border-box;
|
|
184
189
|
}
|
|
185
190
|
|
|
@@ -198,7 +203,7 @@ const reload = () => {
|
|
|
198
203
|
}
|
|
199
204
|
|
|
200
205
|
.method {
|
|
201
|
-
color:
|
|
206
|
+
color: var(--vue-green); /* GET em verde */
|
|
202
207
|
margin-right: 4px;
|
|
203
208
|
}
|
|
204
209
|
|
|
@@ -208,7 +213,7 @@ const reload = () => {
|
|
|
208
213
|
|
|
209
214
|
.error-msg {
|
|
210
215
|
margin-top: 4px;
|
|
211
|
-
color: #
|
|
216
|
+
color: #5f7e76; /* Verde acinzentado escuro */
|
|
212
217
|
}
|
|
213
218
|
|
|
214
219
|
.actions {
|
|
@@ -236,31 +241,32 @@ const reload = () => {
|
|
|
236
241
|
}
|
|
237
242
|
|
|
238
243
|
.btn-primary {
|
|
239
|
-
|
|
244
|
+
/* Botão principal Verde Vue */
|
|
245
|
+
background: var(--vue-green);
|
|
240
246
|
color: #000000;
|
|
241
247
|
}
|
|
242
248
|
|
|
243
249
|
.btn-primary:hover {
|
|
244
250
|
background: #ffffff;
|
|
245
|
-
box-shadow: 0 0 20px rgba(
|
|
251
|
+
box-shadow: 0 0 20px rgba(66, 184, 131, 0.4);
|
|
246
252
|
}
|
|
247
253
|
|
|
248
254
|
.btn-secondary {
|
|
249
255
|
background: transparent;
|
|
250
256
|
color: rgba(255, 255, 255, 0.6);
|
|
251
|
-
border: 1px solid rgba(
|
|
257
|
+
border: 1px solid rgba(66, 184, 131, 0.2);
|
|
252
258
|
}
|
|
253
259
|
|
|
254
260
|
.btn-secondary:hover {
|
|
255
|
-
background: rgba(
|
|
261
|
+
background: rgba(66, 184, 131, 0.1);
|
|
256
262
|
color: #fff;
|
|
257
|
-
border-color:
|
|
263
|
+
border-color: var(--vue-green);
|
|
258
264
|
}
|
|
259
265
|
|
|
260
266
|
.footer {
|
|
261
267
|
padding: 12px 32px;
|
|
262
|
-
background: rgba(
|
|
263
|
-
border-top: 1px solid rgba(
|
|
268
|
+
background: rgba(66, 184, 131, 0.02);
|
|
269
|
+
border-top: 1px solid rgba(66, 184, 131, 0.05);
|
|
264
270
|
display: flex;
|
|
265
271
|
justify-content: space-between;
|
|
266
272
|
align-items: center;
|
|
@@ -279,11 +285,13 @@ const reload = () => {
|
|
|
279
285
|
width: 6px;
|
|
280
286
|
height: 6px;
|
|
281
287
|
border-radius: 50%;
|
|
282
|
-
|
|
288
|
+
/* Ponto de status Verde */
|
|
289
|
+
background: var(--vue-green);
|
|
290
|
+
box-shadow: 0 0 6px var(--vue-green);
|
|
283
291
|
}
|
|
284
292
|
|
|
285
293
|
.status-text {
|
|
286
|
-
color:
|
|
294
|
+
color: var(--vue-green);
|
|
287
295
|
}
|
|
288
296
|
|
|
289
297
|
.brand-link {
|
|
@@ -304,7 +312,8 @@ const reload = () => {
|
|
|
304
312
|
.brand-logo {
|
|
305
313
|
width: 20px;
|
|
306
314
|
height: 20px;
|
|
307
|
-
|
|
315
|
+
/* Removi o grayscale para a logo brilhar normal, se preferir monocromático com verde, pode ajustar */
|
|
316
|
+
filter: none;
|
|
308
317
|
}
|
|
309
318
|
|
|
310
319
|
.brand-text {
|
|
@@ -314,6 +323,7 @@ const reload = () => {
|
|
|
314
323
|
}
|
|
315
324
|
|
|
316
325
|
.brand-highlight {
|
|
317
|
-
|
|
326
|
+
/* .js em verde */
|
|
327
|
+
color: var(--vue-green);
|
|
318
328
|
}
|
|
319
329
|
</style>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vatts",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "Vatts.js is a high-level framework for building web applications with ease and speed. It provides a robust set of tools and features to streamline development and enhance productivity.",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"author": "mfraz",
|