tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 9.55 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../src/_common/js/qrcode/utils.ts"],"sourcesContent":["import type {\n CrossOrigin,\n ERROR_LEVEL_MAPPED_TYPE,\n ErrorCorrectionLevel,\n Excavation,\n ImageSettings,\n Modules,\n} from './types';\nimport { Ecc } from './qrcodegen';\n\n// =================== ERROR_LEVEL ==========================\nexport const ERROR_LEVEL_MAP: ERROR_LEVEL_MAPPED_TYPE = {\n L: Ecc.LOW,\n M: Ecc.MEDIUM,\n Q: Ecc.QUARTILE,\n H: Ecc.HIGH,\n} as const;\n\n// =================== DEFAULT_VALUE ==========================\nexport const DEFAULT_SIZE = 160;\nexport const DEFAULT_LEVEL: ErrorCorrectionLevel = 'M';\nexport const DEFAULT_BACKGROUND_COLOR = '#FFFFFF';\nexport const DEFAULT_FRONT_COLOR = '#000000';\nexport const DEFAULT_NEED_MARGIN = false;\nexport const DEFAULT_MINVERSION = 1;\nexport const SPEC_MARGIN_SIZE = 4;\nexport const DEFAULT_MARGIN_SIZE = 0;\nexport const DEFAULT_IMG_SCALE = 0.1;\n\n// =================== UTILS ==========================\n/**\n * Generate a path string from modules\n * @param modules\n * @param margin\n * @returns\n */\nexport const generatePath = (modules: Modules, margin: number = 0) => {\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 ops.push(`M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`);\n start = null;\n return;\n }\n\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\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 });\n return ops.join('');\n};\n\n/**\n * Excavate modules\n * @param modules\n * @param excavation\n * @returns\n */\nexport const excavateModules = (modules: Modules, excavation: Excavation) =>\n 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/**\n * Get image settings\n * @param cells The modules of the QR code\n * @param size The size of the QR code\n * @param margin\n * @param imageSettings\n * @returns\n */\nexport const 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 opacity: number;\n crossOrigin: CrossOrigin;\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 const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\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 const { crossOrigin } = imageSettings;\n\n return { x, y, h, w, excavation, opacity, crossOrigin };\n};\n\n/**\n * Get margin size\n * @param needMargin Whether need margin\n * @param marginSize Custom margin size\n * @returns\n */\nexport const getMarginSize = (needMargin: boolean, marginSize?: number) => {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return needMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n};\n\n/**\n * Check if Path2D is supported\n */\nexport const isSupportPath2d = (() => {\n try {\n new Path2D().addPath(new Path2D());\n } catch {\n return false;\n }\n return true;\n})();\n"],"names":["ERROR_LEVEL_MAP","L","Ecc","LOW","M","MEDIUM","Q","QUARTILE","H","HIGH","DEFAULT_SIZE","DEFAULT_LEVEL","DEFAULT_BACKGROUND_COLOR","DEFAULT_FRONT_COLOR","DEFAULT_NEED_MARGIN","DEFAULT_MINVERSION","SPEC_MARGIN_SIZE","DEFAULT_MARGIN_SIZE","DEFAULT_IMG_SCALE","generatePath","modules","margin","arguments","length","undefined","ops","forEach","row","y","start","cell","x","push","concat","join","excavateModules","excavation","slice","map","h","w","getImageSettings","cells","size","imageSettings","numCells","defaultSize","Math","floor","scale","width","height","opacity","excavate","floorX","floorY","ceilW","ceil","ceilH","crossOrigin","getMarginSize","needMargin","marginSize","max","isSupportPath2d","Path2D","addPath","_unused"],"mappings":"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"}