@hed-hog/core 0.0.328 → 0.0.330

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 (206) hide show
  1. package/dist/ai/ai.service.d.ts +1 -1
  2. package/dist/auth/auth.controller.d.ts +23 -23
  3. package/dist/auth/auth.service.d.ts +41 -41
  4. package/dist/challenge/challenge.service.d.ts +14 -14
  5. package/dist/core/system.controller.d.ts +1 -1
  6. package/dist/core/system.service.d.ts +1 -1
  7. package/dist/core.module.d.ts.map +1 -1
  8. package/dist/core.module.js +9 -2
  9. package/dist/core.module.js.map +1 -1
  10. package/dist/dashboard/dashboard/dashboard.controller.d.ts +84 -84
  11. package/dist/dashboard/dashboard/dashboard.service.d.ts +84 -84
  12. package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +29 -29
  13. package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +29 -29
  14. package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +42 -42
  15. package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +42 -42
  16. package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +11 -11
  17. package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +11 -11
  18. package/dist/dashboard/dashboard-item/dashboard-item.controller.d.ts +6 -6
  19. package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts +6 -6
  20. package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +33 -33
  21. package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +33 -33
  22. package/dist/dashboard/dashboard-user/dashboard-user.controller.d.ts +3 -3
  23. package/dist/dashboard/dashboard-user/dashboard-user.service.d.ts +3 -3
  24. package/dist/file/file.controller.d.ts +10 -10
  25. package/dist/file/file.service.d.ts +22 -22
  26. package/dist/index.d.ts +11 -4
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +12 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/mail/mail.controller.d.ts +15 -15
  31. package/dist/mail/mail.service.d.ts +15 -15
  32. package/dist/mail-profile/mail-profile.controller.d.ts +9 -9
  33. package/dist/mail-profile/mail-profile.service.d.ts +9 -9
  34. package/dist/mail-sent/mail-sent.controller.d.ts +17 -17
  35. package/dist/mail-sent/mail-sent.service.d.ts +17 -17
  36. package/dist/mcp/decorators/mcp-tool.decorator.d.ts +4 -0
  37. package/dist/mcp/decorators/mcp-tool.decorator.d.ts.map +1 -0
  38. package/dist/mcp/decorators/mcp-tool.decorator.js +8 -0
  39. package/dist/mcp/decorators/mcp-tool.decorator.js.map +1 -0
  40. package/dist/mcp/guards/mcp-auth.guard.d.ts +9 -0
  41. package/dist/mcp/guards/mcp-auth.guard.d.ts.map +1 -0
  42. package/dist/mcp/guards/mcp-auth.guard.js +41 -0
  43. package/dist/mcp/guards/mcp-auth.guard.js.map +1 -0
  44. package/dist/mcp/guards/mcp-permission.guard.d.ts +8 -0
  45. package/dist/mcp/guards/mcp-permission.guard.d.ts.map +1 -0
  46. package/dist/mcp/guards/mcp-permission.guard.js +57 -0
  47. package/dist/mcp/guards/mcp-permission.guard.js.map +1 -0
  48. package/dist/mcp/interfaces/mcp-tool-definition.interface.d.ts +7 -0
  49. package/dist/mcp/interfaces/mcp-tool-definition.interface.d.ts.map +1 -0
  50. package/dist/mcp/interfaces/mcp-tool-definition.interface.js +3 -0
  51. package/dist/mcp/interfaces/mcp-tool-definition.interface.js.map +1 -0
  52. package/dist/mcp/mcp-audit.service.d.ts +17 -0
  53. package/dist/mcp/mcp-audit.service.d.ts.map +1 -0
  54. package/dist/mcp/mcp-audit.service.js +46 -0
  55. package/dist/mcp/mcp-audit.service.js.map +1 -0
  56. package/dist/mcp/mcp-registry.service.d.ts +21 -0
  57. package/dist/mcp/mcp-registry.service.d.ts.map +1 -0
  58. package/dist/mcp/mcp-registry.service.js +69 -0
  59. package/dist/mcp/mcp-registry.service.js.map +1 -0
  60. package/dist/mcp/mcp-server.service.d.ts +12 -0
  61. package/dist/mcp/mcp-server.service.d.ts.map +1 -0
  62. package/dist/mcp/mcp-server.service.js +94 -0
  63. package/dist/mcp/mcp-server.service.js.map +1 -0
  64. package/dist/mcp/mcp.controller.d.ts +8 -0
  65. package/dist/mcp/mcp.controller.d.ts.map +1 -0
  66. package/dist/mcp/mcp.controller.js +54 -0
  67. package/dist/mcp/mcp.controller.js.map +1 -0
  68. package/dist/mcp/mcp.module.d.ts +3 -0
  69. package/dist/mcp/mcp.module.d.ts.map +1 -0
  70. package/dist/mcp/mcp.module.js +49 -0
  71. package/dist/mcp/mcp.module.js.map +1 -0
  72. package/dist/mcp/tools/core-settings.mcp-tools.d.ts +12 -0
  73. package/dist/mcp/tools/core-settings.mcp-tools.d.ts.map +1 -0
  74. package/dist/mcp/tools/core-settings.mcp-tools.js +66 -0
  75. package/dist/mcp/tools/core-settings.mcp-tools.js.map +1 -0
  76. package/dist/mcp/tools/core-users.mcp-tools.d.ts +55 -0
  77. package/dist/mcp/tools/core-users.mcp-tools.d.ts.map +1 -0
  78. package/dist/mcp/tools/core-users.mcp-tools.js +295 -0
  79. package/dist/mcp/tools/core-users.mcp-tools.js.map +1 -0
  80. package/dist/mcp/types/mcp-context.type.d.ts +7 -0
  81. package/dist/mcp/types/mcp-context.type.d.ts.map +1 -0
  82. package/dist/mcp/types/mcp-context.type.js +3 -0
  83. package/dist/mcp/types/mcp-context.type.js.map +1 -0
  84. package/dist/mcp-chat/dto/create-conversation.dto.d.ts +4 -0
  85. package/dist/mcp-chat/dto/create-conversation.dto.d.ts.map +1 -0
  86. package/dist/mcp-chat/dto/create-conversation.dto.js +22 -0
  87. package/dist/mcp-chat/dto/create-conversation.dto.js.map +1 -0
  88. package/dist/mcp-chat/dto/send-message.dto.d.ts +4 -0
  89. package/dist/mcp-chat/dto/send-message.dto.d.ts.map +1 -0
  90. package/dist/mcp-chat/dto/send-message.dto.js +22 -0
  91. package/dist/mcp-chat/dto/send-message.dto.js.map +1 -0
  92. package/dist/mcp-chat/mcp-chat.controller.d.ts +55 -0
  93. package/dist/mcp-chat/mcp-chat.controller.d.ts.map +1 -0
  94. package/dist/mcp-chat/mcp-chat.controller.js +90 -0
  95. package/dist/mcp-chat/mcp-chat.controller.js.map +1 -0
  96. package/dist/mcp-chat/mcp-chat.module.d.ts +3 -0
  97. package/dist/mcp-chat/mcp-chat.module.d.ts.map +1 -0
  98. package/dist/mcp-chat/mcp-chat.module.js +30 -0
  99. package/dist/mcp-chat/mcp-chat.module.js.map +1 -0
  100. package/dist/mcp-chat/mcp-chat.service.d.ts +50 -0
  101. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -0
  102. package/dist/mcp-chat/mcp-chat.service.js +290 -0
  103. package/dist/mcp-chat/mcp-chat.service.js.map +1 -0
  104. package/dist/menu/menu.controller.d.ts +8 -8
  105. package/dist/menu/menu.service.d.ts +8 -8
  106. package/dist/oauth/oauth.service.js +1 -1
  107. package/dist/oauth/oauth.service.js.map +1 -1
  108. package/dist/pdf/components/index.d.ts +57 -0
  109. package/dist/pdf/components/index.d.ts.map +1 -0
  110. package/dist/pdf/components/index.js +258 -0
  111. package/dist/pdf/components/index.js.map +1 -0
  112. package/dist/pdf/dto/generate-pdf.dto.d.ts +5 -0
  113. package/dist/pdf/dto/generate-pdf.dto.d.ts.map +1 -0
  114. package/dist/pdf/dto/generate-pdf.dto.js +27 -0
  115. package/dist/pdf/dto/generate-pdf.dto.js.map +1 -0
  116. package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts +10 -0
  117. package/dist/pdf/interfaces/pdf-theme-config.interface.d.ts.map +1 -0
  118. package/dist/pdf/interfaces/pdf-theme-config.interface.js +3 -0
  119. package/dist/pdf/interfaces/pdf-theme-config.interface.js.map +1 -0
  120. package/dist/pdf/pdf.controller.d.ts +16 -0
  121. package/dist/pdf/pdf.controller.d.ts.map +1 -0
  122. package/dist/pdf/pdf.controller.js +100 -0
  123. package/dist/pdf/pdf.controller.js.map +1 -0
  124. package/dist/pdf/pdf.module.d.ts +3 -0
  125. package/dist/pdf/pdf.module.d.ts.map +1 -0
  126. package/dist/pdf/pdf.module.js +29 -0
  127. package/dist/pdf/pdf.module.js.map +1 -0
  128. package/dist/pdf/pdf.service.d.ts +44 -0
  129. package/dist/pdf/pdf.service.d.ts.map +1 -0
  130. package/dist/pdf/pdf.service.js +185 -0
  131. package/dist/pdf/pdf.service.js.map +1 -0
  132. package/dist/pdf/templates/hcode-institutional.template.d.ts +36 -0
  133. package/dist/pdf/templates/hcode-institutional.template.d.ts.map +1 -0
  134. package/dist/pdf/templates/hcode-institutional.template.js +67 -0
  135. package/dist/pdf/templates/hcode-institutional.template.js.map +1 -0
  136. package/dist/pdf/themes/hcode.theme.d.ts +25 -0
  137. package/dist/pdf/themes/hcode.theme.d.ts.map +1 -0
  138. package/dist/pdf/themes/hcode.theme.js +504 -0
  139. package/dist/pdf/themes/hcode.theme.js.map +1 -0
  140. package/dist/profile/profile.controller.d.ts +16 -16
  141. package/dist/profile/profile.service.d.ts +16 -16
  142. package/dist/role/role.controller.d.ts +12 -12
  143. package/dist/role/role.service.d.ts +12 -12
  144. package/dist/route/dto/create.dto.d.ts +6 -2
  145. package/dist/route/dto/create.dto.d.ts.map +1 -1
  146. package/dist/route/dto/create.dto.js +19 -1
  147. package/dist/route/dto/create.dto.js.map +1 -1
  148. package/dist/route/dto/update.dto.d.ts +4 -0
  149. package/dist/route/dto/update.dto.d.ts.map +1 -1
  150. package/dist/route/dto/update.dto.js +19 -3
  151. package/dist/route/dto/update.dto.js.map +1 -1
  152. package/dist/route/route.service.d.ts +1 -1
  153. package/dist/route/route.service.d.ts.map +1 -1
  154. package/dist/route/route.service.js +18 -11
  155. package/dist/route/route.service.js.map +1 -1
  156. package/dist/screen/screen.controller.d.ts +3 -3
  157. package/dist/screen/screen.service.d.ts +3 -3
  158. package/dist/session/session.controller.d.ts +4 -4
  159. package/dist/session/session.service.d.ts +12 -12
  160. package/dist/setting/setting.controller.d.ts +13 -13
  161. package/dist/setting/setting.service.d.ts +13 -13
  162. package/dist/user/user.controller.d.ts +24 -24
  163. package/dist/user/user.service.d.ts +55 -55
  164. package/hedhog/data/menu.yaml +40 -26
  165. package/hedhog/data/route.yaml +583 -152
  166. package/hedhog/data/setting_group.yaml +60 -0
  167. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +574 -0
  168. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +5 -9
  169. package/hedhog/frontend/messages/en.json +19 -0
  170. package/hedhog/frontend/messages/pt.json +19 -0
  171. package/hedhog/table/mcp_conversation.yaml +12 -0
  172. package/hedhog/table/mcp_conversation_message.yaml +23 -0
  173. package/hedhog/table/mcp_tool_call_log.yaml +22 -0
  174. package/hedhog/table/route.yaml +33 -22
  175. package/package.json +7 -6
  176. package/src/core.module.ts +18 -11
  177. package/src/index.ts +22 -12
  178. package/src/mcp/decorators/mcp-tool.decorator.ts +7 -0
  179. package/src/mcp/guards/mcp-auth.guard.ts +32 -0
  180. package/src/mcp/guards/mcp-permission.guard.ts +51 -0
  181. package/src/mcp/interfaces/mcp-tool-definition.interface.ts +6 -0
  182. package/src/mcp/mcp-audit.service.ts +36 -0
  183. package/src/mcp/mcp-registry.service.ts +69 -0
  184. package/src/mcp/mcp-server.service.ts +87 -0
  185. package/src/mcp/mcp.controller.ts +30 -0
  186. package/src/mcp/mcp.module.ts +36 -0
  187. package/src/mcp/tools/core-settings.mcp-tools.ts +53 -0
  188. package/src/mcp/tools/core-users.mcp-tools.ts +267 -0
  189. package/src/mcp/types/mcp-context.type.ts +6 -0
  190. package/src/mcp-chat/dto/create-conversation.dto.ts +7 -0
  191. package/src/mcp-chat/dto/send-message.dto.ts +7 -0
  192. package/src/mcp-chat/mcp-chat.controller.ts +60 -0
  193. package/src/mcp-chat/mcp-chat.module.ts +17 -0
  194. package/src/mcp-chat/mcp-chat.service.ts +332 -0
  195. package/src/oauth/oauth.service.ts +12 -12
  196. package/src/pdf/components/index.ts +316 -0
  197. package/src/pdf/dto/generate-pdf.dto.ts +11 -0
  198. package/src/pdf/interfaces/pdf-theme-config.interface.ts +10 -0
  199. package/src/pdf/pdf.controller.ts +86 -0
  200. package/src/pdf/pdf.module.ts +17 -0
  201. package/src/pdf/pdf.service.ts +229 -0
  202. package/src/pdf/templates/hcode-institutional.template.ts +122 -0
  203. package/src/pdf/themes/hcode.theme.ts +515 -0
  204. package/src/route/dto/create.dto.ts +32 -14
  205. package/src/route/dto/update.dto.ts +31 -16
  206. package/src/route/route.service.ts +23 -12
@@ -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"}
@@ -105,11 +105,11 @@ export declare class ProfileController {
105
105
  id: any;
106
106
  }): Promise<{
107
107
  value: string;
108
- type: import("@prisma/client").$Enums.user_identifier_type_e66d505520_enum;
109
- id: number;
110
108
  created_at: Date;
109
+ id: number;
111
110
  updated_at: Date;
112
111
  user_id: number;
112
+ type: import("@prisma/client").$Enums.user_identifier_type_e66d505520_enum;
113
113
  enabled: boolean;
114
114
  verified_at: Date | null;
115
115
  }>;
@@ -121,10 +121,10 @@ export declare class ProfileController {
121
121
  getProfile({ id }: {
122
122
  id: any;
123
123
  }): Promise<{
124
- name: string;
125
- id: number;
126
124
  created_at: Date;
125
+ id: number;
127
126
  updated_at: Date;
127
+ name: string;
128
128
  photo_id: number | null;
129
129
  suspended_until: Date | null;
130
130
  last_login_at: Date | null;
@@ -135,22 +135,22 @@ export declare class ProfileController {
135
135
  id: any;
136
136
  }): Promise<({
137
137
  user_mfa_email: {
138
- id: number;
139
138
  created_at: Date;
139
+ id: number;
140
140
  updated_at: Date;
141
141
  email: string;
142
142
  user_mfa_id: number;
143
143
  }[];
144
144
  user_mfa_totp: {
145
- id: number;
146
- secret: import("@prisma/client/runtime/library").Bytes;
147
145
  created_at: Date;
146
+ id: number;
148
147
  updated_at: Date;
148
+ secret: import("@prisma/client/runtime/library").Bytes;
149
149
  user_mfa_id: number;
150
150
  }[];
151
151
  user_mfa_webauthn: {
152
- id: number;
153
152
  created_at: Date;
153
+ id: number;
154
154
  updated_at: Date;
155
155
  user_mfa_id: number;
156
156
  credential_id: import("@prisma/client/runtime/library").Bytes;
@@ -159,24 +159,24 @@ export declare class ProfileController {
159
159
  last_used_at: Date | null;
160
160
  }[];
161
161
  } & {
162
- name: string;
163
- type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
164
- id: number;
165
162
  created_at: Date;
163
+ id: number;
166
164
  updated_at: Date;
167
165
  user_id: number;
166
+ name: string;
167
+ type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
168
168
  suspended_until: Date | null;
169
169
  verified_at: Date | null;
170
170
  })[]>;
171
171
  updateMFA({ id: userId }: {
172
172
  id: any;
173
173
  }, mfaId: number, { name }: UpdateDto): Promise<{
174
- name: string;
175
- type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
176
- id: number;
177
174
  created_at: Date;
175
+ id: number;
178
176
  updated_at: Date;
179
177
  user_id: number;
178
+ name: string;
179
+ type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
180
180
  suspended_until: Date | null;
181
181
  verified_at: Date | null;
182
182
  }>;
@@ -257,10 +257,10 @@ export declare class ProfileController {
257
257
  update(data: UpdateDto, { id }: {
258
258
  id: any;
259
259
  }): Promise<{
260
- name: string;
261
- id: number;
262
260
  created_at: Date;
261
+ id: number;
263
262
  updated_at: Date;
263
+ name: string;
264
264
  photo_id: number | null;
265
265
  suspended_until: Date | null;
266
266
  last_login_at: Date | null;
@@ -46,19 +46,19 @@ export declare class ProfileService {
46
46
  }>;
47
47
  getEmailIdentifier(userId: number): Promise<{
48
48
  value: string;
49
- type: import("@prisma/client").$Enums.user_identifier_type_e66d505520_enum;
50
- id: number;
51
49
  created_at: Date;
50
+ id: number;
52
51
  updated_at: Date;
53
52
  user_id: number;
53
+ type: import("@prisma/client").$Enums.user_identifier_type_e66d505520_enum;
54
54
  enabled: boolean;
55
55
  verified_at: Date | null;
56
56
  }>;
57
57
  getProfile(userId: number): Promise<{
58
- name: string;
59
- id: number;
60
58
  created_at: Date;
59
+ id: number;
61
60
  updated_at: Date;
61
+ name: string;
62
62
  photo_id: number | null;
63
63
  suspended_until: Date | null;
64
64
  last_login_at: Date | null;
@@ -67,22 +67,22 @@ export declare class ProfileService {
67
67
  }>;
68
68
  getMFAMethods(userId: number): Promise<({
69
69
  user_mfa_email: {
70
- id: number;
71
70
  created_at: Date;
71
+ id: number;
72
72
  updated_at: Date;
73
73
  email: string;
74
74
  user_mfa_id: number;
75
75
  }[];
76
76
  user_mfa_totp: {
77
- id: number;
78
- secret: import("@prisma/client/runtime/library").Bytes;
79
77
  created_at: Date;
78
+ id: number;
80
79
  updated_at: Date;
80
+ secret: import("@prisma/client/runtime/library").Bytes;
81
81
  user_mfa_id: number;
82
82
  }[];
83
83
  user_mfa_webauthn: {
84
- id: number;
85
84
  created_at: Date;
85
+ id: number;
86
86
  updated_at: Date;
87
87
  user_mfa_id: number;
88
88
  credential_id: import("@prisma/client/runtime/library").Bytes;
@@ -91,30 +91,30 @@ export declare class ProfileService {
91
91
  last_used_at: Date | null;
92
92
  }[];
93
93
  } & {
94
- name: string;
95
- type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
96
- id: number;
97
94
  created_at: Date;
95
+ id: number;
98
96
  updated_at: Date;
99
97
  user_id: number;
98
+ name: string;
99
+ type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
100
100
  suspended_until: Date | null;
101
101
  verified_at: Date | null;
102
102
  })[]>;
103
103
  updateMFA(userId: number, mfaId: number, { name }: UpdateDto): Promise<{
104
- name: string;
105
- type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
106
- id: number;
107
104
  created_at: Date;
105
+ id: number;
108
106
  updated_at: Date;
109
107
  user_id: number;
108
+ name: string;
109
+ type: import("@prisma/client").$Enums.user_mfa_type_4ce08a626e_enum;
110
110
  suspended_until: Date | null;
111
111
  verified_at: Date | null;
112
112
  }>;
113
113
  update(userid: number, { name }: UpdateDto): Promise<{
114
- name: string;
115
- id: number;
116
114
  created_at: Date;
115
+ id: number;
117
116
  updated_at: Date;
117
+ name: string;
118
118
  photo_id: number | null;
119
119
  suspended_until: Date | null;
120
120
  last_login_at: Date | null;