{"version":3,"file":"qrcode-canvas.mjs","sources":["../../../../components/qrcode/components/qrcode-canvas.tsx"],"sourcesContent":["import { computed, defineComponent, ref, watchEffect, onMounted } from 'vue';\nimport { QRCodeSubComponentProps } from './props';\nimport {\n  DEFAULT_NEED_MARGIN,\n  DEFAULT_MINVERSION,\n  isSupportPath2d,\n  excavateModules,\n  generatePath,\n} from '@tdesign/common-js/qrcode/utils';\nimport { useQRCode } from '../hooks/useQRCode';\n\nexport default defineComponent({\n  name: 'QRCodeCanvas',\n  props: QRCodeSubComponentProps,\n  setup(props) {\n    const imgSrc = computed(() => props.imageSettings?.src);\n\n    const imageRef = ref<HTMLImageElement>();\n\n    const canvasRef = ref<HTMLCanvasElement>(null);\n\n    const imgCrossOrigin = ref('');\n\n    const renderQRCode = () => {\n      const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n        value: props.value,\n        level: props.level,\n        minVersion: DEFAULT_MINVERSION,\n        includeMargin: DEFAULT_NEED_MARGIN,\n        marginSize: props.marginSize,\n        imageSettings: props.imageSettings,\n        size: props.size,\n      });\n\n      if (!canvasRef.value) {\n        return;\n      }\n\n      const canvas = canvasRef.value;\n      const ctx = canvas.getContext('2d');\n\n      if (!ctx) {\n        return;\n      }\n\n      imgCrossOrigin.value = calculatedImageSettings.value?.crossOrigin;\n\n      let cellsToDraw = cells;\n      const image = imageRef.value;\n\n      if (image) {\n        image.crossOrigin = calculatedImageSettings.value.crossOrigin;\n      }\n\n      const haveImageToRender =\n        calculatedImageSettings.value &&\n        image !== null &&\n        image?.complete &&\n        image.naturalHeight !== 0 &&\n        image.naturalWidth !== 0;\n\n      if (haveImageToRender && calculatedImageSettings.value.excavation != null) {\n        cellsToDraw = computed(() => excavateModules(cells.value, calculatedImageSettings.value.excavation));\n      }\n\n      const pixelRatio = window.devicePixelRatio || 1;\n      canvas.height = props.size * pixelRatio;\n      canvas.width = props.size * pixelRatio;\n      const scale = (props.size / numCells.value) * pixelRatio;\n      ctx.scale(scale, scale);\n\n      ctx.fillStyle = props.bgColor;\n      ctx.fillRect(0, 0, numCells.value, numCells.value);\n\n      ctx.fillStyle = props.fgColor;\n      if (isSupportPath2d) {\n        ctx.fill(new Path2D(generatePath(cellsToDraw.value, margin.value)));\n      } else {\n        cells.value.forEach((row, rdx) => {\n          row.forEach((cell, cdx) => {\n            if (cell) {\n              ctx.fillRect(cdx + margin.value, rdx + margin.value, 1, 1);\n            }\n          });\n        });\n      }\n\n      if (calculatedImageSettings) {\n        ctx.globalAlpha = calculatedImageSettings.value.opacity;\n      }\n\n      if (haveImageToRender) {\n        ctx.globalAlpha = calculatedImageSettings.value.opacity;\n        ctx.drawImage(\n          image,\n          calculatedImageSettings.value.x + margin.value,\n          calculatedImageSettings.value.y + margin.value,\n          calculatedImageSettings.value.w,\n          calculatedImageSettings.value.h,\n        );\n      }\n    };\n\n    watchEffect(() => {\n      renderQRCode();\n    });\n\n    onMounted(() => {\n      renderQRCode();\n    });\n\n    return () => {\n      return (\n        <>\n          <canvas ref={canvasRef} role=\"img\" />\n          {imgSrc.value != null ? (\n            <img ref={imageRef} onLoad={renderQRCode} style={{ display: 'none' }} src={imgSrc.value} />\n          ) : null}\n        </>\n      );\n    };\n  },\n});\n"],"names":["defineComponent","name","props","QRCodeSubComponentProps","setup","imgSrc","computed","_props$imageSettings","imageSettings","src","imageRef","ref","canvasRef","imgCrossOrigin","renderQRCode","_calculatedImageSetti","_useQRCode","useQRCode","value","level","minVersion","DEFAULT_MINVERSION","includeMargin","DEFAULT_NEED_MARGIN","marginSize","size","margin","cells","numCells","calculatedImageSettings","canvas","ctx","getContext","crossOrigin","cellsToDraw","image","haveImageToRender","complete","naturalHeight","naturalWidth","excavation","excavateModules","pixelRatio","window","devicePixelRatio","height","width","scale","fillStyle","bgColor","fillRect","fgColor","isSupportPath2d","fill","Path2D","generatePath","forEach","row","rdx","cell","cdx","globalAlpha","opacity","drawImage","x","y","w","h","watchEffect","onMounted","_createVNode","_Fragment","display"],"mappings":"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"}