@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.
- package/dist/core.module.d.ts.map +1 -1
- package/dist/core.module.js +7 -4
- package/dist/core.module.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/oauth/oauth.service.js +1 -1
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/pdf/components/index.d.ts +57 -0
- package/dist/pdf/components/index.d.ts.map +1 -0
- package/dist/pdf/components/index.js +258 -0
- package/dist/pdf/components/index.js.map +1 -0
- package/dist/pdf/dto/generate-pdf.dto.d.ts +5 -0
- package/dist/pdf/dto/generate-pdf.dto.d.ts.map +1 -0
- package/dist/pdf/dto/generate-pdf.dto.js +27 -0
- package/dist/pdf/dto/generate-pdf.dto.js.map +1 -0
- package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts +10 -0
- package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts.map +1 -0
- package/dist/pdf/interfaces/pdf-theme-config.interface.js +3 -0
- package/dist/pdf/interfaces/pdf-theme-config.interface.js.map +1 -0
- package/dist/pdf/pdf.controller.d.ts +16 -0
- package/dist/pdf/pdf.controller.d.ts.map +1 -0
- package/dist/pdf/pdf.controller.js +100 -0
- package/dist/pdf/pdf.controller.js.map +1 -0
- package/dist/pdf/pdf.module.d.ts +3 -0
- package/dist/pdf/pdf.module.d.ts.map +1 -0
- package/dist/pdf/pdf.module.js +29 -0
- package/dist/pdf/pdf.module.js.map +1 -0
- package/dist/pdf/pdf.service.d.ts +44 -0
- package/dist/pdf/pdf.service.d.ts.map +1 -0
- package/dist/pdf/pdf.service.js +185 -0
- package/dist/pdf/pdf.service.js.map +1 -0
- package/dist/pdf/templates/hcode-institutional.template.d.ts +36 -0
- package/dist/pdf/templates/hcode-institutional.template.d.ts.map +1 -0
- package/dist/pdf/templates/hcode-institutional.template.js +67 -0
- package/dist/pdf/templates/hcode-institutional.template.js.map +1 -0
- package/dist/pdf/themes/hcode.theme.d.ts +25 -0
- package/dist/pdf/themes/hcode.theme.d.ts.map +1 -0
- package/dist/pdf/themes/hcode.theme.js +504 -0
- package/dist/pdf/themes/hcode.theme.js.map +1 -0
- package/hedhog/data/route.yaml +8 -0
- package/hedhog/data/setting_group.yaml +60 -0
- package/hedhog/frontend/app/account/layout.tsx.ejs +1 -1
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +27 -23
- package/hedhog/frontend/app/mail/template/page.tsx.ejs +5 -5
- package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +574 -574
- package/hedhog/frontend/app/menu/page.tsx.ejs +7 -2
- package/hedhog/frontend/app/preferences/page.tsx.ejs +1 -1
- package/hedhog/frontend/app/roles/page.tsx.ejs +7 -2
- package/hedhog/frontend/app/users/page.tsx.ejs +1 -1
- package/hedhog/frontend/app/users/user-sheet.tsx.ejs +5 -9
- package/hedhog/frontend/messages/en.json +36 -1
- package/hedhog/frontend/messages/pt.json +36 -1
- package/package.json +5 -5
- package/src/core.module.ts +7 -4
- package/src/index.ts +9 -6
- package/src/oauth/oauth.service.ts +12 -12
- package/src/pdf/components/index.ts +316 -0
- package/src/pdf/dto/generate-pdf.dto.ts +11 -0
- package/src/pdf/interfaces/pdf-theme-config.interface.ts +10 -0
- package/src/pdf/pdf.controller.ts +86 -0
- package/src/pdf/pdf.module.ts +17 -0
- package/src/pdf/pdf.service.ts +229 -0
- package/src/pdf/templates/hcode-institutional.template.ts +122 -0
- 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"}
|
package/hedhog/data/route.yaml
CHANGED
|
@@ -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: '
|
|
65
|
+
{ label: t('home'), href: '/' },
|
|
66
66
|
{ label: t('breadcrumbLabel') },
|
|
67
67
|
]}
|
|
68
68
|
title={t('title')}
|