@yakuzaa/jade-runtime 0.1.3 → 0.1.4

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 (60) hide show
  1. package/dist/apis/auth_service.d.ts +5 -1
  2. package/dist/apis/auth_service.d.ts.map +1 -1
  3. package/dist/apis/auth_service.js +29 -9
  4. package/dist/apis/auth_service.js.map +1 -1
  5. package/dist/apis/console_api.d.ts +14 -0
  6. package/dist/apis/console_api.d.ts.map +1 -1
  7. package/dist/apis/console_api.js +18 -0
  8. package/dist/apis/console_api.js.map +1 -1
  9. package/dist/apis/http_client.d.ts +1 -0
  10. package/dist/apis/http_client.d.ts.map +1 -1
  11. package/dist/apis/http_client.js +36 -0
  12. package/dist/apis/http_client.js.map +1 -1
  13. package/dist/browser.d.ts +31 -0
  14. package/dist/browser.d.ts.map +1 -0
  15. package/dist/browser.js +3327 -0
  16. package/dist/browser.js.map +1 -0
  17. package/dist/core/entity_manager.d.ts +33 -0
  18. package/dist/core/entity_manager.d.ts.map +1 -0
  19. package/dist/core/entity_manager.js +52 -0
  20. package/dist/core/entity_manager.js.map +1 -0
  21. package/dist/core/event_loop.d.ts +1 -2
  22. package/dist/core/event_loop.d.ts.map +1 -1
  23. package/dist/core/event_loop.js +32 -13
  24. package/dist/core/event_loop.js.map +1 -1
  25. package/dist/core/rule_engine.d.ts +61 -0
  26. package/dist/core/rule_engine.d.ts.map +1 -0
  27. package/dist/core/rule_engine.js +88 -0
  28. package/dist/core/rule_engine.js.map +1 -0
  29. package/dist/persistence/local_datastore.d.ts +1 -0
  30. package/dist/persistence/local_datastore.d.ts.map +1 -1
  31. package/dist/persistence/local_datastore.js +8 -4
  32. package/dist/persistence/local_datastore.js.map +1 -1
  33. package/dist/persistence/preferencias.d.ts +37 -0
  34. package/dist/persistence/preferencias.d.ts.map +1 -0
  35. package/dist/persistence/preferencias.js +92 -0
  36. package/dist/persistence/preferencias.js.map +1 -0
  37. package/dist/stdlib/fiscal.d.ts +100 -0
  38. package/dist/stdlib/fiscal.d.ts.map +1 -0
  39. package/dist/stdlib/fiscal.js +158 -0
  40. package/dist/stdlib/fiscal.js.map +1 -0
  41. package/dist/stdlib/wms.d.ts +109 -0
  42. package/dist/stdlib/wms.d.ts.map +1 -0
  43. package/dist/stdlib/wms.js +257 -0
  44. package/dist/stdlib/wms.js.map +1 -0
  45. package/dist/ui/components/cartao.d.ts +4 -0
  46. package/dist/ui/components/cartao.d.ts.map +1 -0
  47. package/dist/ui/components/cartao.js +4 -0
  48. package/dist/ui/components/cartao.js.map +1 -0
  49. package/dist/ui/responsive.d.ts +51 -0
  50. package/dist/ui/responsive.d.ts.map +1 -0
  51. package/dist/ui/responsive.js +526 -0
  52. package/dist/ui/responsive.js.map +1 -0
  53. package/dist/ui/router.d.ts.map +1 -1
  54. package/dist/ui/router.js +5 -2
  55. package/dist/ui/router.js.map +1 -1
  56. package/dist/ui/ui_engine.d.ts +25 -2
  57. package/dist/ui/ui_engine.d.ts.map +1 -1
  58. package/dist/ui/ui_engine.js +76 -179
  59. package/dist/ui/ui_engine.js.map +1 -1
  60. package/package.json +5 -3
@@ -0,0 +1,4 @@
1
+ export function renderCartao(engine, titulo, valor, container) {
2
+ engine.criarCard(titulo, valor, container);
3
+ }
4
+ //# sourceMappingURL=cartao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cartao.js","sourceRoot":"","sources":["../../../ui/components/cartao.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,YAAY,CAC1B,MAAgB,EAChB,MAAc,EACd,KAAkB,EAClB,SAAsB;IAEtB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * responsive.ts — Sistema mobile-first do JADE
3
+ *
4
+ * Princípio: o usuário declara O QUE, o sistema decide COMO.
5
+ * tela → tabela → mobile: lista de cards empilhados
6
+ * desktop: grid com colunas
7
+ *
8
+ * Regras (briefing):
9
+ * - Mobile é base, desktop é expansão (nunca o contrário)
10
+ * - Runtime decide layout automaticamente — usuário não controla
11
+ * - Botões com toque mínimo de 44px
12
+ * - Tabela vira lista empilhada no mobile
13
+ * - Menu vira hambúrguer/bottom nav no mobile
14
+ *
15
+ * Não expõe flex/grid/css para o usuário da DSL.
16
+ * Usado por: ui_engine.ts
17
+ */
18
+ import type { TabelaConfig } from './ui_engine.js';
19
+ import { Signal } from './reactive.js';
20
+ export declare class Responsivo {
21
+ private mql;
22
+ private callbacks;
23
+ constructor();
24
+ isMobile(): boolean;
25
+ /** Registra callback para mudança de breakpoint. Retorna função de cleanup. */
26
+ observar(cb: (mobile: boolean) => void): () => void;
27
+ /**
28
+ * Adapta uma tabela automaticamente:
29
+ * mobile → lista de cards empilhados
30
+ * desktop → grid com colunas
31
+ * Troca automaticamente quando o viewport muda.
32
+ */
33
+ adaptarTabela(config: TabelaConfig, wrapper: HTMLElement, dados: any[], termoBusca: Signal<string>, paginaAtual: Signal<number>): void;
34
+ /** Cria navegação adaptativa:
35
+ * mobile → bottom navigation bar
36
+ * desktop → sidebar ou topbar (hidden, gerenciado pelo Router)
37
+ */
38
+ criarNavegacao(container: HTMLElement, itens: Array<{
39
+ label: string;
40
+ icone?: string;
41
+ caminho: string;
42
+ ativo?: boolean;
43
+ }>): HTMLElement;
44
+ /** Injeta o CSS mobile-first base no <head> (idempotente). */
45
+ injetarEstilos(): void;
46
+ private _renderLista;
47
+ private _renderGrid;
48
+ private _filtrarOrdenar;
49
+ private _renderPaginacao;
50
+ }
51
+ //# sourceMappingURL=responsive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.d.ts","sourceRoot":"","sources":["../../ui/responsive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;AAsRrD,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,SAAS,CAAwC;;IASzD,QAAQ,IAAI,OAAO;IAInB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAKnD;;;;;OAKG;IACH,aAAa,CACX,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,GAAG,EAAE,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,GAC1B,IAAI;IAUP;;;OAGG;IACH,cAAc,CACZ,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,GAChF,WAAW;IAmCd,8DAA8D;IAC9D,cAAc,IAAI,IAAI;IAWtB,OAAO,CAAC,YAAY;IA0DpB,OAAO,CAAC,WAAW;IAsGnB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,gBAAgB;CA8BzB"}
@@ -0,0 +1,526 @@
1
+ /**
2
+ * responsive.ts — Sistema mobile-first do JADE
3
+ *
4
+ * Princípio: o usuário declara O QUE, o sistema decide COMO.
5
+ * tela → tabela → mobile: lista de cards empilhados
6
+ * desktop: grid com colunas
7
+ *
8
+ * Regras (briefing):
9
+ * - Mobile é base, desktop é expansão (nunca o contrário)
10
+ * - Runtime decide layout automaticamente — usuário não controla
11
+ * - Botões com toque mínimo de 44px
12
+ * - Tabela vira lista empilhada no mobile
13
+ * - Menu vira hambúrguer/bottom nav no mobile
14
+ *
15
+ * Não expõe flex/grid/css para o usuário da DSL.
16
+ * Usado por: ui_engine.ts
17
+ */
18
+ import { Signal, createEffect } from './reactive.js';
19
+ // ── Breakpoints internos (invisíveis na DSL) ─────────────────────────────────
20
+ const BP_MOBILE = 640; // < 640px → mobile
21
+ const BP_TABLET = 1024; // < 1024px → tablet (trata igual mobile por padrão)
22
+ // ── CSS mobile-first injetado uma única vez no <head> ────────────────────────
23
+ const CSS_ID = 'jade-mobile-first';
24
+ const CSS_BASE = `
25
+ /* ── Reset e base mobile-first ── */
26
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
27
+
28
+ body {
29
+ font-family: system-ui, -apple-system, 'Segoe UI', sans-serif;
30
+ font-size: 16px;
31
+ line-height: 1.5;
32
+ background: var(--jade-fundo, #f9fafb);
33
+ color: var(--jade-texto, #111827);
34
+ -webkit-text-size-adjust: 100%;
35
+ }
36
+
37
+ /* ── Tela ── */
38
+ .jade-tela {
39
+ padding: 16px;
40
+ max-width: 100%;
41
+ }
42
+ .jade-tela-titulo {
43
+ font-size: 1.25rem;
44
+ font-weight: 700;
45
+ margin-bottom: 16px;
46
+ color: var(--jade-texto, #111827);
47
+ }
48
+
49
+ /* ── Toque mínimo 44px (briefing §2.1) ── */
50
+ .jade-botao,
51
+ button,
52
+ [role="button"],
53
+ input[type="submit"],
54
+ input[type="button"] {
55
+ min-height: 44px;
56
+ min-width: 44px;
57
+ padding: 10px 20px;
58
+ font-size: 1rem;
59
+ border-radius: 8px;
60
+ border: none;
61
+ cursor: pointer;
62
+ display: inline-flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ gap: 8px;
66
+ touch-action: manipulation;
67
+ user-select: none;
68
+ -webkit-tap-highlight-color: transparent;
69
+ }
70
+ .jade-botao-primario { background: var(--jade-primaria, #2563eb); color: #fff; }
71
+ .jade-botao-secundario { background: transparent; border: 2px solid var(--jade-primaria, #2563eb); color: var(--jade-primaria, #2563eb); }
72
+ .jade-botao-perigo { background: #dc2626; color: #fff; }
73
+ .jade-botao:disabled { opacity: 0.5; cursor: not-allowed; }
74
+
75
+ /* ── Lista de cards (mobile — padrão base) ── */
76
+ .jade-lista-cards {
77
+ display: flex;
78
+ flex-direction: column;
79
+ gap: 12px;
80
+ }
81
+ .jade-card-item {
82
+ background: #fff;
83
+ border-radius: 12px;
84
+ padding: 16px;
85
+ box-shadow: 0 1px 3px rgba(0,0,0,.08);
86
+ display: grid;
87
+ grid-template-columns: 1fr;
88
+ gap: 8px;
89
+ }
90
+ .jade-card-campo {
91
+ display: flex;
92
+ justify-content: space-between;
93
+ align-items: center;
94
+ gap: 8px;
95
+ font-size: 0.9375rem;
96
+ }
97
+ .jade-campo-label {
98
+ font-weight: 600;
99
+ color: var(--jade-texto-suave, #6b7280);
100
+ white-space: nowrap;
101
+ }
102
+ .jade-campo-valor {
103
+ color: var(--jade-texto, #111827);
104
+ text-align: right;
105
+ word-break: break-word;
106
+ }
107
+
108
+ /* ── Grid de tabela (oculto no mobile — mostrado no desktop) ── */
109
+ .jade-tabela-grid { display: none; }
110
+
111
+ /* ── Controles de tabela ── */
112
+ .jade-tabela-controles { margin-bottom: 12px; }
113
+ .jade-tabela-busca {
114
+ width: 100%;
115
+ min-height: 44px;
116
+ padding: 10px 14px;
117
+ border: 1.5px solid var(--jade-borda, #d1d5db);
118
+ border-radius: 8px;
119
+ font-size: 1rem;
120
+ background: #fff;
121
+ }
122
+
123
+ /* ── Paginação ── */
124
+ .jade-tabela-paginacao {
125
+ display: flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ gap: 8px;
129
+ padding: 12px 0;
130
+ flex-wrap: wrap;
131
+ }
132
+ .jade-pag-btn {
133
+ min-height: 44px;
134
+ min-width: 44px;
135
+ padding: 8px 14px;
136
+ border: 1.5px solid var(--jade-borda, #d1d5db);
137
+ border-radius: 8px;
138
+ background: #fff;
139
+ cursor: pointer;
140
+ font-size: 0.9375rem;
141
+ }
142
+ .jade-pag-btn.ativo { background: var(--jade-primaria, #2563eb); color: #fff; border-color: transparent; }
143
+ .jade-pag-btn:disabled { opacity: 0.4; cursor: not-allowed; }
144
+
145
+ /* ── Formulário ── */
146
+ .jade-formulario { display: flex; flex-direction: column; gap: 16px; }
147
+ .jade-campo { display: flex; flex-direction: column; gap: 6px; }
148
+ .jade-campo label { font-weight: 600; font-size: 0.9375rem; }
149
+ .jade-campo input,
150
+ .jade-campo select,
151
+ .jade-campo textarea {
152
+ min-height: 44px;
153
+ padding: 10px 14px;
154
+ border: 1.5px solid var(--jade-borda, #d1d5db);
155
+ border-radius: 8px;
156
+ font-size: 1rem;
157
+ background: #fff;
158
+ width: 100%;
159
+ }
160
+ .jade-campo-msg-erro { font-size: 0.875rem; color: #dc2626; min-height: 1.25em; }
161
+
162
+ /* ── Card de métrica ── */
163
+ .jade-card {
164
+ background: #fff;
165
+ border-radius: 12px;
166
+ padding: 20px;
167
+ box-shadow: 0 1px 3px rgba(0,0,0,.08);
168
+ }
169
+ .jade-card-titulo { font-size: 0.875rem; color: var(--jade-texto-suave, #6b7280); margin-bottom: 8px; }
170
+ .jade-card-valor { font-size: 1.75rem; font-weight: 700; }
171
+
172
+ /* ── Toast ── */
173
+ #jade-toasts {
174
+ position: fixed;
175
+ bottom: 16px;
176
+ left: 50%;
177
+ transform: translateX(-50%);
178
+ z-index: 9999;
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: 8px;
182
+ width: min(calc(100vw - 32px), 400px);
183
+ }
184
+ .jade-toast {
185
+ padding: 14px 18px;
186
+ border-radius: 10px;
187
+ font-size: 0.9375rem;
188
+ display: flex;
189
+ align-items: center;
190
+ gap: 10px;
191
+ box-shadow: 0 4px 16px rgba(0,0,0,.15);
192
+ animation: jade-toast-entrar 0.2s ease;
193
+ }
194
+ .jade-toast-saindo { animation: jade-toast-sair 0.2s ease forwards; }
195
+ .jade-toast-sucesso { background: #dcfce7; color: #166534; }
196
+ .jade-toast-erro { background: #fee2e2; color: #991b1b; }
197
+ .jade-toast-aviso { background: #fef9c3; color: #854d0e; }
198
+ .jade-toast-info { background: #dbeafe; color: #1e40af; }
199
+ @keyframes jade-toast-entrar { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
200
+ @keyframes jade-toast-sair { to { opacity:0; transform:translateY(8px); } }
201
+
202
+ /* ── Skeleton ── */
203
+ .jade-skeleton {
204
+ background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%);
205
+ background-size: 200% 100%;
206
+ animation: jade-shimmer 1.4s infinite;
207
+ border-radius: 6px;
208
+ }
209
+ .jade-skeleton-titulo { height: 28px; width: 40%; margin-bottom: 16px; }
210
+ .jade-skeleton-linha { height: 56px; margin-bottom: 8px; }
211
+ @keyframes jade-shimmer { to { background-position: -200% 0; } }
212
+
213
+ /* ── Vazio ── */
214
+ .jade-tabela-vazio { text-align: center; padding: 32px; color: var(--jade-texto-suave, #6b7280); }
215
+
216
+ /* ── Navegação mobile: bottom bar ── */
217
+ .jade-nav-bottom {
218
+ position: fixed;
219
+ bottom: 0; left: 0; right: 0;
220
+ background: #fff;
221
+ border-top: 1px solid var(--jade-borda, #e5e7eb);
222
+ display: flex;
223
+ z-index: 100;
224
+ padding-bottom: env(safe-area-inset-bottom, 0px);
225
+ }
226
+ .jade-nav-item {
227
+ flex: 1;
228
+ display: flex;
229
+ flex-direction: column;
230
+ align-items: center;
231
+ justify-content: center;
232
+ min-height: 56px;
233
+ font-size: 0.75rem;
234
+ color: var(--jade-texto-suave, #6b7280);
235
+ gap: 4px;
236
+ text-decoration: none;
237
+ cursor: pointer;
238
+ -webkit-tap-highlight-color: transparent;
239
+ }
240
+ .jade-nav-item.ativo { color: var(--jade-primaria, #2563eb); }
241
+ .jade-nav-icone { font-size: 1.4rem; line-height: 1; }
242
+
243
+ /* ── Hambúrguer (oculto no mobile por padrão — nav usa bottom bar) ── */
244
+ .jade-nav-lateral { display: none; }
245
+ .jade-nav-topo { display: none; }
246
+
247
+ /* ── Desktop: a partir de 640px ── */
248
+ @media (min-width: 640px) {
249
+ .jade-tela { padding: 24px; max-width: 1200px; margin: 0 auto; }
250
+ .jade-tela-titulo { font-size: 1.5rem; }
251
+
252
+ /* Tabela: oculta lista de cards, mostra grid */
253
+ .jade-lista-cards { display: none; }
254
+ .jade-tabela-grid {
255
+ display: table;
256
+ width: 100%;
257
+ border-collapse: collapse;
258
+ background: #fff;
259
+ border-radius: 12px;
260
+ overflow: hidden;
261
+ box-shadow: 0 1px 3px rgba(0,0,0,.08);
262
+ }
263
+ .jade-tabela-grid th,
264
+ .jade-tabela-grid td {
265
+ padding: 12px 16px;
266
+ text-align: left;
267
+ border-bottom: 1px solid var(--jade-borda, #f3f4f6);
268
+ font-size: 0.9375rem;
269
+ }
270
+ .jade-tabela-grid th {
271
+ background: #f9fafb;
272
+ font-weight: 600;
273
+ color: var(--jade-texto-suave, #6b7280);
274
+ white-space: nowrap;
275
+ }
276
+ .jade-tabela-grid th.ordenavel { cursor: pointer; user-select: none; }
277
+ .jade-tabela-grid th.ordenavel:hover { background: #f3f4f6; }
278
+ .jade-tabela-grid tbody tr:hover { background: #fafafa; }
279
+ .jade-tabela-grid .jade-sort-icon { margin-left: 4px; opacity: 0.5; }
280
+
281
+ /* Bottom nav oculta no desktop */
282
+ .jade-nav-bottom { display: none; }
283
+
284
+ /* Formulário em grid */
285
+ .jade-formulario { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
286
+ }
287
+ `;
288
+ // ── Classe principal ──────────────────────────────────────────────────────────
289
+ export class Responsivo {
290
+ mql;
291
+ callbacks = [];
292
+ constructor() {
293
+ this.mql = window.matchMedia(`(max-width: ${BP_MOBILE - 1}px)`);
294
+ this.mql.addEventListener('change', (e) => {
295
+ this.callbacks.forEach(cb => cb(e.matches));
296
+ });
297
+ }
298
+ isMobile() {
299
+ return this.mql.matches;
300
+ }
301
+ /** Registra callback para mudança de breakpoint. Retorna função de cleanup. */
302
+ observar(cb) {
303
+ this.callbacks.push(cb);
304
+ return () => { this.callbacks = this.callbacks.filter(c => c !== cb); };
305
+ }
306
+ /**
307
+ * Adapta uma tabela automaticamente:
308
+ * mobile → lista de cards empilhados
309
+ * desktop → grid com colunas
310
+ * Troca automaticamente quando o viewport muda.
311
+ */
312
+ adaptarTabela(config, wrapper, dados, termoBusca, paginaAtual) {
313
+ const renderMobile = () => this._renderLista(config, wrapper, dados, termoBusca, paginaAtual);
314
+ const renderDesktop = () => this._renderGrid(config, wrapper, dados, termoBusca, paginaAtual);
315
+ const render = () => this.isMobile() ? renderMobile() : renderDesktop();
316
+ render();
317
+ this.observar(() => render());
318
+ }
319
+ /** Cria navegação adaptativa:
320
+ * mobile → bottom navigation bar
321
+ * desktop → sidebar ou topbar (hidden, gerenciado pelo Router)
322
+ */
323
+ criarNavegacao(container, itens) {
324
+ const nav = document.createElement('nav');
325
+ nav.className = 'jade-nav-bottom';
326
+ nav.setAttribute('role', 'navigation');
327
+ nav.setAttribute('aria-label', 'Navegação principal');
328
+ for (const item of itens) {
329
+ const a = document.createElement('a');
330
+ a.className = 'jade-nav-item' + (item.ativo ? ' ativo' : '');
331
+ a.href = item.caminho;
332
+ a.addEventListener('click', (e) => {
333
+ e.preventDefault();
334
+ nav.querySelectorAll('.jade-nav-item').forEach(el => el.classList.remove('ativo'));
335
+ a.classList.add('ativo');
336
+ window.history.pushState({}, '', item.caminho);
337
+ window.dispatchEvent(new PopStateEvent('popstate'));
338
+ });
339
+ if (item.icone) {
340
+ const icone = document.createElement('span');
341
+ icone.className = 'jade-nav-icone';
342
+ icone.textContent = item.icone;
343
+ a.appendChild(icone);
344
+ }
345
+ const label = document.createElement('span');
346
+ label.textContent = item.label;
347
+ a.appendChild(label);
348
+ nav.appendChild(a);
349
+ }
350
+ container.appendChild(nav);
351
+ return nav;
352
+ }
353
+ /** Injeta o CSS mobile-first base no <head> (idempotente). */
354
+ injetarEstilos() {
355
+ if (typeof document === 'undefined')
356
+ return;
357
+ if (document.getElementById(CSS_ID))
358
+ return;
359
+ const style = document.createElement('style');
360
+ style.id = CSS_ID;
361
+ style.textContent = CSS_BASE;
362
+ document.head.appendChild(style);
363
+ }
364
+ // ── Renderização interna ────────────────────────────────────────────────────
365
+ _renderLista(config, wrapper, dados, termoBusca, paginaAtual) {
366
+ // Remove grid se existir
367
+ wrapper.querySelector('.jade-tabela-grid-wrapper')?.remove();
368
+ let listaEl = wrapper.querySelector('.jade-lista-cards');
369
+ if (!listaEl) {
370
+ listaEl = document.createElement('div');
371
+ listaEl.className = 'jade-lista-cards';
372
+ wrapper.appendChild(listaEl);
373
+ }
374
+ // createEffect: renderiza imediatamente e re-renderiza quando termoBusca ou paginaAtual mudam
375
+ createEffect(() => {
376
+ const termo = termoBusca.get(); // rastreia dependência
377
+ paginaAtual.get(); // rastreia dependência
378
+ const linhas = this._filtrarOrdenar(dados, config, termo, null, 'asc');
379
+ listaEl.innerHTML = '';
380
+ if (linhas.length === 0) {
381
+ const vazio = document.createElement('p');
382
+ vazio.className = 'jade-tabela-vazio';
383
+ vazio.textContent = 'Nenhum registro encontrado.';
384
+ listaEl.appendChild(vazio);
385
+ return;
386
+ }
387
+ linhas.forEach(item => {
388
+ const card = document.createElement('div');
389
+ card.className = 'jade-card-item';
390
+ config.colunas.forEach(col => {
391
+ const campo = document.createElement('div');
392
+ campo.className = 'jade-card-campo';
393
+ const labelEl = document.createElement('span');
394
+ labelEl.className = 'jade-campo-label';
395
+ labelEl.textContent = col.titulo;
396
+ const valorEl = document.createElement('span');
397
+ valorEl.className = 'jade-campo-valor';
398
+ valorEl.textContent = String(item[col.campo] ?? '');
399
+ campo.appendChild(labelEl);
400
+ campo.appendChild(valorEl);
401
+ card.appendChild(campo);
402
+ });
403
+ listaEl.appendChild(card);
404
+ });
405
+ });
406
+ }
407
+ _renderGrid(config, wrapper, dados, termoBusca, paginaAtual) {
408
+ // Remove lista se existir
409
+ wrapper.querySelector('.jade-lista-cards')?.remove();
410
+ let gridWrapper = wrapper.querySelector('.jade-tabela-grid-wrapper');
411
+ if (gridWrapper)
412
+ return; // já existe
413
+ gridWrapper = document.createElement('div');
414
+ gridWrapper.className = 'jade-tabela-grid-wrapper';
415
+ const campOrdem = new Signal(null);
416
+ const direcaoOrdem = new Signal('asc');
417
+ const table = document.createElement('table');
418
+ table.className = 'jade-tabela-grid';
419
+ // Cabeçalho
420
+ const thead = document.createElement('thead');
421
+ const headerRow = document.createElement('tr');
422
+ config.colunas.forEach(col => {
423
+ const th = document.createElement('th');
424
+ th.textContent = col.titulo;
425
+ th.className = 'ordenavel';
426
+ const sortIcon = document.createElement('span');
427
+ sortIcon.className = 'jade-sort-icon';
428
+ sortIcon.textContent = '↕';
429
+ th.appendChild(sortIcon);
430
+ th.addEventListener('click', () => {
431
+ if (campOrdem.peek() === col.campo) {
432
+ direcaoOrdem.set(direcaoOrdem.peek() === 'asc' ? 'desc' : 'asc');
433
+ }
434
+ else {
435
+ campOrdem.set(col.campo);
436
+ direcaoOrdem.set('asc');
437
+ }
438
+ headerRow.querySelectorAll('th').forEach(t => t.classList.remove('sort-asc', 'sort-desc'));
439
+ th.classList.add(direcaoOrdem.peek() === 'asc' ? 'sort-asc' : 'sort-desc');
440
+ sortIcon.textContent = direcaoOrdem.peek() === 'asc' ? '↑' : '↓';
441
+ paginaAtual.set(0); // createEffect re-renderiza automaticamente
442
+ });
443
+ headerRow.appendChild(th);
444
+ });
445
+ thead.appendChild(headerRow);
446
+ table.appendChild(thead);
447
+ const tbody = document.createElement('tbody');
448
+ table.appendChild(tbody);
449
+ gridWrapper.appendChild(table);
450
+ // Paginação
451
+ const linhasPorPagina = config.paginacao === true ? 20
452
+ : typeof config.paginacao === 'number' ? config.paginacao : 0;
453
+ let paginacaoDiv = null;
454
+ if (linhasPorPagina > 0) {
455
+ paginacaoDiv = document.createElement('div');
456
+ paginacaoDiv.className = 'jade-tabela-paginacao';
457
+ gridWrapper.appendChild(paginacaoDiv);
458
+ }
459
+ wrapper.appendChild(gridWrapper);
460
+ // createEffect: renderiza imediatamente e re-renderiza quando signals mudam
461
+ createEffect(() => {
462
+ const termo = termoBusca.get(); // rastreia
463
+ const pagAtual = paginaAtual.get(); // rastreia
464
+ campOrdem.get(); // rastreia
465
+ direcaoOrdem.get(); // rastreia
466
+ let linhas = this._filtrarOrdenar(dados, config, termo, campOrdem.peek(), direcaoOrdem.peek());
467
+ if (linhasPorPagina > 0 && paginacaoDiv) {
468
+ const total = Math.max(1, Math.ceil(linhas.length / linhasPorPagina));
469
+ const pag = Math.min(pagAtual, total - 1);
470
+ if (pag !== pagAtual)
471
+ paginaAtual.set(pag);
472
+ linhas = linhas.slice(pag * linhasPorPagina, (pag + 1) * linhasPorPagina);
473
+ this._renderPaginacao(paginacaoDiv, pag, total, paginaAtual, () => { });
474
+ }
475
+ tbody.innerHTML = '';
476
+ linhas.forEach(item => {
477
+ const tr = document.createElement('tr');
478
+ config.colunas.forEach(col => {
479
+ const td = document.createElement('td');
480
+ td.textContent = String(item[col.campo] ?? '');
481
+ tr.appendChild(td);
482
+ });
483
+ tbody.appendChild(tr);
484
+ });
485
+ });
486
+ }
487
+ _filtrarOrdenar(dados, config, termo, campo, direcao) {
488
+ let linhas = [...dados];
489
+ if (termo) {
490
+ linhas = linhas.filter(item => config.colunas.some(col => String(item[col.campo] ?? '').toLowerCase().includes(termo)));
491
+ }
492
+ if (campo) {
493
+ const dir = direcao === 'asc' ? 1 : -1;
494
+ linhas.sort((a, b) => {
495
+ const va = a[campo] ?? '', vb = b[campo] ?? '';
496
+ if (va < vb)
497
+ return -1 * dir;
498
+ if (va > vb)
499
+ return 1 * dir;
500
+ return 0;
501
+ });
502
+ }
503
+ return linhas;
504
+ }
505
+ _renderPaginacao(container, paginaAtual, total, paginaSignal, atualizar) {
506
+ container.innerHTML = '';
507
+ const btn = (texto, pagina, desabilitado = false) => {
508
+ const b = document.createElement('button');
509
+ b.textContent = texto;
510
+ b.className = `jade-pag-btn${pagina === paginaAtual ? ' ativo' : ''}`;
511
+ b.disabled = desabilitado;
512
+ b.addEventListener('click', () => { paginaSignal.set(pagina); atualizar(); });
513
+ container.appendChild(b);
514
+ };
515
+ const info = document.createElement('span');
516
+ info.textContent = `${paginaAtual + 1} / ${total}`;
517
+ container.appendChild(info);
518
+ btn('←', paginaAtual - 1, paginaAtual === 0);
519
+ const inicio = Math.max(0, paginaAtual - 2);
520
+ const fim = Math.min(total, inicio + 5);
521
+ for (let p = inicio; p < fim; p++)
522
+ btn(String(p + 1), p);
523
+ btn('→', paginaAtual + 1, paginaAtual >= total - 1);
524
+ }
525
+ }
526
+ //# sourceMappingURL=responsive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.js","sourceRoot":"","sources":["../../ui/responsive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAErD,gFAAgF;AAEhF,MAAM,SAAS,GAAI,GAAG,CAAC,CAAG,oBAAoB;AAC9C,MAAM,SAAS,GAAI,IAAI,CAAC,CAAE,oDAAoD;AAE9E,gFAAgF;AAEhF,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuQhB,CAAC;AAEF,iFAAiF;AAEjF,MAAM,OAAO,UAAU;IACb,GAAG,CAAiB;IACpB,SAAS,GAAqC,EAAE,CAAC;IAEzD;QACE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,+EAA+E;IAC/E,QAAQ,CAAC,EAA6B;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;OAKG;IACH,aAAa,CACX,MAAoB,EACpB,OAAoB,EACpB,KAAY,EACZ,UAA0B,EAC1B,WAA2B;QAE3B,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9F,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE9F,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACxE,MAAM,EAAE,CAAC;QAET,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,cAAc,CACZ,SAAsB,EACtB,KAAiF;QAEjF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACvC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAEtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC,CAAC,SAAS,GAAG,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YACtB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnF,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/C,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC7C,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC;gBACnC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC/B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7C,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACrB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAED,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,8DAA8D;IAC9D,cAAc;QACZ,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAC5C,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;YAAE,OAAO;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC;QAClB,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,+EAA+E;IAEvE,YAAY,CAClB,MAAoB,EACpB,OAAoB,EACpB,KAAY,EACZ,UAA0B,EAC1B,WAA2B;QAE3B,yBAAyB;QACzB,OAAO,CAAC,aAAa,CAAC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;QAE7D,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAc,mBAAmB,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC;YACvC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,8FAA8F;QAC9F,YAAY,CAAC,GAAG,EAAE;YAChB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAG,uBAAuB;YACzD,WAAW,CAAC,GAAG,EAAE,CAAC,CAAgB,uBAAuB;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACvE,OAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;YAExB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC1C,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAC;gBACtC,KAAK,CAAC,WAAW,GAAG,6BAA6B,CAAC;gBAClD,OAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;gBAElC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC5C,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAC;oBAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAC/C,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC;oBACvC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;oBAEjC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAC/C,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC;oBACvC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAEpD,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC3B,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBAEH,OAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CACjB,MAAoB,EACpB,OAAoB,EACpB,KAAY,EACZ,UAA0B,EAC1B,WAA2B;QAE3B,0BAA0B;QAC1B,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAErD,IAAI,WAAW,GAAG,OAAO,CAAC,aAAa,CAAc,2BAA2B,CAAC,CAAC;QAClF,IAAI,WAAW;YAAE,OAAO,CAAC,YAAY;QAErC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,WAAW,CAAC,SAAS,GAAG,0BAA0B,CAAC;QAEnD,MAAM,SAAS,GAAM,IAAI,MAAM,CAAgB,IAAI,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,MAAM,CAAiB,KAAK,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;QAErC,YAAY;QACZ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACxC,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;YAC5B,EAAE,CAAC,SAAS,GAAG,WAAW,CAAC;YAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAChD,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC;YACtC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;YAC3B,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEzB,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAChC,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;oBACnC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACzB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBACD,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC3F,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC3E,QAAQ,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACjE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,4CAA4C;YAClE,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7B,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE/B,YAAY;QACZ,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;YACpD,CAAC,CAAC,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,IAAI,YAAY,GAAuB,IAAI,CAAC;QAC5C,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,YAAY,CAAC,SAAS,GAAG,uBAAuB,CAAC;YACjD,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEjC,4EAA4E;QAC5E,YAAY,CAAC,GAAG,EAAE;YAChB,MAAM,KAAK,GAAM,UAAU,CAAC,GAAG,EAAE,CAAC,CAAI,WAAW;YACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAG,WAAW;YACjD,SAAS,CAAC,GAAG,EAAE,CAAC,CAAsB,WAAW;YACjD,YAAY,CAAC,GAAG,EAAE,CAAC,CAAmB,WAAW;YAEjD,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;YAE/F,IAAI,eAAe,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;gBACtE,MAAM,GAAG,GAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC5C,IAAI,GAAG,KAAK,QAAQ;oBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,eAAe,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;gBAC1E,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzE,CAAC;YAED,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACpB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBACxC,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC/C,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CACrB,KAAY,EACZ,MAAoB,EACpB,KAAa,EACb,KAAoB,EACpB,OAAuB;QAEvB,IAAI,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAExB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC5D,CACF,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACnB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC/C,IAAI,EAAE,GAAG,EAAE;oBAAE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC7B,IAAI,EAAE,GAAG,EAAE;oBAAE,OAAQ,CAAC,GAAG,GAAG,CAAC;gBAC7B,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CACtB,SAAsB,EACtB,WAAmB,EACnB,KAAa,EACb,YAA4B,EAC5B,SAAqB;QAErB,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,YAAY,GAAG,KAAK,EAAE,EAAE;YAClE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC,CAAC,SAAS,GAAG,eAAe,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACtE,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC;YAC1B,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,GAAG,WAAW,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC;QACnD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE5B,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzD,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;CACF"}
@@ -1 +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"}
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;IAoClB,SAAS,IAAI,MAAM,GAAG,IAAI;CAG3B"}
package/dist/ui/router.js CHANGED
@@ -46,8 +46,11 @@ export class Router {
46
46
  if (rota.requerPapel) {
47
47
  const papeis = this.usuarioAtual?.roles ?? [];
48
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>';
49
+ const p = document.createElement('p');
50
+ p.className = 'jade-acesso-negado';
51
+ p.textContent = 'Acesso negado: você não tem permissão para acessar esta tela.';
52
+ this.container.innerHTML = '';
53
+ this.container.appendChild(p);
51
54
  return;
52
55
  }
53
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../ui/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../ui/router.ts"],"names":[],"mappings":"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"}