@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,212 @@
1
+ /**
2
+ * Parser XML básico para o runtime JADE
3
+ * Suporta XML simples e NF-e brasileira (com namespaces xmlns)
4
+ * Acessível via XML.parse(texto) no código JADE
5
+ */
6
+ export class XMLStdlib {
7
+ /**
8
+ * Faz parse de uma string XML e retorna um objeto navegável
9
+ * Tags com namespace (ex: nfe:det) são normalizadas para o nome local (det)
10
+ */
11
+ static parse(xmlTexto) {
12
+ const texto = xmlTexto.trim();
13
+ // Usa DOMParser se disponível (browser)
14
+ if (typeof DOMParser !== 'undefined') {
15
+ const parser = new DOMParser();
16
+ const doc = parser.parseFromString(texto, 'text/xml');
17
+ const erros = doc.getElementsByTagName('parsererror');
18
+ if (erros.length > 0) {
19
+ throw new Error('XML inválido: ' + erros[0].textContent);
20
+ }
21
+ return XMLStdlib._domToNode(doc.documentElement);
22
+ }
23
+ // Fallback: parser manual para Node.js
24
+ return XMLStdlib._parseManual(texto);
25
+ }
26
+ /**
27
+ * Busca o primeiro elemento com a tag informada (busca em profundidade)
28
+ * Ignora prefixos de namespace: buscar(xml, 'det') encontra tanto <det> quanto <nfe:det>
29
+ */
30
+ static buscar(no, tag) {
31
+ if (no.tag === tag)
32
+ return no;
33
+ for (const filho of no.filhos) {
34
+ const encontrado = XMLStdlib.buscar(filho, tag);
35
+ if (encontrado)
36
+ return encontrado;
37
+ }
38
+ return null;
39
+ }
40
+ /**
41
+ * Busca todos os elementos com a tag informada
42
+ * Ignora prefixos de namespace
43
+ */
44
+ static buscarTodos(no, tag) {
45
+ const resultado = [];
46
+ XMLStdlib._buscarTodosRec(no, tag, resultado);
47
+ return resultado;
48
+ }
49
+ /**
50
+ * Retorna o texto de um elemento filho pelo nome da tag
51
+ * Atalho para: xml.buscar(no, tag)?.texto ?? ''
52
+ */
53
+ static texto(no, tag) {
54
+ return XMLStdlib.buscar(no, tag)?.texto ?? '';
55
+ }
56
+ /**
57
+ * Converte XMLNode de volta para string XML
58
+ */
59
+ static serializar(no) {
60
+ const attrs = Object.entries(no.atributos)
61
+ .map(([k, v]) => ` ${k}="${v}"`)
62
+ .join('');
63
+ if (no.filhos.length === 0 && !no.texto) {
64
+ return `<${no.tag}${attrs}/>`;
65
+ }
66
+ const conteudo = no.texto || no.filhos.map(f => XMLStdlib.serializar(f)).join('');
67
+ return `<${no.tag}${attrs}>${conteudo}</${no.tag}>`;
68
+ }
69
+ // ── NF-e helpers ─────────────────────────────────────────
70
+ /**
71
+ * Extrai campos principais de uma NF-e (Nota Fiscal Eletrônica)
72
+ * Funciona com NF-e com ou sem namespace (xmlns:nfe=...)
73
+ */
74
+ static parsarNFe(xmlNFe) {
75
+ const xml = XMLStdlib.parse(xmlNFe);
76
+ const ide = XMLStdlib.buscar(xml, 'ide');
77
+ const emit = XMLStdlib.buscar(xml, 'emit');
78
+ const dest = XMLStdlib.buscar(xml, 'dest');
79
+ const total = XMLStdlib.buscar(xml, 'ICMSTot');
80
+ const infNFe = XMLStdlib.buscar(xml, 'infNFe');
81
+ const itensXML = XMLStdlib.buscarTodos(xml, 'det');
82
+ const itens = itensXML.map(det => {
83
+ const prod = XMLStdlib.buscar(det, 'prod');
84
+ return {
85
+ descricao: XMLStdlib.texto(prod, 'xProd'),
86
+ quantidade: parseFloat(XMLStdlib.texto(prod, 'qCom') || '0'),
87
+ valorUnitario: parseFloat(XMLStdlib.texto(prod, 'vUnCom') || '0'),
88
+ valorTotal: parseFloat(XMLStdlib.texto(prod, 'vProd') || '0'),
89
+ };
90
+ });
91
+ return {
92
+ chave: infNFe?.atributos['Id']?.replace('NFe', '') ?? '',
93
+ numero: XMLStdlib.texto(ide, 'nNF'),
94
+ serie: XMLStdlib.texto(ide, 'serie'),
95
+ dataEmissao: XMLStdlib.texto(ide, 'dhEmi'),
96
+ cnpjEmitente: XMLStdlib.texto(emit, 'CNPJ'),
97
+ nomeEmitente: XMLStdlib.texto(emit, 'xNome'),
98
+ cnpjDestinatario: XMLStdlib.texto(dest, 'CNPJ'),
99
+ nomeDestinatario: XMLStdlib.texto(dest, 'xNome'),
100
+ valorTotal: parseFloat(XMLStdlib.texto(total, 'vNF') || '0'),
101
+ itens,
102
+ };
103
+ }
104
+ // ── Internos ─────────────────────────────────────────────
105
+ /**
106
+ * Extrai o nome local de uma tag (remove prefixo de namespace)
107
+ * "nfe:det" → "det", "det" → "det"
108
+ */
109
+ static _localName(tag) {
110
+ const sep = tag.indexOf(':');
111
+ return sep !== -1 ? tag.slice(sep + 1) : tag;
112
+ }
113
+ static _domToNode(el) {
114
+ const atributos = {};
115
+ for (let i = 0; i < el.attributes.length; i++) {
116
+ const attr = el.attributes[i];
117
+ // Pular declarações de namespace (xmlns, xmlns:nfe, etc.)
118
+ if (attr.name === 'xmlns' || attr.name.startsWith('xmlns:'))
119
+ continue;
120
+ atributos[attr.localName] = attr.value;
121
+ }
122
+ const filhos = [];
123
+ let texto = '';
124
+ for (let i = 0; i < el.childNodes.length; i++) {
125
+ const child = el.childNodes[i];
126
+ if (child.nodeType === 1) {
127
+ filhos.push(XMLStdlib._domToNode(child));
128
+ }
129
+ else if (child.nodeType === 3) {
130
+ texto += child.textContent ?? '';
131
+ }
132
+ }
133
+ // Usa localName para ignorar prefixos de namespace (nfe:det → det)
134
+ return { tag: el.localName, atributos, filhos, texto: texto.trim() };
135
+ }
136
+ static _buscarTodosRec(no, tag, resultado) {
137
+ if (no.tag === tag)
138
+ resultado.push(no);
139
+ for (const filho of no.filhos) {
140
+ XMLStdlib._buscarTodosRec(filho, tag, resultado);
141
+ }
142
+ }
143
+ static _parseManual(xml) {
144
+ const semDeclaracao = xml.replace(/<\?[^>]*\?>/g, '').trim();
145
+ return XMLStdlib._parseElemento(semDeclaracao).no;
146
+ }
147
+ static _parseElemento(xml) {
148
+ const tagMatch = xml.match(/^<([^\s/>]+)([^>]*)>/);
149
+ if (!tagMatch)
150
+ return { no: { tag: '#text', atributos: {}, filhos: [], texto: xml }, resto: '' };
151
+ // Normaliza prefixo de namespace: "nfe:det" → "det"
152
+ const tag = XMLStdlib._localName(tagMatch[1]);
153
+ const attrsStr = tagMatch[2];
154
+ const atributos = XMLStdlib._parseAtributos(attrsStr);
155
+ if (attrsStr.trimEnd().endsWith('/')) {
156
+ return { no: { tag, atributos, filhos: [], texto: '' }, resto: xml.slice(tagMatch[0].length) };
157
+ }
158
+ let resto = xml.slice(tagMatch[0].length);
159
+ const filhos = [];
160
+ let texto = '';
161
+ // Encerra o bloco ao encontrar qualquer tag de fechamento da tag local
162
+ const fechamentoRegex = new RegExp(`^</(?:[^:/>]+:)?${tag}>`);
163
+ while (resto && !fechamentoRegex.test(resto)) {
164
+ if (resto.startsWith('<') && !resto.startsWith('</')) {
165
+ const result = XMLStdlib._parseElemento(resto);
166
+ filhos.push(result.no);
167
+ resto = result.resto;
168
+ }
169
+ else if (resto.startsWith('</')) {
170
+ break;
171
+ }
172
+ else {
173
+ const textEnd = resto.indexOf('<');
174
+ if (textEnd === -1) {
175
+ texto += resto;
176
+ resto = '';
177
+ }
178
+ else {
179
+ texto += resto.slice(0, textEnd);
180
+ resto = resto.slice(textEnd);
181
+ }
182
+ }
183
+ }
184
+ // Consome tag de fechamento (com ou sem namespace)
185
+ const fechamentoMatch = resto.match(/^<\/(?:[^:/>]+:)?([^>]+)>/);
186
+ if (fechamentoMatch)
187
+ resto = resto.slice(fechamentoMatch[0].length).trim();
188
+ return { no: { tag, atributos, filhos, texto: texto.trim() }, resto };
189
+ }
190
+ static _parseAtributos(attrsStr) {
191
+ const atributos = {};
192
+ const regex = /(\w[\w:.-]*)=["']([^"']*)["']/g;
193
+ let match;
194
+ while ((match = regex.exec(attrsStr)) !== null) {
195
+ const nome = XMLStdlib._localName(match[1]);
196
+ // Pular declarações de namespace
197
+ if (match[1] === 'xmlns' || match[1].startsWith('xmlns:'))
198
+ continue;
199
+ atributos[nome] = match[2];
200
+ }
201
+ return atributos;
202
+ }
203
+ }
204
+ export const XMLMetodos = {
205
+ parse: XMLStdlib.parse,
206
+ buscar: XMLStdlib.buscar,
207
+ buscarTodos: XMLStdlib.buscarTodos,
208
+ texto: XMLStdlib.texto,
209
+ serializar: XMLStdlib.serializar,
210
+ parsarNFe: XMLStdlib.parsarNFe,
211
+ };
212
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../stdlib/xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Signal } from './reactive.js';
2
+ /**
3
+ * Liga um Signal a uma propriedade de qualquer nó DOM.
4
+ * Quando o Signal muda, a propriedade é atualizada automaticamente.
5
+ */
6
+ export declare function bind(signal: Signal<any>, node: Node, property: string): void;
7
+ /**
8
+ * Two-way binding para campos de formulário.
9
+ * Signal → campo: atualiza o valor visual.
10
+ * Campo → Signal: atualiza quando o usuário digita.
11
+ */
12
+ export declare function bindInput(node: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement, signal: Signal<string>): void;
13
+ /**
14
+ * Liga a visibilidade de um elemento a um Signal booleano.
15
+ * false → display:none, true → display volta ao normal.
16
+ */
17
+ export declare function bindVisible(node: HTMLElement, signal: Signal<boolean>): void;
18
+ /**
19
+ * Adiciona/remove uma classe CSS baseado em um Signal booleano.
20
+ */
21
+ export declare function bindClass(node: HTMLElement, className: string, signal: Signal<boolean>): void;
22
+ //# sourceMappingURL=binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../ui/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;AAErD;;;GAGG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAmB5E;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,mBAAmB,EAChE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GACrB,IAAI,CAGN;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAI5E;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GACtB,IAAI,CAQN"}
@@ -0,0 +1,62 @@
1
+ import { createEffect } from './reactive.js';
2
+ /**
3
+ * Liga um Signal a uma propriedade de qualquer nó DOM.
4
+ * Quando o Signal muda, a propriedade é atualizada automaticamente.
5
+ */
6
+ export function bind(signal, node, property) {
7
+ createEffect(() => {
8
+ const value = signal.get();
9
+ if (property === 'textContent') {
10
+ node.textContent = String(value ?? '');
11
+ }
12
+ else if (node instanceof HTMLElement) {
13
+ if (property === 'style.display') {
14
+ node.style.display = value ? '' : 'none';
15
+ }
16
+ else if (property.startsWith('style.')) {
17
+ node.style[property.slice(6)] = String(value);
18
+ }
19
+ else if (property === 'disabled') {
20
+ node.disabled = Boolean(value);
21
+ }
22
+ else if (property === 'class') {
23
+ node.className = String(value ?? '');
24
+ }
25
+ else {
26
+ node[property] = value;
27
+ }
28
+ }
29
+ });
30
+ }
31
+ /**
32
+ * Two-way binding para campos de formulário.
33
+ * Signal → campo: atualiza o valor visual.
34
+ * Campo → Signal: atualiza quando o usuário digita.
35
+ */
36
+ export function bindInput(node, signal) {
37
+ bind(signal, node, 'value');
38
+ node.addEventListener('input', () => signal.set(node.value));
39
+ }
40
+ /**
41
+ * Liga a visibilidade de um elemento a um Signal booleano.
42
+ * false → display:none, true → display volta ao normal.
43
+ */
44
+ export function bindVisible(node, signal) {
45
+ createEffect(() => {
46
+ node.style.display = signal.get() ? '' : 'none';
47
+ });
48
+ }
49
+ /**
50
+ * Adiciona/remove uma classe CSS baseado em um Signal booleano.
51
+ */
52
+ export function bindClass(node, className, signal) {
53
+ createEffect(() => {
54
+ if (signal.get()) {
55
+ node.classList.add(className);
56
+ }
57
+ else {
58
+ node.classList.remove(className);
59
+ }
60
+ });
61
+ }
62
+ //# sourceMappingURL=binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../ui/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,MAAmB,EAAE,IAAU,EAAE,QAAgB;IACpE,YAAY,CAAC,GAAG,EAAE;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YACvC,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3C,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAClC,IAAyB,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACL,IAAY,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,IAAgE,EAChE,MAAsB;IAEtB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAE,IAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAiB,EAAE,MAAuB;IACpE,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,IAAiB,EACjB,SAAiB,EACjB,MAAuB;IAEvB,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { UIEngine } from '../ui_engine.js';
2
+ import { Signal } from '../reactive.js';
3
+ export declare function renderBotao(engine: UIEngine, texto: string, handler: () => void, container: HTMLElement, tipo?: 'primario' | 'secundario' | 'perigo', desabilitado?: Signal<boolean>): HTMLButtonElement;
4
+ //# sourceMappingURL=botao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botao.d.ts","sourceRoot":"","sources":["../../../ui/components/botao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,wBAAgB,WAAW,CACzB,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,IAAI,EACnB,SAAS,EAAE,WAAW,EACtB,IAAI,GAAE,UAAU,GAAG,YAAY,GAAG,QAAqB,EACvD,YAAY,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAC7B,iBAAiB,CAEnB"}
@@ -0,0 +1,4 @@
1
+ export function renderBotao(engine, texto, handler, container, tipo = 'primario', desabilitado) {
2
+ return engine.criarBotao(texto, handler, container, { tipo, desabilitado });
3
+ }
4
+ //# sourceMappingURL=botao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botao.js","sourceRoot":"","sources":["../../../ui/components/botao.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CACzB,MAAgB,EAChB,KAAa,EACb,OAAmB,EACnB,SAAsB,EACtB,OAA6C,UAAU,EACvD,YAA8B;IAE9B,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { UIEngine, CampoConfig } from '../ui_engine.js';
2
+ import { Signal } from '../reactive.js';
3
+ /**
4
+ * Renderiza um campo de formulário isolado (fora de um formulário completo).
5
+ * Útil para filtros, buscas rápidas ou campos avulsos em telas.
6
+ */
7
+ export declare function renderCampo(engine: UIEngine, config: CampoConfig, container: HTMLElement): Signal<string>;
8
+ //# sourceMappingURL=campo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campo.d.ts","sourceRoot":"","sources":["../../../ui/components/campo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,WAAW,GACrB,MAAM,CAAC,MAAM,CAAC,CAMhB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Renderiza um campo de formulário isolado (fora de um formulário completo).
3
+ * Útil para filtros, buscas rápidas ou campos avulsos em telas.
4
+ */
5
+ export function renderCampo(engine, config, container) {
6
+ const signals = engine.criarFormulario({ entidade: '_campo', campos: [config] }, container);
7
+ return signals[config.nome];
8
+ }
9
+ //# sourceMappingURL=campo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campo.js","sourceRoot":"","sources":["../../../ui/components/campo.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,MAAgB,EAChB,MAAmB,EACnB,SAAsB;IAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CACpC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EACxC,SAAS,CACV,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { UIEngine } from '../ui_engine.js';
2
+ import { Signal } from '../reactive.js';
3
+ export declare function renderCard(engine: UIEngine, titulo: string, valor: Signal<any>, container: HTMLElement): void;
4
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../ui/components/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,wBAAgB,UAAU,CACxB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAClB,SAAS,EAAE,WAAW,GACrB,IAAI,CAEN"}
@@ -0,0 +1,4 @@
1
+ export function renderCard(engine, titulo, valor, container) {
2
+ engine.criarCard(titulo, valor, container);
3
+ }
4
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../ui/components/card.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CACxB,MAAgB,EAChB,MAAc,EACd,KAAkB,EAClB,SAAsB;IAEtB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { UIEngine, FormularioConfig } from '../ui_engine.js';
2
+ import { Signal } from '../reactive.js';
3
+ export declare function renderFormulario(engine: UIEngine, config: FormularioConfig, container: HTMLElement): Record<string, Signal<string>>;
4
+ //# sourceMappingURL=formulario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formulario.d.ts","sourceRoot":"","sources":["../../../ui/components/formulario.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,WAAW,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAEhC"}
@@ -0,0 +1,4 @@
1
+ export function renderFormulario(engine, config, container) {
2
+ return engine.criarFormulario(config, container);
3
+ }
4
+ //# sourceMappingURL=formulario.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formulario.js","sourceRoot":"","sources":["../../../ui/components/formulario.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,gBAAgB,CAC9B,MAAgB,EAChB,MAAwB,EACxB,SAAsB;IAEtB,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { UIEngine, TabelaConfig } from '../ui_engine.js';
2
+ export declare function renderTabela(engine: UIEngine, config: TabelaConfig, dados: any[], container: HTMLElement): void;
3
+ //# sourceMappingURL=tabela.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabela.d.ts","sourceRoot":"","sources":["../../../ui/components/tabela.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,GAAG,EAAE,EACZ,SAAS,EAAE,WAAW,GACrB,IAAI,CAEN"}
@@ -0,0 +1,4 @@
1
+ export function renderTabela(engine, config, dados, container) {
2
+ engine.criarTabela(config, container, dados);
3
+ }
4
+ //# sourceMappingURL=tabela.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabela.js","sourceRoot":"","sources":["../../../ui/components/tabela.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAC1B,MAAgB,EAChB,MAAoB,EACpB,KAAY,EACZ,SAAsB;IAEtB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,61 @@
1
+ type EffectFn = () => void;
2
+ export type DisposeEffect = () => void;
3
+ /**
4
+ * Define qual "dono" será registrado nos próximos createEffect.
5
+ * Chamar com null para parar o rastreamento.
6
+ */
7
+ export declare function setEffectOwner(owner: string | null): void;
8
+ /**
9
+ * Descarta todos os efeitos registrados sob `owner`.
10
+ * Efeitos descartados não são mais executados quando Signals mudam.
11
+ * Chamar ao destruir uma tela para evitar vazamento de memória.
12
+ */
13
+ export declare function disposeOwner(owner: string): void;
14
+ /**
15
+ * Valor reativo. Componentes que leram via .get() são re-executados
16
+ * automaticamente quando o valor muda via .set().
17
+ */
18
+ export declare class Signal<T> {
19
+ private _value;
20
+ private subs;
21
+ constructor(initialValue: T);
22
+ /** Lê o valor e registra o efeito atual como dependente. */
23
+ get(): T;
24
+ /** Atualiza o valor e re-executa todos os efeitos dependentes. */
25
+ set(newValue: T): void;
26
+ /** Lê o valor sem registrar dependência. */
27
+ peek(): T;
28
+ }
29
+ /**
30
+ * Executa `fn` imediatamente e re-executa toda vez que qualquer Signal
31
+ * lido dentro de `fn` mudar.
32
+ *
33
+ * Retorna uma função `dispose` que cancela permanentemente o efeito.
34
+ * CORREÇÃO: ao contrário do briefing original, efeitos descartados não
35
+ * continuam tentando atualizar DOM de telas já destruídas.
36
+ */
37
+ export declare function createEffect(fn: EffectFn): DisposeEffect;
38
+ /**
39
+ * Valor derivado: recalculado automaticamente quando as dependências mudam.
40
+ */
41
+ export declare function computed<T>(fn: () => T): Signal<T>;
42
+ /**
43
+ * Repositório global de Signals, acessados por chave string.
44
+ * Chaves seguem o padrão `Entidade.indice.campo` (ex: `Produto.0.preco`).
45
+ */
46
+ export declare class Store {
47
+ private signals;
48
+ set<T>(key: string, value: T): void;
49
+ get<T>(key: string, defaultValue?: T): Signal<T>;
50
+ has(key: string): boolean;
51
+ /**
52
+ * Remove todas as chaves com o prefixo indicado.
53
+ * CORREÇÃO: evita acúmulo de dados de telas antigas na memória.
54
+ * Exemplo: clearNamespace('tela-produtos.') remove só os dados dessa tela.
55
+ */
56
+ clearNamespace(prefix: string): void;
57
+ clear(): void;
58
+ size(): number;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=reactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../../ui/reactive.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAC3B,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AAiBvC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKhD;AAID;;;GAGG;AACH,qBAAa,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,IAAI,CAA2B;gBAE3B,YAAY,EAAE,CAAC;IAI3B,4DAA4D;IAC5D,GAAG,IAAI,CAAC;IAKR,kEAAkE;IAClE,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI;IAYtB,4CAA4C;IAC5C,IAAI,IAAI,CAAC;CAGV;AAID;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,aAAa,CA4BxD;AAID;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAIlD;AAID;;;GAGG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAkC;IAEjD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAQnC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAOhD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMpC,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,MAAM;CAGf"}
@@ -0,0 +1,149 @@
1
+ // ── Tipos internos ───────────────────────────────────────────────────────────
2
+ // ── Rastreamento de contexto ─────────────────────────────────────────────────
3
+ // Qual handle está sendo executado no momento (para auto-subscrição)
4
+ let currentEffect = null;
5
+ // Efeitos agrupados por "dono" (nome da tela ou componente)
6
+ // Permite descartar todos os efeitos de uma tela quando ela é destruída
7
+ const effectsByOwner = new Map();
8
+ let currentOwner = null;
9
+ /**
10
+ * Define qual "dono" será registrado nos próximos createEffect.
11
+ * Chamar com null para parar o rastreamento.
12
+ */
13
+ export function setEffectOwner(owner) {
14
+ currentOwner = owner;
15
+ }
16
+ /**
17
+ * Descarta todos os efeitos registrados sob `owner`.
18
+ * Efeitos descartados não são mais executados quando Signals mudam.
19
+ * Chamar ao destruir uma tela para evitar vazamento de memória.
20
+ */
21
+ export function disposeOwner(owner) {
22
+ for (const h of effectsByOwner.get(owner) ?? []) {
23
+ h.disposed = true;
24
+ }
25
+ effectsByOwner.delete(owner);
26
+ }
27
+ // ── Signal ───────────────────────────────────────────────────────────────────
28
+ /**
29
+ * Valor reativo. Componentes que leram via .get() são re-executados
30
+ * automaticamente quando o valor muda via .set().
31
+ */
32
+ export class Signal {
33
+ _value;
34
+ subs = new Set();
35
+ constructor(initialValue) {
36
+ this._value = initialValue;
37
+ }
38
+ /** Lê o valor e registra o efeito atual como dependente. */
39
+ get() {
40
+ if (currentEffect)
41
+ this.subs.add(currentEffect);
42
+ return this._value;
43
+ }
44
+ /** Atualiza o valor e re-executa todos os efeitos dependentes. */
45
+ set(newValue) {
46
+ if (newValue === this._value)
47
+ return; // mesmo valor: não dispara nada
48
+ this._value = newValue;
49
+ for (const h of [...this.subs]) {
50
+ if (h.disposed) {
51
+ this.subs.delete(h); // limpar handles mortos automaticamente
52
+ }
53
+ else {
54
+ h.fn();
55
+ }
56
+ }
57
+ }
58
+ /** Lê o valor sem registrar dependência. */
59
+ peek() {
60
+ return this._value;
61
+ }
62
+ }
63
+ // ── createEffect ─────────────────────────────────────────────────────────────
64
+ /**
65
+ * Executa `fn` imediatamente e re-executa toda vez que qualquer Signal
66
+ * lido dentro de `fn` mudar.
67
+ *
68
+ * Retorna uma função `dispose` que cancela permanentemente o efeito.
69
+ * CORREÇÃO: ao contrário do briefing original, efeitos descartados não
70
+ * continuam tentando atualizar DOM de telas já destruídas.
71
+ */
72
+ export function createEffect(fn) {
73
+ const handle = { fn: () => { }, disposed: false };
74
+ const wrapped = () => {
75
+ if (handle.disposed)
76
+ return;
77
+ const prev = currentEffect;
78
+ currentEffect = handle;
79
+ try {
80
+ fn();
81
+ }
82
+ finally {
83
+ currentEffect = prev; // restaurar contexto anterior (suporte a aninhamento)
84
+ }
85
+ };
86
+ handle.fn = wrapped;
87
+ // Registrar sob o dono atual para descarte em lote
88
+ if (currentOwner !== null) {
89
+ const arr = effectsByOwner.get(currentOwner) ?? [];
90
+ arr.push(handle);
91
+ effectsByOwner.set(currentOwner, arr);
92
+ }
93
+ wrapped(); // execução inicial
94
+ return () => {
95
+ handle.disposed = true;
96
+ };
97
+ }
98
+ // ── computed ─────────────────────────────────────────────────────────────────
99
+ /**
100
+ * Valor derivado: recalculado automaticamente quando as dependências mudam.
101
+ */
102
+ export function computed(fn) {
103
+ const s = new Signal(fn());
104
+ createEffect(() => s.set(fn()));
105
+ return s;
106
+ }
107
+ // ── Store ────────────────────────────────────────────────────────────────────
108
+ /**
109
+ * Repositório global de Signals, acessados por chave string.
110
+ * Chaves seguem o padrão `Entidade.indice.campo` (ex: `Produto.0.preco`).
111
+ */
112
+ export class Store {
113
+ signals = new Map();
114
+ set(key, value) {
115
+ if (this.signals.has(key)) {
116
+ this.signals.get(key).set(value);
117
+ }
118
+ else {
119
+ this.signals.set(key, new Signal(value));
120
+ }
121
+ }
122
+ get(key, defaultValue) {
123
+ if (!this.signals.has(key)) {
124
+ this.signals.set(key, new Signal(defaultValue));
125
+ }
126
+ return this.signals.get(key);
127
+ }
128
+ has(key) {
129
+ return this.signals.has(key);
130
+ }
131
+ /**
132
+ * Remove todas as chaves com o prefixo indicado.
133
+ * CORREÇÃO: evita acúmulo de dados de telas antigas na memória.
134
+ * Exemplo: clearNamespace('tela-produtos.') remove só os dados dessa tela.
135
+ */
136
+ clearNamespace(prefix) {
137
+ for (const key of this.signals.keys()) {
138
+ if (key.startsWith(prefix))
139
+ this.signals.delete(key);
140
+ }
141
+ }
142
+ clear() {
143
+ this.signals.clear();
144
+ }
145
+ size() {
146
+ return this.signals.size;
147
+ }
148
+ }
149
+ //# sourceMappingURL=reactive.js.map