@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 @@
1
+ {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../ui/reactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * RefManager — escape hatch para operações imperativas no DOM.
3
+ * Usar quando Signals não são suficientes: foco, scroll, medição de tamanho.
4
+ */
5
+ export declare class RefManager {
6
+ private refs;
7
+ registrar(nome: string, elemento: HTMLElement): void;
8
+ obter(nome: string): HTMLElement | null;
9
+ focar(nome: string): void;
10
+ rolar(nome: string, comportamento?: ScrollBehavior): void;
11
+ limpar(): void;
12
+ }
13
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../ui/refs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAkC;IAE9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAIpD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWzB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,cAAyB,GAAG,IAAI;IAInE,MAAM,IAAI,IAAI;CAGf"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * RefManager — escape hatch para operações imperativas no DOM.
3
+ * Usar quando Signals não são suficientes: foco, scroll, medição de tamanho.
4
+ */
5
+ export class RefManager {
6
+ refs = new Map();
7
+ registrar(nome, elemento) {
8
+ this.refs.set(nome, elemento);
9
+ }
10
+ obter(nome) {
11
+ return this.refs.get(nome) ?? null;
12
+ }
13
+ focar(nome) {
14
+ const el = this.refs.get(nome);
15
+ if (!el)
16
+ return;
17
+ if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
18
+ el.focus();
19
+ el.select();
20
+ }
21
+ else {
22
+ el.focus();
23
+ }
24
+ }
25
+ rolar(nome, comportamento = 'smooth') {
26
+ this.refs.get(nome)?.scrollIntoView({ behavior: comportamento, block: 'nearest' });
27
+ }
28
+ limpar() {
29
+ this.refs.clear();
30
+ }
31
+ }
32
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../ui/refs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,UAAU;IACb,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,SAAS,CAAC,IAAY,EAAE,QAAqB;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,EAAE,YAAY,gBAAgB,IAAI,EAAE,YAAY,mBAAmB,EAAE,CAAC;YACxE,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,gBAAgC,QAAQ;QAC1D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ import { Store } from './reactive.js';
2
+ import { MemoryManager } from '../core/memory_manager.js';
3
+ export interface RotaConfig {
4
+ caminho: string;
5
+ tela: string;
6
+ requerPapel?: string;
7
+ }
8
+ export interface UsuarioSessao {
9
+ roles: string[];
10
+ [key: string]: any;
11
+ }
12
+ export declare class Router {
13
+ private store;
14
+ private memory;
15
+ private rotas;
16
+ private handlers;
17
+ private telaAtiva;
18
+ private container;
19
+ private usuarioAtual;
20
+ constructor(store: Store, memory: MemoryManager);
21
+ /**
22
+ * Define o usuário logado. Necessário para verificar permissões de tela.
23
+ * Passar null para fazer logout (sem usuário = sem acesso a rotas protegidas).
24
+ */
25
+ setUsuario(usuario: UsuarioSessao | null): void;
26
+ /** Registra uma rota com seu handler de renderização. */
27
+ registrar(caminho: string, tela: string, handler: () => HTMLElement, requerPapel?: string): void;
28
+ /**
29
+ * Monta o router em um container e renderiza a rota atual.
30
+ * CORREÇÃO: o briefing original só escutava `popstate` mas não renderizava
31
+ * a rota inicial — a tela aparecia em branco ao abrir o app.
32
+ */
33
+ montar(container: HTMLElement): void;
34
+ /** Navega para uma rota via History API. */
35
+ navegar(caminho: string): void;
36
+ private renderRota;
37
+ rotaAtiva(): string | null;
38
+ }
39
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../ui/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgC,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,MAAM;IAQf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,YAAY,CAA8B;gBAGxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa;IAG/B;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAI/C,yDAAyD;IACzD,SAAS,CACP,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,WAAW,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI;IAKP;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAMpC,4CAA4C;IAC5C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B,OAAO,CAAC,UAAU;IAiClB,SAAS,IAAI,MAAM,GAAG,IAAI;CAG3B"}
@@ -0,0 +1,74 @@
1
+ import { disposeOwner, setEffectOwner } from './reactive.js';
2
+ export class Router {
3
+ store;
4
+ memory;
5
+ rotas = new Map();
6
+ handlers = new Map();
7
+ telaAtiva = null;
8
+ container = null;
9
+ usuarioAtual = null;
10
+ constructor(store, memory) {
11
+ this.store = store;
12
+ this.memory = memory;
13
+ }
14
+ /**
15
+ * Define o usuário logado. Necessário para verificar permissões de tela.
16
+ * Passar null para fazer logout (sem usuário = sem acesso a rotas protegidas).
17
+ */
18
+ setUsuario(usuario) {
19
+ this.usuarioAtual = usuario;
20
+ }
21
+ /** Registra uma rota com seu handler de renderização. */
22
+ registrar(caminho, tela, handler, requerPapel) {
23
+ this.rotas.set(caminho, { caminho, tela, requerPapel });
24
+ this.handlers.set(tela, handler);
25
+ }
26
+ /**
27
+ * Monta o router em um container e renderiza a rota atual.
28
+ * CORREÇÃO: o briefing original só escutava `popstate` mas não renderizava
29
+ * a rota inicial — a tela aparecia em branco ao abrir o app.
30
+ */
31
+ montar(container) {
32
+ this.container = container;
33
+ window.addEventListener('popstate', () => this.renderRota(location.pathname));
34
+ this.renderRota(location.pathname); // ← renderiza a tela inicial imediatamente
35
+ }
36
+ /** Navega para uma rota via History API. */
37
+ navegar(caminho) {
38
+ history.pushState({}, '', caminho);
39
+ this.renderRota(caminho);
40
+ }
41
+ renderRota(caminho) {
42
+ const rota = this.rotas.get(caminho);
43
+ if (!rota || !this.container)
44
+ return;
45
+ // CORREÇÃO: verificar permissão antes de renderizar a tela
46
+ if (rota.requerPapel) {
47
+ const papeis = this.usuarioAtual?.roles ?? [];
48
+ if (!papeis.includes(rota.requerPapel)) {
49
+ this.container.innerHTML =
50
+ '<p class="jade-acesso-negado">Acesso negado: você não tem permissão para acessar esta tela.</p>';
51
+ return;
52
+ }
53
+ }
54
+ // CORREÇÃO: descartar efeitos reativos e liberar memória da tela anterior
55
+ if (this.telaAtiva) {
56
+ disposeOwner(this.telaAtiva);
57
+ this.memory.freeOwner(this.telaAtiva);
58
+ }
59
+ this.telaAtiva = rota.tela;
60
+ this.store.set('rota.ativa', caminho);
61
+ const handler = this.handlers.get(rota.tela);
62
+ if (handler) {
63
+ // Rastrear todos os efeitos criados durante o handler sob o nome da tela
64
+ setEffectOwner(rota.tela);
65
+ this.container.innerHTML = '';
66
+ this.container.appendChild(handler());
67
+ setEffectOwner(null);
68
+ }
69
+ }
70
+ rotaAtiva() {
71
+ return this.telaAtiva;
72
+ }
73
+ }
74
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../ui/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface Tema {
2
+ cor_primaria?: string;
3
+ cor_secundaria?: string;
4
+ cor_fundo?: string;
5
+ cor_texto?: string;
6
+ cor_borda?: string;
7
+ fonte_principal?: string;
8
+ raio_borda?: string;
9
+ espacamento_pequeno?: string;
10
+ espacamento_medio?: string;
11
+ espacamento_grande?: string;
12
+ }
13
+ /**
14
+ * Injeta o stylesheet do JADE no <head>.
15
+ * O desenvolvedor JADE nunca escreve CSS — tudo é controlado pelo tema.
16
+ * Chamado automaticamente pelo UIEngine na inicialização.
17
+ */
18
+ export declare function aplicarTema(tema?: Tema): void;
19
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../ui/theme.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAeD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,IAAS,GAAG,IAAI,CAuKjD"}
@@ -0,0 +1,183 @@
1
+ const temaDefault = {
2
+ cor_primaria: '#2563eb',
3
+ cor_secundaria: '#64748b',
4
+ cor_fundo: '#f8fafc',
5
+ cor_texto: '#1e293b',
6
+ cor_borda: '#e2e8f0',
7
+ fonte_principal: 'system-ui, -apple-system, sans-serif',
8
+ raio_borda: '6px',
9
+ espacamento_pequeno: '4px',
10
+ espacamento_medio: '12px',
11
+ espacamento_grande: '24px',
12
+ };
13
+ /**
14
+ * Injeta o stylesheet do JADE no <head>.
15
+ * O desenvolvedor JADE nunca escreve CSS — tudo é controlado pelo tema.
16
+ * Chamado automaticamente pelo UIEngine na inicialização.
17
+ */
18
+ export function aplicarTema(tema = {}) {
19
+ const t = { ...temaDefault, ...tema };
20
+ document.getElementById('jade-theme')?.remove();
21
+ const style = document.createElement('style');
22
+ style.id = 'jade-theme';
23
+ style.textContent = `
24
+ :root {
25
+ --jade-primaria: ${t.cor_primaria};
26
+ --jade-secundaria: ${t.cor_secundaria};
27
+ --jade-fundo: ${t.cor_fundo};
28
+ --jade-texto: ${t.cor_texto};
29
+ --jade-borda: ${t.cor_borda};
30
+ --jade-fonte: ${t.fonte_principal};
31
+ --jade-raio: ${t.raio_borda};
32
+ --jade-esp-p: ${t.espacamento_pequeno};
33
+ --jade-esp-m: ${t.espacamento_medio};
34
+ --jade-esp-g: ${t.espacamento_grande};
35
+ }
36
+
37
+ * { box-sizing: border-box; margin: 0; padding: 0; }
38
+ body { font-family: var(--jade-fonte); color: var(--jade-texto); background: var(--jade-fundo); }
39
+
40
+ /* Layout principal */
41
+ .jade-app { display: flex; flex-direction: column; min-height: 100vh; }
42
+ .jade-layout { display: flex; flex: 1; }
43
+ .jade-menu { width: 220px; background: #fff; border-right: 1px solid var(--jade-borda);
44
+ padding: var(--jade-esp-m); flex-shrink: 0; }
45
+ .jade-conteudo { flex: 1; padding: var(--jade-esp-g); overflow-y: auto; }
46
+
47
+ /* Menu lateral */
48
+ .jade-menu-item { display: block; padding: 8px var(--jade-esp-m); border-radius: var(--jade-raio);
49
+ text-decoration: none; color: var(--jade-texto); font-size: 14px; cursor: pointer;
50
+ transition: background 0.15s; }
51
+ .jade-menu-item:hover { background: var(--jade-fundo); }
52
+ .jade-menu-item.ativo { background: var(--jade-primaria); color: #fff; }
53
+
54
+ /* Tela */
55
+ .jade-tela { max-width: 1200px; }
56
+ .jade-tela-titulo { font-size: 22px; font-weight: 500; margin-bottom: var(--jade-esp-g);
57
+ color: var(--jade-texto); }
58
+
59
+ /* Tabela */
60
+ .jade-tabela-wrapper { width: 100%; }
61
+ .jade-tabela-controles { display: flex; gap: var(--jade-esp-m); margin-bottom: var(--jade-esp-m);
62
+ align-items: center; flex-wrap: wrap; }
63
+ .jade-tabela-busca { padding: 7px 12px; border: 1px solid var(--jade-borda);
64
+ border-radius: var(--jade-raio); font-size: 14px; font-family: var(--jade-fonte);
65
+ outline: none; min-width: 200px; }
66
+ .jade-tabela-busca:focus { border-color: var(--jade-primaria); }
67
+ .jade-tabela { width: 100%; border: 1px solid var(--jade-borda); border-radius: var(--jade-raio);
68
+ overflow: hidden; }
69
+ .jade-tabela table { width: 100%; border-collapse: collapse; }
70
+ .jade-tabela th { background: #f1f5f9; padding: 10px 14px; text-align: left; font-size: 13px;
71
+ font-weight: 500; color: var(--jade-secundaria); border-bottom: 1px solid var(--jade-borda);
72
+ white-space: nowrap; }
73
+ .jade-tabela th.ordenavel { cursor: pointer; user-select: none; }
74
+ .jade-tabela th.ordenavel:hover { background: #e2e8f0; }
75
+ .jade-tabela th .jade-sort-icon { margin-left: 4px; opacity: 0.4; }
76
+ .jade-tabela th.sort-asc .jade-sort-icon,
77
+ .jade-tabela th.sort-desc .jade-sort-icon { opacity: 1; }
78
+ .jade-tabela td { padding: 10px 14px; font-size: 14px; border-bottom: 1px solid var(--jade-borda); }
79
+ .jade-tabela tr:last-child td { border-bottom: none; }
80
+ .jade-tabela tr:hover td { background: #f8fafc; }
81
+ .jade-tabela-paginacao { display: flex; gap: var(--jade-esp-p); align-items: center;
82
+ padding: var(--jade-esp-m); justify-content: flex-end; border-top: 1px solid var(--jade-borda);
83
+ font-size: 13px; color: var(--jade-secundaria); }
84
+ .jade-pag-btn { padding: 4px 10px; border: 1px solid var(--jade-borda); border-radius: var(--jade-raio);
85
+ background: #fff; cursor: pointer; font-size: 13px; }
86
+ .jade-pag-btn:hover:not(:disabled) { background: var(--jade-fundo); }
87
+ .jade-pag-btn:disabled { opacity: 0.4; cursor: not-allowed; }
88
+ .jade-pag-btn.ativo { background: var(--jade-primaria); color: #fff; border-color: var(--jade-primaria); }
89
+ .jade-tabela-vazio { padding: 32px; text-align: center; color: var(--jade-secundaria);
90
+ font-size: 14px; }
91
+
92
+ /* Formulário */
93
+ .jade-formulario { display: flex; flex-direction: column; gap: var(--jade-esp-m); max-width: 600px; }
94
+ .jade-campo { display: flex; flex-direction: column; gap: 4px; }
95
+ .jade-campo label { font-size: 13px; font-weight: 500; color: var(--jade-secundaria); }
96
+ .jade-campo input, .jade-campo select, .jade-campo textarea {
97
+ padding: 8px 12px; border: 1px solid var(--jade-borda); border-radius: var(--jade-raio);
98
+ font-size: 14px; font-family: var(--jade-fonte); outline: none;
99
+ transition: border-color 0.15s, box-shadow 0.15s; }
100
+ .jade-campo input:focus, .jade-campo select:focus, .jade-campo textarea:focus {
101
+ border-color: var(--jade-primaria); box-shadow: 0 0 0 3px rgba(37,99,235,0.1); }
102
+ .jade-campo-erro input, .jade-campo-erro select, .jade-campo-erro textarea {
103
+ border-color: #dc2626; }
104
+ .jade-campo-msg-erro { font-size: 12px; color: #dc2626; margin-top: 2px; }
105
+
106
+ /* Botões */
107
+ .jade-botao { padding: 8px 18px; border-radius: var(--jade-raio); font-size: 14px;
108
+ font-family: var(--jade-fonte); cursor: pointer; border: none; font-weight: 500;
109
+ transition: background 0.15s; display: inline-flex; align-items: center; gap: 6px; }
110
+ .jade-botao-primario { background: var(--jade-primaria); color: #fff; }
111
+ .jade-botao-primario:hover:not(:disabled) { background: #1d4ed8; }
112
+ .jade-botao-secundario { background: #fff; color: var(--jade-texto); border: 1px solid var(--jade-borda); }
113
+ .jade-botao-secundario:hover:not(:disabled) { background: var(--jade-fundo); }
114
+ .jade-botao-perigo { background: #dc2626; color: #fff; }
115
+ .jade-botao-perigo:hover:not(:disabled) { background: #b91c1c; }
116
+ .jade-botao:disabled { opacity: 0.5; cursor: not-allowed; }
117
+ .jade-botoes { display: flex; gap: var(--jade-esp-m); margin-top: var(--jade-esp-m); flex-wrap: wrap; }
118
+
119
+ /* Card de métrica */
120
+ .jade-card { background: #fff; border: 1px solid var(--jade-borda); border-radius: var(--jade-raio);
121
+ padding: var(--jade-esp-g); }
122
+ .jade-card-titulo { font-size: 14px; font-weight: 500; color: var(--jade-secundaria); margin-bottom: 8px; }
123
+ .jade-card-valor { font-size: 28px; font-weight: 500; color: var(--jade-texto); }
124
+
125
+ /* Grid responsivo */
126
+ .jade-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
127
+ gap: var(--jade-esp-m); margin-bottom: var(--jade-esp-g); }
128
+
129
+ /* Badge de status */
130
+ .jade-badge { display: inline-block; padding: 2px 8px; border-radius: 9999px;
131
+ font-size: 12px; font-weight: 500; }
132
+ .jade-badge-sucesso { background: #dcfce7; color: #166534; }
133
+ .jade-badge-aviso { background: #fef9c3; color: #854d0e; }
134
+ .jade-badge-erro { background: #fee2e2; color: #991b1b; }
135
+ .jade-badge-info { background: #dbeafe; color: #1e40af; }
136
+
137
+ /* Acesso negado */
138
+ .jade-acesso-negado { padding: 40px; text-align: center; color: #dc2626; font-size: 16px; }
139
+
140
+ /* ── Skeleton / Loading ───────────────────────────────────────────────── */
141
+ /* Animação de "brilho" para indicar conteúdo carregando */
142
+ @keyframes jade-shimmer {
143
+ 0% { background-position: -400px 0; }
144
+ 100% { background-position: 400px 0; }
145
+ }
146
+ .jade-skeleton {
147
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
148
+ background-size: 400px 100%;
149
+ animation: jade-shimmer 1.4s ease-in-out infinite;
150
+ border-radius: var(--jade-raio);
151
+ }
152
+ .jade-skeleton-linha { height: 16px; margin-bottom: 8px; }
153
+ .jade-skeleton-titulo { height: 24px; width: 40%; margin-bottom: var(--jade-esp-m); }
154
+ .jade-skeleton-tabela-linha { height: 41px; margin-bottom: 1px; }
155
+ .jade-carregando { display: flex; flex-direction: column; gap: 8px; padding: var(--jade-esp-m); }
156
+
157
+ /* ── Toast / Notificações ──────────────────────────────────────────────── */
158
+ #jade-toasts { position: fixed; top: 20px; right: 20px; z-index: 9999;
159
+ display: flex; flex-direction: column; gap: 8px; pointer-events: none; }
160
+ .jade-toast { padding: 12px 16px; border-radius: var(--jade-raio); font-size: 14px;
161
+ font-family: var(--jade-fonte); color: #fff; max-width: 340px; box-shadow: 0 4px 12px rgba(0,0,0,0.15);
162
+ pointer-events: auto; display: flex; align-items: center; gap: 8px;
163
+ animation: jade-toast-in 0.25s ease; }
164
+ @keyframes jade-toast-in { from { transform: translateX(20px); opacity: 0; }
165
+ to { transform: translateX(0); opacity: 1; } }
166
+ .jade-toast-saindo { animation: jade-toast-out 0.25s ease forwards; }
167
+ @keyframes jade-toast-out { to { transform: translateX(20px); opacity: 0; } }
168
+ .jade-toast-sucesso { background: #16a34a; }
169
+ .jade-toast-erro { background: #dc2626; }
170
+ .jade-toast-aviso { background: #d97706; }
171
+ .jade-toast-info { background: var(--jade-primaria); }
172
+
173
+ /* Responsivo */
174
+ @media (max-width: 768px) {
175
+ .jade-menu { display: none; }
176
+ .jade-conteudo { padding: var(--jade-esp-m); }
177
+ .jade-grid { grid-template-columns: 1fr; }
178
+ .jade-tela-titulo { font-size: 18px; }
179
+ }
180
+ `;
181
+ document.head.appendChild(style);
182
+ }
183
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../ui/theme.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,GAAmB;IAClC,YAAY,EAAS,SAAS;IAC9B,cAAc,EAAO,SAAS;IAC9B,SAAS,EAAY,SAAS;IAC9B,SAAS,EAAY,SAAS;IAC9B,SAAS,EAAY,SAAS;IAC9B,eAAe,EAAM,sCAAsC;IAC3D,UAAU,EAAW,KAAK;IAC1B,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAI,MAAM;IAC3B,kBAAkB,EAAG,MAAM;CAC5B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAa,EAAE;IACzC,MAAM,CAAC,GAAmB,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC;IAEtD,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,GAAG,YAAY,CAAC;IACxB,KAAK,CAAC,WAAW,GAAG;;2BAEK,CAAC,CAAC,YAAY;2BACd,CAAC,CAAC,cAAc;2BAChB,CAAC,CAAC,SAAS;2BACX,CAAC,CAAC,SAAS;2BACX,CAAC,CAAC,SAAS;2BACX,CAAC,CAAC,eAAe;2BACjB,CAAC,CAAC,UAAU;2BACZ,CAAC,CAAC,mBAAmB;2BACrB,CAAC,CAAC,iBAAiB;2BACnB,CAAC,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkJ5C,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { Store, Signal } from './reactive.js';
2
+ import { RefManager } from './refs.js';
3
+ import { Tema } from './theme.js';
4
+ import { Router } from './router.js';
5
+ import { MemoryManager } from '../core/memory_manager.js';
6
+ export interface TelaConfig {
7
+ nome: string;
8
+ titulo?: string;
9
+ }
10
+ export interface ColunaConfig {
11
+ campo: string;
12
+ titulo: string;
13
+ ordenavel?: boolean;
14
+ }
15
+ export interface TabelaConfig {
16
+ entidade: string;
17
+ colunas: ColunaConfig[];
18
+ virtualList?: boolean;
19
+ rowHeight?: number;
20
+ altura?: string;
21
+ /** Habilita busca por texto acima da tabela */
22
+ filtravel?: boolean;
23
+ /** Habilita clique nos cabeçalhos para ordenar */
24
+ ordenavel?: boolean;
25
+ /** Habilita paginação. true = 20 por página. number = linhas por página. */
26
+ paginacao?: boolean | number;
27
+ }
28
+ export interface CampoConfig {
29
+ nome: string;
30
+ titulo: string;
31
+ tipo: 'texto' | 'numero' | 'decimal' | 'booleano' | 'data' | 'hora' | 'select';
32
+ obrigatorio?: boolean;
33
+ ref?: string;
34
+ opcoes?: Array<{
35
+ valor: string;
36
+ label: string;
37
+ }>;
38
+ placeholder?: string;
39
+ }
40
+ export interface FormularioConfig {
41
+ entidade: string;
42
+ campos: CampoConfig[];
43
+ }
44
+ export type TipoNotificacao = 'sucesso' | 'erro' | 'aviso' | 'info';
45
+ export declare class UIEngine {
46
+ private store;
47
+ private refs;
48
+ private memory;
49
+ private router;
50
+ private telaAtiva;
51
+ private toastContainer;
52
+ constructor(memory: MemoryManager, tema?: Tema);
53
+ /**
54
+ * Monta uma nova tela no container.
55
+ * CORREÇÃO: ao trocar de tela, os efeitos reativos e dados da tela anterior
56
+ * são descartados para evitar vazamento de memória e atualizações fantasma.
57
+ */
58
+ montarTela(config: TelaConfig, container: HTMLElement): HTMLElement;
59
+ /**
60
+ * Cria uma tabela com dados reativos.
61
+ * Suporta: filtro por texto, ordenação por coluna, paginação, VirtualList.
62
+ */
63
+ criarTabela(config: TabelaConfig, container: HTMLElement, dados: any[]): void;
64
+ criarFormulario(config: FormularioConfig, container: HTMLElement): Record<string, Signal<string>>;
65
+ criarBotao(texto: string, handler: () => void, container: HTMLElement, opcoes?: {
66
+ tipo?: 'primario' | 'secundario' | 'perigo';
67
+ desabilitado?: Signal<boolean>;
68
+ icone?: string;
69
+ }): HTMLButtonElement;
70
+ criarCard(titulo: string, valorSignal: Signal<any>, container: HTMLElement): void;
71
+ /** Atualiza um único campo de uma entidade: só o nó DOM daquele campo é re-renderizado. */
72
+ atualizarCampo(entidade: string, index: number, campo: string, valor: any): void;
73
+ /**
74
+ * Exibe um skeleton animado enquanto os dados carregam.
75
+ * Retorna o elemento para que `ocultarCarregando` possa removê-lo.
76
+ */
77
+ mostrarCarregando(container: HTMLElement, linhas?: number): HTMLElement;
78
+ ocultarCarregando(skeleton: HTMLElement): void;
79
+ /**
80
+ * Exibe uma notificação temporária no canto da tela.
81
+ * Desaparece automaticamente após `duracao` ms (padrão 3s).
82
+ */
83
+ mostrarNotificacao(mensagem: string, tipo?: TipoNotificacao, duracao?: number): void;
84
+ focar(nomeRef: string): void;
85
+ getStore(): Store;
86
+ getRefs(): RefManager;
87
+ getRouter(): Router;
88
+ }
89
+ //# sourceMappingURL=ui_engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui_engine.d.ts","sourceRoot":"","sources":["../../ui/ui_engine.ts"],"names":[],"mappings":"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"}