{"version":3,"file":"SVG.cjs","sources":["../../../../../../packages/components/qrcode/src/SVG.tsx"],"sourcesContent":["import { defineComponent, watchEffect } from 'vue';\nimport {\n  DEFAULT_BGCOLOR,\n  DEFAULT_FGCOLOR,\n  DEFAULT_INCLUDEMARGIN,\n  DEFAULT_LEVEL,\n  DEFAULT_SIZE,\n  ERROR_LEVEL_MAP,\n} from './constant';\nimport { qrcodeSvgProps } from './props';\nimport qrcodegen from './qrcodegen';\nimport { excavateModules, generatePath, getImageSettings, getMarginSize } from './util';\n\nexport default defineComponent({\n  name: 'QRCodeSVG',\n  inheritAttrs: false,\n  props: qrcodeSvgProps(),\n  setup(props) {\n    let cells = null;\n    let margin = null;\n    let numCells = null;\n    let calculatedImageSettings = null;\n\n    let fgPath = null;\n    let image = null;\n\n    watchEffect(() => {\n      const {\n        value,\n        size = DEFAULT_SIZE,\n        level = DEFAULT_LEVEL,\n        includeMargin = DEFAULT_INCLUDEMARGIN,\n        marginSize,\n        imageSettings,\n      } = props;\n\n      cells = qrcodegen.QrCode.encodeText(value, ERROR_LEVEL_MAP[level]).getModules();\n\n      margin = getMarginSize(includeMargin, marginSize);\n      numCells = cells.length + margin * 2;\n      calculatedImageSettings = getImageSettings(cells, size, margin, imageSettings);\n\n      if (imageSettings != null && calculatedImageSettings != null) {\n        if (calculatedImageSettings.excavation != null)\n          cells = excavateModules(cells, calculatedImageSettings.excavation);\n\n        image = (\n          <image\n            xlinkHref={imageSettings.src}\n            height={calculatedImageSettings.h}\n            width={calculatedImageSettings.w}\n            x={calculatedImageSettings.x + margin}\n            y={calculatedImageSettings.y + margin}\n            preserveAspectRatio=\"none\"\n          />\n        );\n      }\n\n      // Drawing strategy: instead of a rect per module, we're going to create a\n      // single path for the dark modules and layer that on top of a light rect,\n      // for a total of 2 DOM nodes. We pay a bit more in string concat but that's\n      // way faster than DOM ops.\n      // For level 1, 441 nodes -> 2\n      // For level 40, 31329 -> 2\n      fgPath = generatePath(cells, margin);\n    });\n\n    return () => {\n      const bgColor = props.bgColor && DEFAULT_BGCOLOR;\n      const fgColor = props.fgColor && DEFAULT_FGCOLOR;\n      return (\n        <svg height={props.size} width={props.size} viewBox={`0 0 ${numCells} ${numCells}`}>\n          {!!props.title && <title>{props.title}</title>}\n          <path\n            fill={bgColor}\n            d={`M0,0 h${numCells}v${numCells}H0z`}\n            shape-rendering=\"crispEdges\"\n          />\n          <path fill={fgColor} d={fgPath} shape-rendering=\"crispEdges\" />\n          {image}\n        </svg>\n      );\n    };\n  },\n});\n"],"names":["defineComponent","name","inheritAttrs","props","qrcodeSvgProps","setup","cells","margin","numCells","calculatedImageSettings","fgPath","image","watchEffect","value","size","DEFAULT_SIZE","level","DEFAULT_LEVEL","includeMargin","DEFAULT_INCLUDEMARGIN","marginSize","imageSettings","qrcodegen","QrCode","encodeText","ERROR_LEVEL_MAP","getModules","getMarginSize","length","getImageSettings","excavation","excavateModules","_createVNode","src","h","w","x","y","generatePath","bgColor","DEFAULT_BGCOLOR","fgColor","DEFAULT_FGCOLOR","title"],"mappings":"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"}