vatts 1.2.1 → 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/LICENSE +1 -1
- package/README.md +11 -7
- package/dist/api/console.js +1 -1
- package/dist/api/framework.js +16 -0
- package/dist/bin/vatts.js +1 -1
- package/dist/builder.d.ts +0 -12
- package/dist/builder.js +79 -265
- package/dist/client/clientRouter.js +1 -1
- package/dist/client/rpc.js +1 -1
- package/dist/env/env.js +16 -0
- package/dist/global/global.d.ts +1 -1
- package/dist/helpers.js +1 -1
- package/dist/hotReload.js +3 -2
- package/dist/index.js +1 -1
- package/dist/loaders.js +1 -1
- package/dist/react/BuildingPage.js +52 -31
- package/dist/react/DefaultNotFound.js +39 -33
- package/dist/react/DevIndicator.js +16 -0
- package/dist/react/ErrorModal.js +1 -1
- package/dist/react/Link.js +1 -1
- package/dist/react/client.js +1 -1
- package/dist/react/entry.client.js +1 -1
- package/dist/react/image/Image.js +16 -0
- package/dist/react/react.build.d.ts +24 -0
- package/dist/react/react.build.js +95 -0
- package/dist/react/renderer-react.js +1 -1
- package/dist/router.js +1 -1
- package/dist/rpc/server.js +1 -1
- package/dist/rpc/types.js +1 -1
- package/dist/tsconfigPaths.js +1 -1
- package/dist/vue/App.vue +56 -44
- package/dist/vue/BuildingPage.vue +46 -37
- package/dist/vue/DefaultNotFound.vue +60 -38
- package/dist/vue/DevIndicator.vue +16 -0
- package/dist/vue/ErrorModal.vue +16 -0
- package/dist/vue/Link.vue +16 -0
- package/dist/vue/client.js +1 -1
- package/dist/vue/entry.client.js +13 -2
- package/dist/vue/image/Image.vue +1 -1
- package/dist/vue/vue.build.d.ts +24 -0
- package/dist/vue/vue.build.js +160 -0
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.render = render;
|
|
7
7
|
/*
|
|
8
8
|
* This file is part of the Vatts.js Project.
|
|
9
|
-
* Copyright (c) 2026
|
|
9
|
+
* Copyright (c) 2026 mfraz
|
|
10
10
|
*
|
|
11
11
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
12
|
* you may not use this file except in compliance with the License.
|
package/dist/router.js
CHANGED
|
@@ -19,7 +19,7 @@ exports.findMatchingWebSocketRoute = findMatchingWebSocketRoute;
|
|
|
19
19
|
exports.setupWebSocketUpgrade = setupWebSocketUpgrade;
|
|
20
20
|
/*
|
|
21
21
|
* This file is part of the Vatts.js Project.
|
|
22
|
-
* Copyright (c) 2026
|
|
22
|
+
* Copyright (c) 2026 mfraz
|
|
23
23
|
*
|
|
24
24
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
25
25
|
* you may not use this file except in compliance with the License.
|
package/dist/rpc/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
3
|
* This file is part of the Vatts.js Project.
|
|
4
|
-
* Copyright (c) 2026
|
|
4
|
+
* Copyright (c) 2026 mfraz
|
|
5
5
|
*
|
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
* you may not use this file except in compliance with the License.
|
package/dist/rpc/types.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
3
|
* This file is part of the Vatts.js Project.
|
|
4
|
-
* Copyright (c) 2026
|
|
4
|
+
* Copyright (c) 2026 mfraz
|
|
5
5
|
*
|
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
* you may not use this file except in compliance with the License.
|
package/dist/tsconfigPaths.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
3
|
* This file is part of the Vatts.js Project.
|
|
4
|
-
* Copyright (c) 2026
|
|
4
|
+
* Copyright (c) 2026 mfraz
|
|
5
5
|
*
|
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
* you may not use this file except in compliance with the License.
|
package/dist/vue/App.vue
CHANGED
|
@@ -1,27 +1,47 @@
|
|
|
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
|
+
-->
|
|
1
17
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<!-- Se não tiver layout, renderiza o conteúdo direto -->
|
|
9
|
-
<component v-else :is="resolvedContent" v-bind="contentProps" :key="`page-${hmrTimestamp}`" />
|
|
10
|
-
|
|
11
|
-
<!-- Dev Tools / Indicadores -->
|
|
12
|
-
<DevIndicator
|
|
13
|
-
v-if="isDev"
|
|
14
|
-
:has-build-error="!!buildError"
|
|
15
|
-
@click-build-error="isErrorOpen = true"
|
|
18
|
+
<component :is="resolvedLayout" v-if="resolvedLayout">
|
|
19
|
+
<component
|
|
20
|
+
:is="resolvedContent"
|
|
21
|
+
v-bind="contentProps"
|
|
22
|
+
:key="`page-${hmrTimestamp}-${currentPathKey}`"
|
|
16
23
|
/>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
</component>
|
|
25
|
+
|
|
26
|
+
<component
|
|
27
|
+
v-else
|
|
28
|
+
:is="resolvedContent"
|
|
29
|
+
v-bind="contentProps"
|
|
30
|
+
:key="`page-${hmrTimestamp}-${currentPathKey}`"
|
|
31
|
+
/>
|
|
32
|
+
|
|
33
|
+
<DevIndicator
|
|
34
|
+
v-if="isDev"
|
|
35
|
+
:has-build-error="!!buildError"
|
|
36
|
+
@click-build-error="isErrorOpen = true"
|
|
37
|
+
/>
|
|
38
|
+
|
|
39
|
+
<ErrorModal
|
|
40
|
+
:error="buildError"
|
|
41
|
+
:is-open="isErrorOpen"
|
|
42
|
+
@close="isErrorOpen = false"
|
|
43
|
+
@copy="copyBuildError"
|
|
44
|
+
/>
|
|
25
45
|
</template>
|
|
26
46
|
|
|
27
47
|
<script setup>
|
|
@@ -35,13 +55,14 @@ const props = defineProps({
|
|
|
35
55
|
componentMap: Object,
|
|
36
56
|
routes: Array,
|
|
37
57
|
initialComponentPath: String,
|
|
38
|
-
initialParams: null,
|
|
39
|
-
layoutComponent: null
|
|
58
|
+
initialParams: null,
|
|
59
|
+
layoutComponent: null
|
|
40
60
|
});
|
|
41
61
|
|
|
42
62
|
// --- Estado ---
|
|
43
63
|
const hmrTimestamp = ref(Date.now());
|
|
44
|
-
|
|
64
|
+
const currentPathKey = ref(window.location.pathname); // Mantendo a correção da rota anterior
|
|
65
|
+
|
|
45
66
|
const buildError = ref(window.__VATTS_BUILD_ERROR__ || null);
|
|
46
67
|
const isErrorOpen = ref(!!window.__VATTS_BUILD_ERROR__);
|
|
47
68
|
const isDev = process.env.NODE_ENV !== 'production';
|
|
@@ -96,10 +117,14 @@ const params = ref({});
|
|
|
96
117
|
|
|
97
118
|
const updateRoute = () => {
|
|
98
119
|
const currentPath = window.location.pathname.replace("index.html", '');
|
|
99
|
-
const match = findRouteForPath(currentPath);
|
|
100
120
|
|
|
121
|
+
// Atualiza a chave para garantir re-render na mesma rota com params diferentes
|
|
122
|
+
currentPathKey.value = currentPath;
|
|
123
|
+
|
|
124
|
+
const match = findRouteForPath(currentPath);
|
|
101
125
|
if (match) {
|
|
102
126
|
CurrentPageComponent.value = props.componentMap[match.componentPath];
|
|
127
|
+
console.log(props.componentMap[match.componentPath] || 'null')
|
|
103
128
|
params.value = match.params;
|
|
104
129
|
|
|
105
130
|
if (match.metadata?.title != null) {
|
|
@@ -111,14 +136,14 @@ const updateRoute = () => {
|
|
|
111
136
|
}
|
|
112
137
|
};
|
|
113
138
|
|
|
114
|
-
// --- Computed
|
|
139
|
+
// --- Computed ---
|
|
115
140
|
const resolvedContent = computed(() => {
|
|
116
141
|
if (!CurrentPageComponent.value || props.initialComponentPath === '__404__') {
|
|
117
142
|
const NotFoundComponent = window.__VATTS_NOT_FOUND__;
|
|
118
143
|
if (NotFoundComponent) return NotFoundComponent;
|
|
119
144
|
|
|
120
145
|
const DefaultNotFound = window.__VATTS_DEFAULT_NOT_FOUND__;
|
|
121
|
-
return DefaultNotFound || 'div';
|
|
146
|
+
return DefaultNotFound || 'div';
|
|
122
147
|
}
|
|
123
148
|
return CurrentPageComponent.value;
|
|
124
149
|
});
|
|
@@ -132,43 +157,30 @@ const resolvedLayout = computed(() => {
|
|
|
132
157
|
return props.layoutComponent || null;
|
|
133
158
|
});
|
|
134
159
|
|
|
135
|
-
// --- Lifecycle
|
|
160
|
+
// --- Lifecycle ---
|
|
136
161
|
onMounted(() => {
|
|
137
|
-
// Inicializa rota
|
|
138
162
|
updateRoute();
|
|
139
163
|
|
|
140
|
-
// Listeners de Build
|
|
141
164
|
window.addEventListener('vatts:build-error', handleBuildError);
|
|
142
165
|
window.addEventListener('vatts:build-ok', handleBuildOk);
|
|
143
|
-
|
|
144
|
-
// Listeners de Rota
|
|
145
166
|
window.addEventListener('popstate', updateRoute);
|
|
167
|
+
|
|
146
168
|
const unsubscribeRouter = router.subscribe(updateRoute);
|
|
147
169
|
|
|
148
|
-
// HMR Listener
|
|
149
170
|
window.__HWEB_HMR__ = true;
|
|
150
171
|
const handleHMRUpdate = (event) => {
|
|
151
172
|
const { file, timestamp } = event.detail;
|
|
152
|
-
const fileName = file ? file.split('/').pop()?.split('\\').pop() : 'unknown';
|
|
153
|
-
console.log('🔥 HMR: Component Update Triggered', fileName);
|
|
154
|
-
|
|
155
173
|
try {
|
|
156
174
|
hmrTimestamp.value = timestamp;
|
|
157
175
|
window.__HMR_SUCCESS__ = true;
|
|
158
|
-
setTimeout(() => {
|
|
159
|
-
window.__HMR_SUCCESS__ = false;
|
|
160
|
-
}, 3000);
|
|
161
|
-
|
|
162
|
-
// Força update da rota caso o componente tenha mudado
|
|
176
|
+
setTimeout(() => { window.__HMR_SUCCESS__ = false; }, 3000);
|
|
163
177
|
updateRoute();
|
|
164
178
|
} catch (error) {
|
|
165
179
|
console.error('❌ HMR Error:', error);
|
|
166
|
-
window.__HMR_SUCCESS__ = false;
|
|
167
180
|
}
|
|
168
181
|
};
|
|
169
182
|
window.addEventListener('hmr:component-update', handleHMRUpdate);
|
|
170
183
|
|
|
171
|
-
// Cleanup
|
|
172
184
|
onUnmounted(() => {
|
|
173
185
|
window.removeEventListener('vatts:build-error', handleBuildError);
|
|
174
186
|
window.removeEventListener('vatts:build-ok', handleBuildOk);
|
|
@@ -8,15 +8,18 @@ try {
|
|
|
8
8
|
} catch (e) {}
|
|
9
9
|
|
|
10
10
|
// CSS extraído para evitar que o Vue escape caracteres como '>' ou aspas
|
|
11
|
+
// ATUALIZADO: Paleta de cores alterada para Vue.js Green
|
|
11
12
|
const cssStyles = `
|
|
12
13
|
:root {
|
|
13
14
|
--bg-solid: #000000;
|
|
14
15
|
--card-bg: #0a0a0a;
|
|
15
|
-
/* 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) */
|
|
16
19
|
--primary: #ffffff;
|
|
17
|
-
--primary-glow: rgba(255, 255, 255, 0.1);
|
|
18
20
|
--text-main: #ffffff;
|
|
19
|
-
|
|
21
|
+
/* Mudei o texto mudo de cinza para um tom mais claro do verde */
|
|
22
|
+
--text-muted: #a7c4bc;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
body {
|
|
@@ -49,8 +52,8 @@ const cssStyles = `
|
|
|
49
52
|
width: 100%;
|
|
50
53
|
max-width: 420px;
|
|
51
54
|
background: var(--card-bg);
|
|
52
|
-
/* Borda sutil
|
|
53
|
-
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);
|
|
54
57
|
border-radius: 20px;
|
|
55
58
|
overflow: hidden;
|
|
56
59
|
display: flex;
|
|
@@ -62,9 +65,9 @@ const cssStyles = `
|
|
|
62
65
|
.neon-line {
|
|
63
66
|
height: 1px;
|
|
64
67
|
width: 100%;
|
|
65
|
-
/* Linha de luz
|
|
66
|
-
background: linear-gradient(90deg, transparent,
|
|
67
|
-
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);
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
.content {
|
|
@@ -87,8 +90,8 @@ const cssStyles = `
|
|
|
87
90
|
object-fit: contain;
|
|
88
91
|
position: relative;
|
|
89
92
|
z-index: 2;
|
|
90
|
-
/*
|
|
91
|
-
filter:
|
|
93
|
+
/* Removi o filtro grayscale para a logo do Vue brilhar na cor original */
|
|
94
|
+
filter: none;
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
.logo-glow {
|
|
@@ -98,9 +101,10 @@ const cssStyles = `
|
|
|
98
101
|
transform: translate(-50%, -50%);
|
|
99
102
|
width: 100%;
|
|
100
103
|
height: 100%;
|
|
101
|
-
|
|
104
|
+
/* Mudei o brilho de fundo de branco para Verde Vue */
|
|
105
|
+
background: var(--vue-green);
|
|
102
106
|
filter: blur(25px);
|
|
103
|
-
opacity: 0.
|
|
107
|
+
opacity: 0.2; /* Aumentei um pouco a opacidade para destacar o verde */
|
|
104
108
|
border-radius: 50%;
|
|
105
109
|
animation: pulse 2s ease-in-out infinite;
|
|
106
110
|
}
|
|
@@ -110,14 +114,16 @@ const cssStyles = `
|
|
|
110
114
|
font-size: 2rem;
|
|
111
115
|
font-weight: 800;
|
|
112
116
|
letter-spacing: -0.03em;
|
|
113
|
-
|
|
117
|
+
/* Gradiente do texto: De branco para Verde Vue */
|
|
118
|
+
background: linear-gradient(180deg, #ffffff 0%, var(--vue-green) 100%);
|
|
114
119
|
-webkit-background-clip: text;
|
|
115
120
|
-webkit-text-fill-color: transparent;
|
|
116
121
|
}
|
|
117
122
|
|
|
118
123
|
h1 span {
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
/* O ".js" agora é verde sólido */
|
|
125
|
+
color: var(--vue-green);
|
|
126
|
+
-webkit-text-fill-color: var(--vue-green);
|
|
121
127
|
}
|
|
122
128
|
|
|
123
129
|
p {
|
|
@@ -129,14 +135,15 @@ const cssStyles = `
|
|
|
129
135
|
|
|
130
136
|
.terminal-box {
|
|
131
137
|
width: 100%;
|
|
132
|
-
background: rgba(
|
|
133
|
-
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 */
|
|
134
140
|
border-radius: 12px;
|
|
135
141
|
padding: 16px;
|
|
136
142
|
text-align: left;
|
|
137
143
|
font-family: 'JetBrains Mono', monospace;
|
|
138
144
|
font-size: 0.75rem;
|
|
139
|
-
|
|
145
|
+
/* Cor do texto base do terminal alterada de cinza para um tom claro */
|
|
146
|
+
color: var(--text-muted);
|
|
140
147
|
box-sizing: border-box;
|
|
141
148
|
display: flex;
|
|
142
149
|
flex-direction: column;
|
|
@@ -152,25 +159,31 @@ const cssStyles = `
|
|
|
152
159
|
.term-spinner {
|
|
153
160
|
width: 10px;
|
|
154
161
|
height: 10px;
|
|
155
|
-
border: 2px solid rgba(
|
|
156
|
-
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 */
|
|
157
164
|
border-radius: 50%;
|
|
158
165
|
animation: spin 0.6s linear infinite;
|
|
159
166
|
}
|
|
160
167
|
|
|
161
|
-
.file-name {
|
|
162
|
-
|
|
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
|
+
}
|
|
163
176
|
|
|
164
177
|
.card-footer {
|
|
165
178
|
width: 100%;
|
|
166
179
|
padding: 12px 32px;
|
|
167
|
-
background: rgba(
|
|
168
|
-
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 */
|
|
169
182
|
display: flex;
|
|
170
183
|
justify-content: space-between;
|
|
171
184
|
align-items: center;
|
|
172
185
|
font-size: 11px;
|
|
173
|
-
color: rgba(255,255,255,0.
|
|
186
|
+
color: rgba(255,255,255,0.4);
|
|
174
187
|
box-sizing: border-box;
|
|
175
188
|
}
|
|
176
189
|
|
|
@@ -178,7 +191,8 @@ const cssStyles = `
|
|
|
178
191
|
display: flex;
|
|
179
192
|
align-items: center;
|
|
180
193
|
gap: 6px;
|
|
181
|
-
|
|
194
|
+
/* Texto de status e versão agora em Verde Vue */
|
|
195
|
+
color: var(--vue-green);
|
|
182
196
|
font-weight: 600;
|
|
183
197
|
text-transform: uppercase;
|
|
184
198
|
letter-spacing: 0.05em;
|
|
@@ -187,14 +201,15 @@ const cssStyles = `
|
|
|
187
201
|
.dot {
|
|
188
202
|
width: 6px;
|
|
189
203
|
height: 6px;
|
|
190
|
-
|
|
204
|
+
/* O ponto de status agora é Verde Vue com brilho verde */
|
|
205
|
+
background-color: var(--vue-green);
|
|
191
206
|
border-radius: 50%;
|
|
192
|
-
box-shadow: 0 0 8px
|
|
207
|
+
box-shadow: 0 0 8px var(--vue-green);
|
|
193
208
|
}
|
|
194
209
|
|
|
195
210
|
@keyframes pulse {
|
|
196
|
-
0%, 100% { opacity: 0.
|
|
197
|
-
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); }
|
|
198
213
|
}
|
|
199
214
|
|
|
200
215
|
@keyframes spin {
|
|
@@ -220,15 +235,10 @@ const clientReloadScript = `
|
|
|
220
235
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
221
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" />
|
|
222
237
|
|
|
223
|
-
<!-- v-html garante que o CSS seja renderizado sem escape (ex: '>' permanece '>') -->
|
|
224
238
|
<style v-html="cssStyles"></style>
|
|
225
239
|
</head>
|
|
226
240
|
<body>
|
|
227
241
|
<div class="building-screen-body">
|
|
228
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
229
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
230
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
231
|
-
|
|
232
242
|
<div class="container">
|
|
233
243
|
<div class="build-card">
|
|
234
244
|
<div class="neon-line"></div>
|
|
@@ -248,7 +258,7 @@ const clientReloadScript = `
|
|
|
248
258
|
<span class="file-name">Compiling <span class="accent">src/vatts.ts</span>...</span>
|
|
249
259
|
</div>
|
|
250
260
|
<div class="term-line" style="opacity: 0.5">
|
|
251
|
-
<span>✓</span>
|
|
261
|
+
<span style="color: var(--vue-green)">✓</span>
|
|
252
262
|
<span class="file-name">Optimizing assets</span>
|
|
253
263
|
</div>
|
|
254
264
|
</div>
|
|
@@ -265,7 +275,6 @@ const clientReloadScript = `
|
|
|
265
275
|
</div>
|
|
266
276
|
</div>
|
|
267
277
|
|
|
268
|
-
<!-- v-html para o script garante que a arrow function não quebre com '>' -->
|
|
269
278
|
<script v-html="clientReloadScript"></script>
|
|
270
279
|
</body>
|
|
271
280
|
</html>
|
|
@@ -1,3 +1,19 @@
|
|
|
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
|
+
-->
|
|
1
17
|
<script setup>
|
|
2
18
|
import { ref, onMounted } from 'vue';
|
|
3
19
|
|
|
@@ -16,7 +32,6 @@ const reload = () => {
|
|
|
16
32
|
|
|
17
33
|
<template>
|
|
18
34
|
<div class="error-page-wrapper">
|
|
19
|
-
<!-- Fonts -->
|
|
20
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" />
|
|
21
36
|
|
|
22
37
|
<div class="container">
|
|
@@ -87,20 +102,13 @@ const reload = () => {
|
|
|
87
102
|
box-sizing: border-box;
|
|
88
103
|
}
|
|
89
104
|
|
|
90
|
-
/*
|
|
91
|
-
Para garantir o fundo preto total, usamos :global(body) ou aplicamos ao container fixo.
|
|
92
|
-
*/
|
|
93
|
-
:global(body) {
|
|
94
|
-
margin: 0;
|
|
95
|
-
padding: 0;
|
|
96
|
-
background-color: #000000;
|
|
97
|
-
color: #ffffff;
|
|
98
|
-
overflow: hidden;
|
|
99
|
-
height: 100vh;
|
|
100
|
-
width: 100vw;
|
|
101
|
-
}
|
|
102
|
-
|
|
105
|
+
/* Variáveis CSS locais para facilitar manutenção das cores Vue */
|
|
103
106
|
.container {
|
|
107
|
+
--vue-green: #42b883;
|
|
108
|
+
--vue-dark: #35495e;
|
|
109
|
+
--bg-color: #000000;
|
|
110
|
+
--card-bg: #0a0a0a;
|
|
111
|
+
|
|
104
112
|
position: fixed;
|
|
105
113
|
top: 0;
|
|
106
114
|
left: 0;
|
|
@@ -113,15 +121,20 @@ const reload = () => {
|
|
|
113
121
|
justify-content: center;
|
|
114
122
|
width: 100vw;
|
|
115
123
|
height: 100vh;
|
|
116
|
-
background:
|
|
124
|
+
background: var(--bg-color);
|
|
125
|
+
color: #ffffff;
|
|
126
|
+
overflow: hidden;
|
|
127
|
+
margin: 0;
|
|
128
|
+
padding: 0;
|
|
117
129
|
}
|
|
118
130
|
|
|
119
131
|
.card {
|
|
120
132
|
width: min(90%, 500px);
|
|
121
133
|
display: flex;
|
|
122
134
|
flex-direction: column;
|
|
123
|
-
background:
|
|
124
|
-
|
|
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);
|
|
125
138
|
border-radius: 20px;
|
|
126
139
|
overflow: hidden;
|
|
127
140
|
position: relative;
|
|
@@ -130,8 +143,9 @@ const reload = () => {
|
|
|
130
143
|
.neon-line {
|
|
131
144
|
height: 1px;
|
|
132
145
|
width: 100%;
|
|
133
|
-
|
|
134
|
-
|
|
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);
|
|
135
149
|
}
|
|
136
150
|
|
|
137
151
|
.content {
|
|
@@ -148,26 +162,29 @@ const reload = () => {
|
|
|
148
162
|
line-height: 1;
|
|
149
163
|
letter-spacing: -0.04em;
|
|
150
164
|
color: #fff;
|
|
151
|
-
|
|
165
|
+
/* Gradiente Texto: Branco para Verde */
|
|
166
|
+
background: linear-gradient(180deg, #ffffff 0%, var(--vue-green) 100%);
|
|
152
167
|
-webkit-background-clip: text;
|
|
153
168
|
-webkit-text-fill-color: transparent;
|
|
154
169
|
/* Fallback */
|
|
155
|
-
color:
|
|
170
|
+
color: var(--vue-green);
|
|
156
171
|
margin-bottom: 16px;
|
|
157
|
-
filter: drop-shadow(0 0 20px rgba(
|
|
172
|
+
filter: drop-shadow(0 0 20px rgba(66, 184, 131, 0.1));
|
|
158
173
|
}
|
|
159
174
|
|
|
160
175
|
.terminal-box {
|
|
161
176
|
width: 100%;
|
|
162
|
-
|
|
177
|
+
/* Fundo esverdeado muito sutil */
|
|
178
|
+
background: rgba(66, 184, 131, 0.03);
|
|
163
179
|
border-radius: 12px;
|
|
164
180
|
padding: 16px;
|
|
165
181
|
margin-bottom: 24px;
|
|
166
|
-
|
|
182
|
+
/* Borda verde sutil */
|
|
183
|
+
border: 1px solid rgba(66, 184, 131, 0.1);
|
|
167
184
|
font-family: "JetBrains Mono", monospace;
|
|
168
185
|
font-size: 12px;
|
|
169
186
|
text-align: left;
|
|
170
|
-
color: #
|
|
187
|
+
color: #a7c4bc; /* Texto terminal mais claro */
|
|
171
188
|
box-sizing: border-box;
|
|
172
189
|
}
|
|
173
190
|
|
|
@@ -186,7 +203,7 @@ const reload = () => {
|
|
|
186
203
|
}
|
|
187
204
|
|
|
188
205
|
.method {
|
|
189
|
-
color:
|
|
206
|
+
color: var(--vue-green); /* GET em verde */
|
|
190
207
|
margin-right: 4px;
|
|
191
208
|
}
|
|
192
209
|
|
|
@@ -196,7 +213,7 @@ const reload = () => {
|
|
|
196
213
|
|
|
197
214
|
.error-msg {
|
|
198
215
|
margin-top: 4px;
|
|
199
|
-
color: #
|
|
216
|
+
color: #5f7e76; /* Verde acinzentado escuro */
|
|
200
217
|
}
|
|
201
218
|
|
|
202
219
|
.actions {
|
|
@@ -224,31 +241,32 @@ const reload = () => {
|
|
|
224
241
|
}
|
|
225
242
|
|
|
226
243
|
.btn-primary {
|
|
227
|
-
|
|
244
|
+
/* Botão principal Verde Vue */
|
|
245
|
+
background: var(--vue-green);
|
|
228
246
|
color: #000000;
|
|
229
247
|
}
|
|
230
248
|
|
|
231
249
|
.btn-primary:hover {
|
|
232
250
|
background: #ffffff;
|
|
233
|
-
box-shadow: 0 0 20px rgba(
|
|
251
|
+
box-shadow: 0 0 20px rgba(66, 184, 131, 0.4);
|
|
234
252
|
}
|
|
235
253
|
|
|
236
254
|
.btn-secondary {
|
|
237
255
|
background: transparent;
|
|
238
256
|
color: rgba(255, 255, 255, 0.6);
|
|
239
|
-
border: 1px solid rgba(
|
|
257
|
+
border: 1px solid rgba(66, 184, 131, 0.2);
|
|
240
258
|
}
|
|
241
259
|
|
|
242
260
|
.btn-secondary:hover {
|
|
243
|
-
background: rgba(
|
|
261
|
+
background: rgba(66, 184, 131, 0.1);
|
|
244
262
|
color: #fff;
|
|
245
|
-
border-color:
|
|
263
|
+
border-color: var(--vue-green);
|
|
246
264
|
}
|
|
247
265
|
|
|
248
266
|
.footer {
|
|
249
267
|
padding: 12px 32px;
|
|
250
|
-
background: rgba(
|
|
251
|
-
border-top: 1px solid rgba(
|
|
268
|
+
background: rgba(66, 184, 131, 0.02);
|
|
269
|
+
border-top: 1px solid rgba(66, 184, 131, 0.05);
|
|
252
270
|
display: flex;
|
|
253
271
|
justify-content: space-between;
|
|
254
272
|
align-items: center;
|
|
@@ -267,11 +285,13 @@ const reload = () => {
|
|
|
267
285
|
width: 6px;
|
|
268
286
|
height: 6px;
|
|
269
287
|
border-radius: 50%;
|
|
270
|
-
|
|
288
|
+
/* Ponto de status Verde */
|
|
289
|
+
background: var(--vue-green);
|
|
290
|
+
box-shadow: 0 0 6px var(--vue-green);
|
|
271
291
|
}
|
|
272
292
|
|
|
273
293
|
.status-text {
|
|
274
|
-
color:
|
|
294
|
+
color: var(--vue-green);
|
|
275
295
|
}
|
|
276
296
|
|
|
277
297
|
.brand-link {
|
|
@@ -292,7 +312,8 @@ const reload = () => {
|
|
|
292
312
|
.brand-logo {
|
|
293
313
|
width: 20px;
|
|
294
314
|
height: 20px;
|
|
295
|
-
|
|
315
|
+
/* Removi o grayscale para a logo brilhar normal, se preferir monocromático com verde, pode ajustar */
|
|
316
|
+
filter: none;
|
|
296
317
|
}
|
|
297
318
|
|
|
298
319
|
.brand-text {
|
|
@@ -302,6 +323,7 @@ const reload = () => {
|
|
|
302
323
|
}
|
|
303
324
|
|
|
304
325
|
.brand-highlight {
|
|
305
|
-
|
|
326
|
+
/* .js em verde */
|
|
327
|
+
color: var(--vue-green);
|
|
306
328
|
}
|
|
307
329
|
</style>
|
|
@@ -1,3 +1,19 @@
|
|
|
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
|
+
-->
|
|
1
17
|
<script setup>
|
|
2
18
|
import { ref, computed, onMounted, onUnmounted } from 'vue';
|
|
3
19
|
|
package/dist/vue/ErrorModal.vue
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
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
|
+
-->
|
|
1
17
|
<template>
|
|
2
18
|
<Teleport to="body">
|
|
3
19
|
<!-- Overlay -->
|