{"version":3,"file":"terminal.mjs","names":[],"sources":["../../src/renderers/terminal.ts"],"sourcesContent":["/**\n * 终端渲染器\n *\n * 将 boolean[][] 矩阵转为 Unicode 块字符串，可在终端直接显示。\n * 使用 ▀ ▄ █ 和空格实现 2 行合 1 行的紧凑显示。\n */\n\nexport interface TerminalOptions {\n  /** 静默区模块数，默认 2（终端空间有限，默认较小） */\n  quietZone?: number\n  /** 是否反转颜色（适配浅色终端背景），默认 false */\n  invert?: boolean\n}\n\n/** 将 QR 码矩阵转为终端可显示的字符串 */\nexport function toTerminal(modules: boolean[][], options?: TerminalOptions): string {\n  const { quietZone = 2, invert = false } = options ?? {}\n  const count = modules.length\n\n  // 添加静默区的辅助函数\n  const get = (row: number, col: number): boolean => {\n    const r = row - quietZone\n    const c = col - quietZone\n    if (r < 0 || r >= count || c < 0 || c >= count) return false\n    return invert ? !modules[r][c] : modules[r][c]\n  }\n\n  const totalRows = count + quietZone * 2\n  const totalCols = count + quietZone * 2\n  const lines: string[] = []\n\n  // 每两行合并为一行，使用 Unicode 半块字符\n  for (let row = 0; row < totalRows; row += 2) {\n    let line = ''\n    for (let col = 0; col < totalCols; col++) {\n      const top = get(row, col)\n      const bottom = row + 1 < totalRows ? get(row + 1, col) : false\n\n      if (top && bottom) {\n        line += '█'\n      } else if (top && !bottom) {\n        line += '▀'\n      } else if (!top && bottom) {\n        line += '▄'\n      } else {\n        line += ' '\n      }\n    }\n    lines.push(line)\n  }\n\n  return lines.join('\\n')\n}\n"],"mappings":";;AAeA,SAAgB,WAAW,SAAsB,SAAmC;CAClF,MAAM,EAAE,YAAY,GAAG,SAAS,UAAU,WAAW,EAAE;CACvD,MAAM,QAAQ,QAAQ;CAGtB,MAAM,OAAO,KAAa,QAAyB;EACjD,MAAM,IAAI,MAAM;EAChB,MAAM,IAAI,MAAM;AAChB,MAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAO,QAAO;AACvD,SAAO,SAAS,CAAC,QAAQ,GAAG,KAAK,QAAQ,GAAG;;CAG9C,MAAM,YAAY,QAAQ,YAAY;CACtC,MAAM,YAAY,QAAQ,YAAY;CACtC,MAAM,QAAkB,EAAE;AAG1B,MAAK,IAAI,MAAM,GAAG,MAAM,WAAW,OAAO,GAAG;EAC3C,IAAI,OAAO;AACX,OAAK,IAAI,MAAM,GAAG,MAAM,WAAW,OAAO;GACxC,MAAM,MAAM,IAAI,KAAK,IAAI;GACzB,MAAM,SAAS,MAAM,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,GAAG;AAEzD,OAAI,OAAO,OACT,SAAQ;YACC,OAAO,CAAC,OACjB,SAAQ;YACC,CAAC,OAAO,OACjB,SAAQ;OAER,SAAQ;;AAGZ,QAAM,KAAK,KAAK;;AAGlB,QAAO,MAAM,KAAK,KAAK"}