@endora-commerce/mod-invoices 0.0.0-stage → 0.100.0

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 (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -2
  3. package/dist/admin/components/InvoiceSectionTabs.d.ts +22 -0
  4. package/dist/admin/components/InvoiceSectionTabs.d.ts.map +1 -0
  5. package/dist/admin/components/InvoiceSectionTabs.js +34 -0
  6. package/dist/admin/components/InvoiceSectionTabs.js.map +1 -0
  7. package/dist/admin/index.d.ts +34 -0
  8. package/dist/admin/index.d.ts.map +1 -0
  9. package/dist/admin/index.js +69 -0
  10. package/dist/admin/index.js.map +1 -0
  11. package/dist/admin/pages/InvoiceDetail.d.ts +10 -0
  12. package/dist/admin/pages/InvoiceDetail.d.ts.map +1 -0
  13. package/dist/admin/pages/InvoiceDetail.js +111 -0
  14. package/dist/admin/pages/InvoiceDetail.js.map +1 -0
  15. package/dist/admin/pages/InvoiceTemplateEditor.d.ts +11 -0
  16. package/dist/admin/pages/InvoiceTemplateEditor.d.ts.map +1 -0
  17. package/dist/admin/pages/InvoiceTemplateEditor.js +188 -0
  18. package/dist/admin/pages/InvoiceTemplateEditor.js.map +1 -0
  19. package/dist/admin/pages/InvoiceTemplatesPage.d.ts +10 -0
  20. package/dist/admin/pages/InvoiceTemplatesPage.d.ts.map +1 -0
  21. package/dist/admin/pages/InvoiceTemplatesPage.js +60 -0
  22. package/dist/admin/pages/InvoiceTemplatesPage.js.map +1 -0
  23. package/dist/admin/pages/InvoicesList.d.ts +9 -0
  24. package/dist/admin/pages/InvoicesList.d.ts.map +1 -0
  25. package/dist/admin/pages/InvoicesList.js +116 -0
  26. package/dist/admin/pages/InvoicesList.js.map +1 -0
  27. package/dist/admin/templates/described-blocks.d.ts +67 -0
  28. package/dist/admin/templates/described-blocks.d.ts.map +1 -0
  29. package/dist/admin/templates/described-blocks.js +83 -0
  30. package/dist/admin/templates/described-blocks.js.map +1 -0
  31. package/dist/admin/templates/invoice-builder-plugin.d.ts +4 -0
  32. package/dist/admin/templates/invoice-builder-plugin.d.ts.map +1 -0
  33. package/dist/admin/templates/invoice-builder-plugin.js +12 -0
  34. package/dist/admin/templates/invoice-builder-plugin.js.map +1 -0
  35. package/dist/admin/templates/invoice-puck-config.d.ts +37 -0
  36. package/dist/admin/templates/invoice-puck-config.d.ts.map +1 -0
  37. package/dist/admin/templates/invoice-puck-config.js +733 -0
  38. package/dist/admin/templates/invoice-puck-config.js.map +1 -0
  39. package/dist/backend/email-templates/invoice-issued.default.d.ts +10 -0
  40. package/dist/backend/email-templates/invoice-issued.default.d.ts.map +1 -0
  41. package/dist/backend/email-templates/invoice-issued.default.js +45 -0
  42. package/dist/backend/email-templates/invoice-issued.default.js.map +1 -0
  43. package/dist/backend/entities/invoice-external-attachment.entity.d.ts +20 -0
  44. package/dist/backend/entities/invoice-external-attachment.entity.d.ts.map +1 -0
  45. package/dist/backend/entities/invoice-external-attachment.entity.js +77 -0
  46. package/dist/backend/entities/invoice-external-attachment.entity.js.map +1 -0
  47. package/dist/backend/entities/invoice-line.entity.d.ts +20 -0
  48. package/dist/backend/entities/invoice-line.entity.d.ts.map +1 -0
  49. package/dist/backend/entities/invoice-line.entity.js +82 -0
  50. package/dist/backend/entities/invoice-line.entity.js.map +1 -0
  51. package/dist/backend/entities/invoice-number-counter.entity.d.ts +18 -0
  52. package/dist/backend/entities/invoice-number-counter.entity.d.ts.map +1 -0
  53. package/dist/backend/entities/invoice-number-counter.entity.js +63 -0
  54. package/dist/backend/entities/invoice-number-counter.entity.js.map +1 -0
  55. package/dist/backend/entities/invoice-template.entity.d.ts +22 -0
  56. package/dist/backend/entities/invoice-template.entity.d.ts.map +1 -0
  57. package/dist/backend/entities/invoice-template.entity.js +84 -0
  58. package/dist/backend/entities/invoice-template.entity.js.map +1 -0
  59. package/dist/backend/entities/invoice.entity.d.ts +64 -0
  60. package/dist/backend/entities/invoice.entity.d.ts.map +1 -0
  61. package/dist/backend/entities/invoice.entity.js +202 -0
  62. package/dist/backend/entities/invoice.entity.js.map +1 -0
  63. package/dist/backend/index.d.ts +111 -0
  64. package/dist/backend/index.d.ts.map +1 -0
  65. package/dist/backend/index.js +291 -0
  66. package/dist/backend/index.js.map +1 -0
  67. package/dist/backend/pdf-components/descriptor.d.ts +29 -0
  68. package/dist/backend/pdf-components/descriptor.d.ts.map +1 -0
  69. package/dist/backend/pdf-components/descriptor.js +227 -0
  70. package/dist/backend/pdf-components/descriptor.js.map +1 -0
  71. package/dist/backend/pdf-components/embed-logo-images.d.ts +35 -0
  72. package/dist/backend/pdf-components/embed-logo-images.d.ts.map +1 -0
  73. package/dist/backend/pdf-components/embed-logo-images.js +101 -0
  74. package/dist/backend/pdf-components/embed-logo-images.js.map +1 -0
  75. package/dist/backend/pdf-components/sample.d.ts +4 -0
  76. package/dist/backend/pdf-components/sample.d.ts.map +1 -0
  77. package/dist/backend/pdf-components/sample.js +75 -0
  78. package/dist/backend/pdf-components/sample.js.map +1 -0
  79. package/dist/backend/pdf-components/sections.d.ts +34 -0
  80. package/dist/backend/pdf-components/sections.d.ts.map +1 -0
  81. package/dist/backend/pdf-components/sections.js +445 -0
  82. package/dist/backend/pdf-components/sections.js.map +1 -0
  83. package/dist/backend/pdf-components/tree-mapper.d.ts +37 -0
  84. package/dist/backend/pdf-components/tree-mapper.d.ts.map +1 -0
  85. package/dist/backend/pdf-components/tree-mapper.js +76 -0
  86. package/dist/backend/pdf-components/tree-mapper.js.map +1 -0
  87. package/dist/backend/plugin.d.ts +124 -0
  88. package/dist/backend/plugin.d.ts.map +1 -0
  89. package/dist/backend/plugin.js +87 -0
  90. package/dist/backend/plugin.js.map +1 -0
  91. package/dist/backend/routes.admin.d.ts +41 -0
  92. package/dist/backend/routes.admin.d.ts.map +1 -0
  93. package/dist/backend/routes.admin.js +219 -0
  94. package/dist/backend/routes.admin.js.map +1 -0
  95. package/dist/backend/routes.customer.d.ts +33 -0
  96. package/dist/backend/routes.customer.d.ts.map +1 -0
  97. package/dist/backend/routes.customer.js +124 -0
  98. package/dist/backend/routes.customer.js.map +1 -0
  99. package/dist/backend/seeds/generic-invoice-template.d.ts +18 -0
  100. package/dist/backend/seeds/generic-invoice-template.d.ts.map +1 -0
  101. package/dist/backend/seeds/generic-invoice-template.js +174 -0
  102. package/dist/backend/seeds/generic-invoice-template.js.map +1 -0
  103. package/dist/backend/services/amount-to-words.d.ts +20 -0
  104. package/dist/backend/services/amount-to-words.d.ts.map +1 -0
  105. package/dist/backend/services/amount-to-words.js +232 -0
  106. package/dist/backend/services/amount-to-words.js.map +1 -0
  107. package/dist/backend/services/auto-issue-reactor.d.ts +53 -0
  108. package/dist/backend/services/auto-issue-reactor.d.ts.map +1 -0
  109. package/dist/backend/services/auto-issue-reactor.js +122 -0
  110. package/dist/backend/services/auto-issue-reactor.js.map +1 -0
  111. package/dist/backend/services/corrective-invoice.d.ts +38 -0
  112. package/dist/backend/services/corrective-invoice.d.ts.map +1 -0
  113. package/dist/backend/services/corrective-invoice.js +257 -0
  114. package/dist/backend/services/corrective-invoice.js.map +1 -0
  115. package/dist/backend/services/cross-module-context.d.ts +82 -0
  116. package/dist/backend/services/cross-module-context.d.ts.map +1 -0
  117. package/dist/backend/services/cross-module-context.js +93 -0
  118. package/dist/backend/services/cross-module-context.js.map +1 -0
  119. package/dist/backend/services/duplicate-number-refusal.d.ts +33 -0
  120. package/dist/backend/services/duplicate-number-refusal.d.ts.map +1 -0
  121. package/dist/backend/services/duplicate-number-refusal.js +92 -0
  122. package/dist/backend/services/duplicate-number-refusal.js.map +1 -0
  123. package/dist/backend/services/erp-sale-document-write-port.d.ts +37 -0
  124. package/dist/backend/services/erp-sale-document-write-port.d.ts.map +1 -0
  125. package/dist/backend/services/erp-sale-document-write-port.js +192 -0
  126. package/dist/backend/services/erp-sale-document-write-port.js.map +1 -0
  127. package/dist/backend/services/invoice-attachment-fetch-registry.d.ts +75 -0
  128. package/dist/backend/services/invoice-attachment-fetch-registry.d.ts.map +1 -0
  129. package/dist/backend/services/invoice-attachment-fetch-registry.js +81 -0
  130. package/dist/backend/services/invoice-attachment-fetch-registry.js.map +1 -0
  131. package/dist/backend/services/invoice-copy-host.service.d.ts +9 -0
  132. package/dist/backend/services/invoice-copy-host.service.d.ts.map +1 -0
  133. package/dist/backend/services/invoice-copy-host.service.js +52 -0
  134. package/dist/backend/services/invoice-copy-host.service.js.map +1 -0
  135. package/dist/backend/services/invoice-email-dispatch.d.ts +89 -0
  136. package/dist/backend/services/invoice-email-dispatch.d.ts.map +1 -0
  137. package/dist/backend/services/invoice-email-dispatch.js +138 -0
  138. package/dist/backend/services/invoice-email-dispatch.js.map +1 -0
  139. package/dist/backend/services/invoice-line-builder.d.ts +29 -0
  140. package/dist/backend/services/invoice-line-builder.d.ts.map +1 -0
  141. package/dist/backend/services/invoice-line-builder.js +46 -0
  142. package/dist/backend/services/invoice-line-builder.js.map +1 -0
  143. package/dist/backend/services/invoice-number-collisions.d.ts +17 -0
  144. package/dist/backend/services/invoice-number-collisions.d.ts.map +1 -0
  145. package/dist/backend/services/invoice-number-collisions.js +154 -0
  146. package/dist/backend/services/invoice-number-collisions.js.map +1 -0
  147. package/dist/backend/services/invoice-number-generator.d.ts +96 -0
  148. package/dist/backend/services/invoice-number-generator.d.ts.map +1 -0
  149. package/dist/backend/services/invoice-number-generator.js +157 -0
  150. package/dist/backend/services/invoice-number-generator.js.map +1 -0
  151. package/dist/backend/services/invoice-pdf-block-registry.d.ts +65 -0
  152. package/dist/backend/services/invoice-pdf-block-registry.d.ts.map +1 -0
  153. package/dist/backend/services/invoice-pdf-block-registry.js +94 -0
  154. package/dist/backend/services/invoice-pdf-block-registry.js.map +1 -0
  155. package/dist/backend/services/invoice-pdf-renderer.d.ts +57 -0
  156. package/dist/backend/services/invoice-pdf-renderer.d.ts.map +1 -0
  157. package/dist/backend/services/invoice-pdf-renderer.js +158 -0
  158. package/dist/backend/services/invoice-pdf-renderer.js.map +1 -0
  159. package/dist/backend/services/invoice-pdf.d.ts +24 -0
  160. package/dist/backend/services/invoice-pdf.d.ts.map +1 -0
  161. package/dist/backend/services/invoice-pdf.js +52 -0
  162. package/dist/backend/services/invoice-pdf.js.map +1 -0
  163. package/dist/backend/services/invoice-placement-apply-port.d.ts +29 -0
  164. package/dist/backend/services/invoice-placement-apply-port.d.ts.map +1 -0
  165. package/dist/backend/services/invoice-placement-apply-port.js +40 -0
  166. package/dist/backend/services/invoice-placement-apply-port.js.map +1 -0
  167. package/dist/backend/services/invoice-read-port.d.ts +44 -0
  168. package/dist/backend/services/invoice-read-port.d.ts.map +1 -0
  169. package/dist/backend/services/invoice-read-port.js +95 -0
  170. package/dist/backend/services/invoice-read-port.js.map +1 -0
  171. package/dist/backend/services/invoice-service.d.ts +94 -0
  172. package/dist/backend/services/invoice-service.d.ts.map +1 -0
  173. package/dist/backend/services/invoice-service.js +374 -0
  174. package/dist/backend/services/invoice-service.js.map +1 -0
  175. package/dist/backend/services/invoice-template-service.d.ts +43 -0
  176. package/dist/backend/services/invoice-template-service.d.ts.map +1 -0
  177. package/dist/backend/services/invoice-template-service.js +147 -0
  178. package/dist/backend/services/invoice-template-service.js.map +1 -0
  179. package/dist/backend/services/numbering-configuration.d.ts +76 -0
  180. package/dist/backend/services/numbering-configuration.d.ts.map +1 -0
  181. package/dist/backend/services/numbering-configuration.js +176 -0
  182. package/dist/backend/services/numbering-configuration.js.map +1 -0
  183. package/dist/backend/services/numbering-write-validator.d.ts +22 -0
  184. package/dist/backend/services/numbering-write-validator.d.ts.map +1 -0
  185. package/dist/backend/services/numbering-write-validator.js +82 -0
  186. package/dist/backend/services/numbering-write-validator.js.map +1 -0
  187. package/dist/backend/services/seller-settings.d.ts +24 -0
  188. package/dist/backend/services/seller-settings.d.ts.map +1 -0
  189. package/dist/backend/services/seller-settings.js +38 -0
  190. package/dist/backend/services/seller-settings.js.map +1 -0
  191. package/dist/backend/services/vendor-number-hold.d.ts +10 -0
  192. package/dist/backend/services/vendor-number-hold.d.ts.map +1 -0
  193. package/dist/backend/services/vendor-number-hold.js +14 -0
  194. package/dist/backend/services/vendor-number-hold.js.map +1 -0
  195. package/dist/manifest.d.ts +203 -0
  196. package/dist/manifest.d.ts.map +1 -0
  197. package/dist/manifest.js +390 -0
  198. package/dist/manifest.js.map +1 -0
  199. package/dist/migrations/20260629T125121_invoices_module.d.ts +17 -0
  200. package/dist/migrations/20260629T125121_invoices_module.d.ts.map +1 -0
  201. package/dist/migrations/20260629T125121_invoices_module.js +117 -0
  202. package/dist/migrations/20260629T125121_invoices_module.js.map +1 -0
  203. package/dist/migrations/20260801T111000_invoices_generic_template_reseed.d.ts +6 -0
  204. package/dist/migrations/20260801T111000_invoices_generic_template_reseed.d.ts.map +1 -0
  205. package/dist/migrations/20260801T111000_invoices_generic_template_reseed.js +25 -0
  206. package/dist/migrations/20260801T111000_invoices_generic_template_reseed.js.map +1 -0
  207. package/dist/migrations/20260817T201110_invoices_correction_idempotency_key.d.ts +20 -0
  208. package/dist/migrations/20260817T201110_invoices_correction_idempotency_key.d.ts.map +1 -0
  209. package/dist/migrations/20260817T201110_invoices_correction_idempotency_key.js +33 -0
  210. package/dist/migrations/20260817T201110_invoices_correction_idempotency_key.js.map +1 -0
  211. package/dist/migrations/20260903T101756_invoices_namespace_block_names.d.ts +6 -0
  212. package/dist/migrations/20260903T101756_invoices_namespace_block_names.d.ts.map +1 -0
  213. package/dist/migrations/20260903T101756_invoices_namespace_block_names.js +56 -0
  214. package/dist/migrations/20260903T101756_invoices_namespace_block_names.js.map +1 -0
  215. package/dist/migrations/20260914T133603_invoices_erp_imported_sale_documents.d.ts +12 -0
  216. package/dist/migrations/20260914T133603_invoices_erp_imported_sale_documents.d.ts.map +1 -0
  217. package/dist/migrations/20260914T133603_invoices_erp_imported_sale_documents.js +87 -0
  218. package/dist/migrations/20260914T133603_invoices_erp_imported_sale_documents.js.map +1 -0
  219. package/dist/migrations/20260926T230239_invoices_import_identity.d.ts +33 -0
  220. package/dist/migrations/20260926T230239_invoices_import_identity.d.ts.map +1 -0
  221. package/dist/migrations/20260926T230239_invoices_import_identity.js +83 -0
  222. package/dist/migrations/20260926T230239_invoices_import_identity.js.map +1 -0
  223. package/dist/migrations/index.d.ts +32 -0
  224. package/dist/migrations/index.d.ts.map +1 -0
  225. package/dist/migrations/index.js +39 -0
  226. package/dist/migrations/index.js.map +1 -0
  227. package/dist/ports/index.d.ts +93 -0
  228. package/dist/ports/index.d.ts.map +1 -0
  229. package/dist/ports/index.js +2 -0
  230. package/dist/ports/index.js.map +1 -0
  231. package/docs/invoices.md +113 -0
  232. package/i18n/en.json +45 -0
  233. package/i18n/pl.json +45 -0
  234. package/package.json +119 -3
  235. package/tailwind.css +14 -0
@@ -0,0 +1,29 @@
1
+ import type { InvoiceTemplateBlockField } from '@endora-commerce/contracts';
2
+ import type { InvoicePdfBlockRegistry } from '../services/invoice-pdf-block-registry.js';
3
+ /**
4
+ * Page-builder descriptor for the invoice template WYSIWYG palette (US6).
5
+ * Served to the admin editor so it can offer the bounded invoice component set.
6
+ *
7
+ * The field shape is the published contract's, because a contributed block
8
+ * describes its own fields (`specs/134-paid-module-extraction/` T063).
9
+ */
10
+ export type InvoiceComponentField = InvoiceTemplateBlockField;
11
+ export interface InvoiceComponentDescriptor {
12
+ name: string;
13
+ ownerModule: string;
14
+ label: string;
15
+ fields: Record<string, InvoiceComponentField>;
16
+ }
17
+ /**
18
+ * The descriptor `GET /api/v1/admin/invoice-templates/page-builder/config`
19
+ * serves: this module's ten blocks, then every present contributor's.
20
+ *
21
+ * Built per request rather than held as a constant, because a contributor's
22
+ * presence is read on every call — switching one off removes its block from
23
+ * the palette description without a restart, and switching it on restores it.
24
+ */
25
+ export declare function invoicePageBuilderDescriptor(blocks: InvoicePdfBlockRegistry): {
26
+ schemaVersion: 1;
27
+ components: InvoiceComponentDescriptor[];
28
+ };
29
+ //# sourceMappingURL=descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/backend/pdf-components/descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAGzF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAE9D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAC/C;AA+MD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,uBAAuB,GAAG;IAC7E,aAAa,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,0BAA0B,EAAE,CAAC;CAC1C,CAkBA"}
@@ -0,0 +1,227 @@
1
+ import { INVOICE_COMPONENT_NAMES } from './tree-mapper.js';
2
+ const LABELS = {
3
+ 'invoices.InvoiceHeader': 'Header (number + dates)',
4
+ 'invoices.InvoiceParties': 'Seller & buyer',
5
+ 'invoices.InvoiceLineItems': 'Line items table',
6
+ 'invoices.InvoiceVatSummary': 'VAT summary',
7
+ 'invoices.InvoiceTotals': 'Totals & amount in words',
8
+ 'invoices.InvoiceNotes': 'Notes (free text)',
9
+ 'invoices.InvoiceSpacer': 'Spacer',
10
+ 'invoices.InvoiceDivider': 'Divider',
11
+ 'invoices.InvoiceLogo': 'Logo',
12
+ 'invoices.InvoiceFooter': 'Footer / legal',
13
+ };
14
+ const YES_NO = [
15
+ { label: 'Yes', value: true },
16
+ { label: 'No', value: false },
17
+ ];
18
+ function radio(label) {
19
+ return { type: 'radio', label, options: YES_NO };
20
+ }
21
+ const SHARED_MARGIN = {
22
+ marginTop: { type: 'number', label: 'Margin top (px)' },
23
+ marginBottom: { type: 'number', label: 'Margin bottom (px)' },
24
+ };
25
+ const FIELDS = {
26
+ 'invoices.InvoiceHeader': {
27
+ titleSize: { type: 'number', label: 'Title size' },
28
+ titleColor: { type: 'color', label: 'Title color' },
29
+ titleBold: radio('Title bold'),
30
+ align: {
31
+ type: 'select',
32
+ label: 'Align',
33
+ options: [
34
+ { label: 'Left', value: 'left' },
35
+ { label: 'Center', value: 'center' },
36
+ { label: 'Right', value: 'right' },
37
+ ],
38
+ },
39
+ showIssuedAt: radio('Show issue date'),
40
+ showSaleDate: radio('Show sale date'),
41
+ showPaymentDue: radio('Show payment due'),
42
+ showPaymentMethod: radio('Show payment method'),
43
+ labelIssuedAt: { type: 'text', label: 'Issue date label' },
44
+ labelSaleDate: { type: 'text', label: 'Sale date label' },
45
+ labelPaymentDue: { type: 'text', label: 'Payment due label' },
46
+ labelPaymentMethod: { type: 'text', label: 'Payment method label' },
47
+ // T137: the KSeF number row prints whenever the invoice has one and no
48
+ // placed block prints it; the operator may relabel it and not hide it.
49
+ labelKsefNumber: { type: 'text', label: 'KSeF number label' },
50
+ ...SHARED_MARGIN,
51
+ },
52
+ 'invoices.InvoiceParties': {
53
+ sellerLabel: { type: 'text', label: 'Seller label' },
54
+ buyerLabel: { type: 'text', label: 'Buyer label' },
55
+ showSellerBank: radio('Show seller bank'),
56
+ showSellerSwift: radio('Show seller SWIFT'),
57
+ showBuyerTaxId: radio('Show buyer tax ID'),
58
+ labelFontSize: { type: 'number', label: 'Label font size' },
59
+ bodyFontSize: { type: 'number', label: 'Body font size' },
60
+ columnGap: { type: 'number', label: 'Column gap (px)' },
61
+ sellerWidthPercent: { type: 'number', label: 'Seller width %' },
62
+ ...SHARED_MARGIN,
63
+ },
64
+ 'invoices.InvoiceLineItems': {
65
+ fontSize: { type: 'number', label: 'Font size' },
66
+ headerBold: radio('Header bold'),
67
+ headerBackground: { type: 'color', label: 'Header background' },
68
+ headerColor: { type: 'color', label: 'Header text color' },
69
+ borderColor: { type: 'color', label: 'Border color' },
70
+ zebra: radio('Zebra rows'),
71
+ showUnit: radio('Show unit'),
72
+ showQty: radio('Show quantity'),
73
+ showUnitNet: radio('Show unit net price'),
74
+ showTaxRate: radio('Show tax rate'),
75
+ showNet: radio('Show net value'),
76
+ showGross: radio('Show gross value'),
77
+ ...SHARED_MARGIN,
78
+ },
79
+ 'invoices.InvoiceVatSummary': {
80
+ fontSize: { type: 'number', label: 'Font size' },
81
+ headerBold: radio('Header bold'),
82
+ headerBackground: { type: 'color', label: 'Header background' },
83
+ headerColor: { type: 'color', label: 'Header text color' },
84
+ borderColor: { type: 'color', label: 'Border color' },
85
+ showTotalRow: radio('Show total row'),
86
+ totalLabel: { type: 'text', label: 'Total row label' },
87
+ ...SHARED_MARGIN,
88
+ },
89
+ 'invoices.InvoiceTotals': {
90
+ align: {
91
+ type: 'select',
92
+ label: 'Align',
93
+ options: [
94
+ { label: 'Left', value: 'left' },
95
+ { label: 'Center', value: 'center' },
96
+ { label: 'Right', value: 'right' },
97
+ ],
98
+ },
99
+ fontSize: { type: 'number', label: 'Font size' },
100
+ color: { type: 'color', label: 'Text color' },
101
+ amountDueColor: { type: 'color', label: 'Amount due color' },
102
+ amountDueBold: radio('Amount due bold'),
103
+ amountInWordsItalics: radio('Amount in words italics'),
104
+ showPaid: radio('Show paid'),
105
+ showAmountDue: radio('Show amount due'),
106
+ showGross: radio('Show gross'),
107
+ showAmountInWords: radio('Show amount in words'),
108
+ labelPaid: { type: 'text', label: 'Paid label' },
109
+ labelAmountDue: { type: 'text', label: 'Amount due label' },
110
+ labelGross: { type: 'text', label: 'Gross label' },
111
+ labelInWords: { type: 'text', label: 'In words label' },
112
+ ...SHARED_MARGIN,
113
+ },
114
+ 'invoices.InvoiceNotes': {
115
+ text: { type: 'textarea', label: 'Notes text' },
116
+ align: {
117
+ type: 'select',
118
+ label: 'Align',
119
+ options: [
120
+ { label: 'Left', value: 'left' },
121
+ { label: 'Center', value: 'center' },
122
+ { label: 'Right', value: 'right' },
123
+ ],
124
+ },
125
+ fontSize: { type: 'number', label: 'Font size' },
126
+ color: { type: 'color', label: 'Text color' },
127
+ bold: radio('Bold'),
128
+ italics: radio('Italics'),
129
+ showTopDivider: radio('Top divider'),
130
+ ...SHARED_MARGIN,
131
+ },
132
+ 'invoices.InvoiceSpacer': {
133
+ height: { type: 'number', label: 'Height (px)' },
134
+ backgroundColor: { type: 'color', label: 'Background color' },
135
+ },
136
+ 'invoices.InvoiceDivider': {
137
+ thickness: { type: 'number', label: 'Thickness (px)' },
138
+ color: { type: 'color', label: 'Color' },
139
+ style: {
140
+ type: 'select',
141
+ label: 'Style',
142
+ options: [
143
+ { label: 'Solid', value: 'solid' },
144
+ { label: 'Dashed', value: 'dashed' },
145
+ ],
146
+ },
147
+ widthPercent: { type: 'number', label: 'Width %' },
148
+ align: {
149
+ type: 'select',
150
+ label: 'Align',
151
+ options: [
152
+ { label: 'Left', value: 'left' },
153
+ { label: 'Center', value: 'center' },
154
+ { label: 'Right', value: 'right' },
155
+ ],
156
+ },
157
+ marginY: { type: 'number', label: 'Vertical margin (px)' },
158
+ },
159
+ 'invoices.InvoiceLogo': {
160
+ imageSource: {
161
+ type: 'select',
162
+ label: 'Image source',
163
+ options: [
164
+ { label: 'URL', value: 'url' },
165
+ { label: 'Asset library', value: 'library' },
166
+ ],
167
+ },
168
+ src: { type: 'text', label: 'Image URL' },
169
+ assetId: { type: 'text', label: 'Image' },
170
+ width: { type: 'number', label: 'Width (px)' },
171
+ maxHeight: { type: 'number', label: 'Max height (px)' },
172
+ align: {
173
+ type: 'select',
174
+ label: 'Align',
175
+ options: [
176
+ { label: 'Left', value: 'left' },
177
+ { label: 'Center', value: 'center' },
178
+ { label: 'Right', value: 'right' },
179
+ ],
180
+ },
181
+ marginBottom: { type: 'number', label: 'Margin bottom (px)' },
182
+ },
183
+ 'invoices.InvoiceFooter': {
184
+ text: { type: 'textarea', label: 'Footer text' },
185
+ align: {
186
+ type: 'select',
187
+ label: 'Align',
188
+ options: [
189
+ { label: 'Left', value: 'left' },
190
+ { label: 'Center', value: 'center' },
191
+ { label: 'Right', value: 'right' },
192
+ ],
193
+ },
194
+ fontSize: { type: 'number', label: 'Font size' },
195
+ color: { type: 'color', label: 'Text color' },
196
+ bold: radio('Bold'),
197
+ italics: radio('Italics'),
198
+ showTopDivider: radio('Top divider'),
199
+ ...SHARED_MARGIN,
200
+ },
201
+ };
202
+ /**
203
+ * The descriptor `GET /api/v1/admin/invoice-templates/page-builder/config`
204
+ * serves: this module's ten blocks, then every present contributor's.
205
+ *
206
+ * Built per request rather than held as a constant, because a contributor's
207
+ * presence is read on every call — switching one off removes its block from
208
+ * the palette description without a restart, and switching it on restores it.
209
+ */
210
+ export function invoicePageBuilderDescriptor(blocks) {
211
+ return {
212
+ schemaVersion: 1,
213
+ components: [
214
+ ...INVOICE_COMPONENT_NAMES.map((name) => ({
215
+ name,
216
+ ownerModule: 'invoices',
217
+ label: LABELS[name] ?? name,
218
+ fields: FIELDS[name] ?? {},
219
+ })),
220
+ ...blocks.present().map((block) => {
221
+ const { label, fields } = block.describe();
222
+ return { name: block.name, ownerModule: block.moduleId, label, fields: { ...fields } };
223
+ }),
224
+ ],
225
+ };
226
+ }
227
+ //# sourceMappingURL=descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../../src/backend/pdf-components/descriptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Pre-resolve InvoiceLogo images to data URIs before pdfmake runs.
3
+ *
4
+ * pdfmake fetches `image: <http url>` over the network. When the admin embeds a
5
+ * library asset, `resolveData` bakes an absolute API URL
6
+ * (`http://localhost:3001/assets/file/<id>`). Fetching that URL from inside the
7
+ * same Node process that is still serving the preview request deadlocks or
8
+ * 403s (private assets), which surfaces as INTERNAL on Preview PDF.
9
+ *
10
+ * Loading bytes via the Assets Library storage adapter (or a short external
11
+ * fetch for true remote URLs) and inlining `data:image/…;base64,…` avoids the
12
+ * self-HTTP path. Unsupported formats (SVG, WebP, …) are omitted so the PDF
13
+ * still renders.
14
+ */
15
+ /**
16
+ * `Uint8Array` rather than `Buffer` since `specs/110-instance-repository/`
17
+ * T118c: the bytes arrive from `assetReadPort.openAssetBytes`, and
18
+ * `@endora-commerce/contracts` cannot name the `Buffer` global (it is compiled
19
+ * by `@endora-commerce/admin-kit` with `types: ["vite/client"]`). A `Buffer`
20
+ * still satisfies it, which is why the external-fetch path below and this
21
+ * file's own tests are unchanged.
22
+ */
23
+ export type LoadedAssetImage = {
24
+ bytes: Uint8Array;
25
+ mimeType: string;
26
+ };
27
+ export type LoadAssetImage = (assetId: string) => Promise<LoadedAssetImage | null>;
28
+ export declare function toImageDataUri(bytes: Uint8Array, mimeType: string): string | null;
29
+ export declare function extractAssetIdFromUrl(url: string): string | null;
30
+ /**
31
+ * Returns a shallow-cloned tree with InvoiceLogo `src` replaced by data URIs
32
+ * (or cleared when the image cannot be embedded).
33
+ */
34
+ export declare function embedInvoiceLogoImages(tree: unknown, loadAssetImage?: LoadAssetImage): Promise<unknown>;
35
+ //# sourceMappingURL=embed-logo-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-logo-images.d.ts","sourceRoot":"","sources":["../../../src/backend/pdf-components/embed-logo-images.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAYnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AA4DD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,OAAO,EACb,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,OAAO,CAAC,CAclB"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Pre-resolve InvoiceLogo images to data URIs before pdfmake runs.
3
+ *
4
+ * pdfmake fetches `image: <http url>` over the network. When the admin embeds a
5
+ * library asset, `resolveData` bakes an absolute API URL
6
+ * (`http://localhost:3001/assets/file/<id>`). Fetching that URL from inside the
7
+ * same Node process that is still serving the preview request deadlocks or
8
+ * 403s (private assets), which surfaces as INTERNAL on Preview PDF.
9
+ *
10
+ * Loading bytes via the Assets Library storage adapter (or a short external
11
+ * fetch for true remote URLs) and inlining `data:image/…;base64,…` avoids the
12
+ * self-HTTP path. Unsupported formats (SVG, WebP, …) are omitted so the PDF
13
+ * still renders.
14
+ */
15
+ const ASSET_FILE_RE = /\/assets\/file\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i;
16
+ /** pdfmake reliably embeds JPEG/PNG; other types are skipped. */
17
+ const PDFMAKE_IMAGE_MIME = new Set(['image/jpeg', 'image/jpg', 'image/png']);
18
+ function normalizeMime(mime) {
19
+ const m = mime.toLowerCase().split(';')[0]?.trim() ?? '';
20
+ return m === 'image/jpg' ? 'image/jpeg' : m;
21
+ }
22
+ export function toImageDataUri(bytes, mimeType) {
23
+ const mime = normalizeMime(mimeType);
24
+ if (!PDFMAKE_IMAGE_MIME.has(mime))
25
+ return null;
26
+ return `data:${mime};base64,${Buffer.from(bytes).toString('base64')}`;
27
+ }
28
+ export function extractAssetIdFromUrl(url) {
29
+ const m = ASSET_FILE_RE.exec(url);
30
+ return m?.[1] ?? null;
31
+ }
32
+ async function fetchExternalImage(url, timeoutMs = 3_000) {
33
+ const controller = new AbortController();
34
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
35
+ try {
36
+ const res = await fetch(url, { signal: controller.signal });
37
+ if (!res.ok)
38
+ return null;
39
+ const mime = normalizeMime(res.headers.get('content-type') ?? 'image/png');
40
+ if (!PDFMAKE_IMAGE_MIME.has(mime))
41
+ return null;
42
+ const arr = new Uint8Array(await res.arrayBuffer());
43
+ return { bytes: Buffer.from(arr), mimeType: mime };
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ finally {
49
+ clearTimeout(timer);
50
+ }
51
+ }
52
+ async function resolveLogoSrc(props, loadAssetImage) {
53
+ const existing = typeof props['src'] === 'string' ? props['src'].trim() : '';
54
+ if (/^data:image\/(png|jpe?g);base64,/i.test(existing))
55
+ return existing;
56
+ const assetIdRaw = typeof props['assetId'] === 'string' ? props['assetId'].trim() : '';
57
+ const fromSrc = existing ? extractAssetIdFromUrl(existing) : null;
58
+ const assetId = assetIdRaw || fromSrc || '';
59
+ if (assetId && loadAssetImage) {
60
+ const loaded = await loadAssetImage(assetId);
61
+ if (loaded) {
62
+ const dataUri = toImageDataUri(loaded.bytes, loaded.mimeType);
63
+ if (dataUri)
64
+ return dataUri;
65
+ }
66
+ return '';
67
+ }
68
+ // Remote URL that is not our assets endpoint — safe to fetch (CDN / public HTTP).
69
+ if (/^https?:\/\//i.test(existing) && !extractAssetIdFromUrl(existing)) {
70
+ const loaded = await fetchExternalImage(existing);
71
+ if (loaded) {
72
+ const dataUri = toImageDataUri(loaded.bytes, loaded.mimeType);
73
+ if (dataUri)
74
+ return dataUri;
75
+ }
76
+ return '';
77
+ }
78
+ // Library URL without a loader (unit tests) — clear so pdfmake does not self-fetch.
79
+ if (extractAssetIdFromUrl(existing))
80
+ return '';
81
+ return existing;
82
+ }
83
+ /**
84
+ * Returns a shallow-cloned tree with InvoiceLogo `src` replaced by data URIs
85
+ * (or cleared when the image cannot be embedded).
86
+ */
87
+ export async function embedInvoiceLogoImages(tree, loadAssetImage) {
88
+ if (!tree || typeof tree !== 'object')
89
+ return tree;
90
+ const root = tree;
91
+ if (!Array.isArray(root.content))
92
+ return tree;
93
+ const content = await Promise.all(root.content.map(async (node) => {
94
+ if (node?.type !== 'invoices.InvoiceLogo' || !node.props)
95
+ return node;
96
+ const src = await resolveLogoSrc(node.props, loadAssetImage);
97
+ return { ...node, props: { ...node.props, src } };
98
+ }));
99
+ return { ...root, content };
100
+ }
101
+ //# sourceMappingURL=embed-logo-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-logo-images.js","sourceRoot":"","sources":["../../../src/backend/pdf-components/embed-logo-images.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { InvoiceDetail } from '@endora-commerce/contracts';
2
+ /** A representative invoice used for template preview rendering (US6). */
3
+ export declare function sampleInvoiceDetail(): InvoiceDetail;
4
+ //# sourceMappingURL=sample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../../../src/backend/pdf-components/sample.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,0EAA0E;AAC1E,wBAAgB,mBAAmB,IAAI,aAAa,CAwEnD"}
@@ -0,0 +1,75 @@
1
+ /** A representative invoice used for template preview rendering (US6). */
2
+ export function sampleInvoiceDetail() {
3
+ return {
4
+ id: '00000000-0000-4000-8000-0000000000aa',
5
+ orderId: '00000000-0000-4000-8000-0000000000bb',
6
+ orderBusinessId: 'ORD-2026-0042',
7
+ salesChannelId: null,
8
+ kind: 'invoice',
9
+ number: 'INV-2026-0042',
10
+ status: 'ready',
11
+ currency: 'USD',
12
+ issuedAt: '2026-05-04T10:00:00.000Z',
13
+ saleDate: '2026-05-04',
14
+ paymentDueDate: '2026-05-18',
15
+ paymentMethod: 'Bank transfer',
16
+ netTotal: 2000,
17
+ taxTotal: 400,
18
+ grossTotal: 2400,
19
+ paidTotal: 0,
20
+ amountDue: 2400,
21
+ total: 2400,
22
+ originalInvoiceId: null,
23
+ templateId: null,
24
+ pdfAssetId: null,
25
+ ksefReferenceNumber: null,
26
+ ksefProcessedAt: null,
27
+ lines: [
28
+ {
29
+ ordinal: 1,
30
+ name: 'Cloud hosting — annual plan',
31
+ unit: 'ea',
32
+ quantity: 1,
33
+ unitNetPrice: 500,
34
+ taxRate: 0.2,
35
+ netValue: 500,
36
+ grossValue: 600,
37
+ },
38
+ {
39
+ ordinal: 2,
40
+ name: 'Professional services — onboarding',
41
+ unit: 'hr',
42
+ quantity: 10,
43
+ unitNetPrice: 150,
44
+ taxRate: 0.2,
45
+ netValue: 1500,
46
+ grossValue: 1800,
47
+ },
48
+ ],
49
+ vatSummary: [{ taxRate: 0.2, netTotal: 2000, vatAmount: 400, grossTotal: 2400 }],
50
+ seller: {
51
+ legalName: 'Acme Supplies Ltd.',
52
+ addressLine1: '100 Market Street, Suite 4',
53
+ addressLine2: '',
54
+ postalCode: '10001',
55
+ city: 'New York',
56
+ country: 'US',
57
+ taxId: '12-3456789',
58
+ bankName: 'Example Bank',
59
+ bankAccount: 'US64 EXAMPLE 0000 0000 0000 00',
60
+ swift: 'EXAMPUS33',
61
+ email: '',
62
+ phone: '',
63
+ },
64
+ buyer: {
65
+ name: 'Globex Trading Co.',
66
+ taxId: '98-7654321',
67
+ addressLine1: '250 Commerce Avenue',
68
+ addressLine2: '',
69
+ postalCode: '60601',
70
+ city: 'Chicago',
71
+ country: 'US',
72
+ },
73
+ };
74
+ }
75
+ //# sourceMappingURL=sample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.js","sourceRoot":"","sources":["../../../src/backend/pdf-components/sample.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,EAAE,sCAAsC;QAC1C,OAAO,EAAE,sCAAsC;QAC/C,eAAe,EAAE,eAAe;QAChC,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,0BAA0B;QACpC,QAAQ,EAAE,YAAY;QACtB,cAAc,EAAE,YAAY;QAC5B,aAAa,EAAE,eAAe;QAC9B,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE;YACL;gBACE,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,6BAA6B;gBACnC,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,CAAC;gBACX,YAAY,EAAE,GAAG;gBACjB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;gBACb,UAAU,EAAE,GAAG;aAChB;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,oCAAoC;gBAC1C,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,EAAE;gBACZ,YAAY,EAAE,GAAG;gBACjB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;aACjB;SACF;QACD,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAChF,MAAM,EAAE;YACN,SAAS,EAAE,oBAAoB;YAC/B,YAAY,EAAE,4BAA4B;YAC1C,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,cAAc;YACxB,WAAW,EAAE,gCAAgC;YAC7C,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;SACV;QACD,KAAK,EAAE;YACL,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,YAAY;YACnB,YAAY,EAAE,qBAAqB;YACnC,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Content } from 'pdfmake/interfaces.js';
2
+ import type { InvoiceDetail } from '@endora-commerce/contracts';
3
+ import { type AmountToWordsLocale } from '../services/amount-to-words.js';
4
+ /**
5
+ * Invoice PDF section builders (feature 047, US6). Each maps a slice of the
6
+ * invoice data (+ optional Puck props) to pdfmake `Content`. Shared by the
7
+ * built-in generic layout and the WYSIWYG template tree mapper.
8
+ */
9
+ export declare function money(n: number): string;
10
+ export declare function pct(rate: number): string;
11
+ export declare const TITLES: Record<InvoiceDetail['kind'], string>;
12
+ type Props = Record<string, unknown>;
13
+ /** Interpolate `{{var invoice.x}}` / `{{var order.x}}` style tokens. */
14
+ export declare function interpolate(text: string, inv: InvoiceDetail): string;
15
+ /** What the renderer tells the header beyond its props. */
16
+ export interface HeaderSectionOptions {
17
+ /**
18
+ * A present, placed contributed block prints the KSeF number itself, so the
19
+ * header's own row stands down (`specs/134-paid-module-extraction/` T137).
20
+ */
21
+ readonly suppressKsefNumber?: boolean;
22
+ }
23
+ export declare function headerSection(inv: InvoiceDetail, props?: Props, options?: HeaderSectionOptions): Content;
24
+ export declare function partiesSection(inv: InvoiceDetail, props?: Props): Content;
25
+ export declare function lineItemsSection(inv: InvoiceDetail, props?: Props): Content;
26
+ export declare function vatSummarySection(inv: InvoiceDetail, props?: Props): Content;
27
+ export declare function totalsSection(inv: InvoiceDetail, locale: AmountToWordsLocale, props?: Props): Content;
28
+ export declare function notesSection(props: Props, inv: InvoiceDetail): Content;
29
+ export declare function footerSection(props: Props, inv: InvoiceDetail): Content;
30
+ export declare function spacerSection(props?: Props): Content;
31
+ export declare function dividerSection(props?: Props): Content;
32
+ export declare function logoSection(props?: Props): Content;
33
+ export {};
34
+ //# sourceMappingURL=sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../../src/backend/pdf-components/sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAEzF;;;;GAIG;AAEH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvC;AACD,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAKxD,CAAC;AAGF,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAiCrC,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAapE;AAED,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,KAAK,GAAE,KAAU,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAiET;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,GAAE,KAAU,GAAG,OAAO,CA0C7E;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,GAAE,KAAU,GAAG,OAAO,CA4F/E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,GAAE,KAAU,GAAG,OAAO,CA8ChF;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,GAAE,KAAU,GAChB,OAAO,CA0CT;AA8BD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAGtE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAMvE;AAED,wBAAgB,aAAa,CAAC,KAAK,GAAE,KAAU,GAAG,OAAO,CAUxD;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,KAAU,GAAG,OAAO,CA2BzD;AAED,wBAAgB,WAAW,CAAC,KAAK,GAAE,KAAU,GAAG,OAAO,CAiBtD"}