react-pdf-levelup 2.0.28 → 2.0.32

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.d.mts CHANGED
@@ -109,33 +109,19 @@ interface PageElementProps {
109
109
  declare const Header: React$1.FC<PageElementProps>;
110
110
  declare const Footer: React$1.FC<PageElementProps>;
111
111
 
112
- interface QRCustomProps {
113
- url: string;
112
+ interface QRProps {
113
+ value: string;
114
114
  size?: number;
115
- colorData?: string;
116
- colorDataBG?: string;
115
+ style?: any;
116
+ colorDark?: string;
117
+ colorLight?: string;
118
+ margin?: number;
117
119
  logo?: string;
118
120
  logoWidth?: number;
119
121
  logoHeight?: number;
120
- margin?: number;
121
122
  errorCorrectionLevel?: "L" | "M" | "Q" | "H";
122
- style?: any;
123
- dotType?: "rounded" | "dots" | "classy" | "classy-rounded" | "square" | "extra-rounded";
124
- cornerSquareType?: "square" | "dot" | "extra-rounded";
125
- cornerDotType?: "square" | "dot";
126
- cornerSquareColor?: string;
127
- cornerDotColor?: string;
128
- logoBG?: string;
129
- logoText?: string;
130
- moveText?: number;
131
- textColor?: string;
132
- fontSize?: number;
133
- fontFamily?: string;
134
- textBackgroundColor?: string;
135
- textPadding?: number;
136
- textBold?: boolean;
137
123
  }
138
- declare const QR: React$1.FC<QRCustomProps>;
124
+ declare const QR: React$1.FC<QRProps>;
139
125
 
140
126
  interface ListProps {
141
127
  children: React$1.ReactNode;
package/dist/index.d.ts CHANGED
@@ -109,33 +109,19 @@ interface PageElementProps {
109
109
  declare const Header: React$1.FC<PageElementProps>;
110
110
  declare const Footer: React$1.FC<PageElementProps>;
111
111
 
112
- interface QRCustomProps {
113
- url: string;
112
+ interface QRProps {
113
+ value: string;
114
114
  size?: number;
115
- colorData?: string;
116
- colorDataBG?: string;
115
+ style?: any;
116
+ colorDark?: string;
117
+ colorLight?: string;
118
+ margin?: number;
117
119
  logo?: string;
118
120
  logoWidth?: number;
119
121
  logoHeight?: number;
120
- margin?: number;
121
122
  errorCorrectionLevel?: "L" | "M" | "Q" | "H";
122
- style?: any;
123
- dotType?: "rounded" | "dots" | "classy" | "classy-rounded" | "square" | "extra-rounded";
124
- cornerSquareType?: "square" | "dot" | "extra-rounded";
125
- cornerDotType?: "square" | "dot";
126
- cornerSquareColor?: string;
127
- cornerDotColor?: string;
128
- logoBG?: string;
129
- logoText?: string;
130
- moveText?: number;
131
- textColor?: string;
132
- fontSize?: number;
133
- fontFamily?: string;
134
- textBackgroundColor?: string;
135
- textPadding?: number;
136
- textBold?: boolean;
137
123
  }
138
- declare const QR: React$1.FC<QRCustomProps>;
124
+ declare const QR: React$1.FC<QRProps>;
139
125
 
140
126
  interface ListProps {
141
127
  children: React$1.ReactNode;
package/dist/index.js CHANGED
@@ -527,173 +527,154 @@ var Footer = ({ children, style, fixed = false }) => {
527
527
 
528
528
  // src/components/core/QR.tsx
529
529
  var import_react8 = __toESM(require("react"));
530
- var import_react9 = require("react");
531
530
  var import_renderer8 = require("@react-pdf/renderer");
532
- var import_qr_code_styling = __toESM(require("qr-code-styling"));
533
- var QR = ({
534
- url,
535
- size = 200,
536
- colorData = "#000000",
537
- colorDataBG = "#ffffff",
538
- logo,
539
- logoWidth = 30,
540
- logoHeight,
531
+ var import_react9 = require("react");
532
+
533
+ // src/components/core/QRGenerator.tsx
534
+ var import_qrcode = __toESM(require("qrcode"));
535
+ var generateQRAsBase64 = async ({
536
+ value,
537
+ size = 150,
538
+ colorDark = "#000000",
539
+ colorLight = "#ffffff",
541
540
  margin = 0,
542
- errorCorrectionLevel = "H",
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,
543
628
  style,
544
- dotType = "square",
545
- cornerSquareType = "square",
546
- cornerDotType = "square",
547
- cornerSquareColor,
548
- cornerDotColor,
549
- logoBG = colorDataBG,
550
- logoText,
551
- moveText = 0,
552
- textColor = colorData,
553
- fontSize = 12,
554
- fontFamily = "Helvetica",
555
- textBackgroundColor = colorDataBG,
556
- textPadding = 1,
557
- textBold = true
629
+ colorDark = "#000000",
630
+ colorLight = "#ffffff",
631
+ margin = 0,
632
+ logo = "",
633
+ logoWidth = 30,
634
+ logoHeight = 30,
635
+ errorCorrectionLevel = "M"
558
636
  }) => {
559
- const [qrDataURL, setQrDataURL] = (0, import_react9.useState)(null);
560
- const actualLogoWidth = logoWidth || Math.floor(size * 0.2);
561
- const actualLogoHeight = logoHeight || actualLogoWidth;
637
+ const [qrDataUrl, setQrDataUrl] = (0, import_react9.useState)("");
562
638
  (0, import_react9.useEffect)(() => {
563
- const generateQRCode = async () => {
639
+ const generateQR = async () => {
564
640
  try {
565
- const qrCode = new import_qr_code_styling.default({
566
- width: size,
567
- height: size,
568
- type: "canvas",
569
- data: url,
570
- dotsOptions: {
571
- color: colorData,
572
- type: dotType
573
- },
574
- cornersSquareOptions: {
575
- color: cornerSquareColor || colorData,
576
- type: cornerSquareType
577
- },
578
- cornersDotOptions: {
579
- color: cornerDotColor || colorData,
580
- type: cornerDotType
581
- },
582
- backgroundOptions: {
583
- color: colorDataBG
584
- },
585
- qrOptions: {
586
- errorCorrectionLevel
587
- },
588
- margin
641
+ const baseQrDataUrl = await generateQRAsBase64({
642
+ value,
643
+ size,
644
+ colorDark,
645
+ colorLight,
646
+ margin,
647
+ errorCorrectionLevel: typeof errorCorrectionLevel === "number" ? errorLevelMap[errorCorrectionLevel] || "M" : errorCorrectionLevel
589
648
  });
590
- const container = document.createElement("div");
591
- container.style.position = "absolute";
592
- container.style.top = "-9999px";
593
- container.style.left = "-9999px";
594
- document.body.appendChild(container);
595
- qrCode.append(container);
596
- setTimeout(() => {
597
- try {
598
- const qrCanvas = container.querySelector("canvas");
599
- if (qrCanvas) {
600
- const canvas = document.createElement("canvas");
601
- canvas.width = size;
602
- canvas.height = size;
603
- const ctx = canvas.getContext("2d");
604
- if (ctx) {
605
- ctx.drawImage(qrCanvas, 0, 0);
606
- const dataURL = canvas.toDataURL("image/png");
607
- setQrDataURL(dataURL);
608
- }
609
- }
610
- document.body.removeChild(container);
611
- } catch (error) {
612
- console.error("Error capturing QR code:", error);
613
- }
614
- }, 100);
649
+ if (logo && logoWidth && logoHeight) {
650
+ const qrWithLogo = await addLogoToQR(baseQrDataUrl, logo, logoWidth, logoHeight);
651
+ setQrDataUrl(qrWithLogo);
652
+ } else {
653
+ setQrDataUrl(baseQrDataUrl);
654
+ }
615
655
  } catch (error) {
616
- console.error("Error generating QR code:", 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);
617
663
  }
618
664
  };
619
- generateQRCode();
620
- }, [
621
- url,
622
- size,
623
- colorData,
624
- colorDataBG,
625
- margin,
626
- errorCorrectionLevel,
627
- dotType,
628
- cornerSquareType,
629
- cornerDotType,
630
- cornerSquareColor,
631
- cornerDotColor,
632
- logoBG
633
- ]);
634
- if (!qrDataURL) return null;
635
- const centerPosition = size / 2;
636
- const logoContainerSize = Math.max(actualLogoWidth, actualLogoHeight) + 10;
637
- return /* @__PURE__ */ import_react8.default.createElement(import_renderer8.View, { style: { width: size, height: size, position: "relative", ...style } }, /* @__PURE__ */ import_react8.default.createElement(import_renderer8.Image, { src: qrDataURL || "/placeholder.svg", style: { width: size, height: size } }), logo && /* @__PURE__ */ import_react8.default.createElement(
638
- import_renderer8.View,
639
- {
640
- style: {
641
- position: "absolute",
642
- width: logoContainerSize,
643
- height: logoContainerSize,
644
- backgroundColor: logoBG || colorDataBG,
645
- left: centerPosition - logoContainerSize / 2,
646
- top: centerPosition - logoContainerSize / 2,
647
- borderRadius: 100,
648
- border: `5px solid ${colorData}`,
649
- padding: 0
650
- }
651
- },
652
- /* @__PURE__ */ import_react8.default.createElement(
653
- import_renderer8.Image,
654
- {
655
- src: logo || "/placeholder.svg",
656
- style: {
657
- objectFit: "contain",
658
- width: actualLogoWidth,
659
- height: actualLogoHeight || actualLogoWidth
660
- }
661
- }
662
- )
663
- ), !logo && logoText && /* @__PURE__ */ import_react8.default.createElement(
664
- import_renderer8.View,
665
- {
666
- style: {
667
- position: "absolute",
668
- backgroundColor: textBackgroundColor,
669
- padding: textPadding,
670
- borderRadius: 4,
671
- left: moveText + centerPosition - 20,
672
- // Approximate center
673
- top: centerPosition - 10
674
- // Approximate center
675
- }
676
- },
677
- /* @__PURE__ */ import_react8.default.createElement(
678
- import_renderer8.Text,
679
- {
680
- style: {
681
- color: textColor,
682
- fontSize,
683
- fontFamily,
684
- fontWeight: textBold ? "bold" : "normal"
685
- }
686
- },
687
- logoText
688
- )
689
- ));
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 } }));
690
671
  };
691
672
  var QR_default = QR;
692
673
 
693
674
  // src/components/core/Lista.tsx
694
675
  var import_react10 = __toESM(require("react"));
695
676
  var import_renderer9 = require("@react-pdf/renderer");
696
- var styles8 = import_renderer9.StyleSheet.create({
677
+ var styles9 = import_renderer9.StyleSheet.create({
697
678
  ul: {
698
679
  marginBottom: 10,
699
680
  paddingLeft: 15
@@ -763,7 +744,7 @@ var UL = ({ children, style, type = "disc" }) => {
763
744
  }
764
745
  return child;
765
746
  });
766
- return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles8.ul, style] }, childrenWithBullets);
747
+ return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles9.ul, style] }, childrenWithBullets);
767
748
  };
768
749
  var OL = ({ children, style, type = "decimal", start = 1 }) => {
769
750
  const childrenWithNumbers = import_react10.default.Children.map(children, (child, index) => {
@@ -777,7 +758,7 @@ var OL = ({ children, style, type = "decimal", start = 1 }) => {
777
758
  }
778
759
  return child;
779
760
  });
780
- return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles8.ol, style] }, childrenWithNumbers);
761
+ return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles9.ol, style] }, childrenWithNumbers);
781
762
  };
782
763
  var LI = ({ children, style, bulletType = "disc", isOrdered = false, index = 1, start = 1, value }) => {
783
764
  let marker;
@@ -787,7 +768,7 @@ var LI = ({ children, style, bulletType = "disc", isOrdered = false, index = 1,
787
768
  } else {
788
769
  marker = getBulletPoint(bulletType);
789
770
  }
790
- return /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: [styles8.li, style] }, /* @__PURE__ */ import_react10.default.createElement(import_renderer9.Text, { style: styles8.bulletPoint }, marker), /* @__PURE__ */ import_react10.default.createElement(import_renderer9.View, { style: styles8.itemContent }, typeof children === "string" ? /* @__PURE__ */ import_react10.default.createElement(import_renderer9.Text, null, children) : children));
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));
791
772
  };
792
773
 
793
774
  // src/components/core/index.tsx
package/dist/index.mjs CHANGED
@@ -71,7 +71,7 @@ var LayoutPDF_default = LayoutPDF;
71
71
 
72
72
  // src/components/core/Img.tsx
73
73
  import React2 from "react";
74
- import { Image, StyleSheet as StyleSheet2 } from "@react-pdf/renderer";
74
+ import { Image as Image2, StyleSheet as StyleSheet2 } from "@react-pdf/renderer";
75
75
  var styles2 = StyleSheet2.create({
76
76
  image: {
77
77
  width: "100%",
@@ -80,7 +80,7 @@ var styles2 = StyleSheet2.create({
80
80
  }
81
81
  });
82
82
  var Img = ({ src, style }) => {
83
- return /* @__PURE__ */ React2.createElement(Image, { src, style: [styles2.image, style] });
83
+ return /* @__PURE__ */ React2.createElement(Image2, { src, style: [styles2.image, style] });
84
84
  };
85
85
  var Img_default = Img;
86
86
 
@@ -439,173 +439,154 @@ var Footer = ({ children, style, fixed = false }) => {
439
439
 
440
440
  // src/components/core/QR.tsx
441
441
  import React8 from "react";
442
+ import { Image as Image3, StyleSheet as StyleSheet8, View as View5 } from "@react-pdf/renderer";
442
443
  import { useEffect, useState } from "react";
443
- import { Image as Image2, View as View5, Text as Text5 } from "@react-pdf/renderer";
444
- import QRCodeStyling from "qr-code-styling";
445
- var QR = ({
446
- url,
447
- size = 200,
448
- colorData = "#000000",
449
- colorDataBG = "#ffffff",
450
- logo,
451
- logoWidth = 30,
452
- logoHeight,
444
+
445
+ // src/components/core/QRGenerator.tsx
446
+ import QRCode from "qrcode";
447
+ var generateQRAsBase64 = async ({
448
+ value,
449
+ size = 150,
450
+ colorDark = "#000000",
451
+ colorLight = "#ffffff",
453
452
  margin = 0,
454
- errorCorrectionLevel = "H",
453
+ errorCorrectionLevel = "M"
454
+ }) => {
455
+ try {
456
+ const options = {
457
+ errorCorrectionLevel,
458
+ type: "image/png",
459
+ quality: 0.92,
460
+ margin,
461
+ color: {
462
+ dark: colorDark,
463
+ light: colorLight
464
+ },
465
+ width: size
466
+ };
467
+ const qrDataUrl = QRCode.toDataURL(value, options);
468
+ return qrDataUrl;
469
+ } catch (error) {
470
+ console.error("Error generando QR:", error);
471
+ return "";
472
+ }
473
+ };
474
+ var addLogoToQR = async (qrDataUrl, logoUrl, logoWidth, logoHeight) => {
475
+ return new Promise((resolve) => {
476
+ if (!qrDataUrl || !logoUrl) {
477
+ resolve(qrDataUrl);
478
+ return;
479
+ }
480
+ try {
481
+ const canvas = document.createElement("canvas");
482
+ const ctx = canvas.getContext("2d");
483
+ if (!ctx) {
484
+ resolve(qrDataUrl);
485
+ return;
486
+ }
487
+ const qrImage = new Image();
488
+ qrImage.crossOrigin = "anonymous";
489
+ qrImage.onload = () => {
490
+ canvas.width = qrImage.width;
491
+ canvas.height = qrImage.height;
492
+ ctx.drawImage(qrImage, 0, 0, canvas.width, canvas.height);
493
+ const logoImage = new Image();
494
+ logoImage.crossOrigin = "anonymous";
495
+ logoImage.onload = () => {
496
+ const x = (canvas.width - logoWidth) / 2;
497
+ const y = (canvas.height - logoHeight) / 2;
498
+ ctx.fillStyle = "#FFFFFF";
499
+ ctx.fillRect(x - 5, y - 5, logoWidth + 10, logoHeight + 10);
500
+ ctx.drawImage(logoImage, x, y, logoWidth, logoHeight);
501
+ const finalQrDataUrl = canvas.toDataURL("image/png");
502
+ resolve(finalQrDataUrl);
503
+ };
504
+ logoImage.onerror = () => {
505
+ console.error("Error cargando el logo");
506
+ resolve(qrDataUrl);
507
+ };
508
+ logoImage.src = logoUrl;
509
+ };
510
+ qrImage.onerror = () => {
511
+ console.error("Error cargando el QR");
512
+ resolve("");
513
+ };
514
+ qrImage.src = qrDataUrl;
515
+ } catch (error) {
516
+ console.error("Error procesando el QR con logo:", error);
517
+ resolve(qrDataUrl);
518
+ }
519
+ });
520
+ };
521
+
522
+ // src/components/core/QR.tsx
523
+ var styles8 = StyleSheet8.create({
524
+ qrContainer: {
525
+ display: "flex",
526
+ alignItems: "center",
527
+ justifyContent: "center",
528
+ margin: 10
529
+ }
530
+ });
531
+ var errorLevelMap = {
532
+ 0: "L",
533
+ 1: "M",
534
+ 2: "Q",
535
+ 3: "H"
536
+ };
537
+ var QR = ({
538
+ value,
539
+ size = 150,
455
540
  style,
456
- dotType = "square",
457
- cornerSquareType = "square",
458
- cornerDotType = "square",
459
- cornerSquareColor,
460
- cornerDotColor,
461
- logoBG = colorDataBG,
462
- logoText,
463
- moveText = 0,
464
- textColor = colorData,
465
- fontSize = 12,
466
- fontFamily = "Helvetica",
467
- textBackgroundColor = colorDataBG,
468
- textPadding = 1,
469
- textBold = true
541
+ colorDark = "#000000",
542
+ colorLight = "#ffffff",
543
+ margin = 0,
544
+ logo = "",
545
+ logoWidth = 30,
546
+ logoHeight = 30,
547
+ errorCorrectionLevel = "M"
470
548
  }) => {
471
- const [qrDataURL, setQrDataURL] = useState(null);
472
- const actualLogoWidth = logoWidth || Math.floor(size * 0.2);
473
- const actualLogoHeight = logoHeight || actualLogoWidth;
549
+ const [qrDataUrl, setQrDataUrl] = useState("");
474
550
  useEffect(() => {
475
- const generateQRCode = async () => {
551
+ const generateQR = async () => {
476
552
  try {
477
- const qrCode = new QRCodeStyling({
478
- width: size,
479
- height: size,
480
- type: "canvas",
481
- data: url,
482
- dotsOptions: {
483
- color: colorData,
484
- type: dotType
485
- },
486
- cornersSquareOptions: {
487
- color: cornerSquareColor || colorData,
488
- type: cornerSquareType
489
- },
490
- cornersDotOptions: {
491
- color: cornerDotColor || colorData,
492
- type: cornerDotType
493
- },
494
- backgroundOptions: {
495
- color: colorDataBG
496
- },
497
- qrOptions: {
498
- errorCorrectionLevel
499
- },
500
- margin
553
+ const baseQrDataUrl = await generateQRAsBase64({
554
+ value,
555
+ size,
556
+ colorDark,
557
+ colorLight,
558
+ margin,
559
+ errorCorrectionLevel: typeof errorCorrectionLevel === "number" ? errorLevelMap[errorCorrectionLevel] || "M" : errorCorrectionLevel
501
560
  });
502
- const container = document.createElement("div");
503
- container.style.position = "absolute";
504
- container.style.top = "-9999px";
505
- container.style.left = "-9999px";
506
- document.body.appendChild(container);
507
- qrCode.append(container);
508
- setTimeout(() => {
509
- try {
510
- const qrCanvas = container.querySelector("canvas");
511
- if (qrCanvas) {
512
- const canvas = document.createElement("canvas");
513
- canvas.width = size;
514
- canvas.height = size;
515
- const ctx = canvas.getContext("2d");
516
- if (ctx) {
517
- ctx.drawImage(qrCanvas, 0, 0);
518
- const dataURL = canvas.toDataURL("image/png");
519
- setQrDataURL(dataURL);
520
- }
521
- }
522
- document.body.removeChild(container);
523
- } catch (error) {
524
- console.error("Error capturing QR code:", error);
525
- }
526
- }, 100);
561
+ if (logo && logoWidth && logoHeight) {
562
+ const qrWithLogo = await addLogoToQR(baseQrDataUrl, logo, logoWidth, logoHeight);
563
+ setQrDataUrl(qrWithLogo);
564
+ } else {
565
+ setQrDataUrl(baseQrDataUrl);
566
+ }
527
567
  } catch (error) {
528
- console.error("Error generating QR code:", error);
568
+ console.error("Error generando QR:", error);
569
+ const fallbackUrl2 = `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(
570
+ value
571
+ )}&size=${size}x${size}&color=${encodeURIComponent(colorDark.replace("#", ""))}&bgcolor=${encodeURIComponent(
572
+ colorLight.replace("#", "")
573
+ )}`;
574
+ setQrDataUrl(fallbackUrl2);
529
575
  }
530
576
  };
531
- generateQRCode();
532
- }, [
533
- url,
534
- size,
535
- colorData,
536
- colorDataBG,
537
- margin,
538
- errorCorrectionLevel,
539
- dotType,
540
- cornerSquareType,
541
- cornerDotType,
542
- cornerSquareColor,
543
- cornerDotColor,
544
- logoBG
545
- ]);
546
- if (!qrDataURL) return null;
547
- const centerPosition = size / 2;
548
- const logoContainerSize = Math.max(actualLogoWidth, actualLogoHeight) + 10;
549
- return /* @__PURE__ */ React8.createElement(View5, { style: { width: size, height: size, position: "relative", ...style } }, /* @__PURE__ */ React8.createElement(Image2, { src: qrDataURL || "/placeholder.svg", style: { width: size, height: size } }), logo && /* @__PURE__ */ React8.createElement(
550
- View5,
551
- {
552
- style: {
553
- position: "absolute",
554
- width: logoContainerSize,
555
- height: logoContainerSize,
556
- backgroundColor: logoBG || colorDataBG,
557
- left: centerPosition - logoContainerSize / 2,
558
- top: centerPosition - logoContainerSize / 2,
559
- borderRadius: 100,
560
- border: `5px solid ${colorData}`,
561
- padding: 0
562
- }
563
- },
564
- /* @__PURE__ */ React8.createElement(
565
- Image2,
566
- {
567
- src: logo || "/placeholder.svg",
568
- style: {
569
- objectFit: "contain",
570
- width: actualLogoWidth,
571
- height: actualLogoHeight || actualLogoWidth
572
- }
573
- }
574
- )
575
- ), !logo && logoText && /* @__PURE__ */ React8.createElement(
576
- View5,
577
- {
578
- style: {
579
- position: "absolute",
580
- backgroundColor: textBackgroundColor,
581
- padding: textPadding,
582
- borderRadius: 4,
583
- left: moveText + centerPosition - 20,
584
- // Approximate center
585
- top: centerPosition - 10
586
- // Approximate center
587
- }
588
- },
589
- /* @__PURE__ */ React8.createElement(
590
- Text5,
591
- {
592
- style: {
593
- color: textColor,
594
- fontSize,
595
- fontFamily,
596
- fontWeight: textBold ? "bold" : "normal"
597
- }
598
- },
599
- logoText
600
- )
601
- ));
577
+ generateQR();
578
+ }, [value, size, colorDark, colorLight, margin, logo, logoWidth, logoHeight, errorCorrectionLevel]);
579
+ const fallbackUrl = `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(
580
+ value
581
+ )}&size=${size}x${size}`;
582
+ return /* @__PURE__ */ React8.createElement(View5, { style: [styles8.qrContainer, style] }, /* @__PURE__ */ React8.createElement(Image3, { src: qrDataUrl || fallbackUrl, style: { width: size, height: size } }));
602
583
  };
603
584
  var QR_default = QR;
604
585
 
605
586
  // src/components/core/Lista.tsx
606
587
  import React9 from "react";
607
- import { View as View6, Text as Text6, StyleSheet as StyleSheet8 } from "@react-pdf/renderer";
608
- var styles8 = StyleSheet8.create({
588
+ import { View as View6, Text as Text5, StyleSheet as StyleSheet9 } from "@react-pdf/renderer";
589
+ var styles9 = StyleSheet9.create({
609
590
  ul: {
610
591
  marginBottom: 10,
611
592
  paddingLeft: 15
@@ -675,7 +656,7 @@ var UL = ({ children, style, type = "disc" }) => {
675
656
  }
676
657
  return child;
677
658
  });
678
- return /* @__PURE__ */ React9.createElement(View6, { style: [styles8.ul, style] }, childrenWithBullets);
659
+ return /* @__PURE__ */ React9.createElement(View6, { style: [styles9.ul, style] }, childrenWithBullets);
679
660
  };
680
661
  var OL = ({ children, style, type = "decimal", start = 1 }) => {
681
662
  const childrenWithNumbers = React9.Children.map(children, (child, index) => {
@@ -689,7 +670,7 @@ var OL = ({ children, style, type = "decimal", start = 1 }) => {
689
670
  }
690
671
  return child;
691
672
  });
692
- return /* @__PURE__ */ React9.createElement(View6, { style: [styles8.ol, style] }, childrenWithNumbers);
673
+ return /* @__PURE__ */ React9.createElement(View6, { style: [styles9.ol, style] }, childrenWithNumbers);
693
674
  };
694
675
  var LI = ({ children, style, bulletType = "disc", isOrdered = false, index = 1, start = 1, value }) => {
695
676
  let marker;
@@ -699,11 +680,11 @@ var LI = ({ children, style, bulletType = "disc", isOrdered = false, index = 1,
699
680
  } else {
700
681
  marker = getBulletPoint(bulletType);
701
682
  }
702
- return /* @__PURE__ */ React9.createElement(View6, { style: [styles8.li, style] }, /* @__PURE__ */ React9.createElement(Text6, { style: styles8.bulletPoint }, marker), /* @__PURE__ */ React9.createElement(View6, { style: styles8.itemContent }, typeof children === "string" ? /* @__PURE__ */ React9.createElement(Text6, null, children) : children));
683
+ return /* @__PURE__ */ React9.createElement(View6, { style: [styles9.li, style] }, /* @__PURE__ */ React9.createElement(Text5, { style: styles9.bulletPoint }, marker), /* @__PURE__ */ React9.createElement(View6, { style: styles9.itemContent }, typeof children === "string" ? /* @__PURE__ */ React9.createElement(Text5, null, children) : children));
703
684
  };
704
685
 
705
686
  // src/components/core/index.tsx
706
- import { View as View7, Text as Text7, StyleSheet as StyleSheet9, Font } from "@react-pdf/renderer";
687
+ import { View as View7, Text as Text6, StyleSheet as StyleSheet10, Font } from "@react-pdf/renderer";
707
688
 
708
689
  // src/functions/decodeBase64Pdf.ts
709
690
  var decodeBase64Pdf = (base64, fileName) => {
@@ -795,11 +776,11 @@ export {
795
776
  Small,
796
777
  Span,
797
778
  Strong,
798
- StyleSheet9 as StyleSheet,
779
+ StyleSheet10 as StyleSheet,
799
780
  Table,
800
781
  Tbody,
801
782
  Td,
802
- Text7 as Text,
783
+ Text6 as Text,
803
784
  Th,
804
785
  Thead,
805
786
  Tr,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-pdf-levelup",
3
- "version": "2.0.28",
3
+ "version": "2.0.32",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "peerDependencies": {
22
22
  "@react-pdf/renderer": "^4.3.0",
23
- "qr-code-styling": "^1.9.2",
23
+ "qrcode": "^1.5.4",
24
24
  "react": "^18",
25
25
  "react-dom": "^18"
26
26
  },
@@ -37,6 +37,7 @@
37
37
  "devDependencies": {
38
38
  "@eslint/js": "^9.21.0",
39
39
  "@react-pdf/types": "^2.9.0",
40
+ "@types/qrcode": "^1.5.5",
40
41
  "@types/react": "^18.2.56",
41
42
  "@types/react-dom": "^18.2.19",
42
43
  "@vitejs/plugin-react": "^4.3.4",