@linkiez/boleto-sdk 1.2.0 → 1.2.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"IndustrialIntegrityTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/IndustrialIntegrityTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,qBAAa,2BAA4B,YAAW,cAAc;IACzD,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM;CAuIhD"}
1
+ {"version":3,"file":"IndustrialIntegrityTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/IndustrialIntegrityTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,qBAAa,2BAA4B,YAAW,cAAc;IACzD,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM;CAwYhD"}
@@ -6,134 +6,389 @@ class IndustrialIntegrityTemplate {
6
6
  render(data) {
7
7
  const dueDate = formatDateBr(data.payment.dueDate);
8
8
  const amount = formatMoney(data.payment.amount);
9
- const instructions = (data.instructions ?? [])
10
- .slice(0, 3)
11
- .map((item) => `<p>${escapeHtml(item)}</p>`)
12
- .join('');
13
- const payerAddress = escapeHtml(data.payer.address || '-');
9
+ const documentDate = escapeHtml(data.additionalInfo?.dataDocumento ?? dueDate);
10
+ const processingDate = escapeHtml(data.additionalInfo?.dataProcessamento ?? dueDate);
11
+ const agencyCode = escapeHtml(data.additionalInfo?.agenciaCodigoCedente ?? '-');
12
+ const wallet = escapeHtml(data.additionalInfo?.Carteira ?? data.additionalInfo?.carteira ?? '-');
14
13
  const bankCode = escapeHtml(data.bank.code);
15
- const digitableLine = escapeHtml(data.payment.digitableLine);
14
+ const bankCheckDigit = escapeHtml(data.additionalInfo?.bankCheckDigit ?? '7');
15
+ const bankDisplayCode = `${bankCode}-${bankCheckDigit}`;
16
+ const beneficiaryName = escapeHtml(data.beneficiary.name);
17
+ const beneficiaryDoc = escapeHtml(data.beneficiary.document);
18
+ const payerName = escapeHtml(data.payer.name);
19
+ const payerDoc = escapeHtml(data.payer.document);
20
+ const payerAddress = escapeHtml(data.payer.address || '-');
21
+ const digitavel = escapeHtml(data.payment.digitableLine);
16
22
  const barcodeSvg = (0, BarcodeRenderer_1.renderI2of5Svg)(data.payment.barcode, {
17
- height: 56,
23
+ height: 72,
18
24
  narrowWidth: 2,
19
25
  wideWidth: 4,
20
- quietZone: 12,
26
+ quietZone: 1,
21
27
  });
22
28
  const pixPayload = data.payment.pix?.payload ? escapeHtml(data.payment.pix.payload) : null;
23
29
  const pixQrCodeSvg = data.payment.pix?.qrCodeSvg ?? null;
30
+ const instructionItems = (data.instructions ?? [])
31
+ .slice(0, 3)
32
+ .map((item) => `<p class="font-body-md text-sm">${escapeHtml(item)}</p>`)
33
+ .join('');
24
34
  return `<!DOCTYPE html>
25
- <html lang="pt-BR">
26
- <head>
27
- <meta charset="utf-8" />
28
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
29
- <title>Industrial Integrity - Ficha de Compensacao</title>
30
- <style>
31
- body { background: #f8f9fa; margin: 0; font-family: Inter, Arial, sans-serif; color: #000; }
32
- .page { width: 210mm; min-height: 297mm; margin: 10mm auto; padding: 16mm; background: #fff; color: #000; }
33
- .top { display: flex; justify-content: space-between; align-items: flex-end; border-bottom: 2px dashed #c7c6cb; padding-bottom: 12px; margin-bottom: 14px; }
34
- .brand { font-size: 28px; font-weight: 800; letter-spacing: -0.02em; }
35
- .subtitle { font-size: 11px; color: #000; letter-spacing: 0.08em; }
36
- .bank-chip { background: #27272a; color: #fff; padding: 3px 8px; border-radius: 3px; font-weight: 700; }
37
- .grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; border: 1px solid #77767b; margin-bottom: 18px; }
38
- .cell { border-right: 1px solid #77767b; border-bottom: 1px solid #77767b; padding: 8px; }
39
- .cell:nth-child(4n) { border-right: none; }
40
- .label { display: block; font-size: 9px; text-transform: uppercase; letter-spacing: 0.05em; color: #000; margin-bottom: 4px; }
41
- .value { font-size: 13px; font-weight: 600; }
42
- .cut { border-top: 2px dashed #c7c6cb; margin: 18px 0; }
43
- .line { border: 2px solid #000; border-bottom: none; padding: 8px 10px; font-size: 20px; font-weight: 700; letter-spacing: 0.02em; }
44
- .table { width: 100%; border-collapse: collapse; border: 2px solid #000; border-top: none; }
45
- .table td { border: 1px solid #77767b; padding: 6px; vertical-align: top; }
46
- .table .label { font-size: 8px; margin-bottom: 2px; }
47
- .table .value { font-size: 12px; }
48
- .instructions p { margin: 4px 0; font-size: 12px; }
49
- .barcode-box { border: 1px solid #77767b; margin-top: 20px; padding: 10px; }
50
- .barcode-image { display: flex; justify-content: center; overflow: hidden; }
51
- .barcode-image svg { max-width: 100%; height: auto; }
52
- .barcode-text { font-family: 'Courier New', monospace; font-size: 13px; letter-spacing: 1px; text-align: center; }
53
- .pix-box { border: 1px solid #77767b; margin-top: 12px; padding: 10px; }
54
- .pix-content { display: flex; gap: 12px; align-items: center; }
55
- .pix-qr { width: 180px; height: 180px; display: flex; align-items: center; justify-content: center; }
56
- .pix-qr svg { width: 100%; height: 100%; }
57
- .pix-payload { font-family: 'Courier New', monospace; font-size: 11px; word-break: break-all; }
58
- .footer { font-size: 10px; color: #000; text-align: right; margin-top: 8px; }
59
- </style>
35
+ <html lang="pt-BR"><head>
36
+ <meta charset="utf-8"/>
37
+ <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
38
+ <title>INDUSTRIAL INTEGRITY - Ficha de Compensação</title>
39
+ <link href="https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;600;700;800&amp;family=Inter:wght@400;500;600&amp;family=JetBrains+Mono:wght@400;600&amp;display=swap" rel="stylesheet"/>
40
+ <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
41
+ <script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
42
+ <script id="tailwind-config">
43
+ tailwind.config = {
44
+ darkMode: "class",
45
+ theme: {
46
+ extend: {
47
+ "colors": {
48
+ "on-primary": "#ffffff",
49
+ "inverse-on-surface": "#f0f1f2",
50
+ "tertiary-container": "#27272d",
51
+ "on-tertiary": "#ffffff",
52
+ "surface-container-lowest": "#ffffff",
53
+ "surface-dim": "#d9dadb",
54
+ "error": "#ba1a1a",
55
+ "on-tertiary-fixed-variant": "#46464d",
56
+ "on-secondary": "#ffffff",
57
+ "on-secondary-container": "#fffbff",
58
+ "primary-fixed-dim": "#c8c6c9",
59
+ "on-primary-fixed-variant": "#47464a",
60
+ "primary-fixed": "#e4e1e5",
61
+ "tertiary-fixed": "#e3e1ea",
62
+ "on-error": "#ffffff",
63
+ "surface": "#f8f9fa",
64
+ "tertiary-fixed-dim": "#c7c5ce",
65
+ "secondary": "#bb0112",
66
+ "tertiary": "#121218",
67
+ "on-secondary-fixed-variant": "#93000b",
68
+ "on-tertiary-container": "#8f8d96",
69
+ "primary-container": "#27272a",
70
+ "on-primary-fixed": "#1b1b1e",
71
+ "on-primary-container": "#8f8e91",
72
+ "surface-container-high": "#e7e8e9",
73
+ "outline": "#77767b",
74
+ "surface-alt": "#F4F4F5",
75
+ "on-background": "#191c1d",
76
+ "on-error-container": "#93000a",
77
+ "outline-variant": "#c7c6cb",
78
+ "surface-variant": "#e1e3e4",
79
+ "on-surface": "#191c1d",
80
+ "error-container": "#ffdad6",
81
+ "secondary-fixed": "#ffdad6",
82
+ "surface-container": "#edeeef",
83
+ "surface-container-low": "#f3f4f5",
84
+ "background": "#f8f9fa",
85
+ "surface-container-highest": "#e1e3e4",
86
+ "on-surface-variant": "#46464b",
87
+ "on-tertiary-fixed": "#1b1b21",
88
+ "secondary-fixed-dim": "#ffb4ab",
89
+ "iron-gray": "#3F3F46",
90
+ "primary": "#121315",
91
+ "surface-bright": "#f8f9fa",
92
+ "on-secondary-fixed": "#410002",
93
+ "industrial-red": "#DC2626",
94
+ "surface-tint": "#5f5e61",
95
+ "slate-steel": "#27272A",
96
+ "inverse-surface": "#2e3132",
97
+ "inverse-primary": "#c8c6c9",
98
+ "secondary-container": "#e02928"
99
+ },
100
+ "borderRadius": {
101
+ "DEFAULT": "0.125rem",
102
+ "lg": "0.25rem",
103
+ "xl": "0.5rem",
104
+ "full": "0.75rem"
105
+ },
106
+ "fontFamily": {
107
+ "headline-md": ["Hanken Grotesk"],
108
+ "headline-lg-mobile": ["Hanken Grotesk"],
109
+ "body-md": ["Inter"],
110
+ "code-sm": ["JetBrains Mono"],
111
+ "headline-lg": ["Hanken Grotesk"],
112
+ "body-lg": ["Inter"],
113
+ "label-caps": ["JetBrains Mono"]
114
+ }
115
+ }
116
+ }
117
+ }
118
+ </script>
119
+ <style>
120
+ .material-symbols-outlined {
121
+ font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
122
+ vertical-align: middle;
123
+ }
124
+ @media print {
125
+ .no-print { display: none !important; }
126
+ body { background: white !important; margin: 0; padding: 0; }
127
+ .a4-page {
128
+ box-shadow: none !important;
129
+ margin: 0 !important;
130
+ border: none !important;
131
+ width: 210mm !important;
132
+ height: 297mm !important;
133
+ }
134
+ .print-border-black { border-color: #000 !important; }
135
+ * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
136
+ }
137
+ .a4-page {
138
+ width: 210mm;
139
+ min-height: 297mm;
140
+ padding: 20mm;
141
+ margin: 2rem auto;
142
+ background: white;
143
+ box-shadow: 0 0 10px rgba(0,0,0,0.1);
144
+ }
145
+ .a4-page {
146
+ --boleto-border-color: #8f8f95;
147
+ }
148
+ .a4-page .border,
149
+ .a4-page .border-t,
150
+ .a4-page .border-r,
151
+ .a4-page .border-b,
152
+ .a4-page .border-l,
153
+ .a4-page .border-x,
154
+ .a4-page .border-y {
155
+ border-color: var(--boleto-border-color) !important;
156
+ }
157
+ .boleto-table {
158
+ border-collapse: collapse;
159
+ width: 100%;
160
+ border-color: var(--boleto-border-color);
161
+ }
162
+ .boleto-table td, .boleto-table th {
163
+ border: 1px solid var(--boleto-border-color);
164
+ padding: 4px 8px;
165
+ vertical-align: top;
166
+ }
167
+ .a4-page .border-black {
168
+ border-color: #000 !important;
169
+ }
170
+ .label-text {
171
+ font-family: 'JetBrains Mono', monospace;
172
+ font-size: 8px;
173
+ text-transform: uppercase;
174
+ color: #46464b;
175
+ display: block;
176
+ margin-bottom: 2px;
177
+ }
178
+ .data-text {
179
+ font-family: 'Inter', sans-serif;
180
+ font-size: 13px;
181
+ font-weight: 600;
182
+ color: #121315;
183
+ }
184
+ .barcode-svg {
185
+ width: 100%;
186
+ height: 50px;
187
+ }
188
+ .barcode-area svg {
189
+ width: 100%;
190
+ height: 100%;
191
+ display: block;
192
+ }
193
+ body, body * {
194
+ color: #000 !important;
195
+ }
196
+ </style>
60
197
  </head>
61
- <body>
62
- <main class="page">
63
- <header class="top">
64
- <div>
65
- <div class="brand">INDUSTRIAL INTEGRITY</div>
66
- <div class="subtitle">FICHA DE COMPENSACAO</div>
67
- </div>
68
- <div>
69
- <span class="bank-chip">${bankCode}</span>
70
- <span style="margin-left: 8px; font-weight: 700">${escapeHtml(data.bank.name)}</span>
71
- </div>
72
- </header>
73
-
74
- <section class="grid">
75
- <div class="cell" style="grid-column: span 2">
76
- <span class="label">Beneficiario</span>
77
- <span class="value">${escapeHtml(data.beneficiary.name)} - ${escapeHtml(data.beneficiary.document)}</span>
78
- </div>
79
- <div class="cell">
80
- <span class="label">Vencimento</span>
81
- <span class="value">${escapeHtml(dueDate)}</span>
82
- </div>
83
- <div class="cell">
84
- <span class="label">Valor</span>
85
- <span class="value">${escapeHtml(amount)}</span>
86
- </div>
87
- <div class="cell" style="grid-column: span 2">
88
- <span class="label">Pagador</span>
89
- <span class="value">${escapeHtml(data.payer.name)} - ${escapeHtml(data.payer.document)}</span>
90
- </div>
91
- <div class="cell" style="grid-column: span 2">
92
- <span class="label">Endereco</span>
93
- <span class="value">${payerAddress}</span>
94
- </div>
95
- </section>
96
-
97
- <div class="cut"></div>
98
-
99
- <div class="line">${digitableLine}</div>
100
- <table class="table">
101
- <tr>
102
- <td colspan="3"><span class="label">Local de Pagamento</span><span class="value">Pagavel em qualquer banco ate o vencimento.</span></td>
103
- <td><span class="label">Vencimento</span><span class="value">${escapeHtml(dueDate)}</span></td>
104
- </tr>
105
- <tr>
106
- <td colspan="3"><span class="label">Beneficiario</span><span class="value">${escapeHtml(data.beneficiary.name)} - ${escapeHtml(data.beneficiary.document)}</span></td>
107
- <td><span class="label">Nosso Numero</span><span class="value">${escapeHtml(data.payment.ourNumber)}</span></td>
108
- </tr>
109
- <tr>
110
- <td><span class="label">Data Doc.</span><span class="value">${escapeHtml(dueDate)}</span></td>
111
- <td><span class="label">Numero Doc.</span><span class="value">${escapeHtml(data.payment.documentNumber)}</span></td>
112
- <td><span class="label">Carteira</span><span class="value">${escapeHtml(data.additionalInfo?.Carteira ?? '-')}</span></td>
113
- <td><span class="label">Valor Documento</span><span class="value">${escapeHtml(amount)}</span></td>
114
- </tr>
115
- <tr>
116
- <td colspan="4" class="instructions"><span class="label">Instrucoes</span>${instructions || '<p>Sem instrucoes.</p>'}</td>
117
- </tr>
118
- </table>
119
-
120
- <section class="barcode-box">
121
- <div class="barcode-image">${barcodeSvg}</div>
122
- <div class="barcode-text">${escapeHtml(data.payment.barcode)}</div>
123
- <div class="footer">AUTENTICACAO MECANICA - FICHA DE COMPENSACAO</div>
124
- </section>
125
- ${pixPayload
126
- ? `<section class="pix-box">
127
- <span class="label">PIX Copia e Cola</span>
128
- <div class="pix-content">
129
- <div class="pix-qr">${pixQrCodeSvg ?? '<span class="label">Sem QR</span>'}</div>
130
- <div class="pix-payload">${pixPayload}</div>
131
- </div>
132
- </section>`
198
+ <body class="bg-surface-container-low font-body-md">
199
+ <div class="no-print bg-slate-steel text-white py-3 px-4 sticky top-0 z-50 flex justify-between items-center shadow-lg">
200
+ <div class="flex items-center gap-2">
201
+ <span class="material-symbols-outlined">print</span>
202
+ <span class="font-semibold">Visualização de Impressão</span>
203
+ </div>
204
+ <div class="flex gap-4">
205
+ <button class="bg-industrial-red hover:bg-secondary-container px-6 py-2 rounded-lg font-bold flex items-center gap-2 transition-all" onclick="window.print()">
206
+ <span class="material-symbols-outlined">print</span> IMPRIMIR BOLETO
207
+ </button>
208
+ <button class="bg-white/10 hover:bg-white/20 px-4 py-2 rounded-lg text-sm border border-white/20 transition-all" onclick="copyCode()">
209
+ Copiar Linha Digitável
210
+ </button>
211
+ </div>
212
+ </div>
213
+ <div class="a4-page relative flex flex-col">
214
+ <header class="flex justify-between items-end mb-4 border-b-2 border-dashed border-outline-variant pb-6">
215
+ <div class="flex flex-col">
216
+ <h2 class="font-headline-md text-primary text-2xl tracking-tighter">INDUSTRIAL INTEGRITY</h2>
217
+ <span class="font-label-caps text-[10px] text-on-surface-variant">SOLUÇÕES INDUSTRIAIS</span>
218
+ </div>
219
+ <div class="text-right">
220
+ <p class="font-label-caps text-on-surface-variant text-xs">RECIBO DO PAGADOR</p>
221
+ <div class="flex items-center gap-2 mt-1">
222
+ <div class="bg-slate-steel px-2 py-1 font-bold rounded" style="color: #fff !important;">${bankDisplayCode}</div>
223
+ <span class="font-body-md font-bold">${escapeHtml(data.bank.name)}</span>
224
+ </div>
225
+ </div>
226
+ </header>
227
+ <div class="grid grid-cols-4 border border-outline mb-12">
228
+ <div class="col-span-3 border-r border-outline p-2">
229
+ <span class="label-text">Beneficiario</span>
230
+ <span class="data-text">${beneficiaryName} - ${formatDocumentLabel(beneficiaryDoc)}: ${beneficiaryDoc}</span>
231
+ </div>
232
+ <div class="p-2">
233
+ <span class="label-text">Vencimento</span>
234
+ <span class="data-text">${escapeHtml(dueDate)}</span>
235
+ </div>
236
+ <div class="col-span-2 border-t border-r border-outline p-2">
237
+ <span class="label-text">Pagador</span>
238
+ <span class="data-text">${payerName}</span>
239
+ </div>
240
+ <div class="border-t border-r border-outline p-2">
241
+ <span class="label-text">Agência/Código Beneficiário</span>
242
+ <span class="data-text">${agencyCode}</span>
243
+ </div>
244
+ <div class="border-t border-outline p-2">
245
+ <span class="label-text">Valor do Documento</span>
246
+ <span class="data-text">${escapeHtml(amount)}</span>
247
+ </div>
248
+ </div>
249
+ <div class="border-b-2 border-dashed border-outline-variant mb-12 relative">
250
+ <span class="absolute -top-3 left-1/2 -translate-x-1/2 bg-white px-4 font-label-caps text-[10px] text-outline">Corte na linha pontilhada</span>
251
+ </div>
252
+ <div class="flex items-center mb-0">
253
+ <div class="w-24 h-12 flex items-center justify-center border-r-2 border-black mr-4">
254
+ <span class="font-bold text-2xl">${bankDisplayCode}</span>
255
+ </div>
256
+ <div class="flex-1 flex items-center justify-between px-4 border-b-2 border-black h-12">
257
+ <span class="font-bold text-xl tracking-tight" id="digitavel">${digitavel}</span>
258
+ </div>
259
+ </div>
260
+ <table class="boleto-table mb-0 border-t-0">
261
+ <tbody>
262
+ <tr>
263
+ <td class="w-3/4" colspan="4">
264
+ <span class="label-text">Local de Pagamento</span>
265
+ <span class="data-text">Pagável em qualquer banco até o vencimento.</span>
266
+ </td>
267
+ <td>
268
+ <span class="label-text">Vencimento</span>
269
+ <span class="data-text">${escapeHtml(dueDate)}</span>
270
+ </td>
271
+ </tr>
272
+ <tr>
273
+ <td colspan="4">
274
+ <span class="label-text">Beneficiario</span>
275
+ <span class="data-text">${beneficiaryName} - ${formatDocumentLabel(beneficiaryDoc)}: ${beneficiaryDoc}</span>
276
+ </td>
277
+ <td>
278
+ <span class="label-text">Agência / Código Beneficiário</span>
279
+ <span class="data-text">${agencyCode}</span>
280
+ </td>
281
+ </tr>
282
+ <tr>
283
+ <td class="w-1/6">
284
+ <span class="label-text">Data do Doc.</span>
285
+ <span class="data-text">${documentDate}</span>
286
+ </td>
287
+ <td class="w-1/6">
288
+ <span class="label-text">Nº do Documento</span>
289
+ <span class="data-text">${escapeHtml(data.payment.documentNumber)}</span>
290
+ </td>
291
+ <td class="w-1/6">
292
+ <span class="label-text">Espécie Doc.</span>
293
+ <span class="data-text">DM</span>
294
+ </td>
295
+ <td class="w-1/6">
296
+ <span class="label-text">Aceite</span>
297
+ <span class="data-text">N</span>
298
+ </td>
299
+ <td>
300
+ <span class="label-text">Data Processamento</span>
301
+ <span class="data-text">${processingDate}</span>
302
+ </td>
303
+ </tr>
304
+ <tr>
305
+ <td class="w-1/6">
306
+ <span class="label-text">Uso do Banco</span>
307
+ <span class="data-text"></span>
308
+ </td>
309
+ <td class="w-1/6">
310
+ <span class="label-text">Carteira</span>
311
+ <span class="data-text">${wallet}</span>
312
+ </td>
313
+ <td class="w-1/6">
314
+ <span class="label-text">Espécie</span>
315
+ <span class="data-text">R$</span>
316
+ </td>
317
+ <td class="w-1/6">
318
+ <span class="label-text">Quantidade</span>
319
+ <span class="data-text"></span>
320
+ </td>
321
+ <td>
322
+ <span class="label-text">(=) Valor do Documento</span>
323
+ <span class="data-text">${escapeHtml(amount)}</span>
324
+ </td>
325
+ </tr>
326
+ <tr>
327
+ <td colspan="4" rowspan="5">
328
+ <span class="label-text">Instruções (Texto de responsabilidade do beneficiário)</span>
329
+ <div class="mt-2 flex flex-col gap-2">
330
+ ${instructionItems || '<p class="font-body-md text-sm">Sem instruções.</p>'}
331
+ </div>
332
+ </td>
333
+ <td><span class="label-text">(-) Descontos / Abatimento</span><span class="data-text"></span></td>
334
+ </tr>
335
+ <tr><td><span class="label-text">(-) Outras Deduções</span><span class="data-text"></span></td></tr>
336
+ <tr><td><span class="label-text">(+) Mora / Multa</span><span class="data-text"></span></td></tr>
337
+ <tr><td><span class="label-text">(+) Outros Acréscimos</span><span class="data-text"></span></td></tr>
338
+ <tr><td><span class="label-text">(=) Valor Cobrado</span><span class="data-text"></span></td></tr>
339
+ <tr>
340
+ <td colspan="5">
341
+ <div class="flex flex-col">
342
+ <span class="label-text">Pagador</span>
343
+ <span class="data-text">${payerName} - ${formatDocumentLabel(payerDoc)}: ${payerDoc}</span>
344
+ <span class="data-text font-normal text-xs">${payerAddress}</span>
345
+ </div>
346
+ </td>
347
+ </tr>
348
+ </tbody>
349
+ </table>
350
+ <div class="mt-0 pt-0">
351
+ <div class="border-x border-b border-outline border-t-0 bg-white w-full -mt-px">
352
+ <div class="p-0">
353
+ <div class="barcode-area h-20 overflow-hidden bg-white w-full px-2 py-1">
354
+ ${barcodeSvg}
355
+ </div>
356
+ <div class="flex justify-center py-1 text-center">
357
+ <span class="font-label-caps text-[8px] text-outline-variant">AUTENTICAÇÃO MECÂNICA - FICHA DE COMPENSAÇÃO</span>
358
+ </div>
359
+ </div>
360
+ ${pixPayload
361
+ ? `<div class="border-t border-outline p-3 mt-0">
362
+ <span class="label-text">PIX Copia e Cola</span>
363
+ <div class="mt-2 flex items-start gap-4">
364
+ <div class="w-28 h-28 border border-outline flex items-center justify-center bg-white">${pixQrCodeSvg ?? ''}</div>
365
+ <div class="flex-1">
366
+ <p class="data-text text-xs break-all">${pixPayload}</p>
367
+ </div>
368
+ </div>
369
+ </div>`
133
370
  : ''}
134
- </main>
135
- </body>
136
- </html>`;
371
+ </div>
372
+ </div>
373
+ <div class="fixed bottom-8 left-1/2 -translate-x-1/2 bg-slate-steel text-white px-6 py-3 rounded-full font-body-md shadow-lg transform translate-y-32 opacity-0 transition-all duration-300" id="toast">
374
+ Código copiado para a área de transferência!
375
+ </div>
376
+ <script>
377
+ function copyCode() {
378
+ const codeText = document.getElementById('digitavel').innerText;
379
+ navigator.clipboard.writeText(codeText).then(() => {
380
+ const toast = document.getElementById('toast');
381
+ toast.classList.remove('translate-y-32', 'opacity-0');
382
+ toast.classList.add('translate-y-0', 'opacity-100');
383
+
384
+ setTimeout(() => {
385
+ toast.classList.add('translate-y-32', 'opacity-0');
386
+ toast.classList.remove('translate-y-0', 'opacity-100');
387
+ }, 3000);
388
+ });
389
+ }
390
+ </script>
391
+ </body></html>`;
137
392
  }
138
393
  }
139
394
  exports.IndustrialIntegrityTemplate = IndustrialIntegrityTemplate;
@@ -158,4 +413,8 @@ function formatMoney(amount) {
158
413
  currency: 'BRL',
159
414
  }).format(amount);
160
415
  }
416
+ function formatDocumentLabel(document) {
417
+ const digits = document.replace(/\D+/g, '');
418
+ return digits.length > 11 ? 'CNPJ' : 'CPF';
419
+ }
161
420
  //# sourceMappingURL=IndustrialIntegrityTemplate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IndustrialIntegrityTemplate.js","sourceRoot":"","sources":["../../src/templates/IndustrialIntegrityTemplate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IndustrialIntegrityTemplate.js","sourceRoot":"","sources":["../../src/templates/IndustrialIntegrityTemplate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linkiez/boleto-sdk",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "SDK for Brazilian banking boletos and CNAB files processing",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -20,6 +20,7 @@
20
20
  "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
21
21
  "build": "npm run clean && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
22
22
  "benchmark:pdf-batch": "ts-node scripts/benchmark-pdf-batch.ts",
23
+ "preview:boleto": "ts-node scripts/preview-boleto.ts",
23
24
  "test": "jest",
24
25
  "test:watch": "jest --watch",
25
26
  "test:coverage": "jest --coverage",