{"version":3,"file":"blinked-qr.mjs","sources":["../../../projects/blinked-qr/src/lib/blinked-qrcode.templates.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/modes.ts","../../../projects/blinked-qr/src/lib/qr-styling/tools/getMode.ts","../../../projects/blinked-qr/src/lib/qr-styling/tools/merge.ts","../../../projects/blinked-qr/src/lib/qr-styling/tools/downloadURI.ts","../../../projects/blinked-qr/src/lib/qr-styling/tools/calculateImageSize.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/errorCorrectionPercents.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/dotTypes.ts","../../../projects/blinked-qr/src/lib/qr-styling/figures/dot/canvas/QRDot.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/cornerSquareTypes.ts","../../../projects/blinked-qr/src/lib/qr-styling/figures/cornerSquare/canvas/QRCornerSquare.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/cornerDotTypes.ts","../../../projects/blinked-qr/src/lib/qr-styling/figures/cornerDot/canvas/QRCornerDot.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/gradientTypes.ts","../../../projects/blinked-qr/src/lib/qr-styling/core/QRCanvas.ts","../../../projects/blinked-qr/src/lib/qr-styling/figures/dot/svg/QRDot.ts","../../../projects/blinked-qr/src/lib/qr-styling/figures/cornerSquare/svg/QRCornerSquare.ts","../../../projects/blinked-qr/src/lib/qr-styling/figures/cornerDot/svg/QRCornerDot.ts","../../../projects/blinked-qr/src/lib/qr-styling/core/QRSVG.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/drawTypes.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/qrTypes.ts","../../../projects/blinked-qr/src/lib/qr-styling/constants/errorCorrectionLevels.ts","../../../projects/blinked-qr/src/lib/qr-styling/core/QROptions.ts","../../../projects/blinked-qr/src/lib/qr-styling/tools/sanitizeOptions.ts","../../../projects/blinked-qr/src/lib/qr-styling/core/QRCodeStyling.ts","../../../projects/blinked-qr/src/lib/blinked-qrcode.helper.ts","../../../projects/blinked-qr/src/lib/blinked-qrcode.service.ts","../../../projects/blinked-qr/src/lib/blinked-qrcode.component.ts","../../../projects/blinked-qr/src/lib/blinked-qrcode.module.ts","../../../projects/blinked-qr/src/public-api.ts","../../../projects/blinked-qr/src/blinked-qr.ts"],"sourcesContent":["export const Templates = (name: string) => {\r\n    switch (name) {\r\n        case 'default':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#202020',\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                }\r\n            };\r\n        case 'ocean':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'dots',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#36CDA5'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#1582AE'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#0277BD'\r\n                        }]\r\n                    }\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n                cornersSquareOptions: {\r\n                    type: 'square'\r\n                }\r\n            };\r\n        case 'sunflower':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'dots',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#BB8412'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#4D762E'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#2F702F'\r\n                        }]\r\n                    }\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#006B3B',\r\n                    type: 'dot'\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#006B3B',\r\n                    type: 'extra-rounded'\r\n                }\r\n            };\r\n        case 'luxury':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'classy-rounded',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#E29C0F'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#913C0C'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#732E0C'\r\n                        }]\r\n                    }\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#732E0C',\r\n                    type: 'dot'\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#732E0C',\r\n                    type: 'extra-rounded'\r\n                }\r\n            };\r\n        case 'bitcoin':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#3a3a3a',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#ff9900'\r\n                },\r\n                cornersSquareOptions: {\r\n                    type: 'extra-rounded'\r\n                }\r\n            };\r\n        case 'starbucks':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#3a3a3a',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#00643C',\r\n                    type: 'dot'\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#00643C',\r\n                    type: 'extra-rounded'\r\n                }\r\n            };\r\n        case 'angular':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#c3002f',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                }\r\n            };\r\n        case 'facebook':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#4D72A9',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                }\r\n            };\r\n        case 'beans':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#416B2C',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#60A541',\r\n                    type: 'dot'\r\n                },\r\n                cornersSquareOptions: {\r\n                    type: 'extra-rounded'\r\n                }\r\n            };\r\n        case 'green':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#006B3B',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#006B3B',\r\n                    type: 'dot'\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#006B3B',\r\n                    type: 'extra-rounded'\r\n                }\r\n            };\r\n        case 'sky':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#2c7597',\r\n                    type: 'rounded'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                },\r\n            };\r\n        case 'mosaic':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'rounded',\r\n                    gradient: {\r\n                        rotation: 190,\r\n                        type: 'linear',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#0277BD'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#943A40'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#A13535'\r\n                        }]\r\n                    }\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                }\r\n            };\r\n        case 'coffee':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#5E4F39',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#FAEDE7\",\r\n                }\r\n            };\r\n        case 'vintage':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#2D7363',\r\n                    type: 'extra-rounded'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#E7E5C5\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#BE8C49',\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#2D7363',\r\n                }\r\n            };\r\n        case 'stamp':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#2a3c16',\r\n                    type: 'square'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#9cc66e\",\r\n                },\r\n                cornersDotOptions: {\r\n                    color: '#4c692c',\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#2a3c16',\r\n                }\r\n            };\r\n        case 'chess':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#F4EAA5',\r\n                    type: 'dots'\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#494B49\",\r\n                }\r\n            };\r\n        case 'jungle':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'classy-rounded',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#84b931'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#537234'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#537234'\r\n                        }]\r\n                    }\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#434343',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#84b931'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#537234'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#537234'\r\n                        }]\r\n                    }\r\n                }\r\n            };\r\n        case 'arabic':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'classy-rounded',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#393939'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#393939'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#393939'\r\n                        }]\r\n                    }\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#434343',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#393939'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#72a28b'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#72a28b'\r\n                        }]\r\n                    }\r\n                }\r\n            };\r\n        case 'tea':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'extra-rounded',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#72b0b4'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#035558'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#035558'\r\n                        }]\r\n                    }\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#434343',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#72b0b4'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#035558'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#035558'\r\n                        }]\r\n                    }\r\n                }\r\n            };\r\n        case 'grape':\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    type: 'rounded',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#7076ae'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#2a3240'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#2a3240'\r\n                        }]\r\n                    }\r\n                },\r\n                cornersSquareOptions: {\r\n                    color: '#434343',\r\n                    gradient: {\r\n                        type: 'radial',\r\n                        colorStops: [{\r\n                            offset: 0,\r\n                            color: '#7b7cb5'\r\n                        }, {\r\n                            offset: 1,\r\n                            color: '#2a3240'\r\n                        }, {\r\n                            offset: 2,\r\n                            color: '#2a3240'\r\n                        }]\r\n                    }\r\n                }\r\n            };\r\n        default:\r\n            return {\r\n                data: '',\r\n                qrOptions: {\r\n                    errorCorrectionLevel: 'Q'\r\n                },\r\n                dotsOptions: {\r\n                    color: '#202020',\r\n                },\r\n                backgroundOptions: {\r\n                    color: \"#ffffff\",\r\n                }\r\n            };\r\n    }\r\n};","import { Mode } from \"../types\";\r\n\r\ninterface Modes {\r\n  [key: string]: Mode;\r\n}\r\n\r\nexport default {\r\n  numeric: \"Numeric\",\r\n  alphanumeric: \"Alphanumeric\",\r\n  byte: \"Byte\",\r\n  kanji: \"Kanji\"\r\n} as Modes;\r\n","import modes from \"../constants/modes\";\r\nimport { Mode } from \"../types\";\r\n\r\nexport default function getMode(data: string): Mode {\r\n  switch (true) {\r\n    case /^[0-9]*$/.test(data):\r\n      return modes.numeric;\r\n    case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\r\n      return modes.alphanumeric;\r\n    default:\r\n      return modes.byte;\r\n  }\r\n}\r\n","import { UnknownObject } from \"../types\";\r\n\r\nconst isObject = (obj: Record<string, unknown>): boolean => !!obj && typeof obj === \"object\" && !Array.isArray(obj);\r\n\r\nexport default function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\r\n  if (!sources.length) return target;\r\n  const source = sources.shift();\r\n  if (source === undefined || !isObject(target) || !isObject(source)) return target;\r\n  target = { ...target };\r\n  Object.keys(source).forEach((key: string): void => {\r\n    const targetValue = target[key];\r\n    const sourceValue = source[key];\r\n\r\n    if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\r\n      target[key] = sourceValue;\r\n    } else if (isObject(targetValue) && isObject(sourceValue)) {\r\n      target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\r\n    } else {\r\n      target[key] = sourceValue;\r\n    }\r\n  });\r\n\r\n  return mergeDeep(target, ...sources);\r\n}\r\n","export default function downloadURI(uri: string, name: string): void {\r\n  const link = document.createElement(\"a\");\r\n  link.download = name;\r\n  link.href = uri;\r\n  document.body.appendChild(link);\r\n  link.click();\r\n  document.body.removeChild(link);\r\n}\r\n","interface ImageSizeOptions {\r\n  originalHeight: number;\r\n  originalWidth: number;\r\n  maxHiddenDots: number;\r\n  maxHiddenAxisDots?: number;\r\n  dotSize: number;\r\n}\r\n\r\ninterface ImageSizeResult {\r\n  height: number;\r\n  width: number;\r\n  hideYDots: number;\r\n  hideXDots: number;\r\n}\r\n\r\nexport default function calculateImageSize({\r\n  originalHeight,\r\n  originalWidth,\r\n  maxHiddenDots,\r\n  maxHiddenAxisDots,\r\n  dotSize\r\n}: ImageSizeOptions): ImageSizeResult {\r\n  const hideDots = { x: 0, y: 0 };\r\n  const imageSize = { x: 0, y: 0 };\r\n\r\n  if (originalHeight <= 0 || originalWidth <= 0 || maxHiddenDots <= 0 || dotSize <= 0) {\r\n    return {\r\n      height: 0,\r\n      width: 0,\r\n      hideYDots: 0,\r\n      hideXDots: 0\r\n    };\r\n  }\r\n\r\n  const k = originalHeight / originalWidth;\r\n\r\n  //Getting the maximum possible axis hidden dots\r\n  hideDots.x = Math.floor(Math.sqrt(maxHiddenDots / k));\r\n  //The count of hidden dot's can't be less than 1\r\n  if (hideDots.x <= 0) hideDots.x = 1;\r\n  //Check the limit of the maximum allowed axis hidden dots\r\n  if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.x) hideDots.x = maxHiddenAxisDots;\r\n  //The count of dots should be odd\r\n  if (hideDots.x % 2 === 0) hideDots.x--;\r\n  imageSize.x = hideDots.x * dotSize;\r\n  //Calculate opposite axis hidden dots based on axis value.\r\n  //The value will be odd.\r\n  //We use ceil to prevent dots covering by the image.\r\n  hideDots.y = 1 + 2 * Math.ceil((hideDots.x * k - 1) / 2);\r\n  imageSize.y = Math.round(imageSize.x * k);\r\n  //If the result dots count is bigger than max - then decrease size and calculate again\r\n  if (hideDots.y * hideDots.x > maxHiddenDots || (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y)) {\r\n    if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y) {\r\n      hideDots.y = maxHiddenAxisDots;\r\n      if (hideDots.y % 2 === 0) hideDots.x--;\r\n    } else {\r\n      hideDots.y -= 2;\r\n    }\r\n    imageSize.y = hideDots.y * dotSize;\r\n    hideDots.x = 1 + 2 * Math.ceil((hideDots.y / k - 1) / 2);\r\n    imageSize.x = Math.round(imageSize.y / k);\r\n  }\r\n\r\n  return {\r\n    height: imageSize.y,\r\n    width: imageSize.x,\r\n    hideYDots: hideDots.y,\r\n    hideXDots: hideDots.x\r\n  };\r\n}\r\n","interface ErrorCorrectionPercents {\r\n  [key: string]: number;\r\n}\r\n\r\nexport default {\r\n  L: 0.07,\r\n  M: 0.15,\r\n  Q: 0.25,\r\n  H: 0.3\r\n} as ErrorCorrectionPercents;\r\n","import { DotTypes } from \"../types\";\r\n\r\nexport default {\r\n  dots: \"dots\",\r\n  rounded: \"rounded\",\r\n  classy: \"classy\",\r\n  classyRounded: \"classy-rounded\",\r\n  square: \"square\",\r\n  extraRounded: \"extra-rounded\"\r\n} as DotTypes;\r\n","import dotTypes from \"../../../constants/dotTypes\";\r\nimport {\r\n  DotType,\r\n  GetNeighbor,\r\n  RotateFigureArgsCanvas,\r\n  BasicFigureDrawArgsCanvas,\r\n  DrawArgsCanvas\r\n} from \"../../../types\";\r\n\r\nexport default class QRDot {\r\n  _context: CanvasRenderingContext2D;\r\n  _type: DotType;\r\n\r\n  constructor({ context, type }: { context: CanvasRenderingContext2D; type: DotType }) {\r\n    this._context = context;\r\n    this._type = type;\r\n  }\r\n\r\n  draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\r\n    const context = this._context;\r\n    const type = this._type;\r\n    let drawFunction;\r\n\r\n    switch (type) {\r\n      case dotTypes.dots:\r\n        drawFunction = this._drawDot;\r\n        break;\r\n      case dotTypes.classy:\r\n        drawFunction = this._drawClassy;\r\n        break;\r\n      case dotTypes.classyRounded:\r\n        drawFunction = this._drawClassyRounded;\r\n        break;\r\n      case dotTypes.rounded:\r\n        drawFunction = this._drawRounded;\r\n        break;\r\n      case dotTypes.extraRounded:\r\n        drawFunction = this._drawExtraRounded;\r\n        break;\r\n      case dotTypes.square:\r\n      default:\r\n        drawFunction = this._drawSquare;\r\n    }\r\n\r\n    drawFunction.call(this, { x, y, size, context, getNeighbor });\r\n  }\r\n\r\n  _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n    const cx = x + size / 2;\r\n    const cy = y + size / 2;\r\n\r\n    context.translate(cx, cy);\r\n    rotation && context.rotate(rotation);\r\n    draw();\r\n    context.closePath();\r\n    rotation && context.rotate(-rotation);\r\n    context.translate(-cx, -cy);\r\n  }\r\n\r\n  _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.rect(-size / 2, -size / 2, size, size);\r\n      }\r\n    });\r\n  }\r\n\r\n  //if rotation === 0 - right side is rounded\r\n  _basicSideRounded(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(0, 0, size / 2, -Math.PI / 2, Math.PI / 2);\r\n        context.lineTo(-size / 2, size / 2);\r\n        context.lineTo(-size / 2, -size / 2);\r\n        context.lineTo(0, -size / 2);\r\n      }\r\n    });\r\n  }\r\n\r\n  //if rotation === 0 - top right corner is rounded\r\n  _basicCornerRounded(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(0, 0, size / 2, -Math.PI / 2, 0);\r\n        context.lineTo(size / 2, size / 2);\r\n        context.lineTo(-size / 2, size / 2);\r\n        context.lineTo(-size / 2, -size / 2);\r\n        context.lineTo(0, -size / 2);\r\n      }\r\n    });\r\n  }\r\n\r\n  //if rotation === 0 - top right corner is rounded\r\n  _basicCornerExtraRounded(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0);\r\n        context.lineTo(-size / 2, size / 2);\r\n        context.lineTo(-size / 2, -size / 2);\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicCornersRounded(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(0, 0, size / 2, -Math.PI / 2, 0);\r\n        context.lineTo(size / 2, size / 2);\r\n        context.lineTo(0, size / 2);\r\n        context.arc(0, 0, size / 2, Math.PI / 2, Math.PI);\r\n        context.lineTo(-size / 2, -size / 2);\r\n        context.lineTo(0, -size / 2);\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicCornersExtraRounded(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0);\r\n        context.arc(size / 2, -size / 2, size, Math.PI / 2, Math.PI);\r\n      }\r\n    });\r\n  }\r\n\r\n  _drawDot({ x, y, size, context }: DrawArgsCanvas): void {\r\n    this._basicDot({ x, y, size, context, rotation: 0 });\r\n  }\r\n\r\n  _drawSquare({ x, y, size, context }: DrawArgsCanvas): void {\r\n    this._basicSquare({ x, y, size, context, rotation: 0 });\r\n  }\r\n\r\n  _drawRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicDot({ x, y, size, context, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n      this._basicSquare({ x, y, size, context, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 2) {\r\n      let rotation = 0;\r\n\r\n      if (leftNeighbor && topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (topNeighbor && rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (rightNeighbor && bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicCornerRounded({ x, y, size, context, rotation });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 1) {\r\n      let rotation = 0;\r\n\r\n      if (topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicSideRounded({ x, y, size, context, rotation });\r\n      return;\r\n    }\r\n  }\r\n\r\n  _drawExtraRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicDot({ x, y, size, context, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n      this._basicSquare({ x, y, size, context, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 2) {\r\n      let rotation = 0;\r\n\r\n      if (leftNeighbor && topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (topNeighbor && rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (rightNeighbor && bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicCornerExtraRounded({ x, y, size, context, rotation });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 1) {\r\n      let rotation = 0;\r\n\r\n      if (topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicSideRounded({ x, y, size, context, rotation });\r\n      return;\r\n    }\r\n  }\r\n\r\n  _drawClassy({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicCornersRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!leftNeighbor && !topNeighbor) {\r\n      this._basicCornerRounded({ x, y, size, context, rotation: -Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!rightNeighbor && !bottomNeighbor) {\r\n      this._basicCornerRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    this._basicSquare({ x, y, size, context, rotation: 0 });\r\n  }\r\n\r\n  _drawClassyRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicCornersRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!leftNeighbor && !topNeighbor) {\r\n      this._basicCornerExtraRounded({ x, y, size, context, rotation: -Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!rightNeighbor && !bottomNeighbor) {\r\n      this._basicCornerExtraRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    this._basicSquare({ x, y, size, context, rotation: 0 });\r\n  }\r\n}\r\n","import { CornerSquareTypes } from \"../types\";\r\n\r\nexport default {\r\n  dot: \"dot\",\r\n  square: \"square\",\r\n  extraRounded: \"extra-rounded\"\r\n} as CornerSquareTypes;\r\n","import cornerSquareTypes from \"../../../constants/cornerSquareTypes\";\r\nimport { CornerSquareType, RotateFigureArgsCanvas, BasicFigureDrawArgsCanvas, DrawArgsCanvas } from \"../../../types\";\r\n\r\nexport default class QRCornerSquare {\r\n  _context: CanvasRenderingContext2D;\r\n  _type: CornerSquareType;\r\n\r\n  constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerSquareType }) {\r\n    this._context = context;\r\n    this._type = type;\r\n  }\r\n\r\n  draw(x: number, y: number, size: number, rotation: number): void {\r\n    const context = this._context;\r\n    const type = this._type;\r\n    let drawFunction;\r\n\r\n    switch (type) {\r\n      case cornerSquareTypes.square:\r\n        drawFunction = this._drawSquare;\r\n        break;\r\n      case cornerSquareTypes.extraRounded:\r\n        drawFunction = this._drawExtraRounded;\r\n        break;\r\n      case cornerSquareTypes.dot:\r\n      default:\r\n        drawFunction = this._drawDot;\r\n    }\r\n\r\n    drawFunction.call(this, { x, y, size, context, rotation });\r\n  }\r\n\r\n  _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n    const cx = x + size / 2;\r\n    const cy = y + size / 2;\r\n\r\n    context.translate(cx, cy);\r\n    rotation && context.rotate(rotation);\r\n    draw();\r\n    context.closePath();\r\n    rotation && context.rotate(-rotation);\r\n    context.translate(-cx, -cy);\r\n  }\r\n\r\n  _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n    const dotSize = size / 7;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n        context.arc(0, 0, size / 2 - dotSize, 0, Math.PI * 2);\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n    const dotSize = size / 7;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.rect(-size / 2, -size / 2, size, size);\r\n        context.rect(-size / 2 + dotSize, -size / 2 + dotSize, size - 2 * dotSize, size - 2 * dotSize);\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicExtraRounded(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n    const dotSize = size / 7;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(-dotSize, -dotSize, 2.5 * dotSize, Math.PI, -Math.PI / 2);\r\n        context.lineTo(dotSize, -3.5 * dotSize);\r\n        context.arc(dotSize, -dotSize, 2.5 * dotSize, -Math.PI / 2, 0);\r\n        context.lineTo(3.5 * dotSize, -dotSize);\r\n        context.arc(dotSize, dotSize, 2.5 * dotSize, 0, Math.PI / 2);\r\n        context.lineTo(-dotSize, 3.5 * dotSize);\r\n        context.arc(-dotSize, dotSize, 2.5 * dotSize, Math.PI / 2, Math.PI);\r\n        context.lineTo(-3.5 * dotSize, -dotSize);\r\n\r\n        context.arc(-dotSize, -dotSize, 1.5 * dotSize, Math.PI, -Math.PI / 2);\r\n        context.lineTo(dotSize, -2.5 * dotSize);\r\n        context.arc(dotSize, -dotSize, 1.5 * dotSize, -Math.PI / 2, 0);\r\n        context.lineTo(2.5 * dotSize, -dotSize);\r\n        context.arc(dotSize, dotSize, 1.5 * dotSize, 0, Math.PI / 2);\r\n        context.lineTo(-dotSize, 2.5 * dotSize);\r\n        context.arc(-dotSize, dotSize, 1.5 * dotSize, Math.PI / 2, Math.PI);\r\n        context.lineTo(-2.5 * dotSize, -dotSize);\r\n      }\r\n    });\r\n  }\r\n\r\n  _drawDot({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n    this._basicDot({ x, y, size, context, rotation });\r\n  }\r\n\r\n  _drawSquare({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n    this._basicSquare({ x, y, size, context, rotation });\r\n  }\r\n\r\n  _drawExtraRounded({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n    this._basicExtraRounded({ x, y, size, context, rotation });\r\n  }\r\n}\r\n","import { CornerDotTypes } from \"../types\";\r\n\r\nexport default {\r\n  dot: \"dot\",\r\n  square: \"square\"\r\n} as CornerDotTypes;\r\n","import cornerDotTypes from \"../../../constants/cornerDotTypes\";\r\nimport { CornerDotType, RotateFigureArgsCanvas, BasicFigureDrawArgsCanvas, DrawArgsCanvas } from \"../../../types\";\r\n\r\nexport default class QRCornerDot {\r\n  _context: CanvasRenderingContext2D;\r\n  _type: CornerDotType;\r\n\r\n  constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerDotType }) {\r\n    this._context = context;\r\n    this._type = type;\r\n  }\r\n\r\n  draw(x: number, y: number, size: number, rotation: number): void {\r\n    const context = this._context;\r\n    const type = this._type;\r\n    let drawFunction;\r\n\r\n    switch (type) {\r\n      case cornerDotTypes.square:\r\n        drawFunction = this._drawSquare;\r\n        break;\r\n      case cornerDotTypes.dot:\r\n      default:\r\n        drawFunction = this._drawDot;\r\n    }\r\n\r\n    drawFunction.call(this, { x, y, size, context, rotation });\r\n  }\r\n\r\n  _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n    const cx = x + size / 2;\r\n    const cy = y + size / 2;\r\n\r\n    context.translate(cx, cy);\r\n    rotation && context.rotate(rotation);\r\n    draw();\r\n    context.closePath();\r\n    rotation && context.rotate(-rotation);\r\n    context.translate(-cx, -cy);\r\n  }\r\n\r\n  _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n    const { size, context } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        context.rect(-size / 2, -size / 2, size, size);\r\n      }\r\n    });\r\n  }\r\n\r\n  _drawDot({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n    this._basicDot({ x, y, size, context, rotation });\r\n  }\r\n\r\n  _drawSquare({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n    this._basicSquare({ x, y, size, context, rotation });\r\n  }\r\n}\r\n","import { GradientTypes } from \"../types\";\r\n\r\nexport default {\r\n  radial: \"radial\",\r\n  linear: \"linear\"\r\n} as GradientTypes;\r\n","import calculateImageSize from \"../tools/calculateImageSize\";\r\nimport errorCorrectionPercents from \"../constants/errorCorrectionPercents\";\r\nimport QRDot from \"../figures/dot/canvas/QRDot\";\r\nimport QRCornerSquare from \"../figures/cornerSquare/canvas/QRCornerSquare\";\r\nimport QRCornerDot from \"../figures/cornerDot/canvas/QRCornerDot\";\r\nimport { RequiredOptions } from \"./QROptions\";\r\nimport gradientTypes from \"../constants/gradientTypes\";\r\nimport { QRCode, Gradient, FilterFunction } from \"../types\";\r\n\r\nconst squareMask = [\r\n  [1, 1, 1, 1, 1, 1, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 1, 1, 1, 1, 1, 1]\r\n];\r\n\r\nconst dotMask = [\r\n  [0, 0, 0, 0, 0, 0, 0],\r\n  [0, 0, 0, 0, 0, 0, 0],\r\n  [0, 0, 1, 1, 1, 0, 0],\r\n  [0, 0, 1, 1, 1, 0, 0],\r\n  [0, 0, 1, 1, 1, 0, 0],\r\n  [0, 0, 0, 0, 0, 0, 0],\r\n  [0, 0, 0, 0, 0, 0, 0]\r\n];\r\n\r\nexport default class QRCanvas {\r\n  _canvas: HTMLCanvasElement;\r\n  _options: RequiredOptions;\r\n  _qr?: QRCode;\r\n  _image?: HTMLImageElement;\r\n\r\n  //TODO don't pass all options to this class\r\n  constructor(options: RequiredOptions) {\r\n    this._canvas = document.createElement(\"canvas\");\r\n    this._canvas.width = options.width;\r\n    this._canvas.height = options.height;\r\n    this._options = options;\r\n  }\r\n\r\n  get context(): CanvasRenderingContext2D | null {\r\n    return this._canvas.getContext(\"2d\");\r\n  }\r\n\r\n  get width(): number {\r\n    return this._canvas.width;\r\n  }\r\n\r\n  get height(): number {\r\n    return this._canvas.height;\r\n  }\r\n\r\n  getCanvas(): HTMLCanvasElement {\r\n    return this._canvas;\r\n  }\r\n\r\n  clear(): void {\r\n    const canvasContext = this.context;\r\n\r\n    if (canvasContext) {\r\n      canvasContext.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n    }\r\n  }\r\n\r\n  async drawQR(qr: QRCode): Promise<void> {\r\n    const count = qr.getModuleCount();\r\n    const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2;\r\n    const dotSize = Math.floor(minSize / count);\r\n    let drawImageSize = {\r\n      hideXDots: 0,\r\n      hideYDots: 0,\r\n      width: 0,\r\n      height: 0\r\n    };\r\n\r\n    this._qr = qr;\r\n\r\n    if (this._options.image) {\r\n      await this.loadImage();\r\n      if (!this._image) return;\r\n      const { imageOptions, qrOptions } = this._options;\r\n      const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel];\r\n      const maxHiddenDots = Math.floor(coverLevel * count * count);\r\n\r\n      drawImageSize = calculateImageSize({\r\n        originalWidth: this._image.width,\r\n        originalHeight: this._image.height,\r\n        maxHiddenDots,\r\n        maxHiddenAxisDots: count - 14,\r\n        dotSize\r\n      });\r\n    }\r\n\r\n    this.clear();\r\n    this.drawBackground();\r\n    this.drawDots((i: number, j: number): boolean => {\r\n      if (this._options.imageOptions.hideBackgroundDots) {\r\n        if (\r\n          i >= (count - drawImageSize.hideXDots) / 2 &&\r\n          i < (count + drawImageSize.hideXDots) / 2 &&\r\n          j >= (count - drawImageSize.hideYDots) / 2 &&\r\n          j < (count + drawImageSize.hideYDots) / 2\r\n        ) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\r\n        return false;\r\n      }\r\n\r\n      if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n    this.drawCorners();\r\n\r\n    if (this._options.image) {\r\n      this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\r\n    }\r\n  }\r\n\r\n  drawBackground(): void {\r\n    const canvasContext = this.context;\r\n    const options = this._options;\r\n\r\n    if (canvasContext) {\r\n      if (options.backgroundOptions.gradient) {\r\n        const gradientOptions = options.backgroundOptions.gradient;\r\n        const gradient = this._createGradient({\r\n          context: canvasContext,\r\n          options: gradientOptions,\r\n          additionalRotation: 0,\r\n          x: 0,\r\n          y: 0,\r\n          size: this._canvas.width > this._canvas.height ? this._canvas.width : this._canvas.height\r\n        });\r\n\r\n        try{\r\n        gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n          gradient.addColorStop(offset, color);\r\n        });\r\n      }catch(e){}\r\n\r\n        canvasContext.fillStyle = gradient;\r\n      } else if (options.backgroundOptions.color) {\r\n        canvasContext.fillStyle = options.backgroundOptions.color;\r\n      }\r\n      canvasContext.fillRect(0, 0, this._canvas.width, this._canvas.height);\r\n    }\r\n  }\r\n\r\n  drawDots(filter?: FilterFunction): void {\r\n    if (!this._qr) {\r\n      throw \"QR code is not defined\";\r\n    }\r\n\r\n    const canvasContext = this.context;\r\n\r\n    if (!canvasContext) {\r\n      throw \"QR code is not defined\";\r\n    }\r\n\r\n    const options = this._options;\r\n    const count = this._qr.getModuleCount();\r\n\r\n    if (count > options.width || count > options.height) {\r\n      throw \"The canvas is too small.\";\r\n    }\r\n\r\n    const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n    const dotSize = Math.floor(minSize / count);\r\n    const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n    const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n    const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n    canvasContext.beginPath();\r\n\r\n    for (let i = 0; i < count; i++) {\r\n      for (let j = 0; j < count; j++) {\r\n        if (filter && !filter(i, j)) {\r\n          continue;\r\n        }\r\n        if (!this._qr.isDark(i, j)) {\r\n          continue;\r\n        }\r\n        dot.draw(\r\n          xBeginning + i * dotSize,\r\n          yBeginning + j * dotSize,\r\n          dotSize,\r\n          (xOffset: number, yOffset: number): boolean => {\r\n            if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\r\n            if (filter && !filter(i + xOffset, j + yOffset)) return false;\r\n            return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\r\n          }\r\n        );\r\n      }\r\n    }\r\n\r\n    if (options.dotsOptions.gradient) {\r\n      const gradientOptions = options.dotsOptions.gradient;\r\n      const gradient = this._createGradient({\r\n        context: canvasContext,\r\n        options: gradientOptions,\r\n        additionalRotation: 0,\r\n        x: xBeginning,\r\n        y: yBeginning,\r\n        size: count * dotSize\r\n      });\r\n\r\n      try{\r\n      gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n        gradient.addColorStop(offset, color);\r\n      });}catch(e){}\r\n\r\n      canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n    } else if (options.dotsOptions.color) {\r\n      canvasContext.fillStyle = canvasContext.strokeStyle = options.dotsOptions.color;\r\n    }\r\n\r\n    canvasContext.fill(\"evenodd\");\r\n  }\r\n\r\n  drawCorners(filter?: FilterFunction): void {\r\n    if (!this._qr) {\r\n      throw \"QR code is not defined\";\r\n    }\r\n\r\n    const canvasContext = this.context;\r\n\r\n    if (!canvasContext) {\r\n      throw \"QR code is not defined\";\r\n    }\r\n\r\n    const options = this._options;\r\n\r\n    const count = this._qr.getModuleCount();\r\n    const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n    const dotSize = Math.floor(minSize / count);\r\n    const cornersSquareSize = dotSize * 7;\r\n    const cornersDotSize = dotSize * 3;\r\n    const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n    const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n    [\r\n      [0, 0, 0],\r\n      [1, 0, Math.PI / 2],\r\n      [0, 1, -Math.PI / 2]\r\n    ].forEach(([column, row, rotation]) => {\r\n      if (filter && !filter(column, row)) {\r\n        return;\r\n      }\r\n\r\n      const x = xBeginning + column * dotSize * (count - 7);\r\n      const y = yBeginning + row * dotSize * (count - 7);\r\n\r\n      if (options.cornersSquareOptions?.type) {\r\n        const cornersSquare = new QRCornerSquare({ context: canvasContext, type: options.cornersSquareOptions?.type });\r\n\r\n        canvasContext.beginPath();\r\n        cornersSquare.draw(x, y, cornersSquareSize, rotation);\r\n      } else {\r\n        const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n        canvasContext.beginPath();\r\n\r\n        for (let i = 0; i < squareMask.length; i++) {\r\n          for (let j = 0; j < squareMask[i].length; j++) {\r\n            if (!squareMask[i]?.[j]) {\r\n              continue;\r\n            }\r\n\r\n            dot.draw(\r\n              x + i * dotSize,\r\n              y + j * dotSize,\r\n              dotSize,\r\n              (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n            );\r\n          }\r\n        }\r\n      }\r\n\r\n      if (options.cornersSquareOptions?.gradient) {\r\n        const gradientOptions = options.cornersSquareOptions.gradient;\r\n        const gradient = this._createGradient({\r\n          context: canvasContext,\r\n          options: gradientOptions,\r\n          additionalRotation: rotation,\r\n          x,\r\n          y,\r\n          size: cornersSquareSize\r\n        });\r\n\r\n        try{\r\n        gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n          gradient.addColorStop(offset, color);\r\n        });\r\n      }catch(e){}\r\n\r\n        canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n      } else if (options.cornersSquareOptions?.color) {\r\n        canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersSquareOptions.color;\r\n      }\r\n\r\n      canvasContext.fill(\"evenodd\");\r\n\r\n      if (options.cornersDotOptions?.type) {\r\n        const cornersDot = new QRCornerDot({ context: canvasContext, type: options.cornersDotOptions?.type });\r\n\r\n        canvasContext.beginPath();\r\n        cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\r\n      } else {\r\n        const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n        canvasContext.beginPath();\r\n\r\n        for (let i = 0; i < dotMask.length; i++) {\r\n          for (let j = 0; j < dotMask[i].length; j++) {\r\n            if (!dotMask[i]?.[j]) {\r\n              continue;\r\n            }\r\n\r\n            dot.draw(\r\n              x + i * dotSize,\r\n              y + j * dotSize,\r\n              dotSize,\r\n              (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n            );\r\n          }\r\n        }\r\n      }\r\n\r\n      if (options.cornersDotOptions?.gradient) {\r\n        const gradientOptions = options.cornersDotOptions.gradient;\r\n        const gradient = this._createGradient({\r\n          context: canvasContext,\r\n          options: gradientOptions,\r\n          additionalRotation: rotation,\r\n          x: x + dotSize * 2,\r\n          y: y + dotSize * 2,\r\n          size: cornersDotSize\r\n        });\r\n\r\n        try{\r\n        gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n          gradient.addColorStop(offset, color);\r\n        });\r\n      }catch(e){}\r\n\r\n        canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n      } else if (options.cornersDotOptions?.color) {\r\n        canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersDotOptions.color;\r\n      }\r\n\r\n      canvasContext.fill(\"evenodd\");\r\n    });\r\n  }\r\n\r\n  loadImage(): Promise<void> {\r\n    return new Promise((resolve, reject) => {\r\n      const options = this._options;\r\n      const image = new Image();\r\n\r\n      if (!options.image) {\r\n        return reject(\"Image is not defined\");\r\n      }\r\n\r\n      if (typeof options.imageOptions.crossOrigin === \"string\") {\r\n        image.crossOrigin = options.imageOptions.crossOrigin;\r\n      }\r\n\r\n      this._image = image;\r\n      image.onload = (): void => {\r\n        resolve();\r\n      };\r\n      image.src = options.image;\r\n    });\r\n  }\r\n\r\n  drawImage({\r\n    width,\r\n    height,\r\n    count,\r\n    dotSize\r\n  }: {\r\n    width: number;\r\n    height: number;\r\n    count: number;\r\n    dotSize: number;\r\n  }): void {\r\n    const canvasContext = this.context;\r\n\r\n    if (!canvasContext) {\r\n      throw \"canvasContext is not defined\";\r\n    }\r\n\r\n    if (!this._image) {\r\n      throw \"image is not defined\";\r\n    }\r\n\r\n    const options = this._options;\r\n    const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n    const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n    const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2;\r\n    const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2;\r\n    const dw = width - options.imageOptions.margin * 2;\r\n    const dh = height - options.imageOptions.margin * 2;\r\n\r\n    canvasContext.drawImage(this._image, dx, dy, dw < 0 ? 0 : dw, dh < 0 ? 0 : dh);\r\n  }\r\n\r\n  _createGradient({\r\n    context,\r\n    options,\r\n    additionalRotation,\r\n    x,\r\n    y,\r\n    size\r\n  }: {\r\n    context: CanvasRenderingContext2D;\r\n    options: Gradient;\r\n    additionalRotation: number;\r\n    x: number;\r\n    y: number;\r\n    size: number;\r\n  }): CanvasGradient {\r\n    let gradient;\r\n\r\n    if (options.type === gradientTypes.radial) {\r\n      gradient = context.createRadialGradient(x + size / 2, y + size / 2, 0, x + size / 2, y + size / 2, size / 2);\r\n    } else {\r\n      const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\r\n      const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\r\n      let x0 = x + size / 2;\r\n      let y0 = y + size / 2;\r\n      let x1 = x + size / 2;\r\n      let y1 = y + size / 2;\r\n\r\n      if (\r\n        (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n        (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n      ) {\r\n        x0 = x0 - size / 2;\r\n        y0 = y0 - (size / 2) * Math.tan(rotation);\r\n        x1 = x1 + size / 2;\r\n        y1 = y1 + (size / 2) * Math.tan(rotation);\r\n      } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n        y0 = y0 - size / 2;\r\n        x0 = x0 - size / 2 / Math.tan(rotation);\r\n        y1 = y1 + size / 2;\r\n        x1 = x1 + size / 2 / Math.tan(rotation);\r\n      } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n        x0 = x0 + size / 2;\r\n        y0 = y0 + (size / 2) * Math.tan(rotation);\r\n        x1 = x1 - size / 2;\r\n        y1 = y1 - (size / 2) * Math.tan(rotation);\r\n      } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n        y0 = y0 + size / 2;\r\n        x0 = x0 + size / 2 / Math.tan(rotation);\r\n        y1 = y1 - size / 2;\r\n        x1 = x1 - size / 2 / Math.tan(rotation);\r\n      }\r\n\r\n      gradient = context.createLinearGradient(Math.round(x0), Math.round(y0), Math.round(x1), Math.round(y1));\r\n    }\r\n\r\n    return gradient;\r\n  }\r\n}\r\n","import dotTypes from \"../../../constants/dotTypes\";\r\nimport { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../../types\";\r\n\r\nexport default class QRDot {\r\n  _element?: SVGElement;\r\n  _svg: SVGElement;\r\n  _type: DotType;\r\n\r\n  constructor({ svg, type }: { svg: SVGElement; type: DotType }) {\r\n    this._svg = svg;\r\n    this._type = type;\r\n  }\r\n\r\n  draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\r\n    const type = this._type;\r\n    let drawFunction;\r\n\r\n    switch (type) {\r\n      case dotTypes.dots:\r\n        drawFunction = this._drawDot;\r\n        break;\r\n      case dotTypes.classy:\r\n        drawFunction = this._drawClassy;\r\n        break;\r\n      case dotTypes.classyRounded:\r\n        drawFunction = this._drawClassyRounded;\r\n        break;\r\n      case dotTypes.rounded:\r\n        drawFunction = this._drawRounded;\r\n        break;\r\n      case dotTypes.extraRounded:\r\n        drawFunction = this._drawExtraRounded;\r\n        break;\r\n      case dotTypes.square:\r\n      default:\r\n        drawFunction = this._drawSquare;\r\n    }\r\n\r\n    drawFunction.call(this, { x, y, size, getNeighbor });\r\n  }\r\n\r\n  _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n    const cx = x + size / 2;\r\n    const cy = y + size / 2;\r\n\r\n    draw();\r\n    this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n  }\r\n\r\n  _basicDot(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n        this._element.setAttribute(\"cx\", String(x + size / 2));\r\n        this._element.setAttribute(\"cy\", String(y + size / 2));\r\n        this._element.setAttribute(\"r\", String(size / 2));\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicSquare(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n        this._element.setAttribute(\"x\", String(x));\r\n        this._element.setAttribute(\"y\", String(y));\r\n        this._element.setAttribute(\"width\", String(size));\r\n        this._element.setAttribute(\"height\", String(size));\r\n      }\r\n    });\r\n  }\r\n\r\n  //if rotation === 0 - right side is rounded\r\n  _basicSideRounded(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n        this._element.setAttribute(\r\n          \"d\",\r\n          `M ${x} ${y}` + //go to top left position\r\n            `v ${size}` + //draw line to left bottom corner\r\n            `h ${size / 2}` + //draw line to left bottom corner + half of size right\r\n            `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  //if rotation === 0 - top right corner is rounded\r\n  _basicCornerRounded(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n        this._element.setAttribute(\r\n          \"d\",\r\n          `M ${x} ${y}` + //go to top left position\r\n            `v ${size}` + //draw line to left bottom corner\r\n            `h ${size}` + //draw line to right bottom corner\r\n            `v ${-size / 2}` + //draw line to right bottom corner + half of size top\r\n            `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  //if rotation === 0 - top right corner is rounded\r\n  _basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n        this._element.setAttribute(\r\n          \"d\",\r\n          `M ${x} ${y}` + //go to top left position\r\n            `v ${size}` + //draw line to left bottom corner\r\n            `h ${size}` + //draw line to right bottom corner\r\n            `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  //if rotation === 0 - left bottom and right top corners are rounded\r\n  _basicCornersRounded(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n        this._element.setAttribute(\r\n          \"d\",\r\n          `M ${x} ${y}` + //go to left top position\r\n            `v ${size / 2}` + //draw line to left top corner + half of size bottom\r\n            `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\r\n            `h ${size / 2}` + //draw line to right bottom corner\r\n            `v ${-size / 2}` + //draw line to right bottom corner + half of size top\r\n            `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  _drawDot({ x, y, size }: DrawArgs): void {\r\n    this._basicDot({ x, y, size, rotation: 0 });\r\n  }\r\n\r\n  _drawSquare({ x, y, size }: DrawArgs): void {\r\n    this._basicSquare({ x, y, size, rotation: 0 });\r\n  }\r\n\r\n  _drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicDot({ x, y, size, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n      this._basicSquare({ x, y, size, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 2) {\r\n      let rotation = 0;\r\n\r\n      if (leftNeighbor && topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (topNeighbor && rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (rightNeighbor && bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicCornerRounded({ x, y, size, rotation });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 1) {\r\n      let rotation = 0;\r\n\r\n      if (topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicSideRounded({ x, y, size, rotation });\r\n      return;\r\n    }\r\n  }\r\n\r\n  _drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicDot({ x, y, size, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n      this._basicSquare({ x, y, size, rotation: 0 });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 2) {\r\n      let rotation = 0;\r\n\r\n      if (leftNeighbor && topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (topNeighbor && rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (rightNeighbor && bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicCornerExtraRounded({ x, y, size, rotation });\r\n      return;\r\n    }\r\n\r\n    if (neighborsCount === 1) {\r\n      let rotation = 0;\r\n\r\n      if (topNeighbor) {\r\n        rotation = Math.PI / 2;\r\n      } else if (rightNeighbor) {\r\n        rotation = Math.PI;\r\n      } else if (bottomNeighbor) {\r\n        rotation = -Math.PI / 2;\r\n      }\r\n\r\n      this._basicSideRounded({ x, y, size, rotation });\r\n      return;\r\n    }\r\n  }\r\n\r\n  _drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!leftNeighbor && !topNeighbor) {\r\n      this._basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!rightNeighbor && !bottomNeighbor) {\r\n      this._basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    this._basicSquare({ x, y, size, rotation: 0 });\r\n  }\r\n\r\n  _drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n    const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n    const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n    const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n    const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n    const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n    if (neighborsCount === 0) {\r\n      this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!leftNeighbor && !topNeighbor) {\r\n      this._basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    if (!rightNeighbor && !bottomNeighbor) {\r\n      this._basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\r\n      return;\r\n    }\r\n\r\n    this._basicSquare({ x, y, size, rotation: 0 });\r\n  }\r\n}\r\n","import cornerSquareTypes from \"../../../constants/cornerSquareTypes\";\r\nimport { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../../types\";\r\n\r\nexport default class QRCornerSquare {\r\n  _element?: SVGElement;\r\n  _svg: SVGElement;\r\n  _type: CornerSquareType;\r\n\r\n  constructor({ svg, type }: { svg: SVGElement; type: CornerSquareType }) {\r\n    this._svg = svg;\r\n    this._type = type;\r\n  }\r\n\r\n  draw(x: number, y: number, size: number, rotation: number): void {\r\n    const type = this._type;\r\n    let drawFunction;\r\n\r\n    switch (type) {\r\n      case cornerSquareTypes.square:\r\n        drawFunction = this._drawSquare;\r\n        break;\r\n      case cornerSquareTypes.extraRounded:\r\n        drawFunction = this._drawExtraRounded;\r\n        break;\r\n      case cornerSquareTypes.dot:\r\n      default:\r\n        drawFunction = this._drawDot;\r\n    }\r\n\r\n    drawFunction.call(this, { x, y, size, rotation });\r\n  }\r\n\r\n  _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n    const cx = x + size / 2;\r\n    const cy = y + size / 2;\r\n\r\n    draw();\r\n    this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n  }\r\n\r\n  _basicDot(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n    const dotSize = size / 7;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n        this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n        this._element.setAttribute(\r\n          \"d\",\r\n          `M ${x + size / 2} ${y}` + // M cx, y //  Move to top of ring\r\n            `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\r\n            `z` + // Z // Close the outer shape\r\n            `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\r\n            `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\r\n            `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicSquare(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n    const dotSize = size / 7;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n        this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n        this._element.setAttribute(\r\n          \"d\",\r\n          `M ${x} ${y}` +\r\n            `v ${size}` +\r\n            `h ${size}` +\r\n            `v ${-size}` +\r\n            `z` +\r\n            `M ${x + dotSize} ${y + dotSize}` +\r\n            `h ${size - 2 * dotSize}` +\r\n            `v ${size - 2 * dotSize}` +\r\n            `h ${-size + 2 * dotSize}` +\r\n            `z`\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicExtraRounded(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n    const dotSize = size / 7;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n        this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n        this._element.setAttribute(\r\n          \"d\",\r\n          `M ${x} ${y + 2.5 * dotSize}` +\r\n            `v ${2 * dotSize}` +\r\n            `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\r\n            `h ${2 * dotSize}` +\r\n            `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\r\n            `v ${-2 * dotSize}` +\r\n            `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\r\n            `h ${-2 * dotSize}` +\r\n            `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\r\n            `M ${x + 2.5 * dotSize} ${y + dotSize}` +\r\n            `h ${2 * dotSize}` +\r\n            `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\r\n            `v ${2 * dotSize}` +\r\n            `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\r\n            `h ${-2 * dotSize}` +\r\n            `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\r\n            `v ${-2 * dotSize}` +\r\n            `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  _drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n    this._basicDot({ x, y, size, rotation });\r\n  }\r\n\r\n  _drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n    this._basicSquare({ x, y, size, rotation });\r\n  }\r\n\r\n  _drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\r\n    this._basicExtraRounded({ x, y, size, rotation });\r\n  }\r\n}\r\n","import cornerDotTypes from \"../../../constants/cornerDotTypes\";\r\nimport { CornerDotType, RotateFigureArgs, BasicFigureDrawArgs, DrawArgs } from \"../../../types\";\r\n\r\nexport default class QRCornerDot {\r\n  _element?: SVGElement;\r\n  _svg: SVGElement;\r\n  _type: CornerDotType;\r\n\r\n  constructor({ svg, type }: { svg: SVGElement; type: CornerDotType }) {\r\n    this._svg = svg;\r\n    this._type = type;\r\n  }\r\n\r\n  draw(x: number, y: number, size: number, rotation: number): void {\r\n    const type = this._type;\r\n    let drawFunction;\r\n\r\n    switch (type) {\r\n      case cornerDotTypes.square:\r\n        drawFunction = this._drawSquare;\r\n        break;\r\n      case cornerDotTypes.dot:\r\n      default:\r\n        drawFunction = this._drawDot;\r\n    }\r\n\r\n    drawFunction.call(this, { x, y, size, rotation });\r\n  }\r\n\r\n  _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n    const cx = x + size / 2;\r\n    const cy = y + size / 2;\r\n\r\n    draw();\r\n    this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n  }\r\n\r\n  _basicDot(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n        this._element.setAttribute(\"cx\", String(x + size / 2));\r\n        this._element.setAttribute(\"cy\", String(y + size / 2));\r\n        this._element.setAttribute(\"r\", String(size / 2));\r\n      }\r\n    });\r\n  }\r\n\r\n  _basicSquare(args: BasicFigureDrawArgs): void {\r\n    const { size, x, y } = args;\r\n\r\n    this._rotateFigure({\r\n      ...args,\r\n      draw: () => {\r\n        this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n        this._element.setAttribute(\"x\", String(x));\r\n        this._element.setAttribute(\"y\", String(y));\r\n        this._element.setAttribute(\"width\", String(size));\r\n        this._element.setAttribute(\"height\", String(size));\r\n      }\r\n    });\r\n  }\r\n\r\n  _drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n    this._basicDot({ x, y, size, rotation });\r\n  }\r\n\r\n  _drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n    this._basicSquare({ x, y, size, rotation });\r\n  }\r\n}\r\n","import calculateImageSize from \"../tools/calculateImageSize\";\r\nimport errorCorrectionPercents from \"../constants/errorCorrectionPercents\";\r\nimport QRDot from \"../figures/dot/svg/QRDot\";\r\nimport QRCornerSquare from \"../figures/cornerSquare/svg/QRCornerSquare\";\r\nimport QRCornerDot from \"../figures/cornerDot/svg/QRCornerDot\";\r\nimport { RequiredOptions } from \"./QROptions\";\r\nimport gradientTypes from \"../constants/gradientTypes\";\r\nimport { QRCode, FilterFunction, Gradient } from \"../types\";\r\n\r\nconst squareMask = [\r\n  [1, 1, 1, 1, 1, 1, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 0, 0, 0, 0, 0, 1],\r\n  [1, 1, 1, 1, 1, 1, 1]\r\n];\r\n\r\nconst dotMask = [\r\n  [0, 0, 0, 0, 0, 0, 0],\r\n  [0, 0, 0, 0, 0, 0, 0],\r\n  [0, 0, 1, 1, 1, 0, 0],\r\n  [0, 0, 1, 1, 1, 0, 0],\r\n  [0, 0, 1, 1, 1, 0, 0],\r\n  [0, 0, 0, 0, 0, 0, 0],\r\n  [0, 0, 0, 0, 0, 0, 0]\r\n];\r\n\r\nexport default class QRSVG {\r\n  _element: SVGElement;\r\n  _defs: SVGElement;\r\n  _dotsClipPath?: SVGElement;\r\n  _cornersSquareClipPath?: SVGElement;\r\n  _cornersDotClipPath?: SVGElement;\r\n  _options: RequiredOptions;\r\n  _qr?: QRCode;\r\n  _image?: HTMLImageElement;\r\n\r\n  //TODO don't pass all options to this class\r\n  constructor(options: RequiredOptions) {\r\n    this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n    this._element.setAttribute(\"width\", String(options.width));\r\n    this._element.setAttribute(\"height\", String(options.height));\r\n    this._defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\r\n    this._element.appendChild(this._defs);\r\n\r\n    this._options = options;\r\n  }\r\n\r\n  get width(): number {\r\n    return this._options.width;\r\n  }\r\n\r\n  get height(): number {\r\n    return this._options.height;\r\n  }\r\n\r\n  getElement(): SVGElement {\r\n    return this._element;\r\n  }\r\n\r\n  clear(): void {\r\n    const oldElement = this._element;\r\n    this._element = oldElement.cloneNode(false) as SVGElement;\r\n    oldElement?.parentNode?.replaceChild(this._element, oldElement);\r\n    this._defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\r\n    this._element.appendChild(this._defs);\r\n  }\r\n\r\n  async drawQR(qr: QRCode): Promise<void> {\r\n    const count = qr.getModuleCount();\r\n    const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2;\r\n    const dotSize = Math.floor(minSize / count);\r\n    let drawImageSize = {\r\n      hideXDots: 0,\r\n      hideYDots: 0,\r\n      width: 0,\r\n      height: 0\r\n    };\r\n\r\n    this._qr = qr;\r\n\r\n    if (this._options.image) {\r\n      //We need it to get image size\r\n      await this.loadImage();\r\n      if (!this._image) return;\r\n      const { imageOptions, qrOptions } = this._options;\r\n      const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel];\r\n      const maxHiddenDots = Math.floor(coverLevel * count * count);\r\n\r\n      drawImageSize = calculateImageSize({\r\n        originalWidth: this._image.width,\r\n        originalHeight: this._image.height,\r\n        maxHiddenDots,\r\n        maxHiddenAxisDots: count - 14,\r\n        dotSize\r\n      });\r\n    }\r\n\r\n    this.clear();\r\n    this.drawBackground();\r\n    this.drawDots((i: number, j: number): boolean => {\r\n      if (this._options.imageOptions.hideBackgroundDots) {\r\n        if (\r\n          i >= (count - drawImageSize.hideXDots) / 2 &&\r\n          i < (count + drawImageSize.hideXDots) / 2 &&\r\n          j >= (count - drawImageSize.hideYDots) / 2 &&\r\n          j < (count + drawImageSize.hideYDots) / 2\r\n        ) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\r\n        return false;\r\n      }\r\n\r\n      if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n    this.drawCorners();\r\n\r\n    if (this._options.image) {\r\n      this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\r\n    }\r\n  }\r\n\r\n  drawBackground(): void {\r\n    const element = this._element;\r\n    const options = this._options;\r\n\r\n    if (element) {\r\n      const gradientOptions = options.backgroundOptions?.gradient;\r\n      const color = options.backgroundOptions?.color;\r\n\r\n      if (gradientOptions || color) {\r\n        this._createColor({\r\n          options: gradientOptions,\r\n          color: color,\r\n          additionalRotation: 0,\r\n          x: 0,\r\n          y: 0,\r\n          height: options.height,\r\n          width: options.width,\r\n          name: \"background-color\"\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  drawDots(filter?: FilterFunction): void {\r\n    if (!this._qr) {\r\n      throw \"QR code is not defined\";\r\n    }\r\n\r\n    const options = this._options;\r\n    const count = this._qr.getModuleCount();\r\n\r\n    if (count > options.width || count > options.height) {\r\n      throw \"The canvas is too small.\";\r\n    }\r\n\r\n    const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n    const dotSize = Math.floor(minSize / count);\r\n    const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n    const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n    const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n    this._dotsClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n    this._dotsClipPath.setAttribute(\"id\", \"clip-path-dot-color\");\r\n    this._defs.appendChild(this._dotsClipPath);\r\n\r\n    this._createColor({\r\n      options: options.dotsOptions?.gradient,\r\n      color: options.dotsOptions.color,\r\n      additionalRotation: 0,\r\n      x: xBeginning,\r\n      y: yBeginning,\r\n      height: count * dotSize,\r\n      width: count * dotSize,\r\n      name: \"dot-color\"\r\n    });\r\n\r\n    for (let i = 0; i < count; i++) {\r\n      for (let j = 0; j < count; j++) {\r\n        if (filter && !filter(i, j)) {\r\n          continue;\r\n        }\r\n        if (!this._qr?.isDark(i, j)) {\r\n          continue;\r\n        }\r\n\r\n        dot.draw(\r\n          xBeginning + i * dotSize,\r\n          yBeginning + j * dotSize,\r\n          dotSize,\r\n          (xOffset: number, yOffset: number): boolean => {\r\n            if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\r\n            if (filter && !filter(i + xOffset, j + yOffset)) return false;\r\n            return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\r\n          }\r\n        );\r\n\r\n        if (dot._element && this._dotsClipPath) {\r\n          this._dotsClipPath.appendChild(dot._element);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  drawCorners(): void {\r\n    if (!this._qr) {\r\n      throw \"QR code is not defined\";\r\n    }\r\n\r\n    const element = this._element;\r\n    const options = this._options;\r\n\r\n    if (!element) {\r\n      throw \"Element code is not defined\";\r\n    }\r\n\r\n    const count = this._qr.getModuleCount();\r\n    const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n    const dotSize = Math.floor(minSize / count);\r\n    const cornersSquareSize = dotSize * 7;\r\n    const cornersDotSize = dotSize * 3;\r\n    const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n    const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n    [\r\n      [0, 0, 0],\r\n      [1, 0, Math.PI / 2],\r\n      [0, 1, -Math.PI / 2]\r\n    ].forEach(([column, row, rotation]) => {\r\n      const x = xBeginning + column * dotSize * (count - 7);\r\n      const y = yBeginning + row * dotSize * (count - 7);\r\n      let cornersSquareClipPath = this._dotsClipPath;\r\n      let cornersDotClipPath = this._dotsClipPath;\r\n\r\n      if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\r\n        cornersSquareClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n        cornersSquareClipPath.setAttribute(\"id\", `clip-path-corners-square-color-${column}-${row}`);\r\n        this._defs.appendChild(cornersSquareClipPath);\r\n        this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath;\r\n\r\n        this._createColor({\r\n          options: options.cornersSquareOptions?.gradient,\r\n          color: options.cornersSquareOptions?.color,\r\n          additionalRotation: rotation,\r\n          x,\r\n          y,\r\n          height: cornersSquareSize,\r\n          width: cornersSquareSize,\r\n          name: `corners-square-color-${column}-${row}`\r\n        });\r\n      }\r\n\r\n      if (options.cornersSquareOptions?.type) {\r\n        const cornersSquare = new QRCornerSquare({ svg: this._element, type: options.cornersSquareOptions.type });\r\n\r\n        cornersSquare.draw(x, y, cornersSquareSize, rotation);\r\n\r\n        if (cornersSquare._element && cornersSquareClipPath) {\r\n          cornersSquareClipPath.appendChild(cornersSquare._element);\r\n        }\r\n      } else {\r\n        const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n        for (let i = 0; i < squareMask.length; i++) {\r\n          for (let j = 0; j < squareMask[i].length; j++) {\r\n            if (!squareMask[i]?.[j]) {\r\n              continue;\r\n            }\r\n\r\n            dot.draw(\r\n              x + i * dotSize,\r\n              y + j * dotSize,\r\n              dotSize,\r\n              (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n            );\r\n\r\n            if (dot._element && cornersSquareClipPath) {\r\n              cornersSquareClipPath.appendChild(dot._element);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\r\n        cornersDotClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n        cornersDotClipPath.setAttribute(\"id\", `clip-path-corners-dot-color-${column}-${row}`);\r\n        this._defs.appendChild(cornersDotClipPath);\r\n        this._cornersDotClipPath = cornersDotClipPath;\r\n\r\n        this._createColor({\r\n          options: options.cornersDotOptions?.gradient,\r\n          color: options.cornersDotOptions?.color,\r\n          additionalRotation: rotation,\r\n          x: x + dotSize * 2,\r\n          y: y + dotSize * 2,\r\n          height: cornersDotSize,\r\n          width: cornersDotSize,\r\n          name: `corners-dot-color-${column}-${row}`\r\n        });\r\n      }\r\n\r\n      if (options.cornersDotOptions?.type) {\r\n        const cornersDot = new QRCornerDot({ svg: this._element, type: options.cornersDotOptions.type });\r\n\r\n        cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\r\n\r\n        if (cornersDot._element && cornersDotClipPath) {\r\n          cornersDotClipPath.appendChild(cornersDot._element);\r\n        }\r\n      } else {\r\n        const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n        for (let i = 0; i < dotMask.length; i++) {\r\n          for (let j = 0; j < dotMask[i].length; j++) {\r\n            if (!dotMask[i]?.[j]) {\r\n              continue;\r\n            }\r\n\r\n            dot.draw(\r\n              x + i * dotSize,\r\n              y + j * dotSize,\r\n              dotSize,\r\n              (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n            );\r\n\r\n            if (dot._element && cornersDotClipPath) {\r\n              cornersDotClipPath.appendChild(dot._element);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  loadImage(): Promise<void> {\r\n    return new Promise((resolve, reject) => {\r\n      const options = this._options;\r\n      const image = new Image();\r\n\r\n      if (!options.image) {\r\n        return reject(\"Image is not defined\");\r\n      }\r\n\r\n      if (typeof options.imageOptions.crossOrigin === \"string\") {\r\n        image.crossOrigin = options.imageOptions.crossOrigin;\r\n      }\r\n\r\n      this._image = image;\r\n      image.onload = (): void => {\r\n        resolve();\r\n      };\r\n      image.src = options.image;\r\n    });\r\n  }\r\n\r\n  drawImage({\r\n    width,\r\n    height,\r\n    count,\r\n    dotSize\r\n  }: {\r\n    width: number;\r\n    height: number;\r\n    count: number;\r\n    dotSize: number;\r\n  }): void {\r\n    const options = this._options;\r\n    const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n    const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n    const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2;\r\n    const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2;\r\n    const dw = width - options.imageOptions.margin * 2;\r\n    const dh = height - options.imageOptions.margin * 2;\r\n\r\n    const image = document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\r\n    image.setAttribute(\"href\", options.image || \"\");\r\n    image.setAttribute(\"x\", String(dx));\r\n    image.setAttribute(\"y\", String(dy));\r\n    image.setAttribute(\"width\", `${dw}px`);\r\n    image.setAttribute(\"height\", `${dh}px`);\r\n\r\n    this._element.appendChild(image);\r\n  }\r\n\r\n  _createColor({\r\n    options,\r\n    color,\r\n    additionalRotation,\r\n    x,\r\n    y,\r\n    height,\r\n    width,\r\n    name\r\n  }: {\r\n    options?: Gradient;\r\n    color?: string;\r\n    additionalRotation: number;\r\n    x: number;\r\n    y: number;\r\n    height: number;\r\n    width: number;\r\n    name: string;\r\n  }): void {\r\n    const size = width > height ? width : height;\r\n    const rect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n    rect.setAttribute(\"x\", String(x));\r\n    rect.setAttribute(\"y\", String(y));\r\n    rect.setAttribute(\"height\", String(height));\r\n    rect.setAttribute(\"width\", String(width));\r\n    rect.setAttribute(\"clip-path\", `url('#clip-path-${name}')`);\r\n\r\n    if (options) {\r\n      let gradient: SVGElement;\r\n      if (options.type === gradientTypes.radial) {\r\n        gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\r\n        gradient.setAttribute(\"id\", name);\r\n        gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\r\n        gradient.setAttribute(\"fx\", String(x + width / 2));\r\n        gradient.setAttribute(\"fy\", String(y + height / 2));\r\n        gradient.setAttribute(\"cx\", String(x + width / 2));\r\n        gradient.setAttribute(\"cy\", String(y + height / 2));\r\n        gradient.setAttribute(\"r\", String(size / 2));\r\n      } else {\r\n        const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\r\n        const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\r\n        let x0 = x + width / 2;\r\n        let y0 = y + height / 2;\r\n        let x1 = x + width / 2;\r\n        let y1 = y + height / 2;\r\n\r\n        if (\r\n          (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n          (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n        ) {\r\n          x0 = x0 - width / 2;\r\n          y0 = y0 - (height / 2) * Math.tan(rotation);\r\n          x1 = x1 + width / 2;\r\n          y1 = y1 + (height / 2) * Math.tan(rotation);\r\n        } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n          y0 = y0 - height / 2;\r\n          x0 = x0 - width / 2 / Math.tan(rotation);\r\n          y1 = y1 + height / 2;\r\n          x1 = x1 + width / 2 / Math.tan(rotation);\r\n        } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n          x0 = x0 + width / 2;\r\n          y0 = y0 + (height / 2) * Math.tan(rotation);\r\n          x1 = x1 - width / 2;\r\n          y1 = y1 - (height / 2) * Math.tan(rotation);\r\n        } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n          y0 = y0 + height / 2;\r\n          x0 = x0 + width / 2 / Math.tan(rotation);\r\n          y1 = y1 - height / 2;\r\n          x1 = x1 - width / 2 / Math.tan(rotation);\r\n        }\r\n\r\n        gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\r\n        gradient.setAttribute(\"id\", name);\r\n        gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\r\n        gradient.setAttribute(\"x1\", String(Math.round(x0)));\r\n        gradient.setAttribute(\"y1\", String(Math.round(y0)));\r\n        gradient.setAttribute(\"x2\", String(Math.round(x1)));\r\n        gradient.setAttribute(\"y2\", String(Math.round(y1)));\r\n      }\r\n\r\n      options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n        const stop = document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\r\n        stop.setAttribute(\"offset\", `${100 * offset}%`);\r\n        stop.setAttribute(\"stop-color\", color);\r\n        gradient.appendChild(stop);\r\n      });\r\n\r\n      rect.setAttribute(\"fill\", `url('#${name}')`);\r\n      this._defs.appendChild(gradient);\r\n    } else if (color) {\r\n      rect.setAttribute(\"fill\", color);\r\n    }\r\n\r\n    this._element.appendChild(rect);\r\n  }\r\n}\r\n","import { DrawTypes } from \"../types\";\r\n\r\nexport default {\r\n  canvas: \"canvas\",\r\n  svg: \"svg\"\r\n} as DrawTypes;\r\n","import { TypeNumber } from \"../types\";\r\n\r\ninterface TypesMap {\r\n  [key: number]: TypeNumber;\r\n}\r\n\r\nconst qrTypes: TypesMap = {};\r\n\r\nfor (let type = 0; type <= 40; type++) {\r\n  qrTypes[type] = type as TypeNumber;\r\n}\r\n\r\n// 0 types is autodetect\r\n\r\n// types = {\r\n//     0: 0,\r\n//     1: 1,\r\n//     ...\r\n//     40: 40\r\n// }\r\n\r\nexport default qrTypes;\r\n","import { ErrorCorrectionLevel } from \"../types\";\r\n\r\ninterface ErrorCorrectionLevels {\r\n  [key: string]: ErrorCorrectionLevel;\r\n}\r\n\r\nexport default {\r\n  L: \"L\",\r\n  M: \"M\",\r\n  Q: \"Q\",\r\n  H: \"H\"\r\n} as ErrorCorrectionLevels;\r\n","import qrTypes from \"../constants/qrTypes\";\r\nimport drawTypes from \"../constants/drawTypes\";\r\nimport errorCorrectionLevels from \"../constants/errorCorrectionLevels\";\r\nimport { DotType, Options, TypeNumber, ErrorCorrectionLevel, Mode, DrawType, Gradient } from \"../types\";\r\n\r\nexport interface RequiredOptions extends Options {\r\n  type: DrawType;\r\n  width: number;\r\n  height: number;\r\n  margin: number;\r\n  data: string;\r\n  qrOptions: {\r\n    typeNumber: TypeNumber;\r\n    mode?: Mode;\r\n    errorCorrectionLevel: ErrorCorrectionLevel;\r\n  };\r\n  imageOptions: {\r\n    hideBackgroundDots: boolean;\r\n    imageSize: number;\r\n    crossOrigin?: string;\r\n    margin: number;\r\n  };\r\n  dotsOptions: {\r\n    type: DotType;\r\n    color: string;\r\n    gradient?: Gradient;\r\n  };\r\n  backgroundOptions: {\r\n    color: string;\r\n    gradient?: Gradient;\r\n  };\r\n}\r\n\r\nconst defaultOptions: RequiredOptions = {\r\n  type: drawTypes.canvas,\r\n  width: 300,\r\n  height: 300,\r\n  data: \"\",\r\n  margin: 0,\r\n  qrOptions: {\r\n    typeNumber: qrTypes[0],\r\n    mode: undefined,\r\n    errorCorrectionLevel: errorCorrectionLevels.Q\r\n  },\r\n  imageOptions: {\r\n    hideBackgroundDots: true,\r\n    imageSize: 0.4,\r\n    crossOrigin: undefined,\r\n    margin: 0\r\n  },\r\n  dotsOptions: {\r\n    type: \"square\",\r\n    color: \"#000\"\r\n  },\r\n  backgroundOptions: {\r\n    color: \"#fff\"\r\n  }\r\n};\r\n\r\nexport default defaultOptions;\r\n","import { RequiredOptions } from \"../core/QROptions\";\r\nimport { Gradient } from \"../types\";\r\n\r\nfunction sanitizeGradient(gradient: Gradient): Gradient {\r\n  const newGradient = { ...gradient };\r\n\r\n  if (!newGradient.colorStops || !newGradient.colorStops.length) {\r\n    throw \"Field 'colorStops' is required in gradient\";\r\n  }\r\n\r\n  if (newGradient.rotation) {\r\n    newGradient.rotation = Number(newGradient.rotation);\r\n  } else {\r\n    newGradient.rotation = 0;\r\n  }\r\n\r\n  newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\r\n    ...colorStop,\r\n    offset: Number(colorStop.offset)\r\n  }));\r\n\r\n  return newGradient;\r\n}\r\n\r\nexport default function sanitizeOptions(options: RequiredOptions): RequiredOptions {\r\n  const newOptions = { ...options };\r\n\r\n  newOptions.width = Number(newOptions.width);\r\n  newOptions.height = Number(newOptions.height);\r\n  newOptions.margin = Number(newOptions.margin);\r\n  newOptions.imageOptions = {\r\n    ...newOptions.imageOptions,\r\n    hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\r\n    imageSize: Number(newOptions.imageOptions.imageSize),\r\n    margin: Number(newOptions.imageOptions.margin)\r\n  };\r\n\r\n  if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\r\n    newOptions.margin = Math.min(newOptions.width, newOptions.height);\r\n  }\r\n\r\n  newOptions.dotsOptions = {\r\n    ...newOptions.dotsOptions\r\n  };\r\n  if (newOptions.dotsOptions.gradient) {\r\n    newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\r\n  }\r\n\r\n  if (newOptions.cornersSquareOptions) {\r\n    newOptions.cornersSquareOptions = {\r\n      ...newOptions.cornersSquareOptions\r\n    };\r\n    if (newOptions.cornersSquareOptions.gradient) {\r\n      newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\r\n    }\r\n  }\r\n\r\n  if (newOptions.cornersDotOptions) {\r\n    newOptions.cornersDotOptions = {\r\n      ...newOptions.cornersDotOptions\r\n    };\r\n    if (newOptions.cornersDotOptions.gradient) {\r\n      newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\r\n    }\r\n  }\r\n\r\n  if (newOptions.backgroundOptions) {\r\n    newOptions.backgroundOptions = {\r\n      ...newOptions.backgroundOptions\r\n    };\r\n    if (newOptions.backgroundOptions.gradient) {\r\n      newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\r\n    }\r\n  }\r\n\r\n  return newOptions;\r\n}\r\n","import getMode from \"../tools/getMode\";\r\nimport mergeDeep from \"../tools/merge\";\r\nimport downloadURI from \"../tools/downloadURI\";\r\nimport QRCanvas from \"./QRCanvas\";\r\nimport QRSVG from \"./QRSVG\";\r\nimport drawTypes from \"../constants/drawTypes\";\r\n\r\nimport defaultOptions, { RequiredOptions } from \"./QROptions\";\r\nimport sanitizeOptions from \"../tools/sanitizeOptions\";\r\nimport { Extension, QRCode, Options, DownloadOptions } from \"../types\";\r\nimport qrcode from \"qrcode-generator\";\r\n\r\nexport default class QRCodeStyling {\r\n  _options: RequiredOptions;\r\n  _container?: HTMLElement;\r\n  _canvas?: QRCanvas;\r\n  _svg?: QRSVG;\r\n  _qr?: QRCode;\r\n  _canvasDrawingPromise?: Promise<void>;\r\n  _svgDrawingPromise?: Promise<void>;\r\n\r\n  constructor(options?: Partial<Options>) {\r\n    this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;\r\n    this.update();\r\n  }\r\n\r\n  static _clearContainer(container?: HTMLElement): void {\r\n    if (container) {\r\n      container.innerHTML = \"\";\r\n    }\r\n  }\r\n\r\n  async _getQRStylingElement(extension: Extension = \"png\"): Promise<QRCanvas | QRSVG> {\r\n    if (!this._qr) throw \"QR code is empty\";\r\n\r\n    if (extension.toLowerCase() === \"svg\") {\r\n      let promise, svg: QRSVG;\r\n\r\n      if (this._svg && this._svgDrawingPromise) {\r\n        svg = this._svg;\r\n        promise = this._svgDrawingPromise;\r\n      } else {\r\n        svg = new QRSVG(this._options);\r\n        promise = svg.drawQR(this._qr);\r\n      }\r\n\r\n      await promise;\r\n\r\n      return svg;\r\n    } else {\r\n      let promise, canvas: QRCanvas;\r\n\r\n      if (this._canvas && this._canvasDrawingPromise) {\r\n        canvas = this._canvas;\r\n        promise = this._canvasDrawingPromise;\r\n      } else {\r\n        canvas = new QRCanvas(this._options);\r\n        promise = canvas.drawQR(this._qr);\r\n      }\r\n\r\n      await promise;\r\n\r\n      return canvas;\r\n    }\r\n  }\r\n\r\n  update(options?: Partial<Options>): void {\r\n    QRCodeStyling._clearContainer(this._container);\r\n    this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;\r\n\r\n    if (!this._options.data) {\r\n      return;\r\n    }\r\n\r\n    this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel);\r\n    this._qr.addData(this._options.data, this._options.qrOptions.mode || getMode(this._options.data));\r\n    this._qr.make();\r\n\r\n    if (this._options.type === drawTypes.canvas) {\r\n      this._canvas = new QRCanvas(this._options);\r\n      this._canvasDrawingPromise = this._canvas.drawQR(this._qr);\r\n      this._svgDrawingPromise = undefined;\r\n      this._svg = undefined;\r\n    } else {\r\n      this._svg = new QRSVG(this._options);\r\n      this._svgDrawingPromise = this._svg.drawQR(this._qr);\r\n      this._canvasDrawingPromise = undefined;\r\n      this._canvas = undefined;\r\n    }\r\n\r\n    this.append(this._container);\r\n  }\r\n\r\n  append(container?: HTMLElement): void {\r\n    if (!container) {\r\n      return;\r\n    }\r\n\r\n    if (typeof container.appendChild !== \"function\") {\r\n      throw \"Container should be a single DOM node\";\r\n    }\r\n\r\n    if (this._options.type === drawTypes.canvas) {\r\n      if (this._canvas) {\r\n        container.appendChild(this._canvas.getCanvas());\r\n      }\r\n    } else {\r\n      if (this._svg) {\r\n        container.appendChild(this._svg.getElement());\r\n      }\r\n    }\r\n\r\n    this._container = container;\r\n  }\r\n\r\n  async getRawData(extension: Extension = \"png\"): Promise<Blob | null> {\r\n    if (!this._qr) throw \"QR code is empty\";\r\n    const element = await this._getQRStylingElement(extension);\r\n\r\n    if (extension.toLowerCase() === \"svg\") {\r\n      const serializer = new XMLSerializer();\r\n      const source = serializer.serializeToString(((element as unknown) as QRSVG).getElement());\r\n\r\n      return new Blob(['<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source], { type: \"image/svg+xml\" });\r\n    } else {\r\n      return new Promise((resolve) =>\r\n        ((element as unknown) as QRCanvas).getCanvas().toBlob(resolve, `image/${extension}`, 1)\r\n      );\r\n    }\r\n  }\r\n\r\n  async download(downloadOptions?: Partial<DownloadOptions> | string): Promise<void> {\r\n    if (!this._qr) throw \"QR code is empty\";\r\n    let extension = \"png\" as Extension;\r\n    let name = \"qr\";\r\n\r\n    //TODO remove deprecated code in the v2\r\n    if (typeof downloadOptions === \"string\") {\r\n      extension = downloadOptions as Extension;\r\n      console.warn(\r\n        \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\r\n      );\r\n    } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\r\n      if (downloadOptions.name) {\r\n        name = downloadOptions.name;\r\n      }\r\n      if (downloadOptions.extension) {\r\n        extension = downloadOptions.extension;\r\n      }\r\n    }\r\n\r\n    const element = await this._getQRStylingElement(extension);\r\n\r\n    if (extension.toLowerCase() === \"svg\") {\r\n      const serializer = new XMLSerializer();\r\n      let source = serializer.serializeToString(((element as unknown) as QRSVG).getElement());\r\n\r\n      source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\r\n      const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\r\n      downloadURI(url, `${name}.svg`);\r\n    } else {\r\n      const url = ((element as unknown) as QRCanvas).getCanvas().toDataURL(`image/${extension}`);\r\n      downloadURI(url, `${name}.${extension}`);\r\n    }\r\n  }\r\n}\r\n","import { AsyncSubject } from 'rxjs';\r\n\r\nimport { Options } from './blinked-qrcode.options';\r\nimport { Templates } from './blinked-qrcode.templates';\r\nimport QRCodeStyling from './qr-styling/qr-styling';\r\n/**\r\n * drawQrcode\r\n * @param config\r\n * @param container\r\n * @returns\r\n */\r\nexport function drawQrcode(config: Options, container: HTMLElement | HTMLVideoElement | HTMLCanvasElement | SVGElement | any) {\r\n    const subject = new AsyncSubject();\r\n    // Reject\r\n    if (!config || !container) {\r\n        subject.error('Container or Config not available!');\r\n        subject.complete();\r\n        return subject;\r\n    }\r\n    ;\r\n    const element = document.createElement(\"div\");\r\n    /**\r\n     * QRCODE_NONE_FRAME\r\n     * @returns\r\n     */\r\n    const QRCODE_NONE_FRAME = () => {\r\n        if (config?.frameOptions) {\r\n            return false;\r\n        }\r\n        else {\r\n            const encodeConfig = () => {\r\n                let deep = config && JSON.parse(JSON.stringify(config)); // deep\r\n                return Object.assign({ data: window.unescape(encodeURIComponent(deep?.data ?? '')) }, deep);\r\n            };\r\n            // removeChild\r\n            while (container.firstChild) {\r\n                container.removeChild(container.lastChild);\r\n            }\r\n            const CR = new QRCodeStyling(encodeConfig());\r\n            // append to container\r\n            CR.append(container);\r\n            return true;\r\n        }\r\n    };\r\n    const frameName = config?.frameOptions?.name ?? '';\r\n    const frameTemp = config?.frameOptions?.style ?? '';\r\n    const height = config?.frameOptions?.height ?? 300;\r\n    const width = config?.frameOptions?.width ?? 300;\r\n    const x = config?.frameOptions?.x ?? 50;\r\n    const y = config?.frameOptions?.y ?? 50;\r\n    /**\r\n     * ADD_FRAME_SVG_TO_ELEMENT\r\n     * @returns\r\n     */\r\n    const ADD_FRAME_SVG_TO_ELEMENT = () => {\r\n        // const http = fetch(`https://cdn.jsdelivr.net/gh/id1945/ngx-qrcode-styling/svg/1.2.9/${styleName}.svg`, { method: 'GET' });\r\n        // return new Promise((resolve, reject) => {\r\n        //     http.then(response => response.text()).then(result => {\r\n\r\n        //         resolve(styleName);\r\n        //     }).catch(error => {\r\n        //         console.error(error);\r\n        //         reject(error);\r\n        //     });\r\n        // });\r\n        console.log(frameName);\r\n        console.log(frameTemp);\r\n        \r\n        if (frameTemp !== \"\") {\r\n            upgradeSvg(frameTemp);\r\n        }\r\n    };\r\n    const upgradeSvg = (result: string) => {\r\n        const parser = new DOMParser();\r\n        const doc = parser.parseFromString(result, \"image/svg+xml\");\r\n        if (doc) {\r\n            const svgEl = (doc.documentElement.children as any)?.[frameName + '_svg'];\r\n            if (!svgEl)\r\n                return;\r\n            const textEls = svgEl.getElementsByClassName(\"frame-text\");\r\n            const contentEls = svgEl.getElementsByClassName(\"frame-content\");\r\n            const containerEls = svgEl.getElementsByClassName(\"frame-container\");\r\n            config?.frameOptions?.background && svgEl.setAttribute('style', `background: ${config?.frameOptions?.background};${svgEl?.getAttribute('style')}`);\r\n            const updateStyle = (el: any, config: any) => {\r\n                if (el) {\r\n                    for (const key in config) {\r\n                        if (['x', 'y', 'transform'].includes(key)) {\r\n                            el.setAttribute(key, config && config[key]);\r\n                        }\r\n                        else if (['textContent'].includes(key)) {\r\n                            el[key] = config && config[key];\r\n                        }\r\n                        else {\r\n                            el.style[key] = config && config[key];\r\n                        }\r\n                    }\r\n                }\r\n            };\r\n            const createElementNS = (config: any) => {\r\n                const svgNS = \"http://www.w3.org/2000/svg\";\r\n                const newText = document.createElementNS(svgNS, \"text\");\r\n                updateStyle(newText, config);\r\n                svgEl.appendChild(newText);\r\n            };\r\n            if (config?.frameOptions?.texts) {\r\n                [...config.frameOptions.texts].forEach((text, i) => {\r\n                    const el = [...textEls]?.[i];\r\n                    el ? updateStyle(el, text) : createElementNS(text);\r\n                });\r\n            }\r\n            if (config?.frameOptions?.containers) {\r\n                [...containerEls].forEach((el, i) => {\r\n                    updateStyle(el, config?.frameOptions?.containers?.[i]);\r\n                });\r\n            }\r\n            if (config?.frameOptions?.contents) {\r\n                [...contentEls].forEach((el, i) => {\r\n                    updateStyle(el, config?.frameOptions?.contents?.[i]);\r\n                });\r\n            }\r\n            element.appendChild(doc.documentElement);\r\n        }\r\n    };\r\n    /**\r\n     * UPDATE_POSITION_QRCODE_ON_FRAME\r\n     * @returns HTMLElement\r\n     */\r\n    const UPDATE_POSITION_QRCODE_ON_FRAME = () => {\r\n        const after = element.querySelector('.ngx_qrcode_styling_after');\r\n        if (after && config?.zIndex === 1) {\r\n            after?.setAttribute(\"transform\", `translate(${x},${y})`);\r\n            return after;\r\n        }\r\n        const before = element.querySelector('.ngx_qrcode_styling_before');\r\n        before?.setAttribute(\"transform\", `translate(${x},${y})`);\r\n        return before;\r\n    };\r\n    /**\r\n     * UPDATE_ROTATE_SCALE_QRCODE_ON_FRAME\r\n     * @param svg\r\n     * @returns void\r\n     */\r\n    const UPDATE_ROTATE_SCALE_QRCODE_ON_FRAME = (svg: any) => {\r\n        if (svg && config?.rotate) {\r\n            svg?.childNodes?.[0]?.childNodes?.forEach((node: any) => {\r\n                if (node.nodeName === 'rect') {\r\n                    node.style.transformOrigin = `50% 50%`;\r\n                    node.style.transform = `rotate(${config?.rotate ?? 0}deg)`;\r\n                }\r\n            });\r\n        }\r\n        if (svg && config?.scale) {\r\n            svg?.childNodes?.[0]?.childNodes?.forEach((node: any) => {\r\n                if (node.nodeName === 'rect') {\r\n                    node.style.scale = config?.scale ?? 0;\r\n                }\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * CREATE_QRCODE_INTO_FRAME\r\n     * @param addsvg\r\n     * @returns\r\n     */\r\n    const CREATE_QRCODE_INTO_FRAME = (addsvg: any) => {\r\n        const defaultConfig = () => {\r\n            let deep = config && JSON.parse(JSON.stringify(config)); // deep\r\n            deep = { ...deep, ...{ type: 'svg', data: window.unescape(encodeURIComponent(deep?.data ?? '')) } };\r\n            delete deep.frameOptions;\r\n            delete deep.template;\r\n            return deep;\r\n        };\r\n        // removeChild\r\n        while (container?.firstChild) {\r\n            container.removeChild(container.lastChild);\r\n        }\r\n        const CR = new QRCodeStyling(defaultConfig());\r\n        return CR?._svgDrawingPromise?.then(() => {\r\n            CR.append(addsvg);\r\n        }).catch((error) => console.error(error));\r\n    };\r\n    /**\r\n     * QRCODE_TYPE_SVG\r\n     * @returns\r\n     */\r\n    const QRCODE_TYPE_SVG = () => {\r\n        if (config?.type === 'svg') {\r\n            UPDATE_SIZE_SVG();\r\n            container.appendChild(element);\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * CREATE_CANVAS_WITH_SIZE\r\n     * @returns\r\n     */\r\n    const CREATE_CANVAS_WITH_SIZE = () => {\r\n        const canvas = document.createElement('canvas');\r\n        canvas.height = height;\r\n        canvas.width = width;\r\n        container.appendChild(canvas);\r\n        return canvas;\r\n    };\r\n    /**\r\n     * ELEMENT_CONVERT_TO_BASE64\r\n     * @param s1\r\n     * @returns\r\n     */\r\n    const ELEMENT_CONVERT_TO_BASE64 = (s1: any) => {\r\n        let b64 = \"data:image/svg+xml;base64,\";\r\n        const xml = s1 && new XMLSerializer().serializeToString(s1);\r\n        return b64 += xml && btoa(unescape(encodeURIComponent(xml)));\r\n    };\r\n    /**\r\n     * UPDATE_SIZE_SVG\r\n     * @returns\r\n     */\r\n    const UPDATE_SIZE_SVG = () => {\r\n        const s1 = element.querySelector(`#${frameName}_svg`);\r\n        s1 && s1.setAttribute('height', `${height}px`);\r\n        s1 && s1.setAttribute('width', `${width}px`);\r\n        return s1;\r\n    };\r\n    /**\r\n     * BASE64_TO_BLOB\r\n     * @param base64Image\r\n     * @returns\r\n     */\r\n    const BASE64_TO_BLOB = (base64Image: any) => {\r\n        // Split into two parts\r\n        const parts = base64Image.split(\";base64,\");\r\n        // Hold the content type\r\n        const imageType = parts[0].split(\":\")[1];\r\n        // Decode Base64 string\r\n        const decodedData = window.atob(parts[1]);\r\n        // Create UNIT8ARRAY of size same as row data length\r\n        const uInt8Array = new Uint8Array(decodedData.length);\r\n        // Insert all character code into uInt8Array\r\n        for (let i = 0; i < decodedData.length; ++i) {\r\n            uInt8Array[i] = decodedData.charCodeAt(i);\r\n        }\r\n        // Return BLOB image after conversion\r\n        return new Blob([uInt8Array], { type: imageType });\r\n    };\r\n    /**\r\n     * CREATE_IMAGE\r\n     */\r\n    const CREATE_IMAGE = () => {\r\n        const img = new Image();\r\n        const ctx = CREATE_CANVAS_WITH_SIZE().getContext(\"2d\");\r\n        img.onload = function () {\r\n            ctx && ctx.drawImage(img, 0, 0);\r\n        };\r\n        const blob = BASE64_TO_BLOB(ELEMENT_CONVERT_TO_BASE64(UPDATE_SIZE_SVG()));\r\n        const blobUrl = URL.createObjectURL(blob);\r\n        img.src = blobUrl;\r\n    };\r\n    /**\r\n     * MAIN\r\n     */\r\n    (async function () {\r\n        if (QRCODE_NONE_FRAME()) {\r\n            subject.next({ config, container });\r\n            subject.complete();\r\n            return; // Mode qrcode basic\r\n        }\r\n        else {\r\n            await ADD_FRAME_SVG_TO_ELEMENT();\r\n            const ADDSVG = UPDATE_POSITION_QRCODE_ON_FRAME();\r\n            await CREATE_QRCODE_INTO_FRAME(ADDSVG);\r\n            UPDATE_ROTATE_SCALE_QRCODE_ON_FRAME(ADDSVG);\r\n            if (QRCODE_TYPE_SVG()) {\r\n                // Mode qrcode + frame type svg\r\n                subject.next({ config, container });\r\n                subject.complete();\r\n            }\r\n            else {\r\n                // Mode qrcode + frame type canvas\r\n                CREATE_IMAGE();\r\n                subject.next({ config, container });\r\n                subject.complete();\r\n            }\r\n        }\r\n    })();\r\n    return subject;\r\n}\r\n/**\r\n * defaultTemplate\r\n * @param config\r\n * @returns\r\n */\r\nexport const defaultTemplate = (config: any) => {\r\n    let deep = config && JSON.parse(JSON.stringify(config));\r\n    return config?.template ? { ...Templates(config.template.toLocaleLowerCase()), ...deep } : deep;\r\n};\r\n/**\r\n * deepUpdate\r\n * @param config\r\n * @param configUpdate\r\n * @returns\r\n */\r\nexport const deepUpdate = async (config: any, configUpdate: any) => {\r\n    const origin = config && JSON.parse(JSON.stringify(config));\r\n    let clone = { ...origin, ...configUpdate };\r\n    const keys = ['frameOptions', 'qrOptions', 'imageOptions', 'dotsOptions', 'cornersSquareOptions', 'cornersDotOptions', 'backgroundOptions'];\r\n    for await (const key of keys) {\r\n        if (key in configUpdate) {\r\n            const update = {\r\n                [key]: { ...origin[key], ...configUpdate[key] }\r\n            };\r\n            clone = { ...clone, ...update };\r\n        }\r\n    }\r\n    return clone;\r\n};","import { Injectable } from '@angular/core';\r\nimport { AsyncSubject } from 'rxjs';\r\n\r\nimport { deepUpdate, defaultTemplate, drawQrcode } from './blinked-qrcode.helper';\r\nimport { Options } from './blinked-qrcode.options';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class BlinkedQrService {\r\n\r\n  /**\r\n    * create\r\n    * @param config \r\n    * @param container \r\n    * @returns \r\n    */\r\n  public create(config: Options, container: HTMLElement | HTMLVideoElement | HTMLCanvasElement | SVGElement | any): AsyncSubject<any> {\r\n    return drawQrcode(defaultTemplate(config), container);\r\n  }\r\n\r\n  /**\r\n   * update\r\n   * @param config \r\n   * @param configUpdate \r\n   * @param container \r\n   * @returns \r\n   */\r\n  public update(config: Options, configUpdate: Options, container: HTMLElement | HTMLVideoElement | HTMLCanvasElement | SVGElement | any): AsyncSubject<any> {\r\n    const subject = new AsyncSubject();\r\n    (async function () {\r\n      const conf = await deepUpdate(defaultTemplate(config), defaultTemplate(configUpdate));\r\n      drawQrcode(conf, container).subscribe(s => {\r\n        subject.next(s);\r\n        subject.complete();\r\n      });\r\n    })();\r\n    return subject;\r\n  }\r\n\r\n  /**\r\n   * download image\r\n   * @param fileName eg: demo.png\r\n   * @param container \r\n   * @param timeout \r\n   * @returns \r\n   */\r\n  public download(fileName: string, container: HTMLElement | HTMLVideoElement | HTMLCanvasElement | SVGElement | any, timeout = 100): AsyncSubject<any> {\r\n    const subject = new AsyncSubject();\r\n    setTimeout(() => {\r\n      const canvas = container?.querySelector('canvas')\r\n      const dataURL = canvas?.toDataURL(`image/${fileName?.split('.')?.slice(-1)?.toString()}`);\r\n      const link = document.createElement('a');\r\n      link.download = fileName;\r\n      link.href = dataURL;\r\n      link.click();\r\n      subject.next({ fileName, container });\r\n      subject.complete();\r\n    }, timeout);\r\n    return subject;\r\n  }\r\n\r\n\r\n  /**\r\n   * download image\r\n   * @param fileName eg: demo.png\r\n   * @param container \r\n   * @param timeout \r\n   * @returns \r\n   */\r\n  public getBase64(fileName: string, container: HTMLElement | HTMLVideoElement | HTMLCanvasElement | SVGElement | any, timeout = 100): AsyncSubject<any> {\r\n    const subject = new AsyncSubject();\r\n    setTimeout(() => {\r\n      const canvas = container?.querySelector('canvas')\r\n      const dataURL = canvas?.toDataURL(`image/${fileName?.split('.')?.slice(-1)?.toString()}`);\r\n\r\n      subject.next({ dataURL });\r\n      subject.complete();\r\n    }, timeout);\r\n    return subject;\r\n  }\r\n\r\n  /**\r\n   * download image\r\n   * @param fileName eg: demo.png\r\n   * @param container\r\n   * @param timeout\r\n   * @returns\r\n   */\r\n  download2(container: any, fileName = '', timeout = 0) {\r\n    const subject = new AsyncSubject();\r\n    const _fileName = (type: any) => {\r\n      if (!fileName) {\r\n        fileName = `ngx_qrcode_styling_${Date.now()}.${type}`;\r\n      }\r\n    };\r\n    const _download = (dataURL: any) => {\r\n      const link = document.createElement('a');\r\n      link.download = fileName;\r\n      link.href = dataURL;\r\n      link.click();\r\n      link.remove();\r\n    };\r\n    const _complete = (url: any) => {\r\n      if (url) {\r\n        _download(url);\r\n        subject.next({ fileName, container, url: url });\r\n        subject.complete();\r\n      }\r\n      else {\r\n        subject.error('Container not found!');\r\n        subject.complete();\r\n      }\r\n    };\r\n    setTimeout(() => {\r\n      const canvas = container?.querySelector('canvas');\r\n      if (canvas) {\r\n        _fileName('png');\r\n        const typeImg = fileName ? fileName?.split('.')?.slice(-1)?.toString() : 'png';\r\n        canvas.toBlob((blob: any) => _complete(URL.createObjectURL(blob)), 'image/' + typeImg);\r\n      }\r\n      else {\r\n        const svg = container?.querySelector('svg');\r\n        if (svg) {\r\n          _fileName('svg');\r\n          const svgData = svg.outerHTML;\r\n          const svgBlob = new Blob([svgData], { type: \"image/svg+xml;charset=utf-8\" });\r\n          const svgUrl = URL.createObjectURL(svgBlob);\r\n          _complete(svgUrl);\r\n        }\r\n        else {\r\n          _complete('');\r\n        }\r\n      }\r\n    }, timeout);\r\n    return subject;\r\n  }\r\n}\r\n","import { Component, ElementRef, Input, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { AsyncSubject } from 'rxjs';\r\n\r\nimport {\r\n  CornerDotType,\r\n  CornerSquareType,\r\n  DotType,\r\n  DrawType,\r\n  ErrorCorrectionLevel,\r\n  FrameStyle,\r\n  Gradient,\r\n  Mode,\r\n  Options,\r\n  ShapeType,\r\n  TemplateType,\r\n  TypeNumber,\r\n  UnknownObject,\r\n} from './blinked-qrcode.options';\r\nimport { BlinkedQrService } from './blinked-qrcode.service';\r\n\r\n@Component({\r\n  selector: 'blinked-qr',\r\n  template: '<ng-content></ng-content>',\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class BlinkedQrComponent implements OnInit {\r\n\r\n  /**\r\n   * Options\r\n   */\r\n  @Input()\r\n  public config!: Options;\r\n\r\n  /**\r\n   * TemplateType\r\n   */\r\n  @Input()\r\n  public template: TemplateType = 'default';\r\n\r\n  /**\r\n   * DrawType\r\n   */\r\n  @Input()\r\n  public type!: DrawType;\r\n\r\n  /**\r\n   * ShapeType\r\n   */\r\n  @Input()\r\n  public shape!: ShapeType;\r\n\r\n  /**\r\n  * number\r\n  */\r\n  @Input()\r\n  public width!: number;\r\n\r\n  /**\r\n * number\r\n */\r\n  @Input()\r\n  public scale!: number;\r\n\r\n  /**\r\n   * number\r\n   */\r\n  @Input()\r\n  public rotate!: number;\r\n\r\n  /**\r\n   * number\r\n   */\r\n  @Input()\r\n  public height!: number;\r\n\r\n  /**\r\n   * number\r\n   */\r\n  @Input()\r\n  public margin!: number;\r\n\r\n  @Input()\r\n  public zIndex!: number;\r\n\r\n  /**\r\n   * string\r\n   */\r\n  @Input()\r\n  public data!: string;\r\n\r\n  /**\r\n   * string\r\n   */\r\n  @Input()\r\n  public image!: string;\r\n\r\n  /**\r\n   * object\r\n   */\r\n  @Input()\r\n  public frameOptions!: {\r\n    style?: FrameStyle;\r\n    height?: number;\r\n    width?: number;\r\n    x?: number;\r\n    y?: number;\r\n    background?: string;\r\n    texts?: UnknownObject[];\r\n    contents?: UnknownObject[];\r\n    containers?: UnknownObject[];\r\n  };\r\n\r\n  /**\r\n   * object\r\n   */\r\n  @Input()\r\n  qrOptions!: {\r\n    typeNumber?: TypeNumber;\r\n    mode?: Mode;\r\n    errorCorrectionLevel?: ErrorCorrectionLevel;\r\n  };\r\n\r\n  /**\r\n   * object\r\n   */\r\n  @Input()\r\n  imageOptions!: {\r\n    hideBackgroundDots?: boolean;\r\n    imageSize?: number;\r\n    crossOrigin?: string;\r\n    margin?: number;\r\n  };\r\n\r\n  /**\r\n   * object\r\n   */\r\n  @Input()\r\n  dotsOptions!: {\r\n    type?: DotType;\r\n    color?: string;\r\n    gradient?: Gradient;\r\n  };\r\n\r\n  /**\r\n   * object\r\n   */\r\n  @Input()\r\n  cornersSquareOptions!: {\r\n    type?: CornerSquareType;\r\n    color?: string;\r\n    gradient?: Gradient;\r\n  };\r\n\r\n  /**\r\n   * object\r\n   */\r\n  @Input()\r\n  cornersDotOptions!: {\r\n    type?: CornerDotType;\r\n    color?: string;\r\n    gradient?: Gradient;\r\n  };\r\n\r\n  /**\r\n   * object\r\n   */\r\n  @Input()\r\n  backgroundOptions!: {\r\n    round?: number;\r\n    color?: string;\r\n    gradient?: Gradient;\r\n  };\r\n\r\n  constructor(\r\n    private canvas: ElementRef,\r\n    private service: BlinkedQrService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    if (this.canvas) {\r\n      /**\r\n       * @Input override\r\n       */\r\n      if (this.template)\r\n        this.config = {\r\n          ...this.config,\r\n          template: this.template\r\n        };\r\n      if (this.type)\r\n        this.config = {\r\n          ...this.config,\r\n          type: this.type\r\n        };\r\n      if (this.shape)\r\n        this.config = {\r\n          ...this.config,\r\n          shape: this.shape\r\n        };\r\n      if (this.width)\r\n        this.config = {\r\n          ...this.config,\r\n          width: this.width\r\n        };\r\n      if (this.height)\r\n        this.config = {\r\n          ...this.config,\r\n          height: this.height\r\n        };\r\n      if (this.margin)\r\n        this.config = {\r\n          ...this.config,\r\n          margin: this.margin\r\n        };\r\n      if (this.data)\r\n        this.config = {\r\n          ...this.config,\r\n          data: this.data\r\n        };\r\n      if (this.image)\r\n        this.config = {\r\n          ...this.config,\r\n          image: this.image\r\n        };\r\n      if (this.scale)\r\n        this.config = {\r\n          ...this.config,\r\n          scale: this.scale\r\n        };\r\n      if (this.rotate)\r\n        this.config = {\r\n          ...this.config,\r\n          rotate: this.rotate\r\n        };\r\n      if (this.zIndex)\r\n        this.config = {\r\n          ...this.config,\r\n          zIndex: this.zIndex\r\n        };\r\n      if (this.frameOptions)\r\n        this.config = {\r\n          ...this.config,\r\n          frameOptions: this.frameOptions\r\n        };\r\n      if (this.qrOptions)\r\n        this.config = {\r\n          ...this.config,\r\n          qrOptions: this.qrOptions\r\n        };\r\n      if (this.imageOptions)\r\n        this.config = {\r\n          ...this.config,\r\n          imageOptions: this.imageOptions\r\n        };\r\n      if (this.dotsOptions)\r\n        this.config = {\r\n          ...this.config,\r\n          dotsOptions: this.dotsOptions\r\n        };\r\n      if (this.cornersSquareOptions)\r\n        this.config = {\r\n          ...this.config,\r\n          cornersSquareOptions: this.cornersSquareOptions\r\n        };\r\n      if (this.cornersDotOptions)\r\n        this.config = {\r\n          ...this.config,\r\n          cornersDotOptions: this.cornersDotOptions\r\n        };\r\n      if (this.backgroundOptions)\r\n        this.config = {\r\n          ...this.config,\r\n          backgroundOptions: this.backgroundOptions\r\n        };\r\n      this.create(this.config);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * create\r\n   * @param config \r\n   * @returns \r\n   */\r\n  public create(config: Options): AsyncSubject<any> {\r\n    return this.service.create(config, this.canvas.nativeElement);\r\n  }\r\n\r\n  /**\r\n   * update\r\n   * @param config \r\n   * @param configUpdate \r\n   * @returns \r\n   */\r\n  public update(config: Options, configUpdate: Options): AsyncSubject<any> {\r\n    // console.log(config);\r\n    return this.service.update(config, configUpdate, this.canvas.nativeElement);\r\n  }\r\n\r\n\r\n  // ngOnChanges(changes: SimpleChanges) {\r\n  //   // console.log(changes);\r\n\r\n  //   /**\r\n  //    * @Input override\r\n  //    */\r\n  //   if (this.template)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       template: this.template\r\n  //     };\r\n\r\n  //   if (this.type)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       type: this.type\r\n  //     };\r\n\r\n  //   if (this.shape)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       shape: this.shape\r\n  //     };\r\n\r\n  //   if (this.width)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       width: this.width\r\n  //     };\r\n\r\n  //   if (this.height)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       height: this.height\r\n  //     };\r\n\r\n  //   if (this.margin)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       margin: this.margin\r\n  //     };\r\n\r\n  //   if (this.data)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       data: (window as any).unescape(encodeURIComponent(this.data))\r\n  //     };\r\n\r\n  //   if (this.image)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       image: this.image\r\n  //     };\r\n\r\n  //   if (this.frameOptions)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       frameOptions: this.frameOptions\r\n  //     };\r\n\r\n  //   if (this.qrOptions)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       qrOptions: this.qrOptions\r\n  //     };\r\n\r\n  //   if (this.imageOptions)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       imageOptions: this.imageOptions\r\n  //     };\r\n\r\n  //   if (this.dotsOptions)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       dotsOptions: this.dotsOptions\r\n  //     };\r\n\r\n  //   if (this.cornersSquareOptions)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       cornersSquareOptions: this.cornersSquareOptions\r\n  //     };\r\n\r\n  //   if (this.cornersDotOptions)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       cornersDotOptions: this.cornersDotOptions\r\n  //     };\r\n\r\n  //   if (this.backgroundOptions)\r\n  //     this.config = {\r\n  //       ...this.config,\r\n  //       backgroundOptions: this.backgroundOptions\r\n  //     };\r\n  //   this.service.update(this.config, this.config, this.canvas.nativeElement);\r\n  // }\r\n\r\n  /**\r\n   * download image\r\n   * @param fileName eg: demo.png\r\n   * @param timeout \r\n   * @returns \r\n   */\r\n  public download(fileName: string, timeout = 100): AsyncSubject<any> {\r\n    return this.service.download(fileName, this.canvas.nativeElement, timeout);\r\n  }\r\n\r\n  /**\r\n  * download image\r\n  * @param fileName eg: demo.png\r\n  * @param timeout \r\n  * @returns \r\n  */\r\n  public getBase64(fileName: string, timeout = 100): AsyncSubject<any> {\r\n    return this.service.getBase64(fileName, this.canvas.nativeElement, timeout);\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { BlinkedQrComponent } from './blinked-qrcode.component';\r\nimport { BlinkedQrService } from './blinked-qrcode.service';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    BlinkedQrComponent\r\n  ],\r\n  exports: [\r\n    BlinkedQrComponent\r\n  ],\r\n  providers: [\r\n    BlinkedQrService\r\n  ]\r\n})\r\nexport class BlinkedQrModule { }\r\n","/*\r\n * Public API Surface of ngx-qrcode-styling\r\n */\r\n\r\nexport * from './lib/blinked-qrcode.templates';\r\nexport * from './lib/blinked-qrcode.options';\r\nexport * from './lib/blinked-qrcode.service';\r\nexport * from './lib/blinked-qrcode.component';\r\nexport * from './lib/blinked-qrcode.module';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["squareMask","dotMask","QRDot","QRCornerSquare","QRCornerDot","i1.BlinkedQrService"],"mappings":"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"}