UNPKG

@ng-web-apis/canvas

Version:
1 lines 63.2 kB
{"version":3,"file":"ng-web-apis-canvas.mjs","sources":["../../../libs/canvas/src/tokens/canvas-2d-context.ts","../../../libs/canvas/src/tokens/canvas-properties.ts","../../../libs/canvas/src/services/draw.service.ts","../../../libs/canvas/src/contexts/canvas-2d.ts","../../../libs/canvas/src/tokens/canvas-method.ts","../../../libs/canvas/src/methods/clip-path.ts","../../../libs/canvas/src/methods/draw-image.ts","../../../libs/canvas/src/methods/path.ts","../../../libs/canvas/src/methods/path-2d.ts","../../../libs/canvas/src/methods/text.ts","../../../libs/canvas/src/path/arc.ts","../../../libs/canvas/src/path/arc-to.ts","../../../libs/canvas/src/path/bezier-curve-to.ts","../../../libs/canvas/src/path/ellipse.ts","../../../libs/canvas/src/path/line-to.ts","../../../libs/canvas/src/path/move-to.ts","../../../libs/canvas/src/path/quadratic-curve-to.ts","../../../libs/canvas/src/path/rect.ts","../../../libs/canvas/src/pipes/gradient.pipe.ts","../../../libs/canvas/src/pipes/path.pipe.ts","../../../libs/canvas/src/pipes/pattern.pipe.ts","../../../libs/canvas/src/pipes/rad.pipe.ts","../../../libs/canvas/src/pipes/transform.pipe.ts","../../../libs/canvas/src/properties/clip.ts","../../../libs/canvas/src/properties/compositing.ts","../../../libs/canvas/src/properties/fill-stroke-styles.ts","../../../libs/canvas/src/properties/filter.ts","../../../libs/canvas/src/properties/image-smoothing.ts","../../../libs/canvas/src/properties/path-drawing-styles.ts","../../../libs/canvas/src/properties/shadow-styles.ts","../../../libs/canvas/src/properties/text-drawing-styles.ts","../../../libs/canvas/src/properties/transform.ts","../../../libs/canvas/src/module.ts","../../../libs/canvas/src/ng-web-apis-canvas.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const WA_CANVAS_2D_CONTEXT = new InjectionToken<CanvasRenderingContext2D>(\n '[WA_CANVAS_2D_CONTEXT]',\n);\n\n/**\n * @deprecated: drop in v5.0, use {@link WA_CANVAS_2D_CONTEXT}\n */\nexport const CANVAS_2D_CONTEXT = WA_CANVAS_2D_CONTEXT;\n","import type {ExistingProvider, Type} from '@angular/core';\nimport {InjectionToken} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\n\nexport const WA_CANVAS_PROPERTIES = new InjectionToken<CanvasMethod[]>(\n '[WA_CANVAS_PROPERTIES]',\n {\n factory: () => [],\n },\n);\n\nexport function asCanvasProperty(useExisting: Type<CanvasMethod>): ExistingProvider {\n return {\n provide: WA_CANVAS_PROPERTIES,\n multi: true,\n useExisting,\n };\n}\n\n/**\n * @deprecated: drop in v5.0, use {@link WA_CANVAS_PROPERTIES}\n */\nexport const CANVAS_PROPERTIES = WA_CANVAS_PROPERTIES;\n","import type {OnDestroy} from '@angular/core';\nimport {inject, Injectable, NgZone} from '@angular/core';\nimport {WA_ANIMATION_FRAME} from '@ng-web-apis/common';\nimport type {Subscription} from 'rxjs';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {CANVAS_2D_CONTEXT} from '../tokens/canvas-2d-context';\nimport {CANVAS_PROPERTIES} from '../tokens/canvas-properties';\nimport type {Context2dProcessor} from '../types/context-processor';\n\n@Injectable()\nexport class WaDrawService implements OnDestroy, CanvasMethod {\n private readonly subscription: Subscription;\n\n constructor() {\n const parent = inject(CANVAS_PROPERTIES, {skipSelf: true});\n const properties = inject(CANVAS_PROPERTIES);\n const context = inject(CANVAS_2D_CONTEXT);\n const animationFrame$ = inject(WA_ANIMATION_FRAME);\n const ngZone = inject(NgZone);\n\n this.subscription = ngZone.runOutsideAngular(() =>\n animationFrame$.subscribe(() => {\n context.save();\n parent.forEach((property) => property.call(context));\n properties.forEach((property) => property.call(context));\n this.call(context);\n context.restore();\n }),\n );\n }\n\n public call: Context2dProcessor = (): void => {};\n\n public ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n}\n\n/**\n * @deprecated: use {@link WaDrawService}\n */\nexport const DrawService = WaDrawService;\n","import {Directive, ElementRef, inject, Input} from '@angular/core';\n\nimport {WaDrawService} from '../services/draw.service';\nimport {CANVAS_2D_CONTEXT} from '../tokens/canvas-2d-context';\n\n@Directive({\n standalone: true,\n selector: 'canvas[waCanvas2d]',\n providers: [\n {\n provide: CANVAS_2D_CONTEXT,\n useFactory: (): CanvasRenderingContext2D => {\n const {nativeElement} = inject(ElementRef);\n const opaque = nativeElement.getAttribute('waOpaque');\n const desynchronized = nativeElement.getAttribute('waDesynchronized');\n const context = nativeElement.getContext('2d', {\n alpha: opaque === null,\n desynchronized: desynchronized !== null,\n });\n\n if (!context) {\n throw new Error('Context of different type was already requested');\n }\n\n return context;\n },\n },\n WaDrawService,\n ],\n})\nexport class WaCanvas2d {\n private readonly context = inject(CANVAS_2D_CONTEXT);\n private readonly method = inject(WaDrawService);\n\n @Input()\n public waOpaque = '' as const;\n\n @Input()\n public waDesynchronized = '' as const;\n\n constructor() {\n this.context.strokeStyle = 'transparent';\n\n this.method.call = (context) => {\n context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n };\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvas2d}\n */\nexport const Canvas2dDirective = WaCanvas2d;\n","import type {ExistingProvider, Type} from '@angular/core';\nimport {InjectionToken} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\n\nexport const WA_CANVAS_METHOD = new InjectionToken<CanvasMethod>('[WA_CANVAS_METHOD]');\n\nexport function asCanvasMethod(useExisting: Type<CanvasMethod>): ExistingProvider {\n return {\n provide: WA_CANVAS_METHOD,\n useExisting,\n };\n}\n\n/**\n * @deprecated: drop in v5.0, use {@link WA_CANVAS_METHOD}\n */\nexport const CANVAS_METHOD = WA_CANVAS_METHOD;\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n QueryList,\n} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {CANVAS_METHOD} from '../tokens/canvas-method';\n\n@Component({\n standalone: true,\n selector: 'canvas-clip-path',\n template: `\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WaCanvasClipPath {\n @ContentChildren(CANVAS_METHOD)\n public readonly pathSteps = new QueryList<CanvasMethod>();\n}\n\n/**\n * @deprecated: use {@link WaCanvasClipPath}\n */\nexport const ClipPathComponent = WaCanvasClipPath;\n","import {Directive, inject, Input} from '@angular/core';\n\nimport {WaDrawService} from '../services/draw.service';\n\n@Directive({\n standalone: true,\n selector: 'canvas-draw-image',\n providers: [WaDrawService],\n})\nexport class WaCanvasDrawImage {\n private readonly method = inject(WaDrawService);\n\n @Input()\n public image?: CanvasImageSource;\n\n @Input()\n public dX = 0;\n\n @Input()\n public dY = 0;\n\n @Input()\n public dWidth?: number;\n\n @Input()\n public dHeight?: number;\n\n @Input()\n public sX?: number;\n\n @Input()\n public sY?: number;\n\n @Input()\n public sWidth?: number;\n\n @Input()\n public sHeight?: number;\n\n constructor() {\n this.method.call = (context) => {\n if (!this.image) {\n return;\n }\n\n if (\n this.sWidth !== undefined &&\n this.sHeight !== undefined &&\n this.sX !== undefined &&\n this.sY !== undefined &&\n this.dWidth !== undefined &&\n this.dHeight !== undefined\n ) {\n context.drawImage(\n this.image,\n this.sX,\n this.sY,\n this.sWidth,\n this.sHeight,\n this.dX,\n this.dY,\n this.dWidth,\n this.dHeight,\n );\n } else if (this.dWidth !== undefined && this.dHeight !== undefined) {\n context.drawImage(\n this.image,\n this.dX,\n this.dY,\n this.dWidth,\n this.dHeight,\n );\n } else {\n context.drawImage(this.image, this.dX, this.dY);\n }\n };\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasDrawImage}\n */\nexport const DrawImageDirective = WaCanvasDrawImage;\n","import {ContentChildren, Directive, inject, Input, QueryList} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {WaDrawService} from '../services/draw.service';\nimport {CANVAS_METHOD} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-path:not([path])',\n providers: [WaDrawService],\n})\nexport class WaCanvasPath {\n @ContentChildren(CANVAS_METHOD)\n private readonly pathSteps = new QueryList<CanvasMethod>();\n\n private readonly method = inject(WaDrawService);\n\n @Input()\n public closed = false;\n\n @Input()\n public fillRule?: CanvasFillRule;\n\n constructor() {\n this.method.call = (context) => {\n context.beginPath();\n\n this.pathSteps.forEach((step) => {\n step.call(context);\n });\n\n if (this.closed) {\n context.closePath();\n }\n\n context.stroke();\n context.fill(this.fillRule);\n };\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasPath}\n */\nexport const PathDirective = WaCanvasPath;\n","import {Directive, inject, Input} from '@angular/core';\n\nimport {WaDrawService} from '../services/draw.service';\n\n@Directive({\n standalone: true,\n selector: 'canvas-path[path]',\n providers: [WaDrawService],\n})\nexport class WaCanvasPath2d {\n private readonly method = inject(WaDrawService);\n\n @Input()\n public path = new Path2D();\n\n @Input()\n public fillRule?: CanvasFillRule;\n\n constructor() {\n this.method.call = (context) => {\n context.fill(this.path, this.fillRule);\n context.stroke(this.path);\n };\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasPath2d}\n */\nexport const Path2dDirective = WaCanvasPath2d;\n","import {Directive, inject, Input} from '@angular/core';\n\nimport {WaDrawService} from '../services/draw.service';\n\n@Directive({\n standalone: true,\n selector: 'canvas-text',\n providers: [WaDrawService],\n})\nexport class WaCanvasText {\n private readonly method = inject(WaDrawService);\n\n @Input()\n public text = '';\n\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n @Input()\n public maxWidth?: number;\n\n constructor() {\n this.method.call = (context) => {\n context.fillText(this.text, this.x, this.y, this.maxWidth);\n context.strokeText(this.text, this.x, this.y, this.maxWidth);\n };\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasText}\n */\nexport const TextDirective = WaCanvasText;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-arc',\n providers: [asCanvasMethod(WaCanvasArc)],\n})\nexport class WaCanvasArc implements CanvasMethod {\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n @Input()\n public radius = 0;\n\n @Input()\n public startAngle = 0;\n\n @Input()\n public endAngle = 0;\n\n @Input()\n public anticlockwise = false;\n\n public call(context: CanvasRenderingContext2D): void {\n context.arc(\n this.x,\n this.y,\n this.radius,\n this.startAngle,\n this.endAngle,\n this.anticlockwise,\n );\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasArc}\n */\nexport const ArcDirective = WaCanvasArc;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-arc-to',\n providers: [asCanvasMethod(WaCanvasArcTo)],\n})\nexport class WaCanvasArcTo implements CanvasMethod {\n @Input()\n public x1 = 0;\n\n @Input()\n public y1 = 0;\n\n @Input()\n public x2 = 0;\n\n @Input()\n public y2 = 0;\n\n @Input()\n public radius = 0;\n\n public call(context: CanvasRenderingContext2D): void {\n context.arcTo(this.x1, this.y1, this.x2, this.y2, this.radius);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasArcTo}\n */\nexport const ArcToDirective = WaCanvasArcTo;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-bezier-curve-to',\n providers: [asCanvasMethod(WaCanvasBezierCurveTo)],\n})\nexport class WaCanvasBezierCurveTo implements CanvasMethod {\n @Input()\n public cp1x = 0;\n\n @Input()\n public cp1y = 0;\n\n @Input()\n public cp2x = 0;\n\n @Input()\n public cp2y = 0;\n\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n public call(context: CanvasRenderingContext2D): void {\n context.bezierCurveTo(this.cp1x, this.cp1y, this.cp2x, this.cp2y, this.x, this.y);\n }\n}\n\n/**\n * @deprecated use {@link WaCanvasBezierCurveTo}\n */\nexport const BezierCurveToDirective = WaCanvasBezierCurveTo;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-ellipse',\n providers: [asCanvasMethod(WaCanvasEllipse)],\n})\nexport class WaCanvasEllipse implements CanvasMethod {\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n @Input()\n public radiusX = 0;\n\n @Input()\n public radiusY = 0;\n\n @Input()\n public rotation = 0;\n\n @Input()\n public startAngle = 0;\n\n @Input()\n public endAngle = 0;\n\n @Input()\n public anticlockwise = false;\n\n public call(context: CanvasRenderingContext2D): void {\n context.ellipse(\n this.x,\n this.y,\n this.radiusX,\n this.radiusY,\n this.rotation,\n this.startAngle,\n this.endAngle,\n this.anticlockwise,\n );\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasEllipse}\n */\nexport const EllipseDirective = WaCanvasEllipse;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-line-to',\n providers: [asCanvasMethod(WaCanvasLineTo)],\n})\nexport class WaCanvasLineTo implements CanvasMethod {\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n public call(context: CanvasRenderingContext2D): void {\n context.lineTo(this.x, this.y);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasLineTo}\n */\nexport const LineToDirective = WaCanvasLineTo;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-move-to',\n providers: [asCanvasMethod(WaCanvasMoveTo)],\n})\nexport class WaCanvasMoveTo implements CanvasMethod {\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n public call(context: CanvasRenderingContext2D): void {\n context.moveTo(this.x, this.y);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasMoveTo}\n */\nexport const MoveToDirective = WaCanvasMoveTo;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-quadratic-curve-to',\n providers: [asCanvasMethod(WaCanvasQuadraticCurveTo)],\n})\nexport class WaCanvasQuadraticCurveTo implements CanvasMethod {\n @Input()\n public cpx = 0;\n\n @Input()\n public cpy = 0;\n\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n public call(context: CanvasRenderingContext2D): void {\n context.quadraticCurveTo(this.cpx, this.cpy, this.x, this.y);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasQuadraticCurveTo}\n */\nexport const QuadraticCurveToDirective = WaCanvasQuadraticCurveTo;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasMethod} from '../tokens/canvas-method';\n\n@Directive({\n standalone: true,\n selector: 'canvas-rect',\n providers: [asCanvasMethod(WaCanvasRect)],\n})\nexport class WaCanvasRect implements CanvasMethod {\n @Input()\n public x = 0;\n\n @Input()\n public y = 0;\n\n @Input()\n public width = 0;\n\n @Input()\n public height = 0;\n\n public call(context: CanvasRenderingContext2D): void {\n context.rect(this.x, this.y, this.width, this.height);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasRect}\n */\nexport const RectDirective = WaCanvasRect;\n","import type {PipeTransform} from '@angular/core';\nimport {inject, Pipe} from '@angular/core';\n\nimport {CANVAS_2D_CONTEXT} from '../tokens/canvas-2d-context';\n\n@Pipe({\n standalone: true,\n name: 'gradient',\n})\nexport class WaCanvasGradientPipe implements PipeTransform {\n private readonly context = inject(CANVAS_2D_CONTEXT);\n\n public transform(\n stops: Map<number, string>,\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n ): CanvasGradient;\n public transform(\n stops: Map<number, string>,\n x0: number,\n y0: number,\n r0: number,\n x1: number,\n y1: number,\n r1: number,\n ): CanvasGradient;\n // eslint-disable-next-line @typescript-eslint/max-params\n public transform(\n stops: Map<number, string>,\n a1: number,\n a2: number,\n a3: number,\n a4: number,\n a5?: number,\n a6?: number,\n ): CanvasGradient {\n const gradient =\n a5 !== undefined && a6 !== undefined\n ? this.context.createRadialGradient(a1, a2, a3, a4, a5, a6)\n : this.context.createLinearGradient(a1, a2, a3, a4);\n\n Array.from(stops.keys()).forEach((stop) =>\n gradient.addColorStop(stop, stops.get(stop) ?? ''),\n );\n\n return gradient;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasGradientPipe}\n */\nexport const GradientPipe = WaCanvasGradientPipe;\n","import type {PipeTransform} from '@angular/core';\nimport {Pipe} from '@angular/core';\n\n@Pipe({\n standalone: true,\n name: 'path',\n})\nexport class WaCanvasPathPipe implements PipeTransform {\n public transform(path: string): Path2D {\n return new Path2D(path);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasPathPipe}\n */\nexport const PathPipe = WaCanvasPathPipe;\n","import type {PipeTransform} from '@angular/core';\nimport {inject, Pipe} from '@angular/core';\n\nimport {CANVAS_2D_CONTEXT} from '../tokens/canvas-2d-context';\n\n@Pipe({\n standalone: true,\n name: 'pattern',\n})\nexport class WaCanvasPatternPipe implements PipeTransform {\n private readonly context = inject(CANVAS_2D_CONTEXT);\n\n public transform(image: CanvasImageSource, repetition = 'repeat'): CanvasPattern {\n return this.context.createPattern(image, repetition)!;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasPatternPipe}\n */\nexport const PatternPipe = WaCanvasPatternPipe;\n","import type {PipeTransform} from '@angular/core';\nimport {Pipe} from '@angular/core';\n\n@Pipe({\n standalone: true,\n name: 'rad',\n})\nexport class WaCanvasRadPipe implements PipeTransform {\n public transform(input: number): number {\n return (input * Math.PI) / 180;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasRadPipe}\n */\nexport const RadPipe = WaCanvasRadPipe;\n","import type {PipeTransform} from '@angular/core';\nimport {Pipe} from '@angular/core';\n\n@Pipe({\n standalone: true,\n name: 'transform',\n})\nexport class WaCanvasTransformPipe implements PipeTransform {\n public transform(value: string): DOMMatrix {\n return new DOMMatrix(value);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasTransformPipe}\n */\nexport const TransformPipe = WaCanvasTransformPipe;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {WaCanvasClipPath} from '../methods/clip-path';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas-draw-image[clip],canvas-draw-image[clipFillRule],' +\n 'canvas-path[clip],canvas-path[clipFillRule],' +\n 'canvas-text[clip],canvas-text[clipFillRule]',\n providers: [asCanvasProperty(WaCanvasClip)],\n})\nexport class WaCanvasClip implements CanvasMethod {\n @Input()\n public clip: Path2D | WaCanvasClipPath = new Path2D();\n\n @Input()\n public clipFillRule?: CanvasFillRule;\n\n public call(context: CanvasRenderingContext2D): void {\n if (this.clip instanceof WaCanvasClipPath) {\n context.beginPath();\n\n this.clip.pathSteps.forEach((step) => {\n step.call(context);\n });\n\n context.clip(this.clipFillRule);\n } else {\n context.clip(this.clip, this.clipFillRule);\n }\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasClip}\n */\nexport const ClipDirective = WaCanvasClip;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas-draw-image[globalAlpha],canvas-draw-image[globalCompositeOperation],' +\n 'canvas-path[globalAlpha],canvas-path[globalCompositeOperation],' +\n 'canvas-text[globalAlpha],canvas-text[globalCompositeOperation]',\n providers: [asCanvasProperty(WaCanvasCompositing)],\n})\nexport class WaCanvasCompositing implements CanvasMethod, CanvasCompositing {\n @Input()\n public globalAlpha = 1;\n\n @Input()\n public globalCompositeOperation: GlobalCompositeOperation = 'source-over';\n\n public call(context: CanvasRenderingContext2D): void {\n context.globalAlpha = this.globalAlpha;\n context.globalCompositeOperation = this.globalCompositeOperation;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasCompositing}\n */\nexport const CompositingDirective = WaCanvasCompositing;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas-path[fillStyle],canvas-path[strokeStyle],' +\n 'canvas-text[fillStyle],canvas-text[strokeStyle]',\n providers: [asCanvasProperty(WaCanvasFillStrokeStyles)],\n})\nexport class WaCanvasFillStrokeStyles implements CanvasMethod {\n @Input()\n public fillStyle: CanvasGradient | CanvasPattern | string = 'black';\n\n @Input()\n public strokeStyle: CanvasGradient | CanvasPattern | string = 'transparent';\n\n public call(context: CanvasRenderingContext2D): void {\n context.fillStyle = this.fillStyle;\n context.strokeStyle = this.strokeStyle;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasFillStrokeStyles}\n */\nexport const FillStrokeStylesDirective = WaCanvasFillStrokeStyles;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector: 'canvas-draw-image[filter],canvas-path[filter],canvas-text[filter]',\n providers: [asCanvasProperty(WaCanvasFilter)],\n})\nexport class WaCanvasFilter implements CanvasMethod, CanvasFilters {\n @Input()\n public filter = 'none';\n\n public call(context: CanvasRenderingContext2D): void {\n context.filter = this.filter;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasFilter}\n */\nexport const FilterDirective = WaCanvasFilter;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas-draw-image[imageSmoothingEnabled],canvas-draw-image[imageSmoothingQuality],' +\n 'canvas-path[imageSmoothingEnabled],canvas-path[imageSmoothingQuality],' +\n 'canvas-text[imageSmoothingEnabled],canvas-text[imageSmoothingQuality]',\n providers: [asCanvasProperty(WaCanvasImageSmoothing)],\n})\nexport class WaCanvasImageSmoothing implements CanvasMethod, CanvasImageSmoothing {\n @Input()\n public imageSmoothingEnabled = true;\n\n @Input()\n public imageSmoothingQuality: ImageSmoothingQuality = 'low';\n\n public call(context: CanvasRenderingContext2D): void {\n context.imageSmoothingEnabled = this.imageSmoothingEnabled;\n context.imageSmoothingQuality = this.imageSmoothingQuality;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasImageSmoothing}\n */\nexport const ImageSmoothingDirective = WaCanvasImageSmoothing;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas-path[lineCap],canvas-path[lineDashOffset],canvas-path[lineJoin],canvas-path[lineWidth],canvas-path[lineDash],canvas-path[miterLimit],' +\n 'canvas-text[lineCap],canvas-text[lineDashOffset],canvas-text[lineJoin],canvas-text[lineWidth],canvas-text[lineDash],canvas-text[miterLimit]',\n providers: [asCanvasProperty(WaCanvasPathDrawingStyles)],\n})\nexport class WaCanvasPathDrawingStyles\n implements CanvasMethod, Omit<CanvasPathDrawingStyles, 'getLineDash' | 'setLineDash'>\n{\n @Input()\n public lineCap: CanvasLineCap = 'butt';\n\n @Input()\n public lineDashOffset = 0;\n\n @Input()\n public lineJoin: CanvasLineJoin = 'miter';\n\n @Input()\n public lineWidth = 1;\n\n @Input()\n public lineDash: number[] = [];\n\n @Input()\n public miterLimit = 10;\n\n public call(context: CanvasRenderingContext2D): void {\n context.lineCap = this.lineCap;\n context.lineDashOffset = this.lineDashOffset;\n context.lineJoin = this.lineJoin;\n context.lineWidth = this.lineWidth;\n context.miterLimit = this.miterLimit;\n context.setLineDash(this.lineDash);\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasPathDrawingStyles}\n */\nexport const PathDrawingStylesDirective = WaCanvasPathDrawingStyles;\n","import {Directive, Input} from '@angular/core';\n\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas-draw-image[shadowBlur],canvas-draw-image[shadowColor],canvas-draw-image[shadowOffsetX],canvas-draw-image[shadowOffsetY],' +\n 'canvas-path[shadowBlur],canvas-path[shadowColor],canvas-path[shadowOffsetX],canvas-path[shadowOffsetY],' +\n 'canvas-text[shadowBlur],canvas-text[shadowColor],canvas-text[shadowOffsetX],canvas-text[shadowOffsetY]',\n providers: [asCanvasProperty(WaCanvasShadowStyles)],\n})\nexport class WaCanvasShadowStyles implements CanvasShadowStyles {\n @Input()\n public shadowBlur = 0;\n\n @Input()\n public shadowColor = 'transparent';\n\n @Input()\n public shadowOffsetX = 0;\n\n @Input()\n public shadowOffsetY = 0;\n\n public call(context: CanvasRenderingContext2D): void {\n context.shadowBlur = this.shadowBlur;\n context.shadowColor = this.shadowColor;\n context.shadowOffsetX = this.shadowOffsetX;\n context.shadowOffsetY = this.shadowOffsetY;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasShadowStyles}\n */\nexport const ShadowStylesDirective = WaCanvasShadowStyles;\n","import {Directive, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas-text[direction],canvas-text[font],canvas-text[textAlign],canvas-text[textBaseline]',\n providers: [asCanvasProperty(WaCanvasTextDrawingStyles)],\n})\nexport class WaCanvasTextDrawingStyles implements CanvasMethod, CanvasTextDrawingStyles {\n @Input()\n public direction: CanvasDirection = 'inherit';\n\n @Input()\n public font = '10px sans-serif';\n\n @Input()\n public textAlign: CanvasTextAlign = 'start';\n\n @Input()\n public fontKerning: CanvasFontKerning = 'auto';\n\n @Input()\n public textBaseline: CanvasTextBaseline = 'alphabetic';\n\n public call(context: CanvasRenderingContext2D): void {\n context.direction = this.direction;\n context.font = this.font;\n context.textAlign = this.textAlign;\n context.textBaseline = this.textBaseline;\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasTextDrawingStyles}\n */\nexport const TextDrawingStylesDirective = WaCanvasTextDrawingStyles;\n","import {Directive, inject, Input} from '@angular/core';\n\nimport type {CanvasMethod} from '../interfaces/canvas-method';\nimport {asCanvasProperty} from '../tokens/canvas-properties';\n\n@Directive({\n standalone: true,\n selector:\n 'canvas[transform],canvas-draw-image[transform],canvas-path[transform],canvas-text[transform]',\n providers: [asCanvasProperty(WaCanvasTransform)],\n})\nexport class WaCanvasTransform implements CanvasMethod {\n private readonly parent = inject(WaCanvasTransform, {\n skipSelf: true,\n optional: true,\n });\n\n @Input()\n public transform: DOMMatrix = new DOMMatrix();\n\n public call(context: CanvasRenderingContext2D): void {\n context.setTransform(\n this.parent?.transform.multiply(this.transform) || this.transform,\n );\n }\n}\n\n/**\n * @deprecated: use {@link WaCanvasTransform}\n */\nexport const TransformDirective = WaCanvasTransform;\n","import {WaCanvas2d} from './contexts/canvas-2d';\nimport {WaCanvasClipPath} from './methods/clip-path';\nimport {WaCanvasDrawImage} from './methods/draw-image';\nimport {WaCanvasPath} from './methods/path';\nimport {WaCanvasPath2d} from './methods/path-2d';\nimport {WaCanvasText} from './methods/text';\nimport {WaCanvasArc} from './path/arc';\nimport {WaCanvasArcTo} from './path/arc-to';\nimport {WaCanvasBezierCurveTo} from './path/bezier-curve-to';\nimport {WaCanvasEllipse} from './path/ellipse';\nimport {WaCanvasLineTo} from './path/line-to';\nimport {WaCanvasMoveTo} from './path/move-to';\nimport {WaCanvasQuadraticCurveTo} from './path/quadratic-curve-to';\nimport {WaCanvasRect} from './path/rect';\nimport {WaCanvasGradientPipe} from './pipes/gradient.pipe';\nimport {WaCanvasPathPipe} from './pipes/path.pipe';\nimport {WaCanvasPatternPipe} from './pipes/pattern.pipe';\nimport {WaCanvasRadPipe} from './pipes/rad.pipe';\nimport {WaCanvasTransformPipe} from './pipes/transform.pipe';\nimport {WaCanvasClip} from './properties/clip';\nimport {WaCanvasCompositing} from './properties/compositing';\nimport {WaCanvasFillStrokeStyles} from './properties/fill-stroke-styles';\nimport {WaCanvasFilter} from './properties/filter';\nimport {WaCanvasImageSmoothing} from './properties/image-smoothing';\nimport {WaCanvasPathDrawingStyles} from './properties/path-drawing-styles';\nimport {WaCanvasShadowStyles} from './properties/shadow-styles';\nimport {WaCanvasTextDrawingStyles} from './properties/text-drawing-styles';\nimport {WaCanvasTransform} from './properties/transform';\n\nexport const WaCanvas = [\n WaCanvas2d,\n WaCanvasClipPath,\n WaCanvasDrawImage,\n WaCanvasPath,\n WaCanvasPath2d,\n WaCanvasText,\n WaCanvasArc,\n WaCanvasArcTo,\n WaCanvasBezierCurveTo,\n WaCanvasEllipse,\n WaCanvasLineTo,\n WaCanvasMoveTo,\n WaCanvasQuadraticCurveTo,\n WaCanvasRect,\n WaCanvasClip,\n WaCanvasCompositing,\n WaCanvasFillStrokeStyles,\n WaCanvasFilter,\n WaCanvasImageSmoothing,\n WaCanvasPathDrawingStyles,\n WaCanvasShadowStyles,\n WaCanvasTextDrawingStyles,\n WaCanvasGradientPipe,\n WaCanvasPathPipe,\n WaCanvasPatternPipe,\n WaCanvasRadPipe,\n WaCanvasTransform,\n WaCanvasTransformPipe,\n];\n\n/**\n * @deprecated: use {@link WaCanvas}\n */\nexport const CanvasModule = WaCanvas;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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