@hed-hog/core 0.0.400 → 0.0.402

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 (274) hide show
  1. package/dist/access-log/access-log.interceptor.d.ts +10 -0
  2. package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
  3. package/dist/access-log/access-log.interceptor.js +15 -1
  4. package/dist/access-log/access-log.interceptor.js.map +1 -1
  5. package/dist/ai/ai.controller.d.ts +2 -0
  6. package/dist/ai/ai.controller.d.ts.map +1 -1
  7. package/dist/ai/ai.service.d.ts +86 -2
  8. package/dist/ai/ai.service.d.ts.map +1 -1
  9. package/dist/ai/ai.service.js +304 -23
  10. package/dist/ai/ai.service.js.map +1 -1
  11. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts +12 -0
  12. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts.map +1 -1
  13. package/dist/ai-instruction/ai-prompt-resolver.service.js +26 -0
  14. package/dist/ai-instruction/ai-prompt-resolver.service.js.map +1 -1
  15. package/dist/core.module.d.ts.map +1 -1
  16. package/dist/core.module.js +3 -0
  17. package/dist/core.module.js.map +1 -1
  18. package/dist/document-kit/document-kit.module.d.ts +3 -0
  19. package/dist/document-kit/document-kit.module.d.ts.map +1 -0
  20. package/dist/document-kit/document-kit.module.js +24 -0
  21. package/dist/document-kit/document-kit.module.js.map +1 -0
  22. package/dist/document-kit/document-kit.registry.d.ts +55 -0
  23. package/dist/document-kit/document-kit.registry.d.ts.map +1 -0
  24. package/dist/document-kit/document-kit.registry.js +91 -0
  25. package/dist/document-kit/document-kit.registry.js.map +1 -0
  26. package/dist/document-kit/document-kit.service.d.ts +49 -0
  27. package/dist/document-kit/document-kit.service.d.ts.map +1 -0
  28. package/dist/document-kit/document-kit.service.js +135 -0
  29. package/dist/document-kit/document-kit.service.js.map +1 -0
  30. package/dist/file/file-upload-ticket.service.d.ts +1 -1
  31. package/dist/file/file.controller.d.ts +3 -3
  32. package/dist/file/file.service.d.ts +136 -13
  33. package/dist/file/file.service.d.ts.map +1 -1
  34. package/dist/file/file.service.js +297 -27
  35. package/dist/file/file.service.js.map +1 -1
  36. package/dist/file/mcp-file-source.schema.d.ts.map +1 -1
  37. package/dist/file/mcp-file-source.schema.js +8 -5
  38. package/dist/file/mcp-file-source.schema.js.map +1 -1
  39. package/dist/file/provider/abstract.provider.d.ts +33 -0
  40. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  41. package/dist/file/provider/abstract.provider.js +9 -0
  42. package/dist/file/provider/abstract.provider.js.map +1 -1
  43. package/dist/file/provider/s3-multipart.util.d.ts +17 -0
  44. package/dist/file/provider/s3-multipart.util.d.ts.map +1 -0
  45. package/dist/file/provider/s3-multipart.util.js +88 -0
  46. package/dist/file/provider/s3-multipart.util.js.map +1 -0
  47. package/dist/file/provider/s3.provider.d.ts +9 -1
  48. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  49. package/dist/file/provider/s3.provider.js +16 -0
  50. package/dist/file/provider/s3.provider.js.map +1 -1
  51. package/dist/file/provider/spaces.provider.d.ts +10 -1
  52. package/dist/file/provider/spaces.provider.d.ts.map +1 -1
  53. package/dist/file/provider/spaces.provider.js +17 -0
  54. package/dist/file/provider/spaces.provider.js.map +1 -1
  55. package/dist/index.d.ts +5 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +5 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/integration-profile/integration-profile.controller.d.ts +1 -0
  60. package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
  61. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  62. package/dist/integration-profile/integration-profile.secrets.js +26 -0
  63. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  64. package/dist/integration-profile/integration-profile.service.d.ts +1 -0
  65. package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
  66. package/dist/integration-profile/integration-profile.service.js +3 -3
  67. package/dist/integration-profile/integration-profile.service.js.map +1 -1
  68. package/dist/integration-profile/testers/ai.testers.d.ts.map +1 -1
  69. package/dist/integration-profile/testers/ai.testers.js +46 -8
  70. package/dist/integration-profile/testers/ai.testers.js.map +1 -1
  71. package/dist/integration-profile/testers/http-probe.d.ts.map +1 -1
  72. package/dist/integration-profile/testers/http-probe.js +5 -3
  73. package/dist/integration-profile/testers/http-probe.js.map +1 -1
  74. package/dist/integration-profile/testers/integration-tester.types.d.ts +5 -0
  75. package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -1
  76. package/dist/mail/mail.service.d.ts.map +1 -1
  77. package/dist/mail/mail.service.js +16 -1
  78. package/dist/mail/mail.service.js.map +1 -1
  79. package/dist/mcp/mcp-server.service.d.ts.map +1 -1
  80. package/dist/mcp/mcp-server.service.js +10 -1
  81. package/dist/mcp/mcp-server.service.js.map +1 -1
  82. package/dist/mcp/mcp.module.d.ts.map +1 -1
  83. package/dist/mcp/mcp.module.js +2 -0
  84. package/dist/mcp/mcp.module.js.map +1 -1
  85. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts +17 -0
  86. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts.map +1 -0
  87. package/dist/mcp/tools/core-access-log.mcp-tools.js +74 -0
  88. package/dist/mcp/tools/core-access-log.mcp-tools.js.map +1 -0
  89. package/dist/mcp/tools/core-files.mcp-tools.js +4 -4
  90. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -1
  91. package/dist/meeting/meeting-provider.registry.d.ts +72 -0
  92. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -1
  93. package/dist/meeting/meeting-provider.registry.js.map +1 -1
  94. package/dist/oauth/oauth-token-broker.service.d.ts +50 -1
  95. package/dist/oauth/oauth-token-broker.service.d.ts.map +1 -1
  96. package/dist/oauth/oauth-token-broker.service.js +105 -3
  97. package/dist/oauth/oauth-token-broker.service.js.map +1 -1
  98. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts +6 -0
  99. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
  100. package/dist/oauth/providers/microsoft-entra-id.provider.js +30 -4
  101. package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
  102. package/dist/pdf/document/charts/chart-bar.d.ts +24 -0
  103. package/dist/pdf/document/charts/chart-bar.d.ts.map +1 -0
  104. package/dist/pdf/document/charts/chart-bar.js +117 -0
  105. package/dist/pdf/document/charts/chart-bar.js.map +1 -0
  106. package/dist/pdf/document/charts/chart-donut.d.ts +16 -0
  107. package/dist/pdf/document/charts/chart-donut.d.ts.map +1 -0
  108. package/dist/pdf/document/charts/chart-donut.js +89 -0
  109. package/dist/pdf/document/charts/chart-donut.js.map +1 -0
  110. package/dist/pdf/document/charts/chart-gauge.d.ts +15 -0
  111. package/dist/pdf/document/charts/chart-gauge.d.ts.map +1 -0
  112. package/dist/pdf/document/charts/chart-gauge.js +60 -0
  113. package/dist/pdf/document/charts/chart-gauge.js.map +1 -0
  114. package/dist/pdf/document/charts/chart-line.d.ts +29 -0
  115. package/dist/pdf/document/charts/chart-line.d.ts.map +1 -0
  116. package/dist/pdf/document/charts/chart-line.js +89 -0
  117. package/dist/pdf/document/charts/chart-line.js.map +1 -0
  118. package/dist/pdf/document/charts/chart-primitives.d.ts +64 -0
  119. package/dist/pdf/document/charts/chart-primitives.d.ts.map +1 -0
  120. package/dist/pdf/document/charts/chart-primitives.js +110 -0
  121. package/dist/pdf/document/charts/chart-primitives.js.map +1 -0
  122. package/dist/pdf/document/charts/chart-radar.d.ts +13 -0
  123. package/dist/pdf/document/charts/chart-radar.d.ts.map +1 -0
  124. package/dist/pdf/document/charts/chart-radar.js +83 -0
  125. package/dist/pdf/document/charts/chart-radar.js.map +1 -0
  126. package/dist/pdf/document/charts/chart-scale.d.ts +39 -0
  127. package/dist/pdf/document/charts/chart-scale.d.ts.map +1 -0
  128. package/dist/pdf/document/charts/chart-scale.js +118 -0
  129. package/dist/pdf/document/charts/chart-scale.js.map +1 -0
  130. package/dist/pdf/document/charts/index.d.ts +8 -0
  131. package/dist/pdf/document/charts/index.d.ts.map +1 -0
  132. package/dist/pdf/document/charts/index.js +24 -0
  133. package/dist/pdf/document/charts/index.js.map +1 -0
  134. package/dist/pdf/document/index.d.ts +8 -0
  135. package/dist/pdf/document/index.d.ts.map +1 -0
  136. package/dist/pdf/document/index.js +24 -0
  137. package/dist/pdf/document/index.js.map +1 -0
  138. package/dist/pdf/document/pdf-document.chrome.d.ts +20 -0
  139. package/dist/pdf/document/pdf-document.chrome.d.ts.map +1 -0
  140. package/dist/pdf/document/pdf-document.chrome.js +36 -0
  141. package/dist/pdf/document/pdf-document.chrome.js.map +1 -0
  142. package/dist/pdf/document/pdf-document.css.d.ts +20 -0
  143. package/dist/pdf/document/pdf-document.css.d.ts.map +1 -0
  144. package/dist/pdf/document/pdf-document.css.js +327 -0
  145. package/dist/pdf/document/pdf-document.css.js.map +1 -0
  146. package/dist/pdf/document/pdf-document.renderer.d.ts +10 -0
  147. package/dist/pdf/document/pdf-document.renderer.d.ts.map +1 -0
  148. package/dist/pdf/document/pdf-document.renderer.js +226 -0
  149. package/dist/pdf/document/pdf-document.renderer.js.map +1 -0
  150. package/dist/pdf/document/pdf-document.service.d.ts +27 -0
  151. package/dist/pdf/document/pdf-document.service.d.ts.map +1 -0
  152. package/dist/pdf/document/pdf-document.service.js +81 -0
  153. package/dist/pdf/document/pdf-document.service.js.map +1 -0
  154. package/dist/pdf/document/pdf-document.theme.d.ts +41 -0
  155. package/dist/pdf/document/pdf-document.theme.d.ts.map +1 -0
  156. package/dist/pdf/document/pdf-document.theme.js +105 -0
  157. package/dist/pdf/document/pdf-document.theme.js.map +1 -0
  158. package/dist/pdf/document/pdf-document.types.d.ts +164 -0
  159. package/dist/pdf/document/pdf-document.types.d.ts.map +1 -0
  160. package/dist/pdf/document/pdf-document.types.js +18 -0
  161. package/dist/pdf/document/pdf-document.types.js.map +1 -0
  162. package/dist/pdf/pdf.module.d.ts.map +1 -1
  163. package/dist/pdf/pdf.module.js +3 -2
  164. package/dist/pdf/pdf.module.js.map +1 -1
  165. package/dist/pdf/pdf.service.d.ts +75 -1
  166. package/dist/pdf/pdf.service.d.ts.map +1 -1
  167. package/dist/pdf/pdf.service.js +167 -63
  168. package/dist/pdf/pdf.service.js.map +1 -1
  169. package/dist/pdf/templates/commercial-proposal.template.d.ts +96 -0
  170. package/dist/pdf/templates/commercial-proposal.template.d.ts.map +1 -0
  171. package/dist/pdf/templates/commercial-proposal.template.js +276 -0
  172. package/dist/pdf/templates/commercial-proposal.template.js.map +1 -0
  173. package/dist/setting/favicon.controller.d.ts +26 -0
  174. package/dist/setting/favicon.controller.d.ts.map +1 -0
  175. package/dist/setting/favicon.controller.js +130 -0
  176. package/dist/setting/favicon.controller.js.map +1 -0
  177. package/dist/setting/setting.module.d.ts.map +1 -1
  178. package/dist/setting/setting.module.js +2 -1
  179. package/dist/setting/setting.module.js.map +1 -1
  180. package/dist/setting/setting.service.d.ts.map +1 -1
  181. package/dist/setting/setting.service.js +3 -0
  182. package/dist/setting/setting.service.js.map +1 -1
  183. package/dist/task/task.service.d.ts +6 -0
  184. package/dist/task/task.service.d.ts.map +1 -1
  185. package/dist/task/task.service.js +44 -13
  186. package/dist/task/task.service.js.map +1 -1
  187. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +35 -2
  188. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  189. package/dist/whatsapp-sender/whatsapp-sender.service.js +107 -22
  190. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  191. package/hedhog/data/integration_type.yaml +6 -0
  192. package/hedhog/data/route.yaml +8 -0
  193. package/hedhog/data/setting_group.yaml +52 -0
  194. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +85 -2
  195. package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +576 -491
  196. package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +29 -50
  197. package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +146 -50
  198. package/hedhog/frontend/messages/en.json +81 -2
  199. package/hedhog/frontend/messages/pt.json +81 -2
  200. package/hedhog/table/file.yaml +3 -1
  201. package/package.json +5 -5
  202. package/src/access-log/access-log.interceptor.spec.ts +50 -0
  203. package/src/access-log/access-log.interceptor.ts +18 -0
  204. package/src/ai/ai-attachment.fragments.spec.ts +56 -3
  205. package/src/ai/ai.service.responses.spec.ts +429 -0
  206. package/src/ai/ai.service.ts +409 -27
  207. package/src/ai-instruction/ai-prompt-resolver.service.spec.ts +44 -0
  208. package/src/ai-instruction/ai-prompt-resolver.service.ts +29 -0
  209. package/src/core.module.ts +3 -0
  210. package/src/document-kit/document-kit.module.ts +12 -0
  211. package/src/document-kit/document-kit.registry.ts +125 -0
  212. package/src/document-kit/document-kit.service.spec.ts +156 -0
  213. package/src/document-kit/document-kit.service.ts +173 -0
  214. package/src/file/file-direct-upload.spec.ts +344 -0
  215. package/src/file/file.service.spec.ts +168 -1
  216. package/src/file/file.service.ts +435 -36
  217. package/src/file/mcp-file-source.schema.ts +8 -5
  218. package/src/file/provider/abstract.provider.ts +57 -0
  219. package/src/file/provider/s3-multipart.spec.ts +123 -0
  220. package/src/file/provider/s3-multipart.util.ts +126 -0
  221. package/src/file/provider/s3.provider.ts +65 -1
  222. package/src/file/provider/spaces.provider.ts +67 -1
  223. package/src/index.ts +5 -0
  224. package/src/integration-profile/integration-profile.secrets.ts +26 -0
  225. package/src/integration-profile/integration-profile.service.ts +1 -0
  226. package/src/integration-profile/testers/ai.testers.ts +70 -5
  227. package/src/integration-profile/testers/http-probe.ts +5 -3
  228. package/src/integration-profile/testers/integration-tester.types.ts +5 -0
  229. package/src/integration-profile/testers/oauth.testers.spec.ts +13 -0
  230. package/src/integration-profile/testers/remaining.testers.spec.ts +65 -1
  231. package/src/integration-profile/testers/tester-coverage.spec.ts +12 -0
  232. package/src/mail/mail.service.spec.ts +25 -0
  233. package/src/mail/mail.service.ts +18 -1
  234. package/src/mcp/mcp-server.service.spec.ts +16 -0
  235. package/src/mcp/mcp-server.service.ts +10 -1
  236. package/src/mcp/mcp.module.ts +2 -0
  237. package/src/mcp/tools/core-access-log.mcp-tools.ts +66 -0
  238. package/src/mcp/tools/core-files.mcp-tools.ts +4 -4
  239. package/src/meeting/meeting-provider.registry.ts +80 -0
  240. package/src/oauth/oauth-token-broker.service.spec.ts +108 -0
  241. package/src/oauth/oauth-token-broker.service.ts +129 -2
  242. package/src/oauth/providers/microsoft-entra-id.provider.spec.ts +133 -0
  243. package/src/oauth/providers/microsoft-entra-id.provider.ts +29 -2
  244. package/src/pdf/document/charts/chart-bar.ts +217 -0
  245. package/src/pdf/document/charts/chart-donut.ts +163 -0
  246. package/src/pdf/document/charts/chart-gauge.ts +94 -0
  247. package/src/pdf/document/charts/chart-line.ts +159 -0
  248. package/src/pdf/document/charts/chart-primitives.ts +188 -0
  249. package/src/pdf/document/charts/chart-radar.ts +136 -0
  250. package/src/pdf/document/charts/chart-scale.spec.ts +93 -0
  251. package/src/pdf/document/charts/chart-scale.ts +141 -0
  252. package/src/pdf/document/charts/charts.spec.ts +157 -0
  253. package/src/pdf/document/charts/index.ts +7 -0
  254. package/src/pdf/document/index.ts +7 -0
  255. package/src/pdf/document/pdf-document.chrome.ts +38 -0
  256. package/src/pdf/document/pdf-document.css.ts +326 -0
  257. package/src/pdf/document/pdf-document.renderer.spec.ts +172 -0
  258. package/src/pdf/document/pdf-document.renderer.ts +317 -0
  259. package/src/pdf/document/pdf-document.service.ts +77 -0
  260. package/src/pdf/document/pdf-document.theme.ts +146 -0
  261. package/src/pdf/document/pdf-document.types.ts +149 -0
  262. package/src/pdf/pdf.module.ts +3 -2
  263. package/src/pdf/pdf.service.spec.ts +131 -0
  264. package/src/pdf/pdf.service.ts +256 -82
  265. package/src/pdf/templates/commercial-proposal.template.spec.ts +177 -0
  266. package/src/pdf/templates/commercial-proposal.template.ts +400 -0
  267. package/src/setting/favicon.controller.spec.ts +92 -0
  268. package/src/setting/favicon.controller.ts +135 -0
  269. package/src/setting/setting.module.ts +2 -1
  270. package/src/setting/setting.service.ts +3 -0
  271. package/src/task/task.service.spec.ts +77 -1
  272. package/src/task/task.service.ts +58 -14
  273. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +263 -0
  274. package/src/whatsapp-sender/whatsapp-sender.service.ts +154 -16
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.line = exports.text = exports.chartColor = exports.CHART_FONT = exports.CHART_DEFAULT_HEIGHT = exports.CHART_HALF_WIDTH = exports.CHART_FULL_WIDTH = void 0;
4
+ exports.svgRoot = svgRoot;
5
+ exports.emptyChart = emptyChart;
6
+ exports.legendRows = legendRows;
7
+ exports.yAxis = yAxis;
8
+ exports.xAxisLabels = xAxisLabels;
9
+ const pdf_document_renderer_1 = require("../pdf-document.renderer");
10
+ const pdf_document_types_1 = require("../pdf-document.types");
11
+ const chart_scale_1 = require("./chart-scale");
12
+ /** Largura útil do A4 retrato com as margens de 56px do documento padrão. */
13
+ exports.CHART_FULL_WIDTH = 682;
14
+ /** Largura de cada gráfico numa grade de duas colunas. */
15
+ exports.CHART_HALF_WIDTH = 330;
16
+ exports.CHART_DEFAULT_HEIGHT = 220;
17
+ /** Tamanhos de fonte. Abaixo de 8px o texto ainda imprime, mas não se lê na tela. */
18
+ exports.CHART_FONT = { axis: 8, value: 9, legend: 9 };
19
+ const chartColor = (theme, index, override) => { var _a; return (_a = override !== null && override !== void 0 ? override : theme.chartPalette[index % theme.chartPalette.length]) !== null && _a !== void 0 ? _a : theme.primary; };
20
+ exports.chartColor = chartColor;
21
+ const text = (content, x, y, options = {}) => {
22
+ const { size = exports.CHART_FONT.axis, fill = '#71717a', anchor = 'start', weight = 400, rotate } = options;
23
+ const transform = rotate ? ` transform="rotate(${rotate} ${x} ${y})"` : '';
24
+ return (`<text x="${x}" y="${y}" font-size="${size}" fill="${fill}" text-anchor="${anchor}" ` +
25
+ `font-weight="${weight}"${transform}>${(0, pdf_document_renderer_1.escapeHtml)(content)}</text>`);
26
+ };
27
+ exports.text = text;
28
+ const line = (x1, y1, x2, y2, stroke, options = {}) => {
29
+ var _a;
30
+ return `<line x1="${x1}" y1="${y1}" x2="${x2}" y2="${y2}" stroke="${stroke}" ` +
31
+ `stroke-width="${(_a = options.width) !== null && _a !== void 0 ? _a : 1}"${options.dash ? ` stroke-dasharray="${options.dash}"` : ''} ` +
32
+ 'shape-rendering="crispEdges" />';
33
+ };
34
+ exports.line = line;
35
+ /** Envelope do SVG. `viewBox` + largura relativa deixam o gráfico acompanhar a página. */
36
+ function svgRoot(width, height, body, ariaLabel) {
37
+ return (0, pdf_document_types_1.asSafeSvg)(`<svg viewBox="0 0 ${width} ${height}" width="100%" height="${height}" ` +
38
+ `xmlns="http://www.w3.org/2000/svg" role="img">` +
39
+ (ariaLabel ? `<title>${(0, pdf_document_renderer_1.escapeHtml)(ariaLabel)}</title>` : '') +
40
+ body +
41
+ '</svg>');
42
+ }
43
+ /** Placeholder de gráfico sem dados — melhor que uma moldura vazia sem explicação. */
44
+ function emptyChart(options) {
45
+ var _a, _b, _c;
46
+ const width = (_a = options.width) !== null && _a !== void 0 ? _a : exports.CHART_FULL_WIDTH;
47
+ const height = (_b = options.height) !== null && _b !== void 0 ? _b : exports.CHART_DEFAULT_HEIGHT;
48
+ const label = (_c = options.emptyText) !== null && _c !== void 0 ? _c : 'Sem dados no período';
49
+ return svgRoot(width, height, `<rect x="0.5" y="0.5" width="${width - 1}" height="${height - 1}" fill="none" ` +
50
+ `stroke="${options.theme.line}" stroke-dasharray="4 3" rx="8" />` +
51
+ (0, exports.text)(label, width / 2, height / 2, {
52
+ size: 10,
53
+ fill: options.theme.mutedFg,
54
+ anchor: 'middle',
55
+ }), options.ariaLabel);
56
+ }
57
+ /** Legenda em uma linha, com quebra automática quando não cabe. */
58
+ function legendRows(entries, width, y, theme) {
59
+ const gap = 14;
60
+ const swatch = 8;
61
+ let cursorX = 0;
62
+ let cursorY = y;
63
+ const parts = [];
64
+ for (const entry of entries) {
65
+ const labelWidth = (0, chart_scale_1.estimateTextWidth)(entry.label, exports.CHART_FONT.legend);
66
+ const entryWidth = swatch + 4 + labelWidth + gap;
67
+ if (cursorX > 0 && cursorX + entryWidth > width) {
68
+ cursorX = 0;
69
+ cursorY += 13;
70
+ }
71
+ parts.push(`<rect x="${cursorX}" y="${cursorY - swatch + 1}" width="${swatch}" height="${swatch}" rx="2" fill="${entry.color}" />`, (0, exports.text)(entry.label, cursorX + swatch + 4, cursorY, {
72
+ size: exports.CHART_FONT.legend,
73
+ fill: theme.mutedFg,
74
+ }));
75
+ cursorX += entryWidth;
76
+ }
77
+ return { markup: parts.join(''), height: cursorY - y + 13 };
78
+ }
79
+ /** Grade horizontal + rótulos do eixo Y. */
80
+ function yAxis(ticks, scale, plot, theme, format = (value) => (0, chart_scale_1.formatNumber)(value)) {
81
+ return ticks
82
+ .map((tick) => {
83
+ const y = scale(tick);
84
+ return ((0, exports.line)(plot.left, y, plot.right, y, theme.line) +
85
+ (0, exports.text)(format(tick), plot.left - 5, y + 3, {
86
+ fill: theme.mutedFg,
87
+ anchor: 'end',
88
+ size: exports.CHART_FONT.axis,
89
+ }));
90
+ })
91
+ .join('');
92
+ }
93
+ /** Rótulos do eixo X, já cortados e girados conforme o espaço. */
94
+ function xAxisLabels(labels, center, baseline, plan, bandwidth, theme) {
95
+ return labels
96
+ .map((label, index) => {
97
+ if (index % plan.skipEvery !== 0)
98
+ return '';
99
+ const x = center(index);
100
+ const maxWidth = plan.rotate === 0 ? bandwidth : bandwidth * 3;
101
+ return (0, exports.text)((0, chart_scale_1.truncateToWidth)(label, exports.CHART_FONT.axis, maxWidth), x, baseline, {
102
+ fill: theme.mutedFg,
103
+ anchor: plan.rotate === 0 ? 'middle' : 'end',
104
+ size: exports.CHART_FONT.axis,
105
+ rotate: plan.rotate,
106
+ });
107
+ })
108
+ .join('');
109
+ }
110
+ //# sourceMappingURL=chart-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-primitives.js","sourceRoot":"","sources":["../../../../src/pdf/document/charts/chart-primitives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { SafeSvg } from '../pdf-document.types';
2
+ import { ChartBaseOptions, ChartSeries } from './chart-primitives';
3
+ /**
4
+ * Radar de eixos comparáveis — a forma da tela para "nota média por tópico",
5
+ * onde todos os eixos compartilham a mesma escala (0 a 5).
6
+ */
7
+ export declare function radarChartSvg(options: ChartBaseOptions & {
8
+ axes: string[];
9
+ series: ChartSeries[];
10
+ max?: number;
11
+ rings?: number;
12
+ }): SafeSvg;
13
+ //# sourceMappingURL=chart-radar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-radar.d.ts","sourceRoot":"","sources":["../../../../src/pdf/document/charts/chart-radar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAIL,gBAAgB,EAChB,WAAW,EAMZ,MAAM,oBAAoB,CAAC;AAG5B;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,gBAAgB,GAAG;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CA6GT"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.radarChartSvg = radarChartSvg;
4
+ const chart_primitives_1 = require("./chart-primitives");
5
+ const chart_scale_1 = require("./chart-scale");
6
+ /**
7
+ * Radar de eixos comparáveis — a forma da tela para "nota média por tópico",
8
+ * onde todos os eixos compartilham a mesma escala (0 a 5).
9
+ */
10
+ function radarChartSvg(options) {
11
+ var _a;
12
+ const { theme, axes, series, width = chart_primitives_1.CHART_FULL_WIDTH, height = chart_primitives_1.CHART_DEFAULT_HEIGHT, rings = 4, valueFormat = (value) => (0, chart_scale_1.formatNumber)(value), } = options;
13
+ const values = series
14
+ .flatMap((s) => s.values)
15
+ .filter((v) => typeof v === 'number' && Number.isFinite(v));
16
+ // Abaixo de 3 eixos o radar vira uma linha ou um triângulo degenerado, que
17
+ // engana mais do que informa.
18
+ if (axes.length < 3 || values.length === 0)
19
+ return (0, chart_primitives_1.emptyChart)(options);
20
+ const max = (_a = options.max) !== null && _a !== void 0 ? _a : (0, chart_scale_1.niceScale)(0, Math.max(...values), rings).max;
21
+ const showLegend = series.length > 1;
22
+ const legendHeight = showLegend ? 16 : 0;
23
+ const cx = width / 2;
24
+ const cy = (height - legendHeight) / 2;
25
+ const radius = Math.min(cx, cy) - 26;
26
+ const angleOf = (index) => (index / axes.length) * Math.PI * 2 - Math.PI / 2;
27
+ const point = (index, value) => {
28
+ const ratio = max === 0 ? 0 : Math.min(Math.max(value / max, 0), 1);
29
+ const angle = angleOf(index);
30
+ return { x: cx + radius * ratio * Math.cos(angle), y: cy + radius * ratio * Math.sin(angle) };
31
+ };
32
+ const parts = [];
33
+ for (let ring = 1; ring <= rings; ring += 1) {
34
+ const r = (radius * ring) / rings;
35
+ const polygon = axes
36
+ .map((_, index) => {
37
+ const angle = angleOf(index);
38
+ return `${(cx + r * Math.cos(angle)).toFixed(1)},${(cy + r * Math.sin(angle)).toFixed(1)}`;
39
+ })
40
+ .join(' ');
41
+ parts.push(`<polygon points="${polygon}" fill="none" stroke="${theme.line}" stroke-width="1" />`);
42
+ }
43
+ axes.forEach((axis, index) => {
44
+ const angle = angleOf(index);
45
+ const edgeX = cx + radius * Math.cos(angle);
46
+ const edgeY = cy + radius * Math.sin(angle);
47
+ parts.push(`<line x1="${cx}" y1="${cy}" x2="${edgeX.toFixed(1)}" y2="${edgeY.toFixed(1)}" stroke="${theme.line}" />`);
48
+ const labelX = cx + (radius + 12) * Math.cos(angle);
49
+ const labelY = cy + (radius + 12) * Math.sin(angle) + 3;
50
+ const anchor = Math.abs(Math.cos(angle)) < 0.3 ? 'middle' : Math.cos(angle) > 0 ? 'start' : 'end';
51
+ parts.push((0, chart_primitives_1.text)((0, chart_scale_1.truncateToWidth)(axis, chart_primitives_1.CHART_FONT.axis, 90), labelX, labelY, {
52
+ size: chart_primitives_1.CHART_FONT.axis,
53
+ fill: theme.mutedFg,
54
+ anchor,
55
+ }));
56
+ });
57
+ series.forEach((serie, serieIndex) => {
58
+ const color = (0, chart_primitives_1.chartColor)(theme, serieIndex, serie.color);
59
+ const points = axes.map((_, index) => {
60
+ const raw = serie.values[index];
61
+ return point(index, typeof raw === 'number' && Number.isFinite(raw) ? raw : 0);
62
+ });
63
+ parts.push(`<polygon points="${points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(' ')}" ` +
64
+ `fill="${(0, chart_scale_1.withAlpha)(color, 0.18)}" stroke="${color}" stroke-width="1.8" stroke-linejoin="round" />`);
65
+ points.forEach((p) => {
66
+ parts.push(`<circle cx="${p.x.toFixed(1)}" cy="${p.y.toFixed(1)}" r="2" fill="${color}" />`);
67
+ });
68
+ });
69
+ parts.push((0, chart_primitives_1.text)(`Escala 0 a ${valueFormat(max)}`, width, height - legendHeight - 2, {
70
+ size: chart_primitives_1.CHART_FONT.axis,
71
+ fill: theme.mutedFg,
72
+ anchor: 'end',
73
+ }));
74
+ if (showLegend) {
75
+ const legend = (0, chart_primitives_1.legendRows)(series.map((serie, index) => ({
76
+ label: serie.name,
77
+ color: (0, chart_primitives_1.chartColor)(theme, index, serie.color),
78
+ })), width, height - 4, theme);
79
+ parts.push(legend.markup);
80
+ }
81
+ return (0, chart_primitives_1.svgRoot)(width, height, parts.join(''), options.ariaLabel);
82
+ }
83
+ //# sourceMappingURL=chart-radar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-radar.js","sourceRoot":"","sources":["../../../../src/pdf/document/charts/chart-radar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Escalas, medidas e formatação dos gráficos do documento PDF.
3
+ *
4
+ * Tudo aqui é função pura e sem dependência: o gráfico é desenhado como SVG no
5
+ * servidor, onde não há canvas para medir texto nem biblioteca de plotagem.
6
+ */
7
+ /** Domínio arredondado para valores "redondos" (1, 2, 5 × 10^k) e os ticks dele. */
8
+ export declare function niceScale(min: number, max: number, tickCount?: number): {
9
+ min: number;
10
+ max: number;
11
+ step: number;
12
+ ticks: number[];
13
+ };
14
+ /** Converte valor do domínio em pixel. */
15
+ export declare function linearScale(domain: [number, number], range: [number, number]): (value: number) => number;
16
+ /** Divide um intervalo em faixas de mesma largura, uma por categoria. */
17
+ export declare function bandScale(count: number, range: [number, number], paddingRatio?: number): {
18
+ band: (index: number) => number;
19
+ center: (index: number) => number;
20
+ bandwidth: number;
21
+ };
22
+ /**
23
+ * Largura aproximada de um texto. Sem canvas no servidor, 0,55 × tamanho da
24
+ * fonte por caractere erra pouco para Arial/FreeSans e é o bastante para
25
+ * decidir corte e rotação de rótulo.
26
+ */
27
+ export declare function estimateTextWidth(text: string, fontSize: number): number;
28
+ /** Corta o texto no limite de pixels, com reticências. */
29
+ export declare function truncateToWidth(text: string, fontSize: number, maxWidth: number): string;
30
+ /** Decide se os rótulos do eixo X cabem deitados e quantos pular. */
31
+ export declare function axisLabelPlan(labels: string[], bandwidth: number, fontSize: number): {
32
+ rotate: 0 | -35;
33
+ skipEvery: number;
34
+ };
35
+ /** `#ff760c` + alpha → `rgba(255,118,12,0.18)`, para o preenchimento de área. */
36
+ export declare function withAlpha(hexColor: string, alpha: number): string;
37
+ /** Número no formato pt-BR, sem casas decimais desnecessárias. */
38
+ export declare function formatNumber(value: number, maximumFractionDigits?: number): string;
39
+ //# sourceMappingURL=chart-scale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-scale.d.ts","sourceRoot":"","sources":["../../../../src/pdf/document/charts/chart-scale.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oFAAoF;AACpF,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,SAAS,SAAI,GACZ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAqC7D;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CACzB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAM3B;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACvB,YAAY,SAAM,GACjB;IAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAa3F;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKxF;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf;IAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CASxC;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBjE;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,SAAI,GAAG,MAAM,CAE7E"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * Escalas, medidas e formatação dos gráficos do documento PDF.
4
+ *
5
+ * Tudo aqui é função pura e sem dependência: o gráfico é desenhado como SVG no
6
+ * servidor, onde não há canvas para medir texto nem biblioteca de plotagem.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.niceScale = niceScale;
10
+ exports.linearScale = linearScale;
11
+ exports.bandScale = bandScale;
12
+ exports.estimateTextWidth = estimateTextWidth;
13
+ exports.truncateToWidth = truncateToWidth;
14
+ exports.axisLabelPlan = axisLabelPlan;
15
+ exports.withAlpha = withAlpha;
16
+ exports.formatNumber = formatNumber;
17
+ /** Domínio arredondado para valores "redondos" (1, 2, 5 × 10^k) e os ticks dele. */
18
+ function niceScale(min, max, tickCount = 4) {
19
+ const safeMin = Number.isFinite(min) ? min : 0;
20
+ const safeMax = Number.isFinite(max) ? max : 0;
21
+ // Série toda igual (ou toda zero) não tem amplitude para dividir: um passo de
22
+ // 1 mantém o eixo legível em vez de gerar divisão por zero.
23
+ if (safeMax === safeMin) {
24
+ const value = safeMax === 0 ? 1 : Math.abs(safeMax);
25
+ const step = value / tickCount || 1;
26
+ return {
27
+ min: Math.min(0, safeMin),
28
+ max: safeMax === 0 ? 1 : safeMax,
29
+ step,
30
+ ticks: Array.from({ length: tickCount + 1 }, (_, i) => Math.min(0, safeMin) + step * i),
31
+ };
32
+ }
33
+ const rawStep = (safeMax - safeMin) / Math.max(tickCount, 1);
34
+ const magnitude = 10 ** Math.floor(Math.log10(rawStep));
35
+ const normalized = rawStep / magnitude;
36
+ // O 2,5 está na escada de propósito: sem ele, um eixo de 0 a 97 pedindo 4
37
+ // divisões cai no passo 50 e imprime só 0/50/100 — informação de menos para
38
+ // um relatório que se lê no papel, sem passar o mouse em nada.
39
+ const niceNormalized = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 2.5 ? 2.5 : normalized <= 5 ? 5 : 10;
40
+ const step = niceNormalized * magnitude;
41
+ const niceMin = Math.floor(safeMin / step) * step;
42
+ const niceMax = Math.ceil(safeMax / step) * step;
43
+ const ticks = [];
44
+ // Tolerância pelo passo: somar 0.1+0.2 em ponto flutuante erraria o último tick.
45
+ for (let value = niceMin; value <= niceMax + step / 1000; value += step) {
46
+ ticks.push(Number(value.toFixed(10)));
47
+ }
48
+ return { min: niceMin, max: niceMax, step, ticks };
49
+ }
50
+ /** Converte valor do domínio em pixel. */
51
+ function linearScale(domain, range) {
52
+ const [d0, d1] = domain;
53
+ const [r0, r1] = range;
54
+ const span = d1 - d0 || 1;
55
+ return (value) => r0 + ((value - d0) / span) * (r1 - r0);
56
+ }
57
+ /** Divide um intervalo em faixas de mesma largura, uma por categoria. */
58
+ function bandScale(count, range, paddingRatio = 0.2) {
59
+ const [r0, r1] = range;
60
+ const total = r1 - r0;
61
+ const slots = Math.max(count, 1);
62
+ const slot = total / slots;
63
+ const bandwidth = slot * (1 - paddingRatio);
64
+ const offset = (slot - bandwidth) / 2;
65
+ return {
66
+ band: (index) => r0 + slot * index + offset,
67
+ center: (index) => r0 + slot * index + slot / 2,
68
+ bandwidth,
69
+ };
70
+ }
71
+ /**
72
+ * Largura aproximada de um texto. Sem canvas no servidor, 0,55 × tamanho da
73
+ * fonte por caractere erra pouco para Arial/FreeSans e é o bastante para
74
+ * decidir corte e rotação de rótulo.
75
+ */
76
+ function estimateTextWidth(text, fontSize) {
77
+ return text.length * fontSize * 0.55;
78
+ }
79
+ /** Corta o texto no limite de pixels, com reticências. */
80
+ function truncateToWidth(text, fontSize, maxWidth) {
81
+ if (estimateTextWidth(text, fontSize) <= maxWidth)
82
+ return text;
83
+ const maxChars = Math.max(Math.floor(maxWidth / (fontSize * 0.55)) - 1, 1);
84
+ return `${text.slice(0, maxChars).trimEnd()}…`;
85
+ }
86
+ /** Decide se os rótulos do eixo X cabem deitados e quantos pular. */
87
+ function axisLabelPlan(labels, bandwidth, fontSize) {
88
+ const widest = labels.reduce((max, label) => Math.max(max, estimateTextWidth(label, fontSize)), 0);
89
+ if (widest <= bandwidth)
90
+ return { rotate: 0, skipEvery: 1 };
91
+ // Girar resolve até certo ponto; passado ele, é melhor mostrar menos rótulos
92
+ // do que empilhar texto ilegível.
93
+ if (widest <= bandwidth * 3)
94
+ return { rotate: -35, skipEvery: 1 };
95
+ return { rotate: -35, skipEvery: Math.ceil(widest / (bandwidth * 3)) };
96
+ }
97
+ /** `#ff760c` + alpha → `rgba(255,118,12,0.18)`, para o preenchimento de área. */
98
+ function withAlpha(hexColor, alpha) {
99
+ const hex = hexColor.replace('#', '');
100
+ const full = hex.length === 3
101
+ ? hex
102
+ .split('')
103
+ .map((char) => char + char)
104
+ .join('')
105
+ : hex;
106
+ const value = Number.parseInt(full.slice(0, 6), 16);
107
+ if (!Number.isFinite(value))
108
+ return hexColor;
109
+ const r = (value >> 16) & 255;
110
+ const g = (value >> 8) & 255;
111
+ const b = value & 255;
112
+ return `rgba(${r},${g},${b},${alpha})`;
113
+ }
114
+ /** Número no formato pt-BR, sem casas decimais desnecessárias. */
115
+ function formatNumber(value, maximumFractionDigits = 1) {
116
+ return new Intl.NumberFormat('pt-BR', { maximumFractionDigits }).format(value);
117
+ }
118
+ //# sourceMappingURL=chart-scale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-scale.js","sourceRoot":"","sources":["../../../../src/pdf/document/charts/chart-scale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from './chart-bar';
2
+ export * from './chart-donut';
3
+ export * from './chart-gauge';
4
+ export * from './chart-line';
5
+ export * from './chart-primitives';
6
+ export * from './chart-radar';
7
+ export * from './chart-scale';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pdf/document/charts/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./chart-bar"), exports);
18
+ __exportStar(require("./chart-donut"), exports);
19
+ __exportStar(require("./chart-gauge"), exports);
20
+ __exportStar(require("./chart-line"), exports);
21
+ __exportStar(require("./chart-primitives"), exports);
22
+ __exportStar(require("./chart-radar"), exports);
23
+ __exportStar(require("./chart-scale"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pdf/document/charts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,qDAAmC;AACnC,gDAA8B;AAC9B,gDAA8B"}
@@ -0,0 +1,8 @@
1
+ export * from './charts';
2
+ export * from './pdf-document.chrome';
3
+ export * from './pdf-document.css';
4
+ export * from './pdf-document.renderer';
5
+ export * from './pdf-document.service';
6
+ export * from './pdf-document.theme';
7
+ export * from './pdf-document.types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pdf/document/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./charts"), exports);
18
+ __exportStar(require("./pdf-document.chrome"), exports);
19
+ __exportStar(require("./pdf-document.css"), exports);
20
+ __exportStar(require("./pdf-document.renderer"), exports);
21
+ __exportStar(require("./pdf-document.service"), exports);
22
+ __exportStar(require("./pdf-document.theme"), exports);
23
+ __exportStar(require("./pdf-document.types"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pdf/document/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,wDAAsC;AACtC,qDAAmC;AACnC,0DAAwC;AACxC,yDAAuC;AACvC,uDAAqC;AACrC,uDAAqC"}
@@ -0,0 +1,20 @@
1
+ import { PdfDocumentTheme } from './pdf-document.theme';
2
+ /**
3
+ * Cabeçalho e rodapé nativos do Chromium — a barra laranja que repete em toda
4
+ * página e o "3 / 15" que só o renderizador sabe calcular.
5
+ *
6
+ * Eles são mini-documentos, não parte da página: começam em `font-size: 0`,
7
+ * precisam do próprio `print-color-adjust` para manter fundo, e só
8
+ * `<span class="pageNumber">` e `<span class="totalPages">` são substituídos.
9
+ * As margens abaixo reservam o espaço deles — encolher `top`/`bottom` faz o
10
+ * conteúdo imprimir por cima.
11
+ */
12
+ export declare const PDF_DOCUMENT_MARGIN: {
13
+ top: string;
14
+ right: string;
15
+ bottom: string;
16
+ left: string;
17
+ };
18
+ export declare function buildAccentHeaderTemplate(theme: PdfDocumentTheme): string;
19
+ export declare function buildFooterTemplate(theme: PdfDocumentTheme, left: string): string;
20
+ //# sourceMappingURL=pdf-document.chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-document.chrome.d.ts","sourceRoot":"","sources":["../../../src/pdf/document/pdf-document.chrome.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB;;;;;CAK/B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAMzE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASjF"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PDF_DOCUMENT_MARGIN = void 0;
4
+ exports.buildAccentHeaderTemplate = buildAccentHeaderTemplate;
5
+ exports.buildFooterTemplate = buildFooterTemplate;
6
+ const pdf_document_renderer_1 = require("./pdf-document.renderer");
7
+ /**
8
+ * Cabeçalho e rodapé nativos do Chromium — a barra laranja que repete em toda
9
+ * página e o "3 / 15" que só o renderizador sabe calcular.
10
+ *
11
+ * Eles são mini-documentos, não parte da página: começam em `font-size: 0`,
12
+ * precisam do próprio `print-color-adjust` para manter fundo, e só
13
+ * `<span class="pageNumber">` e `<span class="totalPages">` são substituídos.
14
+ * As margens abaixo reservam o espaço deles — encolher `top`/`bottom` faz o
15
+ * conteúdo imprimir por cima.
16
+ */
17
+ exports.PDF_DOCUMENT_MARGIN = {
18
+ top: '72px',
19
+ right: '56px',
20
+ bottom: '56px',
21
+ left: '56px',
22
+ };
23
+ function buildAccentHeaderTemplate(theme) {
24
+ return ('<style>*{margin:0;padding:0;box-sizing:border-box;}html,body{margin:0;padding:0;}</style>' +
25
+ '<div style="position:absolute;top:0;left:0;right:0;width:100%;height:8px;' +
26
+ `background:${theme.primary};-webkit-print-color-adjust:exact;print-color-adjust:exact;"></div>`);
27
+ }
28
+ function buildFooterTemplate(theme, left) {
29
+ return ('<div style="width:100%;padding:0 56px;display:flex;justify-content:space-between;' +
30
+ `align-items:center;font-family:${theme.fontFamily};font-size:8px;color:${theme.mutedFg};` +
31
+ '-webkit-print-color-adjust:exact;print-color-adjust:exact;">' +
32
+ `<span>${(0, pdf_document_renderer_1.escapeHtml)(left)}</span>` +
33
+ '<span><span class="pageNumber"></span> / <span class="totalPages"></span></span>' +
34
+ '</div>');
35
+ }
36
+ //# sourceMappingURL=pdf-document.chrome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-document.chrome.js","sourceRoot":"","sources":["../../../src/pdf/document/pdf-document.chrome.ts"],"names":[],"mappings":";;;AAoBA,8DAMC;AAED,kDASC;AArCD,mEAAqD;AAGrD;;;;;;;;;GASG;AACU,QAAA,mBAAmB,GAAG;IACjC,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,SAAgB,yBAAyB,CAAC,KAAuB;IAC/D,OAAO,CACL,2FAA2F;QAC3F,2EAA2E;QAC3E,cAAc,KAAK,CAAC,OAAO,qEAAqE,CACjG,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAuB,EAAE,IAAY;IACvE,OAAO,CACL,mFAAmF;QACnF,kCAAkC,KAAK,CAAC,UAAU,wBAAwB,KAAK,CAAC,OAAO,GAAG;QAC1F,8DAA8D;QAC9D,SAAS,IAAA,kCAAU,EAAC,IAAI,CAAC,SAAS;QAClC,kFAAkF;QAClF,QAAQ,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { PdfDocumentTheme } from './pdf-document.theme';
2
+ /**
3
+ * O CSS do documento padrão — o mesmo acabamento da proposta comercial do CRM
4
+ * (`libraries/crm/src/proposal/proposal.service.ts`), com três acréscimos que
5
+ * a proposta não precisava e um relatório precisa:
6
+ *
7
+ * 1. `thead { display: table-header-group }` — sem isso a tabela perde o
8
+ * cabeçalho a partir da segunda página, e um relatório de 15 páginas fica
9
+ * ilegível da página 2 em diante.
10
+ * 2. `tbody tr { break-inside: avoid }` — linha não parte no meio.
11
+ * 3. Nada de wrapper com `break-inside: avoid`, `overflow` ou borda arredondada
12
+ * em volta da tabela: foi o que fez a folha de impressão da tela sair com
13
+ * uma primeira página vazia e conteúdo cortado.
14
+ *
15
+ * A barra laranja do topo e o "X / N" do rodapé **não estão aqui** — são
16
+ * templates do Chromium (ver ./pdf-document.chrome.ts), porque só eles repetem
17
+ * em toda página e só eles sabem o total de páginas.
18
+ */
19
+ export declare function buildDocumentCss(theme: PdfDocumentTheme, landscape?: boolean): string;
20
+ //# sourceMappingURL=pdf-document.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-document.css.d.ts","sourceRoot":"","sources":["../../../src/pdf/document/pdf-document.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,UAAQ,GAAG,MAAM,CAkTnF"}