@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,100 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PdfController = void 0;
16
+ const api_1 = require("@hed-hog/api");
17
+ const common_1 = require("@nestjs/common");
18
+ const generate_pdf_dto_1 = require("./dto/generate-pdf.dto");
19
+ const pdf_service_1 = require("./pdf.service");
20
+ let PdfController = class PdfController {
21
+ constructor(pdfService) {
22
+ this.pdfService = pdfService;
23
+ }
24
+ /**
25
+ * GET /core/pdf/example
26
+ *
27
+ * Generates a sample hcode Institutional PDF using the Design System
28
+ * template with the currently configured area color.
29
+ * Publicly accessible — no auth required.
30
+ */
31
+ async example(query, res) {
32
+ var _a, _b;
33
+ const area = (_a = query.area) !== null && _a !== void 0 ? _a : 'consulting';
34
+ const disposition = (_b = query.disposition) !== null && _b !== void 0 ? _b : 'inline';
35
+ const buffer = await this.pdfService.generatePdfFromTemplate('hcode-institutional', {
36
+ area,
37
+ title: 'Inteligência aplicada.',
38
+ subtitle: 'De diagnóstico a aplicação: consultoria, formação e pesquisa em IA para empresas que querem liderar.',
39
+ description: 'Combinamos diagnóstico estratégico, formação corporativa e pesquisa aplicada para transformar ' +
40
+ 'a inteligência artificial em resultado mensurável para o seu negócio.',
41
+ features: [
42
+ {
43
+ icon: 'discovery',
44
+ title: 'Discovery & Diagnóstico',
45
+ description: 'Mapeamento de maturidade, gaps e oportunidades de IA na sua operação atual.',
46
+ },
47
+ {
48
+ icon: 'strategy',
49
+ title: 'Estratégia & Roadmap',
50
+ description: 'Plano de adoção com priorização por impacto, viabilidade e alinhamento cultural.',
51
+ },
52
+ {
53
+ icon: 'governance',
54
+ title: 'Governança & Ética',
55
+ description: 'Frameworks de uso responsável, políticas internas e compliance regulatório.',
56
+ },
57
+ ],
58
+ tableHeaders: ['Fase', 'Entregável', 'Duração', 'Responsável'],
59
+ tableRows: [
60
+ ['01 · Discovery', 'Diagnóstico de maturidade IA', '2 semanas', 'hcode'],
61
+ ['02 · Estratégia', 'Roadmap de adoção e priorização', '3 semanas', 'hcode + Cliente'],
62
+ ['03 · Piloto', 'Implantação de caso de uso prioritário', '6 semanas', 'hcode + TI'],
63
+ ['04 · Scale', 'Expansão e gestão de mudança', 'ongoing', 'Cliente (suporte hcode)'],
64
+ ],
65
+ metadata: [
66
+ { label: 'Área', value: area.charAt(0).toUpperCase() + area.slice(1) },
67
+ { label: 'Versão', value: '1.0' },
68
+ { label: 'Data', value: new Date().toLocaleDateString('pt-BR') },
69
+ { label: 'Design System', value: 'DS v1.0' },
70
+ ],
71
+ signatories: [
72
+ { label: 'Responsável pelo Projeto' },
73
+ { label: 'Aprovado por' },
74
+ ],
75
+ });
76
+ res.set({
77
+ 'Content-Type': 'application/pdf',
78
+ 'Content-Disposition': `${disposition}; filename="hcode-${area}-example.pdf"`,
79
+ 'Content-Length': buffer.length,
80
+ });
81
+ res.end(buffer);
82
+ }
83
+ };
84
+ exports.PdfController = PdfController;
85
+ __decorate([
86
+ (0, api_1.Public)(),
87
+ (0, common_1.Get)('example'),
88
+ __param(0, (0, common_1.Query)()),
89
+ __param(1, (0, common_1.Res)()),
90
+ __metadata("design:type", Function),
91
+ __metadata("design:paramtypes", [generate_pdf_dto_1.GeneratePdfDTO, Object]),
92
+ __metadata("design:returntype", Promise)
93
+ ], PdfController.prototype, "example", null);
94
+ exports.PdfController = PdfController = __decorate([
95
+ (0, api_1.Role)(),
96
+ (0, common_1.Controller)('core/pdf'),
97
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => pdf_service_1.PdfService))),
98
+ __metadata("design:paramtypes", [pdf_service_1.PdfService])
99
+ ], PdfController);
100
+ //# sourceMappingURL=pdf.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.controller.js","sourceRoot":"","sources":["../../src/pdf/pdf.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class PdfModule {
2
+ }
3
+ //# sourceMappingURL=pdf.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.module.d.ts","sourceRoot":"","sources":["../../src/pdf/pdf.module.ts"],"names":[],"mappings":"AAOA,qBASa,SAAS;CAAG"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PdfModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const config_1 = require("@nestjs/config");
12
+ const setting_module_1 = require("../setting/setting.module");
13
+ const pdf_controller_1 = require("./pdf.controller");
14
+ const pdf_service_1 = require("./pdf.service");
15
+ let PdfModule = class PdfModule {
16
+ };
17
+ exports.PdfModule = PdfModule;
18
+ exports.PdfModule = PdfModule = __decorate([
19
+ (0, common_1.Module)({
20
+ imports: [
21
+ config_1.ConfigModule,
22
+ (0, common_1.forwardRef)(() => setting_module_1.SettingModule),
23
+ ],
24
+ providers: [pdf_service_1.PdfService],
25
+ exports: [pdf_service_1.PdfService],
26
+ controllers: [pdf_controller_1.PdfController],
27
+ })
28
+ ], PdfModule);
29
+ //# sourceMappingURL=pdf.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.module.js","sourceRoot":"","sources":["../../src/pdf/pdf.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,2CAA8C;AAE9C,8DAA0D;AAC1D,qDAAiD;AACjD,+CAA2C;AAWpC,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IATrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY;YACZ,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC;SAChC;QACD,SAAS,EAAE,CAAC,wBAAU,CAAC;QACvB,OAAO,EAAE,CAAC,wBAAU,CAAC;QACrB,WAAW,EAAE,CAAC,8BAAa,CAAC;KAC7B,CAAC;GACW,SAAS,CAAG"}
@@ -0,0 +1,44 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { SettingService } from '../setting/setting.service';
3
+ import { PdfAreaType, PdfThemeConfig } from './interfaces/pdf-theme-config.interface';
4
+ export interface PdfGenerateOptions {
5
+ format?: 'A4' | 'A3' | 'Letter';
6
+ margin?: {
7
+ top?: string;
8
+ right?: string;
9
+ bottom?: string;
10
+ left?: string;
11
+ };
12
+ printBackground?: boolean;
13
+ landscape?: boolean;
14
+ }
15
+ export declare class PdfService {
16
+ private readonly settingService;
17
+ private readonly configService;
18
+ private readonly logger;
19
+ constructor(settingService: SettingService, configService: ConfigService);
20
+ /**
21
+ * Resolves the active PdfThemeConfig for the given area.
22
+ * Reads admin-configured overrides from SettingService and falls back to
23
+ * the hard-coded Design System v1.0 defaults.
24
+ */
25
+ loadThemeConfig(area?: PdfAreaType): Promise<PdfThemeConfig>;
26
+ /**
27
+ * Resolves a potentially relative URL (e.g. /logo.svg) to an absolute URL
28
+ * using the API base URL derived from environment variables.
29
+ */
30
+ private resolveUrl;
31
+ /**
32
+ * Renders an HTML string to a PDF buffer using Playwright/Chromium.
33
+ *
34
+ * Uses dynamic `import()` via `new Function` to remain compatible with
35
+ * CommonJS bundle output (same pattern as operations.service.ts).
36
+ */
37
+ generatePdfFromHtml(html: string, options?: PdfGenerateOptions): Promise<Buffer>;
38
+ /**
39
+ * Generates a PDF from a named template and structured data.
40
+ * The theme is resolved automatically from `data.area` via SettingService.
41
+ */
42
+ generatePdfFromTemplate(templateName: string, data: Record<string, any>, options?: PdfGenerateOptions): Promise<Buffer>;
43
+ }
44
+ //# sourceMappingURL=pdf.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.service.d.ts","sourceRoot":"","sources":["../../src/pdf/pdf.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAQtF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC;IAChC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD,qBACa,UAAU;IAKnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;gBAInC,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa;IAK/C;;;;OAIG;IACG,eAAe,CAAC,IAAI,GAAE,WAA0B,GAAG,OAAO,CAAC,cAAc,CAAC;IA8DhF;;;OAGG;IACH,OAAO,CAAC,UAAU;IAqBlB;;;;;OAKG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAqE1F;;;OAGG;IACG,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC;CAkBnB"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var PdfService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PdfService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const config_1 = require("@nestjs/config");
19
+ const setting_service_1 = require("../setting/setting.service");
20
+ const hcode_institutional_template_1 = require("./templates/hcode-institutional.template");
21
+ const hcode_theme_1 = require("./themes/hcode.theme");
22
+ // ─────────────────────────────────────────────────────────────────────────────
23
+ // Service
24
+ // ─────────────────────────────────────────────────────────────────────────────
25
+ let PdfService = PdfService_1 = class PdfService {
26
+ constructor(settingService, configService) {
27
+ this.settingService = settingService;
28
+ this.configService = configService;
29
+ this.logger = new common_1.Logger(PdfService_1.name);
30
+ }
31
+ // ── Theme config ─────────────────────────────────────────────────────────
32
+ /**
33
+ * Resolves the active PdfThemeConfig for the given area.
34
+ * Reads admin-configured overrides from SettingService and falls back to
35
+ * the hard-coded Design System v1.0 defaults.
36
+ */
37
+ async loadThemeConfig(area = 'consulting') {
38
+ const defaults = hcode_theme_1.HCODE_DEFAULTS[area];
39
+ try {
40
+ const values = await this.settingService.getSettingValues([
41
+ 'pdf-company-name',
42
+ 'pdf-logo',
43
+ `pdf-${area}-color`,
44
+ 'theme-primary-light', // system-wide brand color
45
+ 'image-url', // system logo
46
+ 'system-name', // system display name fallback
47
+ ]);
48
+ // Color priority:
49
+ // 1. pdf-${area}-color if admin explicitly changed it from the DS default
50
+ // 2. theme-primary-light (global brand color configured in Settings)
51
+ // 3. DS hard-coded default for the area
52
+ const areaSpecificColor = values[`pdf-${area}-color`];
53
+ const primaryColor = (areaSpecificColor && areaSpecificColor !== defaults.primary)
54
+ ? areaSpecificColor
55
+ : values['theme-primary-light'] || defaults.primary;
56
+ const areaDefault = primaryColor === defaults.primary
57
+ ? defaults
58
+ : Object.assign(Object.assign({}, defaults), { primary: primaryColor });
59
+ // Use pdf-logo if set, otherwise fall back to the system image-url setting.
60
+ // Relative paths (e.g. /logo.svg) are resolved to absolute so Playwright can fetch them.
61
+ const rawLogoUrl = values['pdf-logo'] ||
62
+ values['image-url'] ||
63
+ '';
64
+ const logoOverride = rawLogoUrl ? this.resolveUrl(rawLogoUrl) : '';
65
+ return {
66
+ area,
67
+ companyName: values['pdf-company-name'] ||
68
+ values['system-name'] ||
69
+ 'hcode',
70
+ logoOverride,
71
+ primaryColor: areaDefault.primary,
72
+ darkColor: areaDefault.dark,
73
+ lightColor: areaDefault.light,
74
+ };
75
+ }
76
+ catch (_a) {
77
+ this.logger.warn(`Could not load PDF settings from SettingService – using Design System defaults for area "${area}".`);
78
+ return {
79
+ area,
80
+ companyName: 'hcode',
81
+ logoOverride: '',
82
+ primaryColor: defaults.primary,
83
+ darkColor: defaults.dark,
84
+ lightColor: defaults.light,
85
+ };
86
+ }
87
+ }
88
+ /**
89
+ * Resolves a potentially relative URL (e.g. /logo.svg) to an absolute URL
90
+ * using the API base URL derived from environment variables.
91
+ */
92
+ resolveUrl(url) {
93
+ var _a, _b;
94
+ if (!url)
95
+ return '';
96
+ if (url.startsWith('data:') ||
97
+ url.startsWith('http://') ||
98
+ url.startsWith('https://')) {
99
+ return url;
100
+ }
101
+ const port = (_a = this.configService.get('PORT')) !== null && _a !== void 0 ? _a : 3100;
102
+ const baseUrl = (_b = this.configService.get('API_URL')) !== null && _b !== void 0 ? _b : `http://localhost:${port}`;
103
+ return (baseUrl.replace(/\/$/, '') +
104
+ (url.startsWith('/') ? url : '/' + url));
105
+ }
106
+ // ── HTML → PDF ────────────────────────────────────────────────────────────
107
+ /**
108
+ * Renders an HTML string to a PDF buffer using Playwright/Chromium.
109
+ *
110
+ * Uses dynamic `import()` via `new Function` to remain compatible with
111
+ * CommonJS bundle output (same pattern as operations.service.ts).
112
+ */
113
+ async generatePdfFromHtml(html, options = {}) {
114
+ var _a, _b, _c, _d, _e;
115
+ const executablePath = this.configService.get('CHROMIUM_EXECUTABLE_PATH');
116
+ const noSandbox = this.configService.get('CHROMIUM_NO_SANDBOX') === 'true';
117
+ const launchArgs = noSandbox
118
+ ? ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage']
119
+ : [];
120
+ let browser = null;
121
+ try {
122
+ const importPlaywright = new Function('moduleName', 'return import(moduleName);');
123
+ const playwright = await importPlaywright('playwright');
124
+ browser = await playwright.chromium.launch(Object.assign(Object.assign({ headless: true }, (executablePath ? { executablePath } : {})), { args: launchArgs }));
125
+ const page = await browser.newPage();
126
+ // A4 viewport for proper page layout
127
+ await page.setViewportSize({ width: 794, height: 1123 });
128
+ await page.setContent(html, { waitUntil: 'networkidle' });
129
+ const pdfBuffer = await page.pdf({
130
+ format: (_a = options.format) !== null && _a !== void 0 ? _a : 'A4',
131
+ printBackground: (_b = options.printBackground) !== null && _b !== void 0 ? _b : true,
132
+ landscape: (_c = options.landscape) !== null && _c !== void 0 ? _c : false,
133
+ margin: (_d = options.margin) !== null && _d !== void 0 ? _d : { top: '0', right: '0', bottom: '0', left: '0' },
134
+ });
135
+ return Buffer.from(pdfBuffer);
136
+ }
137
+ catch (error) {
138
+ const errorMessage = error instanceof Error ? error.message : String(error);
139
+ const errorStack = error instanceof Error ? ((_e = error.stack) !== null && _e !== void 0 ? _e : errorMessage) : String(error);
140
+ const missingRuntime = /Cannot find package ['"]playwright['"]|Cannot find module ['"]playwright['"]|Executable doesn't exist|browserType\.launch|Failed to launch|Please run the following command/i.test(errorMessage);
141
+ this.logger.error(`PDF generation failed. ${errorMessage}`, errorStack);
142
+ if (missingRuntime) {
143
+ throw new common_1.InternalServerErrorException('Playwright runtime is not available. Run `npx playwright install chromium` in apps/api.');
144
+ }
145
+ throw new common_1.InternalServerErrorException(`PDF generation failed: ${errorMessage}`);
146
+ }
147
+ finally {
148
+ if (browser) {
149
+ try {
150
+ await browser.close();
151
+ }
152
+ catch (_f) {
153
+ // Ignore close errors
154
+ }
155
+ }
156
+ }
157
+ }
158
+ // ── Template engine ───────────────────────────────────────────────────────
159
+ /**
160
+ * Generates a PDF from a named template and structured data.
161
+ * The theme is resolved automatically from `data.area` via SettingService.
162
+ */
163
+ async generatePdfFromTemplate(templateName, data, options) {
164
+ var _a;
165
+ const area = (_a = data.area) !== null && _a !== void 0 ? _a : 'consulting';
166
+ const themeConfig = await this.loadThemeConfig(area);
167
+ let html;
168
+ switch (templateName) {
169
+ case 'hcode-institutional':
170
+ html = (0, hcode_institutional_template_1.hcodeInstitutionalTemplate)(data, themeConfig);
171
+ break;
172
+ default:
173
+ throw new common_1.InternalServerErrorException(`Unknown PDF template: "${templateName}". Available: hcode-institutional`);
174
+ }
175
+ return this.generatePdfFromHtml(html, options);
176
+ }
177
+ };
178
+ exports.PdfService = PdfService;
179
+ exports.PdfService = PdfService = PdfService_1 = __decorate([
180
+ (0, common_1.Injectable)(),
181
+ __param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => setting_service_1.SettingService))),
182
+ __metadata("design:paramtypes", [setting_service_1.SettingService,
183
+ config_1.ConfigService])
184
+ ], PdfService);
185
+ //# sourceMappingURL=pdf.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.service.js","sourceRoot":"","sources":["../../src/pdf/pdf.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { FeatureCardData } from '../components';
2
+ import { PdfThemeConfig } from '../interfaces/pdf-theme-config.interface';
3
+ export interface HcodeInstitutionalData {
4
+ area?: 'consulting' | 'training' | 'research';
5
+ title: string;
6
+ subtitle?: string;
7
+ /** Long-form description rendered as purpose block (primary-color background) */
8
+ description?: string;
9
+ features?: FeatureCardData[];
10
+ tableHeaders?: string[];
11
+ tableRows?: string[][];
12
+ metadata?: Array<{
13
+ label: string;
14
+ value: string;
15
+ }>;
16
+ signatories?: Array<{
17
+ label: string;
18
+ name?: string;
19
+ }>;
20
+ /** Override the bottom meta line on the cover (default: "HCODE · CNPJ 24.700.731/0001-08") */
21
+ coverMeta?: string;
22
+ /** Override the page title shown in the repeating header */
23
+ pageTitle?: string;
24
+ }
25
+ /**
26
+ * hcode Institutional template — Design System v1.0
27
+ *
28
+ * Structure:
29
+ * Page 1 — Full-bleed cover (break-after)
30
+ * Page 2+ — accent bar + header + content sections
31
+ *
32
+ * All sections are optional; only present when the corresponding data
33
+ * field is provided and non-empty.
34
+ */
35
+ export declare function hcodeInstitutionalTemplate(data: HcodeInstitutionalData, config: PdfThemeConfig): string;
36
+ //# sourceMappingURL=hcode-institutional.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcode-institutional.template.d.ts","sourceRoot":"","sources":["../../../src/pdf/templates/hcode-institutional.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,eAAe,EAUlB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAM1E,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,cAAc,GACrB,MAAM,CAkER"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hcodeInstitutionalTemplate = hcodeInstitutionalTemplate;
4
+ const components_1 = require("../components");
5
+ // ─────────────────────────────────────────────────────────────────────────────
6
+ // Template
7
+ // ─────────────────────────────────────────────────────────────────────────────
8
+ /**
9
+ * hcode Institutional template — Design System v1.0
10
+ *
11
+ * Structure:
12
+ * Page 1 — Full-bleed cover (break-after)
13
+ * Page 2+ — accent bar + header + content sections
14
+ *
15
+ * All sections are optional; only present when the corresponding data
16
+ * field is provided and non-empty.
17
+ */
18
+ function hcodeInstitutionalTemplate(data, config) {
19
+ var _a;
20
+ const coverData = {
21
+ title: data.title,
22
+ subtitle: data.subtitle,
23
+ bottomMeta: data.coverMeta,
24
+ };
25
+ const pageTitle = (_a = data.pageTitle) !== null && _a !== void 0 ? _a : `${config.area.toUpperCase()} · ${data.title}`;
26
+ // ── Content sections ──────────────────────────────────────────────────────
27
+ const sections = [];
28
+ // Purpose block (description)
29
+ if (data.description) {
30
+ sections.push((0, components_1.purposeBlock)('SOBRE O PROJETO', config.companyName.toUpperCase(), data.description));
31
+ }
32
+ // Feature cards
33
+ if (data.features && data.features.length > 0) {
34
+ sections.push((0, components_1.sectionHeader)('DIFERENCIAIS', 'O que entregamos'));
35
+ sections.push((0, components_1.featureCards)(data.features));
36
+ }
37
+ // Data table
38
+ if (data.tableHeaders &&
39
+ data.tableHeaders.length > 0 &&
40
+ data.tableRows &&
41
+ data.tableRows.length > 0) {
42
+ sections.push((0, components_1.sectionHeader)('EXECUÇÃO', 'Plano de trabalho'));
43
+ sections.push((0, components_1.dataTable)(data.tableHeaders, data.tableRows));
44
+ }
45
+ // Metadata block
46
+ if (data.metadata && data.metadata.length > 0) {
47
+ sections.push((0, components_1.metadataBlock)(data.metadata));
48
+ }
49
+ // Signature area
50
+ if (data.signatories && data.signatories.length > 0) {
51
+ sections.push((0, components_1.sectionHeader)('ACEITE', 'Assinaturas'));
52
+ sections.push((0, components_1.signatureArea)(data.signatories));
53
+ }
54
+ // ── Assembly ──────────────────────────────────────────────────────────────
55
+ const body = [
56
+ // Page 1: cover
57
+ (0, components_1.coverPage)(config, coverData),
58
+ // Page 2+: content
59
+ (0, components_1.pageAccentBar)(),
60
+ (0, components_1.pageHeader)(config, pageTitle),
61
+ `<div class="page-content">${sections.join('\n')}</div>`,
62
+ // Fixed footer (appears on every page including cover)
63
+ (0, components_1.pdfFooter)(config.companyName),
64
+ ].join('\n');
65
+ return (0, components_1.pageShell)('', body, config);
66
+ }
67
+ //# sourceMappingURL=hcode-institutional.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcode-institutional.template.js","sourceRoot":"","sources":["../../../src/pdf/templates/hcode-institutional.template.ts"],"names":[],"mappings":";;AAoDA,gEAqEC;AAzHD,8CAcuB;AAwBvB,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,SAAgB,0BAA0B,CACxC,IAA4B,EAC5B,MAAsB;;IAEtB,MAAM,SAAS,GAAkB;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,SAAS;KAC3B,CAAC;IAEF,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,SAAS,mCAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAEnF,6EAA6E;IAC7E,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,8BAA8B;IAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CACX,IAAA,yBAAY,EACV,iBAAiB,EACjB,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,EAChC,IAAI,CAAC,WAAW,CACjB,CACF,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,IAAA,0BAAa,EAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACjE,QAAQ,CAAC,IAAI,CAAC,IAAA,yBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa;IACb,IACE,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAC5B,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EACzB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,IAAA,0BAAa,EAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC9D,QAAQ,CAAC,IAAI,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,IAAA,0BAAa,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,iBAAiB;IACjB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,IAAA,0BAAa,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,IAAA,0BAAa,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,6EAA6E;IAC7E,MAAM,IAAI,GAAG;QACX,gBAAgB;QAChB,IAAA,sBAAS,EAAC,MAAM,EAAE,SAAS,CAAC;QAE5B,mBAAmB;QACnB,IAAA,0BAAa,GAAE;QACf,IAAA,uBAAU,EAAC,MAAM,EAAE,SAAS,CAAC;QAC7B,6BAA6B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;QAExD,uDAAuD;QACvD,IAAA,sBAAS,EAAC,MAAM,CAAC,WAAW,CAAC;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,IAAA,sBAAS,EAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { PdfAreaType, PdfThemeConfig } from '../interfaces/pdf-theme-config.interface';
2
+ export interface AreaDefaults {
3
+ primary: string;
4
+ dark: string;
5
+ light: string;
6
+ }
7
+ /** Per-area color tokens — Design System v1.0 */
8
+ export declare const HCODE_DEFAULTS: Record<PdfAreaType, AreaDefaults>;
9
+ /** Neutral tokens — shared across all areas */
10
+ export declare const HCODE_NEUTRALS: {
11
+ readonly ink1: "#101010";
12
+ readonly ink2: "#5D5D5D";
13
+ readonly ink3: "#79756C";
14
+ readonly line: "#ECECEC";
15
+ readonly surface: "#FFFFFF";
16
+ readonly surface2: "#F8F8F8";
17
+ };
18
+ /** Google Fonts import for Inter, Roboto and JetBrains Mono */
19
+ export declare function buildFontImport(): string;
20
+ /**
21
+ * Generates the <style> block with all Design System CSS variables and rules.
22
+ * Typography scale is calibrated for A4 PDF (794 px viewport).
23
+ */
24
+ export declare function buildThemeCss(config: PdfThemeConfig): string;
25
+ //# sourceMappingURL=hcode.theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcode.theme.d.ts","sourceRoot":"","sources":["../../../src/pdf/themes/hcode.theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAOvF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iDAAiD;AACjD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAO5D,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAMX,+DAA+D;AAC/D,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAkd5D"}