vatts 2.2.6 → 2.3.0-canary

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 (63) hide show
  1. package/dist/builder.js +54 -17
  2. package/dist/frameworks/FrontCore.d.ts +34 -0
  3. package/dist/frameworks/FrontCore.js +128 -0
  4. package/dist/{vue → frameworks/builds}/vue.build.js +1 -1
  5. package/dist/frameworks/react/client.d.ts +8 -0
  6. package/dist/{react → frameworks/react}/client.js +14 -14
  7. package/dist/{react → frameworks/react/components}/Link.js +2 -2
  8. package/dist/frameworks/react/entry.client.d.ts +14 -0
  9. package/dist/frameworks/react/entry.client.js +211 -0
  10. package/dist/frameworks/react/react-elements.d.ts +10 -0
  11. package/dist/{react → frameworks/renderers}/renderer-react.d.ts +2 -2
  12. package/dist/{react → frameworks/renderers}/renderer-react.js +34 -67
  13. package/dist/{vue → frameworks/renderers}/renderer.vue.d.ts +2 -2
  14. package/dist/frameworks/renderers/renderer.vue.js +193 -0
  15. package/dist/frameworks/themes/BuildingPage.d.ts +1 -0
  16. package/dist/frameworks/themes/BuildingPage.js +312 -0
  17. package/dist/frameworks/themes/DefaultNotFound.d.ts +1 -0
  18. package/dist/frameworks/themes/DefaultNotFound.js +330 -0
  19. package/dist/frameworks/themes/ErrorModal.d.ts +1 -0
  20. package/dist/frameworks/themes/ErrorModal.js +345 -0
  21. package/dist/frameworks/themes/ServerError.d.ts +1 -0
  22. package/dist/frameworks/themes/ServerError.js +401 -0
  23. package/dist/frameworks/themes/VattsDevBadge.d.ts +1 -0
  24. package/dist/frameworks/themes/VattsDevBadge.js +232 -0
  25. package/dist/frameworks/vue/App.vue +149 -0
  26. package/dist/frameworks/vue/client.d.ts +9 -0
  27. package/dist/{vue → frameworks/vue}/client.js +13 -11
  28. package/dist/{vue → frameworks/vue/components}/Link.vue +1 -1
  29. package/dist/frameworks/vue/entry.client.js +75 -0
  30. package/dist/global/global.d.ts +1 -2
  31. package/dist/index.js +12 -1
  32. package/dist/renderer.js +2 -2
  33. package/package.json +10 -26
  34. package/dist/react/BuildingPage.d.ts +0 -2
  35. package/dist/react/BuildingPage.js +0 -270
  36. package/dist/react/DefaultNotFound.d.ts +0 -2
  37. package/dist/react/DefaultNotFound.js +0 -248
  38. package/dist/react/DevIndicator.d.ts +0 -5
  39. package/dist/react/DevIndicator.js +0 -203
  40. package/dist/react/ErrorModal.d.ts +0 -20
  41. package/dist/react/ErrorModal.js +0 -266
  42. package/dist/react/client.d.ts +0 -8
  43. package/dist/react/entry.client.d.ts +0 -6
  44. package/dist/react/entry.client.js +0 -325
  45. package/dist/react/server-error.d.ts +0 -8
  46. package/dist/react/server-error.js +0 -346
  47. package/dist/vue/App.vue +0 -199
  48. package/dist/vue/BuildingPage.vue +0 -281
  49. package/dist/vue/DefaultNotFound.vue +0 -329
  50. package/dist/vue/DevIndicator.vue +0 -226
  51. package/dist/vue/ErrorModal.vue +0 -317
  52. package/dist/vue/client.d.ts +0 -9
  53. package/dist/vue/entry.client.js +0 -110
  54. package/dist/vue/renderer.vue.js +0 -387
  55. package/dist/vue/server-error.vue +0 -351
  56. /package/dist/{react → frameworks/builds}/react.build.d.ts +0 -0
  57. /package/dist/{react → frameworks/builds}/react.build.js +0 -0
  58. /package/dist/{vue → frameworks/builds}/vue.build.d.ts +0 -0
  59. /package/dist/{react → frameworks/react/components}/Link.d.ts +0 -0
  60. /package/dist/{react → frameworks/react/components}/image/Image.d.ts +0 -0
  61. /package/dist/{react → frameworks/react/components}/image/Image.js +0 -0
  62. /package/dist/{vue → frameworks/vue/components}/image/Image.vue +0 -0
  63. /package/dist/{vue → frameworks/vue}/entry.client.d.ts +0 -0
@@ -1,329 +0,0 @@
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
- <script setup>
18
- import { ref, onMounted } from 'vue';
19
-
20
- const path = ref('/');
21
-
22
- onMounted(() => {
23
- if (typeof window !== 'undefined') {
24
- path.value = window.location.pathname;
25
- }
26
- });
27
-
28
- const reload = () => {
29
- window.location.reload();
30
- };
31
- </script>
32
-
33
- <template>
34
- <div class="error-page-wrapper">
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" />
36
-
37
- <div class="container">
38
- <div class="card">
39
- <div class="neon-line"></div>
40
-
41
- <div class="content">
42
- <div class="code">404</div>
43
-
44
- <div class="terminal-box">
45
- <div class="terminal-dots">
46
- <div class="dot"></div>
47
- <div class="dot"></div>
48
- <div class="dot"></div>
49
- </div>
50
- <div>
51
- <span class="method">GET</span>
52
- <span class="path">{{ path }}</span>
53
- </div>
54
- <div class="error-msg">
55
- <span>Error: Route not found</span>
56
- </div>
57
- </div>
58
-
59
- <div class="actions">
60
- <a href="/" class="btn btn-primary">
61
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
62
- <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
63
- <polyline points="9 22 9 12 15 12 15 22" />
64
- </svg>
65
- Back Home
66
- </a>
67
- <button @click="reload" class="btn btn-secondary">
68
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
69
- <path d="M21 2v6h-6"></path>
70
- <path d="M3 12a9 9 0 0 1 15-6.7L21 8"></path>
71
- <path d="M3 22v-6h6"></path>
72
- <path d="M21 12a9 9 0 0 1-15 6.7L3 16"></path>
73
- </svg>
74
- Retry
75
- </button>
76
- </div>
77
- </div>
78
-
79
- <div class="footer">
80
- <span>Vatts Server</span>
81
- <div class="status">
82
- <div class="status-dot"></div>
83
- <span class="status-text">Not Found</span>
84
- </div>
85
- </div>
86
- </div>
87
-
88
- <a href="https://npmjs.com/package/vatts" target="_blank" rel="noopener noreferrer" class="brand-link">
89
- <img src="https://raw.githubusercontent.com/murillo-frazao-cunha/vatts-docs/master/public/logo.png" alt="Vatts Logo" class="brand-logo" />
90
- <span class="brand-text">
91
- Vatts<span class="brand-highlight">.js</span>
92
- </span>
93
- </a>
94
- </div>
95
- </div>
96
- </template>
97
-
98
- <style scoped>
99
- /* Reset global local e variáveis */
100
- .error-page-wrapper {
101
- font-family: 'Inter', system-ui, sans-serif;
102
- box-sizing: border-box;
103
- }
104
-
105
- /* Variáveis CSS locais para facilitar manutenção das cores Vue */
106
- .container {
107
- --vue-green: #42b883;
108
- --vue-dark: #35495e;
109
- --bg-color: #000000;
110
- --card-bg: #0a0a0a;
111
-
112
- position: fixed;
113
- top: 0;
114
- left: 0;
115
- right: 0;
116
- bottom: 0;
117
- z-index: 9999;
118
- display: flex;
119
- flex-direction: column;
120
- align-items: center;
121
- justify-content: center;
122
- width: 100vw;
123
- height: 100vh;
124
- background: var(--bg-color);
125
- color: #ffffff;
126
- overflow: hidden;
127
- margin: 0;
128
- padding: 0;
129
- }
130
-
131
- .card {
132
- width: min(90%, 500px);
133
- display: flex;
134
- flex-direction: column;
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);
138
- border-radius: 20px;
139
- overflow: hidden;
140
- position: relative;
141
- }
142
-
143
- .neon-line {
144
- height: 1px;
145
- width: 100%;
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);
149
- }
150
-
151
- .content {
152
- padding: 32px;
153
- display: flex;
154
- flex-direction: column;
155
- align-items: center;
156
- text-align: center;
157
- }
158
-
159
- .code {
160
- font-size: 80px;
161
- font-weight: 900;
162
- line-height: 1;
163
- letter-spacing: -0.04em;
164
- color: #fff;
165
- /* Gradiente Texto: Branco para Verde */
166
- background: linear-gradient(180deg, #ffffff 0%, var(--vue-green) 100%);
167
- -webkit-background-clip: text;
168
- -webkit-text-fill-color: transparent;
169
- /* Fallback */
170
- color: var(--vue-green);
171
- margin-bottom: 16px;
172
- filter: drop-shadow(0 0 20px rgba(66, 184, 131, 0.1));
173
- }
174
-
175
- .terminal-box {
176
- width: 100%;
177
- /* Fundo esverdeado muito sutil */
178
- background: rgba(66, 184, 131, 0.03);
179
- border-radius: 12px;
180
- padding: 16px;
181
- margin-bottom: 24px;
182
- /* Borda verde sutil */
183
- border: 1px solid rgba(66, 184, 131, 0.1);
184
- font-family: "JetBrains Mono", monospace;
185
- font-size: 12px;
186
- text-align: left;
187
- color: #a7c4bc; /* Texto terminal mais claro */
188
- box-sizing: border-box;
189
- }
190
-
191
- .terminal-dots {
192
- display: flex;
193
- gap: 6px;
194
- margin-bottom: 8px;
195
- opacity: 0.3;
196
- }
197
-
198
- .dot {
199
- width: 8px;
200
- height: 8px;
201
- border-radius: 50%;
202
- background: #fff;
203
- }
204
-
205
- .method {
206
- color: var(--vue-green); /* GET em verde */
207
- margin-right: 4px;
208
- }
209
-
210
- .path {
211
- color: #fff;
212
- }
213
-
214
- .error-msg {
215
- margin-top: 4px;
216
- color: #5f7e76; /* Verde acinzentado escuro */
217
- }
218
-
219
- .actions {
220
- display: flex;
221
- gap: 12px;
222
- width: 100%;
223
- }
224
-
225
- .btn {
226
- display: flex;
227
- align-items: center;
228
- gap: 8px;
229
- padding: 10px 20px;
230
- border-radius: 10px;
231
- font-size: 13px;
232
- font-weight: 600;
233
- cursor: pointer;
234
- transition: all 0.2s ease;
235
- border: none;
236
- outline: none;
237
- text-decoration: none;
238
- font-family: 'Inter', sans-serif;
239
- flex: 1;
240
- justify-content: center;
241
- }
242
-
243
- .btn-primary {
244
- /* Botão principal Verde Vue */
245
- background: var(--vue-green);
246
- color: #000000;
247
- }
248
-
249
- .btn-primary:hover {
250
- background: #ffffff;
251
- box-shadow: 0 0 20px rgba(66, 184, 131, 0.4);
252
- }
253
-
254
- .btn-secondary {
255
- background: transparent;
256
- color: rgba(255, 255, 255, 0.6);
257
- border: 1px solid rgba(66, 184, 131, 0.2);
258
- }
259
-
260
- .btn-secondary:hover {
261
- background: rgba(66, 184, 131, 0.1);
262
- color: #fff;
263
- border-color: var(--vue-green);
264
- }
265
-
266
- .footer {
267
- padding: 12px 32px;
268
- background: rgba(66, 184, 131, 0.02);
269
- border-top: 1px solid rgba(66, 184, 131, 0.05);
270
- display: flex;
271
- justify-content: space-between;
272
- align-items: center;
273
- font-size: 11px;
274
- color: rgba(255, 255, 255, 0.3);
275
- box-sizing: border-box;
276
- }
277
-
278
- .status {
279
- display: flex;
280
- align-items: center;
281
- gap: 6px;
282
- }
283
-
284
- .status-dot {
285
- width: 6px;
286
- height: 6px;
287
- border-radius: 50%;
288
- /* Ponto de status Verde */
289
- background: var(--vue-green);
290
- box-shadow: 0 0 6px var(--vue-green);
291
- }
292
-
293
- .status-text {
294
- color: var(--vue-green);
295
- }
296
-
297
- .brand-link {
298
- margin-top: 32px;
299
- display: flex;
300
- align-items: center;
301
- gap: 10px;
302
- opacity: 0.4;
303
- transition: opacity 0.3s;
304
- text-decoration: none;
305
- color: #fff;
306
- }
307
-
308
- .brand-link:hover {
309
- opacity: 1;
310
- }
311
-
312
- .brand-logo {
313
- width: 20px;
314
- height: 20px;
315
- /* Removi o grayscale para a logo brilhar normal, se preferir monocromático com verde, pode ajustar */
316
- filter: none;
317
- }
318
-
319
- .brand-text {
320
- font-size: 13px;
321
- font-weight: 600;
322
- color: #fff;
323
- }
324
-
325
- .brand-highlight {
326
- /* .js em verde */
327
- color: var(--vue-green);
328
- }
329
- </style>
@@ -1,226 +0,0 @@
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
- <script setup>
18
- import { ref, computed, onMounted, onUnmounted } from 'vue';
19
-
20
- // Definição das props
21
- const props = defineProps({
22
- hasBuildError: {
23
- type: Boolean,
24
- default: false
25
- }
26
- });
27
-
28
- // Eventos
29
- // Em vez de passar uma função callback como prop (React), emitimos um evento no Vue.
30
- const emit = defineEmits(['click-build-error']);
31
-
32
- const isVisible = ref(true);
33
- const hotState = ref('idle');
34
- const mounted = ref(false);
35
-
36
- const isReloading = computed(() => hotState.value === 'reloading');
37
- const isError = computed(() => !!props.hasBuildError);
38
-
39
- const handleBadgeClick = () => {
40
- if (isError.value) {
41
- emit('click-build-error');
42
- }
43
- };
44
-
45
- onMounted(() => {
46
- mounted.value = true;
47
-
48
- const handler = (ev) => {
49
- const detail = ev?.detail;
50
- if (!detail || !detail.state) return;
51
-
52
- if (detail.state === 'reloading' || detail.state === 'full-reload') {
53
- hotState.value = 'reloading';
54
- }
55
- if (detail.state === 'idle') {
56
- hotState.value = 'idle';
57
- }
58
- };
59
-
60
- if (typeof window !== 'undefined') {
61
- window.addEventListener('vatts:hotreload', handler);
62
- }
63
-
64
- onUnmounted(() => {
65
- if (typeof window !== 'undefined') {
66
- window.removeEventListener('vatts:hotreload', handler);
67
- }
68
- });
69
- });
70
- </script>
71
-
72
- <template>
73
- <Teleport to="body">
74
- <div
75
- v-if="isVisible && mounted"
76
- class="vatts-dev-badge"
77
- :class="{ 'clickable': isError }"
78
- @click="handleBadgeClick"
79
- >
80
- <!-- Loading Spinner ou Status Dot -->
81
- <div v-if="isReloading" class="vatts-spinner"></div>
82
- <div
83
- v-else
84
- class="vatts-status-dot"
85
- :class="{ 'reloading': isReloading, 'error': isError }"
86
- ></div>
87
-
88
- <!-- Logo & Texto -->
89
- <div class="vatts-logo">
90
- VATTS<span>.JS</span>
91
- <span v-if="isError" class="vatts-error-pill">ERROR</span>
92
- </div>
93
-
94
- <!-- Botão Fechar -->
95
- <button
96
- class="close-btn"
97
- @click.stop="isVisible = false"
98
- aria-label="Close badge"
99
- >
100
- ×
101
- </button>
102
- </div>
103
- </Teleport>
104
- </template>
105
-
106
- <style scoped>
107
- /* Importando fonte (opcional se já existir globalmente, mas mantendo consistência com o original) */
108
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800;900&display=swap');
109
-
110
- @keyframes vatts-pulse {
111
- 0% { opacity: 0.4; }
112
- 50% { opacity: 1; }
113
- 100% { opacity: 0.4; }
114
- }
115
-
116
- @keyframes vatts-spin {
117
- 0% { transform: rotate(0deg); }
118
- 100% { transform: rotate(360deg); }
119
- }
120
-
121
- .vatts-dev-badge {
122
- position: fixed;
123
- bottom: 20px;
124
- right: 20px;
125
- /* Z-index alto para ficar acima de tudo */
126
- z-index: 2147483647;
127
-
128
- display: flex;
129
- align-items: center;
130
- gap: 12px;
131
- padding: 8px 14px;
132
- background: rgba(0, 0, 0, 0.85);
133
- backdrop-filter: blur(12px);
134
- -webkit-backdrop-filter: blur(12px);
135
-
136
- border-radius: 10px;
137
- color: #fff;
138
- font-family: 'Inter', system-ui, sans-serif;
139
- font-size: 11px;
140
- font-weight: 600;
141
- letter-spacing: 0.05em;
142
-
143
- /* Estilo Monocromático Next.js */
144
- border: 1px solid rgba(255, 255, 255, 0.1);
145
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6);
146
- transition: all 0.2s ease;
147
- cursor: default;
148
- user-select: none;
149
- }
150
-
151
- .vatts-dev-badge.clickable {
152
- cursor: pointer;
153
- }
154
-
155
- .vatts-dev-badge:hover {
156
- border-color: rgba(255, 255, 255, 0.3);
157
- transform: translateY(-2px);
158
- background: rgba(10, 10, 10, 0.95);
159
- }
160
-
161
- .vatts-status-dot {
162
- width: 7px;
163
- height: 7px;
164
- background: #ffffff; /* Branco para status OK */
165
- border-radius: 50%;
166
- box-shadow: 0 0 8px rgba(255, 255, 255, 0.3);
167
- animation: vatts-pulse 2.5s infinite ease-in-out;
168
- }
169
-
170
- .vatts-status-dot.reloading {
171
- background: #64748b; /* Slate */
172
- box-shadow: none;
173
- }
174
-
175
- .vatts-status-dot.error {
176
- background: #ef4444; /* Vermelho para erro */
177
- box-shadow: 0 0 10px #ef4444;
178
- animation: vatts-pulse 1s infinite ease-in-out;
179
- }
180
-
181
- .vatts-spinner {
182
- width: 10px;
183
- height: 10px;
184
- border-radius: 50%;
185
- border: 2px solid rgba(255,255,255,0.1);
186
- border-top-color: #ffffff;
187
- animation: vatts-spin 0.8s linear infinite;
188
- }
189
-
190
- .vatts-logo {
191
- color: #ffffff;
192
- font-weight: 800;
193
- display: flex;
194
- align-items: center;
195
- }
196
-
197
- .vatts-logo span {
198
- color: #64748b;
199
- }
200
-
201
- .vatts-error-pill {
202
- margin-left: 8px;
203
- padding: 2px 6px;
204
- border-radius: 4px;
205
- background: #ffffff;
206
- color: #000000;
207
- font-size: 9px;
208
- font-weight: 900;
209
- }
210
-
211
- .close-btn {
212
- background: none;
213
- border: none;
214
- color: rgba(255,255,255,0.2);
215
- cursor: pointer;
216
- font-size: 16px;
217
- padding: 0 0 0 4px;
218
- margin-left: 4px;
219
- display: flex;
220
- align-items: center;
221
- }
222
-
223
- .close-btn:hover {
224
- color: rgba(255,255,255,0.6);
225
- }
226
- </style>