@acorex/components 22.2.20 → 22.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-image-editor.mjs","sources":["../../../../packages/components/image-editor/src/lib/image-editor.service.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.html","../../../../packages/components/image-editor/src/lib/image-editor-canvas.util.ts","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.html","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.html","../../../../packages/components/image-editor/src/lib/image-editor-aspect-ratio.util.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.html","../../../../packages/components/image-editor/src/lib/image-editor.module.ts","../../../../packages/components/image-editor/src/acorex-components-image-editor.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\nexport type AXImageEditorTool = 'pen' | 'highlight' | 'crop' | 'rotate';\n\n@Injectable()\nexport class AXImageEditorService {\n activeToolState = signal<AXImageEditorTool | null>(null);\n penColor = signal<string | CanvasGradient | CanvasPattern>('rgb(12, 12, 12)');\n highlightColor = signal<string | CanvasGradient | CanvasPattern>('rgb(255, 210, 48)');\n penWidth = signal<number>(10);\n highlightWidth = signal<number>(10);\n penType = signal<'pen' | 'highlight' | null>(null);\n rotate = signal({ state: 0, userInteract: false });\n isImageLoad = signal(false);\n loadError = signal(false);\n newImage: HTMLImageElement | null = null;\n initialImage: HTMLImageElement | null = null;\n imageBlob = signal<Blob[]>([]);\n undoPressed = signal(false);\n redoPressed = signal(false);\n canUndo = signal(false);\n canRedo = signal(false);\n cropperRatio = signal<string | null>(null);\n cropperSize = signal(150);\n\n toggleTool(tool: AXImageEditorTool) {\n if (this.activeToolState() === tool) {\n this.activeToolState.set(null);\n this.penType.set(null);\n return;\n }\n\n this.activateTool(tool);\n }\n\n activateTool(tool: AXImageEditorTool) {\n this.activeToolState.set(tool);\n\n if (tool === 'pen' || tool === 'highlight') {\n this.penType.set(tool);\n return;\n }\n\n this.penType.set(null);\n }\n\n undo(): void {\n if (!this.canUndo()) {\n return;\n }\n this.undoPressed.set(true);\n }\n\n redo(): void {\n if (!this.canRedo()) {\n return;\n }\n this.redoPressed.set(true);\n }\n\n /** Handles Ctrl/Cmd+Z and Ctrl/Cmd+Y history shortcuts. Returns true when handled. */\n handleHistoryShortcut(event: KeyboardEvent): boolean {\n const modifier = event.ctrlKey || event.metaKey;\n if (!modifier) {\n return false;\n }\n\n const isUndo = event.code === 'KeyZ' && !event.shiftKey;\n const isRedo = event.code === 'KeyY' || (event.code === 'KeyZ' && event.shiftKey);\n\n if (isUndo) {\n if (!this.canUndo()) {\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n this.undo();\n return true;\n }\n\n if (isRedo) {\n if (!this.canRedo()) {\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n this.redo();\n return true;\n }\n\n return false;\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n Renderer2,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorService } from '../image-editor.service';\n\ntype AXImageEditorCropHandle =\n | 'right'\n | 'top'\n | 'left'\n | 'bottom'\n | 'right-top'\n | 'bottom-right'\n | 'bottom-left'\n | 'left-top';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-cropper-window',\n templateUrl: './image-editor-cropper-window.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './image-editor-cropper-window.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropperWindowComponent }],\n})\nexport class AXImageEditorCropperWindowComponent implements OnDestroy {\n readonly showGrid = input(true);\n\n /** Base size in pixels used to calculate the initial cropper window dimensions. */\n readonly size = input<number>();\n\n protected service = inject(AXImageEditorService);\n private ngZone = inject(NgZone);\n private selectedHandle = signal<AXImageEditorCropHandle | null>(null);\n private panState = signal(false);\n private elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n protected cropperWindow = viewChild<ElementRef>('r');\n private currentX = signal(0);\n private currentY = signal(0);\n private aspectWidth = signal(1);\n private aspectHeight = signal(1);\n private isMousePressed = signal(false);\n protected renderer = inject(Renderer2);\n private platformID = inject(PLATFORM_ID);\n private mouseMoveEvent?: () => void;\n private mouseUpEvent?: () => void;\n private mouseMoveEvent2?: () => void;\n private mouseUpEvent2?: () => void;\n private mouseDownEvent?: () => void;\n private mouseLeaveEvent?: () => void;\n private positioned = false;\n\n #sizeEffect = effect(() => {\n const host = this.elementRef.nativeElement;\n const scale = this.size() ?? this.service.cropperSize();\n const ratio = this.service.cropperRatio();\n const { width, height } = this.normalizeRatio(ratio);\n\n this.aspectWidth.set(width);\n this.aspectHeight.set(height);\n\n const parent = host.parentElement;\n const maxW = parent?.clientWidth || scale * width;\n const maxH = parent?.clientHeight || scale * height;\n const nextWidth = Math.min(width * scale, maxW * 0.9);\n const nextHeight = (nextWidth * height) / width;\n\n host.style.width = `${Math.max(20, nextWidth)}px`;\n host.style.height = `${Math.max(20, Math.min(nextHeight, maxH * 0.9))}px`;\n\n if (this.positioned) {\n untracked(() => this.clampToParent());\n }\n });\n\n #init = afterNextRender(() => {\n const host = this.elementRef.nativeElement;\n this.centerOnParent();\n this.positioned = true;\n\n this.ngZone.runOutsideAngular(() => {\n this.mouseMoveEvent = this.renderer.listen(document, 'pointermove', this.changeSizeHandler.bind(this));\n this.mouseUpEvent = this.renderer.listen(document, 'pointerup', this.clearSelector.bind(this));\n this.mouseDownEvent = this.renderer.listen(host, 'pointerdown', this.panDown.bind(this));\n this.mouseMoveEvent2 = this.renderer.listen(host, 'pointermove', this.panMove.bind(this));\n this.mouseUpEvent2 = this.renderer.listen(host, 'pointerup', this.panUp.bind(this));\n });\n });\n\n ngOnDestroy(): void {\n if (!isPlatformBrowser(this.platformID)) {\n return;\n }\n this.mouseMoveEvent?.();\n this.mouseUpEvent?.();\n this.mouseDownEvent?.();\n this.mouseMoveEvent2?.();\n this.mouseUpEvent2?.();\n this.mouseLeaveEvent?.();\n }\n\n protected panMove(e: PointerEvent) {\n if (!this.isMousePressed()) return;\n if (this.selectedHandle()) return;\n if (!this.panState()) return;\n\n this.currentX.update((prev) => prev + e.movementX);\n this.currentY.update((prev) => prev + e.movementY);\n this.clampToParent();\n }\n\n protected panDown(e: PointerEvent) {\n if (this.selectedHandle()) return;\n this.isMousePressed.set(true);\n this.panState.set(true);\n (e.currentTarget as HTMLElement | null)?.setPointerCapture?.(e.pointerId);\n }\n\n protected panUp() {\n this.isMousePressed.set(false);\n this.panState.set(false);\n }\n\n public getCropperArea() {\n return this.elementRef.nativeElement.getBoundingClientRect();\n }\n\n private startX = 0;\n private startY = 0;\n private startWidth = 0;\n private startHeight = 0;\n private startLeft = 0;\n private startTop = 0;\n\n protected handleSelector(e: PointerEvent, value: AXImageEditorCropHandle) {\n e.stopPropagation();\n e.preventDefault();\n const host = this.elementRef.nativeElement;\n this.startX = e.clientX;\n this.startY = e.clientY;\n this.startWidth = host.offsetWidth;\n this.startHeight = host.offsetHeight;\n this.startLeft = host.offsetLeft;\n this.startTop = host.offsetTop;\n this.selectedHandle.set(value);\n this.isMousePressed.set(true);\n (e.currentTarget as HTMLElement | null)?.setPointerCapture?.(e.pointerId);\n }\n\n protected changeSizeHandler(e: PointerEvent) {\n if (!this.isMousePressed()) return;\n if (this.panState()) return;\n if (!this.selectedHandle()) return;\n\n const host = this.elementRef.nativeElement;\n const dy = e.clientY - this.startY;\n const dx = e.clientX - this.startX;\n const minSize = 20;\n const locked = !!this.service.cropperRatio();\n const aspect = this.aspectWidth() / this.aspectHeight();\n\n let width = this.startWidth;\n let height = this.startHeight;\n let left = this.startLeft;\n let top = this.startTop;\n\n switch (this.selectedHandle()) {\n case 'right':\n width = Math.max(minSize, this.startWidth + dx);\n break;\n case 'top':\n height = Math.max(minSize, this.startHeight - dy);\n top = this.startTop + (this.startHeight - height);\n break;\n case 'left':\n width = Math.max(minSize, this.startWidth - dx);\n left = this.startLeft + (this.startWidth - width);\n break;\n case 'bottom':\n height = Math.max(minSize, this.startHeight + dy);\n break;\n case 'right-top':\n width = Math.max(minSize, this.startWidth + dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight - dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n top = this.startTop + (this.startHeight - height);\n break;\n case 'bottom-right':\n width = Math.max(minSize, this.startWidth + dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight + dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n break;\n case 'bottom-left':\n width = Math.max(minSize, this.startWidth - dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight + dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n left = this.startLeft + (this.startWidth - width);\n break;\n case 'left-top':\n width = Math.max(minSize, this.startWidth - dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight - dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n left = this.startLeft + (this.startWidth - width);\n top = this.startTop + (this.startHeight - height);\n break;\n }\n\n host.style.width = `${width}px`;\n host.style.height = `${height}px`;\n this.currentX.set(left);\n this.currentY.set(top);\n this.clampToParent();\n }\n\n protected clearSelector() {\n this.selectedHandle.set(null);\n this.isMousePressed.set(false);\n this.panState.set(false);\n }\n\n private normalizeRatio(ratio: string | null): { width: number; height: number } {\n let width = 1;\n let height = 1;\n\n if (ratio && ratio.includes(':')) {\n const [rawW, rawH] = ratio.split(':').map(Number);\n if (rawW > 0 && rawH > 0) {\n width = rawW;\n height = rawH;\n }\n }\n\n if (width >= height) {\n return { width: width / height, height: 1 };\n }\n\n return { width: 1, height: height / width };\n }\n\n private centerOnParent(): void {\n const host = this.elementRef.nativeElement;\n const parent = host.parentElement;\n if (!parent) {\n return;\n }\n\n const left = Math.max(0, (parent.clientWidth - host.offsetWidth) / 2);\n const top = Math.max(0, (parent.clientHeight - host.offsetHeight) / 2);\n this.currentX.set(left);\n this.currentY.set(top);\n this.applyPosition();\n }\n\n private clampToParent(): void {\n const host = this.elementRef.nativeElement;\n const parent = host.parentElement;\n if (!parent) {\n this.applyPosition();\n return;\n }\n\n const maxX = Math.max(0, parent.clientWidth - host.offsetWidth);\n const maxY = Math.max(0, parent.clientHeight - host.offsetHeight);\n this.currentX.set(Math.min(Math.max(0, this.currentX()), maxX));\n this.currentY.set(Math.min(Math.max(0, this.currentY()), maxY));\n this.applyPosition();\n }\n\n private applyPosition(): void {\n const host = this.elementRef.nativeElement;\n host.style.left = `${this.currentX()}px`;\n host.style.top = `${this.currentY()}px`;\n }\n}\n","<div [style.border]=\"!showGrid() ? '1px dashed white' : null\" #r class=\"ax-image-cropper-window-container\">\n @if (!service.cropperRatio()) {\n <div (pointerdown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (pointerdown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div\n (pointerdown)=\"handleSelector($event, 'bottom-right')\"\n class=\"ax-image-bottom-right-handle ax-handle-shape\"\n ></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left-top')\" class=\"ax-image-left-top-handle ax-handle-shape\"></div>\n\n @if (showGrid()) {\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n }\n</div>\n","export const IMAGE_EDITOR_MAX_BUFFER = 4096;\nexport const IMAGE_EDITOR_EXPORT_QUALITY = 1;\n\nexport function loadHtmlImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n if (!src.startsWith('data:') && !src.startsWith('blob:')) {\n image.crossOrigin = 'anonymous';\n }\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('Failed to load image'));\n image.src = src;\n });\n}\n\nexport function canvasToBlob(canvas: HTMLCanvasElement, type: string, quality?: number): Promise<Blob> {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n return;\n }\n reject(new Error(`toBlob returned null for type ${type}`));\n },\n type,\n quality,\n );\n });\n}\n\nexport async function canvasToEditorBlobs(canvas: HTMLCanvasElement): Promise<Blob[]> {\n const jpeg = await canvasToBlob(canvas, 'image/jpeg', IMAGE_EDITOR_EXPORT_QUALITY);\n const extra = await Promise.allSettled([\n canvasToBlob(canvas, 'image/png'),\n canvasToBlob(canvas, 'image/webp', IMAGE_EDITOR_EXPORT_QUALITY),\n ]);\n\n const blobs: Blob[] = [jpeg];\n for (const result of extra) {\n if (result.status === 'fulfilled') {\n blobs.push(result.value);\n }\n }\n return blobs;\n}\n\nexport function bufferSizeForImage(\n width: number,\n height: number,\n max = IMAGE_EDITOR_MAX_BUFFER,\n): { width: number; height: number } {\n const scale = Math.min(1, max / Math.max(width, height, 1));\n return {\n width: Math.max(1, Math.round(width * scale)),\n height: Math.max(1, Math.round(height * scale)),\n };\n}\n","import { AXComponent, MXBaseComponent } from '@acorex/cdk/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorContainerComponent } from '../image-editor-container/image-editor-container.component';\nimport { AXImageEditorCropperWindowComponent } from '../image-editor-cropper-window/image-editor-cropper-window.component';\nimport {\n bufferSizeForImage,\n canvasToEditorBlobs,\n loadHtmlImage,\n} from '../image-editor-canvas.util';\nimport { AXImageEditorService } from '../image-editor.service';\n\n@Component({\n selector: 'ax-image-editor-view',\n templateUrl: './image-editor-view.component.html',\n styleUrls: ['./image-editor-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXImageEditorCropperWindowComponent],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorViewComponent }],\n})\nexport class AXImageEditorViewComponent extends MXBaseComponent {\n /**\n * its change grid display state.\n */\n readonly showGrid = input(true);\n /**\n * Base size in pixels for the initial cropper window dimensions.\n */\n readonly cropperSize = input<number>();\n /**\n * its change grid display state.\n */\n readonly lockRatio = signal(false);\n /**\n * its receive image src.\n */\n readonly src = input<string>('');\n /** @ignore */\n protected canvasElem = viewChild<ElementRef<HTMLCanvasElement>>('canvasElem');\n /** @ignore */\n protected cropperWindow = viewChild<AXImageEditorCropperWindowComponent>('f');\n /** @ignore */\n protected ctx = signal<CanvasRenderingContext2D | null>(null);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected isMouseDown = signal(false);\n /** @ignore */\n protected isDrawRectangleCreated = signal(false);\n /** @ignore */\n protected parent = inject(AXImageEditorContainerComponent);\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly host = inject(ElementRef<HTMLElement>);\n\n /** @ignore */\n protected imageEditorHistory = signal<HTMLImageElement[]>([]);\n /** @ignore */\n protected imageEditorHistoryPointer = signal(-1);\n\n private canvasReady = signal(false);\n private drawing = false;\n private didDraw = false;\n private highlightSnapshot: ImageData | null = null;\n private highlightPoints: Array<{ x: number; y: number }> = [];\n private persistGeneration = 0;\n private sourceToken = 0;\n\n constructor() {\n super();\n\n afterNextRender(() => {\n const canvas = this.canvasElem()?.nativeElement;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n if (!ctx) {\n return;\n }\n\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n this.ctx.set(ctx);\n this.canvasReady.set(true);\n\n const onResize = () => this.fitCanvasDisplay();\n window.addEventListener('resize', onResize);\n this.destroyRef.onDestroy(() => window.removeEventListener('resize', onResize));\n });\n\n effect(() => {\n const src = this.src();\n const ready = this.canvasReady();\n if (!ready) {\n return;\n }\n untracked(() => void this.loadSource(src));\n });\n\n effect(() => {\n if (!this.service.undoPressed()) {\n return;\n }\n untracked(() => {\n this.applyUndo();\n this.service.undoPressed.set(false);\n });\n });\n\n effect(() => {\n if (!this.service.redoPressed()) {\n return;\n }\n untracked(() => {\n this.applyRedo();\n this.service.redoPressed.set(false);\n });\n });\n\n effect(() => {\n const rotate = this.service.rotate();\n const ctx = this.ctx();\n if (!rotate.userInteract || !ctx) {\n return;\n }\n untracked(() => void this.rotateImage());\n });\n\n effect(() => {\n if (!this.service.isImageLoad()) {\n return;\n }\n untracked(() => {\n requestAnimationFrame(() => this.fitCanvasDisplay());\n });\n });\n\n effect(() => {\n const size = this.cropperSize();\n if (size != null) {\n this.service.cropperSize.set(size);\n }\n });\n }\n\n /** @ignore */\n protected resizeWindow() {\n this.fitCanvasDisplay();\n }\n\n /** @ignore */\n protected canvasResponsive(image: HTMLImageElement) {\n this.paintImage(image);\n }\n\n private async loadSource(src: string): Promise<void> {\n const token = ++this.sourceToken;\n this.service.loadError.set(false);\n this.service.isImageLoad.set(false);\n this.service.imageBlob.set([]);\n this.service.newImage = null;\n this.service.initialImage = null;\n\n if (!src) {\n return;\n }\n\n try {\n const image = await loadHtmlImage(src);\n if (token !== this.sourceToken) {\n return;\n }\n this.service.initialImage = image;\n this.service.newImage = image;\n this.replaceHistory(image);\n this.paintImage(image);\n this.service.isImageLoad.set(true);\n } catch {\n if (token !== this.sourceToken) {\n return;\n }\n this.service.loadError.set(true);\n this.service.isImageLoad.set(false);\n }\n }\n\n private paintImage(image: HTMLImageElement): void {\n const canvas = this.canvasElem()?.nativeElement;\n const ctx = this.ctx();\n if (!canvas || !ctx || !image) {\n return;\n }\n\n const buffer = bufferSizeForImage(image.naturalWidth || image.width, image.naturalHeight || image.height);\n canvas.width = buffer.width;\n canvas.height = buffer.height;\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n this.fitCanvasDisplay();\n }\n\n private fitCanvasDisplay(): void {\n const canvas = this.canvasElem()?.nativeElement;\n if (!canvas?.width || !canvas.height) {\n return;\n }\n\n const parent = this.host.nativeElement;\n const maxW = Math.max(parent?.clientWidth || 0, 240);\n const maxH = Math.min(window.innerHeight * 0.55, 560);\n const scale = Math.min(maxW / canvas.width, maxH / canvas.height, 1);\n canvas.style.width = `${Math.max(1, Math.round(canvas.width * scale))}px`;\n canvas.style.height = `${Math.max(1, Math.round(canvas.height * scale))}px`;\n }\n\n private replaceHistory(image: HTMLImageElement): void {\n this.imageEditorHistory.set([image]);\n this.imageEditorHistoryPointer.set(0);\n this.syncHistoryFlags();\n }\n\n private pushHistory(image: HTMLImageElement): void {\n const pointer = this.imageEditorHistoryPointer();\n const next = this.imageEditorHistory().slice(0, pointer + 1);\n next.push(image);\n this.imageEditorHistory.set(next);\n this.imageEditorHistoryPointer.set(next.length - 1);\n this.syncHistoryFlags();\n }\n\n private syncHistoryFlags(): void {\n const pointer = this.imageEditorHistoryPointer();\n const length = this.imageEditorHistory().length;\n this.service.canUndo.set(pointer > 0);\n this.service.canRedo.set(pointer >= 0 && pointer < length - 1);\n }\n\n private applyUndo(): void {\n const pointer = this.imageEditorHistoryPointer();\n if (pointer < 1) {\n this.syncHistoryFlags();\n return;\n }\n\n const nextPointer = pointer - 1;\n const image = this.imageEditorHistory()[nextPointer];\n this.imageEditorHistoryPointer.set(nextPointer);\n this.service.newImage = image;\n this.paintImage(image);\n this.syncHistoryFlags();\n void this.persistCanvas({ skipHistory: true });\n }\n\n private applyRedo(): void {\n const history = this.imageEditorHistory();\n const pointer = this.imageEditorHistoryPointer();\n if (pointer >= history.length - 1) {\n this.syncHistoryFlags();\n return;\n }\n\n const nextPointer = pointer + 1;\n const image = history[nextPointer];\n this.imageEditorHistoryPointer.set(nextPointer);\n this.service.newImage = image;\n this.paintImage(image);\n this.syncHistoryFlags();\n void this.persistCanvas({ skipHistory: true });\n }\n\n private canvasPoint(event: PointerEvent): { x: number; y: number } {\n const canvas = this.canvasElem()!.nativeElement;\n const rect = canvas.getBoundingClientRect();\n const width = rect.width || 1;\n const height = rect.height || 1;\n return {\n x: ((event.clientX - rect.left) / width) * canvas.width,\n y: ((event.clientY - rect.top) / height) * canvas.height,\n };\n }\n\n private isDrawTool(): boolean {\n const tool = this.service.penType();\n return tool === 'pen' || tool === 'highlight';\n }\n\n /** @ignore */\n protected penConfigHandler(penType: 'pen' | 'highlight') {\n const ctx = this.ctx();\n if (!ctx) {\n return;\n }\n\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n\n switch (penType) {\n case 'pen':\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n ctx.strokeStyle = this.service.penColor();\n ctx.lineWidth = this.service.penWidth();\n break;\n case 'highlight':\n ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'multiply';\n ctx.strokeStyle = this.service.highlightColor();\n ctx.lineWidth = this.service.highlightWidth();\n break;\n }\n }\n\n private strokeHighlight(points: Array<{ x: number; y: number }>): void {\n const ctx = this.ctx();\n if (!ctx || points.length === 0) {\n return;\n }\n\n this.penConfigHandler('highlight');\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n if (points.length === 1) {\n ctx.lineTo(points[0].x, points[0].y);\n }\n ctx.stroke();\n }\n\n /** @ignore */\n protected historyKeyDown(event: KeyboardEvent): void {\n if (this.parent.disabled) {\n return;\n }\n\n this.service.handleHistoryShortcut(event);\n }\n\n /** @ignore */\n protected focusCanvas(): void {\n this.canvasElem()?.nativeElement.focus({ preventScroll: true });\n }\n\n /** @ignore */\n protected mouseDownHandler(event: PointerEvent) {\n this.focusCanvas();\n\n if (!this.isDrawTool() || this.parent.disabled) {\n return;\n }\n\n const ctx = this.ctx();\n const canvas = this.canvasElem()?.nativeElement;\n const penType = this.service.penType();\n if (!ctx || !canvas || !penType) {\n return;\n }\n\n event.preventDefault();\n canvas.setPointerCapture(event.pointerId);\n this.isMouseDown.set(true);\n this.drawing = true;\n this.didDraw = false;\n\n const point = this.canvasPoint(event);\n this.penConfigHandler(penType);\n\n if (penType === 'highlight') {\n this.highlightSnapshot = ctx.getImageData(0, 0, canvas.width, canvas.height);\n this.highlightPoints = [point];\n this.strokeHighlight(this.highlightPoints);\n } else {\n ctx.beginPath();\n ctx.moveTo(point.x, point.y);\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n }\n this.didDraw = true;\n }\n\n /** @ignore */\n protected mouseMoveHandler(event: PointerEvent) {\n if (!this.drawing || !this.isDrawTool()) {\n return;\n }\n\n const ctx = this.ctx();\n const canvas = this.canvasElem()?.nativeElement;\n const penType = this.service.penType();\n if (!ctx || !canvas || !penType) {\n return;\n }\n\n const point = this.canvasPoint(event);\n if (penType === 'highlight' && this.highlightSnapshot) {\n ctx.putImageData(this.highlightSnapshot, 0, 0);\n this.highlightPoints.push(point);\n this.strokeHighlight(this.highlightPoints);\n } else {\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n }\n this.didDraw = true;\n }\n\n /** @ignore */\n protected mouseUpHandler(event?: PointerEvent) {\n const canvas = this.canvasElem()?.nativeElement;\n if (event && canvas?.hasPointerCapture(event.pointerId)) {\n canvas.releasePointerCapture(event.pointerId);\n }\n\n const wasDrawing = this.drawing && this.didDraw;\n this.drawing = false;\n this.didDraw = false;\n this.isMouseDown.set(false);\n this.highlightSnapshot = null;\n this.highlightPoints = [];\n\n const ctx = this.ctx();\n if (ctx) {\n ctx.closePath();\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n }\n\n if (wasDrawing) {\n void this.persistCanvas();\n }\n }\n\n /** Applies the current cropper selection. */\n async crop(): Promise<void> {\n const cropper = this.cropperWindow();\n const ctx = this.ctx();\n const canvas = this.canvasElem()?.nativeElement;\n if (this.service.activeToolState() !== 'crop' || !cropper || !ctx || !canvas) {\n return;\n }\n\n const cropRect = cropper.getCropperArea();\n const canvasRect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / (canvasRect.width || 1);\n const scaleY = canvas.height / (canvasRect.height || 1);\n const dx = Math.max(0, Math.round((cropRect.x - canvasRect.x) * scaleX));\n const dy = Math.max(0, Math.round((cropRect.y - canvasRect.y) * scaleY));\n const cropWidth = Math.max(1, Math.round(cropRect.width * scaleX));\n const cropHeight = Math.max(1, Math.round(cropRect.height * scaleY));\n const width = Math.min(cropWidth, canvas.width - dx);\n const height = Math.min(cropHeight, canvas.height - dy);\n\n const imageData = ctx.getImageData(dx, dy, width, height);\n canvas.width = width;\n canvas.height = height;\n ctx.putImageData(imageData, 0, 0);\n this.fitCanvasDisplay();\n this.service.activeToolState.set(null);\n this.service.penType.set(null);\n await this.persistCanvas();\n }\n\n /** Encodes the current canvas into JPEG, PNG, and WebP blobs. */\n async commitChanges(): Promise<Blob[]> {\n await this.persistCanvas();\n return this.service.imageBlob();\n }\n\n /** @ignore */\n protected async rotateImage() {\n const canvas = this.canvasElem()?.nativeElement;\n const ctx = this.ctx();\n if (!canvas || !ctx || !canvas.width || !canvas.height) {\n this.service.rotate.update((prev) => ({ state: prev.state, userInteract: false }));\n return;\n }\n\n const source = document.createElement('canvas');\n source.width = canvas.width;\n source.height = canvas.height;\n const sourceCtx = source.getContext('2d');\n if (!sourceCtx) {\n this.service.rotate.update((prev) => ({ state: prev.state, userInteract: false }));\n return;\n }\n sourceCtx.drawImage(canvas, 0, 0);\n\n const degrees = this.service.rotate().state;\n const radians = (degrees * Math.PI) / 180;\n const cos = Math.abs(Math.cos(radians));\n const sin = Math.abs(Math.sin(radians));\n const rotatedWidth = Math.max(1, Math.round(source.width * cos + source.height * sin));\n const rotatedHeight = Math.max(1, Math.round(source.width * sin + source.height * cos));\n\n canvas.width = rotatedWidth;\n canvas.height = rotatedHeight;\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.save();\n ctx.translate(canvas.width / 2, canvas.height / 2);\n ctx.rotate(radians);\n ctx.drawImage(source, -source.width / 2, -source.height / 2);\n ctx.restore();\n this.fitCanvasDisplay();\n\n await this.persistCanvas();\n this.service.rotate.update((prev) => ({ state: prev.state, userInteract: false }));\n }\n\n private async persistCanvas(options?: { skipHistory?: boolean }): Promise<void> {\n const canvas = this.canvasElem()?.nativeElement;\n if (!canvas?.width || !canvas.height) {\n return;\n }\n\n const generation = ++this.persistGeneration;\n\n try {\n const blobs = await canvasToEditorBlobs(canvas);\n if (generation !== this.persistGeneration) {\n return;\n }\n this.service.imageBlob.set(blobs);\n\n const dataUrl = canvas.toDataURL('image/jpeg', 1);\n const image = await loadHtmlImage(dataUrl);\n if (generation !== this.persistGeneration) {\n return;\n }\n\n this.service.newImage = image;\n if (!options?.skipHistory) {\n this.pushHistory(image);\n }\n } catch {\n if (generation !== this.persistGeneration) {\n return;\n }\n }\n }\n}\n","<div class=\"ax-image-editor-stage\">\n <canvas\n tabindex=\"0\"\n (pointerdown)=\"mouseDownHandler($event)\"\n (pointerup)=\"mouseUpHandler($event)\"\n (pointercancel)=\"mouseUpHandler($event)\"\n (pointermove)=\"mouseMoveHandler($event)\"\n (keydown)=\"historyKeyDown($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n ></canvas>\n\n @if (service.activeToolState() === 'crop') {\n <ax-image-editor-cropper-window [showGrid]=\"showGrid()\" #f></ax-image-editor-cropper-window>\n }\n</div>\n","import {\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { AXImageEditorViewComponent } from '../image-editor-view/image-editor-view.component';\nimport { AXImageEditorService } from '../image-editor.service';\n\n/**\n * paint container.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-container',\n templateUrl: './image-editor-container.component.html',\n styleUrl: './image-editor-container.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n outputs: ['onValueChanged'],\n inputs: ['look', 'disabled'],\n host: {\n '[class.ax-state-disabled]': 'disabled',\n '[attr.name]': 'name',\n tabindex: '-1',\n '(keydown)': 'handleHistoryShortcut($event)',\n },\n providers: [\n AXImageEditorService,\n { provide: AXComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXValuableComponent, useExisting: AXImageEditorContainerComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXImageEditorContainerComponent),\n multi: true,\n },\n ],\n imports: [AXDecoratorModule, AXLoadingSpinnerComponent, AsyncPipe, AXTranslatorPipe],\n})\nexport class AXImageEditorContainerComponent extends classes(MXInputBaseValueComponent<Blob[]>, MXLookComponent) {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n imageEditorContainer = viewChild<ElementRef>('f');\n\n view = contentChild<AXImageEditorViewComponent>(AXImageEditorViewComponent);\n\n constructor() {\n super();\n\n afterNextRender(() => {\n const onKeyDown = (event: KeyboardEvent) => this.handleHistoryShortcut(event);\n document.addEventListener('keydown', onKeyDown, true);\n this.destroyRef.onDestroy(() => document.removeEventListener('keydown', onKeyDown, true));\n });\n }\n\n #syncValue = effect(() => {\n const blobs = this.service.imageBlob();\n if (blobs.length) {\n this.commitValue(blobs, true);\n } else {\n this.commitValue(null);\n }\n });\n\n /** @ignore */\n protected focusEditor(): void {\n this.host.nativeElement.focus({ preventScroll: true });\n }\n\n /** Applies the current cropper selection. */\n async crop(): Promise<void> {\n const oldValue = this.value;\n\n await this.view()?.crop();\n\n const blobs = this.service.imageBlob();\n\n if (blobs.length && this.value === oldValue) {\n this.commitValue(blobs, true);\n }\n }\n\n /** @ignore */\n protected onEditorPointerDown(event: PointerEvent): void {\n const target = event.target;\n if (target instanceof Element && target.closest('canvas.ax-canvas-element')) {\n return;\n }\n\n this.focusEditor();\n }\n\n /** @ignore */\n protected handleHistoryShortcut(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n const root = this.host.nativeElement;\n const activeElement = document.activeElement;\n const isInsideEditor =\n root.contains(activeElement) || event.composedPath().some((node) => node === root);\n\n if (!isInsideEditor) {\n return;\n }\n\n const target = (event.target ?? activeElement) as EventTarget | null;\n if (\n target instanceof HTMLElement &&\n (target.isContentEditable || target.closest('input, textarea, select, [contenteditable=\"true\"]'))\n ) {\n return;\n }\n\n this.service.handleHistoryShortcut(event);\n }\n\n /** Encodes the current canvas into JPEG, PNG, and WebP blobs. */\n async commitChanges(): Promise<Blob[]> {\n const view = this.view();\n if (!view) {\n return this.service.imageBlob();\n }\n\n if (this.service.activeToolState() === 'crop') {\n await view.crop();\n }\n\n return view.commitChanges();\n }\n}\n","<div\n #f\n class=\"ax-editor-container ax-default {{ look }}\"\n [class.ax-image-editor-pending]=\"!service.isImageLoad()\"\n (pointerdown)=\"onEditorPointerDown($event)\"\n>\n <ng-content select=\"ax-header\"></ng-content>\n\n <ng-content select=\"ax-image-editor-view\"> </ng-content>\n\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n@if (!service.isImageLoad()) {\n @if (service.loadError()) {\n <div class=\"ax-error-container\">{{ '@acorex:image-editor.load-error' | translate | async }}</div>\n } @else {\n <div class=\"ax-loading-spinner-container\">\n <ax-loading-spinner\n [size]=\"16\"\n color=\"primary\"\n [text]=\"('@acorex:image-editor.loading' | translate | async) || ''\"\n ></ax-loading-spinner>\n </div>\n }\n}\n\n<div class=\"ax-error-container\"></div>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n\n@if (disabled) {\n <div class=\"ax-disable-overlay\"></div>\n}\n","export const IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX = ':active';\n\nexport function parseAspectRatioItem(item: string): { ratio: string; active: boolean } {\n if (item.endsWith(IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX)) {\n return {\n ratio: item.slice(0, -IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX.length),\n active: true,\n };\n }\n\n return { ratio: item, active: false };\n}\n\nexport function parseAspectRatios(items: readonly string[]): {\n ratios: string[];\n activeRatio: string | null;\n} {\n const ratios: string[] = [];\n let activeRatio: string | null = null;\n\n for (const item of items) {\n const { ratio, active } = parseAspectRatioItem(item);\n ratios.push(ratio);\n\n if (active && activeRatio === null) {\n activeRatio = ratio;\n }\n }\n\n return { ratios, activeRatio };\n}\n","import { inject } from '@angular/core';\nimport { AXImageEditorService, AXImageEditorTool } from '../image-editor.service';\n\n/**\n * Base class for image editor tool trigger components.\n * @category Components\n */\nexport abstract class AXImageEditorToolComponent {\n protected service = inject(AXImageEditorService);\n\n abstract readonly tool: AXImageEditorTool;\n\n setActive(): void {\n this.service.activateTool(this.tool);\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { parseAspectRatios } from '../../image-editor-aspect-ratio.util';\nimport { AXImageEditorContainerComponent } from '../../image-editor-container/image-editor-container.component';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Crop tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-crop',\n templateUrl: './image-editor-crop.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropComponent }],\n})\nexport class AXImageEditorCropComponent extends AXImageEditorToolComponent {\n readonly tool = 'crop';\n\n private container = inject(AXImageEditorContainerComponent);\n\n /** Aspect ratio presets. Append `:active` to mark the default ratio, e.g. `'2:1:active'`. */\n aspectRatio = input<string[]>([]);\n\n /** Base size in pixels for the initial cropper window dimensions. */\n size = input<number>();\n\n #syncSize = effect(() => {\n const size = this.size();\n if (size != null) {\n this.service.cropperSize.set(size);\n }\n });\n\n #syncAspectRatio = effect(() => {\n const { activeRatio } = parseAspectRatios(this.aspectRatio());\n if (activeRatio) {\n this.service.cropperRatio.set(activeRatio);\n }\n });\n\n /** Applies the current cropper selection. */\n crop(): void {\n this.container.crop();\n }\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.crop' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('crop')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'crop'\"\n [color]=\"service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Highlight tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-highlight',\n templateUrl: './image-editor-highlight.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightComponent }],\n})\nexport class AXImageEditorHighlightComponent extends AXImageEditorToolComponent {\n readonly tool = 'highlight';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('highlight')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'highlight'\"\n [color]=\"service.activeToolState() === 'highlight' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-history',\n templateUrl: './image-editor-history.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHistoryComponent }],\n})\nexport class AXImageEditorHistoryComponent {\n protected service = inject(AXImageEditorService);\n\n protected UndoHandler() {\n this.service.undo();\n }\n\n protected RedoHandler() {\n this.service.redo();\n }\n}\n","<div class=\"flex\">\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.undo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"UndoHandler()\"\n look=\"blank\"\n [disabled]=\"!service.canUndo()\"\n >\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n </ax-button>\n\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.redo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"RedoHandler()\"\n look=\"blank\"\n [disabled]=\"!service.canRedo()\"\n >\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n </ax-button>\n</div>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Pen tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-pen',\n templateUrl: './image-editor-pen.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenComponent }],\n})\nexport class AXImageEditorPenComponent extends AXImageEditorToolComponent {\n readonly tool = 'pen';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('pen')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'pen'\"\n [color]=\"service.activeToolState() === 'pen' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Rotate tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-rotate',\n templateUrl: './image-editor-rotate.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateComponent }],\n})\nexport class AXImageEditorRotateComponent extends AXImageEditorToolComponent {\n readonly tool = 'rotate';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('rotate')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'rotate'\"\n [color]=\"service.activeToolState() === 'rotate' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <i class=\"fa-solid fa-rotate\"></i>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, computed, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { parseAspectRatios } from '../../image-editor-aspect-ratio.util';\nimport { AXImageEditorContainerComponent } from '../../image-editor-container/image-editor-container.component';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-crop-options',\n templateUrl: './image-editor-crop-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AsyncPipe, AXTranslatorPipe],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }],\n})\nexport class AXImageEditorCropOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n private container = inject(AXImageEditorContainerComponent);\n\n cropPressed = output();\n\n aspectRatio = input<string[]>([]);\n\n protected aspectRatios = computed(() => parseAspectRatios(this.aspectRatio()).ratios);\n\n protected cropButtonHandler() {\n this.cropPressed.emit();\n this.container.crop();\n }\n\n protected ratioHandler(r: '1:1' | '16:9' | string) {\n if (this.service.cropperRatio() === r) {\n this.service.cropperRatio.set(null);\n } else {\n this.service.cropperRatio.set(r);\n }\n }\n}\n","<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatios(); track item) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-highlight-options',\n templateUrl: './image-editor-highlight-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXColorBoxComponent, FormsModule, AXRangeSliderComponent, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightOptionsComponent }],\n})\nexport class AXImageEditorHighlightOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected selectedColor = signal(this.service.highlightColor());\n\n /** @ignore */\n protected value = this.service.highlightWidth();\n\n protected changeColorHandler(e: string) {\n this.service.highlightColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.highlightWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-pen-options',\n templateUrl: './image-editor-pen-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXColorBoxComponent, FormsModule, AXRangeSliderComponent, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenOptionsComponent }],\n})\nexport class AXImageEditorPenOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected value = this.service.penWidth();\n\n /** @ignore */\n protected selectedColor = signal(this.service.penColor());\n\n protected changeColorHandler(e: string) {\n this.service.penColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.penWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-rotate-options',\n templateUrl: './image-editor-rotate-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXButtonComponent,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateOptionsComponent }],\n})\nexport class AXImageEditorRotateOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n protected rotateRightHandler() {\n this.service.rotate.set({ state: 90, userInteract: true });\n }\n\n protected rotateLeftHandler() {\n this.service.rotate.set({ state: -90, userInteract: true });\n }\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-left' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateLeftHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-left\"></ax-icon>\n</ax-button>\n\n<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-right' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateRightHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-right\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { Component, computed, contentChild, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\nimport { AXImageEditorCropOptionsComponent } from '../image-editor-crop/image-editor-crop-options.component';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightOptionsComponent } from '../image-editor-highlight/image-editor-highlight-options.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorPenOptionsComponent } from '../image-editor-pen/image-editor-pen-options.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateOptionsComponent } from '../image-editor-rotate/image-editor-rotate-options.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Toolbar layout for configurable image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tools-bar',\n templateUrl: './image-editor-tools-bar.component.html',\n styleUrl: './image-editor-tools-bar.component.css',\n encapsulation: ViewEncapsulation.None,\n\n host: {\n '[class.ax-image-editor-tools-bar-hidden]': 'hidden()',\n },\n imports: [\n AXDecoratorModule,\n AXToolBarModule,\n AXImageEditorPenOptionsComponent,\n AXImageEditorHighlightOptionsComponent,\n AXImageEditorCropOptionsComponent,\n AXImageEditorRotateOptionsComponent,\n ],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }],\n})\nexport class AXImageEditorToolsBarComponent {\n protected service = inject(AXImageEditorService);\n\n /**\n * Tool component reference to activate on load.\n */\n active = input<AXImageEditorToolComponent>();\n\n /** Hides the tools bar UI while keeping projected tools configurable. */\n hidden = input(false);\n\n protected penTool = contentChild(AXImageEditorPenComponent);\n protected highlightTool = contentChild(AXImageEditorHighlightComponent);\n protected cropTool = contentChild(AXImageEditorCropComponent);\n protected rotateTool = contentChild(AXImageEditorRotateComponent);\n\n protected cropAspectRatio = computed(() => this.cropTool()?.aspectRatio() ?? []);\n\n #activeEffect = effect(() => {\n this.active()?.setActive();\n });\n}\n","<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolsBarComponent } from '../image-editor-tools-bar/image-editor-tools-bar.component';\n\n/**\n * Convenience wrapper that includes all image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tool-selector',\n templateUrl: './image-editor-tool-selector.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorCropComponent,\n AXImageEditorRotateComponent,\n ],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolSelectorComponent }],\n})\nexport class AXImageEditorToolSelectorComponent {\n aspectRatio = input<string[]>([]);\n}\n","<ax-image-editor-tools-bar>\n <ax-image-editor-pen></ax-image-editor-pen>\n <ax-image-editor-highlight></ax-image-editor-highlight>\n <ax-image-editor-crop [aspectRatio]=\"aspectRatio()\"></ax-image-editor-crop>\n <ax-image-editor-rotate></ax-image-editor-rotate>\n</ax-image-editor-tools-bar>\n","import { NgModule } from '@angular/core';\nimport { AXImageEditorContainerComponent } from './image-editor-container/image-editor-container.component';\nimport { AXImageEditorCropperWindowComponent } from './image-editor-cropper-window/image-editor-cropper-window.component';\nimport { AXImageEditorCropComponent } from './image-editor-tools/image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from './image-editor-tools/image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorHistoryComponent } from './image-editor-tools/image-editor-history/image-editor-history.component';\nimport { AXImageEditorPenComponent } from './image-editor-tools/image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from './image-editor-tools/image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolSelectorComponent } from './image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component';\nimport { AXImageEditorToolsBarComponent } from './image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component';\nimport { AXImageEditorViewComponent } from './image-editor-view/image-editor-view.component';\n\nconst PUBLIC_COMPONENTS = [\n AXImageEditorViewComponent,\n AXImageEditorContainerComponent,\n AXImageEditorCropComponent,\n AXImageEditorHistoryComponent,\n AXImageEditorToolSelectorComponent,\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorRotateComponent,\n AXImageEditorCropperWindowComponent,\n] as const;\n\n@NgModule({\n imports: [...PUBLIC_COMPONENTS],\n exports: [...PUBLIC_COMPONENTS],\n})\nexport class AXImageEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;MAKa,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;QAEE,IAAA,CAAA,eAAe,GAAG,MAAM,CAA2B,IAAI;4FAAC;QACxD,IAAA,CAAA,QAAQ,GAAG,MAAM,CAA0C,iBAAiB;qFAAC;QAC7E,IAAA,CAAA,cAAc,GAAG,MAAM,CAA0C,mBAAmB;2FAAC;QACrF,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAS,EAAE;qFAAC;QAC7B,IAAA,CAAA,cAAc,GAAG,MAAM,CAAS,EAAE;2FAAC;QACnC,IAAA,CAAA,OAAO,GAAG,MAAM,CAA6B,IAAI;oFAAC;QAClD,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE;mFAAC;QAClD,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;QAC3B,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;QACzB,IAAA,CAAA,QAAQ,GAA4B,IAAI;QACxC,IAAA,CAAA,YAAY,GAA4B,IAAI;QAC5C,IAAA,CAAA,SAAS,GAAG,MAAM,CAAS,EAAE;sFAAC;QAC9B,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;QAC3B,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;QAC3B,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;QACvB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;QACvB,IAAA,CAAA,YAAY,GAAG,MAAM,CAAgB,IAAI;yFAAC;QAC1C,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,GAAG;wFAAC;AAqE1B,IAAA;AAnEC,IAAA,UAAU,CAAC,IAAuB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,YAAY,CAAC,IAAuB,EAAA;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAE9B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,qBAAqB,CAAC,KAAoB,EAAA;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;QAC/C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ;AACvD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC;QAEjF,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,gBAAA,OAAO,KAAK;YACd;YACA,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,gBAAA,OAAO,KAAK;YACd;YACA,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,KAAK;IACd;8GAtFW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;AC2BD;;;AAGG;MASU,mCAAmC,CAAA;AARhD,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI;qFAAC;;AAGtB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;AAErB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAiC,IAAI;2FAAC;QAC7D,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK;qFAAC;AACxB,QAAA,IAAA,CAAA,UAAU,GAA4B,MAAM,CAAC,UAAU,CAAC;QACtD,IAAA,CAAA,aAAa,GAAG,SAAS,CAAa,GAAG;0FAAC;QAC5C,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,CAAC;qFAAC;QACpB,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,CAAC;qFAAC;QACpB,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,CAAC;wFAAC;QACvB,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,CAAC;yFAAC;QACxB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,KAAK;2FAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QAOhC,IAAA,CAAA,UAAU,GAAG,KAAK;AAE1B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,MAAK;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACzC,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAEpD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AAE7B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;YACjC,MAAM,IAAI,GAAG,MAAM,EAAE,WAAW,IAAI,KAAK,GAAG,KAAK;YACjD,MAAM,IAAI,GAAG,MAAM,EAAE,YAAY,IAAI,KAAK,GAAG,MAAM;AACnD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,CAAC;YACrD,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,MAAM,IAAI,KAAK;AAE/C,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI;YACjD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI;AAEzE,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC;QACF,CAAC;wFAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,eAAe,CAAC,MAAK;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;YAC1C,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;gBACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9F,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAwCM,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,WAAW,GAAG,CAAC;QACf,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,QAAQ,GAAG,CAAC;AAyJrB,IAAA;AAzOC,IAAA,WAAW;AAuBX,IAAA,KAAK;IAcL,WAAW,GAAA;QACT,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC;QACF;AACA,QAAA,IAAI,CAAC,cAAc,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,IAAI;AACrB,QAAA,IAAI,CAAC,cAAc,IAAI;AACvB,QAAA,IAAI,CAAC,eAAe,IAAI;AACxB,QAAA,IAAI,CAAC,aAAa,IAAI;AACtB,QAAA,IAAI,CAAC,eAAe,IAAI;IAC1B;AAEU,IAAA,OAAO,CAAC,CAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE;QAC5B,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE;AAEtB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;QAClD,IAAI,CAAC,aAAa,EAAE;IACtB;AAEU,IAAA,OAAO,CAAC,CAAe,EAAA;QAC/B,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,CAAC,CAAC,aAAoC,EAAE,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC;IAC3E;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;IAEO,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;IAC9D;IASU,cAAc,CAAC,CAAe,EAAE,KAA8B,EAAA;QACtE,CAAC,CAAC,eAAe,EAAE;QACnB,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1C,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,aAAoC,EAAE,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC;IAC3E;AAEU,IAAA,iBAAiB,CAAC,CAAe,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE;AAE5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;QAClC,MAAM,OAAO,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAEvD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW;AAC7B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS;AACzB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;AAEvB,QAAA,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC3B,YAAA,KAAK,OAAO;AACV,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAC/C;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACjD,gBAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;gBACjD;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC/C,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACjD;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;gBACjD;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAC/C,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC3E,gBAAA,IAAI,MAAM,IAAI,MAAM,GAAG,OAAO,EAAE;oBAC9B,MAAM,GAAG,OAAO;AAChB,oBAAA,KAAK,GAAG,MAAM,GAAG,MAAM;gBACzB;AACA,gBAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;gBACjD;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAC/C,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC3E,gBAAA,IAAI,MAAM,IAAI,MAAM,GAAG,OAAO,EAAE;oBAC9B,MAAM,GAAG,OAAO;AAChB,oBAAA,KAAK,GAAG,MAAM,GAAG,MAAM;gBACzB;gBACA;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAC/C,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC3E,gBAAA,IAAI,MAAM,IAAI,MAAM,GAAG,OAAO,EAAE;oBAC9B,MAAM,GAAG,OAAO;AAChB,oBAAA,KAAK,GAAG,MAAM,GAAG,MAAM;gBACzB;AACA,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACjD;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAC/C,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC3E,gBAAA,IAAI,MAAM,IAAI,MAAM,GAAG,OAAO,EAAE;oBAC9B,MAAM,GAAG,OAAO;AAChB,oBAAA,KAAK,GAAG,MAAM,GAAG,MAAM;gBACzB;AACA,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACjD,gBAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;gBACjD;;QAGJ,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,IAAI;QAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,MAAM,IAAI;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE;IACtB;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEQ,IAAA,cAAc,CAAC,KAAoB,EAAA;QACzC,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,MAAM,GAAG,CAAC;QAEd,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YACjD,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;gBACxB,KAAK,GAAG,IAAI;gBACZ,MAAM,GAAG,IAAI;YACf;QACF;AAEA,QAAA,IAAI,KAAK,IAAI,MAAM,EAAE;YACnB,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;QAC7C;QAEA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE;IAC7C;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;QACjC,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;QACjC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,aAAa,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC/D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAI;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAI;IACzC;8GAnQW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFnC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC,8ICzCzF,4+CA4BA,EAAA,MAAA,EAAA,CAAA,smGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDea,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAR/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,iBAE3B,iBAAiB,CAAC,IAAI,EAAA,eAAA,EAEpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,mCAAqC,EAAE,CAAC,EAAA,QAAA,EAAA,4+CAAA,EAAA,MAAA,EAAA,CAAA,smGAAA,CAAA,EAAA;mQAavC,GAAG,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtD9C,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,2BAA2B,GAAG,CAAC;AAEtC,SAAU,aAAa,CAAC,GAAW,EAAA;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACxD,YAAA,KAAK,CAAC,WAAW,GAAG,WAAW;QACjC;QACA,KAAK,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;AACnC,QAAA,KAAK,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC/D,QAAA,KAAK,CAAC,GAAG,GAAG,GAAG;AACjB,IAAA,CAAC,CAAC;AACJ;SAEgB,YAAY,CAAC,MAAyB,EAAE,IAAY,EAAE,OAAgB,EAAA;IACpF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,CAAC,MAAM,CACX,CAAC,IAAI,KAAI;YACP,IAAI,IAAI,EAAE;gBACR,OAAO,CAAC,IAAI,CAAC;gBACb;YACF;YACA,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAA,CAAE,CAAC,CAAC;AAC5D,QAAA,CAAC,EACD,IAAI,EACJ,OAAO,CACR;AACH,IAAA,CAAC,CAAC;AACJ;AAEO,eAAe,mBAAmB,CAAC,MAAyB,EAAA;IACjE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,2BAA2B,CAAC;AAClF,IAAA,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;AACrC,QAAA,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC;AACjC,QAAA,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,2BAA2B,CAAC;AAChE,KAAA,CAAC;AAEF,IAAA,MAAM,KAAK,GAAW,CAAC,IAAI,CAAC;AAC5B,IAAA,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;AAC1B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1B;IACF;AACA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,kBAAkB,CAChC,KAAa,EACb,MAAc,EACd,GAAG,GAAG,uBAAuB,EAAA;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO;AACL,QAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAC7C,QAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;KAChD;AACH;;ACxBM,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAgD7D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAhDT;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI;qFAAC;AAC/B;;AAEG;AACM,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK;mGAAU;AACtC;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;AAClC;;AAEG;QACM,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,EAAE;gFAAC;;QAEtB,IAAA,CAAA,UAAU,GAAG,SAAS,CAAgC,YAAY;uFAAC;;QAEnE,IAAA,CAAA,aAAa,GAAG,SAAS,CAAsC,GAAG;0FAAC;;QAEnE,IAAA,CAAA,GAAG,GAAG,MAAM,CAAkC,IAAI;gFAAC;;AAEnD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAEtC,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;;QAE3B,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,KAAK;mGAAC;;AAEtC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAEzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,EAAC,UAAuB,EAAC;;QAG7C,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAqB,EAAE;+FAAC;;AAEnD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,CAAC,CAAC;sGAAC;QAExC,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;QAC3B,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,iBAAiB,GAAqB,IAAI;QAC1C,IAAA,CAAA,eAAe,GAAoC,EAAE;QACrD,IAAA,CAAA,iBAAiB,GAAG,CAAC;QACrB,IAAA,CAAA,WAAW,GAAG,CAAC;QAKrB,eAAe,CAAC,MAAK;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;YAC/C,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;AAEA,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,GAAG,EAAE;gBACR;YACF;AAEA,YAAA,GAAG,CAAC,QAAQ,GAAG,OAAO;AACtB,YAAA,GAAG,CAAC,OAAO,GAAG,OAAO;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAE1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;AAC9C,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;YAChC,IAAI,CAAC,KAAK,EAAE;gBACV;YACF;AACA,YAAA,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC/B;YACF;YACA,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC/B;YACF;YACA,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE;gBAChC;YACF;YACA,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC/B;YACF;YACA,SAAS,CAAC,MAAK;gBACb,qBAAqB,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACtD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;;IAGU,YAAY,GAAA;QACpB,IAAI,CAAC,gBAAgB,EAAE;IACzB;;AAGU,IAAA,gBAAgB,CAAC,KAAuB,EAAA;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;IAEQ,MAAM,UAAU,CAAC,GAAW,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,WAAW;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI;QAEhC,IAAI,CAAC,GAAG,EAAE;YACR;QACF;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE;gBAC9B;YACF;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE;gBAC9B;YACF;YACA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QACrC;IACF;AAEQ,IAAA,UAAU,CAAC,KAAuB,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;YAC7B;QACF;QAEA,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC;AACzG,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AAC3B,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC7B,QAAA,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,QAAA,GAAG,CAAC,wBAAwB,GAAG,aAAa;AAC5C,QAAA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AAChD,QAAA,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACvD,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,gBAAgB,GAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAC/C,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACpC;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC;AACpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,EAAE,GAAG,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAA,EAAA,CAAI;QACzE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAA,EAAA,CAAI;IAC7E;AAEQ,IAAA,cAAc,CAAC,KAAuB,EAAA;QAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAuB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChB,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM;QAC/C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC;IAChE;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;AAChD,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;YACf,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE;QACvB,KAAK,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAChD;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;QAChD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE;QACvB,KAAK,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAChD;AAEQ,IAAA,WAAW,CAAC,KAAmB,EAAA;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,aAAa;AAC/C,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC;QAC/B,OAAO;AACL,YAAA,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK;AACvD,YAAA,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM;SACzD;IACH;IAEQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACnC,QAAA,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW;IAC/C;;AAGU,IAAA,gBAAgB,CAAC,OAA4B,EAAA;AACrD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC,GAAG,EAAE;YACR;QACF;AAEA,QAAA,GAAG,CAAC,QAAQ,GAAG,OAAO;AACtB,QAAA,GAAG,CAAC,OAAO,GAAG,OAAO;QAErB,QAAQ,OAAO;AACb,YAAA,KAAK,KAAK;AACR,gBAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,gBAAA,GAAG,CAAC,wBAAwB,GAAG,aAAa;gBAC5C,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACzC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACvC;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,GAAG,CAAC,WAAW,GAAG,GAAG;AACrB,gBAAA,GAAG,CAAC,wBAAwB,GAAG,UAAU;gBACzC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC/C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC7C;;IAEN;AAEQ,IAAA,eAAe,CAAC,MAAuC,EAAA;AAC7D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAClC,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC;AACA,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC;QACA,GAAG,CAAC,MAAM,EAAE;IACd;;AAGU,IAAA,cAAc,CAAC,KAAoB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACxB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC;IAC3C;;IAGU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACjE;;AAGU,IAAA,gBAAgB,CAAC,KAAmB,EAAA;QAC5C,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC9C;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACtC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;YAC/B;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,KAAK,WAAW,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AAC5E,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC;QAC5C;aAAO;YACL,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,MAAM,EAAE;QACd;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;;AAGU,IAAA,gBAAgB,CAAC,KAAmB,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACvC;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACtC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;YAC/B;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,OAAO,KAAK,WAAW,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACrD,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC;QAC5C;aAAO;YACL,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,MAAM,EAAE;QACd;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;;AAGU,IAAA,cAAc,CAAC,KAAoB,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAC/C,IAAI,KAAK,IAAI,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACvD,YAAA,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/C;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AAEzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,YAAA,GAAG,CAAC,wBAAwB,GAAG,aAAa;QAC9C;QAEA,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,IAAI,CAAC,aAAa,EAAE;QAC3B;IACF;;AAGA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAC/C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5E;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACjD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;AACrD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;QACxE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACxE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AAClE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACpE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AACpD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;AAEvD,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC;AACzD,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM;QACtB,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;IAC5B;;AAGA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IACjC;;AAGU,IAAA,MAAM,WAAW,GAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAClF;QACF;QAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AAC3B,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAClF;QACF;QACA,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK;QAC3C,MAAM,OAAO,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG;AACzC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QACtF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AAEvF,QAAA,MAAM,CAAC,KAAK,GAAG,YAAY;AAC3B,QAAA,MAAM,CAAC,MAAM,GAAG,aAAa;AAC7B,QAAA,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,QAAA,GAAG,CAAC,wBAAwB,GAAG,aAAa;AAC5C,QAAA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QAChD,GAAG,CAAC,IAAI,EAAE;AACV,QAAA,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,QAAA,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACnB,QAAA,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5D,GAAG,CAAC,OAAO,EAAE;QACb,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF;IAEQ,MAAM,aAAa,CAAC,OAAmC,EAAA;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAC/C,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACpC;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,iBAAiB;AAE3C,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC;AAC/C,YAAA,IAAI,UAAU,KAAK,IAAI,CAAC,iBAAiB,EAAE;gBACzC;YACF;YACA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;AACjD,YAAA,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC;AAC1C,YAAA,IAAI,UAAU,KAAK,IAAI,CAAC,iBAAiB,EAAE;gBACzC;YACF;AAEA,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK;AAC7B,YAAA,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;AACzB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzB;QACF;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,UAAU,KAAK,IAAI,CAAC,iBAAiB,EAAE;gBACzC;YACF;QACF;IACF;8GA9gBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAF1B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,GAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BhF,ihBAgBA,gyBDcY,mCAAmC,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGlC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBATtC,SAAS;+BACE,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,mCAAmC,CAAC,EAAA,SAAA,EACnC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,0BAA4B,EAAE,CAAC,EAAA,QAAA,EAAA,ihBAAA,EAAA,MAAA,EAAA,CAAA,wuBAAA,CAAA,EAAA;AAoBd,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,YAAY,uEAEH,GAAG,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AExB9E;;;AAGG;AA4BG,MAAO,+BAAgC,SAAQ,OAAO,EAAC,yBAAiC,GAAE,eAAe,CAAC,CAAA;AAW9G,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;AAVC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE/B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,EAAC,UAAuB,EAAC;AACtC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEhD,IAAA,CAAA,oBAAoB,GAAG,SAAS,CAAa,GAAG;iGAAC;QAEjD,IAAA,CAAA,IAAI,GAAG,YAAY,CAA6B,0BAA0B;iFAAC;AAY3E,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,MAAK;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACtC,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACxB;QACF,CAAC;uFAAC;QAdA,eAAe,CAAC,MAAK;AACnB,YAAA,MAAM,SAAS,GAAG,CAAC,KAAoB,KAAK,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAC7E,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3F,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU;;IAUA,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACxD;;AAGA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;AAE3B,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAEtC,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;QAC/B;IACF;;AAGU,IAAA,mBAAmB,CAAC,KAAmB,EAAA;AAC/C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;QAC3B,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE;YAC3E;QACF;QAEA,IAAI,CAAC,WAAW,EAAE;IACpB;;AAGU,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACpC,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa;QAC5C,MAAM,cAAc,GAClB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;QAEpF,IAAI,CAAC,cAAc,EAAE;YACnB;QACF;QAEA,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,aAAa,CAAuB;QACpE,IACE,MAAM,YAAY,WAAW;AAC7B,aAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,EACjG;YACA;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC;IAC3C;;AAGA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACjC;QAEA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,MAAM,EAAE;AAC7C,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AAEA,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC7B;8GAhGW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,+BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,EAb/B;YACT,oBAAoB;AACpB,YAAA,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,+BAA+B,EAAE;AACtE,YAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,+BAA+B,EAAE;AAC/E,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,+BAA+B,EAAE;AAC9E,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,+BAA+B,CAAC;AAC9D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAY+C,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,GAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrE5E,q8BAiCA,EAAA,MAAA,EAAA,CAAA,qtCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDyBY,iBAAiB,+BAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAExE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBA3B3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,mBAGpB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,gBAAgB,CAAC,EAAA,MAAA,EACnB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAA,IAAA,EACtB;AACJ,wBAAA,2BAA2B,EAAE,UAAU;AACvC,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,WAAW,EAAE,+BAA+B;qBAC7C,EAAA,SAAA,EACU;wBACT,oBAAoB;AACpB,wBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,iCAAiC,EAAE;AACtE,wBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,iCAAiC,EAAE;AAC/E,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,iCAAiC,EAAE;AAC9E,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qCAAqC,CAAC;AAC9D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,OAAA,EACQ,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,q8BAAA,EAAA,MAAA,EAAA,CAAA,qtCAAA,CAAA,EAAA;AASvC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,GAAG,qFAEA,0BAA0B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AErErE,MAAM,uCAAuC,GAAG,SAAS;AAE1D,SAAU,oBAAoB,CAAC,IAAY,EAAA;AAC/C,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE;QAC1D,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,uCAAuC,CAAC,MAAM,CAAC;AACrE,YAAA,MAAM,EAAE,IAAI;SACb;IACH;IAEA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AACvC;AAEM,SAAU,iBAAiB,CAAC,KAAwB,EAAA;IAIxD,MAAM,MAAM,GAAa,EAAE;IAC3B,IAAI,WAAW,GAAkB,IAAI;AAErC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC;AACpD,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAElB,QAAA,IAAI,MAAM,IAAI,WAAW,KAAK,IAAI,EAAE;YAClC,WAAW,GAAG,KAAK;QACrB;IACF;AAEA,IAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;AAChC;;AC3BA;;;AAGG;MACmB,0BAA0B,CAAA;AAAhD,IAAA,WAAA,GAAA;AACY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAOlD;IAHE,SAAS,GAAA;QACP,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IACtC;AACD;;ACJD;;;AAGG;AASG,MAAO,0BAA2B,SAAQ,0BAA0B,CAAA;AAR1E,IAAA,WAAA,GAAA;;QASW,IAAA,CAAA,IAAI,GAAG,MAAM;AAEd,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,+BAA+B,CAAC;;QAG3D,IAAA,CAAA,WAAW,GAAG,KAAK,CAAW,EAAE;wFAAC;;AAGjC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;AAEtB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,MAAK;AACtB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC;QACF,CAAC;sFAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;YAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5C;QACF,CAAC;6FAAC;AAMH,IAAA;AAlBC,IAAA,SAAS;AAOT,IAAA,gBAAgB;;IAQhB,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;8GA5BW,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAF1B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBhF,0YAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDQY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,+HAA+B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5C,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIhE,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;+BACE,sBAAsB,EAAA,aAAA,EAEjB,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAA,SAAA,EAElF,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,0BAA4B,EAAE,CAAC,EAAA,QAAA,EAAA,0YAAA,EAAA;;;AEZhF;;;AAGG;AASG,MAAO,+BAAgC,SAAQ,0BAA0B,CAAA;AAR/E,IAAA,WAAA,GAAA;;QASW,IAAA,CAAA,IAAI,GAAG,WAAW;AAC5B,IAAA;8GAFY,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EAF/B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBrF,kaAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDMY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,+HAA+B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5C,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIhE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAR3C,SAAS;+BACE,2BAA2B,EAAA,aAAA,EAEtB,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAA,SAAA,EAElF,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,+BAAiC,EAAE,CAAC,EAAA,QAAA,EAAA,kaAAA,EAAA;;;AEVrF;;;AAGG;MASU,6BAA6B,CAAA;AAR1C,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AASjD,IAAA;IAPW,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACrB;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACrB;8GATW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EAF7B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,0BCnBnF,ooBAuBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAA+B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5C,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGpF,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBARzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,eAAA,EAElB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,aACtG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,6BAA+B,EAAE,CAAC,EAAA,QAAA,EAAA,ooBAAA,EAAA;;;AEVnF;;;AAGG;AASG,MAAO,yBAA0B,SAAQ,0BAA0B,CAAA;AARzE,IAAA,WAAA,GAAA;;QASW,IAAA,CAAA,IAAI,GAAG,KAAK;AACtB,IAAA;8GAFY,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,SAAA,EAFzB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB/E,oYAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDMY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,+HAA+B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5C,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIhE,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;+BACE,qBAAqB,EAAA,aAAA,EAEhB,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAA,SAAA,EAElF,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,yBAA2B,EAAE,CAAC,EAAA,QAAA,EAAA,oYAAA,EAAA;;;AEX/E;;;AAGG;AASG,MAAO,4BAA6B,SAAQ,0BAA0B,CAAA;AAR5E,IAAA,WAAA,GAAA;;QASW,IAAA,CAAA,IAAI,GAAG,QAAQ;AACzB,IAAA;8GAFY,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,SAAA,EAF5B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBlF,oYAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,kOAA+B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5C,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIjE,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBARxC,SAAS;+BACE,wBAAwB,EAAA,aAAA,EAEnB,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAA,SAAA,EAEnF,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,4BAA8B,EAAE,CAAC,EAAA,QAAA,EAAA,oYAAA,EAAA;;;AETlF;MASa,iCAAiC,CAAA;AAR9C,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAExC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,+BAA+B,CAAC;QAE3D,IAAA,CAAA,WAAW,GAAG,MAAM,EAAE;QAEtB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAW,EAAE;wFAAC;AAEvB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM;yFAAC;AActF,IAAA;IAZW,iBAAiB,GAAA;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;AAEU,IAAA,YAAY,CAAC,CAA0B,EAAA;QAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC;aAAO;YACL,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC;IACF;8GAtBW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,0QAFjC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC,0BChBvF,+jCAiCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnBY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,yCAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAI7C,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAR7C,SAAS;+BACE,8BAA8B,EAAA,aAAA,EAEzB,iBAAiB,CAAC,IAAI,WAC5B,CAAC,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAA,SAAA,EAE9C,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,iCAAmC,EAAE,CAAC,EAAA,QAAA,EAAA,+jCAAA,EAAA;;;AENvF;MASa,sCAAsC,CAAA;AARnD,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAGtC,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;0FAAC;;AAGrD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AAWhD,IAAA;AATW,IAAA,kBAAkB,CAAC,CAAS,EAAA;QACpC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B;;AAGU,IAAA,YAAY,CAAC,CAAS,EAAA;QAC9B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC;8GAjBW,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtC,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,SAAA,EAFtC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC,0BCjB5F,8ZAYA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGY,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAA+B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5C,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIpF,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBARlD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,EAAA,aAAA,EAE9B,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAA,SAAA,EAEtG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,sCAAwC,EAAE,CAAC,EAAA,QAAA,EAAA,8ZAAA,EAAA;;;AEP5F;MASa,gCAAgC,CAAA;AAR7C,IAAA,WAAA,GAAA;AASY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;;AAGtC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;;QAG/B,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;0FAAC;AAW1D,IAAA;AATW,IAAA,kBAAkB,CAAC,CAAS,EAAA;QACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B;;AAGU,IAAA,YAAY,CAAC,CAAS,EAAA;QAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B;8GAjBW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,SAAA,EAFhC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC,0BCjBtF,wZAYA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGY,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAA+B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5C,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIpF,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAR5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,aAAA,EAExB,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAA,SAAA,EAEtG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,gCAAkC,EAAE,CAAC,EAAA,QAAA,EAAA,wZAAA,EAAA;;;AERtF;MAgBa,mCAAmC,CAAA;AAfhD,IAAA,WAAA,GAAA;AAgBY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AASjD,IAAA;IAPW,kBAAkB,GAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC5D;IAEU,iBAAiB,GAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC7D;8GATW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,SAAA,EAFnC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC,0BCvBzF,6fAiBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFI,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,wBAAwB,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGxB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAFf,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAf/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAAA,aAAA,EAE3B,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,iBAAiB;wBACjB,kBAAkB;wBAClB,wBAAwB;wBACxB,SAAS;wBACT,gBAAgB;wBAChB,eAAe;qBAChB,EAAA,SAAA,EAEU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,mCAAqC,EAAE,CAAC,EAAA,QAAA,EAAA,6fAAA,EAAA;;;AERzF;;;AAGG;MAoBU,8BAA8B,CAAA;AAnB3C,IAAA,WAAA,GAAA;AAoBY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEhD;;AAEG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK;8FAA8B;;QAG5C,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK;mFAAC;QAEX,IAAA,CAAA,OAAO,GAAG,YAAY,CAAC,yBAAyB;oFAAC;QACjD,IAAA,CAAA,aAAa,GAAG,YAAY,CAAC,+BAA+B;0FAAC;QAC7D,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAC,0BAA0B;qFAAC;QACnD,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,4BAA4B;uFAAC;AAEvD,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;4FAAC;AAEhF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;QAC5B,CAAC;0FAAC;AACH,IAAA;AAHC,IAAA,aAAa;8GAlBF,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wCAAA,EAAA,UAAA,EAAA,EAAA,EAAA,SAAA,EAF9B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAajD,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnB,+BAA+B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACpC,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACxB,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpDlE,wmCAkCA,iqEDLI,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gCAAgC,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,sCAAsC,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtC,iCAAiC,4HACjC,mCAAmC,EAAA,QAAA,EAAA,gCAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAI1B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAnB1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,aAAA,EAGtB,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAE/B;AACJ,wBAAA,0CAA0C,EAAE,UAAU;qBACvD,EAAA,OAAA,EACQ;wBACP,iBAAiB;wBACjB,eAAe;wBACf,gCAAgC;wBAChC,sCAAsC;wBACtC,iCAAiC;wBACjC,mCAAmC;qBACpC,EAAA,SAAA,EACU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,8BAAgC,EAAE,CAAC,EAAA,QAAA,EAAA,wmCAAA,EAAA,MAAA,EAAA,CAAA,0mEAAA,CAAA,EAAA;AAajD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,yBAAyB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACnB,+BAA+B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACpC,0BAA0B,4FACxB,4BAA4B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5ClE;;;AAGG;MAeU,kCAAkC,CAAA;AAd/C,IAAA,WAAA,GAAA;QAeE,IAAA,CAAA,WAAW,GAAG,KAAK,CAAW,EAAE;wFAAC;AAClC,IAAA;8GAFY,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFlC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBxF,6SAMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDWI,8BAA8B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,yBAAyB,gEACzB,+BAA+B,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,4BAA4B,EAAA,QAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAd9C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,aAAA,EAE1B,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,8BAA8B;wBAC9B,yBAAyB;wBACzB,+BAA+B;wBAC/B,0BAA0B;wBAC1B,4BAA4B;qBAC7B,EAAA,SAAA,EAEU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,kCAAoC,EAAE,CAAC,EAAA,QAAA,EAAA,6SAAA,EAAA;;;AEZxF,MAAM,iBAAiB,GAAG;IACxB,0BAA0B;IAC1B,+BAA+B;IAC/B,0BAA0B;IAC1B,6BAA6B;IAC7B,kCAAkC;IAClC,8BAA8B;IAC9B,yBAAyB;IACzB,+BAA+B;IAC/B,4BAA4B;IAC5B,mCAAmC;CAC3B;MAMG,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAhB9B,0BAA0B;YAC1B,+BAA+B;YAC/B,0BAA0B;YAC1B,6BAA6B;YAC7B,kCAAkC;YAClC,8BAA8B;YAC9B,yBAAyB;YACzB,+BAA+B;YAC/B,4BAA4B;AAC5B,YAAA,mCAAmC,aATnC,0BAA0B;YAC1B,+BAA+B;YAC/B,0BAA0B;YAC1B,6BAA6B;YAC7B,kCAAkC;YAClC,8BAA8B;YAC9B,yBAAyB;YACzB,+BAA+B;YAC/B,4BAA4B;YAC5B,mCAAmC,CAAA,EAAA,CAAA,CAAA;AAOxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAf9B,+BAA+B;YAC/B,0BAA0B;YAC1B,6BAA6B;YAC7B,kCAAkC;YAClC,8BAA8B;YAC9B,yBAAyB;YACzB,+BAA+B;YAC/B,4BAA4B,CAAA,EAAA,CAAA,CAAA;;2FAQjB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,iBAAiB,CAAC;AAC/B,oBAAA,OAAO,EAAE,CAAC,GAAG,iBAAiB,CAAC;AAChC,iBAAA;;;AC5BD;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-components-image-editor.mjs","sources":["../../../../packages/components/image-editor/src/lib/image-editor.service.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.html","../../../../packages/components/image-editor/src/lib/image-editor-canvas.util.ts","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.html","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.html","../../../../packages/components/image-editor/src/lib/image-editor-aspect-ratio.util.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.html","../../../../packages/components/image-editor/src/lib/image-editor.module.ts","../../../../packages/components/image-editor/src/acorex-components-image-editor.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\nexport type AXImageEditorTool = 'pen' | 'highlight' | 'crop' | 'rotate';\n\n@Injectable()\nexport class AXImageEditorService {\n activeToolState = signal<AXImageEditorTool | null>(null);\n penColor = signal<string | CanvasGradient | CanvasPattern>('rgb(12, 12, 12)');\n highlightColor = signal<string | CanvasGradient | CanvasPattern>('rgb(255, 210, 48)');\n penWidth = signal<number>(10);\n highlightWidth = signal<number>(10);\n penType = signal<'pen' | 'highlight' | null>(null);\n rotate = signal({ state: 0, userInteract: false });\n isImageLoad = signal(false);\n loadError = signal(false);\n newImage: HTMLImageElement | null = null;\n initialImage: HTMLImageElement | null = null;\n imageBlob = signal<Blob[]>([]);\n undoPressed = signal(false);\n redoPressed = signal(false);\n canUndo = signal(false);\n canRedo = signal(false);\n cropperRatio = signal<string | null>(null);\n cropperSize = signal(150);\n\n toggleTool(tool: AXImageEditorTool) {\n if (this.activeToolState() === tool) {\n this.activeToolState.set(null);\n this.penType.set(null);\n return;\n }\n\n this.activateTool(tool);\n }\n\n activateTool(tool: AXImageEditorTool) {\n this.activeToolState.set(tool);\n\n if (tool === 'pen' || tool === 'highlight') {\n this.penType.set(tool);\n return;\n }\n\n this.penType.set(null);\n }\n\n undo(): void {\n if (!this.canUndo()) {\n return;\n }\n this.undoPressed.set(true);\n }\n\n redo(): void {\n if (!this.canRedo()) {\n return;\n }\n this.redoPressed.set(true);\n }\n\n /** Handles Ctrl/Cmd+Z and Ctrl/Cmd+Y history shortcuts. Returns true when handled. */\n handleHistoryShortcut(event: KeyboardEvent): boolean {\n const modifier = event.ctrlKey || event.metaKey;\n if (!modifier) {\n return false;\n }\n\n const isUndo = event.code === 'KeyZ' && !event.shiftKey;\n const isRedo = event.code === 'KeyY' || (event.code === 'KeyZ' && event.shiftKey);\n\n if (isUndo) {\n if (!this.canUndo()) {\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n this.undo();\n return true;\n }\n\n if (isRedo) {\n if (!this.canRedo()) {\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n this.redo();\n return true;\n }\n\n return false;\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n Renderer2,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorService } from '../image-editor.service';\n\ntype AXImageEditorCropHandle =\n | 'right'\n | 'top'\n | 'left'\n | 'bottom'\n | 'right-top'\n | 'bottom-right'\n | 'bottom-left'\n | 'left-top';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-cropper-window',\n templateUrl: './image-editor-cropper-window.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './image-editor-cropper-window.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropperWindowComponent }],\n})\nexport class AXImageEditorCropperWindowComponent implements OnDestroy {\n readonly showGrid = input(true);\n\n /** Base size in pixels used to calculate the initial cropper window dimensions. */\n readonly size = input<number>();\n\n protected service = inject(AXImageEditorService);\n private ngZone = inject(NgZone);\n private selectedHandle = signal<AXImageEditorCropHandle | null>(null);\n private panState = signal(false);\n private elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n protected cropperWindow = viewChild<ElementRef>('r');\n private currentX = signal(0);\n private currentY = signal(0);\n private aspectWidth = signal(1);\n private aspectHeight = signal(1);\n private isMousePressed = signal(false);\n protected renderer = inject(Renderer2);\n private platformID = inject(PLATFORM_ID);\n private mouseMoveEvent?: () => void;\n private mouseUpEvent?: () => void;\n private mouseMoveEvent2?: () => void;\n private mouseUpEvent2?: () => void;\n private mouseDownEvent?: () => void;\n private mouseLeaveEvent?: () => void;\n private positioned = false;\n\n #sizeEffect = effect(() => {\n const host = this.elementRef.nativeElement;\n const scale = this.size() ?? this.service.cropperSize();\n const ratio = this.service.cropperRatio();\n const { width, height } = this.normalizeRatio(ratio);\n\n this.aspectWidth.set(width);\n this.aspectHeight.set(height);\n\n const { width: maxW, height: maxH } = this.getImageBounds();\n const boundsW = maxW || scale * width;\n const boundsH = maxH || scale * height;\n let nextWidth = Math.min(width * scale, boundsW * 0.9);\n let nextHeight = (nextWidth * height) / width;\n\n if (nextHeight > boundsH * 0.9) {\n nextHeight = boundsH * 0.9;\n nextWidth = (nextHeight * width) / height;\n }\n\n host.style.width = `${Math.max(20, nextWidth)}px`;\n host.style.height = `${Math.max(20, nextHeight)}px`;\n\n if (this.positioned) {\n untracked(() => this.clampToParent());\n }\n });\n\n #init = afterNextRender(() => {\n const host = this.elementRef.nativeElement;\n this.centerOnParent();\n this.positioned = true;\n\n this.ngZone.runOutsideAngular(() => {\n this.mouseMoveEvent = this.renderer.listen(document, 'pointermove', this.changeSizeHandler.bind(this));\n this.mouseUpEvent = this.renderer.listen(document, 'pointerup', this.clearSelector.bind(this));\n this.mouseDownEvent = this.renderer.listen(host, 'pointerdown', this.panDown.bind(this));\n this.mouseMoveEvent2 = this.renderer.listen(host, 'pointermove', this.panMove.bind(this));\n this.mouseUpEvent2 = this.renderer.listen(host, 'pointerup', this.panUp.bind(this));\n });\n });\n\n ngOnDestroy(): void {\n if (!isPlatformBrowser(this.platformID)) {\n return;\n }\n this.mouseMoveEvent?.();\n this.mouseUpEvent?.();\n this.mouseDownEvent?.();\n this.mouseMoveEvent2?.();\n this.mouseUpEvent2?.();\n this.mouseLeaveEvent?.();\n }\n\n protected panMove(e: PointerEvent) {\n if (!this.isMousePressed()) return;\n if (this.selectedHandle()) return;\n if (!this.panState()) return;\n\n this.currentX.update((prev) => prev + e.movementX);\n this.currentY.update((prev) => prev + e.movementY);\n this.clampToParent();\n }\n\n protected panDown(e: PointerEvent) {\n if (this.selectedHandle()) return;\n this.isMousePressed.set(true);\n this.panState.set(true);\n (e.currentTarget as HTMLElement | null)?.setPointerCapture?.(e.pointerId);\n }\n\n protected panUp() {\n this.isMousePressed.set(false);\n this.panState.set(false);\n }\n\n public getCropperArea() {\n return this.elementRef.nativeElement.getBoundingClientRect();\n }\n\n private startX = 0;\n private startY = 0;\n private startWidth = 0;\n private startHeight = 0;\n private startLeft = 0;\n private startTop = 0;\n\n protected handleSelector(e: PointerEvent, value: AXImageEditorCropHandle) {\n e.stopPropagation();\n e.preventDefault();\n const host = this.elementRef.nativeElement;\n this.startX = e.clientX;\n this.startY = e.clientY;\n this.startWidth = host.offsetWidth;\n this.startHeight = host.offsetHeight;\n this.startLeft = host.offsetLeft;\n this.startTop = host.offsetTop;\n this.selectedHandle.set(value);\n this.isMousePressed.set(true);\n (e.currentTarget as HTMLElement | null)?.setPointerCapture?.(e.pointerId);\n }\n\n protected changeSizeHandler(e: PointerEvent) {\n if (!this.isMousePressed()) return;\n if (this.panState()) return;\n if (!this.selectedHandle()) return;\n\n const host = this.elementRef.nativeElement;\n const dy = e.clientY - this.startY;\n const dx = e.clientX - this.startX;\n const minSize = 20;\n const locked = !!this.service.cropperRatio();\n const aspect = this.aspectWidth() / this.aspectHeight();\n\n let width = this.startWidth;\n let height = this.startHeight;\n let left = this.startLeft;\n let top = this.startTop;\n\n switch (this.selectedHandle()) {\n case 'right':\n width = Math.max(minSize, this.startWidth + dx);\n break;\n case 'top':\n height = Math.max(minSize, this.startHeight - dy);\n top = this.startTop + (this.startHeight - height);\n break;\n case 'left':\n width = Math.max(minSize, this.startWidth - dx);\n left = this.startLeft + (this.startWidth - width);\n break;\n case 'bottom':\n height = Math.max(minSize, this.startHeight + dy);\n break;\n case 'right-top':\n width = Math.max(minSize, this.startWidth + dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight - dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n top = this.startTop + (this.startHeight - height);\n break;\n case 'bottom-right':\n width = Math.max(minSize, this.startWidth + dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight + dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n break;\n case 'bottom-left':\n width = Math.max(minSize, this.startWidth - dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight + dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n left = this.startLeft + (this.startWidth - width);\n break;\n case 'left-top':\n width = Math.max(minSize, this.startWidth - dx);\n height = locked ? width / aspect : Math.max(minSize, this.startHeight - dy);\n if (locked && height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n left = this.startLeft + (this.startWidth - width);\n top = this.startTop + (this.startHeight - height);\n break;\n }\n\n const constrained = this.constrainCropBox(left, top, width, height);\n host.style.width = `${constrained.width}px`;\n host.style.height = `${constrained.height}px`;\n this.currentX.set(constrained.left);\n this.currentY.set(constrained.top);\n this.applyPosition();\n }\n\n protected clearSelector() {\n this.selectedHandle.set(null);\n this.isMousePressed.set(false);\n this.panState.set(false);\n }\n\n private normalizeRatio(ratio: string | null): { width: number; height: number } {\n let width = 1;\n let height = 1;\n\n if (ratio && ratio.includes(':')) {\n const [rawW, rawH] = ratio.split(':').map(Number);\n if (rawW > 0 && rawH > 0) {\n width = rawW;\n height = rawH;\n }\n }\n\n if (width >= height) {\n return { width: width / height, height: 1 };\n }\n\n return { width: 1, height: height / width };\n }\n\n private centerOnParent(): void {\n const host = this.elementRef.nativeElement;\n const { width: maxW, height: maxH } = this.getImageBounds();\n if (!maxW || !maxH) {\n return;\n }\n\n const left = Math.max(0, (maxW - host.offsetWidth) / 2);\n const top = Math.max(0, (maxH - host.offsetHeight) / 2);\n this.currentX.set(left);\n this.currentY.set(top);\n this.clampToParent();\n }\n\n private getImageBounds(): { width: number; height: number } {\n const stage = this.elementRef.nativeElement.parentElement;\n const canvas = stage?.querySelector('canvas.ax-canvas-element');\n if (canvas instanceof HTMLCanvasElement) {\n return {\n width: canvas.clientWidth,\n height: canvas.clientHeight,\n };\n }\n\n return {\n width: stage?.clientWidth ?? 0,\n height: stage?.clientHeight ?? 0,\n };\n }\n\n private constrainCropBox(\n left: number,\n top: number,\n width: number,\n height: number,\n ): { left: number; top: number; width: number; height: number } {\n const { width: maxW, height: maxH } = this.getImageBounds();\n if (!maxW || !maxH) {\n return { left, top, width, height };\n }\n\n const minSize = 20;\n const locked = !!this.service.cropperRatio();\n const aspect = this.aspectWidth() / this.aspectHeight();\n\n width = Math.max(minSize, width);\n height = Math.max(minSize, height);\n\n if (locked) {\n height = width / aspect;\n if (height < minSize) {\n height = minSize;\n width = height * aspect;\n }\n }\n\n const fitScale = Math.min(1, maxW / width, maxH / height);\n width *= fitScale;\n height *= fitScale;\n\n if (locked) {\n height = width / aspect;\n if (height > maxH) {\n height = maxH;\n width = height * aspect;\n }\n if (width > maxW) {\n width = maxW;\n height = width / aspect;\n }\n }\n\n width = Math.max(minSize, Math.min(width, maxW));\n height = Math.max(minSize, Math.min(height, maxH));\n\n left = Math.max(0, Math.min(left, maxW - width));\n top = Math.max(0, Math.min(top, maxH - height));\n\n width = Math.min(width, maxW - left);\n height = Math.min(height, maxH - top);\n\n if (locked) {\n const scale = Math.min(1, (maxW - left) / width, (maxH - top) / height);\n width = Math.max(minSize, width * scale);\n height = width / aspect;\n }\n\n return { left, top, width, height };\n }\n\n private clampToParent(): void {\n const host = this.elementRef.nativeElement;\n const constrained = this.constrainCropBox(\n this.currentX(),\n this.currentY(),\n host.offsetWidth,\n host.offsetHeight,\n );\n host.style.width = `${constrained.width}px`;\n host.style.height = `${constrained.height}px`;\n this.currentX.set(constrained.left);\n this.currentY.set(constrained.top);\n this.applyPosition();\n }\n\n private applyPosition(): void {\n const host = this.elementRef.nativeElement;\n host.style.left = `${this.currentX()}px`;\n host.style.top = `${this.currentY()}px`;\n }\n}\n","<div [style.border]=\"!showGrid() ? '1px dashed white' : null\" #r class=\"ax-image-cropper-window-container\">\n @if (!service.cropperRatio()) {\n <div (pointerdown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (pointerdown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div\n (pointerdown)=\"handleSelector($event, 'bottom-right')\"\n class=\"ax-image-bottom-right-handle ax-handle-shape\"\n ></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left-top')\" class=\"ax-image-left-top-handle ax-handle-shape\"></div>\n\n @if (showGrid()) {\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n }\n</div>\n","export const IMAGE_EDITOR_MAX_BUFFER = 4096;\nexport const IMAGE_EDITOR_EXPORT_QUALITY = 1;\n\nexport function loadHtmlImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n if (!src.startsWith('data:') && !src.startsWith('blob:')) {\n image.crossOrigin = 'anonymous';\n }\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('Failed to load image'));\n image.src = src;\n });\n}\n\nexport function canvasToBlob(canvas: HTMLCanvasElement, type: string, quality?: number): Promise<Blob> {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n return;\n }\n reject(new Error(`toBlob returned null for type ${type}`));\n },\n type,\n quality,\n );\n });\n}\n\nexport async function canvasToEditorBlobs(canvas: HTMLCanvasElement): Promise<Blob[]> {\n const jpeg = await canvasToBlob(canvas, 'image/jpeg', IMAGE_EDITOR_EXPORT_QUALITY);\n const extra = await Promise.allSettled([\n canvasToBlob(canvas, 'image/png'),\n canvasToBlob(canvas, 'image/webp', IMAGE_EDITOR_EXPORT_QUALITY),\n ]);\n\n const blobs: Blob[] = [jpeg];\n for (const result of extra) {\n if (result.status === 'fulfilled') {\n blobs.push(result.value);\n }\n }\n return blobs;\n}\n\nexport function bufferSizeForImage(\n width: number,\n height: number,\n max = IMAGE_EDITOR_MAX_BUFFER,\n): { width: number; height: number } {\n const scale = Math.min(1, max / Math.max(width, height, 1));\n return {\n width: Math.max(1, Math.round(width * scale)),\n height: Math.max(1, Math.round(height * scale)),\n };\n}\n","import { AXComponent, MXBaseComponent } from '@acorex/cdk/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorContainerComponent } from '../image-editor-container/image-editor-container.component';\nimport { AXImageEditorCropperWindowComponent } from '../image-editor-cropper-window/image-editor-cropper-window.component';\nimport {\n bufferSizeForImage,\n canvasToEditorBlobs,\n loadHtmlImage,\n} from '../image-editor-canvas.util';\nimport { AXImageEditorService } from '../image-editor.service';\n\n@Component({\n selector: 'ax-image-editor-view',\n templateUrl: './image-editor-view.component.html',\n styleUrls: ['./image-editor-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXImageEditorCropperWindowComponent],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorViewComponent }],\n})\nexport class AXImageEditorViewComponent extends MXBaseComponent {\n /**\n * its change grid display state.\n */\n readonly showGrid = input(true);\n /**\n * Base size in pixels for the initial cropper window dimensions.\n */\n readonly cropperSize = input<number>();\n /**\n * its change grid display state.\n */\n readonly lockRatio = signal(false);\n /**\n * its receive image src.\n */\n readonly src = input<string>('');\n /** @ignore */\n protected canvasElem = viewChild<ElementRef<HTMLCanvasElement>>('canvasElem');\n /** @ignore */\n protected cropperWindow = viewChild<AXImageEditorCropperWindowComponent>('f');\n /** @ignore */\n protected ctx = signal<CanvasRenderingContext2D | null>(null);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected isMouseDown = signal(false);\n /** @ignore */\n protected isDrawRectangleCreated = signal(false);\n /** @ignore */\n protected parent = inject(AXImageEditorContainerComponent);\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly host = inject(ElementRef<HTMLElement>);\n\n /** @ignore */\n protected imageEditorHistory = signal<HTMLImageElement[]>([]);\n /** @ignore */\n protected imageEditorHistoryPointer = signal(-1);\n\n private canvasReady = signal(false);\n private drawing = false;\n private didDraw = false;\n private highlightSnapshot: ImageData | null = null;\n private highlightPoints: Array<{ x: number; y: number }> = [];\n private persistGeneration = 0;\n private sourceToken = 0;\n\n constructor() {\n super();\n\n afterNextRender(() => {\n const canvas = this.canvasElem()?.nativeElement;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n if (!ctx) {\n return;\n }\n\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n this.ctx.set(ctx);\n this.canvasReady.set(true);\n\n const onResize = () => this.fitCanvasDisplay();\n window.addEventListener('resize', onResize);\n this.destroyRef.onDestroy(() => window.removeEventListener('resize', onResize));\n });\n\n effect(() => {\n const src = this.src();\n const ready = this.canvasReady();\n if (!ready) {\n return;\n }\n untracked(() => void this.loadSource(src));\n });\n\n effect(() => {\n if (!this.service.undoPressed()) {\n return;\n }\n untracked(() => {\n this.applyUndo();\n this.service.undoPressed.set(false);\n });\n });\n\n effect(() => {\n if (!this.service.redoPressed()) {\n return;\n }\n untracked(() => {\n this.applyRedo();\n this.service.redoPressed.set(false);\n });\n });\n\n effect(() => {\n const rotate = this.service.rotate();\n const ctx = this.ctx();\n if (!rotate.userInteract || !ctx) {\n return;\n }\n untracked(() => void this.rotateImage());\n });\n\n effect(() => {\n if (!this.service.isImageLoad()) {\n return;\n }\n untracked(() => {\n requestAnimationFrame(() => this.fitCanvasDisplay());\n });\n });\n\n effect(() => {\n const size = this.cropperSize();\n if (size != null) {\n this.service.cropperSize.set(size);\n }\n });\n }\n\n /** @ignore */\n protected resizeWindow() {\n this.fitCanvasDisplay();\n }\n\n /** @ignore */\n protected canvasResponsive(image: HTMLImageElement) {\n this.paintImage(image);\n }\n\n private async loadSource(src: string): Promise<void> {\n const token = ++this.sourceToken;\n this.service.loadError.set(false);\n this.service.isImageLoad.set(false);\n this.service.imageBlob.set([]);\n this.service.newImage = null;\n this.service.initialImage = null;\n\n if (!src) {\n return;\n }\n\n try {\n const image = await loadHtmlImage(src);\n if (token !== this.sourceToken) {\n return;\n }\n this.service.initialImage = image;\n this.service.newImage = image;\n this.replaceHistory(image);\n this.paintImage(image);\n this.service.isImageLoad.set(true);\n } catch {\n if (token !== this.sourceToken) {\n return;\n }\n this.service.loadError.set(true);\n this.service.isImageLoad.set(false);\n }\n }\n\n private paintImage(image: HTMLImageElement): void {\n const canvas = this.canvasElem()?.nativeElement;\n const ctx = this.ctx();\n if (!canvas || !ctx || !image) {\n return;\n }\n\n const buffer = bufferSizeForImage(image.naturalWidth || image.width, image.naturalHeight || image.height);\n canvas.width = buffer.width;\n canvas.height = buffer.height;\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n this.fitCanvasDisplay();\n }\n\n private fitCanvasDisplay(): void {\n const canvas = this.canvasElem()?.nativeElement;\n if (!canvas?.width || !canvas.height) {\n return;\n }\n\n const parent = this.host.nativeElement;\n const maxW = Math.max(parent?.clientWidth || 0, 240);\n const maxH = Math.min(window.innerHeight * 0.55, 560);\n const scale = Math.min(maxW / canvas.width, maxH / canvas.height, 1);\n canvas.style.width = `${Math.max(1, Math.round(canvas.width * scale))}px`;\n canvas.style.height = `${Math.max(1, Math.round(canvas.height * scale))}px`;\n }\n\n private replaceHistory(image: HTMLImageElement): void {\n this.imageEditorHistory.set([image]);\n this.imageEditorHistoryPointer.set(0);\n this.syncHistoryFlags();\n }\n\n private pushHistory(image: HTMLImageElement): void {\n const pointer = this.imageEditorHistoryPointer();\n const next = this.imageEditorHistory().slice(0, pointer + 1);\n next.push(image);\n this.imageEditorHistory.set(next);\n this.imageEditorHistoryPointer.set(next.length - 1);\n this.syncHistoryFlags();\n }\n\n private syncHistoryFlags(): void {\n const pointer = this.imageEditorHistoryPointer();\n const length = this.imageEditorHistory().length;\n this.service.canUndo.set(pointer > 0);\n this.service.canRedo.set(pointer >= 0 && pointer < length - 1);\n }\n\n private applyUndo(): void {\n const pointer = this.imageEditorHistoryPointer();\n if (pointer < 1) {\n this.syncHistoryFlags();\n return;\n }\n\n const nextPointer = pointer - 1;\n const image = this.imageEditorHistory()[nextPointer];\n this.imageEditorHistoryPointer.set(nextPointer);\n this.service.newImage = image;\n this.paintImage(image);\n this.syncHistoryFlags();\n void this.persistCanvas({ skipHistory: true });\n }\n\n private applyRedo(): void {\n const history = this.imageEditorHistory();\n const pointer = this.imageEditorHistoryPointer();\n if (pointer >= history.length - 1) {\n this.syncHistoryFlags();\n return;\n }\n\n const nextPointer = pointer + 1;\n const image = history[nextPointer];\n this.imageEditorHistoryPointer.set(nextPointer);\n this.service.newImage = image;\n this.paintImage(image);\n this.syncHistoryFlags();\n void this.persistCanvas({ skipHistory: true });\n }\n\n private canvasPoint(event: PointerEvent): { x: number; y: number } {\n const canvas = this.canvasElem()!.nativeElement;\n const rect = canvas.getBoundingClientRect();\n const width = rect.width || 1;\n const height = rect.height || 1;\n return {\n x: ((event.clientX - rect.left) / width) * canvas.width,\n y: ((event.clientY - rect.top) / height) * canvas.height,\n };\n }\n\n private isDrawTool(): boolean {\n const tool = this.service.penType();\n return tool === 'pen' || tool === 'highlight';\n }\n\n /** @ignore */\n protected penConfigHandler(penType: 'pen' | 'highlight') {\n const ctx = this.ctx();\n if (!ctx) {\n return;\n }\n\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n\n switch (penType) {\n case 'pen':\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n ctx.strokeStyle = this.service.penColor();\n ctx.lineWidth = this.service.penWidth();\n break;\n case 'highlight':\n ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'multiply';\n ctx.strokeStyle = this.service.highlightColor();\n ctx.lineWidth = this.service.highlightWidth();\n break;\n }\n }\n\n private strokeHighlight(points: Array<{ x: number; y: number }>): void {\n const ctx = this.ctx();\n if (!ctx || points.length === 0) {\n return;\n }\n\n this.penConfigHandler('highlight');\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n if (points.length === 1) {\n ctx.lineTo(points[0].x, points[0].y);\n }\n ctx.stroke();\n }\n\n /** @ignore */\n protected historyKeyDown(event: KeyboardEvent): void {\n if (this.parent.disabled) {\n return;\n }\n\n this.service.handleHistoryShortcut(event);\n }\n\n /** @ignore */\n protected focusCanvas(): void {\n this.canvasElem()?.nativeElement.focus({ preventScroll: true });\n }\n\n /** @ignore */\n protected mouseDownHandler(event: PointerEvent) {\n this.focusCanvas();\n\n if (!this.isDrawTool() || this.parent.disabled) {\n return;\n }\n\n const ctx = this.ctx();\n const canvas = this.canvasElem()?.nativeElement;\n const penType = this.service.penType();\n if (!ctx || !canvas || !penType) {\n return;\n }\n\n event.preventDefault();\n canvas.setPointerCapture(event.pointerId);\n this.isMouseDown.set(true);\n this.drawing = true;\n this.didDraw = false;\n\n const point = this.canvasPoint(event);\n this.penConfigHandler(penType);\n\n if (penType === 'highlight') {\n this.highlightSnapshot = ctx.getImageData(0, 0, canvas.width, canvas.height);\n this.highlightPoints = [point];\n this.strokeHighlight(this.highlightPoints);\n } else {\n ctx.beginPath();\n ctx.moveTo(point.x, point.y);\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n }\n this.didDraw = true;\n }\n\n /** @ignore */\n protected mouseMoveHandler(event: PointerEvent) {\n if (!this.drawing || !this.isDrawTool()) {\n return;\n }\n\n const ctx = this.ctx();\n const canvas = this.canvasElem()?.nativeElement;\n const penType = this.service.penType();\n if (!ctx || !canvas || !penType) {\n return;\n }\n\n const point = this.canvasPoint(event);\n if (penType === 'highlight' && this.highlightSnapshot) {\n ctx.putImageData(this.highlightSnapshot, 0, 0);\n this.highlightPoints.push(point);\n this.strokeHighlight(this.highlightPoints);\n } else {\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n }\n this.didDraw = true;\n }\n\n /** @ignore */\n protected mouseUpHandler(event?: PointerEvent) {\n const canvas = this.canvasElem()?.nativeElement;\n if (event && canvas?.hasPointerCapture(event.pointerId)) {\n canvas.releasePointerCapture(event.pointerId);\n }\n\n const wasDrawing = this.drawing && this.didDraw;\n this.drawing = false;\n this.didDraw = false;\n this.isMouseDown.set(false);\n this.highlightSnapshot = null;\n this.highlightPoints = [];\n\n const ctx = this.ctx();\n if (ctx) {\n ctx.closePath();\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n }\n\n if (wasDrawing) {\n void this.persistCanvas();\n }\n }\n\n /** Applies the current cropper selection. */\n async crop(): Promise<void> {\n const cropper = this.cropperWindow();\n const ctx = this.ctx();\n const canvas = this.canvasElem()?.nativeElement;\n if (this.service.activeToolState() !== 'crop' || !cropper || !ctx || !canvas) {\n return;\n }\n\n const cropRect = cropper.getCropperArea();\n const canvasRect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / (canvasRect.width || 1);\n const scaleY = canvas.height / (canvasRect.height || 1);\n const dx = Math.max(0, Math.round((cropRect.x - canvasRect.x) * scaleX));\n const dy = Math.max(0, Math.round((cropRect.y - canvasRect.y) * scaleY));\n const cropWidth = Math.max(1, Math.round(cropRect.width * scaleX));\n const cropHeight = Math.max(1, Math.round(cropRect.height * scaleY));\n const width = Math.min(cropWidth, canvas.width - dx);\n const height = Math.min(cropHeight, canvas.height - dy);\n\n const imageData = ctx.getImageData(dx, dy, width, height);\n canvas.width = width;\n canvas.height = height;\n ctx.putImageData(imageData, 0, 0);\n this.fitCanvasDisplay();\n this.service.activeToolState.set(null);\n this.service.penType.set(null);\n await this.persistCanvas();\n }\n\n /** Encodes the current canvas into JPEG, PNG, and WebP blobs. */\n async commitChanges(): Promise<Blob[]> {\n await this.persistCanvas();\n return this.service.imageBlob();\n }\n\n /** @ignore */\n protected async rotateImage() {\n const canvas = this.canvasElem()?.nativeElement;\n const ctx = this.ctx();\n if (!canvas || !ctx || !canvas.width || !canvas.height) {\n this.service.rotate.update((prev) => ({ state: prev.state, userInteract: false }));\n return;\n }\n\n const source = document.createElement('canvas');\n source.width = canvas.width;\n source.height = canvas.height;\n const sourceCtx = source.getContext('2d');\n if (!sourceCtx) {\n this.service.rotate.update((prev) => ({ state: prev.state, userInteract: false }));\n return;\n }\n sourceCtx.drawImage(canvas, 0, 0);\n\n const degrees = this.service.rotate().state;\n const radians = (degrees * Math.PI) / 180;\n const cos = Math.abs(Math.cos(radians));\n const sin = Math.abs(Math.sin(radians));\n const rotatedWidth = Math.max(1, Math.round(source.width * cos + source.height * sin));\n const rotatedHeight = Math.max(1, Math.round(source.width * sin + source.height * cos));\n\n canvas.width = rotatedWidth;\n canvas.height = rotatedHeight;\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.save();\n ctx.translate(canvas.width / 2, canvas.height / 2);\n ctx.rotate(radians);\n ctx.drawImage(source, -source.width / 2, -source.height / 2);\n ctx.restore();\n this.fitCanvasDisplay();\n\n await this.persistCanvas();\n this.service.rotate.update((prev) => ({ state: prev.state, userInteract: false }));\n }\n\n private async persistCanvas(options?: { skipHistory?: boolean }): Promise<void> {\n const canvas = this.canvasElem()?.nativeElement;\n if (!canvas?.width || !canvas.height) {\n return;\n }\n\n const generation = ++this.persistGeneration;\n\n try {\n const blobs = await canvasToEditorBlobs(canvas);\n if (generation !== this.persistGeneration) {\n return;\n }\n this.service.imageBlob.set(blobs);\n\n const dataUrl = canvas.toDataURL('image/jpeg', 1);\n const image = await loadHtmlImage(dataUrl);\n if (generation !== this.persistGeneration) {\n return;\n }\n\n this.service.newImage = image;\n if (!options?.skipHistory) {\n this.pushHistory(image);\n }\n } catch {\n if (generation !== this.persistGeneration) {\n return;\n }\n }\n }\n}\n","<div class=\"ax-image-editor-stage\">\n <canvas\n tabindex=\"0\"\n (pointerdown)=\"mouseDownHandler($event)\"\n (pointerup)=\"mouseUpHandler($event)\"\n (pointercancel)=\"mouseUpHandler($event)\"\n (pointermove)=\"mouseMoveHandler($event)\"\n (keydown)=\"historyKeyDown($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n ></canvas>\n\n @if (service.activeToolState() === 'crop') {\n <ax-image-editor-cropper-window [showGrid]=\"showGrid()\" #f></ax-image-editor-cropper-window>\n }\n</div>\n","import {\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { AXImageEditorViewComponent } from '../image-editor-view/image-editor-view.component';\nimport { AXImageEditorService } from '../image-editor.service';\n\n/**\n * paint container.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-container',\n templateUrl: './image-editor-container.component.html',\n styleUrl: './image-editor-container.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n outputs: ['onValueChanged'],\n inputs: ['look', 'disabled'],\n host: {\n '[class.ax-state-disabled]': 'disabled',\n '[attr.name]': 'name',\n tabindex: '-1',\n '(keydown)': 'handleHistoryShortcut($event)',\n },\n providers: [\n AXImageEditorService,\n { provide: AXComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXValuableComponent, useExisting: AXImageEditorContainerComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXImageEditorContainerComponent),\n multi: true,\n },\n ],\n imports: [AXDecoratorModule, AXLoadingSpinnerComponent, AsyncPipe, AXTranslatorPipe],\n})\nexport class AXImageEditorContainerComponent extends classes(MXInputBaseValueComponent<Blob[]>, MXLookComponent) {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n imageEditorContainer = viewChild<ElementRef>('f');\n\n view = contentChild<AXImageEditorViewComponent>(AXImageEditorViewComponent);\n\n constructor() {\n super();\n\n afterNextRender(() => {\n const onKeyDown = (event: KeyboardEvent) => this.handleHistoryShortcut(event);\n document.addEventListener('keydown', onKeyDown, true);\n this.destroyRef.onDestroy(() => document.removeEventListener('keydown', onKeyDown, true));\n });\n }\n\n #syncValue = effect(() => {\n const blobs = this.service.imageBlob();\n if (blobs.length) {\n this.commitValue(blobs, true);\n } else {\n this.commitValue(null);\n }\n });\n\n /** @ignore */\n protected focusEditor(): void {\n this.host.nativeElement.focus({ preventScroll: true });\n }\n\n /** Applies the current cropper selection. */\n async crop(): Promise<void> {\n const oldValue = this.value;\n\n await this.view()?.crop();\n\n const blobs = this.service.imageBlob();\n\n if (blobs.length && this.value === oldValue) {\n this.commitValue(blobs, true);\n }\n }\n\n /** @ignore */\n protected onEditorPointerDown(event: PointerEvent): void {\n const target = event.target;\n if (target instanceof Element && target.closest('canvas.ax-canvas-element')) {\n return;\n }\n\n this.focusEditor();\n }\n\n /** @ignore */\n protected handleHistoryShortcut(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n const root = this.host.nativeElement;\n const activeElement = document.activeElement;\n const isInsideEditor =\n root.contains(activeElement) || event.composedPath().some((node) => node === root);\n\n if (!isInsideEditor) {\n return;\n }\n\n const target = (event.target ?? activeElement) as EventTarget | null;\n if (\n target instanceof HTMLElement &&\n (target.isContentEditable || target.closest('input, textarea, select, [contenteditable=\"true\"]'))\n ) {\n return;\n }\n\n this.service.handleHistoryShortcut(event);\n }\n\n /** Encodes the current canvas into JPEG, PNG, and WebP blobs. */\n async commitChanges(): Promise<Blob[]> {\n const view = this.view();\n if (!view) {\n return this.service.imageBlob();\n }\n\n if (this.service.activeToolState() === 'crop') {\n await view.crop();\n }\n\n return view.commitChanges();\n }\n}\n","<div\n #f\n class=\"ax-editor-container ax-default {{ look }}\"\n [class.ax-image-editor-pending]=\"!service.isImageLoad()\"\n (pointerdown)=\"onEditorPointerDown($event)\"\n>\n <ng-content select=\"ax-header\"></ng-content>\n\n <ng-content select=\"ax-image-editor-view\"> </ng-content>\n\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n@if (!service.isImageLoad()) {\n @if (service.loadError()) {\n <div class=\"ax-error-container\">{{ '@acorex:image-editor.load-error' | translate | async }}</div>\n } @else {\n <div class=\"ax-loading-spinner-container\">\n <ax-loading-spinner\n [size]=\"16\"\n color=\"primary\"\n [text]=\"('@acorex:image-editor.loading' | translate | async) || ''\"\n ></ax-loading-spinner>\n </div>\n }\n}\n\n<div class=\"ax-error-container\"></div>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n\n@if (disabled) {\n <div class=\"ax-disable-overlay\"></div>\n}\n","export const IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX = ':active';\n\nexport function parseAspectRatioItem(item: string): { ratio: string; active: boolean } {\n if (item.endsWith(IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX)) {\n return {\n ratio: item.slice(0, -IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX.length),\n active: true,\n };\n }\n\n return { ratio: item, active: false };\n}\n\nexport function parseAspectRatios(items: readonly string[]): {\n ratios: string[];\n activeRatio: string | null;\n} {\n const ratios: string[] = [];\n let activeRatio: string | null = null;\n\n for (const item of items) {\n const { ratio, active } = parseAspectRatioItem(item);\n ratios.push(ratio);\n\n if (active && activeRatio === null) {\n activeRatio = ratio;\n }\n }\n\n return { ratios, activeRatio };\n}\n","import { inject } from '@angular/core';\nimport { AXImageEditorService, AXImageEditorTool } from '../image-editor.service';\n\n/**\n * Base class for image editor tool trigger components.\n * @category Components\n */\nexport abstract class AXImageEditorToolComponent {\n protected service = inject(AXImageEditorService);\n\n abstract readonly tool: AXImageEditorTool;\n\n setActive(): void {\n this.service.activateTool(this.tool);\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { parseAspectRatios } from '../../image-editor-aspect-ratio.util';\nimport { AXImageEditorContainerComponent } from '../../image-editor-container/image-editor-container.component';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Crop tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-crop',\n templateUrl: './image-editor-crop.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropComponent }],\n})\nexport class AXImageEditorCropComponent extends AXImageEditorToolComponent {\n readonly tool = 'crop';\n\n private container = inject(AXImageEditorContainerComponent);\n\n /** Aspect ratio presets. Append `:active` to mark the default ratio, e.g. `'2:1:active'`. */\n aspectRatio = input<string[]>([]);\n\n /** Base size in pixels for the initial cropper window dimensions. */\n size = input<number>();\n\n #syncSize = effect(() => {\n const size = this.size();\n if (size != null) {\n this.service.cropperSize.set(size);\n }\n });\n\n #syncAspectRatio = effect(() => {\n const { activeRatio } = parseAspectRatios(this.aspectRatio());\n if (activeRatio) {\n this.service.cropperRatio.set(activeRatio);\n }\n });\n\n /** Applies the current cropper selection. */\n crop(): void {\n this.container.crop();\n }\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.crop' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('crop')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'crop'\"\n [color]=\"service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Highlight tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-highlight',\n templateUrl: './image-editor-highlight.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightComponent }],\n})\nexport class AXImageEditorHighlightComponent extends AXImageEditorToolComponent {\n readonly tool = 'highlight';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('highlight')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'highlight'\"\n [color]=\"service.activeToolState() === 'highlight' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-history',\n templateUrl: './image-editor-history.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHistoryComponent }],\n})\nexport class AXImageEditorHistoryComponent {\n protected service = inject(AXImageEditorService);\n\n protected UndoHandler() {\n this.service.undo();\n }\n\n protected RedoHandler() {\n this.service.redo();\n }\n}\n","<div class=\"flex\">\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.undo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"UndoHandler()\"\n look=\"blank\"\n [disabled]=\"!service.canUndo()\"\n >\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n </ax-button>\n\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.redo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"RedoHandler()\"\n look=\"blank\"\n [disabled]=\"!service.canRedo()\"\n >\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n </ax-button>\n</div>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Pen tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-pen',\n templateUrl: './image-editor-pen.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenComponent }],\n})\nexport class AXImageEditorPenComponent extends AXImageEditorToolComponent {\n readonly tool = 'pen';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('pen')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'pen'\"\n [color]=\"service.activeToolState() === 'pen' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Rotate tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-rotate',\n templateUrl: './image-editor-rotate.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateComponent }],\n})\nexport class AXImageEditorRotateComponent extends AXImageEditorToolComponent {\n readonly tool = 'rotate';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('rotate')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'rotate'\"\n [color]=\"service.activeToolState() === 'rotate' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <i class=\"fa-solid fa-rotate\"></i>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, computed, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { parseAspectRatios } from '../../image-editor-aspect-ratio.util';\nimport { AXImageEditorContainerComponent } from '../../image-editor-container/image-editor-container.component';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-crop-options',\n templateUrl: './image-editor-crop-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AsyncPipe, AXTranslatorPipe],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }],\n})\nexport class AXImageEditorCropOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n private container = inject(AXImageEditorContainerComponent);\n\n cropPressed = output();\n\n aspectRatio = input<string[]>([]);\n\n protected aspectRatios = computed(() => parseAspectRatios(this.aspectRatio()).ratios);\n\n protected cropButtonHandler() {\n this.cropPressed.emit();\n this.container.crop();\n }\n\n protected ratioHandler(r: '1:1' | '16:9' | string) {\n if (this.service.cropperRatio() === r) {\n this.service.cropperRatio.set(null);\n } else {\n this.service.cropperRatio.set(r);\n }\n }\n}\n","<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatios(); track item) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-highlight-options',\n templateUrl: './image-editor-highlight-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXColorBoxComponent, FormsModule, AXRangeSliderComponent, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightOptionsComponent }],\n})\nexport class AXImageEditorHighlightOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected selectedColor = signal(this.service.highlightColor());\n\n /** @ignore */\n protected value = this.service.highlightWidth();\n\n protected changeColorHandler(e: string) {\n this.service.highlightColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.highlightWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-pen-options',\n templateUrl: './image-editor-pen-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXColorBoxComponent, FormsModule, AXRangeSliderComponent, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenOptionsComponent }],\n})\nexport class AXImageEditorPenOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected value = this.service.penWidth();\n\n /** @ignore */\n protected selectedColor = signal(this.service.penColor());\n\n protected changeColorHandler(e: string) {\n this.service.penColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.penWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-rotate-options',\n templateUrl: './image-editor-rotate-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXButtonComponent,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateOptionsComponent }],\n})\nexport class AXImageEditorRotateOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n protected rotateRightHandler() {\n this.service.rotate.set({ state: 90, userInteract: true });\n }\n\n protected rotateLeftHandler() {\n this.service.rotate.set({ state: -90, userInteract: true });\n }\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-left' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateLeftHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-left\"></ax-icon>\n</ax-button>\n\n<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-right' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateRightHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-right\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { Component, computed, contentChild, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\nimport { AXImageEditorCropOptionsComponent } from '../image-editor-crop/image-editor-crop-options.component';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightOptionsComponent } from '../image-editor-highlight/image-editor-highlight-options.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorPenOptionsComponent } from '../image-editor-pen/image-editor-pen-options.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateOptionsComponent } from '../image-editor-rotate/image-editor-rotate-options.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Toolbar layout for configurable image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tools-bar',\n templateUrl: './image-editor-tools-bar.component.html',\n styleUrl: './image-editor-tools-bar.component.css',\n encapsulation: ViewEncapsulation.None,\n\n host: {\n '[class.ax-image-editor-tools-bar-hidden]': 'hidden()',\n },\n imports: [\n AXDecoratorModule,\n AXToolBarModule,\n AXImageEditorPenOptionsComponent,\n AXImageEditorHighlightOptionsComponent,\n AXImageEditorCropOptionsComponent,\n AXImageEditorRotateOptionsComponent,\n ],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }],\n})\nexport class AXImageEditorToolsBarComponent {\n protected service = inject(AXImageEditorService);\n\n /**\n * Tool component reference to activate on load.\n */\n active = input<AXImageEditorToolComponent>();\n\n /** Hides the tools bar UI while keeping projected tools configurable. */\n hidden = input(false);\n\n protected penTool = contentChild(AXImageEditorPenComponent);\n protected highlightTool = contentChild(AXImageEditorHighlightComponent);\n protected cropTool = contentChild(AXImageEditorCropComponent);\n protected rotateTool = contentChild(AXImageEditorRotateComponent);\n\n protected cropAspectRatio = computed(() => this.cropTool()?.aspectRatio() ?? []);\n\n #activeEffect = effect(() => {\n this.active()?.setActive();\n });\n}\n","<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolsBarComponent } from '../image-editor-tools-bar/image-editor-tools-bar.component';\n\n/**\n * Convenience wrapper that includes all image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tool-selector',\n templateUrl: './image-editor-tool-selector.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorCropComponent,\n AXImageEditorRotateComponent,\n ],\n\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolSelectorComponent }],\n})\nexport class AXImageEditorToolSelectorComponent {\n aspectRatio = input<string[]>([]);\n}\n","<ax-image-editor-tools-bar>\n <ax-image-editor-pen></ax-image-editor-pen>\n <ax-image-editor-highlight></ax-image-editor-highlight>\n <ax-image-editor-crop [aspectRatio]=\"aspectRatio()\"></ax-image-editor-crop>\n <ax-image-editor-rotate></ax-image-editor-rotate>\n</ax-image-editor-tools-bar>\n","import { NgModule } from '@angular/core';\nimport { AXImageEditorContainerComponent } from './image-editor-container/image-editor-container.component';\nimport { AXImageEditorCropperWindowComponent } from './image-editor-cropper-window/image-editor-cropper-window.component';\nimport { AXImageEditorCropComponent } from './image-editor-tools/image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from './image-editor-tools/image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorHistoryComponent } from './image-editor-tools/image-editor-history/image-editor-history.component';\nimport { AXImageEditorPenComponent } from './image-editor-tools/image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from './image-editor-tools/image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolSelectorComponent } from './image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component';\nimport { AXImageEditorToolsBarComponent } from './image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component';\nimport { AXImageEditorViewComponent } from './image-editor-view/image-editor-view.component';\n\nconst PUBLIC_COMPONENTS = [\n AXImageEditorViewComponent,\n AXImageEditorContainerComponent,\n AXImageEditorCropComponent,\n AXImageEditorHistoryComponent,\n AXImageEditorToolSelectorComponent,\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorRotateComponent,\n AXImageEditorCropperWindowComponent,\n] as const;\n\n@NgModule({\n imports: [...PUBLIC_COMPONENTS],\n exports: [...PUBLIC_COMPONENTS],\n})\nexport class AXImageEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}