{"version":3,"file":"util.cjs","sources":["../../../../../../packages/components/qrcode/src/util.ts"],"sourcesContent":["import type { Excavation, ImageSettings, Modules } from './interface';\nimport { DEFAULT_IMG_SCALE, DEFAULT_MARGIN_SIZE, SPEC_MARGIN_SIZE } from './constant';\n\nexport function generatePath(modules: Modules, margin = 0): string {\n  const ops: string[] = [];\n  modules.forEach((row, y) => {\n    let start: number | null = null;\n    row.forEach((cell, x) => {\n      if (!cell && start !== null) {\n        // M0 0h7v1H0z injects the space with the move and drops the comma,\n        // saving a char per operation\n        ops.push(`M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`);\n        start = null;\n        return;\n      }\n\n      // end of row, clean up or skip\n      if (x === row.length - 1) {\n        if (!cell) {\n          // We would have closed the op above already so this can only mean\n          // 2+ light modules in a row.\n          return;\n        }\n        if (start === null) {\n          // Just a single dark module.\n          ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n        } else {\n          // Otherwise finish the current line.\n          ops.push(`M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`);\n        }\n        return;\n      }\n\n      if (cell && start === null)\n        start = x;\n    });\n  });\n  return ops.join('');\n}\n\n// We could just do this in generatePath, except that we want to support\n// non-Path2D canvas, so we need to keep it an explicit step.\nexport function excavateModules(modules: Modules, excavation: Excavation): Modules {\n  return modules.slice().map((row, y) => {\n    if (y < excavation.y || y >= excavation.y + excavation.h)\n      return row;\n\n    return row.map((cell, x) => {\n      if (x < excavation.x || x >= excavation.x + excavation.w)\n        return cell;\n\n      return false;\n    });\n  });\n}\n\nexport function getImageSettings(\n  cells: Modules,\n  size: number,\n  margin: number,\n  imageSettings?: ImageSettings,\n): null | {\n  x: number\n  y: number\n  h: number\n  w: number\n  excavation: Excavation | null\n} {\n  if (imageSettings == null)\n    return null;\n\n  const numCells = cells.length + margin * 2;\n  const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n  const scale = numCells / size;\n  const w = (imageSettings.width || defaultSize) * scale;\n  const h = (imageSettings.height || defaultSize) * scale;\n  const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n  const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n\n  let excavation = null;\n  if (imageSettings.excavate) {\n    const floorX = Math.floor(x);\n    const floorY = Math.floor(y);\n    const ceilW = Math.ceil(w + x - floorX);\n    const ceilH = Math.ceil(h + y - floorY);\n    excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n  }\n\n  return { x, y, h, w, excavation };\n}\n\nexport function getMarginSize(includeMargin: boolean, marginSize?: number): number {\n  if (marginSize != null)\n    return Math.floor(marginSize);\n\n  return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\n\n// For canvas we're going to switch our drawing mode based on whether or not\n// the environment supports Path2D. We only need the constructor to be\n// supported, but Edge doesn't actually support the path (string) type\n// argument. Luckily it also doesn't support the addPath() method. We can\n// treat that as the same thing.\nexport const SUPPORTS_PATH2D = (function () {\n  try {\n    new Path2D().addPath(new Path2D());\n  } catch (e) {\n    return false;\n  }\n  return true;\n})();\n"],"names":["DEFAULT_IMG_SCALE","SPEC_MARGIN_SIZE","DEFAULT_MARGIN_SIZE"],"mappings":"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"}