@ngstarter-ui/components 21.0.48 → 21.0.49

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":"ngstarter-ui-components-image-designer.mjs","sources":["../../../projects/components/image-designer/src/image-designer.service.ts","../../../projects/components/image-designer/src/default-photos-data-source.ts","../../../projects/components/image-designer/src/patterns.ts","../../../projects/components/image-designer/src/elements.ts","../../../projects/components/image-designer/src/presets.ts","../../../projects/components/image-designer/src/tokens.ts","../../../projects/components/image-designer/src/settings/settings.ts","../../../projects/components/image-designer/src/settings/settings.html","../../../projects/components/image-designer/src/effects/effects.ts","../../../projects/components/image-designer/src/effects/effects.html","../../../projects/components/image-designer/src/image-designer/image-designer.ts","../../../projects/components/image-designer/src/image-designer/image-designer.html","../../../projects/components/image-designer/ngstarter-ui-components-image-designer.ts"],"sourcesContent":["import { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { inject, Injectable, OnDestroy, PLATFORM_ID, signal } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport Konva from 'konva';\n\n/**\n * A custom Konva filter for color tinting.\n * It modifies existing pixel colors by a factor without completely replacing them.\n * Factors are between -1 and 1.\n */\nconst TintFilter = function (this: Konva.Node, imageData: ImageData) {\n const data = imageData.data;\n const n = data.length;\n const tintR = this.getAttr('tintR') || 0;\n const tintG = this.getAttr('tintG') || 0;\n const tintB = this.getAttr('tintB') || 0;\n\n if (tintR === 0 && tintG === 0 && tintB === 0) return;\n\n for (let i = 0; i < n; i += 4) {\n if (tintR > 0) data[i] += (255 - data[i]) * tintR;\n else if (tintR < 0) data[i] += data[i] * tintR;\n\n if (tintG > 0) data[i + 1] += (255 - data[i + 1]) * tintG;\n else if (tintG < 0) data[i + 1] += data[i + 1] * tintG;\n\n if (tintB > 0) data[i + 2] += (255 - data[i + 2]) * tintB;\n else if (tintB < 0) data[i + 2] += data[i + 2] * tintB;\n }\n};\n\nimport { ElementConfig, GradientConfig, ImageSize, LayerConfig, ImageDesignerSnapshot } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageDesignerService implements OnDestroy {\n private stage: Konva.Stage | undefined;\n private workspaceLayer: Konva.Layer | undefined;\n private uiLayer: Konva.Layer | undefined;\n private canvasRect: Konva.Rect | undefined;\n private maskOverlay: Konva.Shape | undefined;\n private resizeObserver: ResizeObserver | undefined;\n private minScale = 0.1;\n private maxScale = 5;\n readonly scale = signal(1);\n readonly isInitialized = signal(false);\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private loadedFonts = new Set<string>();\n readonly fonts = signal<string[]>([\n 'Inter',\n 'Roboto',\n 'Open Sans',\n 'Lato',\n 'Montserrat',\n 'Oswald',\n 'Source Sans Pro',\n 'Slabo 27px',\n 'Raleway',\n 'PT Sans',\n 'Merriweather',\n 'Nunito',\n 'Playfair Display',\n 'Poppins',\n 'Ubuntu',\n 'Lora',\n 'Muli',\n 'Arvo',\n 'Rubik',\n 'Courier Prime',\n 'Pacifico',\n 'Dancing Script',\n 'Bangers',\n 'Special Elite',\n 'Press Start 2P',\n 'Monoton',\n 'Creepster',\n 'Lobster',\n 'Orbitron',\n 'Righteous',\n 'Satisfy',\n 'Shadows Into Light',\n 'Permanent Marker',\n 'Fredoka One',\n 'Amatic SC',\n 'Cinzel',\n 'Great Vibes',\n 'Kaushan Script'\n ]);\n private readonly _layers = signal<LayerConfig[]>([]);\n readonly layers = this._layers.asReadonly();\n readonly selectedLayerId = signal<string | null>(null);\n\n private readonly _change$ = new Subject<void>();\n readonly change$ = this._change$.asObservable();\n\n private undoStack: any[] = [];\n private redoStack: any[] = [];\n readonly canUndo = signal(false);\n readonly canRedo = signal(false);\n historyLimit = 50;\n\n private transformer: Konva.Transformer | undefined;\n private selectionRect: Konva.Rect | undefined;\n private hoverRect: Konva.Rect | undefined;\n private hoveredShape: Konva.Shape | undefined;\n private selectionBordersGroup: Konva.Group | undefined;\n private selectionStartPos: { x: number, y: number } | undefined;\n private isSelecting = false;\n private isDragging = false;\n private wasSelectedBeforeClick = false;\n\n private snapLines: Konva.Line[] = [];\n\n private snapSettings = {\n showGuidelines: true,\n snapToShapes: true,\n snapToStageCenter: true,\n snapToStageBorders: true,\n guidelineColor: 'blue',\n snapRange: 5\n };\n\n private defaultFont = 'Inter';\n\n ngOnDestroy() {\n this.destroy();\n }\n\n async init(\n container: HTMLDivElement,\n imageSize: ImageSize,\n defaultFont = 'Inter',\n scale = 1,\n minScale = 0.1,\n maxScale = 5\n ) {\n if (!this.isBrowser) {\n console.log('ImageDesignerService.init skipped (not a browser)');\n return;\n }\n console.log('ImageDesignerService.init starting', { container, imageSize, defaultFont, scale, minScale, maxScale });\n console.log('Container dimensions:', container.offsetWidth, 'x', container.offsetHeight);\n\n this.defaultFont = defaultFont;\n this.minScale = minScale;\n this.maxScale = maxScale;\n this.setScale(scale);\n\n try {\n this.stage = new Konva.Stage({\n container: container,\n width: container.offsetWidth || imageSize.width + 100,\n height: container.offsetHeight || imageSize.height + 100,\n });\n console.log('Konva.Stage created');\n } catch (e) {\n console.error('Failed to create Konva.Stage:', e);\n return;\n }\n\n this.workspaceLayer = new Konva.Layer();\n this.stage.add(this.workspaceLayer);\n\n this.uiLayer = new Konva.Layer();\n this.stage.add(this.uiLayer);\n\n this.canvasRect = new Konva.Rect({\n x: (this.stage.width() || imageSize.width) / 2,\n y: (this.stage.height() || imageSize.height) / 2,\n width: imageSize.width,\n height: imageSize.height,\n fill: 'white',\n stroke: '#d9dcdf',\n strokeWidth: 1,\n name: 'canvasRect'\n });\n this.canvasRect.offsetX(imageSize.width / 2);\n this.canvasRect.offsetY(imageSize.height / 2);\n this.canvasRect.scaleX(this.scale());\n this.canvasRect.scaleY(this.scale());\n\n this.workspaceLayer.add(this.canvasRect);\n\n this.transformer = new Konva.Transformer({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'middle-left', 'middle-right'],\n name: 'transformer',\n // Ensure transformer is always above the mask\n boundBoxFunc: (oldBox, newBox) => {\n // Limit minimum size\n if (Math.abs(newBox.width) < 5 || Math.abs(newBox.height) < 5) {\n return oldBox;\n }\n return newBox;\n },\n });\n this.uiLayer.add(this.transformer);\n\n this.transformer.on('transform', () => {\n this.updateSelectionBorders();\n const nodes = this.transformer?.nodes() || [];\n\n nodes.forEach((node) => {\n if (node instanceof Konva.Text) {\n // If we resized vertically (scaleY changed), scale fontSize\n const scaleY = node.scaleY();\n if (Math.abs(scaleY - this.scale()) > 0.001) {\n node.fontSize(node.fontSize() * (scaleY / this.scale()));\n }\n\n // Scale width according to scaleX\n const scaleX = node.scaleX();\n node.width(node.width() * (scaleX / this.scale()));\n\n // Reset scale to current canvas scale\n node.scaleX(this.scale());\n node.scaleY(this.scale());\n\n // Update offset because width/fontSize changed\n node.offsetX(node.width() / 2);\n node.offsetY(node.height() / 2);\n }\n });\n\n if (nodes.length > 0) {\n const guides = this.getSnappingGuides(nodes);\n this.drawSnappingLines(guides);\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n }\n this.notifyChange();\n });\n\n this.transformer.on('dragmove', (e) => {\n const target = e.target;\n if (this.transformer && (target as any) === this.transformer) {\n const nodes = (this.transformer as Konva.Transformer).nodes();\n if (nodes.length > 0) {\n const targetBox = this.getNodesClientRect(nodes);\n const guides = this.getSnappingGuides(nodes);\n\n let dx = 0;\n let dy = 0;\n\n const vGuide = guides.vertical[0];\n const hGuide = guides.horizontal[0];\n\n if (vGuide) {\n dx = vGuide.guide - vGuide.offset - targetBox.x;\n }\n\n if (hGuide) {\n dy = hGuide.guide - hGuide.offset - targetBox.y;\n }\n\n if (dx !== 0 || dy !== 0) {\n nodes.forEach((node: Konva.Node) => {\n const p = node.getAbsolutePosition();\n node.setAbsolutePosition({\n x: p.x + dx,\n y: p.y + dy\n });\n });\n }\n\n const finalGuides = this.getSnappingGuides(nodes);\n this.drawSnappingLines(finalGuides);\n this.updateSelectionBorders();\n }\n }\n });\n\n this.transformer.on('dragend', () => {\n this.clearSnapLines();\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 0) {\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n }\n this.notifyChange();\n });\n\n this.transformer.on('transformend', () => {\n this.clearSnapLines();\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 0) {\n nodes.forEach(node => {\n if (!(node instanceof Konva.Text)) {\n const scaleX = node.scaleX();\n const scaleY = node.scaleY();\n node.width(node.width() * (scaleX / this.scale()));\n node.height(node.height() * (scaleY / this.scale()));\n node.scaleX(this.scale());\n node.scaleY(this.scale());\n }\n\n // If the node has effects, we MUST re-cache it with the new size\n const id = node.id();\n const config = this._layers().find(l => l.id === id);\n if (config) {\n // Re-apply effects and re-cache\n this.applyEffectsToShape(node as Konva.Shape, config);\n }\n });\n // We update the signal AFTER applying effects to ensure consistency\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n }\n this.notifyChange();\n });\n\n this.selectionRect = new Konva.Rect({\n fill: 'rgba(0,0,255,0.1)',\n stroke: '#3b82f6',\n strokeWidth: 1,\n visible: false,\n name: 'selectionRect',\n zIndex: 1001\n });\n this.uiLayer.add(this.selectionRect);\n\n this.hoverRect = new Konva.Rect({\n stroke: '#3b82f6',\n strokeWidth: 1,\n listening: false,\n visible: false,\n name: 'hoverRect'\n });\n this.uiLayer.add(this.hoverRect);\n\n this.selectionBordersGroup = new Konva.Group({\n listening: false,\n name: 'selectionBordersGroup'\n });\n this.uiLayer.add(this.selectionBordersGroup);\n\n this.maskOverlay = new Konva.Shape({\n fill: 'rgba(255, 255, 255, 0.8)',\n listening: false,\n name: 'maskOverlay',\n zIndex: 1000,\n fillRule: 'evenodd',\n sceneFunc: (context, shape) => {\n const stage = shape.getStage();\n if (!stage || !this.canvasRect) return;\n\n const stageWidth = stage.width();\n const stageHeight = stage.height();\n\n const canvasX = this.canvasRect.x();\n const canvasY = this.canvasRect.y();\n const canvasWidth = this.canvasRect.width() * this.canvasRect.scaleX();\n const canvasHeight = this.canvasRect.height() * this.canvasRect.scaleY();\n\n context.beginPath();\n // Наружный прямоугольник (весь Stage)\n context.rect(0, 0, stageWidth, stageHeight);\n\n // Внутренний прямоугольник (canvasRect)\n // Since canvasRect has offset at its center, its top-left corner is at (x - width*scale/2, y - height*scale/2)\n // We draw it in counter-clockwise direction to create a hole\n context.rect(\n canvasX + canvasWidth / 2,\n canvasY - canvasHeight / 2,\n -canvasWidth,\n canvasHeight\n );\n\n context.closePath();\n context.fillShape(shape);\n }\n });\n this.uiLayer.add(this.maskOverlay);\n\n await this.loadAllFonts();\n\n this.updateSize(container, imageSize);\n\n // Add a small delay to ensure everything is settled and then center again\n setTimeout(() => {\n this.updateSize(container, imageSize);\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n }, 50);\n\n // Final draw to ensure everything is rendered\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n\n console.log('Konva Canvas Rect and layers added and drawn');\n\n this.setupResizeObserver(container, imageSize);\n this.setupSelectionListeners();\n this.isInitialized.set(true);\n this.undoStack = [this.getSnapshot()];\n this.updateHistorySignals();\n }\n\n private handleGlobalMouseUp = (e: MouseEvent | TouchEvent) => {\n if (!this.isSelecting) {\n return;\n }\n\n this.isSelecting = false;\n if (!this.selectionRect || !this.workspaceLayer || !this.transformer) return;\n\n if (!this.selectionRect.visible()) {\n // If no selection rect was drawn, but we were selecting,\n // it means it was a simple click that didn't move much.\n const pos = this.stage?.getPointerPosition();\n const shape = pos ? this.stage?.getIntersection(pos) as Konva.Shape : null;\n if (shape && shape.id()) {\n this.selectLayer(shape.id());\n } else {\n this.selectLayer(null);\n }\n return;\n }\n\n this.selectionRect.visible(false);\n\n const box = this.selectionRect.getClientRect();\n const shapes = this.workspaceLayer.find('.rect, .text, .image, .pattern').filter((shape) => {\n if (shape === this.canvasRect || shape === this.selectionRect || shape === this.transformer) {\n return false;\n }\n if (!shape.visible() || !shape.listening()) {\n return false;\n }\n const layer = this._layers().find(l => l.id === shape.id());\n if (layer?.locked) {\n return false;\n }\n return Konva.Util.haveIntersection(box, shape.getClientRect());\n });\n\n this.transformer.nodes(shapes);\n if (shapes.length === 1) {\n const shape = shapes[0] as Konva.Shape;\n const layer = this._layers().find(l => l.id === shape.id());\n this.updateTransformer(shape, !!layer?.locked);\n this.selectedLayerId.set(shape.id());\n } else if (shapes.length > 1) {\n // Multiple selection: show default anchors for all\n this.transformer.setAttrs({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'middle-left', 'middle-right'],\n });\n this.selectedLayerId.set(null); // Or some multi-select id\n }\n this.transformer.forceUpdate();\n this.updateSelectionBorders();\n\n this.workspaceLayer.batchDraw();\n };\n\n private handleGlobalMouseMove = (e: MouseEvent | TouchEvent) => {\n if (!this.isSelecting || !this.selectionRect || !this.selectionStartPos || !this.stage) {\n return;\n }\n\n const container = this.stage.container();\n const rect = container.getBoundingClientRect();\n\n let clientX, clientY;\n if ('touches' in e) {\n clientX = e.touches[0].clientX;\n clientY = e.touches[0].clientY;\n } else {\n clientX = e.clientX;\n clientY = e.clientY;\n }\n\n const pos = {\n x: clientX - rect.left,\n y: clientY - rect.top\n };\n\n const rectX = Math.min(pos.x, this.selectionStartPos.x);\n const rectY = Math.min(pos.y, this.selectionStartPos.y);\n const rectWidth = Math.abs(pos.x - this.selectionStartPos.x);\n const rectHeight = Math.abs(pos.y - this.selectionStartPos.y);\n\n if (!isNaN(rectX) && !isNaN(rectY) && !isNaN(rectWidth) && !isNaN(rectHeight)) {\n if (rectWidth > 5 || rectHeight > 5) {\n this.selectionRect.visible(true);\n }\n this.selectionRect.setAttrs({\n x: rectX,\n y: rectY,\n width: rectWidth,\n height: rectHeight,\n strokeWidth: 1,\n });\n this.selectionRect.moveToTop();\n }\n\n this.uiLayer?.moveToTop();\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n };\n\n private makeTextEditable(textNode: Konva.Text) {\n if (!this.stage) return;\n\n // Save original text and settings to restore if cancelled\n textNode.setAttr('originalText', textNode.text());\n textNode.setAttr('originalWidth', textNode.width());\n\n // Fix width to current width during editing to enable wrapping\n const initialWidth = textNode.width();\n textNode.width(initialWidth);\n\n // Hide text node but keep transformer visible\n textNode.opacity(0);\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n\n const stage = this.stage;\n const textPosition = textNode.getAbsolutePosition();\n const stageBox = stage.container().getBoundingClientRect();\n\n const areaPosition = {\n x: stageBox.left + textPosition.x,\n y: stageBox.top + textPosition.y,\n };\n\n // Create textarea\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n\n // Set styles\n textarea.value = textNode.text();\n textarea.style.position = 'absolute';\n textarea.style.top = areaPosition.y + 'px';\n textarea.style.left = areaPosition.x + 'px';\n textarea.style.width = (textNode.width() * textNode.getAbsoluteScale().x) + 'px';\n textarea.style.height = (textNode.height() * textNode.getAbsoluteScale().y + 10) + 'px';\n textarea.style.fontSize = (textNode.fontSize() * textNode.getAbsoluteScale().y) + 'px';\n textarea.style.border = 'none';\n textarea.style.padding = (textNode.padding() * textNode.getAbsoluteScale().x) + 'px';\n textarea.style.margin = '0px';\n textarea.style.overflow = 'hidden';\n textarea.style.background = 'none';\n textarea.style.outline = 'none';\n textarea.style.resize = 'none';\n textarea.style.lineHeight = textNode.lineHeight().toString();\n textarea.style.fontFamily = textNode.fontFamily();\n textarea.style.fontWeight = (textNode.getAttr('fontWeight') || textNode.fontStyle() || 'normal').toString();\n textarea.style.fontStyle = textNode.fontStyle()?.includes('italic') ? 'italic' : 'normal';\n textarea.style.transformOrigin = 'left top';\n textarea.style.textAlign = textNode.align();\n textarea.style.color = textNode.fill() as string;\n textarea.style.boxSizing = 'border-box';\n textarea.style.zIndex = '1000';\n\n const rotation = textNode.getAbsoluteRotation();\n let transform = '';\n if (rotation) {\n transform += 'rotateZ(' + rotation + 'deg)';\n }\n\n // Offset based on Konva's offset (textNode is centered by default in addLayer)\n const px = 0;\n // apply configuration\n // we need to skip transform for now as it's tricky with absolute positioning and offsets\n // But since we use absolutePosition which already accounts for many things, let's see.\n // If textNode has offset (centered), we need to adjust textarea position\n const offsetX = textNode.offsetX() * textNode.getAbsoluteScale().x;\n const offsetY = textNode.offsetY() * textNode.getAbsoluteScale().y;\n\n textarea.style.left = (areaPosition.x - offsetX) + 'px';\n textarea.style.top = (areaPosition.y - offsetY) + 'px';\n textarea.style.transform = transform;\n\n textarea.focus();\n\n let isFinished = false;\n const removeTextarea = () => {\n if (isFinished) return;\n isFinished = true;\n\n const originalText = textNode.getAttr('originalText');\n const originalWidth = textNode.getAttr('originalWidth');\n if (originalText !== undefined) {\n textNode.text(originalText);\n }\n if (originalWidth !== undefined) {\n textNode.width(originalWidth);\n }\n\n if (textarea.parentNode) {\n textarea.parentNode.removeChild(textarea);\n }\n window.removeEventListener('click', handleOutsideClick);\n textarea.removeEventListener('blur', handleBlur);\n textNode.opacity(1);\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n this.workspaceLayer?.batchDraw();\n };\n\n const updateText = () => {\n const newText = textarea.value;\n const originalText = textNode.getAttr('originalText');\n if (newText !== originalText) {\n const id = textNode.id();\n if (id) {\n // Keep the fixed width when updating the layer\n this.updateLayer(id, { text: newText, width: textNode.width() });\n } else {\n textNode.text(newText);\n textNode.offsetX(textNode.width() / 2);\n textNode.offsetY(textNode.height() / 2);\n this.workspaceLayer?.batchDraw();\n }\n // Restore transformer nodes after update if it was selected\n if (this.selectedLayerId() === textNode.id()) {\n this.transformer?.nodes([textNode]);\n }\n }\n // Clear originalText and originalWidth after update so removeTextarea doesn't restore it\n textNode.setAttr('originalText', undefined);\n textNode.setAttr('originalWidth', undefined);\n };\n\n const handleBlur = () => {\n updateText();\n removeTextarea();\n };\n\n textarea.addEventListener('blur', handleBlur);\n\n textarea.addEventListener('keydown', (e) => {\n // hide on enter\n // but don't hide on shift + enter\n if (e.keyCode === 13 && !e.shiftKey) {\n e.preventDefault();\n textarea.blur();\n }\n // on escape do not update\n if (e.keyCode === 27) {\n removeTextarea();\n }\n });\n\n textarea.addEventListener('input', () => {\n // update node text to update transformer\n textNode.text(textarea.value);\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n\n // re-calculate size\n // Width is fixed, only height should change\n textarea.style.height = 'auto';\n textarea.style.height = textarea.scrollHeight + 'px';\n });\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (e.target !== textarea) {\n // blur will handle the rest\n textarea.blur();\n }\n };\n\n // Use timeout to avoid immediate trigger from the same click that opened it\n setTimeout(() => {\n window.addEventListener('click', handleOutsideClick);\n });\n }\n\n private setupSelectionListeners() {\n if (!this.stage) return;\n\n if (this.isBrowser) {\n window.addEventListener('mouseup', this.handleGlobalMouseUp);\n window.addEventListener('touchend', this.handleGlobalMouseUp);\n window.addEventListener('mousemove', this.handleGlobalMouseMove);\n window.addEventListener('touchmove', this.handleGlobalMouseMove);\n }\n\n this.stage.on('mousedown touchstart', (e) => {\n // If right click - do nothing\n if (e.evt instanceof MouseEvent && e.evt.button === 2) {\n return;\n }\n\n // If click on transformer - do nothing\n const isTransformer = e.target.getParent()?.className === 'Transformer';\n if (isTransformer) {\n return;\n }\n\n // If click on empty area, canvasRect or a locked layer - start selection\n const shapeAtPointer = e.target as Konva.Shape;\n const layerConfig = this._layers().find(l => l.id === shapeAtPointer.id());\n const isLocked = !!layerConfig?.locked;\n\n if (e.target === this.stage || e.target === this.canvasRect || isLocked) {\n this.isSelecting = true;\n this.uiLayer?.moveToTop();\n const pos = this.stage?.getPointerPosition();\n if (pos) {\n this.selectionStartPos = { x: pos.x, y: pos.y };\n this.selectionRect?.visible(false);\n this.selectionRect?.width(0);\n this.selectionRect?.height(0);\n this.selectionRect?.moveToTop();\n }\n return;\n }\n\n // Find the clicked shape\n const shape = e.target as Konva.Shape;\n const id = shape.id();\n if (id) {\n const isShiftPressed = e.evt.shiftKey;\n const currentNodes = this.transformer?.nodes() || [];\n this.wasSelectedBeforeClick = currentNodes.includes(shape);\n\n if (isShiftPressed) {\n // Toggle selection\n if (currentNodes.includes(shape)) {\n const newNodes = currentNodes.filter(n => n !== shape);\n this.transformer?.nodes(newNodes);\n this.updateSelectionBorders();\n if (newNodes.length === 1 && newNodes[0].id()) {\n this.selectedLayerId.set(newNodes[0].id());\n } else if (newNodes.length === 0) {\n this.selectedLayerId.set(null);\n } else {\n this.selectedLayerId.set(null); // Multi-selection or none\n }\n } else {\n const newNodes = [...currentNodes, shape];\n this.transformer?.nodes(newNodes);\n this.updateSelectionBorders();\n if (newNodes.length === 1) {\n this.selectedLayerId.set(shape.id());\n } else {\n this.selectedLayerId.set(null); // Multi-selection\n }\n }\n } else {\n // Normal click\n // Only change selection on mousedown if the object is NOT already selected.\n // This allows moving the whole selection group.\n if (!currentNodes.includes(shape)) {\n this.selectLayer(id);\n }\n }\n } else {\n // Click on something without ID (like the canvas but not the canvasRect handler above)\n this.selectLayer(null);\n }\n });\n\n this.stage.on('click tap', (e) => {\n // If right click - do nothing\n if (e.evt instanceof MouseEvent && e.evt.button === 2) {\n return;\n }\n\n // If click on transformer - do nothing\n const isTransformer = e.target.getParent()?.className === 'Transformer';\n if (isTransformer) {\n return;\n }\n\n const shape = e.target as Konva.Shape;\n\n const currentNodesOnStage = this.transformer?.nodes() || [];\n if (this.wasSelectedBeforeClick && currentNodesOnStage.length === 1 && currentNodesOnStage[0] === shape && shape instanceof Konva.Text) {\n this.makeTextEditable(shape);\n return;\n }\n\n // If click on empty area or canvasRect - do nothing\n if (e.target === this.stage || e.target === this.canvasRect) {\n return;\n }\n\n const id = shape.id();\n if (!id) return;\n\n const isShiftPressed = e.evt.shiftKey;\n if (isShiftPressed) return; // Handled in mousedown\n\n const currentNodesOnClick = this.transformer?.nodes() || [];\n // If we clicked on an object that is part of a multi-selection,\n // and it was a simple click (not a drag), then select only this object.\n if (currentNodesOnClick.length > 1 && currentNodesOnClick.includes(shape)) {\n this.selectLayer(id);\n }\n });\n\n this.stage.on('mousemove touchmove', (e) => {\n // Logic moved to handleGlobalMouseMove\n });\n }\n\n selectLayer(id: string | null) {\n this.selectedLayerId.set(id);\n this.hideHover();\n\n if (!this.transformer || !this.workspaceLayer) return;\n\n if (!id) {\n this.transformer.nodes([]);\n } else {\n const shape = this.workspaceLayer.findOne('#' + id) as Konva.Shape;\n if (shape && shape.visible()) {\n const layer = this._layers().find(l => l.id === id);\n\n this.transformer.nodes([shape]);\n this.updateTransformer(shape, !!layer?.locked);\n } else {\n this.transformer.nodes([]);\n }\n }\n this.updateSelectionBorders();\n this.transformer.moveToTop();\n this.uiLayer?.moveToTop();\n this.workspaceLayer.batchDraw();\n this.uiLayer?.batchDraw();\n }\n\n private updateTransformer(shape: Konva.Shape, isLocked: boolean) {\n if (!this.transformer) return;\n\n if (isLocked) {\n this.transformer.setAttrs({\n rotateEnabled: false,\n enabledAnchors: [],\n });\n } else {\n if (shape instanceof Konva.Text) {\n this.transformer.setAttrs({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'middle-left', 'middle-right'],\n });\n } else {\n this.transformer.setAttrs({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'middle-left', 'middle-right'],\n });\n }\n }\n this.transformer.forceUpdate();\n }\n\n toggleLayerVisibility(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.workspaceLayer) return;\n\n const newVisible = layer.visible === false;\n this._layers.update(layers =>\n layers.map(l => l.id === id ? { ...l, visible: newVisible } : l)\n );\n\n const shape = this.workspaceLayer.findOne('#' + id);\n if (shape) {\n shape.visible(newVisible);\n if (!newVisible && this.selectedLayerId() === id) {\n this.selectLayer(null);\n }\n this.workspaceLayer.batchDraw();\n }\n }\n\n toggleLayerLock(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.workspaceLayer) return;\n\n const newLocked = !layer.locked;\n this._layers.update(layers =>\n layers.map(l => l.id === id ? { ...l, locked: newLocked } : l)\n );\n\n const shape = this.workspaceLayer.findOne('#' + id);\n if (shape) {\n shape.listening(true);\n shape.draggable(!newLocked);\n\n // Update transformer if the locked shape is currently selected\n if (this.selectedLayerId() === id) {\n this.updateTransformer(shape as Konva.Shape, newLocked);\n }\n\n this.workspaceLayer.batchDraw();\n }\n }\n\n async flipHorizontal(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer) return;\n const currentScaleX = layer['scaleX'] ?? 1;\n await this.updateLayer(id, { scaleX: currentScaleX * -1 });\n }\n\n async flipVertical(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer) return;\n const currentScaleY = layer['scaleY'] ?? 1;\n await this.updateLayer(id, { scaleY: currentScaleY * -1 });\n }\n\n async fitToPage(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.canvasRect) return;\n\n const canvasWidth = this.canvasRect.width();\n const canvasHeight = this.canvasRect.height();\n const canvasCenterX = this.canvasRect.x();\n const canvasCenterY = this.canvasRect.y();\n\n const shape = this.workspaceLayer?.findOne('#' + id);\n if (!shape) return;\n\n // Use actual shape dimensions if available, otherwise fallback to layer config\n const layerWidth = (shape instanceof Konva.Text) ? shape.width() : (layer.width || shape.width());\n const layerHeight = (shape instanceof Konva.Text) ? shape.height() : (layer.height || shape.height());\n\n if (layerWidth === 0 || layerHeight === 0) return;\n\n const scale = Math.min(canvasWidth / layerWidth, canvasHeight / layerHeight) * this.scale();\n\n await this.updateLayer(id, {\n x: canvasCenterX,\n y: canvasCenterY,\n width: layerWidth,\n height: layerHeight,\n scaleX: scale,\n scaleY: scale,\n rotation: 0\n });\n }\n\n async fillPage(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.canvasRect) return;\n\n const canvasWidth = this.canvasRect.width();\n const canvasHeight = this.canvasRect.height();\n const canvasCenterX = this.canvasRect.x();\n const canvasCenterY = this.canvasRect.y();\n\n const shape = this.workspaceLayer?.findOne('#' + id);\n if (!shape) return;\n\n // Use actual shape dimensions if available, otherwise fallback to layer config\n const layerWidth = (shape instanceof Konva.Text) ? shape.width() : (layer.width || shape.width());\n const layerHeight = (shape instanceof Konva.Text) ? shape.height() : (layer.height || shape.height());\n\n if (layerWidth === 0 || layerHeight === 0) return;\n\n const scale = Math.max(canvasWidth / layerWidth, canvasHeight / layerHeight) * this.scale();\n\n await this.updateLayer(id, {\n x: canvasCenterX,\n y: canvasCenterY,\n width: layerWidth,\n height: layerHeight,\n scaleX: scale,\n scaleY: scale,\n rotation: 0\n });\n }\n\n deleteLayer(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.workspaceLayer || layer.locked) return;\n\n this.hideHover();\n\n // Remove from signal\n this._layers.update(layers => layers.filter(l => l.id !== id));\n this.notifyChange();\n\n // Remove from Konva\n const shape = this.workspaceLayer.findOne('#' + id);\n if (shape) {\n if (this.transformer) {\n const nodes = this.transformer.nodes();\n if (nodes.includes(shape as Konva.Shape)) {\n this.transformer.nodes(nodes.filter(n => n !== shape));\n }\n }\n shape.destroy();\n if (this.selectedLayerId() === id) {\n this.selectLayer(null);\n } else {\n this.updateSelectionBorders();\n }\n this.workspaceLayer.batchDraw();\n }\n }\n\n deleteSelectedLayers() {\n if (!this.transformer || !this.workspaceLayer) return;\n\n const nodes = this.transformer.nodes();\n if (nodes.length === 0) return;\n\n this.hideHover();\n\n const idsToDelete = nodes.map(node => node.id()).filter((id): id is string => {\n const layer = this._layers().find(l => l.id === id);\n return !!id && !!layer && !layer.locked;\n });\n\n if (idsToDelete.length === 0) return;\n\n // Remove from signal\n this._layers.update(layers => layers.filter(l => !l.id || !idsToDelete.includes(l.id)));\n this.notifyChange();\n\n // Remove from Konva\n idsToDelete.forEach(id => {\n const shape = this.workspaceLayer?.findOne('#' + id);\n if (shape) {\n shape.destroy();\n }\n });\n\n this.transformer.nodes([]);\n this.selectLayer(null);\n this.workspaceLayer.batchDraw();\n }\n\n moveSelectedLayers(dx: number, dy: number) {\n if (!this.transformer || !this.workspaceLayer) return;\n\n const nodes = this.transformer.nodes();\n if (nodes.length === 0) return;\n\n let moved = false;\n nodes.forEach(node => {\n const id = node.id();\n const layer = this._layers().find(l => l.id === id);\n if (layer && !layer.locked) {\n node.x(node.x() + dx);\n node.y(node.y() + dy);\n moved = true;\n }\n });\n\n if (moved) {\n this.updateSelectionBorders();\n this.workspaceLayer.batchDraw();\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n this.notifyChange();\n }\n }\n\n private showHover(shape: Konva.Shape) {\n if (!this.hoverRect || !this.workspaceLayer) return;\n\n this.hoveredShape = shape;\n const box = shape.getClientRect({ relativeTo: this.workspaceLayer });\n this.hoverRect.setAttrs({\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n strokeWidth: 1,\n visible: true\n });\n this.hoverRect.moveToTop();\n this.workspaceLayer.batchDraw();\n }\n\n private hideHover() {\n this.hoveredShape = undefined;\n if (!this.hoverRect) return;\n this.hoverRect.visible(false);\n this.workspaceLayer?.batchDraw();\n }\n\n private updateSelectionBorders() {\n if (!this.selectionBordersGroup || !this.transformer || !this.workspaceLayer) return;\n\n this.selectionBordersGroup.destroyChildren();\n const nodes = this.transformer.nodes();\n\n if (nodes.length > 1) {\n nodes.forEach(node => {\n const box = node.getClientRect({ relativeTo: this.workspaceLayer });\n const rect = new Konva.Rect({\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n stroke: '#3b82f6',\n strokeWidth: 1,\n listening: false,\n name: 'selectionBorder'\n });\n this.selectionBordersGroup?.add(rect);\n });\n this.selectionBordersGroup.visible(true);\n } else {\n this.selectionBordersGroup.visible(false);\n }\n this.selectionBordersGroup.moveToTop();\n this.uiLayer?.batchDraw();\n }\n\n async addLayer(config: LayerConfig, updateList = true): Promise<string | undefined> {\n if (!this.workspaceLayer || !this.canvasRect) return undefined;\n\n if (config.type === 'text' && config['fontFamily']) {\n await this.loadFont(config['fontFamily']);\n } else if (config.type === 'text' && !config['fontFamily']) {\n await this.loadFont(this.defaultFont);\n }\n\n if (updateList) {\n const newConfig = { ...config, id: config.id || Math.random().toString(36).substr(2, 9) };\n // New layer should be at the top of the UI list (index 0)\n this._layers.update(layers => [newConfig, ...layers]);\n config = newConfig;\n if (!this.isSnapshotLoading) {\n this.notifyChange();\n }\n }\n\n let shape: Konva.Shape | undefined;\n\n const canvasWidth = this.canvasRect?.width() || 0;\n const canvasHeight = this.canvasRect?.height() || 0;\n const canvasX = this.canvasRect?.x() || 0;\n const canvasY = this.canvasRect?.y() || 0;\n\n // x and y are relative to canvas center\n const x = (config.x ?? 0) * this.scale() + canvasX;\n const y = (config.y ?? 0) * this.scale() + canvasY;\n\n if (isNaN(x) || isNaN(y)) {\n console.warn('ImageDesignerService.addLayer: Calculated layer position is NaN', { x, y, config, canvasWidth, canvasHeight, canvasX, canvasY, scale: this.scale() });\n return undefined;\n }\n\n if (config.type === 'text') {\n const fontSize = config['fontSize'] || 18;\n const padding = 10;\n shape = new Konva.Text({\n id: config.id,\n name: 'text',\n x,\n y,\n text: config['text'] || 'New Text',\n fontSize,\n fontFamily: config['fontFamily'] || this.defaultFont,\n fontStyle: config['fontWeight'] ? `${config['fontWeight']}` : 'normal',\n fill: config['fill'] || '#000000',\n opacity: config['opacity'] ?? 1,\n align: config['align'] || 'left',\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n padding: padding,\n wrap: 'word',\n width: config.width || undefined,\n });\n if (config['fontWeight']) {\n shape.setAttr('fontWeight', config['fontWeight']);\n }\n\n // If width is not provided, let's set a default width for headings to enable wrapping/resizing properly\n if (!config.width) {\n // Measure text width and add extra horizontal padding\n const textWidth = shape.width() + 55;\n shape.width(textWidth);\n }\n\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n this.applyEffectsToShape(shape, config);\n } else if (config.type === 'image') {\n const imageObj = new Image();\n imageObj.crossOrigin = 'anonymous';\n imageObj.onload = () => {\n if (shape) {\n (shape as Konva.Image).image(imageObj);\n if (!config.width || !config.height) {\n shape.width(imageObj.width);\n shape.height(imageObj.height);\n }\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n\n if (this.transformer?.nodes().includes(shape)) {\n this.transformer.forceUpdate();\n }\n\n this.applyEffectsToShape(shape, config);\n this.workspaceLayer?.batchDraw();\n }\n };\n imageObj.src = config['src'] || '';\n\n shape = new Konva.Image({\n id: config.id,\n name: 'image',\n x,\n y,\n width: config.width || 0,\n height: config.height || 0,\n image: undefined,\n opacity: config['opacity'] ?? 1,\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n });\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n } else if (config.type === 'shape') {\n const imageObj = new Image();\n imageObj.onload = () => {\n if (shape) {\n (shape as Konva.Image).image(imageObj);\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n\n if (this.transformer?.nodes().includes(shape)) {\n this.transformer.forceUpdate();\n }\n\n this.applyEffectsToShape(shape, config);\n this.workspaceLayer?.batchDraw();\n }\n };\n imageObj.src = config['data'] || '';\n\n shape = new Konva.Image({\n id: config.id,\n name: 'rect',\n x,\n y,\n width: config.width || 100,\n height: config.height || 100,\n image: undefined,\n opacity: config['opacity'] ?? 1,\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n });\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n } else if (config.type === 'pattern') {\n const patternImageObj = new Image();\n patternImageObj.onload = () => {\n if (shape) {\n const rect = shape as Konva.Rect;\n rect.fillPatternImage(patternImageObj);\n\n // If original pattern is too big, scale it down.\n // Or just provide a default scale for better look.\n const patternScale = 0.5; // Fixed pattern scale for better look or based on config\n rect.fillPatternScale({ x: patternScale, y: patternScale });\n\n this.workspaceLayer?.batchDraw();\n }\n };\n patternImageObj.src = typeof config.patternImage === 'string' ? config.patternImage : (config.patternImage?.src || '');\n\n shape = new Konva.Rect({\n id: config.id,\n name: 'pattern',\n x,\n y,\n width: config.width || canvasWidth,\n height: config.height || canvasHeight,\n opacity: config['opacity'] ?? 1,\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n fillPatternRepeat: 'repeat',\n });\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n\n // Ensure pattern stays centered even if shape size changes\n // Konva's fillPatternOffset is in local coordinates of the shape (after scale/offset?)\n // Actually it's simpler: if we want it centered, we just need to keep it consistent.\n }\n\n if (shape) {\n if (config.id) {\n shape.id(config.id);\n }\n this.workspaceLayer.add(shape);\n\n // Select the new layer automatically\n if (updateList && config.id) {\n this.selectLayer(config.id);\n }\n\n // Update Konva Z-index based on the array order\n if (updateList) {\n this.reorderLayers(0, 0); // This will refresh all Z-indices based on the current _layers()\n }\n this.workspaceLayer.batchDraw();\n\n shape.on('mouseenter', () => {\n if (this.isDragging || this.isSelecting || !this.hoverRect) return;\n\n // Don't show hover for already selected shapes\n const selectedNodes = this.transformer?.nodes() || [];\n if (selectedNodes.includes(shape!)) return;\n\n this.showHover(shape!);\n });\n\n shape.on('mouseleave', () => {\n this.hideHover();\n });\n\n shape.dragBoundFunc((pos) => {\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 1 && nodes.includes(shape!)) {\n return pos;\n }\n\n const guides = this.getSnappingGuides(shape!, pos);\n let x = pos.x;\n let y = pos.y;\n\n if (guides.vertical.length > 0) {\n const vGuide = guides.vertical[0];\n x = vGuide.guide - vGuide.offset + shape!.offsetX() * shape!.scaleX();\n }\n\n if (guides.horizontal.length > 0) {\n const hGuide = guides.horizontal[0];\n y = hGuide.guide - hGuide.offset + shape!.offsetY() * shape!.scaleY();\n }\n\n return { x, y };\n });\n\n shape.on('dragstart', () => {\n this.isDragging = true;\n this.hideHover();\n });\n\n shape.on('dragmove', (e) => {\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 1 && nodes.includes(shape!)) {\n // If part of group, let transformer.on('dragmove') handle it\n return;\n }\n\n if (nodes.includes(shape!) && nodes.length > 1) {\n nodes.forEach(node => {\n this.updateShapeOriginalPosition(node as Konva.Shape, false);\n });\n } else {\n this.updateShapeOriginalPosition(shape!, false);\n }\n\n const absPos = shape!.getAbsolutePosition();\n const guides = this.getSnappingGuides(shape!, absPos);\n this.drawSnappingLines(guides);\n });\n\n shape.on('dragend', () => {\n this.isDragging = false;\n this.clearSnapLines();\n const nodes = this.transformer?.nodes() || [];\n if (nodes.includes(shape!) && nodes.length > 1) {\n // Batch update signal for all nodes in the group\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n } else {\n // Single shape drag - update signal\n this.updateShapeOriginalPosition(shape!);\n }\n this.notifyChange();\n });\n\n shape.on('transform', () => {\n if (shape!.name() === 'pattern') {\n const rect = shape as Konva.Rect;\n const scaleX = rect.scaleX();\n const scaleY = rect.scaleY();\n rect.width(rect.width() * (scaleX / this.scale()));\n rect.height(rect.height() * (scaleY / this.scale()));\n rect.scaleX(this.scale());\n rect.scaleY(this.scale());\n rect.offsetX(rect.width() / 2);\n rect.offsetY(rect.height() / 2);\n }\n\n const absPos = shape!.getAbsolutePosition();\n const guides = this.getSnappingGuides(shape!, absPos);\n this.drawSnappingLines(guides);\n\n this.updateShapeOriginalPosition(shape!);\n });\n\n shape.on('transformend', () => {\n this.clearSnapLines();\n if (!(shape instanceof Konva.Text)) {\n const scaleX = shape!.scaleX();\n const scaleY = shape!.scaleY();\n shape!.width(shape!.width() * (scaleX / this.scale()));\n shape!.height(shape!.height() * (scaleY / this.scale()));\n shape!.scaleX(this.scale());\n shape!.scaleY(this.scale());\n shape!.offsetX(shape!.width() / 2);\n shape!.offsetY(shape!.height() / 2);\n }\n this.updateShapeOriginalPosition(shape!);\n this.notifyChange();\n });\n\n shape.setAttr('originalX', config.x ?? 0);\n shape.setAttr('originalY', config.y ?? 0);\n\n // Ensure UI layer and its elements are on top\n this.uiLayer?.moveToTop();\n this.maskOverlay?.moveToTop();\n this.transformer?.moveToTop();\n this.hoverRect?.moveToTop();\n }\n\n return config.id;\n }\n\n private updateShapeOriginalPosition(shape: Konva.Shape, updateSignal = true) {\n if (!this.canvasRect) return;\n\n const scale = this.scale();\n const originalX = (shape.x() - this.canvasRect.x()) / scale;\n const originalY = (shape.y() - this.canvasRect.y()) / scale;\n const originalScaleX = shape.scaleX() / scale;\n const originalScaleY = shape.scaleY() / scale;\n\n shape.setAttr('originalX', originalX);\n shape.setAttr('originalY', originalY);\n shape.setAttr('originalScaleX', originalScaleX);\n shape.setAttr('originalScaleY', originalScaleY);\n\n if (updateSignal) {\n // Update the signal\n const id = shape.id();\n this._layers.update(layers =>\n layers.map(l => l.id === id ? {\n ...l,\n x: originalX,\n y: originalY,\n width: shape.width(),\n height: shape.height(),\n scaleX: originalScaleX,\n scaleY: originalScaleY,\n rotation: shape.rotation()\n } : l)\n );\n }\n }\n\n private updateShapesOriginalPositions(shapes: Konva.Shape[]) {\n if (!this.canvasRect) return;\n\n const scale = this.scale();\n const updates = new Map<string, any>();\n\n shapes.forEach(shape => {\n const originalX = (shape.x() - this.canvasRect!.x()) / scale;\n const originalY = (shape.y() - this.canvasRect!.y()) / scale;\n const originalScaleX = shape.scaleX() / scale;\n const originalScaleY = shape.scaleY() / scale;\n\n shape.setAttr('originalX', originalX);\n shape.setAttr('originalY', originalY);\n shape.setAttr('originalScaleX', originalScaleX);\n shape.setAttr('originalScaleY', originalScaleY);\n\n updates.set(shape.id(), {\n x: originalX,\n y: originalY,\n width: shape.width(),\n height: shape.height(),\n scaleX: originalScaleX,\n scaleY: originalScaleY,\n rotation: shape.rotation()\n });\n });\n\n // Update the signal once for all shapes\n this._layers.update(layers =>\n layers.map(l => {\n const update = updates.get(l.id!);\n return update ? { ...l, ...update } : l;\n })\n );\n }\n\n private getNodesClientRect(nodes: Konva.Node[]) {\n if (nodes.length === 0) return { x: 0, y: 0, width: 0, height: 0 };\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n nodes.forEach(node => {\n const box = node.getClientRect();\n minX = Math.min(minX, box.x);\n minY = Math.min(minY, box.y);\n maxX = Math.max(maxX, box.x + box.width);\n maxY = Math.max(maxY, box.y + box.height);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n\n private getSnappingGuides(targetNode: Konva.Node | Konva.Node[], pos?: { x: number, y: number }) {\n if (!this.canvasRect || !this.workspaceLayer) return { vertical: [], horizontal: [] };\n\n const nodes = Array.isArray(targetNode) ? targetNode : [targetNode];\n const isGroup = nodes.length > 1;\n\n const snapRange = this.snapSettings.snapRange;\n const resultV: any[] = [];\n const resultH: any[] = [];\n\n // Bases for snapping\n const basesV: number[] = [];\n const basesH: number[] = [];\n\n // 1. Stage centers and borders\n if (this.snapSettings.snapToStageCenter || this.snapSettings.snapToStageBorders) {\n const cw = this.canvasRect.width() * this.scale();\n const ch = this.canvasRect.height() * this.scale();\n const cx = this.canvasRect.x();\n const cy = this.canvasRect.y();\n\n if (this.snapSettings.snapToStageBorders) {\n basesV.push(cx); // Left\n basesV.push(cx + cw); // Right\n basesH.push(cy); // Top\n basesH.push(cy + ch); // Bottom\n }\n\n if (this.snapSettings.snapToStageCenter) {\n basesV.push(cx + cw / 2); // Center V\n basesH.push(cy + ch / 2); // Center H\n }\n }\n\n // 2. Other shapes\n if (this.snapSettings.snapToShapes) {\n const selectedNodes = this.transformer?.nodes() || [];\n this.workspaceLayer.getChildren().forEach((child) => {\n if (nodes.includes(child) || child === this.canvasRect || child.name() === 'selection-rect' || (selectedNodes.length > 0 && selectedNodes.includes(child))) return;\n\n const box = child.getClientRect();\n basesV.push(box.x);\n basesV.push(box.x + box.width / 2);\n basesV.push(box.x + box.width);\n basesH.push(box.y);\n basesH.push(box.y + box.height / 2);\n basesH.push(box.y + box.height);\n });\n }\n\n const targetBox = isGroup ? this.getNodesClientRect(nodes) : nodes[0].getClientRect();\n\n // If pos is provided (from dragBoundFunc for single node), we use it.\n // For group drag via transformer, we don't use pos here because we apply delta later.\n let targetX = targetBox.x;\n let targetY = targetBox.y;\n\n if (!isGroup && pos) {\n targetX = pos.x - nodes[0].offsetX() * nodes[0].scaleX();\n targetY = pos.y - nodes[0].offsetY() * nodes[0].scaleY();\n }\n\n const targetWidth = targetBox.width;\n const targetHeight = targetBox.height;\n\n basesV.forEach((base) => {\n const vSnaps = [\n { guide: base, offset: 0, diff: Math.abs(base - targetX) },\n { guide: base, offset: targetWidth / 2, diff: Math.abs(base - (targetX + targetWidth / 2)) },\n { guide: base, offset: targetWidth, diff: Math.abs(base - (targetX + targetWidth)) }\n ];\n\n vSnaps.forEach(s => {\n if (s.diff < snapRange) {\n resultV.push(s);\n }\n });\n });\n\n basesH.forEach((base) => {\n const hSnaps = [\n { guide: base, offset: 0, diff: Math.abs(base - targetY) },\n { guide: base, offset: targetHeight / 2, diff: Math.abs(base - (targetY + targetHeight / 2)) },\n { guide: base, offset: targetHeight, diff: Math.abs(base - (targetY + targetHeight)) }\n ];\n\n hSnaps.forEach(s => {\n if (s.diff < snapRange) {\n resultH.push(s);\n }\n });\n });\n\n return {\n vertical: resultV.sort((a, b) => a.diff - b.diff),\n horizontal: resultH.sort((a, b) => a.diff - b.diff)\n };\n }\n\n private drawSnappingLines(guides: { vertical: any[], horizontal: any[] }) {\n this.clearSnapLines();\n if (!this.uiLayer || !this.snapSettings.showGuidelines) return;\n\n const vGuide = guides.vertical[0];\n const hGuide = guides.horizontal[0];\n\n if (vGuide) {\n const line = new Konva.Line({\n points: [vGuide.guide, 0, vGuide.guide, this.stage!.height()],\n stroke: this.snapSettings.guidelineColor,\n strokeWidth: 1,\n dash: [4, 6],\n name: 'snap-line'\n });\n this.uiLayer.add(line);\n this.snapLines.push(line);\n }\n\n if (hGuide) {\n const line = new Konva.Line({\n points: [0, hGuide.guide, this.stage!.width(), hGuide.guide],\n stroke: this.snapSettings.guidelineColor,\n strokeWidth: 1,\n dash: [4, 6],\n name: 'snap-line'\n });\n this.uiLayer.add(line);\n this.snapLines.push(line);\n }\n\n this.uiLayer.batchDraw();\n }\n\n private clearSnapLines() {\n this.snapLines.forEach(l => l.destroy());\n this.snapLines = [];\n this.uiLayer?.batchDraw();\n }\n\n private consecutiveUpdatesCount = 0;\n private lastUpdateSizeTime = 0;\n private lastUpdateSizeDimensions = { width: 0, height: 0 };\n private isSnapshotLoading = false;\n\n private setupResizeObserver(container: HTMLDivElement, imageSize: ImageSize) {\n this.resizeObserver = new ResizeObserver(() => {\n // Use requestAnimationFrame to avoid \"ResizeObserver loop completed with undelivered notifications\" error\n // This ensures that the size update happens in the next frame after the layout has settled.\n requestAnimationFrame(() => {\n if (this.stage) {\n this.updateSize(container, imageSize);\n }\n });\n });\n this.resizeObserver.observe(container);\n }\n\n updateSize(container: HTMLDivElement, imageSize: ImageSize, fitToContainer = false, notify = false) {\n if (!this.stage || !this.canvasRect || !this.workspaceLayer || !this.uiLayer) {\n return;\n }\n\n const now = Date.now();\n if (this.lastUpdateSizeTime && now - this.lastUpdateSizeTime < 50) {\n this.consecutiveUpdatesCount++;\n if (this.consecutiveUpdatesCount > 100) {\n console.warn('ImageDesignerService.updateSize: Potential infinite loop detected, aborting');\n return;\n }\n } else {\n this.consecutiveUpdatesCount = 0;\n }\n this.lastUpdateSizeTime = now;\n this.lastUpdateSizeDimensions = { width: imageSize.width, height: imageSize.height };\n\n const width = Math.round(container.offsetWidth || imageSize.width || 800);\n const height = Math.round(container.offsetHeight || imageSize.height || 600);\n\n console.log('ImageDesignerService.updateSize dimensions:', width, 'x', height);\n\n // Skip if size is effectively 0 to avoid incorrect centering\n if (width === 0 || height === 0) {\n console.warn('ImageDesignerService.updateSize: dimensions are 0, skipping');\n return;\n }\n\n if (fitToContainer) {\n const padding = 40;\n const availableWidth = width - padding * 2;\n const availableHeight = height - padding * 2;\n\n const scaleX = availableWidth / (imageSize.width || 1);\n const scaleY = availableHeight / (imageSize.height || 1);\n\n const newScale = Math.min(scaleX, scaleY);\n const clampedScale = Math.min(Math.max(newScale, this.minScale), this.maxScale);\n\n this.scale.set(clampedScale);\n }\n\n // Skip if size hasn't changed to avoid unnecessary re-draws and potential loops (unless scale is being updated)\n // Use a small epsilon to avoid loops due to sub-pixel changes\n const sizeChanged = Math.abs(this.stage.width() - width) > 0.5 || Math.abs(this.stage.height() - height) > 0.5;\n const canvasSizeChanged = Math.abs(this.canvasRect.width() - imageSize.width) > 0.5 || Math.abs(this.canvasRect.height() - imageSize.height) > 0.5;\n const scaleChanged = Math.abs(this.canvasRect.scaleX() - this.scale()) > 0.001;\n\n if (!sizeChanged && !scaleChanged && !canvasSizeChanged) {\n return;\n }\n\n if (isNaN(width) || isNaN(height)) {\n console.warn('ImageDesignerService.updateSize: width or height is NaN', { width, height, container, imageSize });\n return;\n }\n\n console.log('Updating stage size to:', width, 'x', height);\n this.stage.width(width);\n this.stage.height(height);\n\n const canvasWidth = imageSize.width || 0;\n const canvasHeight = imageSize.height || 0;\n\n console.log('Setting canvasRect size to:', canvasWidth, 'x', canvasHeight);\n this.canvasRect.width(canvasWidth);\n this.canvasRect.height(canvasHeight);\n this.canvasRect.offsetX(canvasWidth / 2);\n this.canvasRect.offsetY(canvasHeight / 2);\n\n const canvasX = width / 2;\n const canvasY = height / 2;\n\n if (!isNaN(canvasX) && !isNaN(canvasY)) {\n console.log('Centering canvasRect at:', canvasX, canvasY);\n this.canvasRect.x(canvasX);\n this.canvasRect.y(canvasY);\n this.canvasRect.scaleX(this.scale());\n this.canvasRect.scaleY(this.scale());\n\n // Update positions of all elements in workspaceLayer relative to new canvas position\n this.workspaceLayer.getChildren().forEach(child => {\n if (child !== this.canvasRect && child.name() !== 'transformer') {\n const originalX = (child.attrs['originalX'] as number) ?? 0;\n const originalY = (child.attrs['originalY'] as number) ?? 0;\n child.x(originalX * this.scale() + canvasX);\n child.y(originalY * this.scale() + canvasY);\n\n // Use the original scale for layers that have one (like flipped ones)\n const originalScaleX = (child.attrs['originalScaleX'] as number) ?? 1;\n const originalScaleY = (child.attrs['originalScaleY'] as number) ?? 1;\n child.scaleX(this.scale() * originalScaleX);\n child.scaleY(this.scale() * originalScaleY);\n }\n });\n this.selectionRect?.visible(false); // Hide selection rect on resize as its coordinates are now invalid\n this.uiLayer.moveToTop(); // Ensure UI layer is always on top of workspace layer\n this.maskOverlay?.moveToTop(); // Mask on top of everything for clipping effect\n this.transformer?.moveToTop();\n this.hoverRect?.moveToTop();\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n\n if (this.hoveredShape && this.hoverRect?.visible()) {\n this.showHover(this.hoveredShape);\n }\n } else {\n console.warn('ImageDesignerService.updateSize: Calculated canvas positions are NaN', { canvasX, canvasY, width, height, canvasWidth, scale: this.scale() });\n }\n\n this.uiLayer?.batchDraw();\n this.workspaceLayer?.batchDraw();\n\n if (notify) {\n this.notifyChange();\n }\n }\n\n setScale(scale: number) {\n const clampedScale = Math.min(Math.max(scale, this.minScale), this.maxScale);\n\n if (!this.isBrowser) {\n this.scale.set(clampedScale);\n return;\n }\n\n this.scale.set(clampedScale);\n\n if (this.stage && this.canvasRect && this.workspaceLayer && this.uiLayer) {\n const container = this.stage.container() as HTMLDivElement;\n const imageSize = {\n width: this.canvasRect.width(),\n height: this.canvasRect.height()\n };\n\n // Update canvas positions and scales based on new scale\n this.updateSize(container, imageSize);\n\n this.transformer?.forceUpdate();\n this.uiLayer.batchDraw();\n this.workspaceLayer.batchDraw();\n }\n }\n\n zoomIn() {\n this.setScale(this.scale() + 0.1);\n }\n\n zoomOut() {\n this.setScale(this.scale() - 0.1);\n }\n\n setMinMaxScale(minScale: number, maxScale: number) {\n this.minScale = minScale;\n this.maxScale = maxScale;\n this.setScale(this.scale());\n }\n\n updateSnapSettings(settings: Partial<typeof this.snapSettings>) {\n this.snapSettings = { ...this.snapSettings, ...settings };\n }\n\n setCanvasBackground(config: GradientConfig | string, notify = true) {\n if (!this.canvasRect) return;\n\n if (typeof config === 'string') {\n this.canvasRect.fill(config);\n this.canvasRect.fillLinearGradientStartPoint(null as any);\n this.canvasRect.fillLinearGradientEndPoint(null as any);\n this.canvasRect.fillLinearGradientColorStops([]);\n } else {\n this.canvasRect.fill(null as any);\n this.canvasRect.fillLinearGradientStartPoint({ x: config.x0 || 0, y: config.y0 || 0 });\n this.canvasRect.fillLinearGradientEndPoint({ x: config.x1 || 0, y: config.y1 || 0 });\n this.canvasRect.fillLinearGradientColorStops(config.colorStops);\n }\n this.workspaceLayer?.batchDraw();\n if (notify) {\n this.notifyChange();\n }\n }\n\n reorderLayers(previousIndex: number, currentIndex: number) {\n if (!this.workspaceLayer || previousIndex === currentIndex) return;\n\n let updatedLayers: LayerConfig[] = [];\n this._layers.update(layers => {\n const newLayers = [...layers];\n moveItemInArray(newLayers, previousIndex, currentIndex);\n\n // Update Konva nodes Z-index based on the new array order.\n // Array: [Top, ..., Bottom]\n // Konva: [Bottom, ..., Top]\n // So we need to reverse the array when applying to Konva Z-indices.\n\n const reversedLayers = [...newLayers].reverse();\n reversedLayers.forEach((layer, index) => {\n const shape = this.workspaceLayer?.findOne('#' + layer.id);\n if (shape) {\n // Layers start from zIndex 1 because canvasRect is at 0\n shape.zIndex(index + 1);\n }\n });\n\n // Ensure canvasRect is at the bottom\n this.canvasRect?.zIndex(0);\n\n // Ensure transformer, selectionRect and hoverRect are always on top\n this.uiLayer?.moveToTop();\n this.maskOverlay?.moveToTop();\n this.transformer?.moveToTop();\n this.selectionRect?.moveToTop();\n this.hoverRect?.moveToTop();\n\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n updatedLayers = newLayers;\n return newLayers;\n });\n\n if (updatedLayers.length > 0) {\n this.notifyChange();\n }\n }\n\n currentSnapshotVersion = 0;\n\n getSnapshot(): ImageDesignerSnapshot {\n return {\n version: this.currentSnapshotVersion,\n imageSize: {\n width: this.canvasRect?.width() || 0,\n height: this.canvasRect?.height() || 0\n },\n layers: this._layers().map(layer => {\n // Ensure that any temporary 'selected' property is not included in the snapshot\n const { selected, ...rest } = layer;\n return rest;\n }),\n background: this.canvasRect?.fill() || 'white',\n backgroundConfig: this.canvasRect?.fillLinearGradientColorStops()?.length ? {\n x0: this.canvasRect.fillLinearGradientStartPoint().x,\n y0: this.canvasRect.fillLinearGradientStartPoint().y,\n x1: this.canvasRect.fillLinearGradientEndPoint().x,\n y1: this.canvasRect.fillLinearGradientEndPoint().y,\n colorStops: this.canvasRect.fillLinearGradientColorStops()\n } : undefined\n };\n }\n\n async loadSnapshot(snapshot: ImageDesignerSnapshot, resetHistory = false) {\n if (!this.stage || !this.workspaceLayer || !this.canvasRect) {\n console.warn('loadSnapshot called but service is not fully initialized');\n return;\n }\n\n if (this.isSnapshotLoading) {\n console.log('loadSnapshot ignored - already loading');\n return;\n }\n\n this.isSnapshotLoading = true;\n try {\n console.log('loadSnapshot starting', snapshot);\n\n this.currentSnapshotVersion = snapshot.version ?? 0;\n // Clear current state\n this.selectedLayerId.set(null);\n this.transformer?.nodes([]);\n\n // Remove all shapes from workspace except canvasRect\n // Critical: iterate over a copy of the children array, as destroy() modifies it\n const children = [...this.workspaceLayer.getChildren()];\n children.forEach((child: any) => {\n if (child !== this.canvasRect) {\n child.destroy();\n }\n });\n\n const { imageSize, layers, background, backgroundConfig } = snapshot;\n\n // Update size BEFORE adding layers so that addLayer uses correct canvas position and scale\n this.updateSize(this.stage.container() as HTMLDivElement, imageSize);\n\n // Restore background\n if (backgroundConfig) {\n this.setCanvasBackground(backgroundConfig, false);\n } else if (background) {\n this.setCanvasBackground(background, false);\n }\n\n // Restore layers\n const reversedLayers = [...layers].reverse();\n const newLayers: LayerConfig[] = [];\n for (const layerConfig of reversedLayers) {\n const id = layerConfig.id || Math.random().toString(36).substr(2, 9);\n const configWithId = { ...layerConfig, id };\n // We add layers to Konva but don't update the signal inside addLayer\n await this.addLayer(configWithId, false);\n // We collect them in the same order as in addLayer(..., true) which is [newConfig, ...layers]\n newLayers.unshift(configWithId);\n }\n this._layers.set(newLayers);\n\n this.workspaceLayer.batchDraw();\n this.uiLayer?.batchDraw();\n } finally {\n this.isSnapshotLoading = false;\n if (resetHistory) {\n this.resetHistory();\n } else {\n this.notifyChange(false);\n this.updateHistorySignals();\n }\n }\n }\n\n async loadAllFonts(): Promise<void> {\n const fontPromises: Promise<void>[] = [];\n\n // Always load default font\n fontPromises.push(this.loadFont(this.defaultFont));\n\n this._layers().forEach(layer => {\n if (layer.type === 'text' && layer['fontFamily']) {\n fontPromises.push(this.loadFont(layer['fontFamily']));\n } else if (layer.type === 'text') {\n fontPromises.push(this.loadFont(this.defaultFont));\n }\n });\n await Promise.all(fontPromises);\n }\n\n loadFont(fontFamily: string): Promise<void> {\n if (!this.isBrowser || this.loadedFonts.has(fontFamily)) {\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `https://fonts.googleapis.com/css2?family=${fontFamily.replace(/ /g, '+')}:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap`;\n link.onload = () => {\n this.loadedFonts.add(fontFamily);\n // Wait for font to be ready for rendering\n if ('fonts' in document) {\n (document as any).fonts.load(`1em \"${fontFamily}\"`).then(() => {\n resolve();\n }).catch(() => {\n resolve();\n });\n } else {\n // Fallback: small timeout\n setTimeout(() => resolve(), 100);\n }\n };\n link.onerror = () => {\n console.error(`Failed to load font: ${fontFamily}`);\n resolve();\n };\n document.head.appendChild(link);\n });\n }\n\n getLayerThumbnail(id: string, effectId?: string): string | null {\n if (!this.workspaceLayer) return null;\n const shape = this.workspaceLayer.findOne('#' + id);\n if (!shape) return null;\n\n try {\n if (effectId) {\n // Clone the shape to apply the effect without affecting the original\n const clone = shape.clone();\n const layer = this._layers().find(l => l.id === id);\n if (layer) {\n const tempConfig = { ...layer, effect: effectId };\n this.applyEffectsToShape(clone, tempConfig);\n }\n const dataUrl = clone.toDataURL({\n pixelRatio: 0.5,\n quality: 0.5\n });\n clone.destroy();\n return dataUrl;\n }\n\n // Create a small thumbnail of the shape\n return shape.toDataURL({\n pixelRatio: 0.5,\n quality: 0.5\n });\n } catch (e) {\n console.warn('Failed to generate thumbnail for layer', id, e);\n return null;\n }\n }\n\n async updateLayer(id: string, config: Partial<LayerConfig>) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer) return;\n\n const shape = this.workspaceLayer?.findOne('#' + id);\n\n if (config['scaleX'] !== undefined && shape) {\n shape.scaleX(config['scaleX']);\n }\n if (config['scaleY'] !== undefined && shape) {\n shape.scaleY(config['scaleY']);\n }\n if (config['x'] !== undefined && shape) {\n shape.x(config['x']);\n }\n if (config['y'] !== undefined && shape) {\n shape.y(config['y']);\n }\n if (config['rotation'] !== undefined && shape) {\n shape.rotation(config['rotation']);\n }\n if (config['width'] !== undefined && shape && !(shape instanceof Konva.Text)) {\n shape.width(config['width']);\n shape.offsetX(shape.width() / 2);\n }\n if (config['height'] !== undefined && shape && !(shape instanceof Konva.Text)) {\n shape.height(config['height']);\n shape.offsetY(shape.height() / 2);\n }\n if (config['width'] !== undefined && shape instanceof Konva.Text) {\n shape.width(config['width']);\n shape.offsetX(shape.width() / 2);\n }\n\n if (shape) {\n this.updateShapeOriginalPosition(shape as Konva.Shape, true);\n }\n\n this._layers.update(layers =>\n layers.map(l => l.id === id ? { ...l, ...config } : l)\n );\n\n const updatedLayer = this._layers().find(l => l.id === id);\n\n if (shape && updatedLayer) {\n this.applyEffectsToShape(shape, updatedLayer);\n }\n\n // If font-related properties changed, ensure the font variant is loaded and applied\n if (this.isBrowser && shape instanceof Konva.Text && (\n config['fontFamily'] !== undefined ||\n config['fontWeight'] !== undefined ||\n config['fontStyle'] !== undefined\n )) {\n const family = config['fontFamily'] || shape.fontFamily();\n const weight = config['fontWeight'] || shape.getAttr('fontWeight') || 400;\n const isItalic = (config['fontStyle'] === 'italic') || (shape.fontStyle() || '').includes('italic');\n const fontStr = `${isItalic ? 'italic ' : ''}${weight} 12px \"${family}\"`;\n\n if (config['fontFamily']) {\n await this.loadFont(config['fontFamily']);\n this.workspaceLayer?.batchDraw();\n }\n\n try {\n await document.fonts.load(fontStr);\n this.workspaceLayer?.batchDraw();\n } catch (e) {\n console.warn('Failed to load font variant:', fontStr);\n }\n }\n\n if (shape) {\n if (config.fill !== undefined) {\n const type = config.type || layer.type;\n if (type === 'shape' || type === 'pattern') {\n // For SVG shapes and patterns, we can replace the color in the SVG data.\n const currentLayer = this._layers().find(l => l.id === id);\n const dataKey = type === 'shape' ? 'data' : 'patternImage';\n const dataUrl = currentLayer?.[dataKey];\n\n if (typeof dataUrl === 'string' && dataUrl.startsWith('data:image/svg+xml') &&\n config.fill && !config.fill.startsWith('data:image') && !config.fill.startsWith('http')) {\n const commaIndex = dataUrl.indexOf(',');\n if (commaIndex !== -1) {\n const header = dataUrl.substring(0, commaIndex);\n const isBase64 = header.includes('base64');\n const svgText = isBase64\n ? atob(dataUrl.substring(commaIndex + 1))\n : decodeURIComponent(dataUrl.substring(commaIndex + 1));\n\n const newFill = config.fill;\n // Replace both fill and stroke colors\n const newSvgText = svgText\n .replace(/fill=\"[#][0-9a-fA-F]{3,6}\"/g, `fill=\"${newFill}\"`)\n .replace(/fill='%23[0-9a-fA-F]{3,6}'/g, `fill='${newFill}'`)\n .replace(/stroke=\"[#][0-9a-fA-F]{3,6}\"/g, `stroke=\"${newFill}\"`)\n .replace(/stroke='%23[0-9a-fA-F]{3,6}'/g, `stroke='${newFill}'`);\n\n const newDataUrl = isBase64\n ? `${header},${btoa(newSvgText)}`\n : `${header},${encodeURIComponent(newSvgText)}`;\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n if (type === 'shape') {\n (shape as Konva.Image).image(img);\n } else {\n shape.setAttr('fillPatternImage', img);\n }\n this.workspaceLayer?.batchDraw();\n };\n img.src = newDataUrl;\n // Update the data in the signal too\n this._layers.update(layers => layers.map(l => l.id === id ? { ...l, [dataKey]: newDataUrl } : l));\n }\n } else if (config.fill && (config.fill.startsWith('data:image') || config.fill.startsWith('http'))) {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n shape.setAttr('fillPatternImage', img);\n this.workspaceLayer?.batchDraw();\n };\n img.src = config.fill;\n if (type === 'pattern') {\n this._layers.update(layers => layers.map(l => l.id === id ? { ...l, patternImage: config.fill } : l));\n }\n } else {\n shape.setAttr('fill', config.fill);\n if (type !== 'pattern') {\n shape.setAttr('fillPatternImage', null);\n }\n }\n } else if (config.fill && (config.fill.startsWith('data:image') || config.fill.startsWith('http'))) {\n // It's a pattern for other types\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n shape.setAttr('fillPatternImage', img);\n this.workspaceLayer?.batchDraw();\n };\n img.src = config.fill;\n } else {\n shape.setAttr('fill', config.fill);\n shape.setAttr('fillPatternImage', null);\n }\n }\n if (config['opacity'] !== undefined) {\n shape.opacity(config['opacity']);\n }\n if (config['text'] !== undefined && shape instanceof Konva.Text) {\n shape.text(config['text']);\n // Update offset because content changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n if (config['fontSize'] !== undefined && shape instanceof Konva.Text) {\n shape.fontSize(config['fontSize']);\n // Update offset because size changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n if (config['width'] !== undefined && shape instanceof Konva.Text) {\n shape.width(config['width'] * this.scale());\n // Update offset because width changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n if (config['fontFamily'] !== undefined && shape instanceof Konva.Text) {\n shape.fontFamily(config['fontFamily']);\n }\n if (config['fontWeight'] !== undefined && shape instanceof Konva.Text) {\n shape.setAttr('fontWeight', config['fontWeight']);\n // Konva's fontStyle property is used for weight and style.\n // If we have numeric fontWeight, we can try to use it directly in fontStyle as well.\n const currentStyle = (shape.fontStyle() || '').includes('italic') ? 'italic' : '';\n shape.fontStyle(`${config['fontWeight']} ${currentStyle}`.trim());\n // Update offset because size changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n // Force text refresh to update layout before transformer update\n this.workspaceLayer?.batchDraw();\n }\n if (config['fontStyle'] !== undefined && shape instanceof Konva.Text) {\n // If fontStyle is provided, it might override fontWeight if we are not careful.\n // But usually fontStyle in this app means 'italic' or 'normal'.\n const currentWeight = shape.getAttr('fontWeight') || 400;\n if (config['fontStyle'] === 'italic') {\n shape.fontStyle(currentWeight + ' italic');\n } else {\n shape.fontStyle(currentWeight.toString());\n }\n // Update offset because size changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n // Force text refresh to update layout before transformer update\n this.workspaceLayer?.batchDraw();\n }\n if (config['textDecoration'] !== undefined && shape instanceof Konva.Text) {\n shape.textDecoration(config['textDecoration']);\n }\n if (config['align'] !== undefined && shape instanceof Konva.Text) {\n shape.align(config['align']);\n }\n if (config['lineHeight'] !== undefined && shape instanceof Konva.Text) {\n shape.lineHeight(config['lineHeight']);\n }\n if (config['letterSpacing'] !== undefined && shape instanceof Konva.Text) {\n shape.letterSpacing(config['letterSpacing']);\n }\n if (config['textCase'] !== undefined && shape instanceof Konva.Text) {\n const text = layer.text || '';\n if (config['textCase'] === 'upper') {\n shape.text(text.toUpperCase());\n } else {\n shape.text(text);\n }\n }\n\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n this.notifyChange();\n\n // If text properties changed, update again after a short delay\n // to handle cases where text layout hasn't updated yet.\n if (shape instanceof Konva.Text && (\n config['fontFamily'] !== undefined ||\n config['fontSize'] !== undefined ||\n config['text'] !== undefined ||\n config['fontWeight'] !== undefined ||\n config['fontStyle'] !== undefined\n )) {\n setTimeout(() => {\n if (shape instanceof Konva.Text) {\n // Re-calculate offsets one more time as dimensions might have changed\n // after the browser fully applied the font metrics.\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n\n if (this.transformer) {\n // Re-assigning nodes is the most reliable way to force Transformer\n // to re-calculate its boundaries and adapt to the new text size.\n const currentNodes = this.transformer.nodes();\n this.transformer.nodes([]);\n this.transformer.nodes(currentNodes);\n }\n\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n }, 100);\n }\n }\n }\n\n getBase64Image(): string | undefined {\n if (!this.stage || !this.canvasRect) {\n return undefined;\n }\n\n // Capture original state\n const wasUiLayerVisible = this.uiLayer?.visible() || false;\n const originalStroke = this.canvasRect.stroke();\n const originalStrokeWidth = this.canvasRect.strokeWidth();\n\n // Hide UI layer to exclude transformers, snap lines, etc. from export\n this.uiLayer?.visible(false);\n\n // Temporarily hide canvas border\n this.canvasRect.stroke(null);\n this.canvasRect.strokeWidth(0);\n\n // Get the client rect of the canvas area relative to the stage\n const rect = this.canvasRect.getClientRect({ relativeTo: this.stage });\n\n // Ensure we are in a browser\n if (!this.isBrowser) {\n return undefined;\n }\n\n try {\n const dataUrl = this.stage.toDataURL({\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n pixelRatio: 2 // High quality\n });\n\n return dataUrl;\n } catch (e) {\n console.error('Failed to get base64 image:', e);\n return undefined;\n } finally {\n // Restore UI layer visibility\n if (wasUiLayerVisible) {\n this.uiLayer?.visible(true);\n }\n // Restore canvas border\n this.canvasRect.stroke(originalStroke);\n this.canvasRect.strokeWidth(originalStrokeWidth);\n }\n }\n\n downloadImage() {\n if (!this.stage || !this.canvasRect) {\n return;\n }\n\n // Capture original state\n const wasUiLayerVisible = this.uiLayer?.visible() || false;\n const originalStroke = this.canvasRect.stroke();\n const originalStrokeWidth = this.canvasRect.strokeWidth();\n\n // Hide UI layer to exclude transformers, snap lines, etc. from export\n this.uiLayer?.visible(false);\n\n // Temporarily hide canvas border\n this.canvasRect.stroke(null);\n this.canvasRect.strokeWidth(0);\n\n // Get the client rect of the canvas area relative to the stage\n const rect = this.canvasRect.getClientRect({ relativeTo: this.stage });\n\n // Ensure we are in a browser\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const dataUrl = this.stage.toDataURL({\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n pixelRatio: 2 // High quality\n });\n\n const timestamp = new Date().getTime();\n const filename = `${timestamp}.png`;\n\n const downloadLink = document.createElement('a');\n downloadLink.href = dataUrl;\n downloadLink.download = filename;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n } catch (e) {\n console.error('Failed to export image:', e);\n } finally {\n // Restore UI layer visibility\n if (wasUiLayerVisible) {\n this.uiLayer?.visible(true);\n }\n // Restore canvas border\n this.canvasRect.stroke(originalStroke);\n this.canvasRect.strokeWidth(originalStrokeWidth);\n }\n }\n\n private notifyChange(incrementVersion = true) {\n if (this.isSnapshotLoading) return;\n if (incrementVersion) {\n this.currentSnapshotVersion++;\n this.saveHistory();\n }\n this._change$.next();\n }\n\n private saveHistory() {\n const snapshot = this.getSnapshot();\n // Don't save if it's the same as the last one\n if (this.undoStack.length > 0) {\n const last = this.undoStack[this.undoStack.length - 1];\n if (JSON.stringify(last.layers) === JSON.stringify(snapshot.layers) &&\n JSON.stringify(last.imageSize) === JSON.stringify(snapshot.imageSize) &&\n last.background === snapshot.background &&\n JSON.stringify(last.backgroundConfig) === JSON.stringify(snapshot.backgroundConfig)) {\n return;\n }\n }\n this.undoStack.push(snapshot);\n if (this.undoStack.length > this.historyLimit) {\n this.undoStack.shift();\n }\n this.redoStack = [];\n this.updateHistorySignals();\n }\n\n undo() {\n if (this.undoStack.length <= 1) return;\n const current = this.undoStack.pop();\n this.redoStack.push(current);\n const previous = this.undoStack[this.undoStack.length - 1];\n this.loadSnapshot(previous, false);\n }\n\n redo() {\n if (this.redoStack.length === 0) return;\n const next = this.redoStack.pop();\n this.undoStack.push(next);\n this.loadSnapshot(next, false);\n }\n\n private updateHistorySignals() {\n this.canUndo.set(this.undoStack.length > 1);\n this.canRedo.set(this.redoStack.length > 0);\n }\n\n resetHistory() {\n this.undoStack = [this.getSnapshot()];\n this.redoStack = [];\n this.updateHistorySignals();\n }\n\n private applyEffectsToShape(shape: Konva.Node, config: LayerConfig) {\n const filters: any[] = [];\n let tintR = 0;\n let tintG = 0;\n let tintB = 0;\n\n if (config['effect'] === 'grayscale') {\n filters.push(Konva.Filters.Grayscale);\n } else if (config['effect'] === 'sepia') {\n filters.push(Konva.Filters.Sepia);\n } else if (config['effect'] === 'invert') {\n filters.push(Konva.Filters.Invert);\n } else if (config['effect'] === 'cold') {\n tintR = -0.15;\n tintG = 0.05;\n tintB = 0.25;\n filters.push(TintFilter);\n } else if (config['effect'] === 'warm') {\n tintR = 0.25;\n tintG = 0.1;\n tintB = -0.15;\n filters.push(TintFilter);\n }\n\n if (config['temperatureEnabled']) {\n const temp = (config['temperature'] ?? 0) / 100; // -1 to 1\n if (!filters.includes(TintFilter)) filters.push(TintFilter);\n if (temp > 0) {\n tintR += (1 - tintR) * temp * 0.2;\n tintG += (1 - tintG) * temp * 0.1;\n tintB -= (1 + tintB) * temp * 0.2;\n } else {\n const absTemp = Math.abs(temp);\n tintR -= (1 + tintR) * absTemp * 0.2;\n tintG += (1 - tintG) * absTemp * 0.1;\n tintB += (1 - tintB) * absTemp * 0.2;\n }\n }\n\n shape.setAttr('tintR', tintR);\n shape.setAttr('tintG', tintG);\n shape.setAttr('tintB', tintB);\n\n if (config['blurEnabled']) {\n filters.push(Konva.Filters.Blur);\n shape.setAttr('blurRadius', config['blur'] ?? 0);\n }\n\n if (config['brightnessEnabled']) {\n filters.push(Konva.Filters.Brighten);\n shape.setAttr('brightness', config['brightness'] ?? 0);\n }\n\n if (config['contrastEnabled']) {\n filters.push(Konva.Filters.Contrast);\n shape.setAttr('contrast', config['contrast'] ?? 0);\n }\n\n if (config['saturationEnabled']) {\n filters.push(Konva.Filters.HSL);\n shape.setAttr('saturation', config['saturation'] ?? 0);\n }\n\n if (config['vibranceEnabled']) {\n // Konva doesn't have Vibrance by default, using HSL saturation as fallback\n if (!filters.includes(Konva.Filters.HSL)) {\n filters.push(Konva.Filters.HSL);\n }\n shape.setAttr('saturation', (config['saturation'] ?? 0) + (config['vibrance'] ?? 0) / 2);\n }\n\n if (config['borderEnabled']) {\n shape.setAttr('stroke', config['borderColor'] || config['fill'] || '#000000');\n shape.setAttr('strokeWidth', config['border'] ?? 0);\n } else {\n shape.setAttr('strokeWidth', 0);\n }\n\n if (config['cornerRadiusEnabled']) {\n const radius = config['cornerRadius'] ?? 0;\n if (shape instanceof Konva.Rect || shape instanceof Konva.Image) {\n shape.cornerRadius(radius);\n }\n } else {\n if (shape instanceof Konva.Rect || shape instanceof Konva.Image) {\n shape.cornerRadius(0);\n }\n }\n\n if (config['shadowEnabled']) {\n shape.setAttr('shadowColor', config['shadowColor'] || '#000000');\n shape.setAttr('shadowBlur', config['shadowBlur'] ?? 15);\n shape.setAttr('shadowOpacity', (config['shadowOpacity'] ?? 100) / 100);\n shape.setAttr('shadowOffset', {\n x: config['shadowOffsetX'] ?? 0,\n y: config['shadowOffsetY'] ?? 0\n });\n } else {\n shape.setAttr('shadowOpacity', 0);\n }\n\n shape.filters(filters);\n\n if (filters.length > 0 || (config['cornerRadiusEnabled'] && config['cornerRadius'] > 0)) {\n // In Konva, caching is required for filters to work, and for cornerRadius to clip Image\n shape.clearCache();\n shape.cache();\n } else {\n shape.clearCache();\n }\n\n this.workspaceLayer?.batchDraw();\n }\n\n destroy() {\n this.isInitialized.set(false);\n if (this.isBrowser) {\n window.removeEventListener('mouseup', this.handleGlobalMouseUp);\n window.removeEventListener('touchend', this.handleGlobalMouseUp);\n window.removeEventListener('mousemove', this.handleGlobalMouseMove);\n window.removeEventListener('touchmove', this.handleGlobalMouseMove);\n }\n this.resizeObserver?.disconnect();\n this.stage?.off('mousedown touchstart');\n this.stage?.off('mousemove touchmove');\n this.stage?.off('mouseup touchend');\n this.hideHover();\n this.stage?.destroy();\n this.stage = undefined;\n this.uiLayer = undefined;\n this.workspaceLayer = undefined;\n this.canvasRect = undefined;\n this.maskOverlay = undefined;\n this.transformer = undefined;\n this.selectionRect = undefined;\n this.hoverRect = undefined;\n this.selectionBordersGroup = undefined;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { ImageDesignerPhoto, PhotosDataSource, PhotosGetRowsParams, PicsumImage } from './types';\nimport { map } from 'rxjs';\n\nexport function createDefaultPhotosDataSource(http: HttpClient): PhotosDataSource {\n return {\n getItems: (params: PhotosGetRowsParams) => {\n const url = `https://picsum.photos/v2/list?page=${params.page}&limit=${params.pageSize}`;\n http.get<PicsumImage[]>(url).pipe(\n map(images => images.map(img => ({\n id: img.id,\n name: img.author,\n width: img.width,\n height: img.height,\n url: img.download_url,\n thumbUrl: `https://picsum.photos/id/${img.id}/${img.width > img.height ? 400 : Math.round(400 * (img.width / img.height))}/${img.height > img.width ? 400 : Math.round(400 * (img.height / img.width))}`\n } as ImageDesignerPhoto)))\n ).subscribe({\n next: (data) => params.successCallback(data),\n error: () => params.failCallback()\n });\n }\n };\n}\n","export const SVG_PATTERNS: string[] = [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect width=\"4\" height=\"4\" x=\"10\" y=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect width=\"6\" height=\"6\" x=\"20\" y=\"20\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"0\" x2=\"40\" y2=\"40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect width=\"20\" height=\"20\" x=\"10\" y=\"10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 H40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M20 0 V40\" stroke=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"5\" r=\"2\" fill=\"#64748b\"/><circle cx=\"25\" cy=\"25\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"0\" width=\"8\" height=\"8\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"32\" y=\"32\" width=\"8\" height=\"8\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"30\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"30\" cy=\"10\" r=\"3\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 10 H40\" stroke=\"#64748b\"/><path d=\"M0 30 H40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"10\" y=\"10\" width=\"5\" height=\"5\" fill=\"#64748b\"/><rect x=\"25\" y=\"25\" width=\"5\" height=\"5\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"5\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,5 25,15 15,15\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,35 25,25 15,25\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"5,20 15,15 15,25\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"35,20 25,15 25,25\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"0\" x2=\"20\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"40\" y1=\"0\" x2=\"20\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"40\" x2=\"20\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"15\" y=\"15\" width=\"10\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"5\" r=\"1\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"35\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"35\" cy=\"5\" r=\"1\" fill=\"#64748b\"/><circle cx=\"5\" cy=\"35\" r=\"1\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M5 5 L35 35\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M35 5 L5 35\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"18\" y=\"18\" width=\"4\" height=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,10 30,30 10,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"10\" r=\"1\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"30\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"30\" cy=\"10\" r=\"1\" fill=\"#64748b\"/><circle cx=\"10\" cy=\"30\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M10 10 H30 V30 H10 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"5\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"35\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"18\" width=\"40\" height=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"18\" y=\"0\" width=\"4\" height=\"40\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"20\" r=\"4\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"30\" cy=\"20\" r=\"4\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"8\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 L20 0 L40 20 L20 40 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 10 L10 0 L20 10 L30 0 L40 10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 30 L10 40 L20 30 L30 40 L40 30\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"0\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/><rect x=\"20\" y=\"20\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"20\" y=\"0\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/><rect x=\"0\" y=\"20\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 0 L40 20 L0 40 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M40 0 L0 20 L40 40 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"10,0 30,0 40,20 30,40 10,40 0,20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 0 L20 20 L40 0\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 40 L20 20 L40 40\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"0\" cy=\"0\" r=\"5\" fill=\"#64748b\"/><circle cx=\"40\" cy=\"40\" r=\"5\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"40\" cy=\"0\" r=\"5\" fill=\"#64748b\"/><circle cx=\"0\" cy=\"40\" r=\"5\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,5 35,35 5,35\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"5,5 35,5 20,35\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"5\" y=\"5\" width=\"30\" height=\"30\" rx=\"5\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"10\" y=\"10\" width=\"20\" height=\"20\" rx=\"10\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"12\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"20\" r=\"4\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"20\" r=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"4\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 Q10 0 20 20 T40 20\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 Q10 40 20 20 T40 20\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"15\" y=\"0\" width=\"10\" height=\"40\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"15\" width=\"40\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,20 10,10 20,20 10,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,0 30,10 20,20 10,10\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"5\" r=\"2\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"35\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M10 0 L20 10 L30 0 L40 10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 30 L10 20 L20 30 L30 20 L40 30\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,0 40,0 20,20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,40 40,40 20,20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"10\" r=\"3\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"10\" r=\"3\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"10\" cy=\"30\" r=\"2\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"5\" y=\"5\" width=\"10\" height=\"10\" fill=\"#64748b\"/><rect x=\"25\" y=\"25\" width=\"10\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"25\" y=\"5\" width=\"10\" height=\"10\" fill=\"#64748b\"/><rect x=\"5\" y=\"25\" width=\"10\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"3\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"5\" r=\"3\" fill=\"#64748b\"/><circle cx=\"5\" cy=\"20\" r=\"3\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"10,20 20,10 30,20 20,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"6\" fill=\"none\" stroke=\"#64748b\"/><circle cx=\"20\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"5,20 20,5 35,20 20,35\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"14\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,10 40,10 20,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`\n];\n","import { ElementConfig } from './types';\n\nexport const SVG_ELEMENTS: ElementConfig[] = [\n {\n name: 'square-filled',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"15\" y=\"15\" width=\"70\" height=\"70\" fill=\"%2364748b\"/></svg>'\n },\n {\n name: 'square-outline',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"15\" y=\"15\" width=\"70\" height=\"70\" fill=\"none\" stroke=\"%2364748b\" stroke-width=\"8\"/></svg>'\n },\n {\n name: 'rectangle-filled',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"10\" y=\"25\" width=\"80\" height=\"50\" fill=\"%2364748b\"/></svg>'\n },\n {\n name: 'rectangle-outline',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"10\" y=\"25\" width=\"80\" height=\"50\" fill=\"none\" stroke=\"%2364748b\" stroke-width=\"8\"/></svg>'\n },\n {\n name: 'arrow-right-1',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M10 45H65L50 30L90 50L50 70L65 55H10Z\"/></svg>'\n },\n {\n name: 'arrow-right-2',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,40 60,40 60,25 90,50 60,75 60,60 10,60\"/></svg>'\n },\n {\n name: 'arrow-right-3',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,45 55,45 55,30 90,50 55,70 55,55 10,55\"/></svg>'\n },\n {\n name: 'arrow-right-4',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"15,40 65,40 65,25 90,50 65,75 65,60 15,60\"/></svg>'\n },\n {\n name: 'arrow-right-5',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,42 58,42 58,28 90,50 58,72 58,58 10,58\"/></svg>'\n },\n {\n name: 'arrow-right-fat',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,35 55,35 55,20 90,50 55,80 55,65 10,65\"/></svg>'\n },\n {\n name: 'arrow-right-wide',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,38 60,38 60,22 90,50 60,78 60,62 10,62\"/></svg>'\n },\n {\n name: 'arrow-right-long',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"5,45 70,45 70,30 95,50 70,70 70,55 5,55\"/></svg>'\n },\n {\n name: 'arrow-right-compact',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,45 60,45 60,35 85,50 60,65 60,55 20,55\"/></svg>'\n },\n {\n name: 'arrow-right-block',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,40 55,40 55,25 85,50 55,75 55,60 10,60\"/></svg>'\n },\n {\n name: 'arrow-right',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M20 45H65L50 30L80 50L50 70L65 55H20Z\"/></svg>'\n },\n {\n name: 'arrow-left',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M80 45H35L50 30L20 50L50 70L35 55H80Z\"/></svg>'\n },\n {\n name: 'arrow-up',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M45 80V35L30 50L50 20L70 50L55 35V80Z\"/></svg>'\n },\n {\n name: 'triangle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 90,90 10,90\"/></svg>'\n },\n {\n name: 'diamond',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 90,50 50,90 10,50\"/></svg>'\n },\n {\n name: 'pentagon',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 90,40 70,90 30,90 10,40\"/></svg>'\n },\n {\n name: 'parallelogram',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,20 90,20 70,80 0,80\"/></svg>'\n },\n {\n name: 'star',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 61,40 95,40 67,60 78,90 50,70 22,90 33,60 5,40 39,40\"/></svg>'\n },\n {\n name: 'hexagon',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"30,10 70,10 90,50 70,90 30,90 10,50\"/></svg>'\n },\n {\n name: 'chevron',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,30 50,60 80,30 80,50 50,80 20,50\"/></svg>'\n },\n {\n name: 'arrow',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 60,10 60,35 90,35 90,65 60,65 60,90\"/></svg>'\n },\n {\n name: 'cross',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"40,10 60,10 60,40 90,40 90,60 60,60 60,90 40,90 40,60 10,60 10,40 40,40\"/></svg>'\n },\n {\n name: 'trapezoid',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,30 80,30 65,80 35,80\"/></svg>'\n },\n {\n name: 'kite',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 80,50 50,90 20,50\"/></svg>'\n },\n {\n name: 'zigzag',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,30 40,30 25,55 60,55 45,80 90,80 90,90 10,90\"/></svg>'\n },\n {\n name: 'notched-rect',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,20 70,20 90,40 90,80 10,80\"/></svg>'\n },\n {\n name: 'double-triangle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,80 40,20 60,80\"/><polygon fill=\"%2364748b\" points=\"50,80 70,20 90,80\"/></svg>'\n },\n {\n name: 'shield',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 10 L85 25 L80 70 L50 90 L20 70 L15 25 Z\"/></svg>'\n },\n {\n name: 'octagon',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"30,10 70,10 90,30 90,70 70,90 30,90 10,70 10,30\"/></svg>'\n },\n {\n name: 'right-triangle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,90 10,10 90,90\"/></svg>'\n },\n {\n name: 'corner-cut',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,10 80,10 90,20 90,80 80,90 20,90 10,80 10,20\"/></svg>'\n },\n {\n name: 'arrow-wide',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 50,10 50,30 90,30 90,70 50,70 50,90\"/></svg>'\n },\n {\n name: 'triangle-down',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,20 90,20 50,90\"/></svg>'\n },\n {\n name: 'triangle-left',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"80,10 20,50 80,90\"/></svg>'\n },\n {\n name: 'triangle-right',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,10 80,50 20,90\"/></svg>'\n },\n {\n name: 'wide-trapezoid',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,30 90,30 70,80 30,80\"/></svg>'\n },\n {\n name: 'cut-diamond',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,5 90,50 50,95 10,50 30,50\"/></svg>'\n },\n {\n name: 'house',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 50,10 90,50 90,90 10,90\"/></svg>'\n },\n {\n name: 'tag',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,40 50,10 90,40 70,90 30,90\"/></svg>'\n },\n {\n name: 'double-chevron',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,30 40,50 10,70 25,70 55,50 25,30\"/><polygon fill=\"%2364748b\" points=\"45,30 75,50 45,70 60,70 90,50 60,30\"/></svg>'\n },\n {\n name: 'diamond-wide',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 95,50 50,90 5,50\"/></svg>'\n },\n {\n name: 'notch-top',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,20 40,20 50,10 60,20 90,20 90,90 10,90\"/></svg>'\n },\n {\n name: 'notch-bottom',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,10 90,10 90,80 60,80 50,90 40,80 10,80\"/></svg>'\n },\n {\n name: 'step-shape',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,80 10,40 40,40 40,20 90,20 90,80\"/></svg>'\n },\n {\n name: 'skew-arrow',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,60 60,20 60,40 90,40 90,80 60,80 60,90\"/></svg>'\n },\n {\n name: 'barbed',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 30,30 50,50 70,30 90,50 70,70 50,50 30,70\"/></svg>'\n },\n {\n name: 'circle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"50\" r=\"40\"/></svg>'\n },\n {\n name: 'circle-ring',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"50\" r=\"40\"/><circle fill=\"white\" cx=\"50\" cy=\"50\" r=\"20\"/></svg>'\n },\n {\n name: 'circle-cut-top',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"60\" r=\"35\"/></svg>'\n },\n {\n name: 'circle-half',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M10 50 A40 40 0 0 1 90 50 L90 90 L10 90 Z\"/></svg>'\n },\n {\n name: 'circle-quarter',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 50 L90 50 A40 40 0 0 0 50 10 Z\"/></svg>'\n },\n {\n name: 'circle-pacman',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 10 A40 40 0 1 1 50 90 L70 50 Z\"/></svg>'\n },\n {\n name: 'circle-segment',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 50 L50 10 A40 40 0 0 1 90 50 Z\"/></svg>'\n },\n {\n name: 'circle-dot',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"50\" r=\"35\"/><circle fill=\"white\" cx=\"50\" cy=\"50\" r=\"10\"/></svg>'\n },\n {\n name: 'circle-double',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"40\" cy=\"50\" r=\"25\"/><circle fill=\"%2364748b\" cx=\"65\" cy=\"50\" r=\"25\"/></svg>'\n },\n {\n name: 'circle-arc',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M10 50 A40 40 0 0 1 90 50 L70 50 A20 20 0 0 0 30 50 Z\"/></svg>'\n },\n {\n name: 'blob-1',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M32 15C50 5 78 18 85 40C92 65 70 90 45 85C20 80 10 55 15 35C20 25 25 18 32 15Z\"/></svg>'\n },\n {\n name: 'blob-2',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M40 10C65 5 90 25 85 50C80 80 55 95 35 85C15 75 10 50 20 30C25 20 30 15 40 10Z\"/></svg>'\n },\n {\n name: 'blob-3',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M28 20C45 5 75 10 85 35C95 60 75 90 50 88C25 85 10 60 15 40C18 30 22 25 28 20Z\"/></svg>'\n },\n {\n name: 'blob-4',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M35 12C55 2 85 18 88 42C92 70 70 92 45 88C20 85 8 60 15 38C18 28 25 18 35 12Z\"/></svg>'\n },\n {\n name: 'blob-5',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M30 18C52 4 80 15 88 38C95 62 75 90 50 90C25 90 10 65 15 42C18 30 22 25 30 18Z\"/></svg>'\n },\n {\n name: 'blob-6',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M38 14C60 5 85 20 90 45C95 70 70 92 45 88C20 85 5 60 12 38C18 25 25 18 38 14Z\"/></svg>'\n },\n {\n name: 'blob-7',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M25 22C45 8 78 12 88 35C98 60 78 92 50 90C22 88 8 60 12 40C15 32 18 26 25 22Z\"/></svg>'\n },\n {\n name: 'blob-8',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M35 18C58 6 85 18 92 40C98 65 78 90 52 88C25 85 10 60 15 38C18 30 25 22 35 18Z\"/></svg>'\n },\n {\n name: 'blob-9',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M30 12C52 4 82 15 90 38C98 65 75 92 48 90C22 88 8 62 15 38C20 25 22 20 30 12Z\"/></svg>'\n },\n {\n name: 'blob-10',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M34 16C55 5 80 15 88 36C95 60 78 90 50 92C22 95 8 65 15 42C20 30 25 22 34 16Z\"/></svg>'\n }\n];\n","import { ImagePresetCategory } from './types';\n\nexport const PRESET_CATEGORIES: ImagePresetCategory[] = [\n {\n name: 'Instagram',\n icon: 'fluent:camera-24-regular',\n presets: [\n { name: 'Post', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n { name: 'Story', width: 1080, height: 1920, icon: 'fluent:video-clip-24-regular' },\n { name: 'Ad', width: 1080, height: 1080, icon: 'fluent:megaphone-24-regular' },\n ]\n },\n {\n name: 'Facebook',\n icon: 'fluent:people-24-regular',\n presets: [\n { name: 'Post (Landscape)', width: 1200, height: 630, icon: 'fluent:image-24-regular' },\n { name: 'Post (Square)', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n { name: 'Cover', width: 851, height: 315, icon: 'fluent:image-24-regular' },\n ]\n },\n {\n name: 'Youtube',\n icon: 'fluent:video-24-regular',\n presets: [\n { name: 'Thumbnail', width: 1280, height: 720, icon: 'fluent:image-24-regular' },\n { name: 'Channel', width: 2560, height: 1440, icon: 'fluent:image-24-regular' },\n { name: 'Short', width: 1080, height: 1920, icon: 'fluent:video-clip-24-regular' },\n ]\n },\n {\n name: 'LinkedIn',\n icon: 'fluent:briefcase-24-regular',\n presets: [\n { name: 'Post', width: 1200, height: 627, icon: 'fluent:image-24-regular' },\n { name: 'Banner', width: 1584, height: 396, icon: 'fluent:image-24-regular' },\n { name: 'Square', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n ]\n },\n {\n name: 'Twitter',\n icon: 'fluent:news-24-regular',\n presets: [\n { name: 'Post', width: 1600, height: 900, icon: 'fluent:image-24-regular' },\n { name: 'Header', width: 1500, height: 500, icon: 'fluent:image-24-regular' },\n { name: 'Square', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n ]\n },\n {\n name: 'Video',\n icon: 'fluent:video-24-regular',\n presets: [\n { name: 'Full HD', width: 1920, height: 1080, icon: 'fluent:video-24-regular' },\n { name: '4K UHD', width: 3840, height: 2160, icon: 'fluent:video-24-regular' },\n { name: 'Vertical HD', width: 1080, height: 1920, icon: 'fluent:video-24-regular' },\n { name: 'Square HD', width: 1080, height: 1080, icon: 'fluent:video-24-regular' },\n ]\n }\n];\n","import { InjectionToken } from '@angular/core';\nexport const IMAGE_DESIGNER = new InjectionToken<any>('IMAGE_DESIGNER');\n","import { CommonModule, DecimalPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { IMAGE_DESIGNER } from '../tokens';\nimport { ImageDesignerService } from '../image-designer.service';\nimport { LayerConfig } from '../types';\nimport { ColorSwitcher } from '@ngstarter-ui/components/color-switcher';\nimport { Slider } from '@ngstarter-ui/components/slider';\nimport { SliderThumb } from '@ngstarter-ui/components/slider';\nimport { Toolbar, ToolbarItem, ToolbarSpacer } from '@ngstarter-ui/components/toolbar';\nimport { Popover, PopoverContent, PopoverTriggerForDirective } from '@ngstarter-ui/components/popover';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Divider } from '@ngstarter-ui/components/divider';\nimport { Menu, MenuItem, MenuTrigger } from '@ngstarter-ui/components/menu';\nimport { ButtonToggle, ButtonToggleGroup } from '@ngstarter-ui/components/button-toggle';\nimport { Ripple } from '@ngstarter-ui/components/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ngs-settings',\n imports: [\n CommonModule,\n ColorSwitcher,\n Slider,\n SliderThumb,\n Toolbar,\n ToolbarItem,\n Popover,\n PopoverContent,\n PopoverTriggerForDirective,\n Button,\n Icon,\n Divider,\n DecimalPipe,\n Menu,\n MenuItem,\n MenuTrigger,\n Ripple,\n ToolbarSpacer,\n ButtonToggle,\n ButtonToggleGroup,\n FormsModule\n ],\n templateUrl: './settings.html',\n styleUrl: './settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Settings {\n private imageDesigner = inject(IMAGE_DESIGNER, { optional: true });\n private designerService = inject(ImageDesignerService);\n\n selectedLayerId = this.designerService.selectedLayerId;\n layers = this.designerService.layers;\n fonts = this.designerService.fonts;\n\n selectedLayer = computed(() => {\n const id = this.selectedLayerId();\n if (!id) return null;\n return this.layers().find(l => l.id === id) as LayerConfig;\n });\n\n showColorPicker = computed(() => {\n const layer = this.selectedLayer();\n if (!layer) return false;\n return ['text', 'shape', 'pattern'].includes(layer.type);\n });\n\n presetColors = signal<string[]>([\n '#000000', '#7a7a7a', '#ffffff',\n '#f44336', '#e91e63', '#9c27b0',\n '#673ab7', '#3f51b5', '#2196f3',\n '#03a9f4', '#00bcd4', '#009688',\n '#4caf50', '#8bc34a', '#cddc39',\n '#ffeb3b', '#ffc107', '#ff9800',\n '#ff5722', '#795548', '#607d8b'\n ]);\n\n fontWeightNames: Record<number, string> = {\n 100: 'Thin',\n 200: 'Extra Light',\n 300: 'Light',\n 400: 'Regular',\n 500: 'Medium',\n 600: 'Semi Bold',\n 700: 'Bold',\n 800: 'Extra Bold',\n 900: 'Black'\n };\n\n getFontWeightName(value: any): string {\n const numericValue = value === 'bold' ? 700 : (value === 'normal' ? 400 : (parseInt(value, 10) || 400));\n return this.fontWeightNames[numericValue] || numericValue.toString();\n }\n\n async updateOpacity(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { opacity: value });\n }\n }\n\n async updateColor(color: string) {\n const id = this.selectedLayerId();\n const layer = this.selectedLayer();\n if (id && layer) {\n await this.designerService.updateLayer(id, { fill: color, type: layer.type });\n }\n }\n\n async updateFont(font: string) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.loadFont(font);\n await this.designerService.updateLayer(id, { fontFamily: font });\n }\n }\n\n async updateFontWeight(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { fontWeight: value });\n }\n }\n\n async updateTextStyle(style: string[]) {\n const id = this.selectedLayerId();\n if (!id) return;\n\n const decorations = [];\n if (style.includes('underline')) decorations.push('underline');\n if (style.includes('line-through')) decorations.push('line-through');\n\n const config: any = {\n fontStyle: style.includes('italic') ? 'italic' : 'normal',\n textDecoration: decorations.join(' ') || 'none'\n };\n\n await this.designerService.updateLayer(id, config);\n }\n\n async toggleUppercase() {\n const id = this.selectedLayerId();\n const layer = this.selectedLayer();\n if (id && layer) {\n const currentCase = layer['textCase'];\n const newCase = currentCase === 'upper' ? 'normal' : 'upper';\n await this.designerService.updateLayer(id, { textCase: newCase });\n }\n }\n\n async updateTextAlign(align: string) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { align });\n }\n }\n\n async updateLineHeight(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { lineHeight: value });\n }\n }\n\n async updateLetterSpacing(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { letterSpacing: value });\n }\n }\n\n getTextStyle = computed(() => {\n const layer = this.selectedLayer();\n if (!layer) return [];\n const styles = [];\n if (layer['fontStyle'] === 'italic') styles.push('italic');\n const decoration = layer['textDecoration'] || '';\n if (decoration.includes('underline')) styles.push('underline');\n if (decoration.includes('line-through')) styles.push('line-through');\n return styles;\n }, {\n equal: (a, b) => {\n if (a.length !== b.length) return false;\n return a.every((v, i) => v === b[i]);\n }\n });\n\n toggleLock() {\n const id = this.selectedLayerId();\n if (id) {\n this.designerService.toggleLayerLock(id);\n }\n }\n\n async flipHorizontal() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.flipHorizontal(id);\n }\n }\n\n async flipVertical() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.flipVertical(id);\n }\n }\n\n async fitToPage() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.fitToPage(id);\n }\n }\n\n async fillPage() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.fillPage(id);\n }\n }\n\n saveSnapshot() {\n const snapshot = this.designerService.getSnapshot();\n const dataStr = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(snapshot));\n const downloadAnchorNode = document.createElement('a');\n downloadAnchorNode.setAttribute(\"href\", dataStr);\n downloadAnchorNode.setAttribute(\"download\", \"design-snapshot.json\");\n document.body.appendChild(downloadAnchorNode);\n downloadAnchorNode.click();\n downloadAnchorNode.remove();\n }\n\n loadSnapshot(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files[0]) {\n const reader = new FileReader();\n reader.onload = async (e) => {\n try {\n const snapshot = JSON.parse(e.target?.result as string);\n await this.designerService.loadSnapshot(snapshot);\n } catch (error) {\n console.error('Failed to load snapshot:', error);\n }\n };\n reader.readAsText(input.files[0]);\n }\n }\n\n openEffects() {\n this.imageDesigner?.openEffects();\n }\n}\n","@let layer = selectedLayer();\n\n@if (layer) {\n <ngs-toolbar\n class=\"h-14 z-10 bg-surface-container-lowest border-b border-border px-5 absolute top-0 left-0 right-0\">\n <!-- Color -->\n @if (showColorPicker()) {\n <ngs-toolbar-item>\n <button [ngsPopoverTriggerFor]=\"colorPopover\"\n position=\"below-center\"\n class=\"size-7 cursor-pointer hover:ring-2 hover:ring-primary rounded-full border border-border\"\n ngsRipple\n [style.backgroundColor]=\"layer['fill'] || '#000000'\">\n </button>\n <ngs-popover #colorPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-72\">\n <div class=\"text-xs font-medium uppercase text-muted-foreground mb-4\">\n {{ layer.type === 'text' ? 'Text Color' : 'Fill Color' }}\n </div>\n <ngs-color-switcher [colors]=\"presetColors()\"\n [selectedColor]=\"layer['fill'] || '#000000'\"\n (colorChange)=\"updateColor($event)\"/>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n <ngs-divider vertical/>\n }\n\n <!-- Opacity -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"opacityPopover\"\n position=\"below-center\">\n <ngs-icon name=\"fluent:blur-24-regular\"/>\n </button>\n <ngs-popover #opacityPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-60 space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Opacity</label>\n <span class=\"text-xs text-muted-foreground\">{{ (layer['opacity'] ?? 1) * 100 | number:'1.0-0' }}%</span>\n </div>\n <ngs-slider [min]=\"0\" [max]=\"1\" [step]=\"0.01\">\n <input ngsSliderThumb\n [value]=\"layer['opacity'] ?? 1\"\n (valueChange)=\"updateOpacity($event)\"/>\n </ngs-slider>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n\n <!-- Font Selection for text layers -->\n @if (layer.type === 'text') {\n <ngs-toolbar-item>\n <button ngsButton reverse [ngsMenuTriggerFor]=\"fontMenu\">\n <span class=\"truncate max-w-[100px]\">{{ layer['fontFamily'] }}</span>\n <ngs-icon name=\"fluent:chevron-down-20-regular\" class=\"size-5\"/>\n </button>\n\n <ngs-menu #fontMenu=\"ngsMenu\">\n <div class=\"min-w-[200px]\">\n @for (font of fonts(); track font) {\n <button ngs-menu-item\n [selected]=\"layer['fontFamily'] === font\"\n (click)=\"updateFont(font)\">\n {{ font }}\n </button>\n }\n </div>\n </ngs-menu>\n </ngs-toolbar-item>\n\n <!-- Text Styles -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"boldPopover\"\n position=\"below-center\"\n [class.text-primary]=\"layer['fontWeight'] && layer['fontWeight'] !== 'normal' && layer['fontWeight'] !== 400\"\n title=\"Bold\">\n <ngs-icon name=\"fluent:text-bold-24-regular\"/>\n </button>\n <ngs-popover #boldPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-60 space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Font Weight</label>\n <span class=\"text-xs text-muted-foreground\">{{ getFontWeightName(layer['fontWeight']) }}</span>\n </div>\n <ngs-slider [min]=\"300\" [max]=\"900\" [step]=\"100\">\n <input ngsSliderThumb\n [value]=\"layer['fontWeight'] === 'bold' ? 700 : (layer['fontWeight'] === 'normal' ? 400 : (layer['fontWeight'] || 400))\"\n (valueChange)=\"updateFontWeight($event)\"/>\n </ngs-slider>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n\n <!-- Uppercase -->\n <ngs-toolbar-item>\n <button ngsIconButton\n (click)=\"toggleUppercase()\"\n [class.text-primary]=\"layer['textCase'] === 'upper'\"\n title=\"Uppercase\">\n <ngs-icon name=\"fluent:text-case-uppercase-24-regular\"/>\n </button>\n </ngs-toolbar-item>\n\n <ngs-toolbar-item>\n <ngs-button-toggle-group multiple\n hideSelectionIndicator\n onlyIcon\n [value]=\"getTextStyle()\"\n (valueChange)=\"updateTextStyle($event)\">\n <ngs-button-toggle value=\"italic\" title=\"Italic\">\n <ngs-icon name=\"fluent:text-italic-24-regular\"/>\n </ngs-button-toggle>\n <ngs-button-toggle value=\"underline\" title=\"Underline\">\n <ngs-icon name=\"fluent:text-underline-24-regular\"/>\n </ngs-button-toggle>\n <ngs-button-toggle value=\"line-through\" title=\"Strikethrough\">\n <ngs-icon name=\"fluent:text-strikethrough-24-regular\"/>\n </ngs-button-toggle>\n </ngs-button-toggle-group>\n </ngs-toolbar-item>\n\n <!-- Text Alignment -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"alignPopover\"\n position=\"below-center\"\n title=\"Alignment\">\n <ngs-icon [name]=\"'fluent:text-align-' + (layer['align'] || 'left') + '-24-regular'\"/>\n </button>\n <ngs-popover #alignPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-2 flex gap-1\">\n <button ngsIconButton (click)=\"updateTextAlign('left')\" [class.text-primary]=\"layer['align'] === 'left'\">\n <ngs-icon name=\"fluent:text-align-left-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"updateTextAlign('center')\" [class.text-primary]=\"layer['align'] === 'center'\">\n <ngs-icon name=\"fluent:text-align-center-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"updateTextAlign('right')\" [class.text-primary]=\"layer['align'] === 'right'\">\n <ngs-icon name=\"fluent:text-align-right-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"updateTextAlign('justify')\" [class.text-primary]=\"layer['align'] === 'justify'\">\n <ngs-icon name=\"fluent:text-align-justify-24-regular\"/>\n </button>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n\n <!-- Spacing (Line Height & Letter Spacing) -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"spacingPopover\"\n position=\"below-center\"\n title=\"Spacing\">\n <ngs-icon name=\"fluent:text-line-spacing-24-regular\"/>\n </button>\n <ngs-popover #spacingPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-60 space-y-6\">\n <div class=\"space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Line Height</label>\n <span class=\"text-xs text-muted-foreground\">{{ layer['lineHeight'] || 1.2 | number:'1.1-1' }}</span>\n </div>\n <ngs-slider [min]=\"0.5\" [max]=\"3\" [step]=\"0.1\">\n <input ngsSliderThumb\n [value]=\"layer['lineHeight'] || 1.2\"\n (valueChange)=\"updateLineHeight($event)\"/>\n </ngs-slider>\n </div>\n <div class=\"space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Letter Spacing</label>\n <span class=\"text-xs text-muted-foreground\">{{ layer['letterSpacing'] || 0 }}</span>\n </div>\n <ngs-slider [min]=\"-5\" [max]=\"50\" [step]=\"1\">\n <input ngsSliderThumb\n [value]=\"layer['letterSpacing'] || 0\"\n (valueChange)=\"updateLetterSpacing($event)\"/>\n </ngs-slider>\n </div>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n }\n\n @if (layer.type === 'image') {\n <ngs-toolbar-item>\n <button ngsButton reverse [ngsMenuTriggerFor]=\"flipMenu\">\n <span>Flip</span>\n <ngs-icon name=\"fluent:chevron-down-20-regular\" class=\"size-5\"/>\n </button>\n\n <ngs-menu #flipMenu=\"ngsMenu\">\n <div class=\"min-w-[150px]\">\n <button ngs-menu-item (click)=\"flipHorizontal()\">\n <ngs-icon name=\"fluent:flip-horizontal-24-regular\" class=\"mr-2\"/>\n <span>Flip horizontally</span>\n </button>\n <button ngs-menu-item (click)=\"flipVertical()\">\n <ngs-icon name=\"fluent:flip-vertical-24-regular\" class=\"mr-2\"/>\n <span>Flip vertically</span>\n </button>\n </div>\n </ngs-menu>\n </ngs-toolbar-item>\n\n <ngs-toolbar-item>\n <button ngsButton reverse [ngsMenuTriggerFor]=\"fitMenu\">\n <span>Fit to</span>\n <ngs-icon name=\"fluent:chevron-down-20-regular\" class=\"size-5\"/>\n </button>\n\n <ngs-menu #fitMenu=\"ngsMenu\">\n <div class=\"min-w-[150px]\">\n <button ngs-menu-item (click)=\"fitToPage()\">\n <span>Fit to page</span>\n </button>\n <button ngs-menu-item (click)=\"fillPage()\">\n <span>Fill page</span>\n </button>\n </div>\n </ngs-menu>\n </ngs-toolbar-item>\n }\n\n <ngs-toolbar-item>\n <button ngsButton reverse (click)=\"openEffects()\">\n <span>Effects</span>\n </button>\n </ngs-toolbar-item>\n\n <ngs-toolbar-spacer/>\n\n <!-- <ngs-divider vertical/>-->\n\n <ngs-toolbar-item>\n <button ngsIconButton (click)=\"toggleLock()\">\n <ngs-icon [name]=\"layer['locked'] ? 'fluent:lock-closed-24-regular' : 'fluent:lock-open-24-regular'\"/>\n </button>\n </ngs-toolbar-item>\n\n </ngs-toolbar>\n}\n","import { Component, computed, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ImageDesignerService } from '../image-designer.service';\nimport { LayerConfig } from '../types';\nimport { Panel, PanelContent, PanelHeader } from '@ngstarter-ui/components/panel';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { IMAGE_DESIGNER } from '../tokens';\nimport { SlideToggle } from '@ngstarter-ui/components/slide-toggle';\nimport { Slider } from '@ngstarter-ui/components/slider';\nimport { SliderThumb } from '@ngstarter-ui/components/slider';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { FormsModule } from '@angular/forms';\nimport { Toolbar, ToolbarSpacer } from '@ngstarter-ui/components/toolbar';\n\nimport { ColorPicker } from '@ngstarter-ui/components/color-picker';\nimport { ColorPickerThumbnail } from '@ngstarter-ui/components/color-picker';\nimport { ColorPickerTriggerForDirective } from '@ngstarter-ui/components/color-picker';\n\n@Component({\n selector: 'ngs-effects',\n imports: [\n CommonModule,\n Panel,\n PanelHeader,\n PanelContent,\n Button,\n Icon,\n SlideToggle,\n Slider,\n SliderThumb,\n Input,\n FormsModule,\n Toolbar,\n ToolbarSpacer,\n ColorPicker,\n ColorPickerThumbnail,\n ColorPickerTriggerForDirective\n ],\n templateUrl: './effects.html',\n styleUrl: './effects.scss',\n})\nexport class Effects {\n private designerService = inject(ImageDesignerService);\n private imageDesigner = inject(IMAGE_DESIGNER);\n\n selectedLayerId = this.designerService.selectedLayerId;\n layers = this.designerService.layers;\n\n selectedLayer = computed(() => {\n const id = this.selectedLayerId();\n if (!id) return null;\n return this.layers().find(l => l.id === id) as LayerConfig;\n });\n\n private defaultThumb = 'https://picsum.photos/id/11/200/200';\n\n selectedLayerThumb = computed(() => {\n const id = this.selectedLayerId();\n if (!id) return this.defaultThumb;\n return this.designerService.getLayerThumbnail(id) || this.defaultThumb;\n });\n\n effects = computed(() => {\n const id = this.selectedLayerId();\n const thumb = this.selectedLayerThumb();\n if (!id) {\n return [\n { id: 'none', name: 'Original', thumb },\n { id: 'grayscale', name: 'Grayscale', thumb },\n { id: 'sepia', name: 'Sepia', thumb },\n { id: 'cold', name: 'Cold', thumb },\n { id: 'warm', name: 'Warm', thumb },\n ];\n }\n\n return [\n { id: 'none', name: 'Original', thumb: this.designerService.getLayerThumbnail(id, 'none') || thumb },\n { id: 'grayscale', name: 'Grayscale', thumb: this.designerService.getLayerThumbnail(id, 'grayscale') || thumb },\n { id: 'sepia', name: 'Sepia', thumb: this.designerService.getLayerThumbnail(id, 'sepia') || thumb },\n { id: 'cold', name: 'Cold', thumb: this.designerService.getLayerThumbnail(id, 'cold') || thumb },\n { id: 'warm', name: 'Warm', thumb: this.designerService.getLayerThumbnail(id, 'warm') || thumb },\n ];\n });\n\n adjustments = signal([\n { id: 'blur', name: 'Blur', min: 0, max: 20, step: 1, default: 0 },\n // { id: 'brightness', name: 'Brightness', min: -1, max: 1, step: 0.1, default: 0 },\n // { id: 'temperature', name: 'Temperature', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'contrast', name: 'Contrast', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'white', name: 'White', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'black', name: 'Black', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'vibrance', name: 'Vibrance', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'saturation', name: 'Saturation', min: -100, max: 100, step: 1, default: 0 },\n { id: 'border', name: 'Border', min: 0, max: 50, step: 1, default: 0 },\n { id: 'cornerRadius', name: 'Corner Radius', min: 0, max: 100, step: 1, default: 0 },\n { id: 'shadow', name: 'Shadow', isGroup: true, controls: [\n { id: 'shadowBlur', name: 'Blur', min: 0, max: 100, step: 1, default: 15 },\n { id: 'shadowOffsetX', name: 'Offset X', min: -100, max: 100, step: 1, default: 0 },\n { id: 'shadowOffsetY', name: 'Offset Y', min: -100, max: 100, step: 1, default: 0 },\n { id: 'shadowOpacity', name: 'Opacity', min: 0, max: 100, step: 1, default: 100 },\n { id: 'shadowColor', name: 'Color', type: 'color', default: '#000000' }\n ]}\n ]);\n\n async applyEffect(effectId: string) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { effect: effectId });\n }\n }\n\n async resetAll() {\n const id = this.selectedLayerId();\n if (id) {\n const config: any = { effect: 'none' };\n this.adjustments().forEach(adj => {\n config[`${adj.id}Enabled`] = false;\n if (adj.isGroup) {\n adj.controls.forEach(ctrl => {\n config[ctrl.id] = ctrl.default;\n });\n } else {\n config[adj.id] = adj.default;\n }\n });\n await this.designerService.updateLayer(id, config);\n }\n }\n\n async updateAdjustment(id: string, value: any) {\n const layerId = this.selectedLayerId();\n if (layerId) {\n await this.designerService.updateLayer(layerId, { [id]: value });\n }\n }\n\n async toggleAdjustment(id: string, enabled: boolean) {\n const layerId = this.selectedLayerId();\n if (layerId) {\n const config: any = { [`${id}Enabled`]: enabled };\n if (!enabled) {\n const adj = this.adjustments().find(a => a.id === id);\n if (adj) {\n if (adj.isGroup) {\n adj.controls.forEach(control => {\n config[control.id] = control.default;\n });\n } else {\n config[id] = adj.default;\n }\n }\n }\n await this.designerService.updateLayer(layerId, config);\n }\n }\n\n close() {\n this.imageDesigner.effectsPortal.set(null);\n }\n}\n","<ngs-panel class=\"h-full\">\n <ngs-panel-header class=\"border-b border-border flex items-center ps-4 pe-2\">\n <ngs-toolbar class=\"h-full\">\n <span class=\"font-medium\">Effects</span>\n <ngs-toolbar-spacer/>\n <button ngsButton=\"tonal\" (click)=\"resetAll()\" class=\"me-2 h-8 text-xs px-3\">\n Reset\n </button>\n <button ngsIconButton (click)=\"close()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </ngs-toolbar>\n </ngs-panel-header>\n <ngs-panel-content class=\"p-0 overflow-y-auto\">\n <div class=\"p-4\">\n <!-- Preset Effects -->\n <div class=\"flex gap-4 pb-6 scrollbar-hide flex-wrap\">\n @for (effect of effects() || []; track effect.id) {\n <button (click)=\"applyEffect(effect.id)\"\n class=\"flex flex-col items-center gap-2 group min-w-[80px]\">\n <div class=\"w-20 h-20 rounded-xl overflow-hidden border-2 transition-all group-hover:border-primary\"\n [class.border-primary]=\"(selectedLayer()?.['effect'] || 'none') === effect.id\"\n [class.border-transparent]=\"(selectedLayer()?.['effect'] || 'none') !== effect.id\">\n <img [src]=\"effect.thumb\" class=\"w-full h-full object-cover\" [alt]=\"effect.name\">\n </div>\n <span class=\"text-xs font-medium text-muted-foreground group-hover:text-foreground transition-colors\">\n {{ effect.name }}\n </span>\n </button>\n }\n </div>\n\n <!-- Adjustments -->\n <div class=\"flex flex-col gap-6\">\n @for (adj of adjustments() || []; track adj.id) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-sm font-medium\">{{ adj.name }}</span>\n <ngs-slide-toggle [checked]=\"selectedLayer()?.[adj.id + 'Enabled']\"\n (change)=\"toggleAdjustment(adj.id, $event.checked)\"/>\n </div>\n\n @if (selectedLayer()?.[adj.id + 'Enabled']) {\n <div class=\"flex flex-col gap-4\">\n @if (adj.isGroup) {\n @for (control of adj.controls || []; track control.id) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-xs text-muted-foreground\">{{ control.name }}</span>\n @if (control.type === 'color') {\n <button ngs-color-picker-thumbnail\n [color]=\"selectedLayer()?.[control.id] || control.default\"\n [ngsColorPickerTriggerFor]=\"colorPicker\"\n class=\"cursor-pointer border border-border rounded\"></button>\n <ng-template #colorPicker>\n <ngs-color-picker [ngModel]=\"selectedLayer()?.[control.id] || control.default\"\n (ngModelChange)=\"updateAdjustment(control.id, $event)\"/>\n </ng-template>\n } @else {\n <input ngsInput\n type=\"number\"\n class=\"w-16 h-8 text-center text-sm border border-border rounded-md bg-surface-container\"\n [ngModel]=\"selectedLayer()?.[control.id] ?? control.default\"\n (ngModelChange)=\"updateAdjustment(control.id, $event)\">\n }\n </div>\n @if (control.type !== 'color') {\n <ngs-slider [min]=\"control.min\"\n [max]=\"control.max\"\n [step]=\"control.step\">\n <input ngsSliderThumb\n [value]=\"selectedLayer()?.[control.id] ?? control.default\"\n (valueChange)=\"updateAdjustment(control.id, $event)\">\n </ngs-slider>\n }\n </div>\n }\n } @else {\n <div class=\"flex items-center gap-4\">\n @if (adj.id === 'border') {\n <button ngs-color-picker-thumbnail\n [color]=\"selectedLayer()?.['borderColor'] || selectedLayer()?.['fill'] || '#000000'\"\n [ngsColorPickerTriggerFor]=\"borderPicker\"\n class=\"cursor-pointer border border-border rounded\"></button>\n <ng-template #borderPicker>\n <ngs-color-picker [ngModel]=\"selectedLayer()?.['borderColor'] || selectedLayer()?.['fill'] || '#000000'\"\n (ngModelChange)=\"updateAdjustment('borderColor', $event)\"/>\n </ng-template>\n }\n <ngs-slider class=\"flex-1\"\n [min]=\"adj.min\"\n [max]=\"adj.max\"\n [step]=\"adj.step\">\n <input ngsSliderThumb\n [value]=\"selectedLayer()?.[adj.id] ?? adj.default\"\n (valueChange)=\"updateAdjustment(adj.id, $event)\">\n </ngs-slider>\n <input ngsInput\n type=\"number\"\n class=\"w-16 h-8 text-center text-sm border border-border rounded-md bg-surface-container\"\n [ngModel]=\"selectedLayer()?.[adj.id] ?? adj.default\"\n (ngModelChange)=\"updateAdjustment(adj.id, $event)\">\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </ngs-panel-content>\n</ngs-panel>\n","import { CdkDragDrop, CdkDropList, CdkDrag, CdkDragPlaceholder } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnDestroy,\n signal,\n viewChild,\n effect,\n PLATFORM_ID, OnInit, forwardRef, output, booleanAttribute, untracked,\n DestroyRef, numberAttribute\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { debounceTime, isObservable, Observable } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Panel, PanelContent, PanelHeader, PanelSidebar } from '@ngstarter-ui/components/panel';\nimport { Toolbar, ToolbarSpacer, ToolbarTitle } from '@ngstarter-ui/components/toolbar';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Divider } from '@ngstarter-ui/components/divider';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport {\n TabPanel,\n TabPanelAside,\n TabPanelAsideContentDirective,\n TabPanelContent,\n TabPanelItem, TabPanelItemIconDirective, TabPanelItemText, TabPanelNav\n} from '@ngstarter-ui/components/tab-panel';\nimport {\n UploadFileSelectedEvent,\n UploadTriggerDirective\n} from '@ngstarter-ui/components/upload';\nimport { List, ListItem, ListItemLine } from '@ngstarter-ui/components/list';\nimport { ProgressSpinner } from '@ngstarter-ui/components/spinner';\nimport { ImageDesignerService } from '../image-designer.service';\nimport {\n ElementConfig,\n LayerConfig,\n PhotosDataSource,\n ImageDesignerPhoto,\n AssetsDataSource,\n ImagePresetCategory,\n ImageSize,\n ImageDesignerUploadFn,\n ImageDesignerSnapshot\n} from '../types';\nimport { createDefaultPhotosDataSource } from '../default-photos-data-source';\nimport { FormsModule } from '@angular/forms';\nimport { Tab, TabGroup } from '@ngstarter-ui/components/tabs';\nimport { ColorSwitcher } from '@ngstarter-ui/components/color-switcher';\nimport {\n Accordion,\n ExpansionPanel,\n ExpansionPanelHeader,\n ExpansionPanelTitle\n} from '@ngstarter-ui/components/expansion';\nimport { FormField, Label } from '@ngstarter-ui/components/form-field';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { Option, Select } from '@ngstarter-ui/components/select';\nimport { ScrollbarArea } from '@ngstarter-ui/components/scrollbar-area';\nimport { SVG_PATTERNS } from '../patterns';\nimport { SVG_ELEMENTS } from '../elements';\nimport { PRESET_CATEGORIES } from '../presets';\nimport { CdkPortalOutlet, ComponentPortal, Portal } from '@angular/cdk/portal';\nimport { IMAGE_DESIGNER } from '../tokens';\nimport { Settings } from '../settings/settings';\nimport { Effects } from '../effects/effects';\n\n@Component({\n selector: 'ngs-image-designer',\n exportAs: 'ngsImageDesigner',\n imports: [\n Panel,\n PanelSidebar,\n PanelContent,\n PanelHeader,\n Toolbar,\n Button,\n ToolbarSpacer,\n Divider,\n Icon,\n ToolbarTitle,\n TabPanel,\n TabPanelAside,\n TabPanelAsideContentDirective,\n TabPanelContent,\n TabPanelItem,\n TabPanelItemIconDirective,\n TabPanelItemText,\n TabPanelNav,\n List,\n ListItem,\n ListItemLine,\n CdkDropList,\n CdkDrag,\n CdkDragPlaceholder,\n TabGroup,\n Tab,\n Accordion,\n ExpansionPanel,\n ExpansionPanelHeader,\n ExpansionPanelTitle,\n FormField,\n Label,\n Input,\n Select,\n Option,\n ColorSwitcher,\n ScrollbarArea,\n CdkPortalOutlet,\n UploadTriggerDirective,\n ProgressSpinner,\n FormsModule,\n ],\n providers: [\n ImageDesignerService,\n {\n provide: IMAGE_DESIGNER,\n useExisting: forwardRef(() => ImageDesigner)\n }\n ],\n templateUrl: './image-designer.html',\n styleUrl: './image-designer.scss',\n host: {\n 'class': 'ngs-image-designer',\n '(keydown)': 'onKeyDown($event)'\n }\n})\nexport class ImageDesigner implements AfterViewInit, OnDestroy, OnInit {\n private readonly http = inject(HttpClient);\n private readonly destroyRef = inject(DestroyRef);\n designerService = inject(ImageDesignerService);\n isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n readonly canvasContainer = viewChild<ElementRef<HTMLDivElement>>('canvasContainer');\n\n title = input('');\n imageSize = input({\n width: 700,\n height: 400\n });\n defaultFont = input<string>('Inter');\n scale = input(1);\n minScale = input(0.1);\n maxScale = input(3);\n showGuidelines = input(true);\n snapToShapes = input(true);\n snapToStageCenter = input(true);\n snapToStageBorders = input(true);\n guidelineColor = input('blue');\n snapRange = input(5);\n showDownloadButton = input(true, {\n transform: booleanAttribute\n });\n uploadFn = input<ImageDesignerUploadFn>();\n snapshot = input<ImageDesignerSnapshot>();\n snapshotChanged = output<ImageDesignerSnapshot>();\n photosDataSource = input<PhotosDataSource>();\n assetsDataSource = input<AssetsDataSource>();\n historyLimit = input(50, {\n transform: numberAttribute\n });\n\n activeItemId = signal<string | null>('text');\n elements = signal<ElementConfig[]>(SVG_ELEMENTS);\n photos = signal<ImageDesignerPhoto[]>([]);\n assets = signal<ImageDesignerPhoto[]>([]);\n photosFilter = signal('');\n assetsFilter = signal('');\n uploadedImages = signal<ImageDesignerPhoto[]>([]);\n isUploading = signal(false);\n uploadPreview = signal<string | null>(null);\n photosPage = signal(1);\n assetsPage = signal(1);\n isLoadingPhotos = signal(false);\n isLoadingAssets = signal(false);\n hasMoreAssets = signal(true);\n hasMorePhotos = signal(true);\n\n resizeWidth = signal(0);\n resizeHeight = signal(0);\n resizeUnit = signal('px');\n presetCategories = signal<ImagePresetCategory[]>(PRESET_CATEGORIES);\n\n presetColors = signal<string[]>([\n // Basic & Neutral\n '#000000', '#7a7a7a', '#ffffff',\n // Reds & Pinks\n '#f44336', '#d32f2f', '#ff5252',\n '#e91e63', '#c2185b', '#ff4081',\n // Purples & Deep Purples\n '#9c27b0', '#7b1fa2', '#e040fb',\n '#673ab7', '#512da8', '#7c4dff',\n // Blues\n '#3f51b5', '#303f9f', '#536dfe',\n '#2196f3', '#1976d2', '#448aff',\n '#03a9f4', '#0288d1', '#40c4ff',\n // Teals & Cyans\n '#00bcd4', '#0097a7', '#18ffff',\n '#009688', '#00796b', '#64ffda',\n // Greens\n '#4caf50', '#388e3c', '#00c853',\n '#8bc34a', '#689f38', '#b2ff59',\n '#cddc39', '#afb42b', '#eeff41',\n // Yellows & Oranges\n '#ffeb3b', '#fbc02d', '#ffff00',\n '#ffc107', '#ffa000', '#ffc400',\n '#ff9800', '#f57c00', '#ff9100',\n '#ff5722', '#e64a19', '#ff3d00',\n // Browns\n '#795548', '#5d4037', '#8d6e63',\n // Blue Grays & Grays\n '#607d8b', '#455a64', '#78909c',\n ]);\n background = signal([]);\n resize = signal([]);\n\n\n displayScale = this.designerService.scale;\n zoomPercentage = computed(() => (this.displayScale() * 100).toFixed(0));\n\n layersFromService = this.designerService.layers;\n selectedLayerId = this.designerService.selectedLayerId;\n\n presetPatterns = signal([\n ...SVG_PATTERNS.map(svg => `data:image/svg+xml;base64,${btoa(svg)}`),\n ]);\n\n presetGradients = computed(() => {\n const width = this.resizeWidth();\n const height = this.resizeHeight();\n const isLandscape = width >= height;\n\n const baseColors = [\n // --- VIBRANT & ENERGETIC ---\n ['#ff9a9e', '#fecfef'], ['#f093fb', '#f5576c'], ['#4facfe', '#00f2fe'],\n ['#43e97b', '#38f8d4'], ['#fa709a', '#fee140'], ['#30cfd0', '#330867'],\n ['#ff0844', '#ffb199'], ['#ff8177', '#ff867a'], ['#f83600', '#f9d423'],\n ['#b721ff', '#21d4fd'], ['#00dbde', '#fc00ff'], ['#8ec5fc', '#e0c3fc'],\n ['#6a11cb', '#2575fc'], ['#09203f', '#537895'], ['#00c6fb', '#005bea'],\n ['#ffecd2', '#fcb69f'], ['#ff758c', '#ff7eb3'], ['#868f96', '#596164'],\n ['#0ba360', '#3cba92'], ['#13547a', '#80d0c7'], ['#6a85b6', '#bac8e0'],\n ['#434343', '#000000'], ['#92fe9d', '#00c9ff'], ['#f40076', '#df98fa'],\n ['#f067b4', '#81ffef'], ['#ff4b1f', '#ff9068'], ['#16a085', '#f4d03f'],\n ['#00d2ff', '#3a7bd5'], ['#f7971e', '#ffd200'], ['#f12711', '#f5af19'],\n ['#12c2e9', '#c471ed'], ['#f64f59', '#12c2e9'], ['#74ebd5', '#acb6e5'],\n ['#ff9966', '#ff5e62'], ['#00b09b', '#96c93d'], ['#654ea3', '#eaafc8'],\n ['#4e54c8', '#8f94fb'], ['#ff0099', '#493240'], ['#8e2de2', '#4a00e0'],\n ['#3a1c71', '#d76d77'], ['#1f4037', '#99f2c8'], ['#56ab2f', '#a8e063'],\n ['#f11712', '#0099f7'], ['#11998e', '#38ef7d'], ['#fc466b', '#3f5efb'],\n ['#c94b4b', '#4b134f'], ['#00b4db', '#0083b0'], ['#7b4397', '#dc2430'],\n ['#1e3c72', '#2a5298'], ['#2c3e50', '#fd746c'], ['#f00000', '#dc281e'],\n ['#ff512f', '#dd2476'], ['#ff5f6d', '#ffc371'], ['#114357', '#f29492'],\n ['#40e0d0', '#ff8c00'], ['#ff0080', '#ff8c00'], ['#000046', '#1cb5e0'],\n ['#642b73', '#c6426e'], ['#cb2d3e', '#ef473a'], ['#5614b0', '#dbd65d'],\n ['#00c3ff', '#ffff1c'], ['#1d2b64', '#f8cdda'], ['#1a2a6c', '#b21f1f'],\n ['#cc2b5e', '#753a88'], ['#2193b0', '#6dd5ed'], ['#ee9ca7', '#ffdde1'],\n ['#e65100', '#fdb813'], ['#360033', '#0b8793'], ['#141e30', '#243b55'],\n ['#2c3e50', '#4ca1af'], ['#ff512f', '#f06292'], ['#70e1f5', '#ffd194'],\n ['#1c92d2', '#f2fcfe'], ['#3ca55c', '#b5ac49'], ['#4b6cb7', '#182848'],\n ['#00bf8f', '#001510'], ['#517fa4', '#243949'], ['#1e130c', '#9a8478'],\n ['#000000', '#533440'], ['#304352', '#d7d2cc'], ['#83a4d4', '#b6fbff'],\n ['#4568dc', '#b06ab3'], ['#ef3b36', '#ffffff'], ['#000000', '#434343'],\n ['#0f2027', '#203a43'], ['#373b44', '#4286f4'], ['#8e9eab', '#eef2f3']\n ];\n\n return baseColors.map(([c1, c2]) => ({\n x0: 0,\n y0: 0,\n x1: isLandscape ? width : 0,\n y1: isLandscape ? 0 : height,\n colorStops: [0, c1, 1, c2],\n css: `linear-gradient(${isLandscape ? '90deg' : '180deg'}, ${c1}, ${c2})`\n }));\n });\n\n settingsPortal = signal<Portal<any> | null>(null);\n effectsPortal = signal<Portal<any> | null>(null);\n\n openEffects() {\n this.effectsPortal.set(new ComponentPortal(Effects));\n }\n\n constructor() {\n this.resizeWidth.set(this.imageSize().width);\n this.resizeHeight.set(this.imageSize().height);\n\n effect(() => {\n const size = this.imageSize();\n untracked(() => {\n this.resizeWidth.set(size.width);\n this.resizeHeight.set(size.height);\n });\n });\n\n this.designerService.change$.pipe(\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => {\n this.snapshotChanged.emit(this.designerService.getSnapshot());\n });\n\n effect(() => {\n this.designerService.setScale(this.scale());\n });\n effect(() => {\n this.designerService.setMinMaxScale(this.minScale(), this.maxScale());\n });\n effect(() => {\n this.designerService.updateSnapSettings({\n showGuidelines: this.showGuidelines(),\n snapToShapes: this.snapToShapes(),\n snapToStageCenter: this.snapToStageCenter(),\n snapToStageBorders: this.snapToStageBorders(),\n guidelineColor: this.guidelineColor(),\n snapRange: this.snapRange()\n });\n });\n\n effect(() => {\n const selectedId = this.selectedLayerId();\n if (selectedId) {\n this.settingsPortal.set(new ComponentPortal(Settings));\n } else {\n this.settingsPortal.set(null);\n this.effectsPortal.set(null);\n }\n });\n\n effect(() => {\n if (this.activeItemId() === 'photos' && this.photos().length === 0 && !this.isLoadingPhotos() && this.hasMorePhotos()) {\n this.loadPhotos();\n }\n });\n\n effect(() => {\n if ((this.activeItemId() === 'assets' || this.activeItemId() === 'upload') && this.assets().length === 0 && !this.isLoadingAssets() && this.hasMoreAssets()) {\n this.loadAssets();\n }\n });\n\n effect(() => {\n this.photosFilter();\n untracked(() => {\n if (this.activeItemId() === 'photos') {\n this.photos.set([]);\n this.photosPage.set(1);\n this.hasMorePhotos.set(true);\n this.loadPhotos();\n }\n });\n });\n\n effect(() => {\n this.assetsFilter();\n untracked(() => {\n if (this.activeItemId() === 'assets' || this.activeItemId() === 'upload') {\n this.assets.set([]);\n this.assetsPage.set(1);\n this.hasMoreAssets.set(true);\n this.loadAssets();\n }\n });\n });\n\n effect(() => {\n const snapshot = this.snapshot();\n\n if (snapshot && this.designerService.isInitialized()) {\n const nextVersion = snapshot.version ?? 0;\n const currentVersion = this.designerService.currentSnapshotVersion;\n\n if (nextVersion !== currentVersion) {\n console.log(`Snapshot version: ${nextVersion}, Designer version: ${currentVersion}`);\n console.log(`Snapshot version changed, loading new snapshot`);\n this.designerService.loadSnapshot(snapshot, true);\n }\n }\n });\n }\n\n ngOnInit() {\n this.designerService.historyLimit = this.historyLimit();\n if (this.assets().length > 0) {\n this.uploadedImages.set([...this.assets()]);\n }\n }\n\n onFileSelected(event: UploadFileSelectedEvent) {\n if (event.files.length > 0) {\n const file = event.files[0];\n const uploadFn = this.uploadFn();\n\n if (uploadFn) {\n const result = uploadFn(file);\n this.isUploading.set(true);\n\n const handleSuccess = async (result: any) => {\n let photo: ImageDesignerPhoto;\n if (typeof result === 'string') {\n const dimensions = await this.getImageDimensions(result);\n photo = {\n id: Math.random().toString(36).substring(7),\n url: result,\n width: dimensions.width,\n height: dimensions.height\n };\n } else {\n photo = result;\n }\n this.uploadedImages.update(images => [photo, ...images]);\n this.isUploading.set(false);\n };\n\n const handleError = () => {\n this.isUploading.set(false);\n };\n\n if (isObservable(result)) {\n result.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: handleSuccess,\n error: handleError\n });\n } else if (result instanceof Promise) {\n result.then(handleSuccess).catch(handleError);\n } else {\n handleSuccess(result);\n }\n } else {\n this.fakeUpload(file);\n }\n }\n }\n\n private fakeUpload(file: File) {\n const reader = new FileReader();\n reader.onload = async (e: any) => {\n const url = e.target.result;\n const dimensions = await this.getImageDimensions(url);\n const photo: ImageDesignerPhoto = {\n id: Math.random().toString(36).substring(7),\n name: file.name,\n url: url,\n width: dimensions.width,\n height: dimensions.height\n };\n this.uploadedImages.update(images => [photo, ...images]);\n };\n reader.readAsDataURL(file);\n }\n\n private getImageDimensions(url: string): Promise<{ width: number, height: number }> {\n return new Promise(resolve => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.onerror = () => {\n resolve({ width: 0, height: 0 });\n };\n img.src = url;\n });\n }\n\n async addUploadedImage(photo: ImageDesignerPhoto, x = 0, y = 0) {\n const canvasWidth = this.resizeWidth();\n const canvasHeight = this.resizeHeight();\n const url = photo.url;\n\n let width = canvasWidth;\n let height = canvasWidth * (photo.height / photo.width);\n\n if (height > canvasHeight) {\n height = canvasHeight;\n width = height * (photo.width / photo.height);\n }\n\n const id = await this.designerService.addLayer({\n type: 'image',\n src: url,\n name: 'Uploaded Image',\n width,\n height,\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n\n loadAssets() {\n const dataSource = this.assetsDataSource();\n if (!dataSource || this.isLoadingAssets() || !this.hasMoreAssets()) {\n return;\n }\n\n this.isLoadingAssets.set(true);\n\n const pageSize = 30;\n const page = this.assetsPage();\n const startRow = (page - 1) * pageSize;\n const endRow = page * pageSize;\n\n dataSource.getItems({\n startRow,\n endRow,\n page,\n pageSize,\n filterModel: this.assetsFilter(),\n successCallback: (data: ImageDesignerPhoto[], lastRow?: number) => {\n this.assets.update(assets => [...assets, ...data]);\n if (data.length === 0) {\n this.hasMoreAssets.set(false);\n }\n this.isLoadingAssets.set(false);\n },\n failCallback: () => {\n this.isLoadingAssets.set(false);\n }\n });\n }\n\n onAssetsScroll(event: any) {\n const element = event.target;\n if (element.scrollHeight - element.scrollTop <= element.clientHeight + 50) {\n if (!this.isLoadingAssets() && this.hasMoreAssets()) {\n this.assetsPage.update(p => p + 1);\n this.loadAssets();\n }\n }\n }\n\n\n loadPhotos() {\n if (this.isLoadingPhotos() || !this.hasMorePhotos()) return;\n this.isLoadingPhotos.set(true);\n\n const ds = this.photosDataSource() || this.defaultPhotosDataSource;\n const page = this.photosPage();\n const pageSize = 30;\n\n ds.getItems({\n startRow: (page - 1) * pageSize,\n endRow: page * pageSize,\n page: page,\n pageSize: pageSize,\n filterModel: this.photosFilter(),\n successCallback: (data: ImageDesignerPhoto[], lastRow?: number) => {\n this.photos.update(photos => [...photos, ...data]);\n if (data.length === 0) {\n this.hasMorePhotos.set(false);\n }\n this.isLoadingPhotos.set(false);\n },\n failCallback: () => {\n this.isLoadingPhotos.set(false);\n }\n });\n }\n\n private readonly defaultPhotosDataSource = createDefaultPhotosDataSource(this.http);\n\n onPhotosScroll(event: Event) {\n const target = event.target as HTMLElement;\n if (target && target.scrollHeight - target.scrollTop <= target.clientHeight + 100) {\n if (!this.isLoadingPhotos() && this.hasMorePhotos()) {\n this.photosPage.update(p => p + 1);\n this.loadPhotos();\n }\n }\n }\n\n async addImage(photo: ImageDesignerPhoto, x = 0, y = 0) {\n const canvasWidth = this.resizeWidth();\n const canvasHeight = this.resizeHeight();\n\n let width = canvasWidth;\n let height = canvasWidth * (photo.height / photo.width);\n\n if (height > canvasHeight) {\n height = canvasHeight;\n width = height * (photo.width / photo.height);\n }\n\n const id = await this.designerService.addLayer({\n type: 'image',\n src: photo.url,\n name: photo.name,\n width,\n height,\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n ngAfterViewInit() {\n if (!this.isBrowser) {\n return;\n }\n const container = this.canvasContainer()?.nativeElement;\n if (container) {\n console.log('Initializing ImageDesignerService in requestAnimationFrame');\n requestAnimationFrame(() => {\n if (!this.canvasContainer()) {\n console.warn('Canvas container disappeared before initialization');\n return;\n }\n const currentContainer = this.canvasContainer()!.nativeElement;\n\n // Final check before init, if dimensions are 0, wait a bit more\n if (currentContainer.offsetWidth === 0 || currentContainer.offsetHeight === 0) {\n console.warn('Container dimensions are still 0, retrying init');\n setTimeout(() => this.ngAfterViewInit(), 250);\n return;\n }\n\n console.log('Initializing ImageDesignerService with container:', currentContainer);\n console.log('Container dimensions in rAF:', currentContainer.offsetWidth, 'x', currentContainer.offsetHeight);\n this.designerService.init(\n currentContainer,\n this.imageSize(),\n this.defaultFont(),\n this.scale(),\n this.minScale(),\n this.maxScale()\n ).then(() => {\n console.log('ImageDesignerService initialization completed');\n });\n });\n } else {\n console.warn('Canvas container not found during ngAfterViewInit');\n }\n }\n\n ngOnDestroy() {\n this.designerService.destroy();\n }\n\n toggleAside() {\n this.activeItemId.set(this.activeItemId() ? null : 'text');\n }\n\n zoomIn() {\n this.designerService.zoomIn();\n }\n\n zoomOut() {\n this.designerService.zoomOut();\n }\n\n undo() {\n this.designerService.undo();\n }\n\n redo() {\n this.designerService.redo();\n }\n\n resetZoom() {\n this.designerService.setScale(1);\n }\n\n onWheel(event: WheelEvent) {\n if (event.metaKey || event.ctrlKey) {\n // preventDefault is not allowed during event replay (e.g. during hydration).\n // EventPhase.REPLAY is 101 in Angular.\n if ((event as any).eventPhase !== 101) {\n event.preventDefault();\n }\n if (event.deltaY < 0) {\n this.zoomIn();\n } else {\n this.zoomOut();\n }\n }\n }\n\n onKeyDown(event: KeyboardEvent) {\n const activeElement = document.activeElement;\n const isInput = activeElement instanceof HTMLInputElement ||\n activeElement instanceof HTMLTextAreaElement ||\n (activeElement instanceof HTMLElement && activeElement.isContentEditable);\n\n if (isInput) {\n return;\n }\n\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight' || event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault();\n const step = event.shiftKey ? 10 : 1;\n\n if (event.key === 'ArrowLeft') {\n this.designerService.moveSelectedLayers(-step, 0);\n } else if (event.key === 'ArrowRight') {\n this.designerService.moveSelectedLayers(step, 0);\n } else if (event.key === 'ArrowUp') {\n this.designerService.moveSelectedLayers(0, -step);\n } else if (event.key === 'ArrowDown') {\n this.designerService.moveSelectedLayers(0, step);\n }\n }\n\n if (event.key === 'Delete' || event.key === 'Backspace') {\n this.designerService.deleteSelectedLayers();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'z') {\n event.preventDefault();\n if (event.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'y') {\n event.preventDefault();\n this.redo();\n }\n }\n\n selectLayer(id: string | null | undefined) {\n this.designerService.selectLayer(id as string | null);\n }\n\n toggleLayerVisibility(id: string, event: MouseEvent) {\n event.stopPropagation();\n this.designerService.toggleLayerVisibility(id);\n }\n\n toggleLayerLock(id: string, event: MouseEvent) {\n event.stopPropagation();\n this.designerService.toggleLayerLock(id);\n }\n\n deleteLayer(id: string, event: MouseEvent) {\n event.stopPropagation();\n this.designerService.deleteLayer(id);\n }\n\n onDragOver(event: DragEvent) {\n if (event.dataTransfer?.types.includes('application/x-ngs-text-type') ||\n event.dataTransfer?.types.includes('application/x-ngs-image-data')) {\n event.preventDefault();\n event.dataTransfer.dropEffect = 'copy';\n }\n }\n\n onTextDragStart(event: DragEvent, type: string) {\n event.dataTransfer?.setData('application/x-ngs-text-type', type);\n\n if (event.target instanceof HTMLElement) {\n const el = event.target;\n el.classList.add('is-dragging');\n setTimeout(() => el.classList.remove('is-dragging'), 0);\n }\n }\n\n onImageDragStart(event: DragEvent, photo: ImageDesignerPhoto | ElementConfig) {\n const data = 'url' in photo\n ? { url: photo.url, name: photo.name, width: photo.width, height: photo.height, type: 'image' }\n : { url: photo.data, name: photo.name, width: 100, height: 100, type: 'shape' };\n\n event.dataTransfer?.setData('application/x-ngs-image-data', JSON.stringify(data));\n\n if (event.target instanceof HTMLElement) {\n const el = event.target;\n el.classList.add('is-dragging');\n setTimeout(() => el.classList.remove('is-dragging'), 0);\n }\n }\n\n onDrop(event: DragEvent) {\n const textType = event.dataTransfer?.getData('application/x-ngs-text-type');\n const imageDataStr = event.dataTransfer?.getData('application/x-ngs-image-data');\n\n if (!textType && !imageDataStr) return;\n\n event.preventDefault();\n\n const container = this.canvasContainer()?.nativeElement;\n if (!container) return;\n\n const rect = container.getBoundingClientRect();\n const scale = this.designerService.scale();\n\n // Calculate position relative to the stage center\n const canvasRect = this.designerService['canvasRect'];\n if (!canvasRect) return;\n\n const centerX = canvasRect.x();\n const centerY = canvasRect.y();\n\n const x = (event.clientX - rect.left - centerX) / scale;\n const y = (event.clientY - rect.top - centerY) / scale;\n\n if (textType) {\n switch (textType) {\n case 'header':\n this.addHeader(x, y);\n break;\n case 'subheader':\n this.addSubheader(x, y);\n break;\n case 'body':\n this.addBodyText(x, y);\n break;\n }\n } else if (imageDataStr) {\n try {\n const data = JSON.parse(imageDataStr);\n if (data.type === 'image') {\n this.addImage({\n url: data.url,\n name: data.name,\n width: data.width,\n height: data.height,\n id: ''\n }, x, y);\n } else if (data.type === 'shape') {\n this.addShape({\n name: data.name,\n data: data.url\n }, x, y);\n }\n } catch (e) {\n console.error('Failed to parse image data', e);\n }\n }\n }\n\n drop(event: CdkDragDrop<LayerConfig[]>) {\n if (event.previousIndex !== event.currentIndex) {\n this.designerService.reorderLayers(event.previousIndex, event.currentIndex);\n }\n }\n\n download() {\n this.designerService.downloadImage();\n }\n\n getBase64Image(): string | undefined {\n return this.designerService.getBase64Image();\n }\n\n getLayerIcon(type: string | undefined): string {\n const iconMap: Record<string, string> = {\n 'text': 'fluent:text-field-24-regular',\n 'image': 'fluent:image-24-regular',\n 'pattern': 'fluent:grid-dots-24-regular',\n };\n return iconMap[type || ''] || 'fluent:shape-subtract-24-regular';\n }\n\n selectedFontSize = signal(24);\n selectedFontWeight = signal(400);\n\n async addHeader(x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'text',\n text: 'Add a heading',\n fontSize: 40,\n fontWeight: 'bold',\n fontFamily: 'Inter',\n name: 'Heading',\n align: 'center',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n async addSubheader(x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'text',\n text: 'Add a subheading',\n fontSize: 24,\n fontWeight: '600',\n fontFamily: 'Inter',\n name: 'Subheading',\n align: 'center',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n async addBodyText(x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'text',\n text: 'Add body text',\n fontSize: 16,\n fontFamily: 'Inter',\n name: 'Body text',\n align: 'center',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n async addShape(shape: ElementConfig, x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'shape',\n name: shape.name,\n data: shape.data,\n width: 100,\n height: 100,\n fill: '#64748b',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n setGradient(gradient: any) {\n this.designerService.setCanvasBackground({\n x0: gradient.x0,\n y0: gradient.y0,\n x1: gradient.x1,\n y1: gradient.y1,\n colorStops: gradient.colorStops\n });\n }\n\n setColor(color: string) {\n this.designerService.setCanvasBackground(color);\n }\n\n async addPattern(url: string) {\n const id = await this.designerService.addLayer({\n type: 'pattern',\n name: 'Pattern',\n patternImage: url,\n width: this.resizeWidth(),\n height: this.resizeHeight(),\n x: 0,\n y: 0\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n applyResize() {\n this.designerService.updateSize(this.canvasContainer()!.nativeElement, {\n width: this.resizeWidth(),\n height: this.resizeHeight()\n }, true, true);\n }\n\n selectPreset(preset: { width: number, height: number }) {\n this.resizeWidth.set(preset.width);\n this.resizeHeight.set(preset.height);\n this.applyResize();\n }\n}\n","<ngs-panel class=\"h-full\">\n <ngs-panel-sidebar class=\"border-r border-border h-full\">\n <ngs-tab-panel hideContentIfTabNotSelected [activeItemId]=\"activeItemId()\" class=\"h-full\">\n <ngs-tab-panel-content>\n <ngs-tab-panel-nav>\n <ngs-tab-panel-item for=\"text\" (click)=\"activeItemId.set('text')\">\n <ngs-icon name=\"fluent:text-field-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Text</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"photos\" (click)=\"activeItemId.set('photos')\">\n <ngs-icon name=\"fluent:image-copy-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Photos</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"elements\" (click)=\"activeItemId.set('elements')\">\n <ngs-icon name=\"fluent:shape-subtract-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Elements</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"upload\" (click)=\"activeItemId.set('upload')\">\n <ngs-icon name=\"fluent:arrow-upload-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Upload</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"background\" (click)=\"activeItemId.set('background')\">\n <ngs-icon name=\"fluent:grid-dots-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Background</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"layers\" (click)=\"activeItemId.set('layers')\">\n <ngs-icon name=\"fluent:layer-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Layers</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"resize\" (click)=\"activeItemId.set('resize')\">\n <ngs-icon name=\"fluent:resize-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Resize</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n </ngs-tab-panel-nav>\n </ngs-tab-panel-content>\n <ngs-tab-panel-aside class=\"border-s border-border\">\n <ng-template ngsTabPanelAsideContent=\"text\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Text</ngs-panel-header>\n <ngs-panel-content class=\"p-4 flex flex-col gap-4\">\n <div class=\"grid grid-cols-1 gap-4 mt-2\">\n <button (click)=\"addHeader()\"\n draggable=\"true\"\n (dragstart)=\"onTextDragStart($event, 'header')\"\n class=\"w-full text-left p-4 border border-border rounded-lg hover:bg-surface-container transition-colors\">\n <div class=\"text-3xl font-bold pointer-events-none\">Add a heading</div>\n </button>\n <button (click)=\"addSubheader()\"\n draggable=\"true\"\n (dragstart)=\"onTextDragStart($event, 'subheader')\"\n class=\"w-full text-left p-3 border border-border rounded-lg hover:bg-surface-container transition-colors\">\n <div class=\"text-xl font-semibold pointer-events-none\">Add a subheading</div>\n </button>\n <button (click)=\"addBodyText()\"\n draggable=\"true\"\n (dragstart)=\"onTextDragStart($event, 'body')\"\n class=\"w-full text-left p-2 border border-border rounded-lg hover:bg-surface-container transition-colors\">\n <div class=\"text-base pointer-events-none\">Add body text</div>\n </button>\n </div>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"photos\">\n <ngs-panel class=\"h-full flex flex-col\">\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">\n<!-- <ngs-form-field class=\"w-full\" subscriptHiddenIfEmpty>-->\n<!-- <ngs-icon name=\"fluent:search-24-regular\" ngsIconPrefix/>-->\n<!-- <input type=\"text\"-->\n<!-- ngsInput-->\n<!-- placeholder=\"Search photos\"-->\n<!-- [ngModel]=\"photosFilter()\"-->\n<!-- (ngModelChange)=\"photosFilter.set($event)\"/>-->\n<!-- </ngs-form-field>-->\n Photos\n </ngs-panel-header>\n <ngs-panel-content class=\"relative flex-1 p-0 overflow-hidden\">\n <ngs-scrollbar-area (scrolled)=\"onPhotosScroll($event)\" class=\"h-full\">\n <div class=\"p-4\">\n <div class=\"masonry-grid\">\n @for (photo of photos(); track photo.id) {\n <button (click)=\"addImage(photo)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, photo)\"\n [style.aspect-ratio]=\"photo.width + '/' + photo.height\"\n class=\"border border-border rounded-lg overflow-hidden hover:ring-2 hover:ring-primary transition-all bg-surface-container\">\n <img [src]=\"photo.thumbUrl || photo.url\"\n [alt]=\"photo.name\"\n class=\"w-full h-auto block pointer-events-none\"/>\n </button>\n }\n </div>\n @if (isLoadingPhotos()) {\n <div class=\"flex justify-center p-4\">\n <ngs-progress-spinner diameter=\"32\"/>\n </div>\n }\n @if (photos().length === 0 && !isLoadingPhotos()) {\n <div class=\"text-center p-4 text-sm text-neutral-500\">\n No photos found\n </div>\n }\n </div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"elements\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Elements</ngs-panel-header>\n <ngs-panel-content class=\"p-4 overflow-y-auto\">\n <div class=\"grid grid-cols-3 gap-3\">\n @for (element of elements(); track element.name) {\n <button (click)=\"addShape(element)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, element)\"\n class=\"aspect-square p-2 border border-border rounded-lg hover:bg-surface-container\n transition-colors flex items-center justify-center\">\n <img [src]=\"element.data\" [alt]=\"element.name\"\n class=\"max-w-full max-h-full object-contain pointer-events-none\"/>\n </button>\n }\n </div>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"upload\">\n <ngs-panel class=\"h-full flex flex-col\">\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">\n <ngs-toolbar>\n <div>Upload</div>\n <ngs-toolbar-spacer/>\n <button ngsButton=\"filled\"\n ngsUploadTrigger\n [accept]=\"'image/*'\"\n (fileSelected)=\"onFileSelected($event)\"\n [loading]=\"isUploading()\">\n <ngs-icon name=\"fluent:arrow-upload-24-regular\"/>\n Add Image\n </button>\n </ngs-toolbar>\n </ngs-panel-header>\n <ngs-panel-content>\n @if (uploadedImages().length > 0 || assets().length > 0) {\n <ngs-scrollbar-area (scrolled)=\"onAssetsScroll($event)\">\n <div class=\"p-4 flex flex-col gap-4 min-h-full\">\n @if (isUploading() || uploadPreview()) {\n <div class=\"relative aspect-video border border-border rounded-lg overflow-hidden bg-surface-container\">\n @if (uploadPreview()) {\n <img [src]=\"uploadPreview()\" class=\"w-full h-full object-contain\" alt=\"Preview\"/>\n }\n @if (isUploading()) {\n <div class=\"absolute inset-0 bg-black/20 flex items-center justify-center backdrop-blur-[2px]\">\n <div class=\"flex flex-col items-center gap-2\">\n <ngs-progress-spinner diameter=\"32\" color=\"white\"/>\n <span class=\"text-xs font-medium text-white\">Uploading...</span>\n </div>\n </div>\n }\n </div>\n }\n\n @if (uploadedImages().length > 0) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"text-sm font-semibold\">Your Uploads</div>\n <div class=\"masonry-grid\">\n @for (photo of uploadedImages(); track $index) {\n <button (click)=\"addUploadedImage(photo)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, photo)\"\n [style.aspect-ratio]=\"photo.width + '/' + photo.height\"\n class=\"border border-border rounded-lg overflow-hidden hover:ring-2\n hover:ring-primary transition-all bg-surface-container\">\n <img [src]=\"photo.url\" class=\"w-full h-auto block pointer-events-none\" alt=\"Uploaded image\"/>\n </button>\n }\n </div>\n </div>\n }\n\n @if (assets().length > 0) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"text-sm font-semibold\">Assets</div>\n <div class=\"masonry-grid\">\n @for (asset of assets(); track asset.id) {\n <button (click)=\"addImage(asset)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, asset)\"\n [style.aspect-ratio]=\"asset.width + '/' + asset.height\"\n class=\"border border-border rounded-lg overflow-hidden hover:ring-2\n hover:ring-primary transition-all bg-surface-container\">\n <img [src]=\"asset.thumbUrl || asset.url\"\n [alt]=\"asset.name\"\n class=\"w-full h-auto block pointer-events-none\"/>\n </button>\n }\n </div>\n @if (isLoadingAssets()) {\n <div class=\"flex justify-center p-4\">\n <ngs-progress-spinner diameter=\"32\"/>\n </div>\n }\n </div>\n }\n </div>\n </ngs-scrollbar-area>\n }\n\n @if (uploadedImages().length === 0 && assets().length === 0 && !isLoadingAssets()) {\n <div class=\"h-full flex items-center justify-center\">\n <div class=\"text-sm text-neutral-500\">No images uploaded yet.</div>\n </div>\n }\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"background\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Background</ngs-panel-header>\n <ngs-panel-content>\n <ngs-tab-group animationDuration=\"0\" class=\"h-full\">\n <ngs-tab label=\"Color\">\n <div class=\"absolute inset-0\">\n <ngs-scrollbar-area>\n <div class=\"p-4\">\n <ngs-accordion [multi]=\"false\">\n <ngs-expansion-panel [expanded]=\"true\">\n <ngs-expansion-panel-header>\n <ngs-expansion-panel-title>Colors</ngs-expansion-panel-title>\n </ngs-expansion-panel-header>\n <div class=\"py-2\">\n <ngs-color-switcher [colors]=\"presetColors()\" (colorChange)=\"setColor($event)\"/>\n </div>\n </ngs-expansion-panel>\n <ngs-expansion-panel>\n <ngs-expansion-panel-header>\n <ngs-expansion-panel-title>Gradients</ngs-expansion-panel-title>\n </ngs-expansion-panel-header>\n <div class=\"grid grid-cols-3 gap-3 py-2\">\n @for (gradient of presetGradients(); track $index) {\n <button (click)=\"setGradient(gradient)\"\n [style.background]=\"gradient.css\"\n class=\"aspect-[16/6.75] w-full rounded-lg border border-border hover:ring-2 hover:ring-primary transition-all\">\n </button>\n }\n </div>\n </ngs-expansion-panel>\n </ngs-accordion>\n </div>\n </ngs-scrollbar-area>\n </div>\n </ngs-tab>\n <ngs-tab label=\"Patterns\">\n <div class=\"absolute inset-0\">\n <ngs-scrollbar-area>\n <div class=\"p-4\">\n <div class=\"grid grid-cols-3 gap-3\">\n @for (pattern of presetPatterns(); track $index) {\n <button (click)=\"addPattern(pattern)\"\n class=\"aspect-square w-full rounded-lg border border-border hover:ring-2 hover:ring-primary transition-all overflow-hidden\">\n <img [src]=\"pattern\" class=\"w-full h-full object-cover\" alt=\"pattern\">\n </button>\n }\n </div>\n </div>\n </ngs-scrollbar-area>\n </div>\n </ngs-tab>\n </ngs-tab-group>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"layers\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Layers</ngs-panel-header>\n <ngs-panel-content>\n @if (layersFromService().length > 0) {\n <ngs-list cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (layer of layersFromService(); track layer.id) {\n <ngs-list-item cdkDrag\n cdkDragLockAxis=\"y\"\n [cdkDragStartDelay]=\"100\"\n (click)=\"selectLayer(layer.id!)\"\n [class.is-active]=\"selectedLayerId() === layer.id\"\n class=\"relative group bg-surface\">\n <ngs-icon [name]=\"getLayerIcon(layer.type)\" ngsListItemIcon/>\n <div ngsListItemLine>\n {{ layer.name || layer.type }}\n <!-- {{ layer.text || '' }}-->\n </div>\n <div class=\"absolute right-2 top-1/2 -translate-y-1/2 flex items-center\">\n <button ngsIconButton (click)=\"toggleLayerVisibility(layer.id!, $event)\">\n <ngs-icon\n [name]=\"layer.visible === false ? 'fluent:eye-off-24-regular' : 'fluent:eye-24-regular'\"/>\n </button>\n <button ngsIconButton (click)=\"toggleLayerLock(layer.id!, $event)\">\n <ngs-icon\n [name]=\"layer.locked ? 'fluent:lock-closed-24-regular' : 'fluent:lock-open-24-regular'\"\n class=\"size-5\"/>\n </button>\n <button ngsIconButton (click)=\"deleteLayer(layer.id!, $event)\" [disabled]=\"layer.locked\">\n <ngs-icon name=\"fluent:delete-24-regular\" class=\"size-5\"/>\n </button>\n </div>\n\n <div *cdkDragPlaceholder\n class=\"min-h-[var(--ngs-list-item-min-height)] bg-surface-container\"></div>\n </ngs-list-item>\n }\n </ngs-list>\n } @else {\n <div class=\"text-sm p-4 h-full flex items-center justify-center\">No layers available</div>\n }\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"resize\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Resize</ngs-panel-header>\n <ngs-panel-content>\n <ngs-scrollbar-area>\n <div class=\"p-4 flex flex-col gap-4\">\n <div class=\"flex flex-col gap-4\">\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Width (px)</ngs-label>\n <input ngsInput type=\"number\" [(ngModel)]=\"resizeWidth\">\n </ngs-form-field>\n\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Height (px)</ngs-label>\n <input ngsInput type=\"number\" [(ngModel)]=\"resizeHeight\">\n </ngs-form-field>\n\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Units</ngs-label>\n <ngs-select [(ngModel)]=\"resizeUnit\">\n <ngs-option value=\"px\">px</ngs-option>\n </ngs-select>\n </ngs-form-field>\n\n <button ngsButton=\"filled\" fullWidth (click)=\"applyResize()\">Resize</button>\n </div>\n\n <div class=\"flex flex-col gap-6 mt-2\">\n @for (category of presetCategories(); track category.name) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex items-center gap-2 font-semibold text-sm\">\n <ngs-icon [name]=\"category.icon\" class=\"size-5\"/>\n {{ category.name }}\n </div>\n\n <div class=\"grid grid-cols-3 gap-3\">\n @for (preset of category.presets; track preset.name) {\n <button (click)=\"selectPreset(preset)\"\n class=\"flex flex-col items-center gap-1 p-2 rounded-lg border border-border hover:bg-surface-container transition-colors text-center\">\n <ngs-icon [name]=\"preset.icon\" class=\"size-6 mb-1\"/>\n <span class=\"text-xs font-medium truncate w-full\">{{ preset.name }}</span>\n <span class=\"text-[10px] text-muted-foreground whitespace-nowrap\">{{ preset.width }}×{{ preset.height }} px</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n\n @if (effectsPortal()) {\n <div class=\"absolute inset-0 z-20 bg-surface-container-lowest\">\n <ng-container [cdkPortalOutlet]=\"effectsPortal()\"/>\n </div>\n }\n </ngs-tab-panel-aside>\n </ngs-tab-panel>\n </ngs-panel-sidebar>\n <ngs-panel-content class=\"h-full\">\n <ngs-panel class=\"h-full\">\n <ngs-panel-header>\n <ngs-toolbar class=\"h-full px-3 border-b border-border\">\n <button ngsIconButton (click)=\"toggleAside()\">\n <ngs-icon name=\"fluent:navigation-24-regular\"/>\n </button>\n <ngs-toolbar-title>{{ title() }}</ngs-toolbar-title>\n <ngs-toolbar-spacer/>\n <div class=\"flex items-center gap-2\">\n <button ngsIconButton (click)=\"zoomOut()\">\n <ngs-icon name=\"fluent:zoom-out-24-regular\"/>\n </button>\n <span class=\"text-sm font-medium w-12 text-center\">{{ zoomPercentage() }}%</span>\n <button ngsIconButton (click)=\"zoomIn()\">\n <ngs-icon name=\"fluent:zoom-in-24-regular\"/>\n </button>\n </div>\n <ngs-toolbar-spacer/>\n <div class=\"flex\">\n <button ngsIconButton (click)=\"undo()\" [disabled]=\"!designerService.canUndo()\">\n <ngs-icon name=\"fluent:arrow-hook-up-left-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"redo()\" [disabled]=\"!designerService.canRedo()\">\n <ngs-icon name=\"fluent:arrow-hook-up-right-24-regular\"/>\n </button>\n </div>\n @if (showDownloadButton()) {\n <ngs-divider vertical/>\n <button ngsButton=\"filled\" (click)=\"download()\" class=\"mr-2\">Download</button>\n }\n </ngs-toolbar>\n </ngs-panel-header>\n <ngs-panel-content class=\"bg-surface-container overflow-hidden h-full relative\" (wheel)=\"onWheel($event)\"\n (mousedown)=\"canvasContainer.focus()\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event)\">\n @if (settingsPortal()) {\n <ng-container [cdkPortalOutlet]=\"settingsPortal()\"/>\n }\n <div #canvasContainer class=\"w-full h-full outline-none\" tabindex=\"0\" (contextmenu)=\"$event.preventDefault()\"></div>\n </ngs-panel-content>\n </ngs-panel>\n </ngs-panel-content>\n</ngs-panel>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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C,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS;SACtE;AAED,QAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM;AACnC,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,WAAW,GAAG,KAAK,GAAG,CAAC;YAC3B,EAAE,EAAE,WAAW,GAAG,CAAC,GAAG,MAAM;YAC5B,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,YAAA,GAAG,EAAE,CAAA,gBAAA,EAAmB,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA;AACvE,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,sFAAC;AAEF,IAAA,cAAc,GAAG,MAAM,CAAqB,IAAI,qFAAC;AACjD,IAAA,aAAa,GAAG,MAAM,CAAqB,IAAI,oFAAC;IAEhD,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IACtD;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;QAE9C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7B,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAC/B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC,CAAC,SAAS,CAAC,MAAK;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;AAC/D,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7C,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvE,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;AACtC,gBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC3C,gBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,gBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;YACzC,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;YACxD;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBACrH,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBAC3J,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,YAAY,EAAE;YACnB,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,EAAE;AACpC,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC5B,IAAI,CAAC,UAAU,EAAE;gBACnB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,YAAY,EAAE;YACnB,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,EAAE;AACxE,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC5B,IAAI,CAAC,UAAU,EAAE;gBACnB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAEhC,IAAI,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE;AACpD,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC;AACzC,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB;AAElE,gBAAA,IAAI,WAAW,KAAK,cAAc,EAAE;oBAClC,OAAO,CAAC,GAAG,CAAC,CAAA,kBAAA,EAAqB,WAAW,CAAA,oBAAA,EAAuB,cAAc,CAAA,CAAE,CAAC;AACpF,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,8CAAA,CAAgD,CAAC;oBAC7D,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;gBACnD;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACvD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C;IACF;AAEA,IAAA,cAAc,CAAC,KAA8B,EAAA;QAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAEhC,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC7B,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAE1B,gBAAA,MAAM,aAAa,GAAG,OAAO,MAAW,KAAI;AAC1C,oBAAA,IAAI,KAAyB;AAC7B,oBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;wBAC9B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AACxD,wBAAA,KAAK,GAAG;AACN,4BAAA,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,4BAAA,GAAG,EAAE,MAAM;4BACX,KAAK,EAAE,UAAU,CAAC,KAAK;4BACvB,MAAM,EAAE,UAAU,CAAC;yBACpB;oBACH;yBAAO;wBACL,KAAK,GAAG,MAAM;oBAChB;AACA,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,gBAAA,CAAC;gBAED,MAAM,WAAW,GAAG,MAAK;AACvB,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,gBAAA,CAAC;AAED,gBAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACxB,oBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,KAAK,EAAE;AACR,qBAAA,CAAC;gBACJ;AAAO,qBAAA,IAAI,MAAM,YAAY,OAAO,EAAE;oBACpC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC/C;qBAAO;oBACL,aAAa,CAAC,MAAM,CAAC;gBACvB;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACvB;QACF;IACF;AAEQ,IAAA,UAAU,CAAC,IAAU,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,OAAO,CAAM,KAAI;AAC/B,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;YAC3B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACrD,YAAA,MAAM,KAAK,GAAuB;AAChC,gBAAA,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3C,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU,CAAC;aACpB;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;AAC1D,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;IAC5B;AAEQ,IAAA,kBAAkB,CAAC,GAAW,EAAA;AACpC,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;AAC3B,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,YAAA,GAAG,CAAC,WAAW,GAAG,WAAW;AAC7B,YAAA,GAAG,CAAC,MAAM,GAAG,MAAK;AAChB,gBAAA,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACnD,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,OAAO,GAAG,MAAK;gBACjB,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAClC,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACf,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,gBAAgB,CAAC,KAAyB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA;AAC5D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;QAErB,IAAI,KAAK,GAAG,WAAW;AACvB,QAAA,IAAI,MAAM,GAAG,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;AAEvD,QAAA,IAAI,MAAM,GAAG,YAAY,EAAE;YACzB,MAAM,GAAG,YAAY;AACrB,YAAA,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/C;QAEA,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,gBAAgB;YACtB,KAAK;YACL,MAAM;YACN,CAAC;YACD;AACD,SAAA,CAAC;QACF,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;IACF;IAGA,UAAU,GAAA;AACR,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC1C,QAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAClE;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAE9B,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAC9B,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,QAAQ;QAE9B,UAAU,CAAC,QAAQ,CAAC;YAClB,QAAQ;YACR,MAAM;YACN,IAAI;YACJ,QAAQ;AACR,YAAA,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,eAAe,EAAE,CAAC,IAA0B,EAAE,OAAgB,KAAI;AAChE,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC/B;AACA,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC,CAAC;YACD,YAAY,EAAE,MAAK;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACvB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM;AAC5B,QAAA,IAAI,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,EAAE,EAAE;YACzE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACnD,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;IACF;IAGA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAAE;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAE9B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,uBAAuB;AAClE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAC9B,MAAM,QAAQ,GAAG,EAAE;QAEnB,EAAE,CAAC,QAAQ,CAAC;AACV,YAAA,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ;YAC/B,MAAM,EAAE,IAAI,GAAG,QAAQ;AACvB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,eAAe,EAAE,CAAC,IAA0B,EAAE,OAAgB,KAAI;AAChE,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC/B;AACA,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC,CAAC;YACD,YAAY,EAAE,MAAK;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC;AACD,SAAA,CAAC;IACJ;AAEiB,IAAA,uBAAuB,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;AAEnF,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,GAAG,GAAG,EAAE;YACjF,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACnD,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;IACF;IAEA,MAAM,QAAQ,CAAC,KAAyB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QAExC,IAAI,KAAK,GAAG,WAAW;AACvB,QAAA,IAAI,MAAM,GAAG,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;AAEvD,QAAA,IAAI,MAAM,GAAG,YAAY,EAAE;YACzB,MAAM,GAAG,YAAY;AACrB,YAAA,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/C;QAEA,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK;YACL,MAAM;YACN,CAAC;YACD;AACD,SAAA,CAAC;QACF,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;QACA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC;YACzE,qBAAqB,CAAC,MAAK;AACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,oBAAA,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC;oBAClE;gBACF;gBACA,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAG,CAAC,aAAa;;AAG9D,gBAAA,IAAI,gBAAgB,CAAC,WAAW,KAAK,CAAC,IAAI,gBAAgB,CAAC,YAAY,KAAK,CAAC,EAAE;AAC7E,oBAAA,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC;oBAC/D,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC;oBAC7C;gBACF;AAEA,gBAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,gBAAgB,CAAC;AAClF,gBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,gBAAgB,CAAC,YAAY,CAAC;AAC7G,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,gBAAgB,EAChB,IAAI,CAAC,SAAS,EAAE,EAChB,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,KAAK,EAAE,EACZ,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,QAAQ,EAAE,CAChB,CAAC,IAAI,CAAC,MAAK;AACV,oBAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC;AAC9D,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC;QACnE;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;IAChC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC;IAC5D;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;IAC/B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;IAChC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;;;AAGlC,YAAA,IAAK,KAAa,CAAC,UAAU,KAAK,GAAG,EAAE;gBACrC,KAAK,CAAC,cAAc,EAAE;YACxB;AACA,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,IAAI,CAAC,MAAM,EAAE;YACf;iBAAO;gBACL,IAAI,CAAC,OAAO,EAAE;YAChB;QACF;IACF;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa;AAC5C,QAAA,MAAM,OAAO,GAAG,aAAa,YAAY,gBAAgB;AACzC,YAAA,aAAa,YAAY,mBAAmB;aAC3C,aAAa,YAAY,WAAW,IAAI,aAAa,CAAC,iBAAiB,CAAC;QAEzF,IAAI,OAAO,EAAE;YACX;QACF;QAEA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACnH,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC;AAEpC,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;gBAC7B,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD;AAAO,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;gBACrC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD;AAAO,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;gBAClC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;YACnD;AAAO,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;gBACpC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC;YAClD;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AACvD,YAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;QAC7C;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;YACvE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,IAAI,EAAE;YACb;iBAAO;gBACL,IAAI,CAAC,IAAI,EAAE;YACb;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;YACvE,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA,IAAA,WAAW,CAAC,EAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAmB,CAAC;IACvD;IAEA,qBAAqB,CAAC,EAAU,EAAE,KAAiB,EAAA;QACjD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAChD;IAEA,eAAe,CAAC,EAAU,EAAE,KAAiB,EAAA;QAC3C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC;IAC1C;IAEA,WAAW,CAAC,EAAU,EAAE,KAAiB,EAAA;QACvC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;IACtC;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,IAAI,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACjE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE;YACtE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;QACxC;IACF;IAEA,eAAe,CAAC,KAAgB,EAAE,IAAY,EAAA;QAC5C,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC;AAEhE,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,EAAE;AACvC,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;AACvB,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;AAC/B,YAAA,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACzD;IACF;IAEA,gBAAgB,CAAC,KAAgB,EAAE,KAAyC,EAAA;AAC1E,QAAA,MAAM,IAAI,GAAG,KAAK,IAAI;AACpB,cAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO;cAC3F,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;AAEjF,QAAA,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEjF,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,EAAE;AACvC,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;AACvB,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;AAC/B,YAAA,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACzD;IACF;AAEA,IAAA,MAAM,CAAC,KAAgB,EAAA;QACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,6BAA6B,CAAC;QAC3E,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,8BAA8B,CAAC;AAEhF,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY;YAAE;QAEhC,KAAK,CAAC,cAAc,EAAE;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;AACvD,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;QAG1C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;AACrD,QAAA,IAAI,CAAC,UAAU;YAAE;AAEjB,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,EAAE;AAE9B,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,IAAI,KAAK;AACvD,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,IAAI,KAAK;QAEtD,IAAI,QAAQ,EAAE;YACZ,QAAQ,QAAQ;AACd,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB;AACF,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvB;AACF,gBAAA,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtB;;QAEN;aAAO,IAAI,YAAY,EAAE;AACvB,YAAA,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AACrC,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;oBACzB,IAAI,CAAC,QAAQ,CAAC;wBACZ,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,wBAAA,EAAE,EAAE;AACL,qBAAA,EAAE,CAAC,EAAE,CAAC,CAAC;gBACV;AAAO,qBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;oBAChC,IAAI,CAAC,QAAQ,CAAC;wBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC;AACZ,qBAAA,EAAE,CAAC,EAAE,CAAC,CAAC;gBACV;YACF;YAAE,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC;YAChD;QACF;IACF;AAEA,IAAA,IAAI,CAAC,KAAiC,EAAA;QACpC,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,YAAY,EAAE;AAC9C,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QAC7E;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IACtC;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;IAC9C;AAEA,IAAA,YAAY,CAAC,IAAwB,EAAA;AACnC,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,MAAM,EAAE,8BAA8B;AACtC,YAAA,OAAO,EAAE,yBAAyB;AAClC,YAAA,SAAS,EAAE,6BAA6B;SACzC;QACD,OAAO,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,kCAAkC;IAClE;AAEA,IAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,uFAAC;AAC7B,IAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,yFAAC;IAEhC,MAAM,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA;QAC1B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,MAAM;AAClB,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,QAAQ;YACf,CAAC;YACD;AACD,SAAA,CAAC;QACF,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;IACF;IAEA,MAAM,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA;QAC7B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,KAAK,EAAE,QAAQ;YACf,CAAC;YACD;AACD,SAAA,CAAC;QACF,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;IACF;IAEA,MAAM,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA;QAC5B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,KAAK,EAAE,QAAQ;YACf,CAAC;YACD;AACD,SAAA,CAAC;QACF,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;IACF;IAEA,MAAM,QAAQ,CAAC,KAAoB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA;QAC/C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,IAAI,EAAE,SAAS;YACf,CAAC;YACD;AACD,SAAA,CAAC;QACF,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;IACF;AAEA,IAAA,WAAW,CAAC,QAAa,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;YACvC,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,UAAU,EAAE,QAAQ,CAAC;AACtB,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACjD;IAEA,MAAM,UAAU,CAAC,GAAW,EAAA;QAC1B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE;AACJ,SAAA,CAAC;QACF,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAG,CAAC,aAAa,EAAE;AACrE,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,YAAY;AAC1B,SAAA,EAAE,IAAI,EAAE,IAAI,CAAC;IAChB;AAEA,IAAA,YAAY,CAAC,MAAyC,EAAA;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE;IACpB;uGAx0BW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAdb;YACT,oBAAoB;AACpB,YAAA;AACE,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa;AAC5C;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3HH,u9tBAuaA,EAAA,MAAA,EAAA,CAAA,g2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5VI,KAAK,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,YAAY,8DACZ,YAAY,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,OAAO,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,MAAM,0SACN,aAAa,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,YAAY,6FACZ,QAAQ,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,6BAAA,EAAA,cAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,aAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,6BAA6B,kJAC7B,eAAe,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,YAAY,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,gBAAgB,uGAChB,WAAW,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,QAAQ,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,YAAY,yEACZ,WAAW,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,QAAQ,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,mBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,GAAG,0IACH,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,cAAc,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,oBAAoB,sIACpB,mBAAmB,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,SAAS,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,KAAK,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,KAAK,gMACL,MAAM,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,MAAM,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,aAAa,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,aAAa,0KACb,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,eAAe,iKACf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,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,CAAA,EAAA,CAAA;;2FAgBF,aAAa,EAAA,UAAA,EAAA,CAAA;kBA5DzB,SAAS;+BACE,oBAAoB,EAAA,QAAA,EACpB,kBAAkB,EAAA,OAAA,EACnB;wBACP,KAAK;wBACL,YAAY;wBACZ,YAAY;wBACZ,WAAW;wBACX,OAAO;wBACP,MAAM;wBACN,aAAa;wBACb,OAAO;wBACP,IAAI;wBACJ,YAAY;wBACZ,QAAQ;wBACR,aAAa;wBACb,6BAA6B;wBAC7B,eAAe;wBACf,YAAY;wBACZ,yBAAyB;wBACzB,gBAAgB;wBAChB,WAAW;wBACX,IAAI;wBACJ,QAAQ;wBACR,YAAY;wBACZ,WAAW;wBACX,OAAO;wBACP,kBAAkB;wBAClB,QAAQ;wBACR,GAAG;wBACH,SAAS;wBACT,cAAc;wBACd,oBAAoB;wBACpB,mBAAmB;wBACnB,SAAS;wBACT,KAAK;wBACL,KAAK;wBACL,MAAM;wBACN,MAAM;wBACN,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,sBAAsB;wBACtB,eAAe;wBACf,WAAW;qBACZ,EAAA,SAAA,EACU;wBACT,oBAAoB;AACpB,wBAAA;AACE,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB;AAC5C;qBACF,EAAA,IAAA,EAGK;AACJ,wBAAA,OAAO,EAAE,oBAAoB;AAC7B,wBAAA,WAAW,EAAE;AACd,qBAAA,EAAA,QAAA,EAAA,u9tBAAA,EAAA,MAAA,EAAA,CAAA,g2BAAA,CAAA,EAAA;uGAQgE,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,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,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,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,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,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,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,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,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzIpF;;AAEG;;;;"}
1
+ {"version":3,"file":"ngstarter-ui-components-image-designer.mjs","sources":["../../../projects/components/image-designer/src/image-designer.service.ts","../../../projects/components/image-designer/src/default-photos-data-source.ts","../../../projects/components/image-designer/src/patterns.ts","../../../projects/components/image-designer/src/elements.ts","../../../projects/components/image-designer/src/presets.ts","../../../projects/components/image-designer/src/tokens.ts","../../../projects/components/image-designer/src/settings/settings.ts","../../../projects/components/image-designer/src/settings/settings.html","../../../projects/components/image-designer/src/effects/effects.ts","../../../projects/components/image-designer/src/effects/effects.html","../../../projects/components/image-designer/src/image-designer/image-designer.ts","../../../projects/components/image-designer/src/image-designer/image-designer.html","../../../projects/components/image-designer/ngstarter-ui-components-image-designer.ts"],"sourcesContent":["import { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { inject, Injectable, OnDestroy, PLATFORM_ID, signal } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport Konva from 'konva';\n\n/**\n * A custom Konva filter for color tinting.\n * It modifies existing pixel colors by a factor without completely replacing them.\n * Factors are between -1 and 1.\n */\nconst TintFilter = function (this: Konva.Node, imageData: ImageData) {\n const data = imageData.data;\n const n = data.length;\n const tintR = this.getAttr('tintR') || 0;\n const tintG = this.getAttr('tintG') || 0;\n const tintB = this.getAttr('tintB') || 0;\n\n if (tintR === 0 && tintG === 0 && tintB === 0) return;\n\n for (let i = 0; i < n; i += 4) {\n if (tintR > 0) data[i] += (255 - data[i]) * tintR;\n else if (tintR < 0) data[i] += data[i] * tintR;\n\n if (tintG > 0) data[i + 1] += (255 - data[i + 1]) * tintG;\n else if (tintG < 0) data[i + 1] += data[i + 1] * tintG;\n\n if (tintB > 0) data[i + 2] += (255 - data[i + 2]) * tintB;\n else if (tintB < 0) data[i + 2] += data[i + 2] * tintB;\n }\n};\n\nimport { ElementConfig, GradientConfig, ImageSize, LayerConfig, ImageDesignerSnapshot } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageDesignerService implements OnDestroy {\n private stage: Konva.Stage | undefined;\n private workspaceLayer: Konva.Layer | undefined;\n private uiLayer: Konva.Layer | undefined;\n private canvasRect: Konva.Rect | undefined;\n private maskOverlay: Konva.Shape | undefined;\n private resizeObserver: ResizeObserver | undefined;\n private minScale = 0.1;\n private maxScale = 5;\n readonly scale = signal(1);\n readonly isInitialized = signal(false);\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private loadedFonts = new Set<string>();\n readonly fonts = signal<string[]>([\n 'Inter',\n 'Roboto',\n 'Open Sans',\n 'Lato',\n 'Montserrat',\n 'Oswald',\n 'Source Sans Pro',\n 'Slabo 27px',\n 'Raleway',\n 'PT Sans',\n 'Merriweather',\n 'Nunito',\n 'Playfair Display',\n 'Poppins',\n 'Ubuntu',\n 'Lora',\n 'Muli',\n 'Arvo',\n 'Rubik',\n 'Courier Prime',\n 'Pacifico',\n 'Dancing Script',\n 'Bangers',\n 'Special Elite',\n 'Press Start 2P',\n 'Monoton',\n 'Creepster',\n 'Lobster',\n 'Orbitron',\n 'Righteous',\n 'Satisfy',\n 'Shadows Into Light',\n 'Permanent Marker',\n 'Fredoka One',\n 'Amatic SC',\n 'Cinzel',\n 'Great Vibes',\n 'Kaushan Script'\n ]);\n private readonly _layers = signal<LayerConfig[]>([]);\n readonly layers = this._layers.asReadonly();\n readonly selectedLayerId = signal<string | null>(null);\n\n private readonly _change$ = new Subject<void>();\n readonly change$ = this._change$.asObservable();\n\n private undoStack: any[] = [];\n private redoStack: any[] = [];\n readonly canUndo = signal(false);\n readonly canRedo = signal(false);\n historyLimit = 50;\n\n private transformer: Konva.Transformer | undefined;\n private selectionRect: Konva.Rect | undefined;\n private hoverRect: Konva.Rect | undefined;\n private hoveredShape: Konva.Shape | undefined;\n private selectionBordersGroup: Konva.Group | undefined;\n private selectionStartPos: { x: number, y: number } | undefined;\n private isSelecting = false;\n private isDragging = false;\n private wasSelectedBeforeClick = false;\n\n private snapLines: Konva.Line[] = [];\n\n private snapSettings = {\n showGuidelines: true,\n snapToShapes: true,\n snapToStageCenter: true,\n snapToStageBorders: true,\n guidelineColor: 'blue',\n snapRange: 5\n };\n\n private defaultFont = 'Inter';\n\n ngOnDestroy() {\n this.destroy();\n }\n\n async init(\n container: HTMLDivElement,\n imageSize: ImageSize,\n defaultFont = 'Inter',\n scale = 1,\n minScale = 0.1,\n maxScale = 5\n ) {\n if (!this.isBrowser) {\n console.log('ImageDesignerService.init skipped (not a browser)');\n return;\n }\n console.log('ImageDesignerService.init starting', { container, imageSize, defaultFont, scale, minScale, maxScale });\n console.log('Container dimensions:', container.offsetWidth, 'x', container.offsetHeight);\n\n this.defaultFont = defaultFont;\n this.minScale = minScale;\n this.maxScale = maxScale;\n this.setScale(scale);\n\n try {\n this.stage = new Konva.Stage({\n container: container,\n width: container.offsetWidth || imageSize.width + 100,\n height: container.offsetHeight || imageSize.height + 100,\n });\n console.log('Konva.Stage created');\n } catch (e) {\n console.error('Failed to create Konva.Stage:', e);\n return;\n }\n\n this.workspaceLayer = new Konva.Layer();\n this.stage.add(this.workspaceLayer);\n\n this.uiLayer = new Konva.Layer();\n this.stage.add(this.uiLayer);\n\n this.canvasRect = new Konva.Rect({\n x: (this.stage.width() || imageSize.width) / 2,\n y: (this.stage.height() || imageSize.height) / 2,\n width: imageSize.width,\n height: imageSize.height,\n fill: 'white',\n stroke: '#d9dcdf',\n strokeWidth: 1,\n name: 'canvasRect'\n });\n this.canvasRect.offsetX(imageSize.width / 2);\n this.canvasRect.offsetY(imageSize.height / 2);\n this.canvasRect.scaleX(this.scale());\n this.canvasRect.scaleY(this.scale());\n\n this.workspaceLayer.add(this.canvasRect);\n\n this.transformer = new Konva.Transformer({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'middle-left', 'middle-right'],\n name: 'transformer',\n // Ensure transformer is always above the mask\n boundBoxFunc: (oldBox, newBox) => {\n // Limit minimum size\n if (Math.abs(newBox.width) < 5 || Math.abs(newBox.height) < 5) {\n return oldBox;\n }\n return newBox;\n },\n });\n this.uiLayer.add(this.transformer);\n\n this.transformer.on('transform', () => {\n this.updateSelectionBorders();\n const nodes = this.transformer?.nodes() || [];\n\n nodes.forEach((node) => {\n if (node instanceof Konva.Text) {\n // If we resized vertically (scaleY changed), scale fontSize\n const scaleY = node.scaleY();\n if (Math.abs(scaleY - this.scale()) > 0.001) {\n node.fontSize(node.fontSize() * (scaleY / this.scale()));\n }\n\n // Scale width according to scaleX\n const scaleX = node.scaleX();\n node.width(node.width() * (scaleX / this.scale()));\n\n // Reset scale to current canvas scale\n node.scaleX(this.scale());\n node.scaleY(this.scale());\n\n // Update offset because width/fontSize changed\n node.offsetX(node.width() / 2);\n node.offsetY(node.height() / 2);\n }\n });\n\n if (nodes.length > 0) {\n const guides = this.getSnappingGuides(nodes);\n this.drawSnappingLines(guides);\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n }\n this.notifyChange();\n });\n\n this.transformer.on('dragmove', (e) => {\n const target = e.target;\n if (this.transformer && (target as any) === this.transformer) {\n const nodes = (this.transformer as Konva.Transformer).nodes();\n if (nodes.length > 0) {\n const targetBox = this.getNodesClientRect(nodes);\n const guides = this.getSnappingGuides(nodes);\n\n let dx = 0;\n let dy = 0;\n\n const vGuide = guides.vertical[0];\n const hGuide = guides.horizontal[0];\n\n if (vGuide) {\n dx = vGuide.guide - vGuide.offset - targetBox.x;\n }\n\n if (hGuide) {\n dy = hGuide.guide - hGuide.offset - targetBox.y;\n }\n\n if (dx !== 0 || dy !== 0) {\n nodes.forEach((node: Konva.Node) => {\n const p = node.getAbsolutePosition();\n node.setAbsolutePosition({\n x: p.x + dx,\n y: p.y + dy\n });\n });\n }\n\n const finalGuides = this.getSnappingGuides(nodes);\n this.drawSnappingLines(finalGuides);\n this.updateSelectionBorders();\n }\n }\n });\n\n this.transformer.on('dragend', () => {\n this.clearSnapLines();\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 0) {\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n }\n this.notifyChange();\n });\n\n this.transformer.on('transformend', () => {\n this.clearSnapLines();\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 0) {\n nodes.forEach(node => {\n if (!(node instanceof Konva.Text)) {\n const scaleX = node.scaleX();\n const scaleY = node.scaleY();\n node.width(node.width() * (scaleX / this.scale()));\n node.height(node.height() * (scaleY / this.scale()));\n node.scaleX(this.scale());\n node.scaleY(this.scale());\n }\n\n // If the node has effects, we MUST re-cache it with the new size\n const id = node.id();\n const config = this._layers().find(l => l.id === id);\n if (config) {\n // Re-apply effects and re-cache\n this.applyEffectsToShape(node as Konva.Shape, config);\n }\n });\n // We update the signal AFTER applying effects to ensure consistency\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n }\n this.notifyChange();\n });\n\n this.selectionRect = new Konva.Rect({\n fill: 'rgba(0,0,255,0.1)',\n stroke: '#3b82f6',\n strokeWidth: 1,\n visible: false,\n name: 'selectionRect',\n zIndex: 1001\n });\n this.uiLayer.add(this.selectionRect);\n\n this.hoverRect = new Konva.Rect({\n stroke: '#3b82f6',\n strokeWidth: 1,\n listening: false,\n visible: false,\n name: 'hoverRect'\n });\n this.uiLayer.add(this.hoverRect);\n\n this.selectionBordersGroup = new Konva.Group({\n listening: false,\n name: 'selectionBordersGroup'\n });\n this.uiLayer.add(this.selectionBordersGroup);\n\n this.maskOverlay = new Konva.Shape({\n fill: 'rgba(255, 255, 255, 0.8)',\n listening: false,\n name: 'maskOverlay',\n zIndex: 1000,\n fillRule: 'evenodd',\n sceneFunc: (context, shape) => {\n const stage = shape.getStage();\n if (!stage || !this.canvasRect) return;\n\n const stageWidth = stage.width();\n const stageHeight = stage.height();\n\n const canvasX = this.canvasRect.x();\n const canvasY = this.canvasRect.y();\n const canvasWidth = this.canvasRect.width() * this.canvasRect.scaleX();\n const canvasHeight = this.canvasRect.height() * this.canvasRect.scaleY();\n\n context.beginPath();\n // Наружный прямоугольник (весь Stage)\n context.rect(0, 0, stageWidth, stageHeight);\n\n // Внутренний прямоугольник (canvasRect)\n // Since canvasRect has offset at its center, its top-left corner is at (x - width*scale/2, y - height*scale/2)\n // We draw it in counter-clockwise direction to create a hole\n context.rect(\n canvasX + canvasWidth / 2,\n canvasY - canvasHeight / 2,\n -canvasWidth,\n canvasHeight\n );\n\n context.closePath();\n context.fillShape(shape);\n }\n });\n this.uiLayer.add(this.maskOverlay);\n\n await this.loadAllFonts();\n\n this.updateSize(container, imageSize);\n\n // Add a small delay to ensure everything is settled and then center again\n setTimeout(() => {\n this.updateSize(container, imageSize);\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n }, 50);\n\n // Final draw to ensure everything is rendered\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n\n console.log('Konva Canvas Rect and layers added and drawn');\n\n this.setupResizeObserver(container, imageSize);\n this.setupSelectionListeners();\n this.isInitialized.set(true);\n this.undoStack = [this.getSnapshot()];\n this.updateHistorySignals();\n }\n\n private handleGlobalMouseUp = (e: MouseEvent | TouchEvent) => {\n if (!this.isSelecting) {\n return;\n }\n\n this.isSelecting = false;\n if (!this.selectionRect || !this.workspaceLayer || !this.transformer) return;\n\n if (!this.selectionRect.visible()) {\n // If no selection rect was drawn, but we were selecting,\n // it means it was a simple click that didn't move much.\n const pos = this.stage?.getPointerPosition();\n const shape = pos ? this.stage?.getIntersection(pos) as Konva.Shape : null;\n if (shape && shape.id()) {\n this.selectLayer(shape.id());\n } else {\n this.selectLayer(null);\n }\n return;\n }\n\n this.selectionRect.visible(false);\n\n const box = this.selectionRect.getClientRect();\n const shapes = this.workspaceLayer.find('.rect, .text, .image, .pattern').filter((shape) => {\n if (shape === this.canvasRect || shape === this.selectionRect || shape === this.transformer) {\n return false;\n }\n if (!shape.visible() || !shape.listening()) {\n return false;\n }\n const layer = this._layers().find(l => l.id === shape.id());\n if (layer?.locked) {\n return false;\n }\n return Konva.Util.haveIntersection(box, shape.getClientRect());\n });\n\n this.transformer.nodes(shapes);\n if (shapes.length === 1) {\n const shape = shapes[0] as Konva.Shape;\n const layer = this._layers().find(l => l.id === shape.id());\n this.updateTransformer(shape, !!layer?.locked);\n this.selectedLayerId.set(shape.id());\n } else if (shapes.length > 1) {\n // Multiple selection: show default anchors for all\n this.transformer.setAttrs({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'middle-left', 'middle-right'],\n });\n this.selectedLayerId.set(null); // Or some multi-select id\n }\n this.transformer.forceUpdate();\n this.updateSelectionBorders();\n\n this.workspaceLayer.batchDraw();\n };\n\n private handleGlobalMouseMove = (e: MouseEvent | TouchEvent) => {\n if (!this.isSelecting || !this.selectionRect || !this.selectionStartPos || !this.stage) {\n return;\n }\n\n const container = this.stage.container();\n const rect = container.getBoundingClientRect();\n\n let clientX, clientY;\n if ('touches' in e) {\n clientX = e.touches[0].clientX;\n clientY = e.touches[0].clientY;\n } else {\n clientX = e.clientX;\n clientY = e.clientY;\n }\n\n const pos = {\n x: clientX - rect.left,\n y: clientY - rect.top\n };\n\n const rectX = Math.min(pos.x, this.selectionStartPos.x);\n const rectY = Math.min(pos.y, this.selectionStartPos.y);\n const rectWidth = Math.abs(pos.x - this.selectionStartPos.x);\n const rectHeight = Math.abs(pos.y - this.selectionStartPos.y);\n\n if (!isNaN(rectX) && !isNaN(rectY) && !isNaN(rectWidth) && !isNaN(rectHeight)) {\n if (rectWidth > 5 || rectHeight > 5) {\n this.selectionRect.visible(true);\n }\n this.selectionRect.setAttrs({\n x: rectX,\n y: rectY,\n width: rectWidth,\n height: rectHeight,\n strokeWidth: 1,\n });\n this.selectionRect.moveToTop();\n }\n\n this.uiLayer?.moveToTop();\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n };\n\n private makeTextEditable(textNode: Konva.Text) {\n if (!this.stage) return;\n\n // Save original text and settings to restore if cancelled\n textNode.setAttr('originalText', textNode.text());\n textNode.setAttr('originalWidth', textNode.width());\n\n // Fix width to current width during editing to enable wrapping\n const initialWidth = textNode.width();\n textNode.width(initialWidth);\n\n // Hide text node but keep transformer visible\n textNode.opacity(0);\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n\n const stage = this.stage;\n const textPosition = textNode.getAbsolutePosition();\n const stageBox = stage.container().getBoundingClientRect();\n\n const areaPosition = {\n x: stageBox.left + textPosition.x,\n y: stageBox.top + textPosition.y,\n };\n\n // Create textarea\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n\n // Set styles\n textarea.value = textNode.text();\n textarea.style.position = 'absolute';\n textarea.style.top = areaPosition.y + 'px';\n textarea.style.left = areaPosition.x + 'px';\n textarea.style.width = (textNode.width() * textNode.getAbsoluteScale().x) + 'px';\n textarea.style.height = (textNode.height() * textNode.getAbsoluteScale().y + 10) + 'px';\n textarea.style.fontSize = (textNode.fontSize() * textNode.getAbsoluteScale().y) + 'px';\n textarea.style.border = 'none';\n textarea.style.padding = (textNode.padding() * textNode.getAbsoluteScale().x) + 'px';\n textarea.style.margin = '0px';\n textarea.style.overflow = 'hidden';\n textarea.style.background = 'none';\n textarea.style.outline = 'none';\n textarea.style.resize = 'none';\n textarea.style.lineHeight = textNode.lineHeight().toString();\n textarea.style.fontFamily = textNode.fontFamily();\n textarea.style.fontWeight = (textNode.getAttr('fontWeight') || textNode.fontStyle() || 'normal').toString();\n textarea.style.fontStyle = textNode.fontStyle()?.includes('italic') ? 'italic' : 'normal';\n textarea.style.transformOrigin = 'left top';\n textarea.style.textAlign = textNode.align();\n textarea.style.color = textNode.fill() as string;\n textarea.style.boxSizing = 'border-box';\n textarea.style.zIndex = '1000';\n\n const rotation = textNode.getAbsoluteRotation();\n let transform = '';\n if (rotation) {\n transform += 'rotateZ(' + rotation + 'deg)';\n }\n\n // Offset based on Konva's offset (textNode is centered by default in addLayer)\n const px = 0;\n // apply configuration\n // we need to skip transform for now as it's tricky with absolute positioning and offsets\n // But since we use absolutePosition which already accounts for many things, let's see.\n // If textNode has offset (centered), we need to adjust textarea position\n const offsetX = textNode.offsetX() * textNode.getAbsoluteScale().x;\n const offsetY = textNode.offsetY() * textNode.getAbsoluteScale().y;\n\n textarea.style.left = (areaPosition.x - offsetX) + 'px';\n textarea.style.top = (areaPosition.y - offsetY) + 'px';\n textarea.style.transform = transform;\n\n textarea.focus();\n\n let isFinished = false;\n const removeTextarea = () => {\n if (isFinished) return;\n isFinished = true;\n\n const originalText = textNode.getAttr('originalText');\n const originalWidth = textNode.getAttr('originalWidth');\n if (originalText !== undefined) {\n textNode.text(originalText);\n }\n if (originalWidth !== undefined) {\n textNode.width(originalWidth);\n }\n\n if (textarea.parentNode) {\n textarea.parentNode.removeChild(textarea);\n }\n window.removeEventListener('click', handleOutsideClick);\n textarea.removeEventListener('blur', handleBlur);\n textNode.opacity(1);\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n this.workspaceLayer?.batchDraw();\n };\n\n const updateText = () => {\n const newText = textarea.value;\n const originalText = textNode.getAttr('originalText');\n if (newText !== originalText) {\n const id = textNode.id();\n if (id) {\n // Keep the fixed width when updating the layer\n this.updateLayer(id, { text: newText, width: textNode.width() });\n } else {\n textNode.text(newText);\n textNode.offsetX(textNode.width() / 2);\n textNode.offsetY(textNode.height() / 2);\n this.workspaceLayer?.batchDraw();\n }\n // Restore transformer nodes after update if it was selected\n if (this.selectedLayerId() === textNode.id()) {\n this.transformer?.nodes([textNode]);\n }\n }\n // Clear originalText and originalWidth after update so removeTextarea doesn't restore it\n textNode.setAttr('originalText', undefined);\n textNode.setAttr('originalWidth', undefined);\n };\n\n const handleBlur = () => {\n updateText();\n removeTextarea();\n };\n\n textarea.addEventListener('blur', handleBlur);\n\n textarea.addEventListener('keydown', (e) => {\n // hide on enter\n // but don't hide on shift + enter\n if (e.keyCode === 13 && !e.shiftKey) {\n e.preventDefault();\n textarea.blur();\n }\n // on escape do not update\n if (e.keyCode === 27) {\n removeTextarea();\n }\n });\n\n textarea.addEventListener('input', () => {\n // update node text to update transformer\n textNode.text(textarea.value);\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n\n // re-calculate size\n // Width is fixed, only height should change\n textarea.style.height = 'auto';\n textarea.style.height = textarea.scrollHeight + 'px';\n });\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (e.target !== textarea) {\n // blur will handle the rest\n textarea.blur();\n }\n };\n\n // Use timeout to avoid immediate trigger from the same click that opened it\n setTimeout(() => {\n window.addEventListener('click', handleOutsideClick);\n });\n }\n\n private setupSelectionListeners() {\n if (!this.stage) return;\n\n if (this.isBrowser) {\n window.addEventListener('mouseup', this.handleGlobalMouseUp);\n window.addEventListener('touchend', this.handleGlobalMouseUp);\n window.addEventListener('mousemove', this.handleGlobalMouseMove);\n window.addEventListener('touchmove', this.handleGlobalMouseMove);\n }\n\n this.stage.on('mousedown touchstart', (e) => {\n // If right click - do nothing\n if (e.evt instanceof MouseEvent && e.evt.button === 2) {\n return;\n }\n\n // If click on transformer - do nothing\n const isTransformer = e.target.getParent()?.className === 'Transformer';\n if (isTransformer) {\n return;\n }\n\n // If click on empty area, canvasRect or a locked layer - start selection\n const shapeAtPointer = e.target as Konva.Shape;\n const layerConfig = this._layers().find(l => l.id === shapeAtPointer.id());\n const isLocked = !!layerConfig?.locked;\n\n if (e.target === this.stage || e.target === this.canvasRect || isLocked) {\n this.isSelecting = true;\n this.uiLayer?.moveToTop();\n const pos = this.stage?.getPointerPosition();\n if (pos) {\n this.selectionStartPos = { x: pos.x, y: pos.y };\n this.selectionRect?.visible(false);\n this.selectionRect?.width(0);\n this.selectionRect?.height(0);\n this.selectionRect?.moveToTop();\n }\n return;\n }\n\n // Find the clicked shape\n const shape = e.target as Konva.Shape;\n const id = shape.id();\n if (id) {\n const isShiftPressed = e.evt.shiftKey;\n const currentNodes = this.transformer?.nodes() || [];\n this.wasSelectedBeforeClick = currentNodes.includes(shape);\n\n if (isShiftPressed) {\n // Toggle selection\n if (currentNodes.includes(shape)) {\n const newNodes = currentNodes.filter(n => n !== shape);\n this.transformer?.nodes(newNodes);\n this.updateSelectionBorders();\n if (newNodes.length === 1 && newNodes[0].id()) {\n this.selectedLayerId.set(newNodes[0].id());\n } else if (newNodes.length === 0) {\n this.selectedLayerId.set(null);\n } else {\n this.selectedLayerId.set(null); // Multi-selection or none\n }\n } else {\n const newNodes = [...currentNodes, shape];\n this.transformer?.nodes(newNodes);\n this.updateSelectionBorders();\n if (newNodes.length === 1) {\n this.selectedLayerId.set(shape.id());\n } else {\n this.selectedLayerId.set(null); // Multi-selection\n }\n }\n } else {\n // Normal click\n // Only change selection on mousedown if the object is NOT already selected.\n // This allows moving the whole selection group.\n if (!currentNodes.includes(shape)) {\n this.selectLayer(id);\n }\n }\n } else {\n // Click on something without ID (like the canvas but not the canvasRect handler above)\n this.selectLayer(null);\n }\n });\n\n this.stage.on('click tap', (e) => {\n // If right click - do nothing\n if (e.evt instanceof MouseEvent && e.evt.button === 2) {\n return;\n }\n\n // If click on transformer - do nothing\n const isTransformer = e.target.getParent()?.className === 'Transformer';\n if (isTransformer) {\n return;\n }\n\n const shape = e.target as Konva.Shape;\n\n const currentNodesOnStage = this.transformer?.nodes() || [];\n if (this.wasSelectedBeforeClick && currentNodesOnStage.length === 1 && currentNodesOnStage[0] === shape && shape instanceof Konva.Text) {\n this.makeTextEditable(shape);\n return;\n }\n\n // If click on empty area or canvasRect - do nothing\n if (e.target === this.stage || e.target === this.canvasRect) {\n return;\n }\n\n const id = shape.id();\n if (!id) return;\n\n const isShiftPressed = e.evt.shiftKey;\n if (isShiftPressed) return; // Handled in mousedown\n\n const currentNodesOnClick = this.transformer?.nodes() || [];\n // If we clicked on an object that is part of a multi-selection,\n // and it was a simple click (not a drag), then select only this object.\n if (currentNodesOnClick.length > 1 && currentNodesOnClick.includes(shape)) {\n this.selectLayer(id);\n }\n });\n\n this.stage.on('mousemove touchmove', (e) => {\n // Logic moved to handleGlobalMouseMove\n });\n }\n\n selectLayer(id: string | null) {\n this.selectedLayerId.set(id);\n this.hideHover();\n\n if (!this.transformer || !this.workspaceLayer) return;\n\n if (!id) {\n this.transformer.nodes([]);\n } else {\n const shape = this.workspaceLayer.findOne('#' + id) as Konva.Shape;\n if (shape && shape.visible()) {\n const layer = this._layers().find(l => l.id === id);\n\n this.transformer.nodes([shape]);\n this.updateTransformer(shape, !!layer?.locked);\n } else {\n this.transformer.nodes([]);\n }\n }\n this.updateSelectionBorders();\n this.transformer.moveToTop();\n this.uiLayer?.moveToTop();\n this.workspaceLayer.batchDraw();\n this.uiLayer?.batchDraw();\n }\n\n private updateTransformer(shape: Konva.Shape, isLocked: boolean) {\n if (!this.transformer) return;\n\n if (isLocked) {\n this.transformer.setAttrs({\n rotateEnabled: false,\n enabledAnchors: [],\n });\n } else {\n if (shape instanceof Konva.Text) {\n this.transformer.setAttrs({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'middle-left', 'middle-right'],\n });\n } else {\n this.transformer.setAttrs({\n rotateEnabled: true,\n enabledAnchors: ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'middle-left', 'middle-right'],\n });\n }\n }\n this.transformer.forceUpdate();\n }\n\n toggleLayerVisibility(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.workspaceLayer) return;\n\n const newVisible = layer.visible === false;\n this._layers.update(layers =>\n layers.map(l => l.id === id ? { ...l, visible: newVisible } : l)\n );\n\n const shape = this.workspaceLayer.findOne('#' + id);\n if (shape) {\n shape.visible(newVisible);\n if (!newVisible && this.selectedLayerId() === id) {\n this.selectLayer(null);\n }\n this.workspaceLayer.batchDraw();\n }\n }\n\n toggleLayerLock(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.workspaceLayer) return;\n\n const newLocked = !layer.locked;\n this._layers.update(layers =>\n layers.map(l => l.id === id ? { ...l, locked: newLocked } : l)\n );\n\n const shape = this.workspaceLayer.findOne('#' + id);\n if (shape) {\n shape.listening(true);\n shape.draggable(!newLocked);\n\n // Update transformer if the locked shape is currently selected\n if (this.selectedLayerId() === id) {\n this.updateTransformer(shape as Konva.Shape, newLocked);\n }\n\n this.workspaceLayer.batchDraw();\n }\n }\n\n async flipHorizontal(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer) return;\n const currentScaleX = layer['scaleX'] ?? 1;\n await this.updateLayer(id, { scaleX: currentScaleX * -1 });\n }\n\n async flipVertical(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer) return;\n const currentScaleY = layer['scaleY'] ?? 1;\n await this.updateLayer(id, { scaleY: currentScaleY * -1 });\n }\n\n async fitToPage(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.canvasRect) return;\n\n const canvasWidth = this.canvasRect.width();\n const canvasHeight = this.canvasRect.height();\n const canvasCenterX = this.canvasRect.x();\n const canvasCenterY = this.canvasRect.y();\n\n const shape = this.workspaceLayer?.findOne('#' + id);\n if (!shape) return;\n\n // Use actual shape dimensions if available, otherwise fallback to layer config\n const layerWidth = (shape instanceof Konva.Text) ? shape.width() : (layer.width || shape.width());\n const layerHeight = (shape instanceof Konva.Text) ? shape.height() : (layer.height || shape.height());\n\n if (layerWidth === 0 || layerHeight === 0) return;\n\n const scale = Math.min(canvasWidth / layerWidth, canvasHeight / layerHeight) * this.scale();\n\n await this.updateLayer(id, {\n x: canvasCenterX,\n y: canvasCenterY,\n width: layerWidth,\n height: layerHeight,\n scaleX: scale,\n scaleY: scale,\n rotation: 0\n });\n }\n\n async fillPage(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.canvasRect) return;\n\n const canvasWidth = this.canvasRect.width();\n const canvasHeight = this.canvasRect.height();\n const canvasCenterX = this.canvasRect.x();\n const canvasCenterY = this.canvasRect.y();\n\n const shape = this.workspaceLayer?.findOne('#' + id);\n if (!shape) return;\n\n // Use actual shape dimensions if available, otherwise fallback to layer config\n const layerWidth = (shape instanceof Konva.Text) ? shape.width() : (layer.width || shape.width());\n const layerHeight = (shape instanceof Konva.Text) ? shape.height() : (layer.height || shape.height());\n\n if (layerWidth === 0 || layerHeight === 0) return;\n\n const scale = Math.max(canvasWidth / layerWidth, canvasHeight / layerHeight) * this.scale();\n\n await this.updateLayer(id, {\n x: canvasCenterX,\n y: canvasCenterY,\n width: layerWidth,\n height: layerHeight,\n scaleX: scale,\n scaleY: scale,\n rotation: 0\n });\n }\n\n deleteLayer(id: string) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer || !this.workspaceLayer || layer.locked) return;\n\n this.hideHover();\n\n // Remove from signal\n this._layers.update(layers => layers.filter(l => l.id !== id));\n this.notifyChange();\n\n // Remove from Konva\n const shape = this.workspaceLayer.findOne('#' + id);\n if (shape) {\n if (this.transformer) {\n const nodes = this.transformer.nodes();\n if (nodes.includes(shape as Konva.Shape)) {\n this.transformer.nodes(nodes.filter(n => n !== shape));\n }\n }\n shape.destroy();\n if (this.selectedLayerId() === id) {\n this.selectLayer(null);\n } else {\n this.updateSelectionBorders();\n }\n this.workspaceLayer.batchDraw();\n }\n }\n\n deleteSelectedLayers() {\n if (!this.transformer || !this.workspaceLayer) return;\n\n const nodes = this.transformer.nodes();\n if (nodes.length === 0) return;\n\n this.hideHover();\n\n const idsToDelete = nodes.map(node => node.id()).filter((id): id is string => {\n const layer = this._layers().find(l => l.id === id);\n return !!id && !!layer && !layer.locked;\n });\n\n if (idsToDelete.length === 0) return;\n\n // Remove from signal\n this._layers.update(layers => layers.filter(l => !l.id || !idsToDelete.includes(l.id)));\n this.notifyChange();\n\n // Remove from Konva\n idsToDelete.forEach(id => {\n const shape = this.workspaceLayer?.findOne('#' + id);\n if (shape) {\n shape.destroy();\n }\n });\n\n this.transformer.nodes([]);\n this.selectLayer(null);\n this.workspaceLayer.batchDraw();\n }\n\n moveSelectedLayers(dx: number, dy: number) {\n if (!this.transformer || !this.workspaceLayer) return;\n\n const nodes = this.transformer.nodes();\n if (nodes.length === 0) return;\n\n let moved = false;\n nodes.forEach(node => {\n const id = node.id();\n const layer = this._layers().find(l => l.id === id);\n if (layer && !layer.locked) {\n node.x(node.x() + dx);\n node.y(node.y() + dy);\n moved = true;\n }\n });\n\n if (moved) {\n this.updateSelectionBorders();\n this.workspaceLayer.batchDraw();\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n this.notifyChange();\n }\n }\n\n private showHover(shape: Konva.Shape) {\n if (!this.hoverRect || !this.workspaceLayer) return;\n\n this.hoveredShape = shape;\n const box = shape.getClientRect({ relativeTo: this.workspaceLayer });\n this.hoverRect.setAttrs({\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n strokeWidth: 1,\n visible: true\n });\n this.hoverRect.moveToTop();\n this.workspaceLayer.batchDraw();\n }\n\n private hideHover() {\n this.hoveredShape = undefined;\n if (!this.hoverRect) return;\n this.hoverRect.visible(false);\n this.workspaceLayer?.batchDraw();\n }\n\n private updateSelectionBorders() {\n if (!this.selectionBordersGroup || !this.transformer || !this.workspaceLayer) return;\n\n this.selectionBordersGroup.destroyChildren();\n const nodes = this.transformer.nodes();\n\n if (nodes.length > 1) {\n nodes.forEach(node => {\n const box = node.getClientRect({ relativeTo: this.workspaceLayer });\n const rect = new Konva.Rect({\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n stroke: '#3b82f6',\n strokeWidth: 1,\n listening: false,\n name: 'selectionBorder'\n });\n this.selectionBordersGroup?.add(rect);\n });\n this.selectionBordersGroup.visible(true);\n } else {\n this.selectionBordersGroup.visible(false);\n }\n this.selectionBordersGroup.moveToTop();\n this.uiLayer?.batchDraw();\n }\n\n async addLayer(config: LayerConfig, updateList = true): Promise<string | undefined> {\n if (!this.workspaceLayer || !this.canvasRect) return undefined;\n\n if (config.type === 'text' && config['fontFamily']) {\n await this.loadFont(config['fontFamily']);\n } else if (config.type === 'text' && !config['fontFamily']) {\n await this.loadFont(this.defaultFont);\n }\n\n if (updateList) {\n const newConfig = { ...config, id: config.id || Math.random().toString(36).substr(2, 9) };\n // New layer should be at the top of the UI list (index 0)\n this._layers.update(layers => [newConfig, ...layers]);\n config = newConfig;\n if (!this.isSnapshotLoading) {\n this.notifyChange();\n }\n }\n\n let shape: Konva.Shape | undefined;\n\n const canvasWidth = this.canvasRect?.width() || 0;\n const canvasHeight = this.canvasRect?.height() || 0;\n const canvasX = this.canvasRect?.x() || 0;\n const canvasY = this.canvasRect?.y() || 0;\n\n // x and y are relative to canvas center\n const x = (config.x ?? 0) * this.scale() + canvasX;\n const y = (config.y ?? 0) * this.scale() + canvasY;\n\n if (isNaN(x) || isNaN(y)) {\n console.warn('ImageDesignerService.addLayer: Calculated layer position is NaN', { x, y, config, canvasWidth, canvasHeight, canvasX, canvasY, scale: this.scale() });\n return undefined;\n }\n\n if (config.type === 'text') {\n const fontSize = config['fontSize'] || 18;\n const padding = 10;\n shape = new Konva.Text({\n id: config.id,\n name: 'text',\n x,\n y,\n text: config['text'] || 'New Text',\n fontSize,\n fontFamily: config['fontFamily'] || this.defaultFont,\n fontStyle: config['fontWeight'] ? `${config['fontWeight']}` : 'normal',\n fill: config['fill'] || '#000000',\n opacity: config['opacity'] ?? 1,\n align: config['align'] || 'left',\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n padding: padding,\n wrap: 'word',\n width: config.width || undefined,\n });\n if (config['fontWeight']) {\n shape.setAttr('fontWeight', config['fontWeight']);\n }\n\n // If width is not provided, let's set a default width for headings to enable wrapping/resizing properly\n if (!config.width) {\n // Measure text width and add extra horizontal padding\n const textWidth = shape.width() + 55;\n shape.width(textWidth);\n }\n\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n this.applyEffectsToShape(shape, config);\n } else if (config.type === 'image') {\n const imageObj = new Image();\n imageObj.crossOrigin = 'anonymous';\n imageObj.onload = () => {\n if (shape) {\n (shape as Konva.Image).image(imageObj);\n if (!config.width || !config.height) {\n shape.width(imageObj.width);\n shape.height(imageObj.height);\n }\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n\n if (this.transformer?.nodes().includes(shape)) {\n this.transformer.forceUpdate();\n }\n\n this.applyEffectsToShape(shape, config);\n this.workspaceLayer?.batchDraw();\n }\n };\n imageObj.src = config['src'] || '';\n\n shape = new Konva.Image({\n id: config.id,\n name: 'image',\n x,\n y,\n width: config.width || 0,\n height: config.height || 0,\n image: undefined,\n opacity: config['opacity'] ?? 1,\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n });\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n } else if (config.type === 'shape') {\n const imageObj = new Image();\n imageObj.onload = () => {\n if (shape) {\n (shape as Konva.Image).image(imageObj);\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n\n if (this.transformer?.nodes().includes(shape)) {\n this.transformer.forceUpdate();\n }\n\n this.applyEffectsToShape(shape, config);\n this.workspaceLayer?.batchDraw();\n }\n };\n imageObj.src = config['data'] || '';\n\n shape = new Konva.Image({\n id: config.id,\n name: 'rect',\n x,\n y,\n width: config.width || 100,\n height: config.height || 100,\n image: undefined,\n opacity: config['opacity'] ?? 1,\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n });\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n } else if (config.type === 'pattern') {\n const patternImageObj = new Image();\n patternImageObj.onload = () => {\n if (shape) {\n const rect = shape as Konva.Rect;\n rect.fillPatternImage(patternImageObj);\n\n // If original pattern is too big, scale it down.\n // Or just provide a default scale for better look.\n const patternScale = 0.5; // Fixed pattern scale for better look or based on config\n rect.fillPatternScale({ x: patternScale, y: patternScale });\n\n this.workspaceLayer?.batchDraw();\n }\n };\n patternImageObj.src = typeof config.patternImage === 'string' ? config.patternImage : (config.patternImage?.src || '');\n\n shape = new Konva.Rect({\n id: config.id,\n name: 'pattern',\n x,\n y,\n width: config.width || canvasWidth,\n height: config.height || canvasHeight,\n opacity: config['opacity'] ?? 1,\n scaleX: this.scale(),\n scaleY: this.scale(),\n draggable: !config.locked,\n listening: true,\n visible: config.visible !== false,\n fillPatternRepeat: 'repeat',\n });\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n\n // Ensure pattern stays centered even if shape size changes\n // Konva's fillPatternOffset is in local coordinates of the shape (after scale/offset?)\n // Actually it's simpler: if we want it centered, we just need to keep it consistent.\n }\n\n if (shape) {\n if (config.id) {\n shape.id(config.id);\n }\n this.workspaceLayer.add(shape);\n\n // Select the new layer automatically\n if (updateList && config.id) {\n this.selectLayer(config.id);\n }\n\n // Update Konva Z-index based on the array order\n if (updateList) {\n this.reorderLayers(0, 0); // This will refresh all Z-indices based on the current _layers()\n }\n this.workspaceLayer.batchDraw();\n\n shape.on('mouseenter', () => {\n if (this.isDragging || this.isSelecting || !this.hoverRect) return;\n\n // Don't show hover for already selected shapes\n const selectedNodes = this.transformer?.nodes() || [];\n if (selectedNodes.includes(shape!)) return;\n\n this.showHover(shape!);\n });\n\n shape.on('mouseleave', () => {\n this.hideHover();\n });\n\n shape.dragBoundFunc((pos) => {\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 1 && nodes.includes(shape!)) {\n return pos;\n }\n\n const guides = this.getSnappingGuides(shape!, pos);\n let x = pos.x;\n let y = pos.y;\n\n if (guides.vertical.length > 0) {\n const vGuide = guides.vertical[0];\n x = vGuide.guide - vGuide.offset + shape!.offsetX() * shape!.scaleX();\n }\n\n if (guides.horizontal.length > 0) {\n const hGuide = guides.horizontal[0];\n y = hGuide.guide - hGuide.offset + shape!.offsetY() * shape!.scaleY();\n }\n\n return { x, y };\n });\n\n shape.on('dragstart', () => {\n this.isDragging = true;\n this.hideHover();\n });\n\n shape.on('dragmove', (e) => {\n const nodes = this.transformer?.nodes() || [];\n if (nodes.length > 1 && nodes.includes(shape!)) {\n // If part of group, let transformer.on('dragmove') handle it\n return;\n }\n\n if (nodes.includes(shape!) && nodes.length > 1) {\n nodes.forEach(node => {\n this.updateShapeOriginalPosition(node as Konva.Shape, false);\n });\n } else {\n this.updateShapeOriginalPosition(shape!, false);\n }\n\n const absPos = shape!.getAbsolutePosition();\n const guides = this.getSnappingGuides(shape!, absPos);\n this.drawSnappingLines(guides);\n });\n\n shape.on('dragend', () => {\n this.isDragging = false;\n this.clearSnapLines();\n const nodes = this.transformer?.nodes() || [];\n if (nodes.includes(shape!) && nodes.length > 1) {\n // Batch update signal for all nodes in the group\n this.updateShapesOriginalPositions(nodes as Konva.Shape[]);\n } else {\n // Single shape drag - update signal\n this.updateShapeOriginalPosition(shape!);\n }\n this.notifyChange();\n });\n\n shape.on('transform', () => {\n if (shape!.name() === 'pattern') {\n const rect = shape as Konva.Rect;\n const scaleX = rect.scaleX();\n const scaleY = rect.scaleY();\n rect.width(rect.width() * (scaleX / this.scale()));\n rect.height(rect.height() * (scaleY / this.scale()));\n rect.scaleX(this.scale());\n rect.scaleY(this.scale());\n rect.offsetX(rect.width() / 2);\n rect.offsetY(rect.height() / 2);\n }\n\n const absPos = shape!.getAbsolutePosition();\n const guides = this.getSnappingGuides(shape!, absPos);\n this.drawSnappingLines(guides);\n\n this.updateShapeOriginalPosition(shape!);\n });\n\n shape.on('transformend', () => {\n this.clearSnapLines();\n if (!(shape instanceof Konva.Text)) {\n const scaleX = shape!.scaleX();\n const scaleY = shape!.scaleY();\n shape!.width(shape!.width() * (scaleX / this.scale()));\n shape!.height(shape!.height() * (scaleY / this.scale()));\n shape!.scaleX(this.scale());\n shape!.scaleY(this.scale());\n shape!.offsetX(shape!.width() / 2);\n shape!.offsetY(shape!.height() / 2);\n }\n this.updateShapeOriginalPosition(shape!);\n this.notifyChange();\n });\n\n shape.setAttr('originalX', config.x ?? 0);\n shape.setAttr('originalY', config.y ?? 0);\n\n // Ensure UI layer and its elements are on top\n this.uiLayer?.moveToTop();\n this.maskOverlay?.moveToTop();\n this.transformer?.moveToTop();\n this.hoverRect?.moveToTop();\n }\n\n return config.id;\n }\n\n private updateShapeOriginalPosition(shape: Konva.Shape, updateSignal = true) {\n if (!this.canvasRect) return;\n\n const scale = this.scale();\n const originalX = (shape.x() - this.canvasRect.x()) / scale;\n const originalY = (shape.y() - this.canvasRect.y()) / scale;\n const originalScaleX = shape.scaleX() / scale;\n const originalScaleY = shape.scaleY() / scale;\n\n shape.setAttr('originalX', originalX);\n shape.setAttr('originalY', originalY);\n shape.setAttr('originalScaleX', originalScaleX);\n shape.setAttr('originalScaleY', originalScaleY);\n\n if (updateSignal) {\n // Update the signal\n const id = shape.id();\n this._layers.update(layers =>\n layers.map(l => l.id === id ? {\n ...l,\n x: originalX,\n y: originalY,\n width: shape.width(),\n height: shape.height(),\n scaleX: originalScaleX,\n scaleY: originalScaleY,\n rotation: shape.rotation()\n } : l)\n );\n }\n }\n\n private updateShapesOriginalPositions(shapes: Konva.Shape[]) {\n if (!this.canvasRect) return;\n\n const scale = this.scale();\n const updates = new Map<string, any>();\n\n shapes.forEach(shape => {\n const originalX = (shape.x() - this.canvasRect!.x()) / scale;\n const originalY = (shape.y() - this.canvasRect!.y()) / scale;\n const originalScaleX = shape.scaleX() / scale;\n const originalScaleY = shape.scaleY() / scale;\n\n shape.setAttr('originalX', originalX);\n shape.setAttr('originalY', originalY);\n shape.setAttr('originalScaleX', originalScaleX);\n shape.setAttr('originalScaleY', originalScaleY);\n\n updates.set(shape.id(), {\n x: originalX,\n y: originalY,\n width: shape.width(),\n height: shape.height(),\n scaleX: originalScaleX,\n scaleY: originalScaleY,\n rotation: shape.rotation()\n });\n });\n\n // Update the signal once for all shapes\n this._layers.update(layers =>\n layers.map(l => {\n const update = updates.get(l.id!);\n return update ? { ...l, ...update } : l;\n })\n );\n }\n\n private getNodesClientRect(nodes: Konva.Node[]) {\n if (nodes.length === 0) return { x: 0, y: 0, width: 0, height: 0 };\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n nodes.forEach(node => {\n const box = node.getClientRect();\n minX = Math.min(minX, box.x);\n minY = Math.min(minY, box.y);\n maxX = Math.max(maxX, box.x + box.width);\n maxY = Math.max(maxY, box.y + box.height);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n\n private getSnappingGuides(targetNode: Konva.Node | Konva.Node[], pos?: { x: number, y: number }) {\n if (!this.canvasRect || !this.workspaceLayer) return { vertical: [], horizontal: [] };\n\n const nodes = Array.isArray(targetNode) ? targetNode : [targetNode];\n const isGroup = nodes.length > 1;\n\n const snapRange = this.snapSettings.snapRange;\n const resultV: any[] = [];\n const resultH: any[] = [];\n\n // Bases for snapping\n const basesV: number[] = [];\n const basesH: number[] = [];\n\n // 1. Stage centers and borders\n if (this.snapSettings.snapToStageCenter || this.snapSettings.snapToStageBorders) {\n const cw = this.canvasRect.width() * this.scale();\n const ch = this.canvasRect.height() * this.scale();\n const cx = this.canvasRect.x();\n const cy = this.canvasRect.y();\n\n if (this.snapSettings.snapToStageBorders) {\n basesV.push(cx); // Left\n basesV.push(cx + cw); // Right\n basesH.push(cy); // Top\n basesH.push(cy + ch); // Bottom\n }\n\n if (this.snapSettings.snapToStageCenter) {\n basesV.push(cx + cw / 2); // Center V\n basesH.push(cy + ch / 2); // Center H\n }\n }\n\n // 2. Other shapes\n if (this.snapSettings.snapToShapes) {\n const selectedNodes = this.transformer?.nodes() || [];\n this.workspaceLayer.getChildren().forEach((child) => {\n if (nodes.includes(child) || child === this.canvasRect || child.name() === 'selection-rect' || (selectedNodes.length > 0 && selectedNodes.includes(child))) return;\n\n const box = child.getClientRect();\n basesV.push(box.x);\n basesV.push(box.x + box.width / 2);\n basesV.push(box.x + box.width);\n basesH.push(box.y);\n basesH.push(box.y + box.height / 2);\n basesH.push(box.y + box.height);\n });\n }\n\n const targetBox = isGroup ? this.getNodesClientRect(nodes) : nodes[0].getClientRect();\n\n // If pos is provided (from dragBoundFunc for single node), we use it.\n // For group drag via transformer, we don't use pos here because we apply delta later.\n let targetX = targetBox.x;\n let targetY = targetBox.y;\n\n if (!isGroup && pos) {\n targetX = pos.x - nodes[0].offsetX() * nodes[0].scaleX();\n targetY = pos.y - nodes[0].offsetY() * nodes[0].scaleY();\n }\n\n const targetWidth = targetBox.width;\n const targetHeight = targetBox.height;\n\n basesV.forEach((base) => {\n const vSnaps = [\n { guide: base, offset: 0, diff: Math.abs(base - targetX) },\n { guide: base, offset: targetWidth / 2, diff: Math.abs(base - (targetX + targetWidth / 2)) },\n { guide: base, offset: targetWidth, diff: Math.abs(base - (targetX + targetWidth)) }\n ];\n\n vSnaps.forEach(s => {\n if (s.diff < snapRange) {\n resultV.push(s);\n }\n });\n });\n\n basesH.forEach((base) => {\n const hSnaps = [\n { guide: base, offset: 0, diff: Math.abs(base - targetY) },\n { guide: base, offset: targetHeight / 2, diff: Math.abs(base - (targetY + targetHeight / 2)) },\n { guide: base, offset: targetHeight, diff: Math.abs(base - (targetY + targetHeight)) }\n ];\n\n hSnaps.forEach(s => {\n if (s.diff < snapRange) {\n resultH.push(s);\n }\n });\n });\n\n return {\n vertical: resultV.sort((a, b) => a.diff - b.diff),\n horizontal: resultH.sort((a, b) => a.diff - b.diff)\n };\n }\n\n private drawSnappingLines(guides: { vertical: any[], horizontal: any[] }) {\n this.clearSnapLines();\n if (!this.uiLayer || !this.snapSettings.showGuidelines) return;\n\n const vGuide = guides.vertical[0];\n const hGuide = guides.horizontal[0];\n\n if (vGuide) {\n const line = new Konva.Line({\n points: [vGuide.guide, 0, vGuide.guide, this.stage!.height()],\n stroke: this.snapSettings.guidelineColor,\n strokeWidth: 1,\n dash: [4, 6],\n name: 'snap-line'\n });\n this.uiLayer.add(line);\n this.snapLines.push(line);\n }\n\n if (hGuide) {\n const line = new Konva.Line({\n points: [0, hGuide.guide, this.stage!.width(), hGuide.guide],\n stroke: this.snapSettings.guidelineColor,\n strokeWidth: 1,\n dash: [4, 6],\n name: 'snap-line'\n });\n this.uiLayer.add(line);\n this.snapLines.push(line);\n }\n\n this.uiLayer.batchDraw();\n }\n\n private clearSnapLines() {\n this.snapLines.forEach(l => l.destroy());\n this.snapLines = [];\n this.uiLayer?.batchDraw();\n }\n\n private consecutiveUpdatesCount = 0;\n private lastUpdateSizeTime = 0;\n private lastUpdateSizeDimensions = { width: 0, height: 0 };\n private isSnapshotLoading = false;\n\n private setupResizeObserver(container: HTMLDivElement, imageSize: ImageSize) {\n this.resizeObserver = new ResizeObserver(() => {\n // Use requestAnimationFrame to avoid \"ResizeObserver loop completed with undelivered notifications\" error\n // This ensures that the size update happens in the next frame after the layout has settled.\n requestAnimationFrame(() => {\n if (this.stage) {\n this.updateSize(container, imageSize);\n }\n });\n });\n this.resizeObserver.observe(container);\n }\n\n updateSize(container: HTMLDivElement, imageSize: ImageSize, fitToContainer = false, notify = false) {\n if (!this.stage || !this.canvasRect || !this.workspaceLayer || !this.uiLayer) {\n return;\n }\n\n const now = Date.now();\n if (this.lastUpdateSizeTime && now - this.lastUpdateSizeTime < 50) {\n this.consecutiveUpdatesCount++;\n if (this.consecutiveUpdatesCount > 100) {\n console.warn('ImageDesignerService.updateSize: Potential infinite loop detected, aborting');\n return;\n }\n } else {\n this.consecutiveUpdatesCount = 0;\n }\n this.lastUpdateSizeTime = now;\n this.lastUpdateSizeDimensions = { width: imageSize.width, height: imageSize.height };\n\n const width = Math.round(container.offsetWidth || imageSize.width || 800);\n const height = Math.round(container.offsetHeight || imageSize.height || 600);\n\n console.log('ImageDesignerService.updateSize dimensions:', width, 'x', height);\n\n // Skip if size is effectively 0 to avoid incorrect centering\n if (width === 0 || height === 0) {\n console.warn('ImageDesignerService.updateSize: dimensions are 0, skipping');\n return;\n }\n\n if (fitToContainer) {\n const padding = 40;\n const availableWidth = width - padding * 2;\n const availableHeight = height - padding * 2;\n\n const scaleX = availableWidth / (imageSize.width || 1);\n const scaleY = availableHeight / (imageSize.height || 1);\n\n const newScale = Math.min(scaleX, scaleY);\n const clampedScale = Math.min(Math.max(newScale, this.minScale), this.maxScale);\n\n this.scale.set(clampedScale);\n }\n\n // Skip if size hasn't changed to avoid unnecessary re-draws and potential loops (unless scale is being updated)\n // Use a small epsilon to avoid loops due to sub-pixel changes\n const sizeChanged = Math.abs(this.stage.width() - width) > 0.5 || Math.abs(this.stage.height() - height) > 0.5;\n const canvasSizeChanged = Math.abs(this.canvasRect.width() - imageSize.width) > 0.5 || Math.abs(this.canvasRect.height() - imageSize.height) > 0.5;\n const scaleChanged = Math.abs(this.canvasRect.scaleX() - this.scale()) > 0.001;\n\n if (!sizeChanged && !scaleChanged && !canvasSizeChanged) {\n return;\n }\n\n if (isNaN(width) || isNaN(height)) {\n console.warn('ImageDesignerService.updateSize: width or height is NaN', { width, height, container, imageSize });\n return;\n }\n\n console.log('Updating stage size to:', width, 'x', height);\n this.stage.width(width);\n this.stage.height(height);\n\n const canvasWidth = imageSize.width || 0;\n const canvasHeight = imageSize.height || 0;\n\n console.log('Setting canvasRect size to:', canvasWidth, 'x', canvasHeight);\n this.canvasRect.width(canvasWidth);\n this.canvasRect.height(canvasHeight);\n this.canvasRect.offsetX(canvasWidth / 2);\n this.canvasRect.offsetY(canvasHeight / 2);\n\n const canvasX = width / 2;\n const canvasY = height / 2;\n\n if (!isNaN(canvasX) && !isNaN(canvasY)) {\n console.log('Centering canvasRect at:', canvasX, canvasY);\n this.canvasRect.x(canvasX);\n this.canvasRect.y(canvasY);\n this.canvasRect.scaleX(this.scale());\n this.canvasRect.scaleY(this.scale());\n\n // Update positions of all elements in workspaceLayer relative to new canvas position\n this.workspaceLayer.getChildren().forEach(child => {\n if (child !== this.canvasRect && child.name() !== 'transformer') {\n const originalX = (child.attrs['originalX'] as number) ?? 0;\n const originalY = (child.attrs['originalY'] as number) ?? 0;\n child.x(originalX * this.scale() + canvasX);\n child.y(originalY * this.scale() + canvasY);\n\n // Use the original scale for layers that have one (like flipped ones)\n const originalScaleX = (child.attrs['originalScaleX'] as number) ?? 1;\n const originalScaleY = (child.attrs['originalScaleY'] as number) ?? 1;\n child.scaleX(this.scale() * originalScaleX);\n child.scaleY(this.scale() * originalScaleY);\n }\n });\n this.selectionRect?.visible(false); // Hide selection rect on resize as its coordinates are now invalid\n this.uiLayer.moveToTop(); // Ensure UI layer is always on top of workspace layer\n this.maskOverlay?.moveToTop(); // Mask on top of everything for clipping effect\n this.transformer?.moveToTop();\n this.hoverRect?.moveToTop();\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n\n if (this.hoveredShape && this.hoverRect?.visible()) {\n this.showHover(this.hoveredShape);\n }\n } else {\n console.warn('ImageDesignerService.updateSize: Calculated canvas positions are NaN', { canvasX, canvasY, width, height, canvasWidth, scale: this.scale() });\n }\n\n this.uiLayer?.batchDraw();\n this.workspaceLayer?.batchDraw();\n\n if (notify) {\n this.notifyChange();\n }\n }\n\n setScale(scale: number) {\n const clampedScale = Math.min(Math.max(scale, this.minScale), this.maxScale);\n\n if (!this.isBrowser) {\n this.scale.set(clampedScale);\n return;\n }\n\n this.scale.set(clampedScale);\n\n if (this.stage && this.canvasRect && this.workspaceLayer && this.uiLayer) {\n const container = this.stage.container() as HTMLDivElement;\n const imageSize = {\n width: this.canvasRect.width(),\n height: this.canvasRect.height()\n };\n\n // Update canvas positions and scales based on new scale\n this.updateSize(container, imageSize);\n\n this.transformer?.forceUpdate();\n this.uiLayer.batchDraw();\n this.workspaceLayer.batchDraw();\n }\n }\n\n zoomIn() {\n this.setScale(this.scale() + 0.1);\n }\n\n zoomOut() {\n this.setScale(this.scale() - 0.1);\n }\n\n setMinMaxScale(minScale: number, maxScale: number) {\n this.minScale = minScale;\n this.maxScale = maxScale;\n this.setScale(this.scale());\n }\n\n updateSnapSettings(settings: Partial<typeof this.snapSettings>) {\n this.snapSettings = { ...this.snapSettings, ...settings };\n }\n\n setCanvasBackground(config: GradientConfig | string, notify = true) {\n if (!this.canvasRect) return;\n\n if (typeof config === 'string') {\n this.canvasRect.fill(config);\n this.canvasRect.fillLinearGradientStartPoint(null as any);\n this.canvasRect.fillLinearGradientEndPoint(null as any);\n this.canvasRect.fillLinearGradientColorStops([]);\n } else {\n this.canvasRect.fill(null as any);\n this.canvasRect.fillLinearGradientStartPoint({ x: config.x0 || 0, y: config.y0 || 0 });\n this.canvasRect.fillLinearGradientEndPoint({ x: config.x1 || 0, y: config.y1 || 0 });\n this.canvasRect.fillLinearGradientColorStops(config.colorStops);\n }\n this.workspaceLayer?.batchDraw();\n if (notify) {\n this.notifyChange();\n }\n }\n\n reorderLayers(previousIndex: number, currentIndex: number) {\n if (!this.workspaceLayer || previousIndex === currentIndex) return;\n\n let updatedLayers: LayerConfig[] = [];\n this._layers.update(layers => {\n const newLayers = [...layers];\n moveItemInArray(newLayers, previousIndex, currentIndex);\n\n // Update Konva nodes Z-index based on the new array order.\n // Array: [Top, ..., Bottom]\n // Konva: [Bottom, ..., Top]\n // So we need to reverse the array when applying to Konva Z-indices.\n\n const reversedLayers = [...newLayers].reverse();\n reversedLayers.forEach((layer, index) => {\n const shape = this.workspaceLayer?.findOne('#' + layer.id);\n if (shape) {\n // Layers start from zIndex 1 because canvasRect is at 0\n shape.zIndex(index + 1);\n }\n });\n\n // Ensure canvasRect is at the bottom\n this.canvasRect?.zIndex(0);\n\n // Ensure transformer, selectionRect and hoverRect are always on top\n this.uiLayer?.moveToTop();\n this.maskOverlay?.moveToTop();\n this.transformer?.moveToTop();\n this.selectionRect?.moveToTop();\n this.hoverRect?.moveToTop();\n\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n updatedLayers = newLayers;\n return newLayers;\n });\n\n if (updatedLayers.length > 0) {\n this.notifyChange();\n }\n }\n\n currentSnapshotVersion = 0;\n\n getSnapshot(): ImageDesignerSnapshot {\n return {\n version: this.currentSnapshotVersion,\n imageSize: {\n width: this.canvasRect?.width() || 0,\n height: this.canvasRect?.height() || 0\n },\n layers: this._layers().map(layer => {\n // Ensure that any temporary 'selected' property is not included in the snapshot\n const { selected, ...rest } = layer;\n return rest;\n }),\n background: this.canvasRect?.fill() || 'white',\n backgroundConfig: this.canvasRect?.fillLinearGradientColorStops()?.length ? {\n x0: this.canvasRect.fillLinearGradientStartPoint().x,\n y0: this.canvasRect.fillLinearGradientStartPoint().y,\n x1: this.canvasRect.fillLinearGradientEndPoint().x,\n y1: this.canvasRect.fillLinearGradientEndPoint().y,\n colorStops: this.canvasRect.fillLinearGradientColorStops()\n } : undefined\n };\n }\n\n async loadSnapshot(snapshot: ImageDesignerSnapshot, resetHistory = false) {\n if (!this.stage || !this.workspaceLayer || !this.canvasRect) {\n console.warn('loadSnapshot called but service is not fully initialized');\n return;\n }\n\n if (this.isSnapshotLoading) {\n console.log('loadSnapshot ignored - already loading');\n return;\n }\n\n this.isSnapshotLoading = true;\n try {\n console.log('loadSnapshot starting', snapshot);\n\n this.currentSnapshotVersion = snapshot.version ?? 0;\n // Clear current state\n this.selectedLayerId.set(null);\n this.transformer?.nodes([]);\n\n // Remove all shapes from workspace except canvasRect\n // Critical: iterate over a copy of the children array, as destroy() modifies it\n const children = [...this.workspaceLayer.getChildren()];\n children.forEach((child: any) => {\n if (child !== this.canvasRect) {\n child.destroy();\n }\n });\n\n const { imageSize, layers, background, backgroundConfig } = snapshot;\n\n // Update size BEFORE adding layers so that addLayer uses correct canvas position and scale\n this.updateSize(this.stage.container() as HTMLDivElement, imageSize);\n\n // Restore background\n if (backgroundConfig) {\n this.setCanvasBackground(backgroundConfig, false);\n } else if (background) {\n this.setCanvasBackground(background, false);\n }\n\n // Restore layers\n const reversedLayers = [...layers].reverse();\n const newLayers: LayerConfig[] = [];\n for (const layerConfig of reversedLayers) {\n const id = layerConfig.id || Math.random().toString(36).substr(2, 9);\n const configWithId = { ...layerConfig, id };\n // We add layers to Konva but don't update the signal inside addLayer\n await this.addLayer(configWithId, false);\n // We collect them in the same order as in addLayer(..., true) which is [newConfig, ...layers]\n newLayers.unshift(configWithId);\n }\n this._layers.set(newLayers);\n\n this.workspaceLayer.batchDraw();\n this.uiLayer?.batchDraw();\n } finally {\n this.isSnapshotLoading = false;\n if (resetHistory) {\n this.resetHistory();\n } else {\n this.notifyChange(false);\n this.updateHistorySignals();\n }\n }\n }\n\n async loadAllFonts(): Promise<void> {\n const fontPromises: Promise<void>[] = [];\n\n // Always load default font\n fontPromises.push(this.loadFont(this.defaultFont));\n\n this._layers().forEach(layer => {\n if (layer.type === 'text' && layer['fontFamily']) {\n fontPromises.push(this.loadFont(layer['fontFamily']));\n } else if (layer.type === 'text') {\n fontPromises.push(this.loadFont(this.defaultFont));\n }\n });\n await Promise.all(fontPromises);\n }\n\n loadFont(fontFamily: string): Promise<void> {\n if (!this.isBrowser || this.loadedFonts.has(fontFamily)) {\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `https://fonts.googleapis.com/css2?family=${fontFamily.replace(/ /g, '+')}:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap`;\n link.onload = () => {\n this.loadedFonts.add(fontFamily);\n // Wait for font to be ready for rendering\n if ('fonts' in document) {\n (document as any).fonts.load(`1em \"${fontFamily}\"`).then(() => {\n resolve();\n }).catch(() => {\n resolve();\n });\n } else {\n // Fallback: small timeout\n setTimeout(() => resolve(), 100);\n }\n };\n link.onerror = () => {\n console.error(`Failed to load font: ${fontFamily}`);\n resolve();\n };\n document.head.appendChild(link);\n });\n }\n\n getLayerThumbnail(id: string, effectId?: string): string | null {\n if (!this.workspaceLayer) return null;\n const shape = this.workspaceLayer.findOne('#' + id);\n if (!shape) return null;\n\n try {\n if (effectId) {\n // Clone the shape to apply the effect without affecting the original\n const clone = shape.clone();\n const layer = this._layers().find(l => l.id === id);\n if (layer) {\n const tempConfig = { ...layer, effect: effectId };\n this.applyEffectsToShape(clone, tempConfig);\n }\n const dataUrl = clone.toDataURL({\n pixelRatio: 0.5,\n quality: 0.5\n });\n clone.destroy();\n return dataUrl;\n }\n\n // Create a small thumbnail of the shape\n return shape.toDataURL({\n pixelRatio: 0.5,\n quality: 0.5\n });\n } catch (e) {\n console.warn('Failed to generate thumbnail for layer', id, e);\n return null;\n }\n }\n\n async updateLayer(id: string, config: Partial<LayerConfig>) {\n const layer = this._layers().find(l => l.id === id);\n if (!layer) return;\n\n const shape = this.workspaceLayer?.findOne('#' + id);\n\n if (config['scaleX'] !== undefined && shape) {\n shape.scaleX(config['scaleX']);\n }\n if (config['scaleY'] !== undefined && shape) {\n shape.scaleY(config['scaleY']);\n }\n if (config['x'] !== undefined && shape) {\n shape.x(config['x']);\n }\n if (config['y'] !== undefined && shape) {\n shape.y(config['y']);\n }\n if (config['rotation'] !== undefined && shape) {\n shape.rotation(config['rotation']);\n }\n if (config['width'] !== undefined && shape && !(shape instanceof Konva.Text)) {\n shape.width(config['width']);\n shape.offsetX(shape.width() / 2);\n }\n if (config['height'] !== undefined && shape && !(shape instanceof Konva.Text)) {\n shape.height(config['height']);\n shape.offsetY(shape.height() / 2);\n }\n if (config['width'] !== undefined && shape instanceof Konva.Text) {\n shape.width(config['width']);\n shape.offsetX(shape.width() / 2);\n }\n\n if (shape) {\n this.updateShapeOriginalPosition(shape as Konva.Shape, true);\n }\n\n this._layers.update(layers =>\n layers.map(l => l.id === id ? { ...l, ...config } : l)\n );\n\n const updatedLayer = this._layers().find(l => l.id === id);\n\n if (shape && updatedLayer) {\n this.applyEffectsToShape(shape, updatedLayer);\n }\n\n // If font-related properties changed, ensure the font variant is loaded and applied\n if (this.isBrowser && shape instanceof Konva.Text && (\n config['fontFamily'] !== undefined ||\n config['fontWeight'] !== undefined ||\n config['fontStyle'] !== undefined\n )) {\n const family = config['fontFamily'] || shape.fontFamily();\n const weight = config['fontWeight'] || shape.getAttr('fontWeight') || 400;\n const isItalic = (config['fontStyle'] === 'italic') || (shape.fontStyle() || '').includes('italic');\n const fontStr = `${isItalic ? 'italic ' : ''}${weight} 12px \"${family}\"`;\n\n if (config['fontFamily']) {\n await this.loadFont(config['fontFamily']);\n this.workspaceLayer?.batchDraw();\n }\n\n try {\n await document.fonts.load(fontStr);\n this.workspaceLayer?.batchDraw();\n } catch (e) {\n console.warn('Failed to load font variant:', fontStr);\n }\n }\n\n if (shape) {\n if (config.fill !== undefined) {\n const type = config.type || layer.type;\n if (type === 'shape' || type === 'pattern') {\n // For SVG shapes and patterns, we can replace the color in the SVG data.\n const currentLayer = this._layers().find(l => l.id === id);\n const dataKey = type === 'shape' ? 'data' : 'patternImage';\n const dataUrl = currentLayer?.[dataKey];\n\n if (typeof dataUrl === 'string' && dataUrl.startsWith('data:image/svg+xml') &&\n config.fill && !config.fill.startsWith('data:image') && !config.fill.startsWith('http')) {\n const commaIndex = dataUrl.indexOf(',');\n if (commaIndex !== -1) {\n const header = dataUrl.substring(0, commaIndex);\n const isBase64 = header.includes('base64');\n const svgText = isBase64\n ? atob(dataUrl.substring(commaIndex + 1))\n : decodeURIComponent(dataUrl.substring(commaIndex + 1));\n\n const newFill = config.fill;\n // Replace both fill and stroke colors\n const newSvgText = svgText\n .replace(/fill=\"[#][0-9a-fA-F]{3,6}\"/g, `fill=\"${newFill}\"`)\n .replace(/fill='%23[0-9a-fA-F]{3,6}'/g, `fill='${newFill}'`)\n .replace(/stroke=\"[#][0-9a-fA-F]{3,6}\"/g, `stroke=\"${newFill}\"`)\n .replace(/stroke='%23[0-9a-fA-F]{3,6}'/g, `stroke='${newFill}'`);\n\n const newDataUrl = isBase64\n ? `${header},${btoa(newSvgText)}`\n : `${header},${encodeURIComponent(newSvgText)}`;\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n if (type === 'shape') {\n (shape as Konva.Image).image(img);\n } else {\n shape.setAttr('fillPatternImage', img);\n }\n this.workspaceLayer?.batchDraw();\n };\n img.src = newDataUrl;\n // Update the data in the signal too\n this._layers.update(layers => layers.map(l => l.id === id ? { ...l, [dataKey]: newDataUrl } : l));\n }\n } else if (config.fill && (config.fill.startsWith('data:image') || config.fill.startsWith('http'))) {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n shape.setAttr('fillPatternImage', img);\n this.workspaceLayer?.batchDraw();\n };\n img.src = config.fill;\n if (type === 'pattern') {\n this._layers.update(layers => layers.map(l => l.id === id ? { ...l, patternImage: config.fill } : l));\n }\n } else {\n shape.setAttr('fill', config.fill);\n if (type !== 'pattern') {\n shape.setAttr('fillPatternImage', null);\n }\n }\n } else if (config.fill && (config.fill.startsWith('data:image') || config.fill.startsWith('http'))) {\n // It's a pattern for other types\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n shape.setAttr('fillPatternImage', img);\n this.workspaceLayer?.batchDraw();\n };\n img.src = config.fill;\n } else {\n shape.setAttr('fill', config.fill);\n shape.setAttr('fillPatternImage', null);\n }\n }\n if (config['opacity'] !== undefined) {\n shape.opacity(config['opacity']);\n }\n if (config['text'] !== undefined && shape instanceof Konva.Text) {\n shape.text(config['text']);\n // Update offset because content changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n if (config['fontSize'] !== undefined && shape instanceof Konva.Text) {\n shape.fontSize(config['fontSize']);\n // Update offset because size changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n if (config['width'] !== undefined && shape instanceof Konva.Text) {\n shape.width(config['width'] * this.scale());\n // Update offset because width changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n if (config['fontFamily'] !== undefined && shape instanceof Konva.Text) {\n shape.fontFamily(config['fontFamily']);\n }\n if (config['fontWeight'] !== undefined && shape instanceof Konva.Text) {\n shape.setAttr('fontWeight', config['fontWeight']);\n // Konva's fontStyle property is used for weight and style.\n // If we have numeric fontWeight, we can try to use it directly in fontStyle as well.\n const currentStyle = (shape.fontStyle() || '').includes('italic') ? 'italic' : '';\n shape.fontStyle(`${config['fontWeight']} ${currentStyle}`.trim());\n // Update offset because size changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n // Force text refresh to update layout before transformer update\n this.workspaceLayer?.batchDraw();\n }\n if (config['fontStyle'] !== undefined && shape instanceof Konva.Text) {\n // If fontStyle is provided, it might override fontWeight if we are not careful.\n // But usually fontStyle in this app means 'italic' or 'normal'.\n const currentWeight = shape.getAttr('fontWeight') || 400;\n if (config['fontStyle'] === 'italic') {\n shape.fontStyle(currentWeight + ' italic');\n } else {\n shape.fontStyle(currentWeight.toString());\n }\n // Update offset because size changed\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n // Force text refresh to update layout before transformer update\n this.workspaceLayer?.batchDraw();\n }\n if (config['textDecoration'] !== undefined && shape instanceof Konva.Text) {\n shape.textDecoration(config['textDecoration']);\n }\n if (config['align'] !== undefined && shape instanceof Konva.Text) {\n shape.align(config['align']);\n }\n if (config['lineHeight'] !== undefined && shape instanceof Konva.Text) {\n shape.lineHeight(config['lineHeight']);\n }\n if (config['letterSpacing'] !== undefined && shape instanceof Konva.Text) {\n shape.letterSpacing(config['letterSpacing']);\n }\n if (config['textCase'] !== undefined && shape instanceof Konva.Text) {\n const text = layer.text || '';\n if (config['textCase'] === 'upper') {\n shape.text(text.toUpperCase());\n } else {\n shape.text(text);\n }\n }\n\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n this.notifyChange();\n\n // If text properties changed, update again after a short delay\n // to handle cases where text layout hasn't updated yet.\n if (shape instanceof Konva.Text && (\n config['fontFamily'] !== undefined ||\n config['fontSize'] !== undefined ||\n config['text'] !== undefined ||\n config['fontWeight'] !== undefined ||\n config['fontStyle'] !== undefined\n )) {\n setTimeout(() => {\n if (shape instanceof Konva.Text) {\n // Re-calculate offsets one more time as dimensions might have changed\n // after the browser fully applied the font metrics.\n shape.offsetX(shape.width() / 2);\n shape.offsetY(shape.height() / 2);\n }\n\n if (this.transformer) {\n // Re-assigning nodes is the most reliable way to force Transformer\n // to re-calculate its boundaries and adapt to the new text size.\n const currentNodes = this.transformer.nodes();\n this.transformer.nodes([]);\n this.transformer.nodes(currentNodes);\n }\n\n this.workspaceLayer?.batchDraw();\n this.uiLayer?.batchDraw();\n this.transformer?.forceUpdate();\n this.updateSelectionBorders();\n }, 100);\n }\n }\n }\n\n getBase64Image(): string | undefined {\n if (!this.stage || !this.canvasRect) {\n return undefined;\n }\n\n // Capture original state\n const wasUiLayerVisible = this.uiLayer?.visible() || false;\n const originalStroke = this.canvasRect.stroke();\n const originalStrokeWidth = this.canvasRect.strokeWidth();\n\n // Hide UI layer to exclude transformers, snap lines, etc. from export\n this.uiLayer?.visible(false);\n\n // Temporarily hide canvas border\n this.canvasRect.stroke(null);\n this.canvasRect.strokeWidth(0);\n\n // Get the client rect of the canvas area relative to the stage\n const rect = this.canvasRect.getClientRect({ relativeTo: this.stage });\n\n // Ensure we are in a browser\n if (!this.isBrowser) {\n return undefined;\n }\n\n try {\n const dataUrl = this.stage.toDataURL({\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n pixelRatio: 2 // High quality\n });\n\n return dataUrl;\n } catch (e) {\n console.error('Failed to get base64 image:', e);\n return undefined;\n } finally {\n // Restore UI layer visibility\n if (wasUiLayerVisible) {\n this.uiLayer?.visible(true);\n }\n // Restore canvas border\n this.canvasRect.stroke(originalStroke);\n this.canvasRect.strokeWidth(originalStrokeWidth);\n }\n }\n\n downloadImage() {\n if (!this.stage || !this.canvasRect) {\n return;\n }\n\n // Capture original state\n const wasUiLayerVisible = this.uiLayer?.visible() || false;\n const originalStroke = this.canvasRect.stroke();\n const originalStrokeWidth = this.canvasRect.strokeWidth();\n\n // Hide UI layer to exclude transformers, snap lines, etc. from export\n this.uiLayer?.visible(false);\n\n // Temporarily hide canvas border\n this.canvasRect.stroke(null);\n this.canvasRect.strokeWidth(0);\n\n // Get the client rect of the canvas area relative to the stage\n const rect = this.canvasRect.getClientRect({ relativeTo: this.stage });\n\n // Ensure we are in a browser\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const dataUrl = this.stage.toDataURL({\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n pixelRatio: 2 // High quality\n });\n\n const timestamp = new Date().getTime();\n const filename = `${timestamp}.png`;\n\n const downloadLink = document.createElement('a');\n downloadLink.href = dataUrl;\n downloadLink.download = filename;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n } catch (e) {\n console.error('Failed to export image:', e);\n } finally {\n // Restore UI layer visibility\n if (wasUiLayerVisible) {\n this.uiLayer?.visible(true);\n }\n // Restore canvas border\n this.canvasRect.stroke(originalStroke);\n this.canvasRect.strokeWidth(originalStrokeWidth);\n }\n }\n\n private notifyChange(incrementVersion = true) {\n if (this.isSnapshotLoading) return;\n if (incrementVersion) {\n this.currentSnapshotVersion++;\n this.saveHistory();\n }\n this._change$.next();\n }\n\n private saveHistory() {\n const snapshot = this.getSnapshot();\n // Don't save if it's the same as the last one\n if (this.undoStack.length > 0) {\n const last = this.undoStack[this.undoStack.length - 1];\n if (JSON.stringify(last.layers) === JSON.stringify(snapshot.layers) &&\n JSON.stringify(last.imageSize) === JSON.stringify(snapshot.imageSize) &&\n last.background === snapshot.background &&\n JSON.stringify(last.backgroundConfig) === JSON.stringify(snapshot.backgroundConfig)) {\n return;\n }\n }\n this.undoStack.push(snapshot);\n if (this.undoStack.length > this.historyLimit) {\n this.undoStack.shift();\n }\n this.redoStack = [];\n this.updateHistorySignals();\n }\n\n undo() {\n if (this.undoStack.length <= 1) return;\n const current = this.undoStack.pop();\n this.redoStack.push(current);\n const previous = this.undoStack[this.undoStack.length - 1];\n this.loadSnapshot(previous, false);\n }\n\n redo() {\n if (this.redoStack.length === 0) return;\n const next = this.redoStack.pop();\n this.undoStack.push(next);\n this.loadSnapshot(next, false);\n }\n\n private updateHistorySignals() {\n this.canUndo.set(this.undoStack.length > 1);\n this.canRedo.set(this.redoStack.length > 0);\n }\n\n resetHistory() {\n this.undoStack = [this.getSnapshot()];\n this.redoStack = [];\n this.updateHistorySignals();\n }\n\n private applyEffectsToShape(shape: Konva.Node, config: LayerConfig) {\n const filters: any[] = [];\n let tintR = 0;\n let tintG = 0;\n let tintB = 0;\n\n if (config['effect'] === 'grayscale') {\n filters.push(Konva.Filters.Grayscale);\n } else if (config['effect'] === 'sepia') {\n filters.push(Konva.Filters.Sepia);\n } else if (config['effect'] === 'invert') {\n filters.push(Konva.Filters.Invert);\n } else if (config['effect'] === 'cold') {\n tintR = -0.15;\n tintG = 0.05;\n tintB = 0.25;\n filters.push(TintFilter);\n } else if (config['effect'] === 'warm') {\n tintR = 0.25;\n tintG = 0.1;\n tintB = -0.15;\n filters.push(TintFilter);\n }\n\n if (config['temperatureEnabled']) {\n const temp = (config['temperature'] ?? 0) / 100; // -1 to 1\n if (!filters.includes(TintFilter)) filters.push(TintFilter);\n if (temp > 0) {\n tintR += (1 - tintR) * temp * 0.2;\n tintG += (1 - tintG) * temp * 0.1;\n tintB -= (1 + tintB) * temp * 0.2;\n } else {\n const absTemp = Math.abs(temp);\n tintR -= (1 + tintR) * absTemp * 0.2;\n tintG += (1 - tintG) * absTemp * 0.1;\n tintB += (1 - tintB) * absTemp * 0.2;\n }\n }\n\n shape.setAttr('tintR', tintR);\n shape.setAttr('tintG', tintG);\n shape.setAttr('tintB', tintB);\n\n if (config['blurEnabled']) {\n filters.push(Konva.Filters.Blur);\n shape.setAttr('blurRadius', config['blur'] ?? 0);\n }\n\n if (config['brightnessEnabled']) {\n filters.push(Konva.Filters.Brighten);\n shape.setAttr('brightness', config['brightness'] ?? 0);\n }\n\n if (config['contrastEnabled']) {\n filters.push(Konva.Filters.Contrast);\n shape.setAttr('contrast', config['contrast'] ?? 0);\n }\n\n if (config['saturationEnabled']) {\n filters.push(Konva.Filters.HSL);\n shape.setAttr('saturation', config['saturation'] ?? 0);\n }\n\n if (config['vibranceEnabled']) {\n // Konva doesn't have Vibrance by default, using HSL saturation as fallback\n if (!filters.includes(Konva.Filters.HSL)) {\n filters.push(Konva.Filters.HSL);\n }\n shape.setAttr('saturation', (config['saturation'] ?? 0) + (config['vibrance'] ?? 0) / 2);\n }\n\n if (config['borderEnabled']) {\n shape.setAttr('stroke', config['borderColor'] || config['fill'] || '#000000');\n shape.setAttr('strokeWidth', config['border'] ?? 0);\n } else {\n shape.setAttr('strokeWidth', 0);\n }\n\n if (config['cornerRadiusEnabled']) {\n const radius = config['cornerRadius'] ?? 0;\n if (shape instanceof Konva.Rect || shape instanceof Konva.Image) {\n shape.cornerRadius(radius);\n }\n } else {\n if (shape instanceof Konva.Rect || shape instanceof Konva.Image) {\n shape.cornerRadius(0);\n }\n }\n\n if (config['shadowEnabled']) {\n shape.setAttr('shadowColor', config['shadowColor'] || '#000000');\n shape.setAttr('shadowBlur', config['shadowBlur'] ?? 15);\n shape.setAttr('shadowOpacity', (config['shadowOpacity'] ?? 100) / 100);\n shape.setAttr('shadowOffset', {\n x: config['shadowOffsetX'] ?? 0,\n y: config['shadowOffsetY'] ?? 0\n });\n } else {\n shape.setAttr('shadowOpacity', 0);\n }\n\n shape.filters(filters);\n\n if (filters.length > 0 || (config['cornerRadiusEnabled'] && config['cornerRadius'] > 0)) {\n // In Konva, caching is required for filters to work, and for cornerRadius to clip Image\n shape.clearCache();\n shape.cache();\n } else {\n shape.clearCache();\n }\n\n this.workspaceLayer?.batchDraw();\n }\n\n destroy() {\n this.isInitialized.set(false);\n if (this.isBrowser) {\n window.removeEventListener('mouseup', this.handleGlobalMouseUp);\n window.removeEventListener('touchend', this.handleGlobalMouseUp);\n window.removeEventListener('mousemove', this.handleGlobalMouseMove);\n window.removeEventListener('touchmove', this.handleGlobalMouseMove);\n }\n this.resizeObserver?.disconnect();\n this.stage?.off('mousedown touchstart');\n this.stage?.off('mousemove touchmove');\n this.stage?.off('mouseup touchend');\n this.hideHover();\n this.stage?.destroy();\n this.stage = undefined;\n this.uiLayer = undefined;\n this.workspaceLayer = undefined;\n this.canvasRect = undefined;\n this.maskOverlay = undefined;\n this.transformer = undefined;\n this.selectionRect = undefined;\n this.hoverRect = undefined;\n this.selectionBordersGroup = undefined;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { ImageDesignerPhoto, PhotosDataSource, PhotosGetRowsParams, PicsumImage } from './types';\nimport { map } from 'rxjs';\n\nexport function createDefaultPhotosDataSource(http: HttpClient): PhotosDataSource {\n return {\n getItems: (params: PhotosGetRowsParams) => {\n const url = `https://picsum.photos/v2/list?page=${params.page}&limit=${params.pageSize}`;\n http.get<PicsumImage[]>(url).pipe(\n map(images => images.map(img => ({\n id: img.id,\n name: img.author,\n width: img.width,\n height: img.height,\n url: img.download_url,\n thumbUrl: `https://picsum.photos/id/${img.id}/${img.width > img.height ? 400 : Math.round(400 * (img.width / img.height))}/${img.height > img.width ? 400 : Math.round(400 * (img.height / img.width))}`\n } as ImageDesignerPhoto)))\n ).subscribe({\n next: (data) => params.successCallback(data),\n error: () => params.failCallback()\n });\n }\n };\n}\n","export const SVG_PATTERNS: string[] = [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect width=\"4\" height=\"4\" x=\"10\" y=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect width=\"6\" height=\"6\" x=\"20\" y=\"20\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"0\" x2=\"40\" y2=\"40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"40\" y1=\"0\" x2=\"0\" y2=\"40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect width=\"20\" height=\"20\" x=\"10\" y=\"10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 H40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M20 0 V40\" stroke=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"5\" r=\"2\" fill=\"#64748b\"/><circle cx=\"25\" cy=\"25\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"0\" width=\"8\" height=\"8\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"32\" y=\"32\" width=\"8\" height=\"8\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"30\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"30\" cy=\"10\" r=\"3\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 10 H40\" stroke=\"#64748b\"/><path d=\"M0 30 H40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"10\" y=\"10\" width=\"5\" height=\"5\" fill=\"#64748b\"/><rect x=\"25\" y=\"25\" width=\"5\" height=\"5\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"5\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,5 25,15 15,15\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,35 25,25 15,25\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"5,20 15,15 15,25\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"35,20 25,15 25,25\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"0\" x2=\"20\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"40\" y1=\"0\" x2=\"20\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><line x1=\"0\" y1=\"40\" x2=\"20\" y2=\"20\" stroke=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"15\" y=\"15\" width=\"10\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"5\" r=\"1\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"35\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"35\" cy=\"5\" r=\"1\" fill=\"#64748b\"/><circle cx=\"5\" cy=\"35\" r=\"1\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M5 5 L35 35\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M35 5 L5 35\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"18\" y=\"18\" width=\"4\" height=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,10 30,30 10,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"10\" r=\"1\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"30\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"30\" cy=\"10\" r=\"1\" fill=\"#64748b\"/><circle cx=\"10\" cy=\"30\" r=\"1\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M10 10 H30 V30 H10 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"5\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"35\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"18\" width=\"40\" height=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"18\" y=\"0\" width=\"4\" height=\"40\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"20\" r=\"4\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"30\" cy=\"20\" r=\"4\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"8\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 L20 0 L40 20 L20 40 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 10 L10 0 L20 10 L30 0 L40 10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 30 L10 40 L20 30 L30 40 L40 30\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"0\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/><rect x=\"20\" y=\"20\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"20\" y=\"0\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/><rect x=\"0\" y=\"20\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 0 L40 20 L0 40 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M40 0 L0 20 L40 40 Z\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"10,0 30,0 40,20 30,40 10,40 0,20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 0 L20 20 L40 0\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 40 L20 20 L40 40\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"0\" cy=\"0\" r=\"5\" fill=\"#64748b\"/><circle cx=\"40\" cy=\"40\" r=\"5\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"40\" cy=\"0\" r=\"5\" fill=\"#64748b\"/><circle cx=\"0\" cy=\"40\" r=\"5\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,5 35,35 5,35\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"5,5 35,5 20,35\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"5\" y=\"5\" width=\"30\" height=\"30\" rx=\"5\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"10\" y=\"10\" width=\"20\" height=\"20\" rx=\"10\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"12\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"20\" r=\"4\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"20\" r=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"4\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"4\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 Q10 0 20 20 T40 20\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 20 Q10 40 20 20 T40 20\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"15\" y=\"0\" width=\"10\" height=\"40\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"0\" y=\"15\" width=\"40\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,20 10,10 20,20 10,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"20,0 30,10 20,20 10,10\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"5\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"5\" r=\"2\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"2\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"35\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M10 0 L20 10 L30 0 L40 10\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><path d=\"M0 30 L10 20 L20 30 L30 20 L40 30\" stroke=\"#64748b\" fill=\"none\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,0 40,0 20,20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,40 40,40 20,20\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"10\" cy=\"10\" r=\"3\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"10\" r=\"3\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"30\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"10\" r=\"2\" fill=\"#64748b\"/><circle cx=\"10\" cy=\"30\" r=\"2\" fill=\"#64748b\"/><circle cx=\"30\" cy=\"30\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"5\" y=\"5\" width=\"10\" height=\"10\" fill=\"#64748b\"/><rect x=\"25\" y=\"25\" width=\"10\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><rect x=\"25\" y=\"5\" width=\"10\" height=\"10\" fill=\"#64748b\"/><rect x=\"5\" y=\"25\" width=\"10\" height=\"10\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"3\" fill=\"#64748b\"/><circle cx=\"20\" cy=\"5\" r=\"3\" fill=\"#64748b\"/><circle cx=\"5\" cy=\"20\" r=\"3\" fill=\"#64748b\"/><circle cx=\"35\" cy=\"20\" r=\"3\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"10,20 20,10 30,20 20,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"6\" fill=\"none\" stroke=\"#64748b\"/><circle cx=\"20\" cy=\"20\" r=\"2\" fill=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"5,20 20,5 35,20 20,35\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><circle cx=\"20\" cy=\"20\" r=\"14\" fill=\"none\" stroke=\"#64748b\"/></svg>`,\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"><polygon points=\"0,10 40,10 20,30\" fill=\"none\" stroke=\"#64748b\"/></svg>`\n];\n","import { ElementConfig } from './types';\n\nexport const SVG_ELEMENTS: ElementConfig[] = [\n {\n name: 'square-filled',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"15\" y=\"15\" width=\"70\" height=\"70\" fill=\"%2364748b\"/></svg>'\n },\n {\n name: 'square-outline',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"15\" y=\"15\" width=\"70\" height=\"70\" fill=\"none\" stroke=\"%2364748b\" stroke-width=\"8\"/></svg>'\n },\n {\n name: 'rectangle-filled',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"10\" y=\"25\" width=\"80\" height=\"50\" fill=\"%2364748b\"/></svg>'\n },\n {\n name: 'rectangle-outline',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect x=\"10\" y=\"25\" width=\"80\" height=\"50\" fill=\"none\" stroke=\"%2364748b\" stroke-width=\"8\"/></svg>'\n },\n {\n name: 'arrow-right-1',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M10 45H65L50 30L90 50L50 70L65 55H10Z\"/></svg>'\n },\n {\n name: 'arrow-right-2',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,40 60,40 60,25 90,50 60,75 60,60 10,60\"/></svg>'\n },\n {\n name: 'arrow-right-3',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,45 55,45 55,30 90,50 55,70 55,55 10,55\"/></svg>'\n },\n {\n name: 'arrow-right-4',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"15,40 65,40 65,25 90,50 65,75 65,60 15,60\"/></svg>'\n },\n {\n name: 'arrow-right-5',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,42 58,42 58,28 90,50 58,72 58,58 10,58\"/></svg>'\n },\n {\n name: 'arrow-right-fat',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,35 55,35 55,20 90,50 55,80 55,65 10,65\"/></svg>'\n },\n {\n name: 'arrow-right-wide',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,38 60,38 60,22 90,50 60,78 60,62 10,62\"/></svg>'\n },\n {\n name: 'arrow-right-long',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"5,45 70,45 70,30 95,50 70,70 70,55 5,55\"/></svg>'\n },\n {\n name: 'arrow-right-compact',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,45 60,45 60,35 85,50 60,65 60,55 20,55\"/></svg>'\n },\n {\n name: 'arrow-right-block',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,40 55,40 55,25 85,50 55,75 55,60 10,60\"/></svg>'\n },\n {\n name: 'arrow-right',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M20 45H65L50 30L80 50L50 70L65 55H20Z\"/></svg>'\n },\n {\n name: 'arrow-left',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M80 45H35L50 30L20 50L50 70L35 55H80Z\"/></svg>'\n },\n {\n name: 'arrow-up',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M45 80V35L30 50L50 20L70 50L55 35V80Z\"/></svg>'\n },\n {\n name: 'triangle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 90,90 10,90\"/></svg>'\n },\n {\n name: 'diamond',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 90,50 50,90 10,50\"/></svg>'\n },\n {\n name: 'pentagon',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 90,40 70,90 30,90 10,40\"/></svg>'\n },\n {\n name: 'parallelogram',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,20 90,20 70,80 0,80\"/></svg>'\n },\n {\n name: 'star',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 61,40 95,40 67,60 78,90 50,70 22,90 33,60 5,40 39,40\"/></svg>'\n },\n {\n name: 'hexagon',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"30,10 70,10 90,50 70,90 30,90 10,50\"/></svg>'\n },\n {\n name: 'chevron',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,30 50,60 80,30 80,50 50,80 20,50\"/></svg>'\n },\n {\n name: 'arrow',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 60,10 60,35 90,35 90,65 60,65 60,90\"/></svg>'\n },\n {\n name: 'cross',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"40,10 60,10 60,40 90,40 90,60 60,60 60,90 40,90 40,60 10,60 10,40 40,40\"/></svg>'\n },\n {\n name: 'trapezoid',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,30 80,30 65,80 35,80\"/></svg>'\n },\n {\n name: 'kite',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 80,50 50,90 20,50\"/></svg>'\n },\n {\n name: 'zigzag',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,30 40,30 25,55 60,55 45,80 90,80 90,90 10,90\"/></svg>'\n },\n {\n name: 'notched-rect',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,20 70,20 90,40 90,80 10,80\"/></svg>'\n },\n {\n name: 'double-triangle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,80 40,20 60,80\"/><polygon fill=\"%2364748b\" points=\"50,80 70,20 90,80\"/></svg>'\n },\n {\n name: 'shield',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 10 L85 25 L80 70 L50 90 L20 70 L15 25 Z\"/></svg>'\n },\n {\n name: 'octagon',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"30,10 70,10 90,30 90,70 70,90 30,90 10,70 10,30\"/></svg>'\n },\n {\n name: 'right-triangle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,90 10,10 90,90\"/></svg>'\n },\n {\n name: 'corner-cut',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,10 80,10 90,20 90,80 80,90 20,90 10,80 10,20\"/></svg>'\n },\n {\n name: 'arrow-wide',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 50,10 50,30 90,30 90,70 50,70 50,90\"/></svg>'\n },\n {\n name: 'triangle-down',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,20 90,20 50,90\"/></svg>'\n },\n {\n name: 'triangle-left',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"80,10 20,50 80,90\"/></svg>'\n },\n {\n name: 'triangle-right',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"20,10 80,50 20,90\"/></svg>'\n },\n {\n name: 'wide-trapezoid',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,30 90,30 70,80 30,80\"/></svg>'\n },\n {\n name: 'cut-diamond',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,5 90,50 50,95 10,50 30,50\"/></svg>'\n },\n {\n name: 'house',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 50,10 90,50 90,90 10,90\"/></svg>'\n },\n {\n name: 'tag',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,40 50,10 90,40 70,90 30,90\"/></svg>'\n },\n {\n name: 'double-chevron',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,30 40,50 10,70 25,70 55,50 25,30\"/><polygon fill=\"%2364748b\" points=\"45,30 75,50 45,70 60,70 90,50 60,30\"/></svg>'\n },\n {\n name: 'diamond-wide',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"50,10 95,50 50,90 5,50\"/></svg>'\n },\n {\n name: 'notch-top',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,20 40,20 50,10 60,20 90,20 90,90 10,90\"/></svg>'\n },\n {\n name: 'notch-bottom',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,10 90,10 90,80 60,80 50,90 40,80 10,80\"/></svg>'\n },\n {\n name: 'step-shape',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,80 10,40 40,40 40,20 90,20 90,80\"/></svg>'\n },\n {\n name: 'skew-arrow',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,60 60,20 60,40 90,40 90,80 60,80 60,90\"/></svg>'\n },\n {\n name: 'barbed',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><polygon fill=\"%2364748b\" points=\"10,50 30,30 50,50 70,30 90,50 70,70 50,50 30,70\"/></svg>'\n },\n {\n name: 'circle',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"50\" r=\"40\"/></svg>'\n },\n {\n name: 'circle-ring',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"50\" r=\"40\"/><circle fill=\"white\" cx=\"50\" cy=\"50\" r=\"20\"/></svg>'\n },\n {\n name: 'circle-cut-top',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"60\" r=\"35\"/></svg>'\n },\n {\n name: 'circle-half',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M10 50 A40 40 0 0 1 90 50 L90 90 L10 90 Z\"/></svg>'\n },\n {\n name: 'circle-quarter',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 50 L90 50 A40 40 0 0 0 50 10 Z\"/></svg>'\n },\n {\n name: 'circle-pacman',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 10 A40 40 0 1 1 50 90 L70 50 Z\"/></svg>'\n },\n {\n name: 'circle-segment',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M50 50 L50 10 A40 40 0 0 1 90 50 Z\"/></svg>'\n },\n {\n name: 'circle-dot',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"50\" cy=\"50\" r=\"35\"/><circle fill=\"white\" cx=\"50\" cy=\"50\" r=\"10\"/></svg>'\n },\n {\n name: 'circle-double',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle fill=\"%2364748b\" cx=\"40\" cy=\"50\" r=\"25\"/><circle fill=\"%2364748b\" cx=\"65\" cy=\"50\" r=\"25\"/></svg>'\n },\n {\n name: 'circle-arc',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M10 50 A40 40 0 0 1 90 50 L70 50 A20 20 0 0 0 30 50 Z\"/></svg>'\n },\n {\n name: 'blob-1',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M32 15C50 5 78 18 85 40C92 65 70 90 45 85C20 80 10 55 15 35C20 25 25 18 32 15Z\"/></svg>'\n },\n {\n name: 'blob-2',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M40 10C65 5 90 25 85 50C80 80 55 95 35 85C15 75 10 50 20 30C25 20 30 15 40 10Z\"/></svg>'\n },\n {\n name: 'blob-3',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M28 20C45 5 75 10 85 35C95 60 75 90 50 88C25 85 10 60 15 40C18 30 22 25 28 20Z\"/></svg>'\n },\n {\n name: 'blob-4',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M35 12C55 2 85 18 88 42C92 70 70 92 45 88C20 85 8 60 15 38C18 28 25 18 35 12Z\"/></svg>'\n },\n {\n name: 'blob-5',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M30 18C52 4 80 15 88 38C95 62 75 90 50 90C25 90 10 65 15 42C18 30 22 25 30 18Z\"/></svg>'\n },\n {\n name: 'blob-6',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M38 14C60 5 85 20 90 45C95 70 70 92 45 88C20 85 5 60 12 38C18 25 25 18 38 14Z\"/></svg>'\n },\n {\n name: 'blob-7',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M25 22C45 8 78 12 88 35C98 60 78 92 50 90C22 88 8 60 12 40C15 32 18 26 25 22Z\"/></svg>'\n },\n {\n name: 'blob-8',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M35 18C58 6 85 18 92 40C98 65 78 90 52 88C25 85 10 60 15 38C18 30 25 22 35 18Z\"/></svg>'\n },\n {\n name: 'blob-9',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M30 12C52 4 82 15 90 38C98 65 75 92 48 90C22 88 8 62 15 38C20 25 22 20 30 12Z\"/></svg>'\n },\n {\n name: 'blob-10',\n data: 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"%2364748b\" d=\"M34 16C55 5 80 15 88 36C95 60 78 90 50 92C22 95 8 65 15 42C20 30 25 22 34 16Z\"/></svg>'\n }\n];\n","import { ImagePresetCategory } from './types';\n\nexport const PRESET_CATEGORIES: ImagePresetCategory[] = [\n {\n name: 'Instagram',\n icon: 'fluent:camera-24-regular',\n presets: [\n { name: 'Post', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n { name: 'Story', width: 1080, height: 1920, icon: 'fluent:video-clip-24-regular' },\n { name: 'Ad', width: 1080, height: 1080, icon: 'fluent:megaphone-24-regular' },\n ]\n },\n {\n name: 'Facebook',\n icon: 'fluent:people-24-regular',\n presets: [\n { name: 'Post (Landscape)', width: 1200, height: 630, icon: 'fluent:image-24-regular' },\n { name: 'Post (Square)', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n { name: 'Cover', width: 851, height: 315, icon: 'fluent:image-24-regular' },\n ]\n },\n {\n name: 'Youtube',\n icon: 'fluent:video-24-regular',\n presets: [\n { name: 'Thumbnail', width: 1280, height: 720, icon: 'fluent:image-24-regular' },\n { name: 'Channel', width: 2560, height: 1440, icon: 'fluent:image-24-regular' },\n { name: 'Short', width: 1080, height: 1920, icon: 'fluent:video-clip-24-regular' },\n ]\n },\n {\n name: 'LinkedIn',\n icon: 'fluent:briefcase-24-regular',\n presets: [\n { name: 'Post', width: 1200, height: 627, icon: 'fluent:image-24-regular' },\n { name: 'Banner', width: 1584, height: 396, icon: 'fluent:image-24-regular' },\n { name: 'Square', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n ]\n },\n {\n name: 'Twitter',\n icon: 'fluent:news-24-regular',\n presets: [\n { name: 'Post', width: 1600, height: 900, icon: 'fluent:image-24-regular' },\n { name: 'Header', width: 1500, height: 500, icon: 'fluent:image-24-regular' },\n { name: 'Square', width: 1080, height: 1080, icon: 'fluent:image-24-regular' },\n ]\n },\n {\n name: 'Video',\n icon: 'fluent:video-24-regular',\n presets: [\n { name: 'Full HD', width: 1920, height: 1080, icon: 'fluent:video-24-regular' },\n { name: '4K UHD', width: 3840, height: 2160, icon: 'fluent:video-24-regular' },\n { name: 'Vertical HD', width: 1080, height: 1920, icon: 'fluent:video-24-regular' },\n { name: 'Square HD', width: 1080, height: 1080, icon: 'fluent:video-24-regular' },\n ]\n }\n];\n","import { InjectionToken } from '@angular/core';\nexport const IMAGE_DESIGNER = new InjectionToken<any>('IMAGE_DESIGNER');\n","import { CommonModule, DecimalPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { IMAGE_DESIGNER } from '../tokens';\nimport { ImageDesignerService } from '../image-designer.service';\nimport { LayerConfig } from '../types';\nimport { ColorSwitcher } from '@ngstarter-ui/components/color-switcher';\nimport { Slider } from '@ngstarter-ui/components/slider';\nimport { SliderThumb } from '@ngstarter-ui/components/slider';\nimport { Toolbar, ToolbarItem, ToolbarSpacer } from '@ngstarter-ui/components/toolbar';\nimport { Popover, PopoverContent, PopoverTriggerForDirective } from '@ngstarter-ui/components/popover';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Divider } from '@ngstarter-ui/components/divider';\nimport { Menu, MenuItem, MenuTrigger } from '@ngstarter-ui/components/menu';\nimport { ButtonToggle, ButtonToggleGroup } from '@ngstarter-ui/components/button-toggle';\nimport { Ripple } from '@ngstarter-ui/components/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ngs-settings',\n imports: [\n CommonModule,\n ColorSwitcher,\n Slider,\n SliderThumb,\n Toolbar,\n ToolbarItem,\n Popover,\n PopoverContent,\n PopoverTriggerForDirective,\n Button,\n Icon,\n Divider,\n DecimalPipe,\n Menu,\n MenuItem,\n MenuTrigger,\n Ripple,\n ToolbarSpacer,\n ButtonToggle,\n ButtonToggleGroup,\n FormsModule\n ],\n templateUrl: './settings.html',\n styleUrl: './settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Settings {\n private imageDesigner = inject(IMAGE_DESIGNER, { optional: true });\n private designerService = inject(ImageDesignerService);\n\n selectedLayerId = this.designerService.selectedLayerId;\n layers = this.designerService.layers;\n fonts = this.designerService.fonts;\n\n selectedLayer = computed(() => {\n const id = this.selectedLayerId();\n if (!id) return null;\n return this.layers().find(l => l.id === id) as LayerConfig;\n });\n\n showColorPicker = computed(() => {\n const layer = this.selectedLayer();\n if (!layer) return false;\n return ['text', 'shape', 'pattern'].includes(layer.type);\n });\n\n presetColors = signal<string[]>([\n '#000000', '#7a7a7a', '#ffffff',\n '#f44336', '#e91e63', '#9c27b0',\n '#673ab7', '#3f51b5', '#2196f3',\n '#03a9f4', '#00bcd4', '#009688',\n '#4caf50', '#8bc34a', '#cddc39',\n '#ffeb3b', '#ffc107', '#ff9800',\n '#ff5722', '#795548', '#607d8b'\n ]);\n\n fontWeightNames: Record<number, string> = {\n 100: 'Thin',\n 200: 'Extra Light',\n 300: 'Light',\n 400: 'Regular',\n 500: 'Medium',\n 600: 'Semi Bold',\n 700: 'Bold',\n 800: 'Extra Bold',\n 900: 'Black'\n };\n\n getFontWeightName(value: any): string {\n const numericValue = value === 'bold' ? 700 : (value === 'normal' ? 400 : (parseInt(value, 10) || 400));\n return this.fontWeightNames[numericValue] || numericValue.toString();\n }\n\n async updateOpacity(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { opacity: value });\n }\n }\n\n async updateColor(color: string) {\n const id = this.selectedLayerId();\n const layer = this.selectedLayer();\n if (id && layer) {\n await this.designerService.updateLayer(id, { fill: color, type: layer.type });\n }\n }\n\n async updateFont(font: string) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.loadFont(font);\n await this.designerService.updateLayer(id, { fontFamily: font });\n }\n }\n\n async updateFontWeight(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { fontWeight: value });\n }\n }\n\n async updateTextStyle(style: string[]) {\n const id = this.selectedLayerId();\n if (!id) return;\n\n const decorations = [];\n if (style.includes('underline')) decorations.push('underline');\n if (style.includes('line-through')) decorations.push('line-through');\n\n const config: any = {\n fontStyle: style.includes('italic') ? 'italic' : 'normal',\n textDecoration: decorations.join(' ') || 'none'\n };\n\n await this.designerService.updateLayer(id, config);\n }\n\n async toggleUppercase() {\n const id = this.selectedLayerId();\n const layer = this.selectedLayer();\n if (id && layer) {\n const currentCase = layer['textCase'];\n const newCase = currentCase === 'upper' ? 'normal' : 'upper';\n await this.designerService.updateLayer(id, { textCase: newCase });\n }\n }\n\n async updateTextAlign(align: string) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { align });\n }\n }\n\n async updateLineHeight(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { lineHeight: value });\n }\n }\n\n async updateLetterSpacing(value: number) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { letterSpacing: value });\n }\n }\n\n getTextStyle = computed(() => {\n const layer = this.selectedLayer();\n if (!layer) return [];\n const styles = [];\n if (layer['fontStyle'] === 'italic') styles.push('italic');\n const decoration = layer['textDecoration'] || '';\n if (decoration.includes('underline')) styles.push('underline');\n if (decoration.includes('line-through')) styles.push('line-through');\n return styles;\n }, {\n equal: (a, b) => {\n if (a.length !== b.length) return false;\n return a.every((v, i) => v === b[i]);\n }\n });\n\n toggleLock() {\n const id = this.selectedLayerId();\n if (id) {\n this.designerService.toggleLayerLock(id);\n }\n }\n\n async flipHorizontal() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.flipHorizontal(id);\n }\n }\n\n async flipVertical() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.flipVertical(id);\n }\n }\n\n async fitToPage() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.fitToPage(id);\n }\n }\n\n async fillPage() {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.fillPage(id);\n }\n }\n\n saveSnapshot() {\n const snapshot = this.designerService.getSnapshot();\n const dataStr = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(snapshot));\n const downloadAnchorNode = document.createElement('a');\n downloadAnchorNode.setAttribute(\"href\", dataStr);\n downloadAnchorNode.setAttribute(\"download\", \"design-snapshot.json\");\n document.body.appendChild(downloadAnchorNode);\n downloadAnchorNode.click();\n downloadAnchorNode.remove();\n }\n\n loadSnapshot(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files[0]) {\n const reader = new FileReader();\n reader.onload = async (e) => {\n try {\n const snapshot = JSON.parse(e.target?.result as string);\n await this.designerService.loadSnapshot(snapshot);\n } catch (error) {\n console.error('Failed to load snapshot:', error);\n }\n };\n reader.readAsText(input.files[0]);\n }\n }\n\n openEffects() {\n this.imageDesigner?.openEffects();\n }\n}\n","@let layer = selectedLayer();\n\n@if (layer) {\n <ngs-toolbar\n class=\"h-14 z-10 bg-surface-container-lowest border-b border-border px-5 absolute top-0 left-0 right-0\">\n <!-- Color -->\n @if (showColorPicker()) {\n <ngs-toolbar-item>\n <button [ngsPopoverTriggerFor]=\"colorPopover\"\n position=\"below-center\"\n class=\"size-7 cursor-pointer hover:ring-2 hover:ring-primary rounded-full border border-border\"\n ngsRipple\n [style.backgroundColor]=\"layer['fill'] || '#000000'\">\n </button>\n <ngs-popover #colorPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-72\">\n <div class=\"text-xs font-medium uppercase text-muted-foreground mb-4\">\n {{ layer.type === 'text' ? 'Text Color' : 'Fill Color' }}\n </div>\n <ngs-color-switcher [colors]=\"presetColors()\"\n [selectedColor]=\"layer['fill'] || '#000000'\"\n (colorChange)=\"updateColor($event)\"/>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n <ngs-divider vertical/>\n }\n\n <!-- Opacity -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"opacityPopover\"\n position=\"below-center\">\n <ngs-icon name=\"fluent:blur-24-regular\"/>\n </button>\n <ngs-popover #opacityPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-60 space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Opacity</label>\n <span class=\"text-xs text-muted-foreground\">{{ (layer['opacity'] ?? 1) * 100 | number:'1.0-0' }}%</span>\n </div>\n <ngs-slider [min]=\"0\" [max]=\"1\" [step]=\"0.01\">\n <input ngsSliderThumb\n [value]=\"layer['opacity'] ?? 1\"\n (valueChange)=\"updateOpacity($event)\"/>\n </ngs-slider>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n\n <!-- Font Selection for text layers -->\n @if (layer.type === 'text') {\n <ngs-toolbar-item>\n <button ngsButton reverse [ngsMenuTriggerFor]=\"fontMenu\">\n <span class=\"truncate max-w-[100px]\">{{ layer['fontFamily'] }}</span>\n <ngs-icon name=\"fluent:chevron-down-20-regular\" class=\"size-5\"/>\n </button>\n\n <ngs-menu #fontMenu=\"ngsMenu\">\n <div class=\"min-w-[200px]\">\n @for (font of fonts(); track font) {\n <button ngs-menu-item\n [selected]=\"layer['fontFamily'] === font\"\n (click)=\"updateFont(font)\">\n {{ font }}\n </button>\n }\n </div>\n </ngs-menu>\n </ngs-toolbar-item>\n\n <!-- Text Styles -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"boldPopover\"\n position=\"below-center\"\n [class.text-primary]=\"layer['fontWeight'] && layer['fontWeight'] !== 'normal' && layer['fontWeight'] !== 400\"\n title=\"Bold\">\n <ngs-icon name=\"fluent:text-bold-24-regular\"/>\n </button>\n <ngs-popover #boldPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-60 space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Font Weight</label>\n <span class=\"text-xs text-muted-foreground\">{{ getFontWeightName(layer['fontWeight']) }}</span>\n </div>\n <ngs-slider [min]=\"300\" [max]=\"900\" [step]=\"100\">\n <input ngsSliderThumb\n [value]=\"layer['fontWeight'] === 'bold' ? 700 : (layer['fontWeight'] === 'normal' ? 400 : (layer['fontWeight'] || 400))\"\n (valueChange)=\"updateFontWeight($event)\"/>\n </ngs-slider>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n\n <!-- Uppercase -->\n <ngs-toolbar-item>\n <button ngsIconButton\n (click)=\"toggleUppercase()\"\n [class.text-primary]=\"layer['textCase'] === 'upper'\"\n title=\"Uppercase\">\n <ngs-icon name=\"fluent:text-case-uppercase-24-regular\"/>\n </button>\n </ngs-toolbar-item>\n\n <ngs-toolbar-item>\n <ngs-button-toggle-group multiple\n hideSelectionIndicator\n onlyIcon\n [value]=\"getTextStyle()\"\n (valueChange)=\"updateTextStyle($event)\">\n <ngs-button-toggle value=\"italic\" title=\"Italic\">\n <ngs-icon name=\"fluent:text-italic-24-regular\"/>\n </ngs-button-toggle>\n <ngs-button-toggle value=\"underline\" title=\"Underline\">\n <ngs-icon name=\"fluent:text-underline-24-regular\"/>\n </ngs-button-toggle>\n <ngs-button-toggle value=\"line-through\" title=\"Strikethrough\">\n <ngs-icon name=\"fluent:text-strikethrough-24-regular\"/>\n </ngs-button-toggle>\n </ngs-button-toggle-group>\n </ngs-toolbar-item>\n\n <!-- Text Alignment -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"alignPopover\"\n position=\"below-center\"\n title=\"Alignment\">\n <ngs-icon [name]=\"'fluent:text-align-' + (layer['align'] || 'left') + '-24-regular'\"/>\n </button>\n <ngs-popover #alignPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-2 flex gap-1\">\n <button ngsIconButton (click)=\"updateTextAlign('left')\" [class.text-primary]=\"layer['align'] === 'left'\">\n <ngs-icon name=\"fluent:text-align-left-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"updateTextAlign('center')\" [class.text-primary]=\"layer['align'] === 'center'\">\n <ngs-icon name=\"fluent:text-align-center-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"updateTextAlign('right')\" [class.text-primary]=\"layer['align'] === 'right'\">\n <ngs-icon name=\"fluent:text-align-right-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"updateTextAlign('justify')\" [class.text-primary]=\"layer['align'] === 'justify'\">\n <ngs-icon name=\"fluent:text-align-justify-24-regular\"/>\n </button>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n\n <!-- Spacing (Line Height & Letter Spacing) -->\n <ngs-toolbar-item>\n <button ngsIconButton\n [ngsPopoverTriggerFor]=\"spacingPopover\"\n position=\"below-center\"\n title=\"Spacing\">\n <ngs-icon name=\"fluent:text-line-spacing-24-regular\"/>\n </button>\n <ngs-popover #spacingPopover>\n <ng-template ngsPopoverContent>\n <div class=\"p-4 w-60 space-y-6\">\n <div class=\"space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Line Height</label>\n <span class=\"text-xs text-muted-foreground\">{{ layer['lineHeight'] || 1.2 | number:'1.1-1' }}</span>\n </div>\n <ngs-slider [min]=\"0.5\" [max]=\"3\" [step]=\"0.1\">\n <input ngsSliderThumb\n [value]=\"layer['lineHeight'] || 1.2\"\n (valueChange)=\"updateLineHeight($event)\"/>\n </ngs-slider>\n </div>\n <div class=\"space-y-3\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-xs font-medium uppercase text-muted-foreground\">Letter Spacing</label>\n <span class=\"text-xs text-muted-foreground\">{{ layer['letterSpacing'] || 0 }}</span>\n </div>\n <ngs-slider [min]=\"-5\" [max]=\"50\" [step]=\"1\">\n <input ngsSliderThumb\n [value]=\"layer['letterSpacing'] || 0\"\n (valueChange)=\"updateLetterSpacing($event)\"/>\n </ngs-slider>\n </div>\n </div>\n </ng-template>\n </ngs-popover>\n </ngs-toolbar-item>\n }\n\n @if (layer.type === 'image') {\n <ngs-toolbar-item>\n <button ngsButton reverse [ngsMenuTriggerFor]=\"flipMenu\">\n <span>Flip</span>\n <ngs-icon name=\"fluent:chevron-down-20-regular\" class=\"size-5\"/>\n </button>\n\n <ngs-menu #flipMenu=\"ngsMenu\">\n <div class=\"min-w-[150px]\">\n <button ngs-menu-item (click)=\"flipHorizontal()\">\n <ngs-icon name=\"fluent:flip-horizontal-24-regular\" class=\"mr-2\"/>\n <span>Flip horizontally</span>\n </button>\n <button ngs-menu-item (click)=\"flipVertical()\">\n <ngs-icon name=\"fluent:flip-vertical-24-regular\" class=\"mr-2\"/>\n <span>Flip vertically</span>\n </button>\n </div>\n </ngs-menu>\n </ngs-toolbar-item>\n\n <ngs-toolbar-item>\n <button ngsButton reverse [ngsMenuTriggerFor]=\"fitMenu\">\n <span>Fit to</span>\n <ngs-icon name=\"fluent:chevron-down-20-regular\" class=\"size-5\"/>\n </button>\n\n <ngs-menu #fitMenu=\"ngsMenu\">\n <div class=\"min-w-[150px]\">\n <button ngs-menu-item (click)=\"fitToPage()\">\n <span>Fit to page</span>\n </button>\n <button ngs-menu-item (click)=\"fillPage()\">\n <span>Fill page</span>\n </button>\n </div>\n </ngs-menu>\n </ngs-toolbar-item>\n }\n\n <ngs-toolbar-item>\n <button ngsButton reverse (click)=\"openEffects()\">\n <span>Effects</span>\n </button>\n </ngs-toolbar-item>\n\n <ngs-toolbar-spacer/>\n\n <!-- <ngs-divider vertical/>-->\n\n <ngs-toolbar-item>\n <button ngsIconButton (click)=\"toggleLock()\">\n <ngs-icon [name]=\"layer['locked'] ? 'fluent:lock-closed-24-regular' : 'fluent:lock-open-24-regular'\"/>\n </button>\n </ngs-toolbar-item>\n\n </ngs-toolbar>\n}\n","import { Component, computed, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ImageDesignerService } from '../image-designer.service';\nimport { LayerConfig } from '../types';\nimport { Panel, PanelContent, PanelHeader } from '@ngstarter-ui/components/panel';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { IMAGE_DESIGNER } from '../tokens';\nimport { SlideToggle } from '@ngstarter-ui/components/slide-toggle';\nimport { Slider } from '@ngstarter-ui/components/slider';\nimport { SliderThumb } from '@ngstarter-ui/components/slider';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { FormsModule } from '@angular/forms';\nimport { Toolbar, ToolbarSpacer } from '@ngstarter-ui/components/toolbar';\n\nimport { ColorPicker } from '@ngstarter-ui/components/color-picker';\nimport { ColorPickerThumbnail } from '@ngstarter-ui/components/color-picker';\nimport { ColorPickerTriggerForDirective } from '@ngstarter-ui/components/color-picker';\n\n@Component({\n selector: 'ngs-effects',\n imports: [\n CommonModule,\n Panel,\n PanelHeader,\n PanelContent,\n Button,\n Icon,\n SlideToggle,\n Slider,\n SliderThumb,\n Input,\n FormsModule,\n Toolbar,\n ToolbarSpacer,\n ColorPicker,\n ColorPickerThumbnail,\n ColorPickerTriggerForDirective\n ],\n templateUrl: './effects.html',\n styleUrl: './effects.scss',\n})\nexport class Effects {\n private designerService = inject(ImageDesignerService);\n private imageDesigner = inject(IMAGE_DESIGNER);\n\n selectedLayerId = this.designerService.selectedLayerId;\n layers = this.designerService.layers;\n\n selectedLayer = computed(() => {\n const id = this.selectedLayerId();\n if (!id) return null;\n return this.layers().find(l => l.id === id) as LayerConfig;\n });\n\n private defaultThumb = 'https://picsum.photos/id/11/200/200';\n\n selectedLayerThumb = computed(() => {\n const id = this.selectedLayerId();\n if (!id) return this.defaultThumb;\n return this.designerService.getLayerThumbnail(id) || this.defaultThumb;\n });\n\n effects = computed(() => {\n const id = this.selectedLayerId();\n const thumb = this.selectedLayerThumb();\n if (!id) {\n return [\n { id: 'none', name: 'Original', thumb },\n { id: 'grayscale', name: 'Grayscale', thumb },\n { id: 'sepia', name: 'Sepia', thumb },\n { id: 'cold', name: 'Cold', thumb },\n { id: 'warm', name: 'Warm', thumb },\n ];\n }\n\n return [\n { id: 'none', name: 'Original', thumb: this.designerService.getLayerThumbnail(id, 'none') || thumb },\n { id: 'grayscale', name: 'Grayscale', thumb: this.designerService.getLayerThumbnail(id, 'grayscale') || thumb },\n { id: 'sepia', name: 'Sepia', thumb: this.designerService.getLayerThumbnail(id, 'sepia') || thumb },\n { id: 'cold', name: 'Cold', thumb: this.designerService.getLayerThumbnail(id, 'cold') || thumb },\n { id: 'warm', name: 'Warm', thumb: this.designerService.getLayerThumbnail(id, 'warm') || thumb },\n ];\n });\n\n adjustments = signal([\n { id: 'blur', name: 'Blur', min: 0, max: 20, step: 1, default: 0 },\n // { id: 'brightness', name: 'Brightness', min: -1, max: 1, step: 0.1, default: 0 },\n // { id: 'temperature', name: 'Temperature', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'contrast', name: 'Contrast', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'white', name: 'White', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'black', name: 'Black', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'vibrance', name: 'Vibrance', min: -100, max: 100, step: 1, default: 0 },\n // { id: 'saturation', name: 'Saturation', min: -100, max: 100, step: 1, default: 0 },\n { id: 'border', name: 'Border', min: 0, max: 50, step: 1, default: 0 },\n { id: 'cornerRadius', name: 'Corner Radius', min: 0, max: 100, step: 1, default: 0 },\n { id: 'shadow', name: 'Shadow', isGroup: true, controls: [\n { id: 'shadowBlur', name: 'Blur', min: 0, max: 100, step: 1, default: 15 },\n { id: 'shadowOffsetX', name: 'Offset X', min: -100, max: 100, step: 1, default: 0 },\n { id: 'shadowOffsetY', name: 'Offset Y', min: -100, max: 100, step: 1, default: 0 },\n { id: 'shadowOpacity', name: 'Opacity', min: 0, max: 100, step: 1, default: 100 },\n { id: 'shadowColor', name: 'Color', type: 'color', default: '#000000' }\n ]}\n ]);\n\n async applyEffect(effectId: string) {\n const id = this.selectedLayerId();\n if (id) {\n await this.designerService.updateLayer(id, { effect: effectId });\n }\n }\n\n async resetAll() {\n const id = this.selectedLayerId();\n if (id) {\n const config: any = { effect: 'none' };\n this.adjustments().forEach(adj => {\n config[`${adj.id}Enabled`] = false;\n if (adj.isGroup) {\n adj.controls.forEach(ctrl => {\n config[ctrl.id] = ctrl.default;\n });\n } else {\n config[adj.id] = adj.default;\n }\n });\n await this.designerService.updateLayer(id, config);\n }\n }\n\n async updateAdjustment(id: string, value: any) {\n const layerId = this.selectedLayerId();\n if (layerId) {\n await this.designerService.updateLayer(layerId, { [id]: value });\n }\n }\n\n async toggleAdjustment(id: string, enabled: boolean) {\n const layerId = this.selectedLayerId();\n if (layerId) {\n const config: any = { [`${id}Enabled`]: enabled };\n if (!enabled) {\n const adj = this.adjustments().find(a => a.id === id);\n if (adj) {\n if (adj.isGroup) {\n adj.controls.forEach(control => {\n config[control.id] = control.default;\n });\n } else {\n config[id] = adj.default;\n }\n }\n }\n await this.designerService.updateLayer(layerId, config);\n }\n }\n\n close() {\n this.imageDesigner.effectsPortal.set(null);\n }\n}\n","<ngs-panel class=\"h-full\">\n <ngs-panel-header class=\"border-b border-border flex items-center ps-4 pe-2\">\n <ngs-toolbar class=\"h-full\">\n <span class=\"font-medium\">Effects</span>\n <ngs-toolbar-spacer/>\n <button ngsButton=\"tonal\" (click)=\"resetAll()\" class=\"me-2 h-8 text-xs px-3\">\n Reset\n </button>\n <button ngsIconButton (click)=\"close()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </ngs-toolbar>\n </ngs-panel-header>\n <ngs-panel-content class=\"p-0 overflow-y-auto\">\n <div class=\"p-4\">\n <!-- Preset Effects -->\n <div class=\"flex gap-4 pb-6 scrollbar-hide flex-wrap\">\n @for (effect of effects() || []; track effect.id) {\n <button (click)=\"applyEffect(effect.id)\"\n class=\"flex flex-col items-center gap-2 group min-w-[80px]\">\n <div class=\"w-20 h-20 rounded-xl overflow-hidden border-2 transition-all group-hover:border-primary\"\n [class.border-primary]=\"(selectedLayer()?.['effect'] || 'none') === effect.id\"\n [class.border-transparent]=\"(selectedLayer()?.['effect'] || 'none') !== effect.id\">\n <img [src]=\"effect.thumb\" class=\"w-full h-full object-cover\" [alt]=\"effect.name\">\n </div>\n <span class=\"text-xs font-medium text-muted-foreground group-hover:text-foreground transition-colors\">\n {{ effect.name }}\n </span>\n </button>\n }\n </div>\n\n <!-- Adjustments -->\n <div class=\"flex flex-col gap-6\">\n @for (adj of adjustments() || []; track adj.id) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-sm font-medium\">{{ adj.name }}</span>\n <ngs-slide-toggle [checked]=\"selectedLayer()?.[adj.id + 'Enabled']\"\n (change)=\"toggleAdjustment(adj.id, $event.checked)\"/>\n </div>\n\n @if (selectedLayer()?.[adj.id + 'Enabled']) {\n <div class=\"flex flex-col gap-4\">\n @if (adj.isGroup) {\n @for (control of adj.controls || []; track control.id) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-xs text-muted-foreground\">{{ control.name }}</span>\n @if (control.type === 'color') {\n <button ngs-color-picker-thumbnail\n [color]=\"selectedLayer()?.[control.id] || control.default\"\n [ngsColorPickerTriggerFor]=\"colorPicker\"\n class=\"cursor-pointer border border-border rounded\"></button>\n <ng-template #colorPicker>\n <ngs-color-picker [ngModel]=\"selectedLayer()?.[control.id] || control.default\"\n (ngModelChange)=\"updateAdjustment(control.id, $event)\"/>\n </ng-template>\n } @else {\n <input ngsInput\n type=\"number\"\n class=\"w-16 h-8 text-center text-sm border border-border rounded-md bg-surface-container\"\n [ngModel]=\"selectedLayer()?.[control.id] ?? control.default\"\n (ngModelChange)=\"updateAdjustment(control.id, $event)\">\n }\n </div>\n @if (control.type !== 'color') {\n <ngs-slider [min]=\"control.min\"\n [max]=\"control.max\"\n [step]=\"control.step\">\n <input ngsSliderThumb\n [value]=\"selectedLayer()?.[control.id] ?? control.default\"\n (valueChange)=\"updateAdjustment(control.id, $event)\">\n </ngs-slider>\n }\n </div>\n }\n } @else {\n <div class=\"flex items-center gap-4\">\n @if (adj.id === 'border') {\n <button ngs-color-picker-thumbnail\n [color]=\"selectedLayer()?.['borderColor'] || selectedLayer()?.['fill'] || '#000000'\"\n [ngsColorPickerTriggerFor]=\"borderPicker\"\n class=\"cursor-pointer border border-border rounded\"></button>\n <ng-template #borderPicker>\n <ngs-color-picker [ngModel]=\"selectedLayer()?.['borderColor'] || selectedLayer()?.['fill'] || '#000000'\"\n (ngModelChange)=\"updateAdjustment('borderColor', $event)\"/>\n </ng-template>\n }\n <ngs-slider class=\"flex-1\"\n [min]=\"adj.min\"\n [max]=\"adj.max\"\n [step]=\"adj.step\">\n <input ngsSliderThumb\n [value]=\"selectedLayer()?.[adj.id] ?? adj.default\"\n (valueChange)=\"updateAdjustment(adj.id, $event)\">\n </ngs-slider>\n <input ngsInput\n type=\"number\"\n class=\"w-16 h-8 text-center text-sm border border-border rounded-md bg-surface-container\"\n [ngModel]=\"selectedLayer()?.[adj.id] ?? adj.default\"\n (ngModelChange)=\"updateAdjustment(adj.id, $event)\">\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </ngs-panel-content>\n</ngs-panel>\n","import { CdkDragDrop, CdkDropList, CdkDrag, CdkDragPlaceholder } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnDestroy,\n signal,\n viewChild,\n effect,\n PLATFORM_ID, OnInit, forwardRef, output, booleanAttribute, untracked,\n DestroyRef, numberAttribute\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { debounceTime, isObservable, Observable } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Panel, PanelContent, PanelHeader, PanelSidebar } from '@ngstarter-ui/components/panel';\nimport { Toolbar, ToolbarSpacer, ToolbarTitle } from '@ngstarter-ui/components/toolbar';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Divider } from '@ngstarter-ui/components/divider';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport {\n TabPanel,\n TabPanelAside,\n TabPanelAsideContentDirective,\n TabPanelContent,\n TabPanelItem, TabPanelItemIconDirective, TabPanelItemText, TabPanelNav\n} from '@ngstarter-ui/components/tab-panel';\nimport {\n UploadFileSelectedEvent,\n UploadTriggerDirective\n} from '@ngstarter-ui/components/upload';\nimport { List, ListItem, ListItemLine } from '@ngstarter-ui/components/list';\nimport { ProgressSpinner } from '@ngstarter-ui/components/spinner';\nimport { ImageDesignerService } from '../image-designer.service';\nimport {\n ElementConfig,\n LayerConfig,\n PhotosDataSource,\n ImageDesignerPhoto,\n AssetsDataSource,\n ImagePresetCategory,\n ImageSize,\n ImageDesignerUploadFn,\n ImageDesignerSnapshot\n} from '../types';\nimport { createDefaultPhotosDataSource } from '../default-photos-data-source';\nimport { FormsModule } from '@angular/forms';\nimport { Tab, TabGroup } from '@ngstarter-ui/components/tabs';\nimport { ColorSwitcher } from '@ngstarter-ui/components/color-switcher';\nimport {\n Accordion,\n ExpansionPanel,\n ExpansionPanelHeader,\n ExpansionPanelTitle\n} from '@ngstarter-ui/components/expansion';\nimport { FormField, Label } from '@ngstarter-ui/components/form-field';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { Option, Select } from '@ngstarter-ui/components/select';\nimport { ScrollbarArea } from '@ngstarter-ui/components/scrollbar-area';\nimport { SVG_PATTERNS } from '../patterns';\nimport { SVG_ELEMENTS } from '../elements';\nimport { PRESET_CATEGORIES } from '../presets';\nimport { CdkPortalOutlet, ComponentPortal, Portal } from '@angular/cdk/portal';\nimport { IMAGE_DESIGNER } from '../tokens';\nimport { Settings } from '../settings/settings';\nimport { Effects } from '../effects/effects';\n\n@Component({\n selector: 'ngs-image-designer',\n exportAs: 'ngsImageDesigner',\n imports: [\n Panel,\n PanelSidebar,\n PanelContent,\n PanelHeader,\n Toolbar,\n Button,\n ToolbarSpacer,\n Divider,\n Icon,\n ToolbarTitle,\n TabPanel,\n TabPanelAside,\n TabPanelAsideContentDirective,\n TabPanelContent,\n TabPanelItem,\n TabPanelItemIconDirective,\n TabPanelItemText,\n TabPanelNav,\n List,\n ListItem,\n ListItemLine,\n CdkDropList,\n CdkDrag,\n CdkDragPlaceholder,\n TabGroup,\n Tab,\n Accordion,\n ExpansionPanel,\n ExpansionPanelHeader,\n ExpansionPanelTitle,\n FormField,\n Label,\n Input,\n Select,\n Option,\n ColorSwitcher,\n ScrollbarArea,\n CdkPortalOutlet,\n UploadTriggerDirective,\n ProgressSpinner,\n FormsModule,\n ],\n providers: [\n ImageDesignerService,\n {\n provide: IMAGE_DESIGNER,\n useExisting: forwardRef(() => ImageDesigner)\n }\n ],\n templateUrl: './image-designer.html',\n styleUrl: './image-designer.scss',\n host: {\n 'class': 'ngs-image-designer',\n '(keydown)': 'onKeyDown($event)'\n }\n})\nexport class ImageDesigner implements AfterViewInit, OnDestroy, OnInit {\n private readonly http = inject(HttpClient);\n private readonly destroyRef = inject(DestroyRef);\n designerService = inject(ImageDesignerService);\n isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n readonly canvasContainer = viewChild<ElementRef<HTMLDivElement>>('canvasContainer');\n\n title = input('');\n imageSize = input({\n width: 700,\n height: 400\n });\n defaultFont = input<string>('Inter');\n scale = input(1);\n minScale = input(0.1);\n maxScale = input(3);\n showGuidelines = input(true);\n snapToShapes = input(true);\n snapToStageCenter = input(true);\n snapToStageBorders = input(true);\n guidelineColor = input('blue');\n snapRange = input(5);\n showDownloadButton = input(true, {\n transform: booleanAttribute\n });\n uploadFn = input<ImageDesignerUploadFn>();\n snapshot = input<ImageDesignerSnapshot>();\n snapshotChanged = output<ImageDesignerSnapshot>();\n photosDataSource = input<PhotosDataSource>();\n assetsDataSource = input<AssetsDataSource>();\n historyLimit = input(50, {\n transform: numberAttribute\n });\n\n activeItemId = signal<string | null>('text');\n elements = signal<ElementConfig[]>(SVG_ELEMENTS);\n photos = signal<ImageDesignerPhoto[]>([]);\n assets = signal<ImageDesignerPhoto[]>([]);\n photosFilter = signal('');\n assetsFilter = signal('');\n uploadedImages = signal<ImageDesignerPhoto[]>([]);\n isUploading = signal(false);\n uploadPreview = signal<string | null>(null);\n photosPage = signal(1);\n assetsPage = signal(1);\n isLoadingPhotos = signal(false);\n isLoadingAssets = signal(false);\n hasMoreAssets = signal(true);\n hasMorePhotos = signal(true);\n\n resizeWidth = signal(0);\n resizeHeight = signal(0);\n resizeUnit = signal('px');\n presetCategories = signal<ImagePresetCategory[]>(PRESET_CATEGORIES);\n\n presetColors = signal<string[]>([\n // Basic & Neutral\n '#000000', '#7a7a7a', '#ffffff',\n // Reds & Pinks\n '#f44336', '#d32f2f', '#ff5252',\n '#e91e63', '#c2185b', '#ff4081',\n // Purples & Deep Purples\n '#9c27b0', '#7b1fa2', '#e040fb',\n '#673ab7', '#512da8', '#7c4dff',\n // Blues\n '#3f51b5', '#303f9f', '#536dfe',\n '#2196f3', '#1976d2', '#448aff',\n '#03a9f4', '#0288d1', '#40c4ff',\n // Teals & Cyans\n '#00bcd4', '#0097a7', '#18ffff',\n '#009688', '#00796b', '#64ffda',\n // Greens\n '#4caf50', '#388e3c', '#00c853',\n '#8bc34a', '#689f38', '#b2ff59',\n '#cddc39', '#afb42b', '#eeff41',\n // Yellows & Oranges\n '#ffeb3b', '#fbc02d', '#ffff00',\n '#ffc107', '#ffa000', '#ffc400',\n '#ff9800', '#f57c00', '#ff9100',\n '#ff5722', '#e64a19', '#ff3d00',\n // Browns\n '#795548', '#5d4037', '#8d6e63',\n // Blue Grays & Grays\n '#607d8b', '#455a64', '#78909c',\n ]);\n background = signal([]);\n resize = signal([]);\n\n\n displayScale = this.designerService.scale;\n zoomPercentage = computed(() => (this.displayScale() * 100).toFixed(0));\n\n layersFromService = this.designerService.layers;\n selectedLayerId = this.designerService.selectedLayerId;\n\n presetPatterns = signal([\n ...SVG_PATTERNS.map(svg => `data:image/svg+xml;base64,${btoa(svg)}`),\n ]);\n\n presetGradients = computed(() => {\n const width = this.resizeWidth();\n const height = this.resizeHeight();\n const isLandscape = width >= height;\n\n const baseColors = [\n // --- VIBRANT & ENERGETIC ---\n ['#ff9a9e', '#fecfef'], ['#f093fb', '#f5576c'], ['#4facfe', '#00f2fe'],\n ['#43e97b', '#38f8d4'], ['#fa709a', '#fee140'], ['#30cfd0', '#330867'],\n ['#ff0844', '#ffb199'], ['#ff8177', '#ff867a'], ['#f83600', '#f9d423'],\n ['#b721ff', '#21d4fd'], ['#00dbde', '#fc00ff'], ['#8ec5fc', '#e0c3fc'],\n ['#6a11cb', '#2575fc'], ['#09203f', '#537895'], ['#00c6fb', '#005bea'],\n ['#ffecd2', '#fcb69f'], ['#ff758c', '#ff7eb3'], ['#868f96', '#596164'],\n ['#0ba360', '#3cba92'], ['#13547a', '#80d0c7'], ['#6a85b6', '#bac8e0'],\n ['#434343', '#000000'], ['#92fe9d', '#00c9ff'], ['#f40076', '#df98fa'],\n ['#f067b4', '#81ffef'], ['#ff4b1f', '#ff9068'], ['#16a085', '#f4d03f'],\n ['#00d2ff', '#3a7bd5'], ['#f7971e', '#ffd200'], ['#f12711', '#f5af19'],\n ['#12c2e9', '#c471ed'], ['#f64f59', '#12c2e9'], ['#74ebd5', '#acb6e5'],\n ['#ff9966', '#ff5e62'], ['#00b09b', '#96c93d'], ['#654ea3', '#eaafc8'],\n ['#4e54c8', '#8f94fb'], ['#ff0099', '#493240'], ['#8e2de2', '#4a00e0'],\n ['#3a1c71', '#d76d77'], ['#1f4037', '#99f2c8'], ['#56ab2f', '#a8e063'],\n ['#f11712', '#0099f7'], ['#11998e', '#38ef7d'], ['#fc466b', '#3f5efb'],\n ['#c94b4b', '#4b134f'], ['#00b4db', '#0083b0'], ['#7b4397', '#dc2430'],\n ['#1e3c72', '#2a5298'], ['#2c3e50', '#fd746c'], ['#f00000', '#dc281e'],\n ['#ff512f', '#dd2476'], ['#ff5f6d', '#ffc371'], ['#114357', '#f29492'],\n ['#40e0d0', '#ff8c00'], ['#ff0080', '#ff8c00'], ['#000046', '#1cb5e0'],\n ['#642b73', '#c6426e'], ['#cb2d3e', '#ef473a'], ['#5614b0', '#dbd65d'],\n ['#00c3ff', '#ffff1c'], ['#1d2b64', '#f8cdda'], ['#1a2a6c', '#b21f1f'],\n ['#cc2b5e', '#753a88'], ['#2193b0', '#6dd5ed'], ['#ee9ca7', '#ffdde1'],\n ['#e65100', '#fdb813'], ['#360033', '#0b8793'], ['#141e30', '#243b55'],\n ['#2c3e50', '#4ca1af'], ['#ff512f', '#f06292'], ['#70e1f5', '#ffd194'],\n ['#1c92d2', '#f2fcfe'], ['#3ca55c', '#b5ac49'], ['#4b6cb7', '#182848'],\n ['#00bf8f', '#001510'], ['#517fa4', '#243949'], ['#1e130c', '#9a8478'],\n ['#000000', '#533440'], ['#304352', '#d7d2cc'], ['#83a4d4', '#b6fbff'],\n ['#4568dc', '#b06ab3'], ['#ef3b36', '#ffffff'], ['#000000', '#434343'],\n ['#0f2027', '#203a43'], ['#373b44', '#4286f4'], ['#8e9eab', '#eef2f3']\n ];\n\n return baseColors.map(([c1, c2]) => ({\n x0: 0,\n y0: 0,\n x1: isLandscape ? width : 0,\n y1: isLandscape ? 0 : height,\n colorStops: [0, c1, 1, c2],\n css: `linear-gradient(${isLandscape ? '90deg' : '180deg'}, ${c1}, ${c2})`\n }));\n });\n\n settingsPortal = signal<Portal<any> | null>(null);\n effectsPortal = signal<Portal<any> | null>(null);\n\n openEffects() {\n this.effectsPortal.set(new ComponentPortal(Effects));\n }\n\n constructor() {\n this.resizeWidth.set(this.imageSize().width);\n this.resizeHeight.set(this.imageSize().height);\n\n effect(() => {\n const size = this.imageSize();\n untracked(() => {\n this.resizeWidth.set(size.width);\n this.resizeHeight.set(size.height);\n });\n });\n\n this.designerService.change$.pipe(\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => {\n this.snapshotChanged.emit(this.designerService.getSnapshot());\n });\n\n effect(() => {\n this.designerService.setScale(this.scale());\n });\n effect(() => {\n this.designerService.setMinMaxScale(this.minScale(), this.maxScale());\n });\n effect(() => {\n this.designerService.updateSnapSettings({\n showGuidelines: this.showGuidelines(),\n snapToShapes: this.snapToShapes(),\n snapToStageCenter: this.snapToStageCenter(),\n snapToStageBorders: this.snapToStageBorders(),\n guidelineColor: this.guidelineColor(),\n snapRange: this.snapRange()\n });\n });\n\n effect(() => {\n const selectedId = this.selectedLayerId();\n if (selectedId) {\n this.settingsPortal.set(new ComponentPortal(Settings));\n } else {\n this.settingsPortal.set(null);\n this.effectsPortal.set(null);\n }\n });\n\n effect(() => {\n if (this.activeItemId() === 'photos' && this.photos().length === 0 && !this.isLoadingPhotos() && this.hasMorePhotos()) {\n this.loadPhotos();\n }\n });\n\n effect(() => {\n if ((this.activeItemId() === 'assets' || this.activeItemId() === 'upload') && this.assets().length === 0 && !this.isLoadingAssets() && this.hasMoreAssets()) {\n this.loadAssets();\n }\n });\n\n effect(() => {\n this.photosFilter();\n untracked(() => {\n if (this.activeItemId() === 'photos') {\n this.photos.set([]);\n this.photosPage.set(1);\n this.hasMorePhotos.set(true);\n this.loadPhotos();\n }\n });\n });\n\n effect(() => {\n this.assetsFilter();\n untracked(() => {\n if (this.activeItemId() === 'assets' || this.activeItemId() === 'upload') {\n this.assets.set([]);\n this.assetsPage.set(1);\n this.hasMoreAssets.set(true);\n this.loadAssets();\n }\n });\n });\n\n effect(() => {\n const snapshot = this.snapshot();\n\n if (snapshot && this.designerService.isInitialized()) {\n const nextVersion = snapshot.version ?? 0;\n const currentVersion = this.designerService.currentSnapshotVersion;\n\n if (nextVersion !== currentVersion) {\n console.log(`Snapshot version: ${nextVersion}, Designer version: ${currentVersion}`);\n console.log(`Snapshot version changed, loading new snapshot`);\n this.designerService.loadSnapshot(snapshot, true);\n }\n }\n });\n }\n\n ngOnInit() {\n this.designerService.historyLimit = this.historyLimit();\n if (this.assets().length > 0) {\n this.uploadedImages.set([...this.assets()]);\n }\n }\n\n onFileSelected(event: UploadFileSelectedEvent) {\n if (event.files.length > 0) {\n const file = event.files[0];\n const uploadFn = this.uploadFn();\n\n if (uploadFn) {\n const result = uploadFn(file);\n this.isUploading.set(true);\n\n const handleSuccess = async (result: any) => {\n let photo: ImageDesignerPhoto;\n if (typeof result === 'string') {\n const dimensions = await this.getImageDimensions(result);\n photo = {\n id: Math.random().toString(36).substring(7),\n url: result,\n width: dimensions.width,\n height: dimensions.height\n };\n } else {\n photo = result;\n }\n this.uploadedImages.update(images => [photo, ...images]);\n this.isUploading.set(false);\n };\n\n const handleError = () => {\n this.isUploading.set(false);\n };\n\n if (isObservable(result)) {\n result.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: handleSuccess,\n error: handleError\n });\n } else if (result instanceof Promise) {\n result.then(handleSuccess).catch(handleError);\n } else {\n handleSuccess(result);\n }\n } else {\n this.fakeUpload(file);\n }\n }\n }\n\n private fakeUpload(file: File) {\n const reader = new FileReader();\n reader.onload = async (e: any) => {\n const url = e.target.result;\n const dimensions = await this.getImageDimensions(url);\n const photo: ImageDesignerPhoto = {\n id: Math.random().toString(36).substring(7),\n name: file.name,\n url: url,\n width: dimensions.width,\n height: dimensions.height\n };\n this.uploadedImages.update(images => [photo, ...images]);\n };\n reader.readAsDataURL(file);\n }\n\n private getImageDimensions(url: string): Promise<{ width: number, height: number }> {\n return new Promise(resolve => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.onerror = () => {\n resolve({ width: 0, height: 0 });\n };\n img.src = url;\n });\n }\n\n async addUploadedImage(photo: ImageDesignerPhoto, x = 0, y = 0) {\n const canvasWidth = this.resizeWidth();\n const canvasHeight = this.resizeHeight();\n const url = photo.url;\n\n let width = canvasWidth;\n let height = canvasWidth * (photo.height / photo.width);\n\n if (height > canvasHeight) {\n height = canvasHeight;\n width = height * (photo.width / photo.height);\n }\n\n const id = await this.designerService.addLayer({\n type: 'image',\n src: url,\n name: 'Uploaded Image',\n width,\n height,\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n\n loadAssets() {\n const dataSource = this.assetsDataSource();\n if (!dataSource || this.isLoadingAssets() || !this.hasMoreAssets()) {\n return;\n }\n\n this.isLoadingAssets.set(true);\n\n const pageSize = 30;\n const page = this.assetsPage();\n const startRow = (page - 1) * pageSize;\n const endRow = page * pageSize;\n\n dataSource.getItems({\n startRow,\n endRow,\n page,\n pageSize,\n filterModel: this.assetsFilter(),\n successCallback: (data: ImageDesignerPhoto[], lastRow?: number) => {\n this.assets.update(assets => [...assets, ...data]);\n if (data.length === 0) {\n this.hasMoreAssets.set(false);\n }\n this.isLoadingAssets.set(false);\n },\n failCallback: () => {\n this.isLoadingAssets.set(false);\n }\n });\n }\n\n onAssetsScroll(event: any) {\n const element = event.target;\n if (element.scrollHeight - element.scrollTop <= element.clientHeight + 50) {\n if (!this.isLoadingAssets() && this.hasMoreAssets()) {\n this.assetsPage.update(p => p + 1);\n this.loadAssets();\n }\n }\n }\n\n\n loadPhotos() {\n if (this.isLoadingPhotos() || !this.hasMorePhotos()) return;\n this.isLoadingPhotos.set(true);\n\n const ds = this.photosDataSource() || this.defaultPhotosDataSource;\n const page = this.photosPage();\n const pageSize = 30;\n\n ds.getItems({\n startRow: (page - 1) * pageSize,\n endRow: page * pageSize,\n page: page,\n pageSize: pageSize,\n filterModel: this.photosFilter(),\n successCallback: (data: ImageDesignerPhoto[], lastRow?: number) => {\n this.photos.update(photos => [...photos, ...data]);\n if (data.length === 0) {\n this.hasMorePhotos.set(false);\n }\n this.isLoadingPhotos.set(false);\n },\n failCallback: () => {\n this.isLoadingPhotos.set(false);\n }\n });\n }\n\n private readonly defaultPhotosDataSource = createDefaultPhotosDataSource(this.http);\n\n onPhotosScroll(event: Event) {\n const target = event.target as HTMLElement;\n if (target && target.scrollHeight - target.scrollTop <= target.clientHeight + 100) {\n if (!this.isLoadingPhotos() && this.hasMorePhotos()) {\n this.photosPage.update(p => p + 1);\n this.loadPhotos();\n }\n }\n }\n\n async addImage(photo: ImageDesignerPhoto, x = 0, y = 0) {\n const canvasWidth = this.resizeWidth();\n const canvasHeight = this.resizeHeight();\n\n let width = canvasWidth;\n let height = canvasWidth * (photo.height / photo.width);\n\n if (height > canvasHeight) {\n height = canvasHeight;\n width = height * (photo.width / photo.height);\n }\n\n const id = await this.designerService.addLayer({\n type: 'image',\n src: photo.url,\n name: photo.name,\n width,\n height,\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n ngAfterViewInit() {\n if (!this.isBrowser) {\n return;\n }\n const container = this.canvasContainer()?.nativeElement;\n if (container) {\n console.log('Initializing ImageDesignerService in requestAnimationFrame');\n requestAnimationFrame(() => {\n if (!this.canvasContainer()) {\n console.warn('Canvas container disappeared before initialization');\n return;\n }\n const currentContainer = this.canvasContainer()!.nativeElement;\n\n // Final check before init, if dimensions are 0, wait a bit more\n if (currentContainer.offsetWidth === 0 || currentContainer.offsetHeight === 0) {\n console.warn('Container dimensions are still 0, retrying init');\n setTimeout(() => this.ngAfterViewInit(), 250);\n return;\n }\n\n console.log('Initializing ImageDesignerService with container:', currentContainer);\n console.log('Container dimensions in rAF:', currentContainer.offsetWidth, 'x', currentContainer.offsetHeight);\n this.designerService.init(\n currentContainer,\n this.imageSize(),\n this.defaultFont(),\n this.scale(),\n this.minScale(),\n this.maxScale()\n ).then(() => {\n console.log('ImageDesignerService initialization completed');\n });\n });\n } else {\n console.warn('Canvas container not found during ngAfterViewInit');\n }\n }\n\n ngOnDestroy() {\n this.designerService.destroy();\n }\n\n toggleAside() {\n this.activeItemId.set(this.activeItemId() ? null : 'text');\n }\n\n zoomIn() {\n this.designerService.zoomIn();\n }\n\n zoomOut() {\n this.designerService.zoomOut();\n }\n\n undo() {\n this.designerService.undo();\n }\n\n redo() {\n this.designerService.redo();\n }\n\n resetZoom() {\n this.designerService.setScale(1);\n }\n\n onWheel(event: WheelEvent) {\n if (event.metaKey || event.ctrlKey) {\n // preventDefault is not allowed during event replay (e.g. during hydration).\n // EventPhase.REPLAY is 101 in Angular.\n if ((event as any).eventPhase !== 101) {\n event.preventDefault();\n }\n if (event.deltaY < 0) {\n this.zoomIn();\n } else {\n this.zoomOut();\n }\n }\n }\n\n onKeyDown(event: KeyboardEvent) {\n const activeElement = document.activeElement;\n const isInput = activeElement instanceof HTMLInputElement ||\n activeElement instanceof HTMLTextAreaElement ||\n (activeElement instanceof HTMLElement && activeElement.isContentEditable);\n\n if (isInput) {\n return;\n }\n\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight' || event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault();\n const step = event.shiftKey ? 10 : 1;\n\n if (event.key === 'ArrowLeft') {\n this.designerService.moveSelectedLayers(-step, 0);\n } else if (event.key === 'ArrowRight') {\n this.designerService.moveSelectedLayers(step, 0);\n } else if (event.key === 'ArrowUp') {\n this.designerService.moveSelectedLayers(0, -step);\n } else if (event.key === 'ArrowDown') {\n this.designerService.moveSelectedLayers(0, step);\n }\n }\n\n if (event.key === 'Delete' || event.key === 'Backspace') {\n this.designerService.deleteSelectedLayers();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'z') {\n event.preventDefault();\n if (event.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'y') {\n event.preventDefault();\n this.redo();\n }\n }\n\n selectLayer(id: string | null | undefined) {\n this.designerService.selectLayer(id as string | null);\n }\n\n toggleLayerVisibility(id: string, event: MouseEvent) {\n event.stopPropagation();\n this.designerService.toggleLayerVisibility(id);\n }\n\n toggleLayerLock(id: string, event: MouseEvent) {\n event.stopPropagation();\n this.designerService.toggleLayerLock(id);\n }\n\n deleteLayer(id: string, event: MouseEvent) {\n event.stopPropagation();\n this.designerService.deleteLayer(id);\n }\n\n onDragOver(event: DragEvent) {\n if (event.dataTransfer?.types.includes('application/x-ngs-text-type') ||\n event.dataTransfer?.types.includes('application/x-ngs-image-data')) {\n event.preventDefault();\n event.dataTransfer.dropEffect = 'copy';\n }\n }\n\n onTextDragStart(event: DragEvent, type: string) {\n event.dataTransfer?.setData('application/x-ngs-text-type', type);\n\n if (event.target instanceof HTMLElement) {\n const el = event.target;\n el.classList.add('is-dragging');\n setTimeout(() => el.classList.remove('is-dragging'), 0);\n }\n }\n\n onImageDragStart(event: DragEvent, photo: ImageDesignerPhoto | ElementConfig) {\n const data = 'url' in photo\n ? { url: photo.url, name: photo.name, width: photo.width, height: photo.height, type: 'image' }\n : { url: photo.data, name: photo.name, width: 100, height: 100, type: 'shape' };\n\n event.dataTransfer?.setData('application/x-ngs-image-data', JSON.stringify(data));\n\n if (event.target instanceof HTMLElement) {\n const el = event.target;\n el.classList.add('is-dragging');\n setTimeout(() => el.classList.remove('is-dragging'), 0);\n }\n }\n\n onDrop(event: DragEvent) {\n const textType = event.dataTransfer?.getData('application/x-ngs-text-type');\n const imageDataStr = event.dataTransfer?.getData('application/x-ngs-image-data');\n\n if (!textType && !imageDataStr) return;\n\n event.preventDefault();\n\n const container = this.canvasContainer()?.nativeElement;\n if (!container) return;\n\n const rect = container.getBoundingClientRect();\n const scale = this.designerService.scale();\n\n // Calculate position relative to the stage center\n const canvasRect = this.designerService['canvasRect'];\n if (!canvasRect) return;\n\n const centerX = canvasRect.x();\n const centerY = canvasRect.y();\n\n const x = (event.clientX - rect.left - centerX) / scale;\n const y = (event.clientY - rect.top - centerY) / scale;\n\n if (textType) {\n switch (textType) {\n case 'header':\n this.addHeader(x, y);\n break;\n case 'subheader':\n this.addSubheader(x, y);\n break;\n case 'body':\n this.addBodyText(x, y);\n break;\n }\n } else if (imageDataStr) {\n try {\n const data = JSON.parse(imageDataStr);\n if (data.type === 'image') {\n this.addImage({\n url: data.url,\n name: data.name,\n width: data.width,\n height: data.height,\n id: ''\n }, x, y);\n } else if (data.type === 'shape') {\n this.addShape({\n name: data.name,\n data: data.url\n }, x, y);\n }\n } catch (e) {\n console.error('Failed to parse image data', e);\n }\n }\n }\n\n drop(event: CdkDragDrop<LayerConfig[]>) {\n if (event.previousIndex !== event.currentIndex) {\n this.designerService.reorderLayers(event.previousIndex, event.currentIndex);\n }\n }\n\n download() {\n this.designerService.downloadImage();\n }\n\n getBase64Image(): string | undefined {\n return this.designerService.getBase64Image();\n }\n\n getLayerIcon(type: string | undefined): string {\n const iconMap: Record<string, string> = {\n 'text': 'fluent:text-field-24-regular',\n 'image': 'fluent:image-24-regular',\n 'pattern': 'fluent:grid-dots-24-regular',\n };\n return iconMap[type || ''] || 'fluent:shape-subtract-24-regular';\n }\n\n selectedFontSize = signal(24);\n selectedFontWeight = signal(400);\n\n async addHeader(x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'text',\n text: 'Add a heading',\n fontSize: 40,\n fontWeight: 'bold',\n fontFamily: 'Inter',\n name: 'Heading',\n align: 'center',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n async addSubheader(x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'text',\n text: 'Add a subheading',\n fontSize: 24,\n fontWeight: '600',\n fontFamily: 'Inter',\n name: 'Subheading',\n align: 'center',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n async addBodyText(x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'text',\n text: 'Add body text',\n fontSize: 16,\n fontFamily: 'Inter',\n name: 'Body text',\n align: 'center',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n async addShape(shape: ElementConfig, x = 0, y = 0) {\n const id = await this.designerService.addLayer({\n type: 'shape',\n name: shape.name,\n data: shape.data,\n width: 100,\n height: 100,\n fill: '#64748b',\n x,\n y\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n setGradient(gradient: any) {\n this.designerService.setCanvasBackground({\n x0: gradient.x0,\n y0: gradient.y0,\n x1: gradient.x1,\n y1: gradient.y1,\n colorStops: gradient.colorStops\n });\n }\n\n setColor(color: string) {\n this.designerService.setCanvasBackground(color);\n }\n\n async addPattern(url: string) {\n const id = await this.designerService.addLayer({\n type: 'pattern',\n name: 'Pattern',\n patternImage: url,\n width: this.resizeWidth(),\n height: this.resizeHeight(),\n x: 0,\n y: 0\n });\n if (id) {\n this.selectLayer(id);\n }\n }\n\n applyResize() {\n this.designerService.updateSize(this.canvasContainer()!.nativeElement, {\n width: this.resizeWidth(),\n height: this.resizeHeight()\n }, true, true);\n }\n\n selectPreset(preset: { width: number, height: number }) {\n this.resizeWidth.set(preset.width);\n this.resizeHeight.set(preset.height);\n this.applyResize();\n }\n}\n","<ngs-panel class=\"h-full\">\n <ngs-panel-sidebar class=\"border-r border-border h-full\">\n <ngs-tab-panel hideContentIfTabNotSelected [activeItemId]=\"activeItemId()\" class=\"h-full\">\n <ngs-tab-panel-content>\n <ngs-tab-panel-nav>\n <ngs-tab-panel-item for=\"text\" (click)=\"activeItemId.set('text')\">\n <ngs-icon name=\"fluent:text-field-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Text</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"photos\" (click)=\"activeItemId.set('photos')\">\n <ngs-icon name=\"fluent:image-copy-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Photos</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"elements\" (click)=\"activeItemId.set('elements')\">\n <ngs-icon name=\"fluent:shape-subtract-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Elements</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"upload\" (click)=\"activeItemId.set('upload')\">\n <ngs-icon name=\"fluent:arrow-upload-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Upload</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"background\" (click)=\"activeItemId.set('background')\">\n <ngs-icon name=\"fluent:grid-dots-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Background</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"layers\" (click)=\"activeItemId.set('layers')\">\n <ngs-icon name=\"fluent:layer-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Layers</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"resize\" (click)=\"activeItemId.set('resize')\">\n <ngs-icon name=\"fluent:resize-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Resize</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n </ngs-tab-panel-nav>\n </ngs-tab-panel-content>\n <ngs-tab-panel-aside class=\"border-s border-border\">\n <ng-template ngsTabPanelAsideContent=\"text\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Text</ngs-panel-header>\n <ngs-panel-content class=\"p-4 flex flex-col gap-4\">\n <div class=\"grid grid-cols-1 gap-4 mt-2\">\n <button (click)=\"addHeader()\"\n draggable=\"true\"\n (dragstart)=\"onTextDragStart($event, 'header')\"\n class=\"w-full text-left p-4 border border-border rounded-lg hover:bg-surface-container transition-colors\">\n <div class=\"text-3xl font-bold pointer-events-none\">Add a heading</div>\n </button>\n <button (click)=\"addSubheader()\"\n draggable=\"true\"\n (dragstart)=\"onTextDragStart($event, 'subheader')\"\n class=\"w-full text-left p-3 border border-border rounded-lg hover:bg-surface-container transition-colors\">\n <div class=\"text-xl font-semibold pointer-events-none\">Add a subheading</div>\n </button>\n <button (click)=\"addBodyText()\"\n draggable=\"true\"\n (dragstart)=\"onTextDragStart($event, 'body')\"\n class=\"w-full text-left p-2 border border-border rounded-lg hover:bg-surface-container transition-colors\">\n <div class=\"text-base pointer-events-none\">Add body text</div>\n </button>\n </div>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"photos\">\n <ngs-panel class=\"h-full flex flex-col\">\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">\n<!-- <ngs-form-field class=\"w-full\" subscriptHiddenIfEmpty>-->\n<!-- <ngs-icon name=\"fluent:search-24-regular\" ngsIconPrefix/>-->\n<!-- <input type=\"text\"-->\n<!-- ngsInput-->\n<!-- placeholder=\"Search photos\"-->\n<!-- [ngModel]=\"photosFilter()\"-->\n<!-- (ngModelChange)=\"photosFilter.set($event)\"/>-->\n<!-- </ngs-form-field>-->\n Photos\n </ngs-panel-header>\n <ngs-panel-content class=\"relative flex-1 p-0 overflow-hidden\">\n <ngs-scrollbar-area (scrolled)=\"onPhotosScroll($event)\" class=\"h-full\">\n <div class=\"p-4\">\n <div class=\"masonry-grid\">\n @for (photo of photos(); track photo.id) {\n <button (click)=\"addImage(photo)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, photo)\"\n [style.aspect-ratio]=\"photo.width + '/' + photo.height\"\n class=\"border border-border rounded-lg overflow-hidden hover:ring-2 hover:ring-primary transition-all bg-surface-container\">\n <img [src]=\"photo.thumbUrl || photo.url\"\n [alt]=\"photo.name\"\n class=\"w-full h-auto block pointer-events-none\"/>\n </button>\n }\n </div>\n @if (isLoadingPhotos()) {\n <div class=\"flex justify-center p-4\">\n <ngs-progress-spinner diameter=\"32\"/>\n </div>\n }\n @if (photos().length === 0 && !isLoadingPhotos()) {\n <div class=\"text-center p-4 text-sm text-neutral-500\">\n No photos found\n </div>\n }\n </div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"elements\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Elements</ngs-panel-header>\n <ngs-panel-content class=\"p-4 overflow-y-auto\">\n <div class=\"grid grid-cols-3 gap-3\">\n @for (element of elements(); track element.name) {\n <button (click)=\"addShape(element)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, element)\"\n class=\"aspect-square p-2 border border-border rounded-lg hover:bg-surface-container\n transition-colors flex items-center justify-center\">\n <img [src]=\"element.data\" [alt]=\"element.name\"\n class=\"max-w-full max-h-full object-contain pointer-events-none\"/>\n </button>\n }\n </div>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"upload\">\n <ngs-panel class=\"h-full flex flex-col\">\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">\n <ngs-toolbar>\n <div>Upload</div>\n <ngs-toolbar-spacer/>\n <button ngsButton=\"filled\"\n ngsUploadTrigger\n [accept]=\"'image/*'\"\n (fileSelected)=\"onFileSelected($event)\"\n [loading]=\"isUploading()\">\n <ngs-icon name=\"fluent:arrow-upload-24-regular\"/>\n Add Image\n </button>\n </ngs-toolbar>\n </ngs-panel-header>\n <ngs-panel-content>\n @if (uploadedImages().length > 0 || assets().length > 0) {\n <ngs-scrollbar-area (scrolled)=\"onAssetsScroll($event)\">\n <div class=\"p-4 flex flex-col gap-4 min-h-full\">\n @if (isUploading() || uploadPreview()) {\n <div class=\"relative aspect-video border border-border rounded-lg overflow-hidden bg-surface-container\">\n @if (uploadPreview()) {\n <img [src]=\"uploadPreview()\" class=\"w-full h-full object-contain\" alt=\"Preview\"/>\n }\n @if (isUploading()) {\n <div class=\"absolute inset-0 bg-black/20 flex items-center justify-center backdrop-blur-[2px]\">\n <div class=\"flex flex-col items-center gap-2\">\n <ngs-progress-spinner diameter=\"32\" color=\"white\"/>\n <span class=\"text-xs font-medium text-white\">Uploading...</span>\n </div>\n </div>\n }\n </div>\n }\n\n @if (uploadedImages().length > 0) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"text-sm font-semibold\">Your Uploads</div>\n <div class=\"masonry-grid\">\n @for (photo of uploadedImages(); track $index) {\n <button (click)=\"addUploadedImage(photo)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, photo)\"\n [style.aspect-ratio]=\"photo.width + '/' + photo.height\"\n class=\"border border-border rounded-lg overflow-hidden hover:ring-2\n hover:ring-primary transition-all bg-surface-container\">\n <img [src]=\"photo.url\" class=\"w-full h-auto block pointer-events-none\" alt=\"Uploaded image\"/>\n </button>\n }\n </div>\n </div>\n }\n\n @if (assets().length > 0) {\n <div class=\"flex flex-col gap-2\">\n <div class=\"text-sm font-semibold\">Assets</div>\n <div class=\"masonry-grid\">\n @for (asset of assets(); track asset.id) {\n <button (click)=\"addImage(asset)\"\n draggable=\"true\"\n (dragstart)=\"onImageDragStart($event, asset)\"\n [style.aspect-ratio]=\"asset.width + '/' + asset.height\"\n class=\"border border-border rounded-lg overflow-hidden hover:ring-2\n hover:ring-primary transition-all bg-surface-container\">\n <img [src]=\"asset.thumbUrl || asset.url\"\n [alt]=\"asset.name\"\n class=\"w-full h-auto block pointer-events-none\"/>\n </button>\n }\n </div>\n @if (isLoadingAssets()) {\n <div class=\"flex justify-center p-4\">\n <ngs-progress-spinner diameter=\"32\"/>\n </div>\n }\n </div>\n }\n </div>\n </ngs-scrollbar-area>\n }\n\n @if (uploadedImages().length === 0 && assets().length === 0 && !isLoadingAssets()) {\n <div class=\"h-full flex items-center justify-center\">\n <div class=\"text-sm text-neutral-500\">No images uploaded yet.</div>\n </div>\n }\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"background\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Background</ngs-panel-header>\n <ngs-panel-content>\n <ngs-tab-group animationDuration=\"0\" class=\"h-full\">\n <ngs-tab label=\"Color\">\n <div class=\"absolute inset-0\">\n <ngs-scrollbar-area>\n <div class=\"p-4\">\n <ngs-accordion [multi]=\"false\">\n <ngs-expansion-panel [expanded]=\"true\">\n <ngs-expansion-panel-header>\n <ngs-expansion-panel-title>Colors</ngs-expansion-panel-title>\n </ngs-expansion-panel-header>\n <div class=\"py-2\">\n <ngs-color-switcher [colors]=\"presetColors()\" (colorChange)=\"setColor($event)\"/>\n </div>\n </ngs-expansion-panel>\n <ngs-expansion-panel>\n <ngs-expansion-panel-header>\n <ngs-expansion-panel-title>Gradients</ngs-expansion-panel-title>\n </ngs-expansion-panel-header>\n <div class=\"grid grid-cols-3 gap-3 py-2\">\n @for (gradient of presetGradients(); track $index) {\n <button (click)=\"setGradient(gradient)\"\n [style.background]=\"gradient.css\"\n class=\"aspect-[16/6.75] w-full rounded-lg border border-border hover:ring-2 hover:ring-primary transition-all\">\n </button>\n }\n </div>\n </ngs-expansion-panel>\n </ngs-accordion>\n </div>\n </ngs-scrollbar-area>\n </div>\n </ngs-tab>\n <ngs-tab label=\"Patterns\">\n <div class=\"absolute inset-0\">\n <ngs-scrollbar-area>\n <div class=\"p-4\">\n <div class=\"grid grid-cols-3 gap-3\">\n @for (pattern of presetPatterns(); track $index) {\n <button (click)=\"addPattern(pattern)\"\n class=\"aspect-square w-full rounded-lg border border-border hover:ring-2 hover:ring-primary transition-all overflow-hidden\">\n <img [src]=\"pattern\" class=\"w-full h-full object-cover\" alt=\"pattern\">\n </button>\n }\n </div>\n </div>\n </ngs-scrollbar-area>\n </div>\n </ngs-tab>\n </ngs-tab-group>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"layers\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Layers</ngs-panel-header>\n <ngs-panel-content>\n @if (layersFromService().length > 0) {\n <ngs-list cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (layer of layersFromService(); track layer.id) {\n <ngs-list-item cdkDrag\n cdkDragLockAxis=\"y\"\n [cdkDragStartDelay]=\"100\"\n (click)=\"selectLayer(layer.id!)\"\n [class.is-active]=\"selectedLayerId() === layer.id\"\n class=\"relative group bg-surface\">\n <ngs-icon [name]=\"getLayerIcon(layer.type)\" ngsListItemIcon/>\n <div ngsListItemLine>\n {{ layer.name || layer.type }}\n <!-- {{ layer.text || '' }}-->\n </div>\n <div class=\"absolute right-2 top-1/2 -translate-y-1/2 flex items-center\">\n <button ngsIconButton (click)=\"toggleLayerVisibility(layer.id!, $event)\">\n <ngs-icon\n [name]=\"layer.visible === false ? 'fluent:eye-off-24-regular' : 'fluent:eye-24-regular'\"/>\n </button>\n <button ngsIconButton (click)=\"toggleLayerLock(layer.id!, $event)\">\n <ngs-icon\n [name]=\"layer.locked ? 'fluent:lock-closed-24-regular' : 'fluent:lock-open-24-regular'\"\n class=\"size-5\"/>\n </button>\n <button ngsIconButton (click)=\"deleteLayer(layer.id!, $event)\" [disabled]=\"layer.locked\">\n <ngs-icon name=\"fluent:delete-24-regular\" class=\"size-5\"/>\n </button>\n </div>\n\n <div *cdkDragPlaceholder\n class=\"min-h-[var(--ngs-list-item-min-height)] bg-surface-container\"></div>\n </ngs-list-item>\n }\n </ngs-list>\n } @else {\n <div class=\"text-sm p-4 h-full flex items-center justify-center\">No layers available</div>\n }\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"resize\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Resize</ngs-panel-header>\n <ngs-panel-content>\n <ngs-scrollbar-area>\n <div class=\"p-4 flex flex-col gap-4\">\n <div class=\"flex flex-col gap-4\">\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Width (px)</ngs-label>\n <input ngsInput type=\"number\" [(ngModel)]=\"resizeWidth\">\n </ngs-form-field>\n\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Height (px)</ngs-label>\n <input ngsInput type=\"number\" [(ngModel)]=\"resizeHeight\">\n </ngs-form-field>\n\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Units</ngs-label>\n <ngs-select [(ngModel)]=\"resizeUnit\">\n <ngs-option value=\"px\">px</ngs-option>\n </ngs-select>\n </ngs-form-field>\n\n <button ngsButton=\"filled\" fullWidth (click)=\"applyResize()\">Resize</button>\n </div>\n\n <div class=\"flex flex-col gap-6 mt-2\">\n @for (category of presetCategories(); track category.name) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex items-center gap-2 font-semibold text-sm\">\n <ngs-icon [name]=\"category.icon\" class=\"size-5\"/>\n {{ category.name }}\n </div>\n\n <div class=\"grid grid-cols-3 gap-3\">\n @for (preset of category.presets; track preset.name) {\n <button (click)=\"selectPreset(preset)\"\n class=\"flex flex-col items-center gap-1 p-2 rounded-lg border border-border hover:bg-surface-container transition-colors text-center\">\n <ngs-icon [name]=\"preset.icon\" class=\"size-6 mb-1\"/>\n <span class=\"text-xs font-medium truncate w-full\">{{ preset.name }}</span>\n <span class=\"text-[10px] text-muted-foreground whitespace-nowrap\">{{ preset.width }}×{{ preset.height }} px</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n </ngs-panel>\n </ng-template>\n\n @if (effectsPortal()) {\n <div class=\"absolute inset-0 z-20 bg-surface-container-lowest\">\n <ng-container [cdkPortalOutlet]=\"effectsPortal()\"/>\n </div>\n }\n </ngs-tab-panel-aside>\n </ngs-tab-panel>\n </ngs-panel-sidebar>\n <ngs-panel-content class=\"h-full\">\n <ngs-panel class=\"h-full\">\n <ngs-panel-header>\n <ngs-toolbar class=\"h-full px-3 border-b border-border\">\n <button ngsIconButton (click)=\"toggleAside()\">\n <ngs-icon name=\"fluent:navigation-24-regular\"/>\n </button>\n <ngs-toolbar-title>{{ title() }}</ngs-toolbar-title>\n <ngs-toolbar-spacer/>\n <div class=\"flex items-center gap-2\">\n <button ngsIconButton (click)=\"zoomOut()\">\n <ngs-icon name=\"fluent:zoom-out-24-regular\"/>\n </button>\n <span class=\"text-sm font-medium w-12 text-center\">{{ zoomPercentage() }}%</span>\n <button ngsIconButton (click)=\"zoomIn()\">\n <ngs-icon name=\"fluent:zoom-in-24-regular\"/>\n </button>\n </div>\n <ngs-toolbar-spacer/>\n <div class=\"flex\">\n <button ngsIconButton (click)=\"undo()\" [disabled]=\"!designerService.canUndo()\">\n <ngs-icon name=\"fluent:arrow-hook-up-left-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"redo()\" [disabled]=\"!designerService.canRedo()\">\n <ngs-icon name=\"fluent:arrow-hook-up-right-24-regular\"/>\n </button>\n </div>\n @if (showDownloadButton()) {\n <ngs-divider vertical/>\n <button ngsButton=\"filled\" (click)=\"download()\" class=\"mr-2\">Download</button>\n }\n </ngs-toolbar>\n </ngs-panel-header>\n <ngs-panel-content class=\"bg-surface-container overflow-hidden h-full relative\" (wheel)=\"onWheel($event)\"\n (mousedown)=\"canvasContainer.focus()\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event)\">\n @if (settingsPortal()) {\n <ng-container [cdkPortalOutlet]=\"settingsPortal()\"/>\n }\n <div #canvasContainer class=\"w-full h-full outline-none\" tabindex=\"0\" (contextmenu)=\"$event.preventDefault()\"></div>\n </ngs-panel-content>\n </ngs-panel>\n </ngs-panel-content>\n</ngs-panel>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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C,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;AACtE,YAAA,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,C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"}