{"version":3,"file":"shival99-z-ui-components-z-qrcode.mjs","sources":["../../../../libs/core-ui/components/z-qrcode/z-qrcode.component.ts","../../../../libs/core-ui/components/z-qrcode/z-qrcode.component.html","../../../../libs/core-ui/components/z-qrcode/shival99-z-ui-components-z-qrcode.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  input,\n  PLATFORM_ID,\n  signal,\n  viewChild,\n  effect,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport * as QRCode from 'qrcode';\nimport {\n  ZQrCodeDotStyle,\n  ZQrCodeErrorCorrectionLevel,\n  ZQrCodeEyeStyle,\n  ZQrCodeFrame,\n  ZQrCodeGradient,\n} from './z-qrcode.types';\n\n@Component({\n  selector: 'z-qrcode',\n  imports: [TranslatePipe, ZButtonComponent],\n  standalone: true,\n  templateUrl: './z-qrcode.component.html',\n  styleUrl: './z-qrcode.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ZQrCodeComponent {\n  // Inputs\n  public readonly zValue = input.required<string>();\n  public readonly zSize = input<number>(256);\n  public readonly zLevel = input<ZQrCodeErrorCorrectionLevel>('H');\n  public readonly zLogo = input<string>('');\n  public readonly zLogoSize = input<number>(0.2); // 20% of QR size\n  public readonly zLogoBgColor = input<string>('#ffffff');\n  public readonly zLogoBgShape = input<'circle' | 'square' | 'none'>('circle');\n  public readonly zLogoPadding = input<number>(4);\n  public readonly zFgColor = input<string>('#000000');\n  public readonly zBgColor = input<string>('#ffffff');\n  public readonly zDotStyle = input<ZQrCodeDotStyle>('square');\n  public readonly zEyeStyle = input<ZQrCodeEyeStyle>('square');\n  public readonly zEyeColor = input<string>(''); // if empty, falls back to zFgColor\n  public readonly zMargin = input<number>(4); // margin in modules\n  public readonly zFgGradient = input<ZQrCodeGradient>();\n  public readonly zFrame = input<ZQrCodeFrame>('none');\n  public readonly zFrameText = input<string>('SCAN ME');\n  public readonly zFrameColor = input<string>('#0f172a');\n  public readonly zFramePadding = input<number>(12); // padding around QR inside frame\n  public readonly zFrameBorderRadius = input<number>(12); // border radius of the frame\n  public readonly zDownloadable = input(false, { transform: zTransform }); // toggles hover overlay button\n  public readonly zDownloadButton = input(false, { transform: zTransform }); // toggles standalone button below\n  public readonly zShadow = input(true, { transform: zTransform }); // Bật/tắt đổ bóng khung ngoài\n  public readonly zLoading = input(false, { transform: zTransform });\n\n  // DOM references\n  private readonly _canvasRef = viewChild<ElementRef<HTMLCanvasElement>>('qrCanvas');\n  private readonly _platformId = inject(PLATFORM_ID);\n\n  // States\n  protected readonly downloadText = signal('i18n_z_ui_qrcode_download');\n\n  constructor() {\n    // Re-render when any signal inputs change\n    effect(() => {\n      if (isPlatformBrowser(this._platformId)) {\n        void this.renderQrCode();\n      }\n    });\n  }\n\n  /**\n   * Renders the stylized QR code onto the canvas element\n   */\n  public async renderQrCode(): Promise<void> {\n    const canvas = this._canvasRef()?.nativeElement;\n    if (!canvas) {\n      return;\n    }\n\n    const value = this.zValue();\n    const size = this.zSize();\n    const level = this.zLevel();\n    const fgColor = this.zFgColor();\n    const bgColor = this.zBgColor();\n    const dotStyle = this.zDotStyle();\n    const eyeStyle = this.zEyeStyle();\n    const eyeColorInput = this.zEyeColor();\n    const logoUrl = this.zLogo();\n    const frame = this.zFrame();\n    const dpr = isPlatformBrowser(this._platformId) ? window.devicePixelRatio || 1 : 1;\n    const framePadding = frame !== 'none' ? this.zFramePadding() : 0;\n    const frameBorderRadius = this.zFrameBorderRadius();\n\n    const bannerHeight = frame === 'text-bottom' || frame === 'text-top' ? 50 : 0;\n    const cssWidth = size + framePadding * 2;\n    const cssHeight = size + framePadding * 2 + bannerHeight;\n    canvas.width = cssWidth * dpr;\n    canvas.height = cssHeight * dpr;\n\n    const ctx = canvas.getContext('2d');\n    if (!ctx) {\n      return;\n    }\n\n    ctx.scale(dpr, dpr);\n\n    // Clear background\n    ctx.fillStyle = bgColor;\n    ctx.fillRect(0, 0, cssWidth, cssHeight);\n\n    if (frame !== 'none') {\n      // Draw rounded frame container\n      ctx.fillStyle = bgColor;\n      ctx.beginPath();\n      this._drawRoundedRectPath(ctx, 0, 0, cssWidth, cssHeight, frameBorderRadius);\n      ctx.fill();\n\n      // Draw border outline\n      ctx.strokeStyle = this.zFrameColor();\n      ctx.lineWidth = 1.5;\n      ctx.beginPath();\n      this._drawRoundedRectPath(ctx, 0.75, 0.75, cssWidth - 1.5, cssHeight - 1.5, frameBorderRadius);\n      ctx.stroke();\n    }\n\n    try {\n      // Create raw QR code matrix\n      const qr = QRCode.create(value, { errorCorrectionLevel: level });\n      const moduleCount = qr.modules.size;\n      const marginModules = this.zMargin();\n      const drawSize = size;\n\n      // Calculate module size\n      const moduleSize = drawSize / (moduleCount + 2 * marginModules);\n      const marginOffset = marginModules * moduleSize;\n\n      // Draw offsets\n      let xOffset = 0;\n      let yOffset = 0;\n      if (frame !== 'none') {\n        xOffset = framePadding;\n        yOffset = frame === 'text-top' ? framePadding + bannerHeight : framePadding;\n      }\n\n      // 1. Prepare foreground style (solid or gradient)\n      let fillStyle: string | CanvasGradient = fgColor;\n      const gradientOpt = this.zFgGradient();\n      if (gradientOpt && gradientOpt.colors && gradientOpt.colors.length > 0) {\n        fillStyle = this._getGradientStyle(ctx, gradientOpt, drawSize, xOffset, yOffset, marginOffset);\n      }\n\n      const eyeColor = eyeColorInput || fillStyle;\n\n      // 2. Draw normal modules (skip eyes and central logo)\n      ctx.fillStyle = fillStyle;\n\n      // Calculate logo skip boundary\n      const hasLogo = !!logoUrl;\n      const logoModules = Math.ceil(moduleCount * this.zLogoSize());\n      const logoStart = Math.floor((moduleCount - logoModules) / 2);\n      const logoEnd = logoStart + logoModules;\n\n      for (let r = 0; r < moduleCount; r++) {\n        for (let c = 0; c < moduleCount; c++) {\n          // Check if it's top-left, top-right, or bottom-left eye\n          const isTopLeftEye = r < 7 && c < 7;\n          const isTopRightEye = r < 7 && c >= moduleCount - 7;\n          const isBottomLeftEye = r >= moduleCount - 7 && c < 7;\n\n          if (isTopLeftEye || isTopRightEye || isBottomLeftEye) {\n            continue;\n          }\n\n          // Check if overlapping logo area\n          if (hasLogo && r >= logoStart && r < logoEnd && c >= logoStart && c < logoEnd) {\n            continue;\n          }\n\n          const isDark = qr.modules.get(r, c) === 1; // standard raw check\n          if (!isDark) {\n            continue;\n          }\n\n          const x = xOffset + marginOffset + c * moduleSize;\n          const y = yOffset + marginOffset + r * moduleSize;\n\n          this._drawDot(ctx, x, y, moduleSize, dotStyle);\n        }\n      }\n\n      // 3. Draw Eyes\n      const eyeCoords = [\n        { x: xOffset + marginOffset, y: yOffset + marginOffset }, // Top Left\n        { x: xOffset + marginOffset + (moduleCount - 7) * moduleSize, y: yOffset + marginOffset }, // Top Right\n        { x: xOffset + marginOffset, y: yOffset + marginOffset + (moduleCount - 7) * moduleSize }, // Bottom Left\n      ];\n\n      eyeCoords.forEach(coord => {\n        this._drawEye(ctx, coord.x, coord.y, moduleSize, eyeStyle, eyeColor);\n      });\n\n      // 4. Draw central logo if specified\n      if (hasLogo) {\n        await this._drawLogo(ctx, xOffset + marginOffset, yOffset, drawSize, logoUrl);\n      }\n\n      // 5. Draw Frame details\n      if (frame === 'text-bottom' || frame === 'text-top') {\n        const bannerY = frame === 'text-bottom' ? framePadding + size : framePadding;\n        this._drawFrame(ctx, cssWidth, bannerY, bannerHeight, this.zFrameText(), this.zFrameColor());\n      }\n    } catch (err) {\n      console.error('Error generating QR code:', err);\n    }\n  }\n\n  /**\n   * Helper function to get gradient style fill (no else branches)\n   */\n  private _getGradientStyle(\n    ctx: CanvasRenderingContext2D,\n    gradientOpt: ZQrCodeGradient,\n    drawSize: number,\n    xOffset: number,\n    yOffset: number,\n    marginOffset: number\n  ): CanvasGradient {\n    if (gradientOpt.type === 'radial') {\n      const cx = drawSize / 2 + xOffset;\n      const cy = drawSize / 2 + yOffset;\n      const r = (drawSize / 2) * 1.2;\n      const grad = ctx.createRadialGradient(cx, cy, 0, cx, cy, r);\n      gradientOpt.colors.forEach((c, idx) => {\n        grad.addColorStop(idx / (gradientOpt.colors.length - 1), c);\n      });\n      return grad;\n    }\n\n    // Default to linear\n    const angle = gradientOpt.angle ?? 45;\n    const rad = (angle * Math.PI) / 180;\n    const x1 = Math.cos(rad) * 0;\n    const y1 = Math.sin(rad) * 0;\n    const x2 = Math.cos(rad) * drawSize + x1;\n    const y2 = Math.sin(rad) * drawSize + y1;\n    const grad = ctx.createLinearGradient(\n      x1 + xOffset + marginOffset,\n      y1 + yOffset + marginOffset,\n      x2 + xOffset + marginOffset,\n      y2 + yOffset + marginOffset\n    );\n    gradientOpt.colors.forEach((c, idx) => {\n      grad.addColorStop(idx / (gradientOpt.colors.length - 1), c);\n    });\n    return grad;\n  }\n\n  /**\n   * Helper function to draw dynamic dot module style (no else branches)\n   */\n  private _drawDot(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    y: number,\n    moduleSize: number,\n    dotStyle: ZQrCodeDotStyle\n  ): void {\n    ctx.beginPath();\n    if (dotStyle === 'dots') {\n      ctx.arc(x + moduleSize / 2, y + moduleSize / 2, (moduleSize / 2) * 0.95, 0, Math.PI * 2);\n      ctx.fill();\n      return;\n    }\n\n    if (dotStyle === 'rounded') {\n      this._drawRoundedRectPath(\n        ctx,\n        x + moduleSize * 0.05,\n        y + moduleSize * 0.05,\n        moduleSize * 0.9,\n        moduleSize * 0.9,\n        moduleSize * 0.3\n      );\n      ctx.fill();\n      return;\n    }\n\n    // Default to square\n    ctx.fillRect(x, y, moduleSize, moduleSize);\n  }\n\n  /**\n   * Helper path function for rounded corners (no else branches)\n   */\n  private _drawRoundedRectPath(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    y: number,\n    w: number,\n    h: number,\n    r: number,\n    counterClockwise = false\n  ): void {\n    if (r > w / 2) {\n      r = w / 2;\n    }\n    if (r > h / 2) {\n      r = h / 2;\n    }\n\n    ctx.moveTo(x + r, y);\n    if (counterClockwise) {\n      ctx.lineTo(x + r, y);\n      ctx.arcTo(x, y, x, y + r, r);\n      ctx.lineTo(x, y + h - r);\n      ctx.arcTo(x, x + h, x + r, y + h, r);\n      ctx.lineTo(x + w - r, y + h);\n      ctx.arcTo(x + w, y + h, x + w, y + h - r, r);\n      ctx.lineTo(x + w, y + r);\n      ctx.arcTo(x + w, y, x + w - r, y, r);\n      ctx.closePath();\n      return;\n    }\n\n    ctx.lineTo(x + w - r, y);\n    ctx.arcTo(x + w, y, x + w, y + r, r);\n    ctx.lineTo(x + w, y + h - r);\n    ctx.arcTo(x + w, y + h, x + w - r, y + h, r);\n    ctx.lineTo(x + r, y + h);\n    ctx.arcTo(x, y + h, x, y + h - r, r);\n    ctx.lineTo(x, y + r);\n    ctx.arcTo(x, y, x + r, y, r);\n    ctx.closePath();\n  }\n\n  /**\n   * Draw eye pattern (no else branches)\n   */\n  private _drawEye(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    y: number,\n    moduleSize: number,\n    style: ZQrCodeEyeStyle,\n    color: string | CanvasGradient\n  ): void {\n    ctx.save();\n    ctx.fillStyle = color;\n\n    const outerSize = 7 * moduleSize;\n    const innerSize = 3 * moduleSize;\n    const innerOffset = 2 * moduleSize;\n\n    if (style === 'circle') {\n      ctx.beginPath();\n      ctx.arc(x + outerSize / 2, y + outerSize / 2, outerSize / 2, 0, Math.PI * 2);\n      ctx.arc(x + outerSize / 2, y + outerSize / 2, outerSize / 2 - moduleSize, 0, Math.PI * 2, true);\n      ctx.fill();\n\n      ctx.beginPath();\n      ctx.arc(x + outerSize / 2, y + outerSize / 2, innerSize / 2, 0, Math.PI * 2);\n      ctx.fill();\n      ctx.restore();\n      return;\n    }\n\n    if (style === 'rounded') {\n      const outerRadius = 2 * moduleSize;\n      const innerRadius = moduleSize;\n\n      ctx.beginPath();\n      this._drawRoundedRectPath(ctx, x, y, outerSize, outerSize, outerRadius);\n      this._drawRoundedRectPath(\n        ctx,\n        x + moduleSize,\n        y + moduleSize,\n        outerSize - 2 * moduleSize,\n        outerSize - 2 * moduleSize,\n        outerRadius - moduleSize,\n        true\n      );\n      ctx.fill();\n\n      ctx.beginPath();\n      this._drawRoundedRectPath(ctx, x + innerOffset, y + innerOffset, innerSize, innerSize, innerRadius);\n      ctx.fill();\n      ctx.restore();\n      return;\n    }\n\n    // Default to square\n    ctx.fillRect(x, y, outerSize, outerSize);\n    ctx.clearRect(x + moduleSize, y + moduleSize, outerSize - 2 * moduleSize, outerSize - 2 * moduleSize);\n    ctx.fillRect(x + innerOffset, y + innerOffset, innerSize, innerSize);\n    ctx.restore();\n  }\n\n  /**\n   * Load and render the central logo on canvas (no else branches)\n   */\n  private _drawLogo(\n    ctx: CanvasRenderingContext2D,\n    marginOffset: number,\n    yOffset: number,\n    drawSize: number,\n    logoUrl: string\n  ): Promise<void> {\n    return new Promise(resolve => {\n      const img = new Image();\n      img.crossOrigin = 'anonymous'; // prevent tainted canvas\n      img.src = logoUrl;\n\n      img.onload = () => {\n        const logoBoxSize = drawSize * this.zLogoSize();\n        const logoBoxX = marginOffset + (drawSize - 2 * marginOffset - logoBoxSize) / 2;\n        const logoBoxY = marginOffset + (drawSize - 2 * marginOffset - logoBoxSize) / 2 + yOffset;\n\n        ctx.save();\n\n        // 1. Draw logo mask background (circle or square)\n        const bgShape = this.zLogoBgShape();\n        if (bgShape === 'circle') {\n          ctx.fillStyle = this.zLogoBgColor();\n          ctx.beginPath();\n          ctx.arc(logoBoxX + logoBoxSize / 2, logoBoxY + logoBoxSize / 2, logoBoxSize / 2, 0, Math.PI * 2);\n          ctx.fill();\n        }\n        if (bgShape === 'square') {\n          ctx.fillStyle = this.zLogoBgColor();\n          ctx.beginPath();\n          this._drawRoundedRectPath(ctx, logoBoxX, logoBoxY, logoBoxSize, logoBoxSize, logoBoxSize * 0.2);\n          ctx.fill();\n        }\n\n        // 2. Draw logo image centered\n        const padding = this.zLogoPadding();\n        const logoImgSize = logoBoxSize - padding * 2;\n        const logoImgX = logoBoxX + padding;\n        const logoImgY = logoBoxY + padding;\n\n        if (bgShape === 'circle') {\n          // Clip to circle so non-circle logos look neat\n          ctx.beginPath();\n          ctx.arc(logoBoxX + logoBoxSize / 2, logoBoxY + logoBoxSize / 2, logoImgSize / 2, 0, Math.PI * 2);\n          ctx.clip();\n        }\n\n        ctx.drawImage(img, logoImgX, logoImgY, logoImgSize, logoImgSize);\n        ctx.restore();\n        resolve();\n      };\n\n      img.onerror = () => {\n        console.warn('Failed to load QR code logo from URL:', logoUrl);\n        resolve(); // resolve anyway to avoid blocking execution\n      };\n    });\n  }\n\n  private _drawFrame(\n    ctx: CanvasRenderingContext2D,\n    width: number,\n    bannerY: number,\n    bannerHeight: number,\n    text: string,\n    frameColor: string\n  ): void {\n    ctx.save();\n\n    // Draw pill badge for standard frame aesthetic\n    ctx.fillStyle = frameColor;\n    const pillWidth = width * 0.75;\n    const pillHeight = 28;\n    const pillX = (width - pillWidth) / 2;\n    const pillY = bannerY + (bannerHeight - pillHeight) / 2;\n\n    ctx.beginPath();\n    this._drawRoundedRectPath(ctx, pillX, pillY, pillWidth, pillHeight, pillHeight / 2);\n    ctx.fill();\n\n    // Render banner text\n    ctx.fillStyle = '#ffffff';\n    ctx.font = 'bold 12px var(--font-sans, system-ui, sans-serif)';\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    ctx.fillText(text, width / 2, pillY + pillHeight / 2);\n\n    ctx.restore();\n  }\n\n  /**\n   * Download the generated canvas QR Code as a PNG image file\n   */\n  protected downloadQr(): void {\n    const canvas = this._canvasRef()?.nativeElement;\n    if (!canvas) {\n      return;\n    }\n\n    const dataUrl = canvas.toDataURL('image/png');\n    const link = document.createElement('a');\n    link.href = dataUrl;\n    link.download = `qrcode_${Date.now()}.png`;\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }\n}\n","<div class=\"z-qrcode-container relative flex flex-col items-center\">\n  <div\n    class=\"z-qrcode-canvas-wrapper relative transition-all duration-200\"\n    [class.shadow-md]=\"zShadow()\"\n    [style.border-radius.px]=\"zFrame() !== 'none' || zShadow() ? zFrameBorderRadius() : 0\"\n    [style.overflow]=\"zFrame() !== 'none' || zShadow() ? 'hidden' : 'visible'\">\n    <canvas\n      #qrCanvas\n      class=\"block\"\n      [style.width.px]=\"zFrame() !== 'none' ? zSize() + zFramePadding() * 2 : zSize()\"\n      [style.height.px]=\"\n        zFrame() !== 'none'\n          ? zSize() + zFramePadding() * 2 + (zFrame() === 'text-bottom' || zFrame() === 'text-top' ? 50 : 0)\n          : zSize()\n      \"></canvas>\n\n    @if (zLoading()) {\n      <div class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/80 transition-opacity\">\n        <svg\n          class=\"h-8 w-8 animate-spin text-slate-800\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\">\n          <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n          <path\n            class=\"opacity-75\"\n            fill=\"currentColor\"\n            d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n        </svg>\n      </div>\n    }\n\n    @if (zDownloadable() && !zLoading()) {\n      <div\n        class=\"absolute inset-0 z-10 flex items-center justify-center rounded-md bg-black/45 opacity-0 transition-all duration-200 hover:opacity-100\">\n        <button\n          z-button\n          [zWave]=\"false\"\n          zSize=\"sm\"\n          (click)=\"downloadQr()\"\n          class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            class=\"h-4 w-4\"\n            fill=\"none\"\n            viewBox=\"0 0 24 24\"\n            stroke=\"currentColor\"\n            stroke-width=\"2.5\">\n            <path\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n              d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n          </svg>\n          {{ downloadText() | translate }}\n        </button>\n      </div>\n    }\n  </div>\n\n  @if (zDownloadButton() && !zLoading()) {\n    <div class=\"mt-4\">\n      <button\n        z-button\n        [zWave]=\"false\"\n        (click)=\"downloadQr()\"\n        class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          class=\"h-4 w-4\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\"\n          stroke=\"currentColor\"\n          stroke-width=\"2.5\">\n          <path\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n            d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n        </svg>\n        {{ downloadText() | translate }}\n      </button>\n    </div>\n  }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}