react-pdf-levelup 2.0.28 → 2.0.33

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.
package/dist/index.cjs ADDED
@@ -0,0 +1,881 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/components/core/index.tsx
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ A: () => A,
34
+ BR: () => BR,
35
+ Blockquote: () => Blockquote,
36
+ Center: () => Center,
37
+ Col1: () => Col1,
38
+ Col10: () => Col10,
39
+ Col11: () => Col11,
40
+ Col12: () => Col12,
41
+ Col2: () => Col2,
42
+ Col3: () => Col3,
43
+ Col4: () => Col4,
44
+ Col5: () => Col5,
45
+ Col6: () => Col6,
46
+ Col7: () => Col7,
47
+ Col8: () => Col8,
48
+ Col9: () => Col9,
49
+ Container: () => Container,
50
+ Em: () => Em,
51
+ Font: () => import_renderer11.Font,
52
+ Footer: () => Footer,
53
+ H1: () => H1,
54
+ H2: () => H2,
55
+ H3: () => H3,
56
+ H4: () => H4,
57
+ H5: () => H5,
58
+ H6: () => H6,
59
+ Header: () => Header,
60
+ Img: () => Img_default,
61
+ LI: () => LI,
62
+ LayoutPDF: () => LayoutPDF_default,
63
+ Left: () => Left,
64
+ Mark: () => Mark,
65
+ OL: () => OL,
66
+ P: () => P,
67
+ QR: () => QR_default,
68
+ Right: () => Right,
69
+ Row: () => Row,
70
+ Small: () => Small,
71
+ Span: () => Span,
72
+ Strong: () => Strong,
73
+ StyleSheet: () => import_renderer11.StyleSheet,
74
+ Table: () => Table,
75
+ Tbody: () => Tbody,
76
+ Td: () => Td,
77
+ Text: () => import_renderer11.Text,
78
+ Th: () => Th,
79
+ Thead: () => Thead,
80
+ Tr: () => Tr,
81
+ U: () => U,
82
+ UL: () => UL,
83
+ View: () => import_renderer11.View,
84
+ decodeBase64Pdf: () => decodeBase64Pdf_default,
85
+ generatePDF: () => generatePDF_default
86
+ });
87
+ module.exports = __toCommonJS(index_exports);
88
+
89
+ // src/components/core/LayoutPDF.tsx
90
+ var import_react = __toESM(require("react"), 1);
91
+ var import_renderer = require("@react-pdf/renderer");
92
+ var styles = import_renderer.StyleSheet.create({
93
+ page: {
94
+ backgroundColor: "white",
95
+ padding: 30,
96
+ fontFamily: "Helvetica",
97
+ fontSize: 12,
98
+ lineHeight: 1.5
99
+ },
100
+ pageNumber: {
101
+ position: "absolute",
102
+ fontSize: 10,
103
+ top: 792 - 14,
104
+ left: 0,
105
+ right: 0,
106
+ textAlign: "center",
107
+ color: "grey"
108
+ }
109
+ });
110
+ var LayoutPDF = ({
111
+ children,
112
+ size = "A4",
113
+ orientation = "portrait",
114
+ backgroundColor = "white",
115
+ showPageNumbers = true,
116
+ padding = 30,
117
+ style = {}
118
+ }) => {
119
+ let safeSize = size;
120
+ let safeOrientation = orientation;
121
+ let safeBackgroundColor = backgroundColor;
122
+ let safeShowPageNumbers = showPageNumbers;
123
+ try {
124
+ const validSizes = ["A4", "A3", "A5", "LETTER", "LEGAL", "TABLOID"];
125
+ if (typeof size === "string" && !validSizes.includes(size.toUpperCase())) {
126
+ console.warn(`Tama\xF1o de p\xE1gina inv\xE1lido: ${size}. Usando A4 como valor predeterminado.`);
127
+ safeSize = "A4";
128
+ }
129
+ if (orientation !== "portrait" && orientation !== "landscape") {
130
+ console.warn(`Orientaci\xF3n inv\xE1lida: ${orientation}. Usando portrait como valor predeterminado.`);
131
+ safeOrientation = "portrait";
132
+ }
133
+ if (typeof backgroundColor !== "string") {
134
+ console.warn(`Color de fondo inv\xE1lido: ${backgroundColor}. Usando white como valor predeterminado.`);
135
+ safeBackgroundColor = "white";
136
+ }
137
+ if (typeof showPageNumbers !== "boolean") {
138
+ safeShowPageNumbers = Boolean(showPageNumbers);
139
+ }
140
+ } catch (e) {
141
+ console.warn("Error procesando props en LayoutPDF:", e);
142
+ }
143
+ const pageStyle = {
144
+ ...styles.page,
145
+ backgroundColor: safeBackgroundColor,
146
+ padding,
147
+ ...style
148
+ };
149
+ return /* @__PURE__ */ import_react.default.createElement(import_renderer.Document, null, /* @__PURE__ */ import_react.default.createElement(import_renderer.Page, { size: safeSize, orientation: safeOrientation, style: pageStyle }, children, safeShowPageNumbers && /* @__PURE__ */ import_react.default.createElement(
150
+ import_renderer.Text,
151
+ {
152
+ style: styles.pageNumber,
153
+ render: ({ pageNumber, totalPages }) => `${pageNumber} / ${totalPages}`,
154
+ fixed: true
155
+ }
156
+ )));
157
+ };
158
+ var LayoutPDF_default = LayoutPDF;
159
+
160
+ // src/components/core/Img.tsx
161
+ var import_react2 = __toESM(require("react"), 1);
162
+ var import_renderer2 = require("@react-pdf/renderer");
163
+ var styles2 = import_renderer2.StyleSheet.create({
164
+ image: {
165
+ width: "100%",
166
+ height: "auto",
167
+ marginBottom: 14
168
+ }
169
+ });
170
+ var Img = ({ src, style }) => {
171
+ return /* @__PURE__ */ import_react2.default.createElement(import_renderer2.Image, { src, style: [styles2.image, style] });
172
+ };
173
+ var Img_default = Img;
174
+
175
+ // src/components/core/Position.tsx
176
+ var import_react3 = __toESM(require("react"), 1);
177
+ var import_renderer3 = require("@react-pdf/renderer");
178
+ var styles3 = import_renderer3.StyleSheet.create({
179
+ left: {
180
+ textAlign: "left"
181
+ },
182
+ right: {
183
+ textAlign: "right"
184
+ },
185
+ center: {
186
+ textAlign: "center"
187
+ }
188
+ });
189
+ var Left = ({ children, style }) => {
190
+ return /* @__PURE__ */ import_react3.default.createElement(import_renderer3.View, { style: [styles3.left, style] }, children);
191
+ };
192
+ var Right = ({ children, style }) => {
193
+ return /* @__PURE__ */ import_react3.default.createElement(import_renderer3.View, { style: [styles3.right, style] }, children);
194
+ };
195
+ var Center = ({ children, style }) => {
196
+ return /* @__PURE__ */ import_react3.default.createElement(import_renderer3.View, { style: [styles3.center, style] }, children);
197
+ };
198
+
199
+ // src/components/core/Etiquetas.tsx
200
+ var import_react4 = __toESM(require("react"), 1);
201
+ var import_renderer4 = require("@react-pdf/renderer");
202
+ var styles4 = import_renderer4.StyleSheet.create({
203
+ p: {
204
+ fontSize: 12,
205
+ marginBottom: 14,
206
+ lineHeight: 1.5
207
+ },
208
+ h1: {
209
+ fontSize: 24,
210
+ fontWeight: "bold",
211
+ marginBottom: 12
212
+ },
213
+ h2: {
214
+ fontSize: 20,
215
+ fontWeight: "bold",
216
+ marginBottom: 10
217
+ },
218
+ h3: {
219
+ fontSize: 18,
220
+ fontWeight: "bold",
221
+ marginBottom: 8
222
+ },
223
+ h4: {
224
+ fontSize: 16,
225
+ fontWeight: "bold",
226
+ marginBottom: 6
227
+ },
228
+ h5: {
229
+ fontSize: 14,
230
+ fontWeight: "bold",
231
+ marginBottom: 4
232
+ },
233
+ h6: {
234
+ fontSize: 12,
235
+ fontWeight: "bold",
236
+ marginBottom: 0
237
+ },
238
+ strong: {
239
+ fontWeight: "bold"
240
+ },
241
+ em: {
242
+ fontStyle: "italic"
243
+ },
244
+ u: {
245
+ textDecoration: "underline"
246
+ },
247
+ small: {
248
+ fontSize: 10
249
+ },
250
+ blockquote: {
251
+ marginLeft: 20,
252
+ marginRight: 20,
253
+ fontStyle: "italic",
254
+ borderLeft: "4px solid #ccc",
255
+ paddingLeft: 10
256
+ },
257
+ mark: {
258
+ backgroundColor: "yellow"
259
+ },
260
+ A: {
261
+ color: "#3d65fd",
262
+ textDecoration: "none"
263
+ },
264
+ br: {
265
+ width: "100%",
266
+ height: 1,
267
+ marginTop: 7,
268
+ marginBottom: 7
269
+ }
270
+ });
271
+ var P = ({ children, style }) => {
272
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.p, style] }, children);
273
+ };
274
+ var H1 = ({ children, style }) => {
275
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.h1, style] }, children);
276
+ };
277
+ var H2 = ({ children, style }) => {
278
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.h2, style] }, children);
279
+ };
280
+ var H3 = ({ children, style }) => {
281
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.h3, style] }, children);
282
+ };
283
+ var H4 = ({ children, style }) => {
284
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.h4, style] }, children);
285
+ };
286
+ var H5 = ({ children, style }) => {
287
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.h5, style] }, children);
288
+ };
289
+ var H6 = ({ children, style }) => {
290
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.h6, style] }, children);
291
+ };
292
+ var Strong = ({ children, style }) => {
293
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.strong, style] }, children);
294
+ };
295
+ var Em = ({ children, style }) => {
296
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.em, style] }, children);
297
+ };
298
+ var U = ({ children, style }) => {
299
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.u, style] }, children);
300
+ };
301
+ var Small = ({ children, style }) => {
302
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.small, style] }, children);
303
+ };
304
+ var Blockquote = ({ children, style }) => {
305
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.blockquote, style] }, children);
306
+ };
307
+ var Mark = ({ children, style }) => {
308
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.mark, style] }, children);
309
+ };
310
+ var A = ({ children, style, href }) => {
311
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Link, { src: href, style: [styles4.A, style] }, children);
312
+ };
313
+ var BR = ({ style }) => {
314
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [styles4.br, style] }, "\n");
315
+ };
316
+ var Span = ({ children, style }) => {
317
+ return /* @__PURE__ */ import_react4.default.createElement(import_renderer4.Text, { style: [style] }, children);
318
+ };
319
+
320
+ // src/components/core/Tablet.tsx
321
+ var import_react5 = __toESM(require("react"), 1);
322
+ var import_renderer5 = require("@react-pdf/renderer");
323
+ var styles5 = import_renderer5.StyleSheet.create({
324
+ table: {
325
+ width: "100%",
326
+ borderWidth: 1,
327
+ borderColor: "#000",
328
+ marginBottom: 20
329
+ },
330
+ thead: {
331
+ backgroundColor: "#ccc"
332
+ },
333
+ tr: {
334
+ flexDirection: "row"
335
+ },
336
+ textBold: {
337
+ fontSize: 10,
338
+ fontFamily: "Helvetica",
339
+ fontWeight: "bold",
340
+ textAlign: "center",
341
+ paddingTop: 4
342
+ },
343
+ text: {
344
+ fontSize: 10,
345
+ fontFamily: "Helvetica",
346
+ paddingTop: 4,
347
+ paddingLeft: 8,
348
+ paddingRight: 8
349
+ },
350
+ zebraOdd: {
351
+ backgroundColor: "#eeeeee"
352
+ }
353
+ });
354
+ var Table = ({ children, style }) => /* @__PURE__ */ import_react5.default.createElement(import_renderer5.View, { style: [styles5.table, style] }, children);
355
+ var Thead = ({ children, style }) => /* @__PURE__ */ import_react5.default.createElement(import_renderer5.View, { style: [styles5.thead, style] }, children);
356
+ var Tbody = ({ children, style }) => {
357
+ const rows = import_react5.default.Children.toArray(children);
358
+ const count = rows.length;
359
+ return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, rows.map(
360
+ (row, idx) => import_react5.default.cloneElement(row, {
361
+ isLastRow: idx === count - 1,
362
+ isOdd: idx % 2 === 1
363
+ })
364
+ ));
365
+ };
366
+ var Tr = ({
367
+ children,
368
+ style,
369
+ isLastRow = false,
370
+ isOdd = false
371
+ }) => {
372
+ const elements = import_react5.default.Children.toArray(children);
373
+ const count = elements.length;
374
+ return /* @__PURE__ */ import_react5.default.createElement(import_renderer5.View, { style: [styles5.tr, style] }, elements.map((child, idx) => {
375
+ const isLast = idx === count - 1;
376
+ const width = `${(100 / count).toFixed(2)}%`;
377
+ return import_react5.default.cloneElement(child, { width, isLast, isLastRow, isOdd });
378
+ }));
379
+ };
380
+ var Th = ({
381
+ children,
382
+ style,
383
+ width,
384
+ height,
385
+ colSpan,
386
+ isLast = false,
387
+ isLastRow = false
388
+ }) => {
389
+ const baseWidth = typeof width === "string" && colSpan ? `${(parseFloat(width) * colSpan).toFixed(2)}%` : width;
390
+ const borders = {
391
+ borderRightWidth: isLast ? 0 : 1,
392
+ borderBottomWidth: isLastRow ? 0 : 1,
393
+ borderColor: "#000",
394
+ ...height !== void 0 && { height }
395
+ };
396
+ return /* @__PURE__ */ import_react5.default.createElement(import_renderer5.View, { style: [styles5.textBold, { width: baseWidth }, borders, style] }, /* @__PURE__ */ import_react5.default.createElement(import_renderer5.Text, null, children));
397
+ };
398
+ var Td = ({
399
+ children,
400
+ style,
401
+ width,
402
+ height,
403
+ colSpan,
404
+ isLast = false,
405
+ isLastRow = false,
406
+ isOdd = false
407
+ }) => {
408
+ const baseWidth = typeof width === "string" && colSpan ? `${(parseFloat(width) * colSpan).toFixed(2)}%` : width;
409
+ const borders = {
410
+ borderRightWidth: isLast ? 0 : 1,
411
+ borderBottomWidth: isLastRow ? 0 : 1,
412
+ borderColor: "#000",
413
+ ...height !== void 0 && { height }
414
+ };
415
+ return /* @__PURE__ */ import_react5.default.createElement(import_renderer5.View, { style: [
416
+ styles5.text,
417
+ isOdd && styles5.zebraOdd,
418
+ { width: baseWidth },
419
+ borders,
420
+ style
421
+ ] }, /* @__PURE__ */ import_react5.default.createElement(import_renderer5.Text, null, children));
422
+ };
423
+
424
+ // src/components/core/Grid.tsx
425
+ var import_react6 = __toESM(require("react"), 1);
426
+ var import_renderer6 = require("@react-pdf/renderer");
427
+ var styles6 = import_renderer6.StyleSheet.create({
428
+ container: {
429
+ width: "100%",
430
+ paddingHorizontal: 20
431
+ },
432
+ row: {
433
+ flexDirection: "row",
434
+ flexWrap: "wrap",
435
+ marginHorizontal: -5
436
+ },
437
+ col: {
438
+ paddingHorizontal: 5
439
+ },
440
+ col1: { width: "8.33%" },
441
+ col2: { width: "16.66%" },
442
+ col3: { width: "25%" },
443
+ col4: { width: "33.33%" },
444
+ col5: { width: "41.66%" },
445
+ col6: { width: "50%" },
446
+ col7: { width: "58.33%" },
447
+ col8: { width: "66.66%" },
448
+ col9: { width: "75%" },
449
+ col10: { width: "83.33%" },
450
+ col11: { width: "91.66%" },
451
+ col12: { width: "100%" }
452
+ });
453
+ var Container = ({ children, style }) => {
454
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.container, style] }, children);
455
+ };
456
+ var Row = ({ children, style }) => {
457
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.row, style] }, children);
458
+ };
459
+ var Col1 = ({ children, style }) => {
460
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col1, style] }, children);
461
+ };
462
+ var Col2 = ({ children, style }) => {
463
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col2, style] }, children);
464
+ };
465
+ var Col3 = ({ children, style }) => {
466
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col3, style] }, children);
467
+ };
468
+ var Col4 = ({ children, style }) => {
469
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col4, style] }, children);
470
+ };
471
+ var Col5 = ({ children, style }) => {
472
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col5, style] }, children);
473
+ };
474
+ var Col6 = ({ children, style }) => {
475
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col6, style] }, children);
476
+ };
477
+ var Col7 = ({ children, style }) => {
478
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col7, style] }, children);
479
+ };
480
+ var Col8 = ({ children, style }) => {
481
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col8, style] }, children);
482
+ };
483
+ var Col9 = ({ children, style }) => {
484
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col9, style] }, children);
485
+ };
486
+ var Col10 = ({ children, style }) => {
487
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col10, style] }, children);
488
+ };
489
+ var Col11 = ({ children, style }) => {
490
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col11, style] }, children);
491
+ };
492
+ var Col12 = ({ children, style }) => {
493
+ return /* @__PURE__ */ import_react6.default.createElement(import_renderer6.View, { style: [styles6.col, styles6.col12, style] }, children);
494
+ };
495
+
496
+ // src/components/core/PageElements.tsx
497
+ var import_react7 = __toESM(require("react"), 1);
498
+ var import_renderer7 = require("@react-pdf/renderer");
499
+ var styles7 = import_renderer7.StyleSheet.create({
500
+ header: {
501
+ position: "absolute",
502
+ top: 20,
503
+ left: 0,
504
+ right: 0,
505
+ textAlign: "center",
506
+ fontSize: 10,
507
+ color: "#666",
508
+ paddingHorizontal: 40
509
+ },
510
+ footer: {
511
+ position: "absolute",
512
+ bottom: 20,
513
+ left: 0,
514
+ right: 0,
515
+ textAlign: "center",
516
+ fontSize: 10,
517
+ color: "#666",
518
+ paddingHorizontal: 40
519
+ }
520
+ });
521
+ var Header = ({ children, style, fixed = false }) => {
522
+ return /* @__PURE__ */ import_react7.default.createElement(import_renderer7.View, { style: [styles7.header, style], fixed }, typeof children === "string" ? /* @__PURE__ */ import_react7.default.createElement(import_renderer7.Text, null, children) : children);
523
+ };
524
+ var Footer = ({ children, style, fixed = false }) => {
525
+ return /* @__PURE__ */ import_react7.default.createElement(import_renderer7.View, { style: [styles7.footer, style], fixed }, typeof children === "string" ? /* @__PURE__ */ import_react7.default.createElement(import_renderer7.Text, null, children) : children);
526
+ };
527
+
528
+ // src/components/core/QR.tsx
529
+ var import_react8 = __toESM(require("react"), 1);
530
+ var import_renderer8 = require("@react-pdf/renderer");
531
+ var import_react9 = require("react");
532
+
533
+ // src/components/core/QRGenerator.tsx
534
+ var import_qrcode = __toESM(require("qrcode"), 1);
535
+ var generateQRAsBase64 = async ({
536
+ value,
537
+ size = 150,
538
+ colorDark = "#000000",
539
+ colorLight = "#ffffff",
540
+ margin = 0,
541
+ errorCorrectionLevel = "M"
542
+ }) => {
543
+ try {
544
+ const options = {
545
+ errorCorrectionLevel,
546
+ type: "image/png",
547
+ quality: 0.92,
548
+ margin,
549
+ color: {
550
+ dark: colorDark,
551
+ light: colorLight
552
+ },
553
+ width: size
554
+ };
555
+ const qrDataUrl = import_qrcode.default.toDataURL(value, options);
556
+ return qrDataUrl;
557
+ } catch (error) {
558
+ console.error("Error generando QR:", error);
559
+ return "";
560
+ }
561
+ };
562
+ var addLogoToQR = async (qrDataUrl, logoUrl, logoWidth, logoHeight) => {
563
+ return new Promise((resolve) => {
564
+ if (!qrDataUrl || !logoUrl) {
565
+ resolve(qrDataUrl);
566
+ return;
567
+ }
568
+ try {
569
+ const canvas = document.createElement("canvas");
570
+ const ctx = canvas.getContext("2d");
571
+ if (!ctx) {
572
+ resolve(qrDataUrl);
573
+ return;
574
+ }
575
+ const qrImage = new Image();
576
+ qrImage.crossOrigin = "anonymous";
577
+ qrImage.onload = () => {
578
+ canvas.width = qrImage.width;
579
+ canvas.height = qrImage.height;
580
+ ctx.drawImage(qrImage, 0, 0, canvas.width, canvas.height);
581
+ const logoImage = new Image();
582
+ logoImage.crossOrigin = "anonymous";
583
+ logoImage.onload = () => {
584
+ const x = (canvas.width - logoWidth) / 2;
585
+ const y = (canvas.height - logoHeight) / 2;
586
+ ctx.fillStyle = "#FFFFFF";
587
+ ctx.fillRect(x - 5, y - 5, logoWidth + 10, logoHeight + 10);
588
+ ctx.drawImage(logoImage, x, y, logoWidth, logoHeight);
589
+ const finalQrDataUrl = canvas.toDataURL("image/png");
590
+ resolve(finalQrDataUrl);
591
+ };
592
+ logoImage.onerror = () => {
593
+ console.error("Error cargando el logo");
594
+ resolve(qrDataUrl);
595
+ };
596
+ logoImage.src = logoUrl;
597
+ };
598
+ qrImage.onerror = () => {
599
+ console.error("Error cargando el QR");
600
+ resolve("");
601
+ };
602
+ qrImage.src = qrDataUrl;
603
+ } catch (error) {
604
+ console.error("Error procesando el QR con logo:", error);
605
+ resolve(qrDataUrl);
606
+ }
607
+ });
608
+ };
609
+
610
+ // src/components/core/QR.tsx
611
+ var styles8 = import_renderer8.StyleSheet.create({
612
+ qrContainer: {
613
+ display: "flex",
614
+ alignItems: "center",
615
+ justifyContent: "center",
616
+ margin: 10
617
+ }
618
+ });
619
+ var errorLevelMap = {
620
+ 0: "L",
621
+ 1: "M",
622
+ 2: "Q",
623
+ 3: "H"
624
+ };
625
+ var QR = ({
626
+ value,
627
+ size = 150,
628
+ style,
629
+ colorDark = "#000000",
630
+ colorLight = "#ffffff",
631
+ margin = 0,
632
+ logo = "",
633
+ logoWidth = 30,
634
+ logoHeight = 30,
635
+ errorCorrectionLevel = "M"
636
+ }) => {
637
+ const [qrDataUrl, setQrDataUrl] = (0, import_react9.useState)("");
638
+ (0, import_react9.useEffect)(() => {
639
+ const generateQR = async () => {
640
+ try {
641
+ const baseQrDataUrl = await generateQRAsBase64({
642
+ value,
643
+ size,
644
+ colorDark,
645
+ colorLight,
646
+ margin,
647
+ errorCorrectionLevel: typeof errorCorrectionLevel === "number" ? errorLevelMap[errorCorrectionLevel] || "M" : errorCorrectionLevel
648
+ });
649
+ if (logo && logoWidth && logoHeight) {
650
+ const qrWithLogo = await addLogoToQR(baseQrDataUrl, logo, logoWidth, logoHeight);
651
+ setQrDataUrl(qrWithLogo);
652
+ } else {
653
+ setQrDataUrl(baseQrDataUrl);
654
+ }
655
+ } catch (error) {
656
+ console.error("Error generando QR:", error);
657
+ const fallbackUrl2 = `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(
658
+ value
659
+ )}&size=${size}x${size}&color=${encodeURIComponent(colorDark.replace("#", ""))}&bgcolor=${encodeURIComponent(
660
+ colorLight.replace("#", "")
661
+ )}`;
662
+ setQrDataUrl(fallbackUrl2);
663
+ }
664
+ };
665
+ generateQR();
666
+ }, [value, size, colorDark, colorLight, margin, logo, logoWidth, logoHeight, errorCorrectionLevel]);
667
+ const fallbackUrl = `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(
668
+ value
669
+ )}&size=${size}x${size}`;
670
+ return /* @__PURE__ */ import_react8.default.createElement(import_renderer8.View, { style: [styles8.qrContainer, style] }, /* @__PURE__ */ import_react8.default.createElement(import_renderer8.Image, { src: qrDataUrl || fallbackUrl, style: { width: size, height: size } }));
671
+ };
672
+ var QR_default = QR;
673
+
674
+ // src/components/core/Lista.tsx
675
+ var import_react10 = __toESM(require("react"), 1);
676
+ var import_renderer9 = require("@react-pdf/renderer");
677
+ var styles9 = import_renderer9.StyleSheet.create({
678
+ ul: {
679
+ marginBottom: 10,
680
+ paddingLeft: 15
681
+ },
682
+ ol: {
683
+ marginBottom: 10,
684
+ paddingLeft: 15
685
+ },
686
+ li: {
687
+ marginBottom: 5,
688
+ flexDirection: "row"
689
+ },
690
+ bulletPoint: {
691
+ width: 15,
692
+ marginRight: 5,
693
+ fontSize: 12
694
+ },
695
+ itemContent: {
696
+ flex: 1
697
+ }
698
+ });
699
+ var getBulletPoint = (type = "disc") => {
700
+ switch (type) {
701
+ case "circle":
702
+ return "\u25CB";
703
+ case "square":
704
+ return "\u25A0";
705
+ case "disc":
706
+ default:
707
+ return "\u2022";
708
+ }
709
+ };
710
+ var getOrderedMarker = (index, type = "decimal", start = 1) => {
711
+ const actualIndex = start + index - 1;
712
+ switch (type) {
713
+ case "lower-alpha":
714
+ return String.fromCharCode(97 + actualIndex % 26) + ".";
715
+ case "upper-alpha":
716
+ return String.fromCharCode(65 + actualIndex % 26) + ".";
717
+ case "lower-roman":
718
+ return toRoman(actualIndex).toLowerCase() + ".";
719
+ case "upper-roman":
720
+ return toRoman(actualIndex) + ".";
721
+ case "decimal":
722
+ default:
723
+ return actualIndex + ".";
724
+ }
725
+ };
726
+ var toRoman = (num) => {
727
+ if (num <= 0 || num > 3999) return String(num);
728
+ const romanNumerals = [
729
+ ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"],
730
+ ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"],
731
+ ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"],
732
+ ["", "M", "MM", "MMM"]
733
+ ];
734
+ return romanNumerals[3][Math.floor(num / 1e3)] + romanNumerals[2][Math.floor(num % 1e3 / 100)] + romanNumerals[1][Math.floor(num % 100 / 10)] + romanNumerals[0][num % 10];
735
+ };
736
+ var UL = ({ children, style, type = "disc" }) => {
737
+ const childrenWithBullets = import_react10.default.Children.map(children, (child, index) => {
738
+ if (import_react10.default.isValidElement(child)) {
739
+ return import_react10.default.cloneElement(child, {
740
+ bulletType: type,
741
+ isOrdered: false,
742
+ index: index + 1
743
+ });
744
+ }
745
+ return child;
746
+ });
747
+ return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles9.ul, style] }, childrenWithBullets);
748
+ };
749
+ var OL = ({ children, style, type = "decimal", start = 1 }) => {
750
+ const childrenWithNumbers = import_react10.default.Children.map(children, (child, index) => {
751
+ if (import_react10.default.isValidElement(child)) {
752
+ return import_react10.default.cloneElement(child, {
753
+ bulletType: type,
754
+ isOrdered: true,
755
+ index: index + 1,
756
+ start
757
+ });
758
+ }
759
+ return child;
760
+ });
761
+ return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles9.ol, style] }, childrenWithNumbers);
762
+ };
763
+ var LI = ({ children, style, bulletType = "disc", isOrdered = false, index = 1, start = 1, value }) => {
764
+ let marker;
765
+ if (isOrdered) {
766
+ const actualIndex = value !== void 0 ? Number(value) : index;
767
+ marker = getOrderedMarker(actualIndex, bulletType, start);
768
+ } else {
769
+ marker = getBulletPoint(bulletType);
770
+ }
771
+ return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles9.li, style] }, /* @__PURE__ */ import_react10.default.createElement(import_renderer9.Text, { style: styles9.bulletPoint }, marker), /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: styles9.itemContent }, typeof children === "string" ? /* @__PURE__ */ import_react10.default.createElement(import_renderer9.Text, null, children) : children));
772
+ };
773
+
774
+ // src/components/core/index.tsx
775
+ var import_renderer11 = require("@react-pdf/renderer");
776
+
777
+ // src/functions/decodeBase64Pdf.ts
778
+ var decodeBase64Pdf = (base64, fileName) => {
779
+ const byteCharacters = atob(base64);
780
+ const byteNumbers = new Array(byteCharacters.length);
781
+ for (let i = 0; i < byteCharacters.length; i++) {
782
+ byteNumbers[i] = byteCharacters.charCodeAt(i);
783
+ }
784
+ const byteArray = new Uint8Array(byteNumbers);
785
+ const blob = new Blob([byteArray], { type: "application/pdf" });
786
+ const blobUrl = URL.createObjectURL(blob);
787
+ if (document === void 0) {
788
+ console.error("document is undefined, only works in browser context");
789
+ return;
790
+ }
791
+ const link = document.createElement("a");
792
+ link.href = blobUrl;
793
+ link.download = fileName;
794
+ document.body.appendChild(link);
795
+ link.click();
796
+ document.body.removeChild(link);
797
+ window.open(blobUrl, "_blank");
798
+ setTimeout(() => {
799
+ URL.revokeObjectURL(blobUrl);
800
+ }, 100);
801
+ };
802
+ var decodeBase64Pdf_default = decodeBase64Pdf;
803
+
804
+ // src/functions/generatePDF.ts
805
+ var import_renderer10 = require("@react-pdf/renderer");
806
+ var import_react11 = require("react");
807
+ var generatePDF = async ({ template: Template, data }) => {
808
+ try {
809
+ if (!Template) {
810
+ throw new Error("Template not provided");
811
+ }
812
+ const MyDocument = (0, import_react11.createElement)(Template, { data });
813
+ const stream = await (0, import_renderer10.renderToStream)(MyDocument);
814
+ const base64String = await new Promise((resolve, reject) => {
815
+ const chunks = [];
816
+ stream.on("data", (chunk) => chunks.push(chunk));
817
+ stream.on("end", () => resolve(Buffer.concat(chunks).toString("base64")));
818
+ stream.on("error", (error) => reject(error));
819
+ });
820
+ return base64String;
821
+ } catch (error) {
822
+ throw new Error("Error generating PDF: " + (error instanceof Error ? error.message : "Unknown error"));
823
+ }
824
+ };
825
+ var generatePDF_default = generatePDF;
826
+ // Annotate the CommonJS export names for ESM import in node:
827
+ 0 && (module.exports = {
828
+ A,
829
+ BR,
830
+ Blockquote,
831
+ Center,
832
+ Col1,
833
+ Col10,
834
+ Col11,
835
+ Col12,
836
+ Col2,
837
+ Col3,
838
+ Col4,
839
+ Col5,
840
+ Col6,
841
+ Col7,
842
+ Col8,
843
+ Col9,
844
+ Container,
845
+ Em,
846
+ Font,
847
+ Footer,
848
+ H1,
849
+ H2,
850
+ H3,
851
+ H4,
852
+ H5,
853
+ H6,
854
+ Header,
855
+ Img,
856
+ LI,
857
+ LayoutPDF,
858
+ Left,
859
+ Mark,
860
+ OL,
861
+ P,
862
+ QR,
863
+ Right,
864
+ Row,
865
+ Small,
866
+ Span,
867
+ Strong,
868
+ StyleSheet,
869
+ Table,
870
+ Tbody,
871
+ Td,
872
+ Text,
873
+ Th,
874
+ Thead,
875
+ Tr,
876
+ U,
877
+ UL,
878
+ View,
879
+ decodeBase64Pdf,
880
+ generatePDF
881
+ });