{"version":3,"file":"svg.mjs","names":[],"sources":["../../src/renderers/svg.ts"],"sourcesContent":["/**\n * SVG 渲染器\n *\n * 将 boolean[][] 矩阵转为 SVG 字符串。\n * 零运行时依赖，可在任意 JS 环境使用（浏览器、Node.js、小程序等）。\n */\n\nexport interface SVGOptions {\n  /** 每个模块的像素大小，默认 10 */\n  moduleSize?: number\n  /** 静默区模块数，默认 4 */\n  quietZone?: number\n  /** 前景色，默认 '#000000' */\n  foreground?: string\n  /** 背景色，默认 '#ffffff' */\n  background?: string\n  /** 是否透明背景（忽略 background），默认 false */\n  transparent?: boolean\n}\n\n/** 将 QR 码矩阵转为 SVG 字符串 */\nexport function toSVG(modules: boolean[][], options?: SVGOptions): string {\n  const {\n    moduleSize = 10,\n    quietZone = 4,\n    foreground = '#000000',\n    background = '#ffffff',\n    transparent = false\n  } = options ?? {}\n\n  const count = modules.length\n  const totalSize = (count + quietZone * 2) * moduleSize\n\n  const parts: string[] = []\n  parts.push(\n    `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${totalSize} ${totalSize}\" width=\"${totalSize}\" height=\"${totalSize}\" shape-rendering=\"crispEdges\">`\n  )\n\n  if (!transparent) {\n    parts.push(`<rect width=\"${totalSize}\" height=\"${totalSize}\" fill=\"${background}\"/>`)\n  }\n\n  // 使用单条 path 优化 SVG 大小\n  let pathData = ''\n  for (let row = 0; row < count; row++) {\n    for (let col = 0; col < count; col++) {\n      if (modules[row][col]) {\n        const x = (col + quietZone) * moduleSize\n        const y = (row + quietZone) * moduleSize\n        pathData += `M${x},${y}h${moduleSize}v${moduleSize}h-${moduleSize}z`\n      }\n    }\n  }\n\n  if (pathData) {\n    parts.push(`<path d=\"${pathData}\" fill=\"${foreground}\"/>`)\n  }\n\n  parts.push('</svg>')\n  return parts.join('')\n}\n"],"mappings":";;AAqBA,SAAgB,MAAM,SAAsB,SAA8B;CACxE,MAAM,EACJ,aAAa,IACb,YAAY,GACZ,aAAa,WACb,aAAa,WACb,cAAc,UACZ,WAAW,EAAE;CAEjB,MAAM,QAAQ,QAAQ;CACtB,MAAM,aAAa,QAAQ,YAAY,KAAK;CAE5C,MAAM,QAAkB,EAAE;AAC1B,OAAM,KACJ,wDAAwD,UAAU,GAAG,UAAU,WAAW,UAAU,YAAY,UAAU,iCAC3H;AAED,KAAI,CAAC,YACH,OAAM,KAAK,gBAAgB,UAAU,YAAY,UAAU,UAAU,WAAW,KAAK;CAIvF,IAAI,WAAW;AACf,MAAK,IAAI,MAAM,GAAG,MAAM,OAAO,MAC7B,MAAK,IAAI,MAAM,GAAG,MAAM,OAAO,MAC7B,KAAI,QAAQ,KAAK,MAAM;EACrB,MAAM,KAAK,MAAM,aAAa;EAC9B,MAAM,KAAK,MAAM,aAAa;AAC9B,cAAY,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,GAAG,WAAW,IAAI,WAAW;;AAKxE,KAAI,SACF,OAAM,KAAK,YAAY,SAAS,UAAU,WAAW,KAAK;AAG5D,OAAM,KAAK,SAAS;AACpB,QAAO,MAAM,KAAK,GAAG"}