{"version":3,"file":"angular-canvas-base.mjs","sources":["../../../projects/angular-canvas-base/src/lib/classes/canvas-path.ts","../../../projects/angular-canvas-base/src/lib/classes/fill-style.ts","../../../projects/angular-canvas-base/src/lib/classes/canvas.ts","../../../projects/angular-canvas-base/src/lib/classes/canvas-filter.ts","../../../projects/angular-canvas-base/src/lib/classes/canvas-font.ts","../../../projects/angular-canvas-base/src/lib/classes/point.ts","../../../projects/angular-canvas-base/src/lib/classes/rect.ts","../../../projects/angular-canvas-base/src/lib/classes/shadow-style.ts","../../../projects/angular-canvas-base/src/lib/classes/stroke-style.ts","../../../projects/angular-canvas-base/src/lib/enums/canvas-draw-mode.enum.ts","../../../projects/angular-canvas-base/src/lib/canvas-base-component.ts","../../../projects/angular-canvas-base/src/lib/canvas-base.module.ts","../../../projects/angular-canvas-base/src/public-api.ts","../../../projects/angular-canvas-base/src/angular-canvas-base.ts"],"sourcesContent":["import { ICanvasPath } from '../interfaces/canvas-path.interface';\r\n\r\nexport class CanvasPath implements ICanvasPath {\r\n    protected pathOpen = false;\r\n\r\n    constructor(protected context: CanvasRenderingContext2D,\r\n                protected pixelRatio: number) {\r\n    }\r\n\r\n    public isPathOpen(): boolean {\r\n        return this.pathOpen;\r\n    }\r\n\r\n    /**\r\n     * Begin a new path. Only available if there is no path open yet.\r\n     */\r\n    public begin(): void {\r\n        if (this.pathOpen) {\r\n            return;\r\n        }\r\n\r\n        this.pathOpen = true;\r\n        this.context.beginPath();\r\n    }\r\n\r\n    public arcTo(x: number, y: number, x2: number, y2: number, radius: number): ICanvasPath {\r\n        this.context.arcTo(x * this.pixelRatio, y * this.pixelRatio, x2 * this.pixelRatio, y2 * this.pixelRatio, radius * this.pixelRatio);\r\n        return this;\r\n    }\r\n\r\n    public moveTo(x: number, y: number): ICanvasPath {\r\n        this.context.moveTo(x * this.pixelRatio, y * this.pixelRatio);\r\n        return this;\r\n    }\r\n\r\n    public lineTo(x: number, y: number): ICanvasPath {\r\n        this.context.lineTo(x * this.pixelRatio, y * this.pixelRatio);\r\n        return this;\r\n    }\r\n\r\n    public quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): ICanvasPath {\r\n        this.context.quadraticCurveTo(cpx * this.pixelRatio, cpy * this.pixelRatio, x * this.pixelRatio, y * this.pixelRatio);\r\n        return this;\r\n    }\r\n\r\n    public close(fill: boolean, stroke: boolean): void {\r\n        this.context.closePath();\r\n        this.pathOpen = false;\r\n\r\n        if (fill) {\r\n            this.context.fill();\r\n        }\r\n\r\n        if (stroke) {\r\n            this.context.stroke();\r\n        }\r\n    }\r\n}\r\n","/**\r\n * Represents one color step for a gradient.\r\n */\r\nexport interface IColorStep {\r\n    offset: number;\r\n    color: string;\r\n}\r\n\r\n/**\r\n * Define the current fill style of the canvas.\r\n */\r\nexport class FillStyle {\r\n    public value: string | CanvasGradient | CanvasPattern | undefined;\r\n\r\n    constructor(value?: string | CanvasGradient | CanvasPattern) {\r\n        this.value = value;\r\n    }\r\n\r\n    public isValid(): boolean {\r\n        return this.value != null && this.value !== 'none';\r\n    }\r\n}\r\n","import { CanvasPath } from './canvas-path';\r\nimport { ICanvas, ICorners, TextBaseline } from '../interfaces/canvas.interface';\r\nimport { FillStyle, IColorStep } from './fill-style';\r\nimport { StrokeStyle } from './stroke-style';\r\nimport { ICanvasPath } from '../interfaces/canvas-path.interface';\r\nimport { ShadowStyle } from './shadow-style';\r\nimport { CanvasFilter } from './canvas-filter';\r\nimport { CanvasFont } from './canvas-font';\r\n\r\nexport class Canvas implements ICanvas {\r\n    protected pixelRatio = 1;\r\n    protected context: CanvasRenderingContext2D;\r\n\r\n    private canvasNode: HTMLCanvasElement;\r\n    private canvasPath: CanvasPath;\r\n    private width = 0;\r\n    private height = 0;\r\n\r\n    // We buffer some values so we don't have to access the canvas for them\r\n    private currentFilter?: CanvasFilter;\r\n    private currentStrokeStyle?: StrokeStyle;\r\n    private currentFillStyle?: FillStyle;\r\n    private currentShadowStyle?: ShadowStyle;\r\n    private currentFont?: CanvasFont;\r\n    private currentTextBaseline?: TextBaseline;\r\n    private currentOpacity?: number;\r\n\r\n    constructor() {\r\n        this.pixelRatio = window.devicePixelRatio || 1;\r\n\r\n        this.canvasNode = document.createElement('canvas');\r\n        this.context = this.canvasNode.getContext('2d') as CanvasRenderingContext2D;\r\n        this.canvasPath = new CanvasPath(this.context, this.pixelRatio);\r\n    }\r\n\r\n    public getCurrentFilter(): Readonly<CanvasFilter> | undefined {\r\n        return this.currentFilter;\r\n    }\r\n\r\n    public getCurrentStrokeStyle(): Readonly<StrokeStyle> | undefined {\r\n        return this.currentStrokeStyle;\r\n    }\r\n\r\n    public getCurrentFillStyle(): Readonly<FillStyle> | undefined {\r\n        return this.currentFillStyle;\r\n    }\r\n\r\n    public getCurrentShadowStyle(): Readonly<ShadowStyle> | undefined {\r\n        return this.currentShadowStyle;\r\n    }\r\n\r\n    public getCurrentFont(): Readonly<CanvasFont> | undefined {\r\n        return this.currentFont;\r\n    }\r\n\r\n    public getCurrentTextBaseline(): TextBaseline | undefined {\r\n        return this.currentTextBaseline;\r\n    }\r\n\r\n    public getCurrentOpacity(): number | undefined {\r\n        return this.currentOpacity;\r\n    }\r\n\r\n    public toBase64(): string {\r\n        return this.canvasNode.toDataURL();\r\n    }\r\n\r\n    public toBlob(type: string, quality: number): Promise<Blob | null> {\r\n        const promise = new Promise<Blob | null>((resolve, reject) => {\r\n            this.canvasNode.toBlob((blob) => {\r\n                resolve(blob);\r\n            }, type, quality);\r\n        });\r\n\r\n        return promise;\r\n    }\r\n\r\n    public resizeCanvas(width: number, height: number): void {\r\n        this.width = width;\r\n        this.height = height;\r\n        this.canvasNode.width = width * this.pixelRatio;\r\n        this.canvasNode.height = height * this.pixelRatio;\r\n    }\r\n\r\n    public getDomNode(): HTMLCanvasElement {\r\n        return this.canvasNode;\r\n    }\r\n\r\n    public getWidth(): number {\r\n        return this.width;\r\n    }\r\n\r\n    public getHeight(): number {\r\n        return this.height;\r\n    }\r\n\r\n    public translate(x: number, y: number): void {\r\n        this.context.translate(x * this.pixelRatio, y * this.pixelRatio);\r\n    }\r\n\r\n    public scale(x: number, y: number): void {\r\n        this.context.scale(x, y);\r\n    }\r\n\r\n    public rotate(angle: number): void {\r\n        this.context.rotate(angle);\r\n    }\r\n\r\n    public saveState(): void {\r\n        this.context.save();\r\n    }\r\n\r\n    public restoreState(): void {\r\n        this.context.restore();\r\n    }\r\n\r\n    public clear(): void {\r\n        this.context.clearRect(0, 0, this.width * this.pixelRatio, this.height * this.pixelRatio);\r\n    }\r\n\r\n    public clearRect(x: number, y: number, width: number, height: number): void {\r\n        this.context.clearRect(x * this.pixelRatio, y * this.pixelRatio, width * this.pixelRatio, height * this.pixelRatio);\r\n    }\r\n\r\n    public setFilter(filter: CanvasFilter): void {\r\n        this.currentFilter = filter;\r\n        this.context.filter = filter.getFilter();\r\n    }\r\n\r\n    public removeFilter(): void {\r\n        this.context.filter = 'none';\r\n    }\r\n\r\n    public setLineDash(linePx: number, spacePx: number): void {\r\n        this.context.setLineDash([linePx * this.pixelRatio, spacePx * this.pixelRatio]);\r\n    }\r\n\r\n    public setFillStyle(style: FillStyle): void {\r\n        this.currentFillStyle = style;\r\n\r\n        if (style.value) {\r\n            this.context.fillStyle = style.value;\r\n        }\r\n    }\r\n\r\n    public setStrokeStyle(style: StrokeStyle): void {\r\n        this.currentStrokeStyle = style;\r\n\r\n        if (style.color) {\r\n            this.context.strokeStyle = style.color;\r\n        }\r\n        this.context.lineWidth = (style.lineWidth ?? 1) * this.pixelRatio;\r\n    }\r\n\r\n    public setShadowStyle(style: ShadowStyle): void {\r\n        if (style) {\r\n            this.context.shadowColor = style.color;\r\n            this.context.shadowBlur = style.blur;\r\n            this.context.shadowOffsetX = style.offsetX * this.pixelRatio;\r\n            this.context.shadowOffsetY = style.offsetY * this.pixelRatio;\r\n            this.currentShadowStyle = style;\r\n        } else {\r\n            this.context.shadowColor = 'rgba(0, 0, 0, 0)';\r\n            this.context.shadowBlur = 0;\r\n            this.context.shadowOffsetX = 0;\r\n            this.context.shadowOffsetY = 0;\r\n            this.currentShadowStyle = undefined;\r\n        }\r\n    }\r\n\r\n    public setFont(font: CanvasFont): void {\r\n        this.currentFont = font;\r\n        this.context.font = `${font.fontStyle} ${font.fontWeight} ${font.fontSize * this.pixelRatio}px ${font.fontFamily}`;\r\n    }\r\n\r\n    public setTextBaseline(alignment: TextBaseline): void {\r\n        if (this.currentTextBaseline !== alignment) {\r\n            this.currentTextBaseline = alignment;\r\n            this.context.textBaseline = alignment;\r\n        }\r\n    }\r\n\r\n    public setOpacity(value: number): void {\r\n        if (this.currentOpacity !== value) {\r\n            this.currentOpacity = value;\r\n            this.context.globalAlpha = value;\r\n        }\r\n    }\r\n\r\n    public setClipRegion(x: number, y: number, width: number, height: number): void {\r\n        this.context.beginPath();\r\n        this.context.rect(x * this.pixelRatio, y * this.pixelRatio, width * this.pixelRatio, height * this.pixelRatio);\r\n        this.context.closePath();\r\n        this.context.clip();\r\n    }\r\n\r\n    public drawRect(x: number, y: number, width: number, height: number, fill?: boolean, stroke?: boolean): void {\r\n        if (fill === true) {\r\n            this.context.fillRect(x * this.pixelRatio, y * this.pixelRatio, width * this.pixelRatio, height * this.pixelRatio);\r\n        }\r\n\r\n        if (stroke === true) {\r\n            this.context.strokeRect(x * this.pixelRatio, y * this.pixelRatio, width * this.pixelRatio, height * this.pixelRatio);\r\n        }\r\n    }\r\n\r\n    public drawArc(x: number, y: number, radius: number, startAngle: number, endAngle: number): void {\r\n        this.context.arc(x * this.pixelRatio, y * this.pixelRatio, radius, startAngle, endAngle);\r\n    }\r\n\r\n    public drawEllipse(x: number, y: number, radiusX: number, radiusY: number,\r\n                       rotation: number, startAngle: number, endAngle: number): void {\r\n        this.context.ellipse(x * this.pixelRatio, y * this.pixelRatio, radiusX, radiusY, rotation, startAngle, endAngle);\r\n    }\r\n\r\n    public drawRoundRect(x: number, y: number, width: number, height: number,\r\n                         radius: number | ICorners, fill: boolean, stroke: boolean): void {\r\n\r\n        let borderRadius: ICorners;\r\n        if (typeof(radius) === 'number') {\r\n            borderRadius = {\r\n                bottomleft: radius,\r\n                bottomright: radius,\r\n                topleft: radius,\r\n                topright: radius\r\n            };\r\n        } else {\r\n            borderRadius = radius;\r\n        }\r\n\r\n        this.beginPath()\r\n            .moveTo(x + borderRadius.topleft, y)\r\n            .lineTo(x + width - borderRadius.topright, y)\r\n            .quadraticCurveTo(x + width, y, x + width, y + borderRadius.topright)\r\n            .lineTo(x + width, y + height - borderRadius.bottomright)\r\n            .quadraticCurveTo(x + width, y + height, x + width - borderRadius.bottomright, y + height)\r\n            .lineTo(x + borderRadius.bottomleft, y + height)\r\n            .quadraticCurveTo(x, y + height, x, y + height - borderRadius.bottomleft)\r\n            .lineTo(x, y + borderRadius.topleft)\r\n            .quadraticCurveTo(x, y, x + borderRadius.topleft, y)\r\n            .close(fill, stroke);\r\n    }\r\n\r\n    public drawLine(x: number, y: number, x2: number, y2: number): void {\r\n        this.context.beginPath();\r\n        this.context.moveTo(x * this.pixelRatio, y * this.pixelRatio);\r\n        this.context.lineTo(x2 * this.pixelRatio, y2 * this.pixelRatio);\r\n        this.context.closePath();\r\n        this.context.stroke();\r\n    }\r\n\r\n    public measureText(text: string): TextMetrics {\r\n        return this.context.measureText(text);\r\n    }\r\n\r\n    public drawText(text: string, x: number, y: number, maxWidth?: number, fill?: boolean, stroke?: boolean): void {\r\n        if (fill !== false) {\r\n            if (maxWidth == null) {\r\n                this.context.fillText(text, x * this.pixelRatio, y * this.pixelRatio);\r\n            } else {\r\n                this.context.fillText(text, x * this.pixelRatio, y * this.pixelRatio,\r\n                    maxWidth * this.pixelRatio);\r\n            }\r\n        }\r\n\r\n        if (stroke === true) {\r\n            if (maxWidth == null) {\r\n                this.context.strokeText(text, x * this.pixelRatio, y * this.pixelRatio);\r\n            } else {\r\n                this.context.strokeText(text, x * this.pixelRatio, y * this.pixelRatio,\r\n                    maxWidth * this.pixelRatio);\r\n            }\r\n        }\r\n    }\r\n\r\n    public drawWrappedText(text: string, x: number, y: number, maxWidth: number,\r\n                           lineHeight: number, fill?: boolean, stroke?: boolean): void {\r\n        const words = text.split(' ');\r\n        let line = '';\r\n\r\n        for (let n = 0; n < words.length; n++) {\r\n            const testLine = line + words[n] + ' ';\r\n            const metrics = this.context.measureText(testLine);\r\n            const testWidth = metrics.width;\r\n\r\n            if (testWidth > x + maxWidth && n > 0) {\r\n                this.drawText(line, x, y, undefined, fill, stroke);\r\n                line = words[n] + ' ';\r\n                y += lineHeight;\r\n            } else {\r\n                line = testLine;\r\n            }\r\n        }\r\n\r\n        this.drawText(line, x, y, undefined, fill, stroke);\r\n    }\r\n\r\n    public drawImage(image: HTMLImageElement | HTMLCanvasElement | ImageBitmap | ICanvas,\r\n                     x: number, y: number, width?: number, height?: number): void {\r\n        if (image instanceof Canvas) {\r\n            this.context.drawImage(image.getDomNode(), x * this.pixelRatio, y * this.pixelRatio,\r\n                (width != null) ? (width * this.pixelRatio) : (image.width * this.pixelRatio),\r\n                (height != null) ? (height * this.pixelRatio) : (image.height * this.pixelRatio));\r\n        } else if (image instanceof HTMLImageElement) {\r\n            this.context.drawImage(image as HTMLImageElement, x * this.pixelRatio, y * this.pixelRatio,\r\n                (width != null) ? (width * this.pixelRatio) : (image.width * this.pixelRatio),\r\n                (height != null) ? (height * this.pixelRatio) : (image.height * this.pixelRatio));\r\n        }\r\n    }\r\n\r\n    public drawScaledImage(image: HTMLImageElement | HTMLCanvasElement | ImageBitmap | ICanvas,\r\n                           x: number, y: number, width: number, height: number,\r\n                           srcX: number, srcY: number, srcWidth: number, srcHeight: number): void {\r\n        if (image instanceof Canvas) {\r\n            this.context.drawImage(image.getDomNode(), srcX, srcY, srcWidth, srcHeight,\r\n                x * this.pixelRatio, y * this.pixelRatio, width * this.pixelRatio, height * this.pixelRatio);\r\n        } else {\r\n            this.context.drawImage(image as HTMLImageElement, srcX, srcY, srcWidth, srcHeight,\r\n                x * this.pixelRatio, y * this.pixelRatio, width * this.pixelRatio, height * this.pixelRatio);\r\n        }\r\n    }\r\n\r\n    public beginPath(): ICanvasPath {\r\n        this.canvasPath.begin();\r\n        return this.canvasPath;\r\n    }\r\n\r\n    public createLinearGradient(x1: number, y1: number, x2: number, y2: number, colorSteps: IColorStep[]): FillStyle {\r\n        const gradient: CanvasGradient = this.context.createLinearGradient(x1 * this.pixelRatio,\r\n            y1 * this.pixelRatio, x2 * this.pixelRatio, y2 * this.pixelRatio);\r\n\r\n        // tslint:disable-next-line: prefer-for-of\r\n        for (let n = 0; n < colorSteps.length; n ++) {\r\n            gradient.addColorStop(colorSteps[n].offset, colorSteps[n].color);\r\n        }\r\n\r\n        const fillStyle: FillStyle = new FillStyle();\r\n        fillStyle.value = gradient;\r\n        return fillStyle;\r\n    }\r\n\r\n    public createRadialGradient(x1: number, y1: number, x2: number, y2: number,\r\n                                radiusX: number, radiusY: number, colorSteps: IColorStep[]): FillStyle {\r\n        const gradient: CanvasGradient = this.context.createRadialGradient(x1 * this.pixelRatio,\r\n            y1 * this.pixelRatio, radiusX, x2 * this.pixelRatio, y2 * this.pixelRatio, radiusY);\r\n\r\n        // tslint:disable-next-line: prefer-for-of\r\n        for (let n = 0; n < colorSteps.length; n ++) {\r\n            gradient.addColorStop(colorSteps[n].offset, colorSteps[n].color);\r\n        }\r\n\r\n        const fillStyle: FillStyle = new FillStyle();\r\n        fillStyle.value = gradient;\r\n        return fillStyle;\r\n    }\r\n\r\n    public createPattern(image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ICanvas,\r\n                         repetitionStyle: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'): FillStyle {\r\n        let pattern: CanvasPattern | null = null;\r\n        if (image instanceof Canvas) {\r\n            pattern = this.context.createPattern(image.getDomNode(), repetitionStyle);\r\n        } else {\r\n            pattern = this.context.createPattern(image as HTMLImageElement, repetitionStyle);\r\n        }\r\n\r\n        const fillStyle: FillStyle = new FillStyle();\r\n        if (pattern) {\r\n            fillStyle.value = pattern;\r\n        }\r\n        return fillStyle;\r\n    }\r\n\r\n    /**\r\n     * Helper methods\r\n     */\r\n    protected roundNumber(value: number, decimals: number): number {\r\n        return Number(Number(value).toFixed(decimals));\r\n    }\r\n}\r\n","/**\r\n * An instance of this class can be passed to an [[ICanvas]] to draw with an active filter.\r\n * Many effects / filter can be used parallel, simply add the ones you want with following functions.\r\n */\r\nexport class CanvasFilter {\r\n    private filter = 'none';\r\n    private filterArray: string[] = [];\r\n\r\n    /**\r\n     * Get the filter as string.\r\n     */\r\n    public getFilter(): string {\r\n        return this.filter;\r\n    }\r\n\r\n    /**\r\n     * Reset the filter to none.\r\n     */\r\n    public reset(): void {\r\n        this.filter = 'none';\r\n        this.filterArray = [];\r\n    }\r\n\r\n    /**\r\n     * Add a custom filter to the filter query.\r\n     */\r\n    public addCustomFilter(value: string): void {\r\n        this.addFilter(value);\r\n    }\r\n\r\n    /**\r\n     * Add blur effect with length in pixel.\r\n     */\r\n    public addBlur(length: number): void {\r\n        this.addFilter(`blur(${length}px)`);\r\n    }\r\n\r\n    /**\r\n     * Add a brightness with percentage.\r\n     */\r\n    public addBrightness(percentage: number): void {\r\n        this.addFilter(`brightness(${length}%)`);\r\n    }\r\n\r\n    /**\r\n     * Add a contract filter with percentage.\r\n     */\r\n    public addContrast(percentage: number): void {\r\n        this.addFilter(`contrast(${percentage}%)`);\r\n    }\r\n\r\n    /**\r\n     * Add a drop shadow, all parameter in pixel except color.\r\n     */\r\n    public addDropShadow(offsetX: number, offsetY: number, radius: number, color: string): void {\r\n        this.addFilter(`drop-shadow(${offsetX}px ${offsetY}px ${radius}px ${color})`);\r\n    }\r\n\r\n    /**\r\n     * Add a grayscale with percentage.\r\n     */\r\n    public addGrayscale(percentage: number): void {\r\n        this.addFilter(`grayscale(${percentage}%)`);\r\n    }\r\n\r\n    /**\r\n     * Add a hue rotation with degree.\r\n     */\r\n    public hueRotation(degree: number): void {\r\n        this.addFilter(`hue-rotate(${degree}deg)`);\r\n    }\r\n\r\n    /**\r\n     * Invert with percentage.\r\n     */\r\n    public invert(percentage: number): void {\r\n        this.addFilter(`invert(${percentage}%)`);\r\n    }\r\n\r\n    /**\r\n     * Add an opacity with percentage.\r\n     */\r\n    public opacity(percentage: number): void {\r\n        this.addFilter(`opacity(${percentage}%)`);\r\n    }\r\n\r\n    /**\r\n     * Add saturation with percentage.\r\n     */\r\n    public saturation(percentage: number): void {\r\n        this.addFilter(`saturation(${percentage}%)`);\r\n    }\r\n\r\n    /**\r\n     * Add a sepia effect with percentage.\r\n     */\r\n    public sepia(percentage: number): void {\r\n        this.addFilter(`sepia(${percentage}%)`);\r\n    }\r\n\r\n    private addFilter(filter: string): void {\r\n        this.filterArray.push(filter);\r\n        this.filter = this.filterArray.join(' ');\r\n    }\r\n}\r\n","/**\r\n * Representing a font that can be set in an ICanvas to render text. Values are similar to css.\r\n */\r\nexport class CanvasFont {\r\n    public fontStyle: 'normal' | 'italic' = 'normal';\r\n    public fontWeight: number | 'normal' | 'bold' | 'bolder' | 'lighter' = 'normal';\r\n    public fontSize: number;\r\n    public fontFamily: string;\r\n\r\n    constructor(fontSize?: number, fontFamily?: string) {\r\n        this.fontSize = fontSize ?? 13;\r\n        this.fontFamily = fontFamily ?? 'Arial';\r\n    }\r\n}\r\n","/**\r\n * Defines a point inside the canvas, x / y coordinate.\r\n */\r\nexport class Point {\r\n    public x = 0;\r\n    public y = 0;\r\n\r\n    constructor(x?: number, y?: number) {\r\n        if (x != null) {\r\n            this.x = x;\r\n        }\r\n\r\n        if (y != null) {\r\n            this.y = y;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set the point to specific x and y coordinate.\r\n     */\r\n    public setPoint(x: number, y: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n","/**\r\n * A rectangle with x and y as start points inside the canvas, and width / height to define the size.\r\n */\r\nexport class Rect {\r\n    public x = 0;\r\n    public y = 0;\r\n    public width = 0;\r\n    public height = 0;\r\n\r\n    constructor(x?: number, y?: number, width?: number, height?: number) {\r\n        if (x != null) {\r\n            this.x = x;\r\n        }\r\n\r\n        if (y != null) {\r\n            this.y = y;\r\n        }\r\n\r\n        if (width != null) {\r\n            this.width = width;\r\n        }\r\n\r\n        if (height != null) {\r\n            this.height = height;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set the position of the rectangle in pixel.\r\n     */\r\n    public setPosition(x: number, y: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n\r\n    /**\r\n     * Set the entire rect.\r\n     */\r\n    public setRect(x: number, y: number, width: number, height: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n    }\r\n\r\n    /**\r\n     * Check if a coordinate is inside the rectangle.\r\n     */\r\n    public pointInRect(x: number, y: number): boolean {\r\n        if (x >= this.x && x <= this.x + this.width &&\r\n            y >= this.y && y <= this.y + this.height) {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n}\r\n","/**\r\n * Defines the current shadow style of the canvas.\r\n */\r\nexport class ShadowStyle {\r\n    public color = 'rgba(0, 0, 0, 0.7)';\r\n    public blur = 10;\r\n    public offsetX = 3;\r\n    public offsetY = 3;\r\n}\r\n","/**\r\n * Defines the current stroke style of the canvas. Set color and linewidth for stroke actions.\r\n */\r\nexport class StrokeStyle {\r\n    public color: string | CanvasGradient | undefined;\r\n    public lineWidth: number | undefined;\r\n\r\n    constructor(color?: string | CanvasGradient, lineWidth?: number) {\r\n        this.color = color;\r\n        this.lineWidth = lineWidth;\r\n    }\r\n\r\n    public isValid(): boolean {\r\n        return this.color != null && this.color !== 'none';\r\n    }\r\n}\r\n","/**\r\n * Draw mode of the canvas\r\n */\r\nexport enum CanvasDrawMode {\r\n\r\n    /**\r\n     * The canvas will be drawn continuously, trying to draw 60 times a second.\r\n     * Best for animated content.\r\n     */\r\n    Continuous,\r\n\r\n    /**\r\n     * Draw only if [[ICanvas]] draw is called. No resources are wasted to draw if nothing happens.\r\n     */\r\n    OnDemand\r\n}\r\n","import { OnDestroy, Renderer2, AfterViewInit, ElementRef, Injector, Directive, HostListener, Input } from '@angular/core';\r\n\r\nimport { CanvasDrawMode } from './enums/canvas-draw-mode.enum';\r\nimport { Canvas } from './classes/canvas';\r\nimport { ICanvas } from './interfaces/canvas.interface';\r\nimport { Point } from './classes/point';\r\n\r\n/**\r\n * The base directive that is used to extend canvas components.\r\n */\r\n@Directive()\r\nexport abstract class CanvasBaseDirective implements OnDestroy, AfterViewInit {\r\n\r\n    /**\r\n     * If a different element should handle the inputs, put it into eventElement.\r\n     */\r\n    @Input() eventElement: HTMLElement | null = null;\r\n\r\n    protected elementRef: ElementRef;\r\n    protected renderer: Renderer2;\r\n\r\n    protected height = 0;\r\n    protected width = 0;\r\n    protected drawMode: CanvasDrawMode = CanvasDrawMode.OnDemand;\r\n    protected clearOnDraw = true;\r\n\r\n    private dragAndDropEnabled = false;\r\n    private dragging = false;\r\n    private dragStartPosition: Point = new Point();\r\n    private dragMaxDistance = 15;\r\n    private dragStartTimeout = 300;\r\n    private dragStartTimeoutHandle: number | null = null;\r\n\r\n    private inDrawingLoop = false;\r\n    private currentFrameRequestID: number | null = null;\r\n    private lastTime = 0;\r\n    private disposed = false;\r\n    private canvas: Canvas;\r\n\r\n    constructor(protected injector: Injector) {\r\n        this.elementRef = injector.get(ElementRef);\r\n        this.renderer = injector.get(Renderer2);\r\n\r\n        this.canvas = new Canvas();\r\n        this.canvas.resizeCanvas(0, 0);\r\n    }\r\n\r\n    public ngAfterViewInit(): void {\r\n        this.attachCanvas(this.elementRef.nativeElement);\r\n\r\n        this.renderer.listen(this.eventElement ?? this.getCanvasNode(), 'click', (event) => {\r\n            this.eventClick(event);\r\n        });\r\n\r\n        this.renderer.listen(this.eventElement ?? this.getCanvasNode(), 'mouseup', (event) => {\r\n            this.mouseUp(event);\r\n        });\r\n\r\n        this.renderer.listen(this.eventElement ?? this.getCanvasNode(), 'mousedown', (event) => {\r\n            this.mouseDown(event);\r\n        });\r\n\r\n        this.renderer.listen(this.eventElement ?? this.getCanvasNode(), 'mousemove', (event) => {\r\n            this.mouseMove(event);\r\n        });\r\n\r\n        this.renderer.listen(this.eventElement ?? this.getCanvasNode(), 'mouseleave', (event) => {\r\n            this.mouseLeave(event);\r\n        });\r\n    }\r\n\r\n    public ngOnDestroy(): void {\r\n        this.disposed = true;\r\n    }\r\n\r\n    private attachCanvas(parent: HTMLElement): void {\r\n        parent.appendChild(this.canvas.getDomNode());\r\n    }\r\n\r\n    public toBase64(): string {\r\n        return this.canvas.toBase64();\r\n    }\r\n\r\n    public toBlob(type: string = 'image/png', quality: number = 99): Promise<Blob | null> {\r\n        return this.canvas.toBlob(type, quality);\r\n    }\r\n\r\n    public getCanvas(): ICanvas {\r\n        return this.canvas;\r\n    }\r\n\r\n    public resize(width: number, height: number): void {\r\n        this.width = width;\r\n        this.height = height;\r\n\r\n        this.renderer.setStyle(this.canvas.getDomNode(), 'width', `${ width }px`);\r\n        this.renderer.setStyle(this.canvas.getDomNode(), 'height', `${ height }px`);\r\n\r\n        this.canvas.resizeCanvas(width, height);\r\n\r\n        this.eventResize(width, height);\r\n        this.draw();\r\n    }\r\n\r\n    protected getCanvasNode(): HTMLElement {\r\n        return this.canvas.getDomNode();\r\n    }\r\n\r\n    protected startDrawing(): void {\r\n        if (this.clearOnDraw) {\r\n            this.canvas.clear();\r\n        }\r\n\r\n        // sharpness fix\r\n        this.canvas.saveState();\r\n        this.canvas.translate(0.5, 0.5);\r\n\r\n        this.onDraw(this.canvas, this.getTimeDelta());\r\n\r\n        this.canvas.restoreState();\r\n    }\r\n\r\n    protected createOffscreenBuffer(width: number, height: number): ICanvas {\r\n        const buffer: Canvas = new Canvas();\r\n        buffer.resizeCanvas(width, height);\r\n        return buffer;\r\n    }\r\n\r\n    public draw(): void {\r\n        if (this.inDrawingLoop || this.currentFrameRequestID != null) {\r\n            return;\r\n        } else {\r\n            this.requestDraw();\r\n        }\r\n    }\r\n\r\n    public setDrawMode(drawMode: CanvasDrawMode): void {\r\n        this.drawMode = drawMode;\r\n        this.draw();\r\n    }\r\n\r\n    public isDragAndDropEnabled(): boolean {\r\n        return this.dragAndDropEnabled;\r\n    }\r\n\r\n    public enableDragAndDrop(enable: boolean): void {\r\n        this.dragAndDropEnabled = enable;\r\n    }\r\n\r\n    protected abstract onDraw(canvas: ICanvas, deltaTime?: number): void;\r\n\r\n    // Overridables\r\n    protected eventResize(width: number, height: number): void {}\r\n\r\n    protected eventDrag(event: PointerEvent): boolean { return false; }\r\n    protected eventDragMove(event: PointerEvent): void {}\r\n    protected eventDrop(event: PointerEvent, startPosition: Point): void {}\r\n\r\n    protected eventClick(event: PointerEvent): void {}\r\n    protected eventPointerMove(event: PointerEvent): void {}\r\n    protected eventPointerUp(event: PointerEvent): void {}\r\n    protected eventPointerDown(event: PointerEvent): void {}\r\n    protected eventPointerLeave(event: PointerEvent): void {}\r\n\r\n    protected getTime(): number {\r\n        return window.performance.now();\r\n    }\r\n\r\n    protected getTimeDelta(): number {\r\n        if (this.lastTime == null) {\r\n            this.lastTime = this.getTime();\r\n        }\r\n\r\n        const delta = this.getTime() - this.lastTime;\r\n        this.lastTime = this.getTime();\r\n        return delta;\r\n    }\r\n\r\n    protected getDistance(x1: number, y1: number, x2: number, y2: number): number {\r\n        return Math.hypot(x2 - x1, y2 - y1);\r\n    }\r\n\r\n    private requestDraw(): void {\r\n        this.currentFrameRequestID = requestAnimationFrame(() => {\r\n            this.currentFrameRequestID = null;\r\n            this.startDrawing();\r\n\r\n            if (this.drawMode === CanvasDrawMode.Continuous && !this.disposed) {\r\n                this.inDrawingLoop = true;\r\n                window.setTimeout(() => {\r\n                    this.requestDraw();\r\n                }, 10);\r\n            } else {\r\n                this.inDrawingLoop = false;\r\n            }\r\n        });\r\n    }\r\n\r\n    private mouseUp(event: PointerEvent): void {\r\n        if (this.dragAndDropEnabled) {\r\n            if (this.dragStartTimeoutHandle) {\r\n                window.clearTimeout(this.dragStartTimeoutHandle);\r\n                this.dragStartTimeoutHandle = null;\r\n            }\r\n\r\n            if (this.dragging) {\r\n                this.eventDrop(event, this.dragStartPosition);\r\n                this.dragging = false;\r\n            }\r\n        }\r\n\r\n        this.eventPointerUp(event);\r\n    }\r\n\r\n    private mouseMove(event: PointerEvent): void {\r\n        if (this.dragAndDropEnabled) {\r\n            if (this.dragStartTimeoutHandle) {\r\n                if (this.getDistance(this.dragStartPosition.x, this.dragStartPosition.y,\r\n                        event.offsetX, event.offsetY) > this.dragMaxDistance) {\r\n                    window.clearTimeout(this.dragStartTimeoutHandle);\r\n                    this.dragStartTimeoutHandle = null;\r\n                }\r\n            }\r\n\r\n            if (this.dragging) {\r\n                this.eventDragMove(event);\r\n            }\r\n        }\r\n\r\n        this.eventPointerMove(event);\r\n    }\r\n\r\n    private mouseDown(event: PointerEvent): void {\r\n        if (this.dragAndDropEnabled) {\r\n            this.dragStartPosition.setPoint(event.offsetX, event.offsetY);\r\n            this.dragStartTimeoutHandle = window.setTimeout(() => {\r\n                this.dragStartTimeoutHandle = null;\r\n                this.dragging = this.eventDrag(event);\r\n            }, this.dragStartTimeout);\r\n        }\r\n\r\n        this.eventPointerDown(event);\r\n    }\r\n\r\n    private mouseLeave(event: PointerEvent): void {\r\n        this.eventPointerLeave(event);\r\n    }\r\n}\r\n","import { NgModule } from '@angular/core';\n\n@NgModule({\n    declarations: [],\n    imports: [],\n    exports: [],\n})\nexport class AngularCanvasBaseModule {}\n","/*\n * Public API Surface of angular-canvas-base\n */\n\nexport * from './lib/classes/canvas';\nexport * from './lib/classes/canvas-filter';\nexport * from './lib/classes/canvas-font';\nexport * from './lib/classes/canvas-path';\nexport * from './lib/classes/fill-style';\nexport * from './lib/classes/point';\nexport * from './lib/classes/rect';\nexport * from './lib/classes/shadow-style';\nexport * from './lib/classes/stroke-style';\n\nexport * from './lib/enums/canvas-draw-mode.enum';\n\nexport * from './lib/interfaces/canvas-path.interface';\nexport * from './lib/interfaces/canvas.interface';\n\nexport * from './lib/canvas-base-component';\nexport * from './lib/canvas-base.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}