@hed-hog/core 0.0.329 → 0.0.331

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 (66) hide show
  1. package/dist/core.module.d.ts.map +1 -1
  2. package/dist/core.module.js +7 -4
  3. package/dist/core.module.js.map +1 -1
  4. package/dist/index.d.ts +8 -6
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +8 -6
  7. package/dist/index.js.map +1 -1
  8. package/dist/oauth/oauth.service.js +1 -1
  9. package/dist/oauth/oauth.service.js.map +1 -1
  10. package/dist/pdf/components/index.d.ts +57 -0
  11. package/dist/pdf/components/index.d.ts.map +1 -0
  12. package/dist/pdf/components/index.js +258 -0
  13. package/dist/pdf/components/index.js.map +1 -0
  14. package/dist/pdf/dto/generate-pdf.dto.d.ts +5 -0
  15. package/dist/pdf/dto/generate-pdf.dto.d.ts.map +1 -0
  16. package/dist/pdf/dto/generate-pdf.dto.js +27 -0
  17. package/dist/pdf/dto/generate-pdf.dto.js.map +1 -0
  18. package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts +10 -0
  19. package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts.map +1 -0
  20. package/dist/pdf/interfaces/pdf-theme-config.interface.js +3 -0
  21. package/dist/pdf/interfaces/pdf-theme-config.interface.js.map +1 -0
  22. package/dist/pdf/pdf.controller.d.ts +16 -0
  23. package/dist/pdf/pdf.controller.d.ts.map +1 -0
  24. package/dist/pdf/pdf.controller.js +100 -0
  25. package/dist/pdf/pdf.controller.js.map +1 -0
  26. package/dist/pdf/pdf.module.d.ts +3 -0
  27. package/dist/pdf/pdf.module.d.ts.map +1 -0
  28. package/dist/pdf/pdf.module.js +29 -0
  29. package/dist/pdf/pdf.module.js.map +1 -0
  30. package/dist/pdf/pdf.service.d.ts +44 -0
  31. package/dist/pdf/pdf.service.d.ts.map +1 -0
  32. package/dist/pdf/pdf.service.js +185 -0
  33. package/dist/pdf/pdf.service.js.map +1 -0
  34. package/dist/pdf/templates/hcode-institutional.template.d.ts +36 -0
  35. package/dist/pdf/templates/hcode-institutional.template.d.ts.map +1 -0
  36. package/dist/pdf/templates/hcode-institutional.template.js +67 -0
  37. package/dist/pdf/templates/hcode-institutional.template.js.map +1 -0
  38. package/dist/pdf/themes/hcode.theme.d.ts +25 -0
  39. package/dist/pdf/themes/hcode.theme.d.ts.map +1 -0
  40. package/dist/pdf/themes/hcode.theme.js +504 -0
  41. package/dist/pdf/themes/hcode.theme.js.map +1 -0
  42. package/hedhog/data/route.yaml +8 -0
  43. package/hedhog/data/setting_group.yaml +60 -0
  44. package/hedhog/frontend/app/account/layout.tsx.ejs +1 -1
  45. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +27 -23
  46. package/hedhog/frontend/app/mail/template/page.tsx.ejs +5 -5
  47. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +574 -574
  48. package/hedhog/frontend/app/menu/page.tsx.ejs +7 -2
  49. package/hedhog/frontend/app/preferences/page.tsx.ejs +1 -1
  50. package/hedhog/frontend/app/roles/page.tsx.ejs +7 -2
  51. package/hedhog/frontend/app/users/page.tsx.ejs +1 -1
  52. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +5 -9
  53. package/hedhog/frontend/messages/en.json +36 -1
  54. package/hedhog/frontend/messages/pt.json +36 -1
  55. package/package.json +5 -5
  56. package/src/core.module.ts +7 -4
  57. package/src/index.ts +9 -6
  58. package/src/oauth/oauth.service.ts +12 -12
  59. package/src/pdf/components/index.ts +316 -0
  60. package/src/pdf/dto/generate-pdf.dto.ts +11 -0
  61. package/src/pdf/interfaces/pdf-theme-config.interface.ts +10 -0
  62. package/src/pdf/pdf.controller.ts +86 -0
  63. package/src/pdf/pdf.module.ts +17 -0
  64. package/src/pdf/pdf.service.ts +229 -0
  65. package/src/pdf/templates/hcode-institutional.template.ts +122 -0
  66. package/src/pdf/themes/hcode.theme.ts +515 -0
@@ -0,0 +1,504 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HCODE_NEUTRALS = exports.HCODE_DEFAULTS = void 0;
4
+ exports.buildFontImport = buildFontImport;
5
+ exports.buildThemeCss = buildThemeCss;
6
+ /** Per-area color tokens — Design System v1.0 */
7
+ exports.HCODE_DEFAULTS = {
8
+ // Blue 600 / Blue 800 / Blue 50
9
+ consulting: { primary: '#2D669E', dark: '#1F4A75', light: '#EAF1F8' },
10
+ // Orange 500 / Orange 700 / Orange 50
11
+ training: { primary: '#FF760C', dark: '#C45400', light: '#FFF0E2' },
12
+ // Violet 600 / Violet 800 / Violet 50
13
+ research: { primary: '#9400B5', dark: '#6A0083', light: '#F6E6FB' },
14
+ };
15
+ /** Neutral tokens — shared across all areas */
16
+ exports.HCODE_NEUTRALS = {
17
+ ink1: '#101010', // body text
18
+ ink2: '#5D5D5D',
19
+ ink3: '#79756C',
20
+ line: '#ECECEC',
21
+ surface: '#FFFFFF',
22
+ surface2: '#F8F8F8',
23
+ };
24
+ // ─────────────────────────────────────────────────────────────────────────────
25
+ // CSS builders
26
+ // ─────────────────────────────────────────────────────────────────────────────
27
+ /** Google Fonts import for Inter, Roboto and JetBrains Mono */
28
+ function buildFontImport() {
29
+ return `<link rel="preconnect" href="https://fonts.googleapis.com">
30
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
31
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@200;300;400;600;700&family=Roboto:wght@400;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">`;
32
+ }
33
+ /**
34
+ * Generates the <style> block with all Design System CSS variables and rules.
35
+ * Typography scale is calibrated for A4 PDF (794 px viewport).
36
+ */
37
+ function buildThemeCss(config) {
38
+ return `<style>
39
+ /* ── CSS Variables ─────────────────────────────────────── */
40
+ :root {
41
+ /* Area accent */
42
+ --primary: ${config.primaryColor};
43
+ --dark: ${config.darkColor};
44
+ --light: ${config.lightColor};
45
+
46
+ /* Neutrals */
47
+ --ink-1: ${exports.HCODE_NEUTRALS.ink1};
48
+ --ink-2: ${exports.HCODE_NEUTRALS.ink2};
49
+ --ink-3: ${exports.HCODE_NEUTRALS.ink3};
50
+ --line: ${exports.HCODE_NEUTRALS.line};
51
+ --surface: ${exports.HCODE_NEUTRALS.surface};
52
+ --surface-2:${exports.HCODE_NEUTRALS.surface2};
53
+
54
+ /* Fonts */
55
+ --font-main: 'Inter', sans-serif;
56
+ --font-micro: 'Roboto', sans-serif;
57
+ --font-meta: 'JetBrains Mono', monospace;
58
+ }
59
+
60
+ /* ── Reset ─────────────────────────────────────────────── */
61
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
62
+
63
+ html, body {
64
+ font-family: var(--font-main);
65
+ font-size: 13px;
66
+ color: var(--ink-1);
67
+ background: var(--surface);
68
+ -webkit-print-color-adjust: exact;
69
+ print-color-adjust: exact;
70
+ }
71
+
72
+ /* ── Type Scale (A4-calibrated, DS v1.0 proportions) ───── */
73
+ /* Display / 80 → Inter 200, tracking -0.03em */
74
+ .t-display {
75
+ font-family: var(--font-main);
76
+ font-weight: 200;
77
+ font-size: 52px;
78
+ line-height: 1.05;
79
+ letter-spacing: -0.03em;
80
+ color: var(--ink-1);
81
+ }
82
+ /* H1 / 56 → Inter 300, tracking -0.02em */
83
+ .t-h1 {
84
+ font-family: var(--font-main);
85
+ font-weight: 300;
86
+ font-size: 36px;
87
+ line-height: 1.1;
88
+ letter-spacing: -0.02em;
89
+ color: var(--ink-1);
90
+ }
91
+ /* H2 / 36 → Inter 400 */
92
+ .t-h2 {
93
+ font-family: var(--font-main);
94
+ font-weight: 400;
95
+ font-size: 24px;
96
+ line-height: 1.15;
97
+ color: var(--ink-1);
98
+ }
99
+ /* H3 / 26 → Inter 600 */
100
+ .t-h3 {
101
+ font-family: var(--font-main);
102
+ font-weight: 600;
103
+ font-size: 17px;
104
+ line-height: 1.2;
105
+ color: var(--ink-1);
106
+ }
107
+ /* Eyebrow / 22 → Inter 400, tracking 0.36em, uppercase */
108
+ .t-eyebrow {
109
+ font-family: var(--font-main);
110
+ font-weight: 400;
111
+ font-size: 9px;
112
+ line-height: 1.4;
113
+ letter-spacing: 0.36em;
114
+ text-transform: uppercase;
115
+ color: var(--ink-3);
116
+ }
117
+ /* Body / 22 → Inter 300 */
118
+ .t-body {
119
+ font-family: var(--font-main);
120
+ font-weight: 300;
121
+ font-size: 13px;
122
+ line-height: 1.65;
123
+ color: var(--ink-2);
124
+ }
125
+ /* Meta / 14 → JetBrains Mono 500, tracking 0.18em */
126
+ .t-meta {
127
+ font-family: var(--font-meta);
128
+ font-weight: 500;
129
+ font-size: 8px;
130
+ line-height: 1.4;
131
+ letter-spacing: 0.18em;
132
+ text-transform: uppercase;
133
+ color: var(--ink-3);
134
+ }
135
+ /* Micro → Roboto 400 (rodapés, créditos) */
136
+ .t-micro {
137
+ font-family: var(--font-micro);
138
+ font-weight: 400;
139
+ font-size: 8px;
140
+ line-height: 1.4;
141
+ color: var(--ink-3);
142
+ }
143
+
144
+ /* ── Color utilities ────────────────────────────────────── */
145
+ .color-primary { color: var(--primary) !important; }
146
+ .bg-primary { background-color: var(--primary) !important; }
147
+ .bg-light { background-color: var(--light) !important; }
148
+ .bg-surface2 { background-color: var(--surface-2) !important; }
149
+
150
+ /* ── Page layout ────────────────────────────────────────── */
151
+ @page { size: A4; margin: 0; }
152
+
153
+ .page-content {
154
+ padding: 32px 48px 80px;
155
+ }
156
+
157
+ /* Page break utilities */
158
+ .break-before { page-break-before: always; break-before: page; }
159
+ .break-after { page-break-after: always; break-after: page; }
160
+ .no-break { page-break-inside: avoid; break-inside: avoid; }
161
+
162
+ /* ── Cover page ─────────────────────────────────────────── */
163
+ /* Two-column grid: left=white 55%, right=primary 45% */
164
+ .cover {
165
+ display: grid;
166
+ grid-template-columns: 55% 45%;
167
+ min-height: 297mm;
168
+ page-break-after: always;
169
+ break-after: page;
170
+ }
171
+ .cover-left {
172
+ background: var(--surface);
173
+ padding: 56px 40px 40px;
174
+ display: flex;
175
+ flex-direction: column;
176
+ justify-content: space-between;
177
+ }
178
+ .cover-right {
179
+ background: var(--primary);
180
+ padding: 40px 32px;
181
+ display: flex;
182
+ flex-direction: column;
183
+ align-items: flex-start;
184
+ justify-content: flex-end;
185
+ position: relative;
186
+ overflow: hidden;
187
+ }
188
+ .cover-right-glyph {
189
+ position: absolute;
190
+ top: -40px;
191
+ right: -20px;
192
+ font-family: var(--font-main);
193
+ font-weight: 300;
194
+ font-size: 280px;
195
+ color: rgba(255,255,255,0.10);
196
+ line-height: 1;
197
+ letter-spacing: -0.01em;
198
+ user-select: none;
199
+ pointer-events: none;
200
+ }
201
+ .cover-right-areas {
202
+ list-style: none;
203
+ width: 100%;
204
+ border-top: 1px solid rgba(255,255,255,0.25);
205
+ position: relative;
206
+ z-index: 1;
207
+ }
208
+ .cover-right-areas li {
209
+ font-family: var(--font-main);
210
+ font-weight: 400;
211
+ font-size: 9px;
212
+ letter-spacing: 0.30em;
213
+ text-transform: uppercase;
214
+ color: rgba(255,255,255,0.90);
215
+ padding: 10px 0;
216
+ border-bottom: 1px solid rgba(255,255,255,0.15);
217
+ display: flex;
218
+ align-items: center;
219
+ gap: 10px;
220
+ }
221
+ .cover-right-areas li .num {
222
+ font-family: var(--font-meta);
223
+ font-size: 7px;
224
+ opacity: 0.55;
225
+ }
226
+ .cover-system-label {
227
+ font-family: var(--font-meta);
228
+ font-size: 7px;
229
+ letter-spacing: 0.18em;
230
+ color: rgba(255,255,255,0.55);
231
+ position: absolute;
232
+ top: 16px;
233
+ left: 32px;
234
+ }
235
+ .cover-release-label {
236
+ font-family: var(--font-meta);
237
+ font-size: 7px;
238
+ letter-spacing: 0.18em;
239
+ color: rgba(255,255,255,0.55);
240
+ position: absolute;
241
+ top: 16px;
242
+ right: 32px;
243
+ display: flex;
244
+ align-items: center;
245
+ gap: 6px;
246
+ }
247
+ .cover-release-label::before {
248
+ content: '';
249
+ width: 6px;
250
+ height: 6px;
251
+ border-radius: 50%;
252
+ background: rgba(255,255,255,0.70);
253
+ }
254
+
255
+ /* ── Wordmark lockup ────────────────────────────────────── */
256
+ .lockup { display: flex; flex-direction: column; gap: 3px; }
257
+ .lockup-wordmark {
258
+ font-family: var(--font-main);
259
+ font-weight: 300;
260
+ font-size: 32px;
261
+ letter-spacing: -0.01em;
262
+ line-height: 1;
263
+ }
264
+ .lockup-wordmark .glyph { color: var(--primary); }
265
+ .lockup-wordmark .wordmark { color: var(--ink-3); }
266
+ .lockup-area {
267
+ font-family: var(--font-main);
268
+ font-weight: 400;
269
+ font-size: 9px;
270
+ letter-spacing: 0.30em;
271
+ text-transform: uppercase;
272
+ color: var(--primary);
273
+ }
274
+
275
+ /* ── Accent bar — fixed at top of EVERY page (cover included) ── */
276
+ .page-accent-bar {
277
+ position: fixed;
278
+ top: 0;
279
+ left: 0;
280
+ right: 0;
281
+ height: 6px;
282
+ background: var(--primary);
283
+ z-index: 999;
284
+ }
285
+
286
+ /* ── Page header (logo + page title) ───────────────────── */
287
+ .page-header {
288
+ display: flex;
289
+ align-items: center;
290
+ justify-content: space-between;
291
+ padding: 18px 48px 14px;
292
+ border-bottom: 1px solid var(--line);
293
+ }
294
+
295
+ /* ── Section header: eyebrow + title + left accent bar ─── */
296
+ .section-header {
297
+ display: flex;
298
+ flex-direction: column;
299
+ gap: 6px;
300
+ margin-bottom: 24px;
301
+ padding-left: 14px;
302
+ border-left: 3.5px solid var(--primary);
303
+ }
304
+
305
+ /* ── Purpose block (colored background) ─────────────────── */
306
+ .purpose-block {
307
+ background: var(--primary);
308
+ border-radius: 14px;
309
+ padding: 28px 32px;
310
+ margin-bottom: 28px;
311
+ page-break-inside: avoid;
312
+ break-inside: avoid;
313
+ }
314
+ .purpose-block .t-eyebrow { color: rgba(255,255,255,0.65); margin-bottom: 8px; }
315
+ .purpose-block .t-h3 { color: #ffffff; margin-bottom: 12px; font-size: 18px; font-weight: 600; }
316
+ .purpose-block .t-body { color: rgba(255,255,255,0.85); font-size: 12px; }
317
+
318
+ /* ── Feature cards (3-column grid) ─────────────────────── */
319
+ .feature-cards {
320
+ display: grid;
321
+ grid-template-columns: repeat(3, 1fr);
322
+ gap: 14px;
323
+ margin-bottom: 28px;
324
+ }
325
+ .feature-card {
326
+ border: 1px solid var(--line);
327
+ border-radius: 12px;
328
+ padding: 18px 14px;
329
+ background: var(--surface);
330
+ page-break-inside: avoid;
331
+ break-inside: avoid;
332
+ }
333
+ .feature-card-icon {
334
+ width: 38px;
335
+ height: 32px;
336
+ border: 1.5px solid var(--line);
337
+ border-radius: 8px;
338
+ display: flex;
339
+ align-items: center;
340
+ justify-content: center;
341
+ margin-bottom: 10px;
342
+ color: var(--primary);
343
+ }
344
+ .feature-card-title {
345
+ font-family: var(--font-main);
346
+ font-weight: 600;
347
+ font-size: 12px;
348
+ color: var(--primary);
349
+ margin-bottom: 5px;
350
+ letter-spacing: -0.01em;
351
+ }
352
+ .feature-card-desc {
353
+ font-family: var(--font-main);
354
+ font-weight: 300;
355
+ font-size: 10px;
356
+ line-height: 1.55;
357
+ color: var(--ink-2);
358
+ }
359
+
360
+ /* ── Chip ─────────────────────────────────────────────── */
361
+ .chip {
362
+ display: inline-flex;
363
+ align-items: center;
364
+ gap: 5px;
365
+ padding: 3px 10px;
366
+ border-radius: 999px;
367
+ background: var(--light);
368
+ font-family: var(--font-main);
369
+ font-weight: 400;
370
+ font-size: 9px;
371
+ color: var(--primary);
372
+ letter-spacing: 0.01em;
373
+ }
374
+ .chip::before {
375
+ content: '';
376
+ width: 5px;
377
+ height: 5px;
378
+ border-radius: 50%;
379
+ background: var(--primary);
380
+ flex-shrink: 0;
381
+ }
382
+
383
+ /* ── Data table ──────────────────────────────────────── */
384
+ .data-table {
385
+ width: 100%;
386
+ border-collapse: collapse;
387
+ margin-bottom: 28px;
388
+ }
389
+ .data-table thead tr { background: var(--light); }
390
+ .data-table th {
391
+ font-family: var(--font-meta);
392
+ font-weight: 500;
393
+ font-size: 8px;
394
+ letter-spacing: 0.18em;
395
+ text-transform: uppercase;
396
+ color: var(--primary);
397
+ padding: 9px 13px;
398
+ text-align: left;
399
+ border-bottom: 1.5px solid var(--primary);
400
+ }
401
+ .data-table td {
402
+ font-family: var(--font-main);
403
+ font-weight: 300;
404
+ font-size: 10px;
405
+ color: var(--ink-2);
406
+ padding: 9px 13px;
407
+ border-bottom: 1px solid var(--line);
408
+ }
409
+ .data-table tbody tr { page-break-inside: avoid; break-inside: avoid; }
410
+ .data-table tbody tr:nth-child(even) td { background: var(--surface-2); }
411
+
412
+ /* ── Metadata block ──────────────────────────────────── */
413
+ .metadata-block {
414
+ display: grid;
415
+ grid-template-columns: repeat(4, 1fr);
416
+ gap: 0;
417
+ border: 1px solid var(--line);
418
+ border-radius: 12px;
419
+ overflow: hidden;
420
+ margin-bottom: 28px;
421
+ page-break-inside: avoid;
422
+ break-inside: avoid;
423
+ }
424
+ .metadata-item {
425
+ padding: 14px 16px;
426
+ border-right: 1px solid var(--line);
427
+ background: var(--surface);
428
+ }
429
+ .metadata-item:nth-child(4n) { border-right: none; }
430
+ .metadata-item:nth-child(4n+4) { border-right: none; }
431
+ .metadata-item:nth-child(n+5) { border-top: 1px solid var(--line); }
432
+ .metadata-label {
433
+ font-family: var(--font-meta);
434
+ font-weight: 500;
435
+ font-size: 7px;
436
+ letter-spacing: 0.18em;
437
+ text-transform: uppercase;
438
+ color: var(--ink-3);
439
+ margin-bottom: 4px;
440
+ }
441
+ .metadata-value {
442
+ font-family: var(--font-main);
443
+ font-weight: 400;
444
+ font-size: 11px;
445
+ color: var(--ink-1);
446
+ }
447
+
448
+ /* ── Signature area ──────────────────────────────────── */
449
+ .signature-area {
450
+ display: grid;
451
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
452
+ gap: 24px;
453
+ margin-top: 28px;
454
+ page-break-inside: avoid;
455
+ break-inside: avoid;
456
+ }
457
+ .signature-item { display: flex; flex-direction: column; gap: 6px; }
458
+ .signature-line {
459
+ width: 100%;
460
+ height: 1px;
461
+ background: var(--ink-1);
462
+ margin-bottom: 5px;
463
+ }
464
+ .signature-label {
465
+ font-family: var(--font-micro);
466
+ font-size: 8px;
467
+ color: var(--ink-3);
468
+ }
469
+ .signature-name {
470
+ font-family: var(--font-main);
471
+ font-weight: 400;
472
+ font-size: 10px;
473
+ color: var(--ink-2);
474
+ }
475
+
476
+ /* ── Fixed footer (repeats on every page) ───────────── */
477
+ .pdf-footer {
478
+ position: fixed;
479
+ bottom: 0;
480
+ left: 0;
481
+ right: 0;
482
+ height: 40px;
483
+ display: flex;
484
+ align-items: center;
485
+ justify-content: space-between;
486
+ padding: 0 48px;
487
+ border-top: 1px solid var(--line);
488
+ background: var(--surface);
489
+ }
490
+ /* CSS counter for page numbering */
491
+ @page { counter-increment: page; }
492
+ .pdf-footer-page::after {
493
+ content: counter(page);
494
+ font-family: var(--font-meta);
495
+ font-size: 8px;
496
+ letter-spacing: 0.18em;
497
+ color: var(--ink-3);
498
+ }
499
+
500
+ /* Padding to avoid content overlapping the fixed header bar and footer */
501
+ body { padding-top: 6px; padding-bottom: 48px; }
502
+ </style>`;
503
+ }
504
+ //# sourceMappingURL=hcode.theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcode.theme.js","sourceRoot":"","sources":["../../../src/pdf/themes/hcode.theme.ts"],"names":[],"mappings":";;;AAsCA,0CAIC;AAMD,sCAkdC;AArfD,iDAAiD;AACpC,QAAA,cAAc,GAAsC;IAC/D,gCAAgC;IAChC,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACrE,sCAAsC;IACtC,QAAQ,EAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACrE,sCAAsC;IACtC,QAAQ,EAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;CACtE,CAAC;AAEF,+CAA+C;AAClC,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAM,SAAS,EAAE,YAAY;IACjC,IAAI,EAAM,SAAS;IACnB,IAAI,EAAM,SAAS;IACnB,IAAI,EAAM,SAAS;IACnB,OAAO,EAAG,SAAS;IACnB,QAAQ,EAAE,SAAS;CACX,CAAC;AAEX,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,+DAA+D;AAC/D,SAAgB,eAAe;IAC7B,OAAO;;kLAEyK,CAAC;AACnL,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,MAAsB;IAClD,OAAO;;;;iBAIQ,MAAM,CAAC,YAAY;iBACnB,MAAM,CAAC,SAAS;iBAChB,MAAM,CAAC,UAAU;;;kBAGhB,sBAAc,CAAC,IAAI;kBACnB,sBAAc,CAAC,IAAI;kBACnB,sBAAc,CAAC,IAAI;kBACnB,sBAAc,CAAC,IAAI;kBACnB,sBAAc,CAAC,OAAO;kBACtB,sBAAc,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAkchC,CAAC;AACV,CAAC"}
@@ -2123,3 +2123,11 @@
2123
2123
  slug: admin
2124
2124
  - where:
2125
2125
  slug: admin-access
2126
+
2127
+ - url: /core/pdf/example
2128
+ method: GET
2129
+ type: HTTP
2130
+ relations:
2131
+ role:
2132
+ - where:
2133
+ slug: admin
@@ -1857,4 +1857,64 @@
1857
1857
  where:
1858
1858
  slug: retry-config
1859
1859
 
1860
+ - slug: pdf
1861
+ icon: file-text
1862
+ name:
1863
+ en: PDF
1864
+ pt: PDF
1865
+ description:
1866
+ en: Visual identity settings for PDF document generation
1867
+ pt: Configurações de identidade visual para geração de documentos PDF
1868
+ relations:
1869
+ setting:
1870
+ - slug: pdf-company-name
1871
+ type: string
1872
+ name:
1873
+ en: Company Name
1874
+ pt: Nome da Empresa
1875
+ description:
1876
+ en: Company name displayed in PDF headers and footers
1877
+ pt: Nome da empresa exibido nos cabeçalhos e rodapés dos PDFs
1878
+ value: hcode
1879
+ user_override: false
1880
+ - slug: pdf-logo
1881
+ type: string
1882
+ name:
1883
+ en: Logo URL
1884
+ pt: URL do Logo
1885
+ description:
1886
+ en: URL or data URI of the logo image for PDFs. Leave empty to use default CSS wordmark.
1887
+ pt: URL ou data URI da imagem do logo para PDFs. Deixe vazio para usar o wordmark CSS padrão.
1888
+ value: ''
1889
+ user_override: false
1890
+ - slug: pdf-consulting-color
1891
+ type: string
1892
+ name:
1893
+ en: Consulting Primary Color
1894
+ pt: Cor Principal Consulting
1895
+ description:
1896
+ en: Primary hex color for Consulting area PDFs (default #2D669E)
1897
+ pt: Cor hexadecimal principal para PDFs da área Consulting (padrão #2D669E)
1898
+ value: '#2D669E'
1899
+ user_override: false
1900
+ - slug: pdf-training-color
1901
+ type: string
1902
+ name:
1903
+ en: Training Primary Color
1904
+ pt: Cor Principal Training
1905
+ description:
1906
+ en: Primary hex color for Training area PDFs (default #FF760C)
1907
+ pt: Cor hexadecimal principal para PDFs da área Training (padrão #FF760C)
1908
+ value: '#FF760C'
1909
+ user_override: false
1910
+ - slug: pdf-research-color
1911
+ type: string
1912
+ name:
1913
+ en: Research Primary Color
1914
+ pt: Cor Principal Research
1915
+ description:
1916
+ en: Primary hex color for Research area PDFs (default #9400B5)
1917
+ pt: Cor hexadecimal principal para PDFs da área Research (padrão #9400B5)
1918
+ value: '#9400B5'
1919
+ user_override: false
1860
1920
 
@@ -62,7 +62,7 @@ export default function AccountLayout({ children }: LayoutProps) {
62
62
  <div className="flex flex-col pl-4 h-screen">
63
63
  <PageHeader
64
64
  breadcrumbs={[
65
- { label: 'Home', href: '/' },
65
+ { label: t('home'), href: '/' },
66
66
  { label: t('breadcrumbLabel') },
67
67
  ]}
68
68
  title={t('title')}