inugami-ng 0.0.19 → 0.0.21

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-svg-isometric.mjs","sources":["../../../projects/inugami-ng/components/inu-svg-isometric/inu-svg-isometric-hud.ts","../../../projects/inugami-ng/components/inu-svg-isometric/inu-svg-isometric.ts","../../../projects/inugami-ng/components/inu-svg-isometric/inugami-ng-components-inu-svg-isometric.ts"],"sourcesContent":["import {SVG_ASSETS, SVG_BUILDER, SvgAssetUtils} from 'inugami-ng/services';\nimport {SvgAssetDTO, SvgAssetDTOOptions, SvgAssetElement, SvgButton} from 'inugami-ng/models';\n\nexport interface InuSvgIsometricHudOption {\n parent: HTMLElement;\n height: number;\n width: number;\n onZoomIn: (event: MouseEvent) => void;\n onZoomOut: (event: MouseEvent) => void;\n onDownload: () => void;\n}\n\nconst POINTER = 'cursor-pointer';\nconst ASSETS_TOOLS = 'tools';\n\nexport class InuSvgIsometricHud {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n parent!: HTMLElement;\n height!: number;\n width!: number;\n scale: number = 0.7;\n toolbarMargin = 1.25;\n option!: InuSvgIsometricHudOption;\n //\n hud: SVGElement | null = null;\n hudToolbar: SVGElement | null = null;\n hudToolbarAssets: SvgAssetElement[] = [];\n hudInspector: SVGElement | null = null;\n hudSettings: SVGElement | null = null;\n hudNavigation: SVGElement | null = null;\n\n\n //====================================================================================================================\n // INIT\n //====================================================================================================================\n constructor(option: InuSvgIsometricHudOption) {\n this.parent = option.parent;\n this.height = option.height;\n this.width = option.width;\n this.option = option;\n this.render();\n }\n\n //====================================================================================================================\n // RENDERING\n //====================================================================================================================\n private render() {\n this.hud = SVG_BUILDER.createGroup(this.parent, {styleClass: `hud`});\n this.hudToolbar = this.renderHudToolbar(this.hud);\n this.hudInspector = this.renderHudInspector(this.hud);\n this.hudSettings = this.renderHudSettings(this.hud);\n this.hudNavigation = this.renderHudNavigation(this.hud);\n }\n\n private renderHudToolbar(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `toolbar`});\n\n const buttons: SvgButton[] = [\n {\n name: 'add-asset',\n icon: 'category',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node)\n },\n {\n name: 'download',\n icon: 'download',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onDownload()\n },\n {\n name: 'zoom-div',\n icon: 'div'\n },\n {\n name: 'zoom-plus',\n icon: 'zoom',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onZoomIn(event)\n },\n {\n name: 'zoom-min',\n icon: 'zoom',\n type: 'min',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onZoomOut(event)\n },\n ];\n\n for (let button of buttons) {\n const buttonAsset = this.createAsset(<SvgAssetDTOOptions>{\n parent: result,\n name: button.name,\n asset: {\n assetSet: ASSETS_TOOLS,\n assetName: button.icon,\n type: button.type ? button.type : 'default',\n state: button.state ? button.state : 'default'\n },\n styleClass: POINTER\n });\n if (!buttonAsset) {\n continue;\n }\n\n if (button.onover) buttonAsset.onover = button.onover;\n if (button.onclick) buttonAsset.onclick = button.onclick;\n if (button.onmousedown) buttonAsset.onmousedown = button.onmousedown;\n if (button.onmousemove) buttonAsset.onmousemove = button.onmousemove;\n if (button.onmouseleave) buttonAsset.onmouseleave = button.onmouseleave;\n if (button.ondblclick) buttonAsset.ondblclick = button.ondblclick;\n if (button.ondrag) buttonAsset.ondrag = button.ondrag;\n if (button.ondrop) buttonAsset.ondrop = button.ondrop;\n if (button.ondragend) buttonAsset.ondragend = button.ondragend;\n if (button.ondragstart) buttonAsset.ondragstart = button.ondragstart;\n if (button.ondragleave) buttonAsset.ondragleave = button.ondragleave;\n if (button.ondragover) buttonAsset.ondragover = button.ondragover;\n if (button.ondragenter) buttonAsset.ondragenter = button.ondragenter;\n this.hudToolbarAssets.push(buttonAsset);\n }\n\n\n return result;\n }\n\n private renderHudInspector(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `layers-inspector`});\n\n return result;\n }\n\n private renderHudSettings(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `settings`});\n\n return result;\n }\n\n private renderHudNavigation(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `navigation`});\n\n return result;\n }\n\n //====================================================================================================================\n // ACTIONS\n //====================================================================================================================\n updatePosition(height: number, width: number) {\n this.updatePositionHudToolbar(height, width);\n }\n\n private updatePositionHudToolbar(height: number, width: number) {\n if (this.hudToolbarAssets.length == 0) {\n return;\n }\n\n const size = this.hudToolbarAssets[0].getComponentSize();\n for (let i = 1; i < this.hudToolbarAssets.length; i++) {\n this.hudToolbarAssets[i].move({x: (i * size.width) * this.toolbarMargin, y: 0});\n }\n }\n\n //====================================================================================================================\n // EVENTS\n //====================================================================================================================\n private onOverAsset(node: SvgAssetElement) {\n node.addStyleClass('over');\n }\n\n private onLeaveAsset(node: SvgAssetElement) {\n node.removeStyleClass('over');\n }\n\n //====================================================================================================================\n // TOOLS\n //====================================================================================================================\n private createAsset(option: SvgAssetDTOOptions): SvgAssetElement | undefined {\n const assetIcon = SVG_ASSETS.getAsset(option.asset.assetSet!, option.asset.assetName!);\n if (!assetIcon || !parent) {\n return undefined;\n }\n\n const asset = option.asset;\n asset.x = 0;\n asset.y = 0;\n asset.size = this.scale;\n asset.name = option.name!;\n\n return SvgAssetUtils.createAsset({\n parent: option.parent!,\n asset: asset,\n scale: this.scale,\n isometric: false,\n enableHitBox: true\n });\n }\n\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n input,\n model,\n ModelSignal,\n signal,\n viewChild\n} from '@angular/core';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {SVG, SVG_BUILDER, SVG_MATH, SVG_TRANSFORM, SvgAssetUtils} from 'inugami-ng/services';\nimport {Point, SvgAssetDTO, SvgAssetElement, SvgLayerDTO, SvgLayerElement} from 'inugami-ng/models';\nimport {FormValueControl} from '@angular/forms/signals';\nimport {InuSvgIsometricHud} from './inu-svg-isometric-hud';\nimport {InuPointPipe} from 'inugami-ng/pipes';\n\n\n@Component({\n selector: 'inu-svg-isometric',\n standalone: true,\n providers: [InuTemplateRegistryService],\n imports: [\n InuPointPipe\n ],\n template: `\n <div class=\"inu-svg-isometric-debug\">\n <div class=\"inu-svg-isometric-debug-content\">\n <dl>\n <dt>viewport size</dt>\n <dd>{{ viewportSize()| inuPipePoint }}</dd>\n <dt>center</dt>\n <dd>{{ center()| inuPipePoint }}</dd>\n\n </dl>\n <dl>\n <dt>zoom</dt>\n <dd>{{ zoom() }}</dd>\n <dt>trackMouseMove</dt>\n <dd>{{ trackMouseMove() }}</dd>\n <dt>mousePosition</dt>\n <dd>{{ mousePosition()| inuPipePoint }}</dd>\n <dt>previousMouseMove</dt>\n <dd>{{ previousMouseMove()| inuPipePoint }}</dd>\n </dl>\n </div>\n\n </div>\n\n <div [class]=\"_styleClass()\" #component>\n <svg #container xmlns=\"http://www.w3.org/2000/svg\"></svg>\n </div>\n `,\n styleUrl: './inu-svg-isometric.scss',\n})\nexport class InuSvgIsometric implements FormValueControl<SvgLayerDTO[]>, AfterViewInit {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n isometric = input<boolean>(true);\n disabled = input<boolean>(false);\n styleclass = input<string>('');\n styleclassheight = input<string>('');\n //\n private component = viewChild<ElementRef<HTMLElement>>('component');\n private container = viewChild<ElementRef<HTMLElement>>('container');\n _styleClass = computed<string>(() => {\n return [\n 'inu-svg',\n 'inu-svg-isometric',\n this.disabled() ? 'disabled' : '',\n this.styleclass() ? this.styleclass() : ''\n ].join(' ');\n });\n //---\n height = signal<number>(400);\n width = signal<number>(600);\n viewportSize = computed<Point>(() => <Point>{x: this.height(), y: this.width()});\n center = signal<Point>({x: 0, y: 0});\n zoom = signal<number>(50);\n assetSelected = signal<SvgAssetElement | undefined>(undefined);\n trackMouseMove = signal<boolean>(false);\n mousePosition = signal<Point>({x: 0, y: 0});\n previousMouseMove = signal<Point>({x: 0, y: 0});\n value: ModelSignal<SvgLayerDTO[]> = model(<SvgLayerDTO[]>[]);\n //---\n defaultSize: number = 50;\n position: Point = {x: 0, y: 0};\n\n //--- SVG components\n scale: number = 1;\n ratio: number = 1;\n\n parent: HTMLElement | null = null;\n hiddenAssetLayer: SVGElement | null = null;\n locator: SVGElement | null = null;\n defs: SVGElement | null = null;\n canvas: SVGElement | null = null;\n graph: SVGElement | null = null;\n gridPattern: SVGElement | null = null;\n patternGroup: SVGElement | null = null;\n gridPatternRect: SVGElement | null = null;\n layers: SVGElement | null = null;\n layersComponents: SvgLayerElement[] = [];\n hud: InuSvgIsometricHud | undefined = undefined;\n\n\n //====================================================================================================================\n // INIT\n //====================================================================================================================\n constructor() {\n effect(() => {\n this.updateValues();\n });\n }\n\n ngAfterViewInit(): void {\n const component = this.component();\n const container = this.container();\n if (component && container) {\n this.resolveParentSize(component, container);\n this.initializeLayout(container);\n this.updateAfterZoom();\n this.resize();\n }\n }\n\n\n //====================================================================================================================\n // RENDERING\n //====================================================================================================================\n private resolveParentSize(component: ElementRef<HTMLElement>, container: ElementRef<HTMLElement>) {\n if (component?.nativeElement && component?.nativeElement.parentNode && component?.nativeElement.parentNode.parentNode) {\n this.parent = component?.nativeElement.parentNode.parentNode as HTMLElement;\n }\n\n if (this.parent) {\n let parentSize = SVG_MATH.size(this.parent);\n this.height.set(parentSize.height);\n this.width.set(parentSize.width);\n }\n\n this.center.set(<Point>{y: this.width() / 2, x: this.height() / 2});\n container?.nativeElement\n .setAttribute('style', `display: block; height:${this.height()}px;width:${this.width()}px`);\n\n }\n\n private initializeLayout(container: ElementRef<HTMLElement>) {\n\n this.defs = SVG_BUILDER.createDefs(container?.nativeElement);\n const gridGrp = SVG_BUILDER.createGroup(container?.nativeElement);\n this.hiddenAssetLayer = SVG_BUILDER.createGroup(container?.nativeElement, {styleClass: 'hidden-layer'});\n this.locator = SVG_BUILDER.createGroup(container?.nativeElement, {styleClass: 'locator'});\n this.canvas = SVG_BUILDER.createGroup(this.locator, {styleClass: 'canvas'});\n container.nativeElement.onmousedown = (event: MouseEvent) => this.trackMouse(true, event);\n container.nativeElement.onmouseup = (event: MouseEvent) => this.trackMouse(false, event);\n container.nativeElement.onmousemove = (event: MouseEvent) => this.moveViewport(event);\n\n if(this.hiddenAssetLayer){\n this.hiddenAssetLayer.setAttribute('inkscape:label', 'hidden');\n this.hiddenAssetLayer.setAttribute('inkscape:groupmode', 'layer');\n this.hiddenAssetLayer.setAttribute('style', 'display: hidden;');\n }\n\n if (this.defs) {\n this.createGridDefs(this.defs);\n }\n const filter = SVG_BUILDER.createFilter(this.defs, 'shadow', {style: 'color-interpolation-filters: sRGB;'});\n const gaussian = SVG_BUILDER.createNode('feGaussianBlur', filter);\n if (gaussian) {\n gaussian.setAttribute('stdDeviation', '1');\n }\n\n if (gridGrp) {\n this.renderGrid(gridGrp);\n }\n if (this.canvas) {\n this.graph = SVG_BUILDER.createGroup(this.canvas, {styleClass: 'graph'});\n }\n if (this.graph) {\n this.renderLayers(this.graph);\n }\n if (container?.nativeElement) {\n\n this.hud = new InuSvgIsometricHud({\n parent: container?.nativeElement,\n height: this.height(),\n width: this.width(),\n //\n onZoomIn: (e) => this.onZoomIn(e),\n onZoomOut: (e) => this.onZoomOut(e),\n onDownload: () => this.download()\n });\n }\n\n this.updateValues();\n }\n\n private renderLayers(graph: SVGElement) {\n this.layers = SVG_BUILDER.createGroup(this.graph, {styleClass: 'layers'});\n }\n\n private createLayer(name: string): SvgLayerElement | undefined {\n if (this.layers) {\n const layer = SVG_BUILDER.createGroup(this.layers, {styleClass: `layer ${name}`});\n if (layer) {\n const result = <SvgLayerElement>{\n name: name,\n node: layer,\n assets: []\n };\n this.layersComponents.push(result);\n return result;\n }\n }\n return undefined;\n }\n\n //--------------------------------------------------------------------------------------------------------------------\n // GRID\n //--------------------------------------------------------------------------------------------------------------------\n private createGridDefs(defs: SVGElement) {\n this.gridPattern = SVG_BUILDER.createDefsPattern(defs,\n 'gridBackground',\n {\n x: 0,\n y: 0,\n height: SVG_MATH.zoom(1, this.zoom()),\n width: SVG_MATH.zoom(1, this.zoom()),\n patternUnits: \"userSpaceOnUse\"\n });\n\n this.patternGroup = SVG_BUILDER.createGroup(this.gridPattern, {styleClass: 'inu-svg-isometric-grid-background'});\n if (this.patternGroup) {\n const isometric = this.isometric();\n if (isometric) {\n\n SVG_BUILDER.createCurve(this.patternGroup, 'M 0,14.4337 L 25,0 L 50,14.4337 L 25,28.8675 Z');\n } else {\n this.gridPatternRect = SVG_BUILDER.createRect(this.patternGroup, {\n height: SVG_MATH.zoom(1, this.zoom()),\n width: SVG_MATH.zoom(1, this.zoom())\n });\n }\n\n }\n\n }\n\n private renderGrid(graph: SVGElement) {\n const gridGroup = SVG_BUILDER.createGroup(graph, {styleClass: 'inu-svg-isometric-grid'});\n if (gridGroup) {\n this.renderBackground(gridGroup);\n }\n }\n\n private renderBackground(graph: SVGElement): SVGElement | null {\n const result = SVG_BUILDER.createRect(graph, {\n height: this.height(),\n width: this.width(),\n styleClass: 'inu-svg-isometric-border'\n });\n if (result) {\n result.setAttribute('fill', 'url(#gridBackground)');\n }\n return result;\n }\n\n\n //====================================================================================================================\n // EVENTS\n //====================================================================================================================\n //--------------------------------------------------------------------------------------------------------------------\n // ZOOM\n //--------------------------------------------------------------------------------------------------------------------\n @HostListener('window:resize')\n onResize() {\n const component = this.component();\n const container = this.container();\n if (component && container) {\n this.resolveParentSize(component, container);\n this.resize();\n }\n }\n\n @HostListener('wheel', ['$event'])\n onMouseWheel(event: WheelEvent) {\n event.preventDefault();\n let step = 1;\n if (event.ctrlKey) {\n step = 10;\n }\n if (event.shiftKey) {\n step = 0.1;\n }\n if (event.deltaY > 0) {\n this.zoom.set(this.zoom() - step);\n } else {\n this.zoom.set(this.zoom() - step);\n }\n if (this.zoom() <= 0) {\n this.zoom.set(0.001);\n }\n\n this.updateAfterZoom();\n }\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent) {\n\n if (event.button === 1) {\n event.preventDefault();\n let startZoom = this.zoom();\n let endZoom = this.defaultSize;\n let delta = endZoom - startZoom;\n let currentX = 0;\n let currentY = 0;\n let x = 0;\n let y = 0;\n\n if (this.parent && this.locator) {\n const currentTransfoAttr = this.locator.getAttribute('transform');\n const currentTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const centerTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.locator.setAttribute('transform', currentTransfoAttr!);\n currentX = currentTransfo.x!;\n currentY = currentTransfo.y!;\n x = centerTransfo.x! - currentX;\n y = centerTransfo.y! - currentY;\n\n startZoom = currentTransfo.scaleX!;\n endZoom = centerTransfo.scaleX!;\n delta = endZoom - startZoom;\n }\n SVG.ANIMATION.animate((progress: number) => {\n const newZoom = startZoom + (delta * progress);\n const newX = currentX + (x * progress);\n const newY = currentY + (y * progress);\n if (this.locator) {\n SVG_TRANSFORM.translateY(this.locator, newY);\n SVG_TRANSFORM.translateX(this.locator, newX);\n SVG_TRANSFORM.scale(this.locator, newZoom, newZoom);\n }\n this.updateGridSize(this.defaultSize * (newZoom));\n }, {\n duration: 2000,\n timer: SVG.ANIMATION.TYPES.easeOutCubic,\n onDone: () => {\n this.zoom.set(this.defaultSize);\n if (this.locator) {\n if (this.parent) {\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const doneTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.position.x = doneTransfo.x!;\n this.position.y = doneTransfo.y!;\n }\n this.updateGridSize(this.zoom());\n }\n }\n });\n }\n }\n\n\n private updateGridSize(zoom: number) {\n const width = SVG_MATH.zoom(1, zoom);\n const height = this.isometric() ? width / Math.sqrt(3) : width;\n\n if (this.patternGroup) {\n const currentZoom = width / this.defaultSize;\n SVG_TRANSFORM.scale(this.patternGroup, currentZoom, currentZoom);\n\n if (this.gridPattern) {\n this.gridPattern.setAttribute('height', `${height}`);\n this.gridPattern.setAttribute('width', `${width}`);\n }\n }\n }\n\n private onZoomIn(event: MouseEvent) {\n const zoom = this.zoom();\n this.zoom.set(zoom + 1);\n this.updateAfterZoom();\n }\n\n private onZoomOut(event: MouseEvent) {\n const zoom = this.zoom() - 1;\n this.zoom.set(zoom <= 0 ? 0.001 : zoom);\n this.updateAfterZoom();\n }\n\n //--------------------------------------------------------------------------------------------------------------------\n // DOWNALOD\n //--------------------------------------------------------------------------------------------------------------------\n private download() {\n console.log('download')\n const container = this.container()?.nativeElement;\n if (!container) {\n return;\n }\n\n const clone = container.cloneNode(true) as Element;\n\n const copyStyles = (source: any, target: any) => {\n const computed = window.getComputedStyle(source);\n const svgProps = [\n \"fill\", \"stroke\", \"stroke-width\", \"opacity\", \"display\",\n \"font-family\", \"font-size\", \"font-weight\", \"text-anchor\",\n \"transform\", \"filter\", \"stop-color\", \"stop-opacity\"\n ];\n\n svgProps.forEach(prop => {\n target.style[prop] = computed.getPropertyValue(prop);\n });\n\n for (let i = 0; i < source.children.length; i++) {\n const currentStyleClass = source.children[i].getAttribute('class');\n if (currentStyleClass == 'inu-svg-isometric-grid' || currentStyleClass == 'hud') {\n target.children[i].replaceChildren();\n continue;\n }\n copyStyles(source.children[i], target.children[i]);\n }\n };\n\n copyStyles(container, clone);\n\n\n const realLocator: SVGElement | null = container.querySelector('.locator') as SVGElement;\n const locator = clone.querySelector('.locator');\n let positionGrp: SVGElement | null | undefined = undefined;\n\n if (locator && clone) {\n const svgLocator = locator as SVGElement;\n clone.replaceChildren();\n positionGrp = SVG_BUILDER.createGroup(clone as HTMLElement, {styleClass: 'position'});\n if (positionGrp) {\n positionGrp.appendChild(svgLocator);\n }\n }\n\n const padding = 20;\n const size = SVG_MATH.size(container);\n const viewBoxValue = `${size.x - padding} ${size.y - padding} ${size.width + padding * 2} ${size.height + padding * 2}`;\n const htmlCloneNode = clone as HTMLElement;\n htmlCloneNode.setAttribute('viewBox', viewBoxValue);\n htmlCloneNode.setAttribute('xmlns:inkscape', 'http://www.inkscape.org/namespaces/inkscape');\n htmlCloneNode.setAttribute('xmlns:sodipodi', 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd');\n\n htmlCloneNode.style.width = `${size.width}px`;\n htmlCloneNode.style.height = `${size.height}px`;\n\n if (positionGrp && clone && realLocator) {\n const locatorSize = SVG.MATH.size(realLocator);\n const posGrp = SVG.MATH.size(positionGrp);\n const diffSizeX = size.width - locatorSize.width;\n const newPosX = (-posGrp.x) + (diffSizeX / 2);\n const diffSizeY = size.height - locatorSize.height;\n const newPosY = (-posGrp.y) + (diffSizeY / 2);\n\n SVG.TRANSFORM.translateX(positionGrp, newPosX)\n SVG.TRANSFORM.translateY(positionGrp, newPosY);\n }\n\n const svgData = new XMLSerializer().serializeToString(clone);\n const svgBlob = new Blob([svgData], {type: \"image/svg+xml;charset=utf-8\"});\n const svgUrl = URL.createObjectURL(svgBlob);\n\n const downloadLink = document.createElement(\"a\");\n downloadLink.href = svgUrl;\n downloadLink.download = 'graph.svg';\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n URL.revokeObjectURL(svgUrl);\n }\n\n //====================================================================================================================\n // UPDATE VALUES\n //====================================================================================================================\n public updateValues() {\n const value = this.value();\n if (value.length == 0) {\n this.clearAllLayers();\n } else {\n for (let layer of value) {\n this.updateLayer(layer);\n }\n }\n }\n\n private clearAllLayers() {\n for (let layer of this.layersComponents) {\n for (let asset of layer.assets) {\n asset.remove();\n }\n layer.assets.splice(0, layer.assets.length - 1);\n }\n }\n\n\n private updateLayer(layer: SvgLayerDTO) {\n let currentLayer: SvgLayerElement | undefined | null = this.layersComponents.find(l => layer.name);\n if (!currentLayer) {\n currentLayer = this.createLayer(layer.name);\n }\n\n if (!currentLayer) {\n return;\n }\n\n const removedAssets = this.searchAssetsRemoved(layer.asserts, currentLayer.assets);\n removedAssets.forEach(a => a.remove());\n\n for (let asset of layer.asserts) {\n this.updateOrCreateAsset(asset, currentLayer);\n }\n }\n\n private searchAssetsRemoved(asserts: SvgAssetDTO[], existingAssets: SvgAssetElement[]): SvgAssetElement[] {\n const result: SvgAssetElement[] = [];\n for (let existingAsset of existingAssets) {\n const foundAsset = asserts.find(a => a.name == existingAsset.name);\n if (!foundAsset) {\n result.push(existingAsset);\n }\n }\n return result;\n }\n\n private updateOrCreateAsset(asset: SvgAssetDTO, layer: SvgLayerElement) {\n const existingAsset = layer.assets.find(a => a.name == asset.name);\n if (existingAsset) {\n existingAsset.update(asset, this.center(), this.scale, this.isometric());\n } else {\n const newAsset = SvgAssetUtils.createAsset({\n parent: layer.node,\n asset: asset,\n scale: this.scale,\n center: this.center(),\n isometric: this.isometric(),\n enableHitBox: false\n });\n\n if (newAsset) {\n layer.assets.push(newAsset);\n }\n }\n }\n\n updateAfterZoom() {\n const width = SVG_MATH.zoom(1, this.zoom());\n const height = this.isometric() ? width / Math.sqrt(3) : width;\n\n if (this.patternGroup) {\n const zoom = width / this.defaultSize;\n SVG_TRANSFORM.scale(this.patternGroup, zoom, zoom);\n if (this.layers) {\n SVG_TRANSFORM.scale(this.layers, zoom, zoom);\n }\n\n if (this.gridPattern) {\n this.gridPattern.setAttribute('height', `${height}`);\n this.gridPattern.setAttribute('width', `${width}`);\n }\n }\n this.computeRatio();\n }\n\n\n //====================================================================================================================\n // TOOLS\n //====================================================================================================================\n public resize(): void {\n if (this.locator && this.parent) {\n this.computeRatio();\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const doneTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.position.x = doneTransfo.x!;\n this.position.y = doneTransfo.y!;\n }\n this.hud?.updatePosition(this.height(), this.width());\n }\n\n private computeRatio() {\n if (!this.parent || !this.locator) {\n return;\n }\n const parentSize = SVG_MATH.size(this.parent);\n const locatorSize = SVG_MATH.size(this.locator);\n this.ratio = parentSize.width / locatorSize.width;\n }\n\n private trackMouse(track: boolean, event: MouseEvent) {\n event.preventDefault();\n this.trackMouseMove.set(track);\n if (track) {\n this.previousMouseMove.set({x: event.x, y: event.y});\n } else {\n this.previousMouseMove.set({x: 0, y: 0});\n }\n }\n\n private moveViewport(event: MouseEvent) {\n const container = this.container()?.nativeElement;\n if (!container) {\n return;\n }\n this.mousePosition.set(<Point>{\n x: event.x,\n y: event.y\n });\n const trackMouse = this.trackMouseMove();\n if (!trackMouse) {\n return;\n }\n const currentMove: Point = {\n x: event.x,\n y: event.y\n };\n\n const previousMouseMove = this.previousMouseMove();\n const delta: Point = {\n x: previousMouseMove.x - currentMove.x,\n y: previousMouseMove.y - currentMove.y\n }\n\n\n const asset = this.searchDragComponent();\n\n if (!asset) {\n event.preventDefault();\n this.position.x = this.position.x - delta.x;\n this.position.y = this.position.y - delta.y;\n if (this.locator) {\n SVG.TRANSFORM.translateY(this.locator, this.position.y);\n SVG.TRANSFORM.translateX(this.locator, this.position.x);\n }\n } else {\n asset.moveDrag({\n x: delta.x,\n y: delta.y\n }, this.ratio);\n }\n\n this.previousMouseMove.set(currentMove);\n }\n\n private searchDragComponent(): SvgAssetElement | undefined {\n for (let layer of this.layersComponents) {\n const assert = layer.assets.find(a => a.isDrag());\n if (assert) {\n return assert;\n }\n }\n return undefined;\n }\n\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}