@yakuzaa/jade-runtime 0.1.0

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 (113) hide show
  1. package/dist/apis/audit_service.d.ts +43 -0
  2. package/dist/apis/audit_service.d.ts.map +1 -0
  3. package/dist/apis/audit_service.js +73 -0
  4. package/dist/apis/audit_service.js.map +1 -0
  5. package/dist/apis/auth_service.d.ts +51 -0
  6. package/dist/apis/auth_service.d.ts.map +1 -0
  7. package/dist/apis/auth_service.js +120 -0
  8. package/dist/apis/auth_service.js.map +1 -0
  9. package/dist/apis/console_api.d.ts +34 -0
  10. package/dist/apis/console_api.d.ts.map +1 -0
  11. package/dist/apis/console_api.js +90 -0
  12. package/dist/apis/console_api.js.map +1 -0
  13. package/dist/apis/datetime_api.d.ts +13 -0
  14. package/dist/apis/datetime_api.d.ts.map +1 -0
  15. package/dist/apis/datetime_api.js +89 -0
  16. package/dist/apis/datetime_api.js.map +1 -0
  17. package/dist/apis/http_client.d.ts +32 -0
  18. package/dist/apis/http_client.d.ts.map +1 -0
  19. package/dist/apis/http_client.js +83 -0
  20. package/dist/apis/http_client.js.map +1 -0
  21. package/dist/apis/permission_service.d.ts +18 -0
  22. package/dist/apis/permission_service.d.ts.map +1 -0
  23. package/dist/apis/permission_service.js +56 -0
  24. package/dist/apis/permission_service.js.map +1 -0
  25. package/dist/core/event_loop.d.ts +14 -0
  26. package/dist/core/event_loop.d.ts.map +1 -0
  27. package/dist/core/event_loop.js +60 -0
  28. package/dist/core/event_loop.js.map +1 -0
  29. package/dist/core/memory_manager.d.ts +43 -0
  30. package/dist/core/memory_manager.d.ts.map +1 -0
  31. package/dist/core/memory_manager.js +218 -0
  32. package/dist/core/memory_manager.js.map +1 -0
  33. package/dist/core/runtime.d.ts +18 -0
  34. package/dist/core/runtime.d.ts.map +1 -0
  35. package/dist/core/runtime.js +116 -0
  36. package/dist/core/runtime.js.map +1 -0
  37. package/dist/persistence/local_datastore.d.ts +34 -0
  38. package/dist/persistence/local_datastore.d.ts.map +1 -0
  39. package/dist/persistence/local_datastore.js +112 -0
  40. package/dist/persistence/local_datastore.js.map +1 -0
  41. package/dist/persistence/sync_manager.d.ts +49 -0
  42. package/dist/persistence/sync_manager.d.ts.map +1 -0
  43. package/dist/persistence/sync_manager.js +187 -0
  44. package/dist/persistence/sync_manager.js.map +1 -0
  45. package/dist/pwa/pwa_generator.d.ts +16 -0
  46. package/dist/pwa/pwa_generator.d.ts.map +1 -0
  47. package/dist/pwa/pwa_generator.js +107 -0
  48. package/dist/pwa/pwa_generator.js.map +1 -0
  49. package/dist/stdlib/matematica.d.ts +121 -0
  50. package/dist/stdlib/matematica.d.ts.map +1 -0
  51. package/dist/stdlib/matematica.js +250 -0
  52. package/dist/stdlib/matematica.js.map +1 -0
  53. package/dist/stdlib/moeda.d.ts +129 -0
  54. package/dist/stdlib/moeda.d.ts.map +1 -0
  55. package/dist/stdlib/moeda.js +212 -0
  56. package/dist/stdlib/moeda.js.map +1 -0
  57. package/dist/stdlib/texto.d.ts +101 -0
  58. package/dist/stdlib/texto.d.ts.map +1 -0
  59. package/dist/stdlib/texto.js +205 -0
  60. package/dist/stdlib/texto.js.map +1 -0
  61. package/dist/stdlib/xml.d.ts +77 -0
  62. package/dist/stdlib/xml.d.ts.map +1 -0
  63. package/dist/stdlib/xml.js +212 -0
  64. package/dist/stdlib/xml.js.map +1 -0
  65. package/dist/ui/binding.d.ts +22 -0
  66. package/dist/ui/binding.d.ts.map +1 -0
  67. package/dist/ui/binding.js +62 -0
  68. package/dist/ui/binding.js.map +1 -0
  69. package/dist/ui/components/botao.d.ts +4 -0
  70. package/dist/ui/components/botao.d.ts.map +1 -0
  71. package/dist/ui/components/botao.js +4 -0
  72. package/dist/ui/components/botao.js.map +1 -0
  73. package/dist/ui/components/campo.d.ts +8 -0
  74. package/dist/ui/components/campo.d.ts.map +1 -0
  75. package/dist/ui/components/campo.js +9 -0
  76. package/dist/ui/components/campo.js.map +1 -0
  77. package/dist/ui/components/card.d.ts +4 -0
  78. package/dist/ui/components/card.d.ts.map +1 -0
  79. package/dist/ui/components/card.js +4 -0
  80. package/dist/ui/components/card.js.map +1 -0
  81. package/dist/ui/components/formulario.d.ts +4 -0
  82. package/dist/ui/components/formulario.d.ts.map +1 -0
  83. package/dist/ui/components/formulario.js +4 -0
  84. package/dist/ui/components/formulario.js.map +1 -0
  85. package/dist/ui/components/tabela.d.ts +3 -0
  86. package/dist/ui/components/tabela.d.ts.map +1 -0
  87. package/dist/ui/components/tabela.js +4 -0
  88. package/dist/ui/components/tabela.js.map +1 -0
  89. package/dist/ui/reactive.d.ts +61 -0
  90. package/dist/ui/reactive.d.ts.map +1 -0
  91. package/dist/ui/reactive.js +149 -0
  92. package/dist/ui/reactive.js.map +1 -0
  93. package/dist/ui/refs.d.ts +13 -0
  94. package/dist/ui/refs.d.ts.map +1 -0
  95. package/dist/ui/refs.js +32 -0
  96. package/dist/ui/refs.js.map +1 -0
  97. package/dist/ui/router.d.ts +39 -0
  98. package/dist/ui/router.d.ts.map +1 -0
  99. package/dist/ui/router.js +74 -0
  100. package/dist/ui/router.js.map +1 -0
  101. package/dist/ui/theme.d.ts +19 -0
  102. package/dist/ui/theme.d.ts.map +1 -0
  103. package/dist/ui/theme.js +183 -0
  104. package/dist/ui/theme.js.map +1 -0
  105. package/dist/ui/ui_engine.d.ts +89 -0
  106. package/dist/ui/ui_engine.d.ts.map +1 -0
  107. package/dist/ui/ui_engine.js +406 -0
  108. package/dist/ui/ui_engine.js.map +1 -0
  109. package/dist/ui/virtual_list.d.ts +29 -0
  110. package/dist/ui/virtual_list.d.ts.map +1 -0
  111. package/dist/ui/virtual_list.js +88 -0
  112. package/dist/ui/virtual_list.js.map +1 -0
  113. package/package.json +76 -0
@@ -0,0 +1,406 @@
1
+ import { Store, Signal, disposeOwner, setEffectOwner } from './reactive.js';
2
+ import { bind, bindInput } from './binding.js';
3
+ import { RefManager } from './refs.js';
4
+ import { VirtualList } from './virtual_list.js';
5
+ import { aplicarTema } from './theme.js';
6
+ import { Router } from './router.js';
7
+ // ── UIEngine ─────────────────────────────────────────────────────────────────
8
+ export class UIEngine {
9
+ store;
10
+ refs;
11
+ memory;
12
+ router;
13
+ telaAtiva = null;
14
+ toastContainer = null;
15
+ constructor(memory, tema) {
16
+ this.memory = memory;
17
+ this.store = new Store();
18
+ this.refs = new RefManager();
19
+ this.router = new Router(this.store, memory);
20
+ if (typeof document !== 'undefined') {
21
+ aplicarTema(tema);
22
+ }
23
+ }
24
+ // ── Gestão de telas ───────────────────────────────────────────────────────
25
+ /**
26
+ * Monta uma nova tela no container.
27
+ * CORREÇÃO: ao trocar de tela, os efeitos reativos e dados da tela anterior
28
+ * são descartados para evitar vazamento de memória e atualizações fantasma.
29
+ */
30
+ montarTela(config, container) {
31
+ // Limpar tela anterior
32
+ if (this.telaAtiva) {
33
+ disposeOwner(this.telaAtiva);
34
+ this.memory.freeOwner(this.telaAtiva);
35
+ // CORREÇÃO: limpar apenas o namespace da tela que saiu, não o store inteiro
36
+ this.store.clearNamespace(this.telaAtiva + '.');
37
+ this.refs.limpar();
38
+ }
39
+ this.telaAtiva = config.nome;
40
+ container.innerHTML = '';
41
+ container.dataset.tela = config.nome;
42
+ const div = document.createElement('div');
43
+ div.className = 'jade-tela';
44
+ if (config.titulo) {
45
+ const h1 = document.createElement('h1');
46
+ h1.className = 'jade-tela-titulo';
47
+ h1.textContent = config.titulo;
48
+ div.appendChild(h1);
49
+ }
50
+ container.appendChild(div);
51
+ return div;
52
+ }
53
+ // ── Tabela ────────────────────────────────────────────────────────────────
54
+ /**
55
+ * Cria uma tabela com dados reativos.
56
+ * Suporta: filtro por texto, ordenação por coluna, paginação, VirtualList.
57
+ */
58
+ criarTabela(config, container, dados) {
59
+ setEffectOwner(this.telaAtiva);
60
+ const linhasPorPagina = config.paginacao === true
61
+ ? 20
62
+ : typeof config.paginacao === 'number'
63
+ ? config.paginacao
64
+ : 0;
65
+ // Estado reativo da tabela
66
+ const termoBusca = new Signal('');
67
+ const campOrdem = new Signal(null);
68
+ const direcaoOrdem = new Signal('asc');
69
+ const paginaAtual = new Signal(0);
70
+ const wrapper = document.createElement('div');
71
+ wrapper.className = 'jade-tabela-wrapper';
72
+ // ── Barra de controles (busca) ──────────────────────────────────────────
73
+ if (config.filtravel) {
74
+ const controles = document.createElement('div');
75
+ controles.className = 'jade-tabela-controles';
76
+ const busca = document.createElement('input');
77
+ busca.type = 'text';
78
+ busca.placeholder = 'Buscar...';
79
+ busca.className = 'jade-tabela-busca';
80
+ busca.addEventListener('input', () => {
81
+ termoBusca.set(busca.value.toLowerCase());
82
+ paginaAtual.set(0); // voltar para primeira página ao filtrar
83
+ });
84
+ controles.appendChild(busca);
85
+ wrapper.appendChild(controles);
86
+ }
87
+ // ── Tabela HTML ─────────────────────────────────────────────────────────
88
+ const tabelaDiv = document.createElement('div');
89
+ tabelaDiv.className = 'jade-tabela';
90
+ const table = document.createElement('table');
91
+ const thead = document.createElement('thead');
92
+ const headerRow = document.createElement('tr');
93
+ config.colunas.forEach(col => {
94
+ const th = document.createElement('th');
95
+ th.textContent = col.titulo;
96
+ if (config.ordenavel !== false && col.ordenavel !== false) {
97
+ th.className = 'ordenavel';
98
+ const icon = document.createElement('span');
99
+ icon.className = 'jade-sort-icon';
100
+ icon.textContent = '↕';
101
+ th.appendChild(icon);
102
+ th.addEventListener('click', () => {
103
+ if (campOrdem.peek() === col.campo) {
104
+ direcaoOrdem.set(direcaoOrdem.peek() === 'asc' ? 'desc' : 'asc');
105
+ }
106
+ else {
107
+ campOrdem.set(col.campo);
108
+ direcaoOrdem.set('asc');
109
+ }
110
+ paginaAtual.set(0);
111
+ // Atualizar classes dos cabeçalhos
112
+ headerRow.querySelectorAll('th').forEach(t => {
113
+ t.classList.remove('sort-asc', 'sort-desc');
114
+ });
115
+ th.classList.add(direcaoOrdem.peek() === 'asc' ? 'sort-asc' : 'sort-desc');
116
+ icon.textContent = direcaoOrdem.peek() === 'asc' ? '↑' : '↓';
117
+ atualizarTabela();
118
+ });
119
+ }
120
+ headerRow.appendChild(th);
121
+ });
122
+ thead.appendChild(headerRow);
123
+ table.appendChild(thead);
124
+ // ── Corpo da tabela ─────────────────────────────────────────────────────
125
+ const tbody = document.createElement('tbody');
126
+ table.appendChild(tbody);
127
+ tabelaDiv.appendChild(table);
128
+ // ── Rodapé de paginação ─────────────────────────────────────────────────
129
+ let paginacaoDiv = null;
130
+ if (linhasPorPagina > 0) {
131
+ paginacaoDiv = document.createElement('div');
132
+ paginacaoDiv.className = 'jade-tabela-paginacao';
133
+ tabelaDiv.appendChild(paginacaoDiv);
134
+ }
135
+ wrapper.appendChild(tabelaDiv);
136
+ container.appendChild(wrapper);
137
+ // ── Função que re-renderiza o corpo com dados filtrados/ordenados/paginados
138
+ const atualizarTabela = () => {
139
+ let linhas = [...dados];
140
+ // Filtro por texto
141
+ const termo = termoBusca.peek();
142
+ if (termo) {
143
+ linhas = linhas.filter(item => config.colunas.some(col => String(item[col.campo] ?? '').toLowerCase().includes(termo)));
144
+ }
145
+ // Ordenação
146
+ const campo = campOrdem.peek();
147
+ if (campo) {
148
+ const dir = direcaoOrdem.peek() === 'asc' ? 1 : -1;
149
+ linhas.sort((a, b) => {
150
+ const va = a[campo] ?? '';
151
+ const vb = b[campo] ?? '';
152
+ if (va < vb)
153
+ return -1 * dir;
154
+ if (va > vb)
155
+ return 1 * dir;
156
+ return 0;
157
+ });
158
+ }
159
+ // Paginação
160
+ const pagina = paginaAtual.peek();
161
+ if (linhasPorPagina > 0 && paginacaoDiv) {
162
+ const totalPaginas = Math.max(1, Math.ceil(linhas.length / linhasPorPagina));
163
+ const paginaCorreta = Math.min(pagina, totalPaginas - 1);
164
+ if (paginaCorreta !== pagina)
165
+ paginaAtual.set(paginaCorreta);
166
+ linhas = linhas.slice(paginaCorreta * linhasPorPagina, (paginaCorreta + 1) * linhasPorPagina);
167
+ // Re-renderizar controles de paginação
168
+ paginacaoDiv.innerHTML = '';
169
+ const info = document.createElement('span');
170
+ info.textContent = `Página ${paginaCorreta + 1} de ${totalPaginas}`;
171
+ paginacaoDiv.appendChild(info);
172
+ const btnAnterior = document.createElement('button');
173
+ btnAnterior.textContent = '←';
174
+ btnAnterior.className = 'jade-pag-btn';
175
+ btnAnterior.disabled = paginaCorreta === 0;
176
+ btnAnterior.addEventListener('click', () => {
177
+ paginaAtual.set(paginaCorreta - 1);
178
+ atualizarTabela();
179
+ });
180
+ paginacaoDiv.appendChild(btnAnterior);
181
+ // Botões de página (máximo 5 visíveis)
182
+ const inicio = Math.max(0, paginaCorreta - 2);
183
+ const fim = Math.min(totalPaginas, inicio + 5);
184
+ for (let p = inicio; p < fim; p++) {
185
+ const btn = document.createElement('button');
186
+ btn.textContent = String(p + 1);
187
+ btn.className = `jade-pag-btn${p === paginaCorreta ? ' ativo' : ''}`;
188
+ btn.addEventListener('click', () => { paginaAtual.set(p); atualizarTabela(); });
189
+ paginacaoDiv.appendChild(btn);
190
+ }
191
+ const btnProximo = document.createElement('button');
192
+ btnProximo.textContent = '→';
193
+ btnProximo.className = 'jade-pag-btn';
194
+ btnProximo.disabled = paginaCorreta >= totalPaginas - 1;
195
+ btnProximo.addEventListener('click', () => {
196
+ paginaAtual.set(paginaCorreta + 1);
197
+ atualizarTabela();
198
+ });
199
+ paginacaoDiv.appendChild(btnProximo);
200
+ }
201
+ // Renderizar linhas
202
+ tbody.innerHTML = '';
203
+ if (linhas.length === 0) {
204
+ const tr = document.createElement('tr');
205
+ const td = document.createElement('td');
206
+ td.colSpan = config.colunas.length;
207
+ td.className = 'jade-tabela-vazio';
208
+ td.textContent = 'Nenhum registro encontrado.';
209
+ tr.appendChild(td);
210
+ tbody.appendChild(tr);
211
+ return;
212
+ }
213
+ linhas.forEach((item, index) => {
214
+ const tr = document.createElement('tr');
215
+ config.colunas.forEach(col => {
216
+ const td = document.createElement('td');
217
+ const signal = this.store.get(`${config.entidade}.${index}.${col.campo}`, item[col.campo]);
218
+ bind(signal, td, 'textContent');
219
+ tr.appendChild(td);
220
+ });
221
+ tbody.appendChild(tr);
222
+ });
223
+ };
224
+ // VirtualList só é usado quando não há filtro/paginação interativa
225
+ // (VirtualList e tabela paginada são mutuamente exclusivos)
226
+ if (config.virtualList && dados.length > 100 && linhasPorPagina === 0 && !config.filtravel) {
227
+ const listContainer = document.createElement('div');
228
+ listContainer.style.height = config.altura ?? '400px';
229
+ wrapper.appendChild(listContainer);
230
+ new VirtualList({
231
+ container: listContainer,
232
+ items: dados,
233
+ rowHeight: config.rowHeight ?? 41,
234
+ renderRow: (item, index) => {
235
+ const row = document.createElement('div');
236
+ row.style.cssText = 'display:flex;border-bottom:1px solid var(--jade-borda);';
237
+ config.colunas.forEach(col => {
238
+ const cell = document.createElement('div');
239
+ cell.style.cssText = 'flex:1;padding:10px 14px;font-size:14px;';
240
+ const signal = this.store.get(`${config.entidade}.${index}.${col.campo}`, item[col.campo]);
241
+ bind(signal, cell, 'textContent');
242
+ row.appendChild(cell);
243
+ });
244
+ return row;
245
+ }
246
+ });
247
+ }
248
+ else {
249
+ atualizarTabela();
250
+ }
251
+ setEffectOwner(null);
252
+ }
253
+ // ── Formulário ────────────────────────────────────────────────────────────
254
+ criarFormulario(config, container) {
255
+ setEffectOwner(this.telaAtiva);
256
+ const form = document.createElement('form');
257
+ form.className = 'jade-formulario';
258
+ form.onsubmit = e => e.preventDefault();
259
+ const signals = {};
260
+ config.campos.forEach(campo => {
261
+ const wrapper = document.createElement('div');
262
+ wrapper.className = 'jade-campo';
263
+ const label = document.createElement('label');
264
+ label.textContent = campo.titulo + (campo.obrigatorio ? ' *' : '');
265
+ wrapper.appendChild(label);
266
+ let input;
267
+ if (campo.tipo === 'select' && campo.opcoes) {
268
+ input = document.createElement('select');
269
+ campo.opcoes.forEach(op => {
270
+ const option = document.createElement('option');
271
+ option.value = op.valor;
272
+ option.textContent = op.label;
273
+ input.appendChild(option);
274
+ });
275
+ }
276
+ else {
277
+ const inp = document.createElement('input');
278
+ inp.type = campo.tipo === 'numero' || campo.tipo === 'decimal' ? 'number'
279
+ : campo.tipo === 'booleano' ? 'checkbox'
280
+ : campo.tipo === 'data' ? 'date'
281
+ : campo.tipo === 'hora' ? 'time'
282
+ : 'text';
283
+ if (campo.placeholder)
284
+ inp.placeholder = campo.placeholder;
285
+ inp.required = campo.obrigatorio ?? false;
286
+ input = inp;
287
+ }
288
+ const signal = new Signal('');
289
+ signals[campo.nome] = signal;
290
+ bindInput(input, signal);
291
+ if (campo.ref)
292
+ this.refs.registrar(campo.ref, input);
293
+ wrapper.appendChild(input);
294
+ // Espaço para mensagem de erro de validação
295
+ const msgErro = document.createElement('span');
296
+ msgErro.className = 'jade-campo-msg-erro';
297
+ wrapper.appendChild(msgErro);
298
+ form.appendChild(wrapper);
299
+ });
300
+ container.appendChild(form);
301
+ setEffectOwner(null);
302
+ return signals;
303
+ }
304
+ // ── Botão ─────────────────────────────────────────────────────────────────
305
+ criarBotao(texto, handler, container, opcoes) {
306
+ setEffectOwner(this.telaAtiva);
307
+ const btn = document.createElement('button');
308
+ btn.className = `jade-botao jade-botao-${opcoes?.tipo ?? 'primario'}`;
309
+ if (opcoes?.icone) {
310
+ const icon = document.createElement('span');
311
+ icon.textContent = opcoes.icone;
312
+ btn.appendChild(icon);
313
+ }
314
+ const label = document.createTextNode(texto);
315
+ btn.appendChild(label);
316
+ btn.addEventListener('click', handler);
317
+ if (opcoes?.desabilitado) {
318
+ bind(opcoes.desabilitado, btn, 'disabled');
319
+ }
320
+ container.appendChild(btn);
321
+ setEffectOwner(null);
322
+ return btn;
323
+ }
324
+ // ── Card de métrica ────────────────────────────────────────────────────────
325
+ criarCard(titulo, valorSignal, container) {
326
+ setEffectOwner(this.telaAtiva);
327
+ const card = document.createElement('div');
328
+ card.className = 'jade-card';
329
+ const t = document.createElement('div');
330
+ t.className = 'jade-card-titulo';
331
+ t.textContent = titulo;
332
+ const v = document.createElement('div');
333
+ v.className = 'jade-card-valor';
334
+ bind(valorSignal, v, 'textContent');
335
+ card.appendChild(t);
336
+ card.appendChild(v);
337
+ container.appendChild(card);
338
+ setEffectOwner(null);
339
+ }
340
+ // ── Atualização cirúrgica ─────────────────────────────────────────────────
341
+ /** Atualiza um único campo de uma entidade: só o nó DOM daquele campo é re-renderizado. */
342
+ atualizarCampo(entidade, index, campo, valor) {
343
+ this.store.set(`${entidade}.${index}.${campo}`, valor);
344
+ }
345
+ // ── Skeleton / Loading ────────────────────────────────────────────────────
346
+ /**
347
+ * Exibe um skeleton animado enquanto os dados carregam.
348
+ * Retorna o elemento para que `ocultarCarregando` possa removê-lo.
349
+ */
350
+ mostrarCarregando(container, linhas = 5) {
351
+ const skeleton = document.createElement('div');
352
+ skeleton.className = 'jade-carregando';
353
+ skeleton.setAttribute('aria-label', 'Carregando...');
354
+ const titulo = document.createElement('div');
355
+ titulo.className = 'jade-skeleton jade-skeleton-titulo';
356
+ skeleton.appendChild(titulo);
357
+ for (let i = 0; i < linhas; i++) {
358
+ const linha = document.createElement('div');
359
+ linha.className = `jade-skeleton jade-skeleton-${i === 0 ? 'tabela' : ''}linha`;
360
+ skeleton.appendChild(linha);
361
+ }
362
+ container.appendChild(skeleton);
363
+ return skeleton;
364
+ }
365
+ ocultarCarregando(skeleton) {
366
+ skeleton.remove();
367
+ }
368
+ // ── Toast / Notificações ──────────────────────────────────────────────────
369
+ /**
370
+ * Exibe uma notificação temporária no canto da tela.
371
+ * Desaparece automaticamente após `duracao` ms (padrão 3s).
372
+ */
373
+ mostrarNotificacao(mensagem, tipo = 'info', duracao = 3000) {
374
+ if (!this.toastContainer) {
375
+ this.toastContainer = document.createElement('div');
376
+ this.toastContainer.id = 'jade-toasts';
377
+ document.body.appendChild(this.toastContainer);
378
+ }
379
+ const icones = {
380
+ sucesso: '✓',
381
+ erro: '✕',
382
+ aviso: '⚠',
383
+ info: 'ℹ',
384
+ };
385
+ const toast = document.createElement('div');
386
+ toast.className = `jade-toast jade-toast-${tipo}`;
387
+ toast.setAttribute('role', 'alert');
388
+ const icon = document.createElement('span');
389
+ icon.textContent = icones[tipo];
390
+ toast.appendChild(icon);
391
+ const msg = document.createTextNode(mensagem);
392
+ toast.appendChild(msg);
393
+ this.toastContainer.appendChild(toast);
394
+ const remover = () => {
395
+ toast.classList.add('jade-toast-saindo');
396
+ toast.addEventListener('animationend', () => toast.remove(), { once: true });
397
+ };
398
+ setTimeout(remover, duracao);
399
+ }
400
+ // ── Acessores ─────────────────────────────────────────────────────────────
401
+ focar(nomeRef) { this.refs.focar(nomeRef); }
402
+ getStore() { return this.store; }
403
+ getRefs() { return this.refs; }
404
+ getRouter() { return this.router; }
405
+ }
406
+ //# sourceMappingURL=ui_engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui_engine.js","sourceRoot":"","sources":["../../ui/ui_engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * VirtualList — renderiza apenas as linhas visíveis de listas longas.
3
+ * Essencial para tabelas com centenas/milhares de registros: sem isso
4
+ * o browser tentaria criar um elemento DOM por linha e travaria.
5
+ */
6
+ export interface VirtualListConfig<T> {
7
+ container: HTMLElement;
8
+ items: T[];
9
+ rowHeight: number;
10
+ renderRow: (item: T, index: number) => HTMLElement;
11
+ overscan?: number;
12
+ }
13
+ export declare class VirtualList<T> {
14
+ private config;
15
+ private scroller;
16
+ private viewport;
17
+ private renderedRows;
18
+ private lastStart;
19
+ private lastEnd;
20
+ private resizeObserver;
21
+ constructor(config: VirtualListConfig<T>);
22
+ private setup;
23
+ private render;
24
+ /** Atualiza a lista com novos dados, re-renderizando do início. */
25
+ updateItems(newItems: T[]): void;
26
+ /** Libera o ResizeObserver quando o componente for destruído. */
27
+ destruir(): void;
28
+ }
29
+ //# sourceMappingURL=virtual_list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual_list.d.ts","sourceRoot":"","sources":["../../ui/virtual_list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW,CAAC,CAAC;IACxB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,cAAc,CAA+B;gBAEzC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAKxC,OAAO,CAAC,KAAK;IAiCb,OAAO,CAAC,MAAM;IAmCd,mEAAmE;IACnE,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI;IAUhC,iEAAiE;IACjE,QAAQ,IAAI,IAAI;CAKjB"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * VirtualList — renderiza apenas as linhas visíveis de listas longas.
3
+ * Essencial para tabelas com centenas/milhares de registros: sem isso
4
+ * o browser tentaria criar um elemento DOM por linha e travaria.
5
+ */
6
+ export class VirtualList {
7
+ config;
8
+ scroller;
9
+ viewport;
10
+ renderedRows = new Map();
11
+ lastStart = -1;
12
+ lastEnd = -1;
13
+ resizeObserver = null;
14
+ constructor(config) {
15
+ this.config = { overscan: 3, ...config };
16
+ this.setup();
17
+ }
18
+ setup() {
19
+ const { container, items, rowHeight } = this.config;
20
+ container.style.cssText += ';position:relative;overflow-y:auto;';
21
+ this.scroller = document.createElement('div');
22
+ this.scroller.style.height = `${items.length * rowHeight}px`;
23
+ this.scroller.style.position = 'relative';
24
+ this.viewport = document.createElement('div');
25
+ this.viewport.style.cssText = 'position:absolute;width:100%;top:0;';
26
+ this.scroller.appendChild(this.viewport);
27
+ container.appendChild(this.scroller);
28
+ container.addEventListener('scroll', () => this.render(container.scrollTop));
29
+ // Render inicial com fallback — pode ser recalculado pelo ResizeObserver
30
+ this.render(0);
31
+ // CORREÇÃO: usa ResizeObserver para detectar quando o container recebe
32
+ // dimensões reais (após ser anexado ao DOM e pintado pelo browser).
33
+ // Sem isso, clientHeight = 0 na primeira renderização.
34
+ if (typeof ResizeObserver !== 'undefined') {
35
+ this.resizeObserver = new ResizeObserver(() => {
36
+ this.lastStart = -1; // forçar re-render mesmo sem scroll
37
+ this.lastEnd = -1;
38
+ this.render(container.scrollTop);
39
+ });
40
+ this.resizeObserver.observe(container);
41
+ }
42
+ }
43
+ render(scrollTop) {
44
+ const { items, rowHeight, overscan, renderRow } = this.config;
45
+ // CORREÇÃO: usa a altura real se disponível, senão um fallback razoável
46
+ const containerHeight = this.config.container.clientHeight || 400;
47
+ const startIndex = Math.max(0, Math.floor(scrollTop / rowHeight) - overscan);
48
+ const endIndex = Math.min(items.length, Math.ceil((scrollTop + containerHeight) / rowHeight) + overscan);
49
+ // Evitar re-render se a janela não mudou
50
+ if (startIndex === this.lastStart && endIndex === this.lastEnd)
51
+ return;
52
+ this.lastStart = startIndex;
53
+ this.lastEnd = endIndex;
54
+ // Remover linhas fora da janela visível
55
+ for (const [idx, row] of this.renderedRows) {
56
+ if (idx < startIndex || idx >= endIndex) {
57
+ row.remove();
58
+ this.renderedRows.delete(idx);
59
+ }
60
+ }
61
+ // Adicionar linhas que entraram na janela
62
+ for (let i = startIndex; i < endIndex; i++) {
63
+ if (this.renderedRows.has(i))
64
+ continue;
65
+ const row = renderRow(items[i], i);
66
+ row.style.cssText += `;position:absolute;top:${i * rowHeight}px;width:100%;height:${rowHeight}px;`;
67
+ this.viewport.appendChild(row);
68
+ this.renderedRows.set(i, row);
69
+ }
70
+ }
71
+ /** Atualiza a lista com novos dados, re-renderizando do início. */
72
+ updateItems(newItems) {
73
+ this.config.items = newItems;
74
+ this.scroller.style.height = `${newItems.length * this.config.rowHeight}px`;
75
+ this.renderedRows.forEach(r => r.remove());
76
+ this.renderedRows.clear();
77
+ this.lastStart = -1;
78
+ this.lastEnd = -1;
79
+ this.render(this.config.container.scrollTop);
80
+ }
81
+ /** Libera o ResizeObserver quando o componente for destruído. */
82
+ destruir() {
83
+ this.resizeObserver?.disconnect();
84
+ this.renderedRows.forEach(r => r.remove());
85
+ this.renderedRows.clear();
86
+ }
87
+ }
88
+ //# sourceMappingURL=virtual_list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual_list.js","sourceRoot":"","sources":["../../ui/virtual_list.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@yakuzaa/jade-runtime",
3
+ "version": "0.1.0",
4
+ "description": "Runtime da linguagem JADE — event loop, gerenciamento de memória, UI engine e APIs empresariais",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "files": [
10
+ "dist/"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ },
17
+ "./core/*": {
18
+ "import": "./dist/core/*.js",
19
+ "types": "./dist/core/*.d.ts"
20
+ },
21
+ "./apis/*": {
22
+ "import": "./dist/apis/*.js",
23
+ "types": "./dist/apis/*.d.ts"
24
+ },
25
+ "./stdlib/*": {
26
+ "import": "./dist/stdlib/*.js",
27
+ "types": "./dist/stdlib/*.d.ts"
28
+ },
29
+ "./ui/*": {
30
+ "import": "./dist/ui/*.js",
31
+ "types": "./dist/ui/*.d.ts"
32
+ },
33
+ "./pwa/*": {
34
+ "import": "./dist/pwa/*.js",
35
+ "types": "./dist/pwa/*.d.ts"
36
+ }
37
+ },
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "dev": "tsc --watch",
41
+ "typecheck": "tsc --noEmit",
42
+ "test": "vitest run",
43
+ "test:watch": "vitest"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^20.0.0",
47
+ "typescript": "^5.0.0",
48
+ "vitest": "^4.1.0"
49
+ },
50
+ "keywords": [
51
+ "jade",
52
+ "runtime",
53
+ "webassembly",
54
+ "event-loop",
55
+ "ui-engine",
56
+ "enterprise",
57
+ "portuguese"
58
+ ],
59
+ "author": "yakuzaa",
60
+ "license": "MIT",
61
+ "repository": {
62
+ "type": "git",
63
+ "url": "https://github.com/yakuzaa/jade.git",
64
+ "directory": "jade-runtime"
65
+ },
66
+ "homepage": "https://github.com/yakuzaa/jade",
67
+ "bugs": {
68
+ "url": "https://github.com/yakuzaa/jade/issues"
69
+ },
70
+ "engines": {
71
+ "node": ">=20.0.0"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
75
+ }
76
+ }