@metadev/daga-angular 4.2.6 → 4.2.8

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.
package/Changelog.md CHANGED
@@ -6,6 +6,18 @@ List of releases and changes.
6
6
 
7
7
  ## Next release Joyeuse
8
8
 
9
+ ## v. 4.2.8
10
+
11
+ - Add a snap to grid offset to node types [#337](https://github.com/metadevpro/daga/pull/337)
12
+ - Add `selectedAndHighlightedLook` variable to `LookConfig` [#338](https://github.com/metadevpro/daga/pull/338)
13
+ - Improve pathing algorithm for connections of `shape` of type `square` [#339](https://github.com/metadevpro/daga/pull/339)
14
+
15
+ ## v. 4.2.7
16
+
17
+ - Adjust connection label positioning [#334](https://github.com/metadevpro/daga/pull/334)
18
+ - Prevent connections from jumping when highlighted [#335](https://github.com/metadevpro/daga/pull/335)
19
+ - Preserve `stroke-dasharray` length of lines and borders when highlighted [#335](https://github.com/metadevpro/daga/pull/335)
20
+
9
21
  ## v. 4.2.6
10
22
 
11
23
  - Fix bug where editing a property with a root attribute fails in React [#323](https://github.com/metadevpro/daga/pull/323)
@@ -745,7 +745,12 @@ class PaletteComponent {
745
745
  pointerCoords[1] - type.defaultHeight / 2
746
746
  ];
747
747
  if (this.canvas.snapToGrid) {
748
- newNodeCoords = this.canvas.getClosestGridPoint(newNodeCoords);
748
+ newNodeCoords = this.canvas.getClosestGridPoint([
749
+ newNodeCoords[0] - type.snapToGridOffset[0],
750
+ newNodeCoords[1] - type.snapToGridOffset[1]
751
+ ]);
752
+ newNodeCoords[0] += type.snapToGridOffset[0];
753
+ newNodeCoords[1] += type.snapToGridOffset[1];
749
754
  }
750
755
  // check whether we dropped this node on a potential parent
751
756
  const nodesAtLocation = this.canvas.model.nodes.getAtCoordinates(pointerCoords[0], pointerCoords[1]);
@@ -1 +1 @@
1
- {"version":3,"file":"metadev-daga-angular.mjs","sources":["../../../../libs/daga-angular/src/lib/collapse-button/collapse-button.component.ts","../../../../libs/daga-angular/src/lib/collapse-button/collapse-button.component.html","../../../../libs/daga-angular/src/lib/services/canvas-provider.service.ts","../../../../libs/daga-angular/src/lib/services/daga-configuration.service.ts","../../../../libs/daga-angular/src/lib/diagram-buttons/diagram-buttons.component.ts","../../../../libs/daga-angular/src/lib/diagram-buttons/diagram-buttons.component.html","../../../../libs/daga-angular/src/lib/errors/errors.component.ts","../../../../libs/daga-angular/src/lib/errors/errors.component.html","../../../../libs/daga-angular/src/lib/palette/palette.component.ts","../../../../libs/daga-angular/src/lib/palette/palette.component.html","../../../../libs/daga-angular/src/lib/property-editor/property-settings/property-settings.component.ts","../../../../libs/daga-angular/src/lib/property-editor/property-settings/property-settings.component.html","../../../../libs/daga-angular/src/lib/property-editor/autocomplete/autocomplete.component.ts","../../../../libs/daga-angular/src/lib/property-editor/autocomplete/autocomplete.component.html","../../../../libs/daga-angular/src/lib/property-editor/option-list-editor/option-list-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/option-list-editor/option-list-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/text-list-editor/text-list-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/text-list-editor/text-list-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/text-map-editor/text-map-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/text-map-editor/text-map-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/object-editor/object-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/object-editor/object-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/property-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/property-editor.component.html","../../../../libs/daga-angular/src/lib/diagram/diagram.component.ts","../../../../libs/daga-angular/src/lib/diagram/diagram.component.html","../../../../libs/daga-angular/src/lib/daga.module.ts","../../../../libs/daga-angular/src/metadev-daga-angular.ts"],"sourcesContent":["import { Component, ElementRef, Input } from '@angular/core';\r\nimport { Side } from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\n\r\n/**\r\n * Button used to collapse components that implement it.\r\n * @private\r\n */\r\n@Component({\r\n selector: 'daga-collapse-button',\r\n templateUrl: './collapse-button.component.html'\r\n})\r\nexport class CollapseButtonComponent {\r\n @Input()\r\n collapsableSelector!: string | ElementRef | HTMLElement;\r\n @Input()\r\n collapsableAdditionalSelector!: string;\r\n @Input()\r\n collapsed = false;\r\n @Input()\r\n disabled = false;\r\n @Input()\r\n direction = Side.Bottom;\r\n @Input()\r\n rule = 'visibility';\r\n @Input()\r\n collapsedValue = 'collapse';\r\n @Input()\r\n visibleValue = 'visible';\r\n\r\n Side = Side;\r\n\r\n toggleCollapse(): void {\r\n if (!this.disabled) {\r\n this.collapsed = !this.collapsed;\r\n let selection;\r\n if (this.collapsableSelector instanceof ElementRef) {\r\n selection = d3.select(this.collapsableSelector.nativeElement);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n } else if (this.collapsableSelector instanceof HTMLElement) {\r\n selection = d3.select(this.collapsableSelector);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n } else {\r\n selection = d3.select(this.collapsableSelector);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n }\r\n selection.style(\r\n this.rule,\r\n this.collapsed ? this.collapsedValue : this.visibleValue\r\n );\r\n }\r\n }\r\n\r\n getClass(): string {\r\n switch (this.direction) {\r\n case Side.Right:\r\n if (this.disabled) {\r\n return 'daga-horizontal-none';\r\n } else if (this.collapsed) {\r\n return 'daga-horizontal-right';\r\n } else {\r\n return 'daga-horizontal-left';\r\n }\r\n case Side.Bottom:\r\n if (this.disabled) {\r\n return 'daga-vertical-none';\r\n } else if (this.collapsed) {\r\n return 'daga-vertical-down';\r\n } else {\r\n return 'daga-vertical-up';\r\n }\r\n case Side.Left:\r\n if (this.disabled) {\r\n return 'daga-horizontal-none';\r\n } else if (this.collapsed) {\r\n return 'daga-horizontal-left';\r\n } else {\r\n return 'daga-horizontal-right';\r\n }\r\n case Side.Top:\r\n if (this.disabled) {\r\n return 'daga-vertical-none';\r\n } else if (this.collapsed) {\r\n return 'daga-vertical-up';\r\n } else {\r\n return 'daga-vertical-down';\r\n }\r\n }\r\n }\r\n}\r\n","<button\r\n class=\"daga-collapse-button daga-{{ direction }}\"\r\n (click)=\"toggleCollapse()\"\r\n>\r\n <div [class]=\"getClass()\"></div>\r\n</button>\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n Canvas,\r\n DiagramCanvas,\r\n DiagramConfig,\r\n DiagramEditor\r\n} from '@metadev/daga';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n/**\r\n * A provider for the {@link Canvas} associated with a {@link DiagramComponent} context.\r\n * @public\r\n */\r\n@Injectable()\r\nexport class CanvasProviderService {\r\n private _canvas!: Canvas;\r\n\r\n private canvasSubject$ = new ReplaySubject<Canvas>();\r\n\r\n /**\r\n * Subject used to track when the canvas has been updated.\r\n * @public\r\n */\r\n public canvas$ = this.canvasSubject$.asObservable();\r\n\r\n private viewInitializedSubject$ = new ReplaySubject<Canvas>();\r\n\r\n /**\r\n * Subject used to track when the view of the canvas has been updated after updating the canvas.\r\n * @public\r\n */\r\n public viewInitialized$ = this.viewInitializedSubject$.asObservable();\r\n\r\n /**\r\n * Initialize the diagram canvas object of this context using the given diagram configuration.\r\n * @private\r\n * @param parentComponent A diagram editor.\r\n * @param config A diagram configuration.\r\n */\r\n initCanvas(parentComponent: DiagramEditor, config: DiagramConfig) {\r\n this._canvas = new DiagramCanvas(parentComponent, config);\r\n this.canvasSubject$.next(this._canvas);\r\n }\r\n\r\n /**\r\n * Attach the canvas of this context to an HTML element to render it there.\r\n * @private\r\n * @param appendTo An HTML element.\r\n */\r\n initCanvasView(appendTo: HTMLElement) {\r\n this._canvas.initView(appendTo);\r\n this.viewInitializedSubject$.next(this._canvas);\r\n }\r\n\r\n /**\r\n * Get the current canvas of this context.\r\n * @public\r\n * @returns A canvas.\r\n */\r\n getCanvas(): Canvas {\r\n return this._canvas;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DiagramConfig } from '@metadev/daga';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n/**\r\n * A provider for the {@link DiagramConfig} associated with a {@link DiagramComponent} context.\r\n * @public\r\n */\r\n@Injectable()\r\nexport class DagaConfigurationService {\r\n private _config!: DiagramConfig;\r\n\r\n private configSubject$ = new ReplaySubject<DiagramConfig>();\r\n\r\n /**\r\n * Subject used to track when the diagram configuration has been updated.\r\n * @public\r\n */\r\n public config$ = this.configSubject$.asObservable();\r\n\r\n /**\r\n * Set the diagram configuration of this context.\r\n * @private\r\n * @param config A diagram configuration.\r\n */\r\n init(config: DiagramConfig) {\r\n this._config = config;\r\n this.configSubject$.next(config);\r\n }\r\n\r\n /**\r\n * Get the current diagram configuration of this context.\r\n * @public\r\n * @returns A diagram configuration.\r\n */\r\n getConfig(): DiagramConfig {\r\n return this._config;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n ApplyLayoutAction,\r\n Canvas,\r\n Corner,\r\n DiagramActions,\r\n DiagramButtons,\r\n DiagramConfig,\r\n getLocationsOfNodes,\r\n layouts,\r\n Side\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { Subscription } from 'rxjs';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * Buttons used to trigger diagram functionalities by the user.\r\n * @private\r\n */\r\n@Component({\r\n selector: 'daga-diagram-buttons',\r\n templateUrl: './diagram-buttons.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DiagramButtonsComponent\r\n implements DiagramButtons, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #canvasProvider = inject(CanvasProviderService);\r\n #configService = inject(DagaConfigurationService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('collapsableButtons')\r\n collapsableButtons!: ElementRef<HTMLDivElement>;\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n enableAction = true;\r\n @Input()\r\n enableFilter = false;\r\n @Input()\r\n enableLayout = false;\r\n @Input()\r\n enableSelection = true;\r\n @Input()\r\n enableZoom = true;\r\n\r\n filterOn = false;\r\n collapsed = true;\r\n animationOngoing = false;\r\n private sizeAttribute!: string;\r\n private transformFunction!: string;\r\n private transformOrigin!: string;\r\n private marginSide!: string;\r\n private collapsableButtonsSize!: string;\r\n\r\n private sub?: Subscription;\r\n\r\n DiagramActions = DiagramActions;\r\n\r\n ngOnInit() {\r\n this.sub = this.#configService.config$.subscribe((c) => {\r\n this.init(c);\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.recalculateSizeOfButtons();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n init(config: DiagramConfig) {\r\n this.filterOn = false;\r\n this.collapsed = true;\r\n this.animationOngoing = false;\r\n this.location = config.components?.buttons?.location || Corner.BottomRight;\r\n this.direction = config.components?.buttons?.direction || Side.Top;\r\n this.enableAction = config.components?.buttons?.enableAction !== false;\r\n this.enableFilter = config.components?.buttons?.enableFilter === true;\r\n this.enableLayout = config.components?.buttons?.enableLayout === true;\r\n this.enableSelection =\r\n config.components?.buttons?.enableSelection !== false;\r\n this.enableZoom = config.components?.buttons?.enableZoom !== false;\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'top';\r\n this.marginSide = 'bottom';\r\n break;\r\n case Side.Top:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'bottom';\r\n this.marginSide = 'top';\r\n break;\r\n case Side.Left:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'right';\r\n this.marginSide = 'left';\r\n break;\r\n case Side.Right:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'left';\r\n this.marginSide = 'right';\r\n break;\r\n }\r\n this.recalculateSizeOfButtons();\r\n }\r\n\r\n recalculateSizeOfButtons() {\r\n if (this.collapsableButtons) {\r\n const numberOfCollapsableButtons =\r\n (this.enableZoom &&\r\n this.canvas.canUserPerformAction(DiagramActions.Zoom)\r\n ? 1\r\n : 0) +\r\n (this.enableAction ? 2 : 0) +\r\n (this.enableSelection ? 5 : 0) +\r\n (this.enableLayout ? 1 : 0) +\r\n (this.enableFilter ? 1 : 0);\r\n this.collapsableButtonsSize = `${4 * numberOfCollapsableButtons}rem`;\r\n d3.select(this.collapsableButtons.nativeElement)\r\n .style(`margin-${this.marginSide}`, '-1rem')\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`)\r\n .style('transform-origin', this.transformOrigin);\r\n }\r\n }\r\n\r\n // Collapse functions\r\n\r\n async toggleCollapse() {\r\n if (!this.animationOngoing) {\r\n const duration = 500;\r\n const collapsableButtons = d3.select(\r\n this.collapsableButtons.nativeElement\r\n );\r\n if (this.collapsed) {\r\n this.collapsed = false;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, this.collapsableButtonsSize)\r\n .style('transform', `${this.transformFunction}(1)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n } else {\r\n this.collapsed = true;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n }\r\n }\r\n }\r\n\r\n // Button functions\r\n\r\n zoomIn(): void {\r\n this.canvas.zoomBy(this.canvas.zoomFactor);\r\n }\r\n\r\n zoomOut(): void {\r\n this.canvas.zoomBy(1 / this.canvas.zoomFactor);\r\n }\r\n\r\n center(): void {\r\n this.canvas.center();\r\n }\r\n\r\n layout(): void {\r\n if (this.canvas.layoutFormat && this.canvas.layoutFormat in layouts) {\r\n const from = getLocationsOfNodes(this.canvas.model);\r\n layouts[this.canvas.layoutFormat].apply(this.canvas.model);\r\n const to = getLocationsOfNodes(this.canvas.model);\r\n const action = new ApplyLayoutAction(this.canvas, from, to);\r\n this.canvas.actionStack.add(action);\r\n }\r\n }\r\n\r\n filter(): void {\r\n this.filterOn = !this.filterOn;\r\n const priorityThresholds = this.canvas.getPriorityThresholdOptions();\r\n if (priorityThresholds && priorityThresholds.length >= 2) {\r\n this.canvas.setPriorityThreshold(\r\n priorityThresholds[this.filterOn ? 1 : 0]\r\n );\r\n }\r\n }\r\n\r\n undo(): void {\r\n this.canvas.actionStack.undo();\r\n }\r\n\r\n redo(): void {\r\n this.canvas.actionStack.redo();\r\n }\r\n\r\n copySelection(): void {\r\n this.canvas.userSelection.copyToClipboard();\r\n }\r\n\r\n cutSelection(): void {\r\n this.canvas.userSelection.cutToClipboard();\r\n }\r\n\r\n pasteSelection(): void {\r\n this.canvas.userSelection.pasteFromClipboard();\r\n }\r\n\r\n deleteSelection(): void {\r\n this.canvas.userSelection.removeFromModel();\r\n }\r\n\r\n startMultipleSelection(): void {\r\n this.canvas.multipleSelectionOn = true;\r\n }\r\n}\r\n","<div class=\"daga-diagram-buttons daga-{{ location }} daga-{{ direction }}\">\r\n @if (enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)) {\r\n <button\r\n class=\"daga-zoom-in\"\r\n (click)=\"zoomIn()\"\r\n >\r\n <span class=\"daga-tooltip\">Zoom in</span>\r\n </button>\r\n }\r\n @if (enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)) {\r\n <button\r\n class=\"daga-zoom-out\"\r\n (click)=\"zoomOut()\"\r\n >\r\n <span class=\"daga-tooltip\">Zoom out</span>\r\n </button>\r\n }\r\n <div #collapsableButtons class=\"daga-collapsable-buttons daga-collapsed\">\r\n @if (enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)) {\r\n <button\r\n class=\"daga-center\"\r\n (click)=\"center()\"\r\n >\r\n <span class=\"daga-tooltip\">Fit diagram to screen</span>\r\n </button>\r\n }\r\n @if (enableAction) {\r\n <button class=\"daga-undo\" (click)=\"undo()\">\r\n <span class=\"daga-tooltip\">Undo</span>\r\n </button>\r\n }\r\n @if (enableAction) {\r\n <button class=\"daga-redo\" (click)=\"redo()\">\r\n <span class=\"daga-tooltip\">Redo</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button class=\"daga-copy\" (click)=\"copySelection()\">\r\n <span class=\"daga-tooltip\">Copy</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button class=\"daga-cut\" (click)=\"cutSelection()\">\r\n <span class=\"daga-tooltip\">Cut</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button\r\n class=\"daga-multiple-selection\"\r\n [class]=\"canvas.multipleSelectionOn ? 'daga-on' : 'daga-off'\"\r\n (click)=\"startMultipleSelection()\"\r\n >\r\n <span class=\"daga-tooltip\">Multiple selection</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button\r\n class=\"daga-paste\"\r\n (click)=\"pasteSelection()\"\r\n >\r\n <span class=\"daga-tooltip\">Paste</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button\r\n class=\"daga-delete\"\r\n (click)=\"deleteSelection()\"\r\n >\r\n <span class=\"daga-tooltip\">Delete</span>\r\n </button>\r\n }\r\n @if (enableLayout) {\r\n <button class=\"daga-layout\" (click)=\"layout()\">\r\n <span class=\"daga-tooltip\">Apply layout</span>\r\n </button>\r\n }\r\n @if (enableFilter) {\r\n <button\r\n class=\"daga-filter\"\r\n [class]=\"filterOn ? 'daga-on' : 'daga-off'\"\r\n (click)=\"filter()\"\r\n >\r\n <span class=\"daga-tooltip\">Apply filter</span>\r\n </button>\r\n }\r\n </div>\r\n <button class=\"daga-more-options\" (click)=\"toggleCollapse()\">\r\n @if (!collapsed) {\r\n <span class=\"daga-tooltip\">Less options</span>\r\n }\r\n @if (collapsed) {\r\n <span class=\"daga-tooltip\">More options</span>\r\n }\r\n </button>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n OnDestroy,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { Canvas, DiagramError, Side } from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { map, merge, Subscription } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\n\r\n/**\r\n * Displays the errors detected by a diagram's validators.\r\n * @private\r\n * @see DiagramValidator\r\n */\r\n@Component({\r\n selector: 'daga-errors',\r\n templateUrl: './errors.component.html',\r\n imports: [CollapseButtonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ErrorsComponent implements AfterViewInit, OnDestroy {\r\n #canvasProvider = inject(CanvasProviderService);\r\n #cdf = inject(ChangeDetectorRef);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('errors') errorsContainer!: ElementRef<HTMLDivElement>;\r\n\r\n errors: DiagramError[] = [];\r\n\r\n private canvasSub?: Subscription;\r\n private validationSub?: Subscription;\r\n\r\n Side = Side;\r\n\r\n ngAfterViewInit(): void {\r\n this.canvasSub = this.#canvasProvider.canvas$.subscribe((c) => {\r\n this.updateCanvas(c);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.canvasSub?.unsubscribe();\r\n this.validationSub?.unsubscribe();\r\n }\r\n\r\n selectPanel(): d3.Selection<d3.BaseType, unknown, null, unknown> {\r\n return d3\r\n .select(this.errorsContainer.nativeElement)\r\n .select('.daga-error-panel');\r\n }\r\n\r\n private updateCanvas(canvas: Canvas) {\r\n this.validationSub?.unsubscribe();\r\n this.validationSub = merge(canvas.validatorChange$, canvas.diagramChange$)\r\n .pipe(map(() => this.validate()))\r\n .subscribe();\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n for (const validator of this.canvas.validators) {\r\n const newErrors = validator.validate(this.canvas.model);\r\n this.errors = [...this.errors, ...newErrors];\r\n }\r\n // need to force detection changes here for some reason...\r\n this.#cdf.detectChanges();\r\n }\r\n\r\n showError(error: DiagramError): void {\r\n if (\r\n error.elementId &&\r\n (error.propertyNames === undefined || error.propertyNames.length === 0)\r\n ) {\r\n const element =\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId);\r\n if (element) {\r\n this.canvas.userHighlight.add(element);\r\n }\r\n } else if (\r\n error.elementId &&\r\n error.propertyNames !== undefined &&\r\n error.propertyNames.length > 0\r\n ) {\r\n this.canvas.userSelection.openInPropertyEditor(\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId)\r\n );\r\n const element =\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId);\r\n if (element) {\r\n this.canvas.userHighlight.add(element);\r\n }\r\n this.canvas.parentComponent?.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n } else if (\r\n !error.elementId &&\r\n error.propertyNames !== undefined &&\r\n error.propertyNames.length > 0\r\n ) {\r\n this.canvas.userSelection.openInPropertyEditor();\r\n this.canvas.parentComponent?.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n }\r\n }\r\n}\r\n","<div #errorsContainer class=\"daga-errors\">\r\n @if (errors.length === 0) {\r\n <div\r\n class=\"daga-errors-summary daga-no-errors daga-prevent-user-select\"\r\n >\r\n <span>No errors found</span>\r\n </div>\r\n }\r\n @if (errors.length > 0) {\r\n <div\r\n class=\"daga-errors-summary daga-with-errors daga-prevent-user-select\"\r\n >\r\n <span>{{ errors.length }} errors found</span>\r\n <div class=\"daga-collapse-button-container\">\r\n <daga-collapse-button\r\n [collapsableSelector]=\"errorsContainer\"\r\n [collapsableAdditionalSelector]=\"'.daga-error-panel'\"\r\n [direction]=\"Side.Top\"\r\n [rule]=\"'display'\"\r\n [collapsedValue]=\"'none'\"\r\n [visibleValue]=\"'block'\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n @if (errors.length > 0) {\r\n <div class=\"daga-error-panel\">\r\n <ol>\r\n @for (error of errors; track error; let i = $index) {\r\n <li\r\n (click)=\"showError(error)\"\r\n [innerHTML]=\"error.message\"\r\n ></li>\r\n }\r\n </ol>\r\n </div>\r\n }\r\n </div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n AddNodeAction,\r\n Canvas,\r\n ClosedShape,\r\n ConnectionTemplateConfig,\r\n Corner,\r\n CursorStyle,\r\n DIAGRAM_FIELD_DEFAULTS,\r\n DiagramActions,\r\n DiagramConfig,\r\n DiagramConnectionType,\r\n DiagramNodeType,\r\n DragEvents,\r\n Events,\r\n filterByOnlyDescendants,\r\n generalClosedPath,\r\n getLeftMargin,\r\n getTopMargin,\r\n NodeTemplateConfig,\r\n Palette,\r\n PaletteSectionConfig,\r\n Point,\r\n setCursorStyle,\r\n Side\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { Subscription } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * Distance in pixels by which labels must be shifted in order to be centered properly.\r\n */\r\nconst LABEL_VERTICAL_SHIFT_PX = 6;\r\n\r\n/**\r\n * Palette that the user can drag and drop nodes from.\r\n * @private\r\n * @see DiagramConfig\r\n * @see DiagramNode\r\n */\r\n@Component({\r\n selector: 'daga-palette',\r\n templateUrl: './palette.component.html',\r\n imports: [CollapseButtonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PaletteComponent\r\n implements Palette, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #canvasProvider = inject(CanvasProviderService);\r\n #configService = inject(DagaConfigurationService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n @Input()\r\n palettes!: PaletteSectionConfig[];\r\n @Input()\r\n currentPalette!: PaletteSectionConfig;\r\n @Input()\r\n currentCategory = '';\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n width!: string;\r\n @Input()\r\n height?: string;\r\n @Input()\r\n gap!: string;\r\n\r\n private priorityThreshold?: number;\r\n\r\n private sub?: Subscription;\r\n\r\n ngOnInit(): void {\r\n /*\r\n reload using the canvas observable instead of the config one\r\n because we're getting the type info from the model, not the configuration\r\n */\r\n this.sub = this.#canvasProvider.canvas$.subscribe(() => {\r\n this.init(this.#configService.getConfig());\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.refreshPalette();\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel()\r\n .style('width', this.width)\r\n .select('.daga-palette-view')\r\n .style('flex-direction', 'row');\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('height', this.height);\r\n }\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel()\r\n .style('height', this.width)\r\n .select('.daga-palette-view')\r\n .style('flex-direction', 'column');\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('width', this.height);\r\n }\r\n break;\r\n }\r\n this.selectPanel()\r\n .select('.daga-palette-view')\r\n .style('flex-wrap', 'wrap')\r\n .style('justify-content', 'center')\r\n .style('gap', this.gap);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n init(config: DiagramConfig): void {\r\n this.location = config.components?.palette?.location || Corner.TopLeft;\r\n this.direction = config.components?.palette?.direction || Side.Bottom;\r\n this.width = config.components?.palette?.width || '12rem';\r\n this.height = config.components?.palette?.height;\r\n this.gap = config.components?.palette?.gap || '1rem';\r\n this.palettes = config.components?.palette?.sections || [];\r\n this.currentPalette = this.palettes[0];\r\n this.refreshPalette();\r\n }\r\n\r\n refreshPalette(): void {\r\n this.switchPalette(this.currentPalette);\r\n }\r\n\r\n switchPalette(palette: PaletteSectionConfig): void {\r\n this.currentPalette = palette;\r\n\r\n if (this.panel !== undefined) {\r\n this.selectPalette().selectAll('*').remove();\r\n this.priorityThreshold = this.canvas.getPriorityThreshold();\r\n\r\n if (palette.categories) {\r\n this.appendCategories(palette.categories);\r\n }\r\n if (palette.templates) {\r\n for (const template of palette.templates) {\r\n this.appendTemplate(template);\r\n }\r\n }\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n selectPalette(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return this.selectPanel().select('.daga-palette-view');\r\n }\r\n\r\n private appendCategories(categories: {\r\n [key: string]: (NodeTemplateConfig | ConnectionTemplateConfig)[];\r\n }): void {\r\n const thisComponent = this.selectPalette()\r\n .append('select')\r\n .style('width', '100%')\r\n .style('height', '2rem')\r\n .style('padding', '0.5rem')\r\n .style('border-radius', '0.25rem')\r\n .style('background-color', '#f7f8fc')\r\n .style('border', `1px solid #e6e6e6`);\r\n thisComponent.append('option').attr('value', '').text('(None selected)');\r\n for (const categoryKey in categories) {\r\n thisComponent\r\n .append('option')\r\n .attr('value', categoryKey)\r\n .text(categoryKey);\r\n }\r\n thisComponent.on(Events.Change, () => {\r\n if (this.currentCategory) {\r\n this.selectPalette()\r\n .selectAll(`.daga-template-container.daga-in-category`)\r\n .remove();\r\n }\r\n\r\n const selectedKey = thisComponent.property('value');\r\n this.currentCategory = selectedKey;\r\n const templatesInCategory = categories[selectedKey] || [];\r\n for (const template of templatesInCategory) {\r\n this.appendTemplate(template, 'daga-in-category');\r\n }\r\n });\r\n if (this.currentCategory) {\r\n // if we had a category already selected, re-select it\r\n thisComponent.property('value', this.currentCategory);\r\n thisComponent.dispatch(Events.Change);\r\n }\r\n }\r\n\r\n private appendTemplate(\r\n template: NodeTemplateConfig | ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (template.templateType === 'node') {\r\n const nodeType = this.canvas.model.nodes.types.get(template.type);\r\n if (nodeType) {\r\n this.appendNodeTemplate(nodeType, template, classes);\r\n } else {\r\n console.error(`Could not find a node type called '${template.type}'`);\r\n }\r\n } else if (template.templateType === 'connection') {\r\n {\r\n const connectionType = this.canvas.model.connections.types.get(\r\n template.type\r\n );\r\n if (connectionType) {\r\n this.appendConnectionTemplate(connectionType, template, classes);\r\n } else {\r\n console.error(\r\n `Could not find a connection type called '${template.type}'`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private appendNodeTemplate(\r\n type: DiagramNodeType,\r\n templateConfig: NodeTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (\r\n this.priorityThreshold !== undefined &&\r\n type.priority < this.priorityThreshold\r\n ) {\r\n return;\r\n }\r\n const borderThickness =\r\n type.defaultLook.lookType === 'shaped-look'\r\n ? type.defaultLook.borderThickness || 1\r\n : 0;\r\n const templateHeight = type.defaultHeight + borderThickness;\r\n const templateWidth = type.defaultWidth + borderThickness;\r\n const stretchedTemplateHeight = templateConfig.height || templateHeight;\r\n const stretchedTemplateWidth = templateConfig.width || templateWidth;\r\n\r\n let thisComponentClone!: d3.Selection<Element, unknown, null, undefined>;\r\n\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `daga-template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${stretchedTemplateWidth}px`)\r\n .style('height', `${stretchedTemplateHeight}px`)\r\n .on(Events.MouseEnter, () => {\r\n setCursorStyle(CursorStyle.Grab);\r\n })\r\n .on(Events.MouseLeave, () => {\r\n setCursorStyle();\r\n })\r\n .call(\r\n d3\r\n .drag<HTMLDivElement, unknown, HTMLElement>()\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToRoot(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponentClone\r\n .style(\r\n 'left',\r\n `${pointerCoords[0] - stretchedTemplateWidth / 2}px`\r\n )\r\n .style(\r\n 'top',\r\n `${pointerCoords[1] - stretchedTemplateHeight / 2}px`\r\n );\r\n }\r\n })\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n setCursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToRoot(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n const thisComponentNodeCloned = thisComponent\r\n .node()\r\n ?.cloneNode(true);\r\n (this.canvas.selectRoot().node() as HTMLDivElement).appendChild(\r\n thisComponentNodeCloned as Node\r\n );\r\n thisComponentClone = d3.select(\r\n thisComponentNodeCloned as Element\r\n );\r\n thisComponentClone\r\n .style('position', 'absolute')\r\n .style(\r\n 'left',\r\n `${pointerCoords[0] - stretchedTemplateWidth / 2}px`\r\n )\r\n .style(\r\n 'top',\r\n `${pointerCoords[1] - stretchedTemplateHeight / 2}px`\r\n )\r\n .style('z-index', 1);\r\n // when trying to place a unique node in a diagram that already has a node of that type, set cursor style to not allowed\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n setCursorStyle(CursorStyle.NotAllowed);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n // take node back to its original position\r\n setCursorStyle(CursorStyle.Auto);\r\n thisComponentClone?.remove();\r\n // try to place node\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n // can't place, it's unique and that node is already in the model\r\n return;\r\n }\r\n const pointerCoordsRelativeToScreen =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoordsRelativeToScreen.length < 2 ||\r\n isNaN(pointerCoordsRelativeToScreen[0]) ||\r\n isNaN(pointerCoordsRelativeToScreen[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n\r\n const element = document.elementFromPoint(\r\n pointerCoordsRelativeToScreen[0],\r\n pointerCoordsRelativeToScreen[1]\r\n );\r\n if (\r\n element &&\r\n !this.canvas.selectCanvasView().node()?.contains(element)\r\n ) {\r\n // can't place, node hasn't been dropped on the canvas\r\n return;\r\n }\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToCanvas(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n let newNodeCoords: Point = [\r\n pointerCoords[0] - type.defaultWidth / 2,\r\n pointerCoords[1] - type.defaultHeight / 2\r\n ];\r\n if (this.canvas.snapToGrid) {\r\n newNodeCoords = this.canvas.getClosestGridPoint(newNodeCoords);\r\n }\r\n\r\n // check whether we dropped this node on a potential parent\r\n const nodesAtLocation = this.canvas.model.nodes.getAtCoordinates(\r\n pointerCoords[0],\r\n pointerCoords[1]\r\n );\r\n // filter by which nodes can have this type as a child\r\n const nodesAtLocationWhichCanHaveNodeAsAChild =\r\n nodesAtLocation.filter((n) =>\r\n n.type.childrenTypes.includes(type.id)\r\n );\r\n // filter by which nodes don't have descendants in this collection\r\n const filteredNodesAtLocation = filterByOnlyDescendants(\r\n nodesAtLocationWhichCanHaveNodeAsAChild\r\n );\r\n const droppedOn =\r\n filteredNodesAtLocation[filteredNodesAtLocation.length - 1];\r\n\r\n if (!type.canBeParentless && droppedOn === undefined) {\r\n // can't place, node must have a parent and no suitable parent has been found\r\n return;\r\n }\r\n\r\n const ancestor = droppedOn?.getLastAncestor();\r\n\r\n const addNodeAction = new AddNodeAction(\r\n this.canvas,\r\n type,\r\n newNodeCoords,\r\n droppedOn?.id,\r\n ancestor?.id,\r\n ancestor?.getGeometry(),\r\n undefined,\r\n templateConfig.label,\r\n templateConfig.values\r\n );\r\n\r\n addNodeAction.do();\r\n addNodeAction.toAncestorGeometry = ancestor?.getGeometry();\r\n\r\n this.canvas.actionStack.add(addNodeAction);\r\n // reset cursor\r\n setCursorStyle();\r\n }\r\n })\r\n )\r\n .append('svg')\r\n .attr('class', `palette-node ${type.id}`)\r\n .attr('viewBox', `0 0 ${templateWidth} ${templateHeight}`)\r\n .attr('preserveAspectRatio', 'none')\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', `${stretchedTemplateWidth}px`)\r\n .style('height', `${stretchedTemplateHeight}px`);\r\n const nodeLook = templateConfig.look || type.defaultLook;\r\n\r\n switch (nodeLook.lookType) {\r\n case 'shaped-look':\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n nodeLook.shape || ClosedShape.Rectangle,\r\n (nodeLook.borderThickness || 1) / 2,\r\n (nodeLook.borderThickness || 1) / 2,\r\n type.defaultWidth,\r\n type.defaultHeight\r\n )\r\n )\r\n .attr('fill', nodeLook.fillColor || '#FFFFFF')\r\n .attr('stroke', nodeLook.borderColor || '#000000')\r\n .attr('stroke-width', `${nodeLook.borderThickness}px`);\r\n break;\r\n case 'image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.defaultWidth)\r\n .attr('height', type.defaultHeight)\r\n .attr('href', nodeLook.backgroundImage)\r\n .attr('preserveAspectRatio', 'none');\r\n break;\r\n case 'stretchable-image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', nodeLook.leftMargin)\r\n .attr('height', nodeLook.topMargin)\r\n .attr('href', nodeLook.backgroundImageTopLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', nodeLook.leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - nodeLook.rightMargin - nodeLook.leftMargin\r\n )\r\n .attr('height', nodeLook.topMargin)\r\n .attr('href', nodeLook.backgroundImageTop)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - nodeLook.rightMargin)\r\n .attr('y', 0)\r\n .attr('width', nodeLook.rightMargin)\r\n .attr('height', nodeLook.topMargin)\r\n .attr('href', nodeLook.backgroundImageTopRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', nodeLook.topMargin)\r\n .attr('width', nodeLook.leftMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - nodeLook.bottomMargin - nodeLook.topMargin\r\n )\r\n .attr('href', nodeLook.backgroundImageLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', nodeLook.leftMargin)\r\n .attr('y', nodeLook.topMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - nodeLook.rightMargin - nodeLook.leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n type.defaultHeight - nodeLook.bottomMargin - nodeLook.topMargin\r\n )\r\n .attr('href', nodeLook.backgroundImageCenter)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - nodeLook.rightMargin)\r\n .attr('y', nodeLook.topMargin)\r\n .attr('width', nodeLook.rightMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - nodeLook.bottomMargin - nodeLook.topMargin\r\n )\r\n .attr('href', nodeLook.backgroundImageRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.defaultHeight - nodeLook.bottomMargin)\r\n .attr('width', nodeLook.leftMargin)\r\n .attr('height', nodeLook.bottomMargin)\r\n .attr('href', nodeLook.backgroundImageBottomLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', nodeLook.leftMargin)\r\n .attr('y', type.defaultHeight - nodeLook.bottomMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - nodeLook.rightMargin - nodeLook.leftMargin\r\n )\r\n .attr('height', nodeLook.bottomMargin)\r\n .attr('href', nodeLook.backgroundImageBottom)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - nodeLook.rightMargin)\r\n .attr('y', type.defaultHeight - nodeLook.bottomMargin)\r\n .attr('width', nodeLook.rightMargin)\r\n .attr('height', nodeLook.bottomMargin)\r\n .attr('href', nodeLook.backgroundImageBottomRight)\r\n .attr('preserveAspectRatio', 'none');\r\n }\r\n\r\n if (templateConfig.look === undefined) {\r\n if (type.decorators) {\r\n for (const decoratorConfig of type.decorators) {\r\n thisComponent\r\n .append('foreignObject')\r\n .attr('width', `${decoratorConfig.width}px`)\r\n .attr('height', `${decoratorConfig.height}px`)\r\n .attr(\r\n 'transform',\r\n `translate(${decoratorConfig.coords[0]},${decoratorConfig.coords[1]})`\r\n )\r\n .html(decoratorConfig.html);\r\n }\r\n }\r\n\r\n if (templateConfig.label) {\r\n const labelConfig = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...type.label,\r\n ...templateConfig.labelLook\r\n };\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${(getLeftMargin(labelConfig) + type.defaultWidth + borderThickness / 2) / 2},${(getTopMargin(labelConfig) + type.defaultHeight + borderThickness / 2) / 2})`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', `${labelConfig.fontSize}px`)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfig.fontFamily)\r\n .attr('font-weight', 400)\r\n .attr('fill', labelConfig.color)\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n }\r\n\r\n private appendConnectionTemplate(\r\n type: DiagramConnectionType,\r\n templateConfig: ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `daga-template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${templateConfig.width}px`)\r\n .style('height', `${templateConfig.height}px`)\r\n .style('cursor', 'pointer')\r\n .append('svg')\r\n .attr('class', `palette-button ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .on('click', () => {\r\n this.canvas.connectionType = type;\r\n });\r\n\r\n if (this.canvas.connectionType !== type) {\r\n // the connection type of this template is not the currently selected one\r\n if (templateConfig.icon !== '') {\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.icon);\r\n }\r\n } else {\r\n // the connection type of this template is the currently selected one\r\n if (templateConfig.selectedIcon !== '') {\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.selectedIcon);\r\n } else if (templateConfig.icon !== '') {\r\n // if there's no selectedIcon, use the regular icon instead\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.icon);\r\n }\r\n }\r\n\r\n if (templateConfig.label !== '') {\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${templateConfig.width / 2},${\r\n templateConfig.height / 2 + LABEL_VERTICAL_SHIFT_PX\r\n })`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', '20px')\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\r\n .attr('font-weight', 400)\r\n .attr('fill', '#000000')\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n}\r\n","<div #panel class=\"daga-panel daga-{{ location }} daga-{{ direction }}\">\r\n <daga-collapse-button\r\n #collapseButton\r\n [direction]=\"direction\"\r\n [collapsableSelector]=\"panel\"\r\n collapsableAdditionalSelector=\".daga-panel-content\"\r\n rule=\"display\"\r\n collapsedValue=\"none\"\r\n visibleValue=\"block\"\r\n />\r\n <div class=\"daga-panel-content\">\r\n @if (palettes.length > 1) {\r\n <div class=\"daga-panel-tabs\">\r\n @for (palette of palettes; track palette) {\r\n <div\r\n class=\"daga-panel-tab\"\r\n [class]=\"palette === currentPalette ? 'daga-current-tab' : ''\"\r\n (click)=\"switchPalette(palette)\"\r\n >\r\n {{ palette.name }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"daga-palette-view\"></div>\r\n </div>\r\n </div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n Canvas,\r\n CursorStyle,\r\n DragEvents,\r\n Point,\r\n Property,\r\n Type,\r\n ValueSet,\r\n isObject,\r\n setCursorStyle\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { getStyleClassName } from '../property-editor.component';\r\n\r\n/**\r\n * Editor of the settings of a property editor, such as what properties are displayed and hidden and in what order.\r\n * @private\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-property-settings',\r\n templateUrl: './property-settings.component.html',\r\n imports: [FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropertySettingsComponent implements AfterViewInit {\r\n #element = inject(ElementRef);\r\n #cdr = inject(ChangeDetectorRef);\r\n #canvasProvider = inject(CanvasProviderService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n /** How many property-settings elements are parents of this property-settings element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n asString = asString;\r\n\r\n ngAfterViewInit(): void {\r\n this.addListeners();\r\n }\r\n\r\n private addListeners() {\r\n for (const property of this.valueSet?.displayedProperties || []) {\r\n let propertyElementWidth = 0;\r\n let propertyElementHeight = 0;\r\n let closestDropbarIndex = 0;\r\n const propertyElement = d3\r\n .select(this.#element.nativeElement)\r\n .select<HTMLDivElement>(\r\n `.daga-property.${getStyleClassName(property.name)}.daga-depth-${this.depth}`\r\n );\r\n propertyElement.select<HTMLButtonElement>('button.daga-move-button').call(\r\n d3\r\n .drag<HTMLButtonElement, unknown, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n setCursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n const boundingRect = propertyElement\r\n .node()\r\n ?.getBoundingClientRect();\r\n propertyElementWidth = boundingRect?.width || 0;\r\n propertyElementHeight = boundingRect?.height || 0;\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n setCursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n d3.select(this.#element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n d3.select(this.#element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'visible')\r\n .style('height', '0.25rem');\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n setCursorStyle(CursorStyle.Auto);\r\n propertyElement\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('z-index', 0)\r\n .style('width', 'unset')\r\n .style('height', 'unset');\r\n d3.select(this.#element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n this.valueSet?.displayedProperties?.splice(\r\n this.valueSet.displayedProperties.indexOf(property),\r\n 1\r\n );\r\n this.valueSet?.displayedProperties?.splice(\r\n closestDropbarIndex,\r\n 0,\r\n property\r\n );\r\n this.#cdr.detectChanges();\r\n })\r\n );\r\n }\r\n }\r\n\r\n getClosestDropbarIndex(pointerCoords: Point): number {\r\n const propertyList = this.valueSet?.propertySet.propertyList || [];\r\n // note that this is <= and not < as we are counting the index after the last element as well\r\n const coordsList: Point[] = [];\r\n for (let i = 0; i <= propertyList.length; ++i) {\r\n const boundingRect = d3\r\n .select(this.#element.nativeElement)\r\n .select<HTMLDivElement>(\r\n `.daga-dropbar.daga-index-${i}.daga-depth-${this.depth}`\r\n )\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (boundingRect) {\r\n coordsList.push([\r\n boundingRect.x + boundingRect.width / 2,\r\n boundingRect.y + boundingRect.height / 2\r\n ]);\r\n }\r\n }\r\n if (coordsList.length > 0) {\r\n // euclidean distance\r\n const distanceToDropbars = coordsList.map(\r\n (p) =>\r\n ((pointerCoords[0] - p[0]) ** 2 + (pointerCoords[1] - p[1]) ** 2) **\r\n 0.5\r\n );\r\n const indexOfClosestDropbar = distanceToDropbars.indexOf(\r\n Math.min(...distanceToDropbars)\r\n );\r\n return indexOfClosestDropbar;\r\n }\r\n return 0;\r\n }\r\n\r\n displayProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.displayProperty(selectedProperty);\r\n }\r\n this.#cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n\r\n hideProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.hideProperty(selectedProperty);\r\n }\r\n this.#cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n}\r\n\r\nexport const asString = (value: unknown): string => {\r\n if (Array.isArray(value)) {\r\n return value.join(', ');\r\n }\r\n if (isObject(value)) {\r\n return Object.entries(value as object)\r\n .map((pair) => pair.map((p) => JSON.stringify(p)).join(': '))\r\n .join(', ');\r\n }\r\n if (value instanceof Date) {\r\n return value.toLocaleString();\r\n }\r\n if (value === undefined || value === null) {\r\n return '';\r\n }\r\n return '' + value;\r\n};\r\n","<div\r\n class=\"daga-dropbar\"\r\n [class]=\"'daga-index-' + 0 + ' daga-depth-' + depth\"\r\n></div>\r\n@for (\r\n property of valueSet?.displayedProperties || [];\r\n track property;\r\n let i = $index\r\n) {\r\n <div\r\n class=\"daga-property-and-dropbar\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n >\r\n <div\r\n class=\"daga-property\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n >\r\n <div class=\"daga-property-name\">\r\n <span>{{ property.label || property.name }}</span>\r\n <div class=\"daga-buttons\">\r\n <button class=\"daga-property-button daga-move-button\">\r\n <div class=\"daga-icon daga-move-icon\"></div>\r\n </button>\r\n <button\r\n class=\"daga-property-button daga-hide-button\"\r\n (click)=\"hideProperty(property.name)\"\r\n >\r\n <div class=\"daga-icon daga-hide-icon\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n @if (property.type !== Type.Object) {\r\n <div class=\"daga-property-value\">\r\n {{ asString(valueSet?.getValue(property.name)) }}\r\n </div>\r\n }\r\n @if (property.type === Type.Object) {\r\n <div>\r\n <daga-property-settings\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-property-settings>\r\n </div>\r\n }\r\n </div>\r\n <div\r\n class=\"daga-dropbar\"\r\n [class]=\"'daga-index-' + (i + 1) + ' daga-depth-' + depth\"\r\n ></div>\r\n </div>\r\n}\r\n@if (valueSet && valueSet.hiddenProperties.length > 0) {\r\n <div class=\"daga-property\">\r\n <p class=\"daga-property-name\">Add property:</p>\r\n <select (change)=\"displayProperty($event)\">\r\n <option value=\"\">Select a property</option>\r\n @for (property of valueSet.hiddenProperties || []; track property) {\r\n <option [value]=\"property.name\">\r\n {{ property.label || property.name }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Keys, Option, equals } from '@metadev/daga';\r\nimport { asString } from '../property-settings/property-settings.component';\r\n\r\nexport const LOST_FOCUS_TIME_WINDOW_MS = 200;\r\n\r\n/**\r\n * Combobox with autocomplete.\r\n * @private\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-autocomplete',\r\n templateUrl: './autocomplete.component.html',\r\n imports: [FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AutocompleteComponent {\r\n @ViewChild('main', { static: true }) mainElement!: ElementRef;\r\n\r\n private _value: unknown;\r\n @Input()\r\n set value(value: unknown) {\r\n if (equals(value, this._value)) {\r\n return;\r\n }\r\n this._value = value;\r\n this.valueInput = this.getLabelOfValue(value);\r\n }\r\n get value(): unknown {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n focusIndex?: number;\r\n @Input() options!: Option<unknown>[];\r\n currentOptions!: Option<unknown>[];\r\n currentLabelStarts!: string[];\r\n currentLabelMatches!: string[];\r\n currentLabelEnds!: string[];\r\n\r\n @Input() disabled = false;\r\n showOptions = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown>();\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (equals(option.key, value)) {\r\n return option.label;\r\n }\r\n }\r\n return asString(value);\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent): void {\r\n if (!this.disabled) {\r\n switch (event.key) {\r\n case Keys.PageDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.PageUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.Escape:\r\n this.closeOptions();\r\n event.preventDefault();\r\n break;\r\n case Keys.Enter:\r\n this.complete(this.options[this.focusIndex || 0]);\r\n event.preventDefault();\r\n break;\r\n default:\r\n this.openOptions();\r\n }\r\n }\r\n }\r\n\r\n openOptions(): void {\r\n if (!this.disabled) {\r\n const mustContain = normalizeString(this.valueInput.trim());\r\n this.currentOptions = [];\r\n this.currentLabelStarts = [];\r\n this.currentLabelMatches = [];\r\n this.currentLabelEnds = [];\r\n for (const option of this.options) {\r\n const normalizedLabel = normalizeString(option.label);\r\n const position = normalizedLabel.indexOf(mustContain);\r\n if (position >= 0) {\r\n const labelStart = option.label.substring(0, position);\r\n const labelMatch = option.label.substring(\r\n position,\r\n position + mustContain.length\r\n );\r\n const labelEnd = option.label.substring(\r\n position + mustContain.length\r\n );\r\n this.currentOptions.push(option);\r\n this.currentLabelStarts.push(labelStart);\r\n this.currentLabelMatches.push(labelMatch);\r\n this.currentLabelEnds.push(labelEnd);\r\n }\r\n }\r\n this.showOptions = true;\r\n }\r\n }\r\n\r\n closeOptions(): void {\r\n this.showOptions = false;\r\n }\r\n\r\n focusOnOption(index: number | undefined) {\r\n if (!this.disabled) {\r\n this.focusIndex = index;\r\n if (index === undefined) {\r\n return;\r\n }\r\n if (index < 0) {\r\n this.focusIndex = 0;\r\n }\r\n if (index >= this.options.length) {\r\n this.focusIndex = this.options.length - 1;\r\n }\r\n }\r\n }\r\n\r\n onLostFocus(): void {\r\n setTimeout(() => {\r\n this.closeOptions();\r\n }, LOST_FOCUS_TIME_WINDOW_MS);\r\n }\r\n\r\n scrollToOption(index: number) {\r\n const target = this.mainElement.nativeElement.querySelectorAll('li')[index];\r\n if (target) {\r\n target.scrollIntoView({ block: 'center' });\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n if (!this.disabled) {\r\n this.value = undefined;\r\n this.valueInput = '';\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n }\r\n }\r\n\r\n complete(option: Option<unknown>): void {\r\n if (!this.disabled) {\r\n this.value = option;\r\n this.valueInput = option.label;\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n this.valueChange.emit(option.key);\r\n }\r\n }\r\n}\r\n\r\nconst normalizeString = (a: string): string =>\r\n (a || '')\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n","<div\r\n #main\r\n class=\"daga-autocomplete\"\r\n [class]=\"showOptions ? 'daga-showing-options' : ''\"\r\n (blur)=\"closeOptions()\"\r\n>\r\n <div class=\"daga-autocomplete-input\">\r\n <input\r\n [(ngModel)]=\"valueInput\"\r\n [disabled]=\"disabled\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (focus)=\"openOptions()\"\r\n (blur)=\"onLostFocus()\"\r\n />\r\n @if (valueInput !== '') {\r\n <button class=\"daga-clear\" (click)=\"clearInput()\"></button>\r\n }\r\n </div>\r\n <div class=\"daga-autocomplete-options\">\r\n <ul class=\"daga-autocomplete-option-list\">\r\n @if (currentOptions !== undefined ? currentOptions.length === 0 : true) {\r\n <li class=\"daga-autocomplete-option no-options\">(No options)</li>\r\n }\r\n @for (option of currentOptions; track option; let index = $index) {\r\n <li\r\n class=\"daga-autocomplete-option\"\r\n [class]=\"index === focusIndex ? 'daga-focused' : ''\"\r\n (mousemove)=\"focusOnOption(index)\"\r\n (click)=\"complete(option)\"\r\n >\r\n <span>{{ currentLabelStarts[index] }}</span>\r\n <span class=\"daga-match\">{{ currentLabelMatches[index] }}</span>\r\n <span>{{ currentLabelEnds[index] }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Option } from '@metadev/daga';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @private\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-option-list-editor',\r\n templateUrl: './option-list-editor.component.html',\r\n imports: [AutocompleteComponent, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OptionListEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n private _value: unknown[] = [];\r\n @Input()\r\n set value(value: unknown[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n this.labelsOfValue = [];\r\n for (const key of this._value) {\r\n this.labelsOfValue.push(this.getLabelOfValue(key));\r\n }\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n this.updateOptionsNotPresentInValue();\r\n }\r\n get value(): unknown[] {\r\n return this._value;\r\n }\r\n labelsOfValue: string[] = [];\r\n\r\n @Input() options: Option<unknown>[] = [];\r\n\r\n @Input() valueInput?: unknown = undefined;\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() optionsNotPresentInValue: Option<unknown>[] = [];\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown[]>();\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (option.key === value) {\r\n return option.label;\r\n }\r\n }\r\n return `${value}`;\r\n }\r\n\r\n hasValue(value: unknown): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.labelsOfValue.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.updateOptionsNotPresentInValue();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n if (\r\n this.valueInput !== undefined &&\r\n (this.allowRepeats ? true : !this.hasValue(this.valueInput))\r\n ) {\r\n this._value.push(this.valueInput);\r\n this.labelsOfValue.push(this.getLabelOfValue(this.valueInput));\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.updateOptionsNotPresentInValue();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n updateOptionsNotPresentInValue(): void {\r\n if (!this.allowRepeats) {\r\n const optionsNotPresentInValue = [];\r\n for (const option of this.options) {\r\n if (!this.hasValue(option.key)) {\r\n optionsNotPresentInValue.push(option);\r\n }\r\n }\r\n this.optionsNotPresentInValue = optionsNotPresentInValue;\r\n }\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","@for (item of value; track item; let index = $index) {\r\n <div\r\n class=\"daga-value-item-element\"\r\n >\r\n <span class=\"daga-input\">{{ labelsOfValue[index] }}</span>\r\n @if (!disabled) {\r\n <button\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"daga-icon daga-close-icon\"></div>\r\n </button>\r\n }\r\n </div>\r\n}\r\n@if (!disabled) {\r\n <div class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <daga-autocomplete\r\n [disabled]=\"disabled\"\r\n [options]=\"allowRepeats ? options || [] : optionsNotPresentInValue || []\"\r\n [(value)]=\"valueInput\"\r\n />\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n </div>\r\n }\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @private\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-text-list-editor',\r\n templateUrl: './text-list-editor.component.html',\r\n imports: [FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TextListEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n private _value: string[] = [];\r\n @Input()\r\n set value(value: string[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): string[] {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<string[]>();\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n hasValue(value: string): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n editFromValue(item: string, index: number): void {\r\n item = item.trim();\r\n if (this._value.length > index && item !== '') {\r\n this._value.splice(index, 1, item);\r\n this.valueChange.emit(this._value);\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const valueInput = this.valueInput.trim();\r\n if (\r\n valueInput !== '' &&\r\n (this.allowRepeats ? true : !this.hasValue(valueInput))\r\n ) {\r\n this._value.push(valueInput);\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","@for (item of value; track item; let index = $index) {\r\n <div\r\n class=\"daga-value-item-element\"\r\n >\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item\"\r\n (focusout)=\"editFromValue(getValueFromEvent($event), index)\"\r\n />\r\n @if (!disabled) {\r\n <button\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"daga-icon daga-close-icon\"></div>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (!disabled) {\r\n <div class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n @if (valueInput !== '') {\r\n <button\r\n class=\"daga-clear\"\r\n (click)=\"clearInput()\"\r\n ></button>\r\n }\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n </div>\r\n }\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text map type within a property editor.\r\n * @private\r\n * @see Type.TextMap\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-text-map-editor',\r\n templateUrl: './text-map-editor.component.html',\r\n imports: [CommonModule, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TextMapEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n private _value: { [name: string]: string } = {};\r\n\r\n @Input()\r\n set value(value: { [name: string]: string }) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty =\r\n Object.keys(value).length === 0 && Object.keys(this._value).length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): { [name: string]: string } {\r\n return this._value;\r\n }\r\n @Input() keyInput = '';\r\n @Input() valueInput = '';\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<{ [name: string]: string }>();\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n removeFromValue(key: string): void {\r\n delete this._value[key];\r\n this.#cdr.detectChanges();\r\n }\r\n\r\n editKey(oldKey: string, newKey: string): void {\r\n newKey = newKey.trim();\r\n if (oldKey !== newKey && newKey !== '') {\r\n this._value[newKey] = this._value[oldKey];\r\n delete this._value[oldKey];\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n editValue(key: string, value: string): void {\r\n value = value.trim();\r\n if (value !== '') {\r\n this._value[key] = value;\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const keyInput = this.keyInput.trim();\r\n const valueInput = this.valueInput.trim();\r\n if (keyInput !== '' && valueInput !== '') {\r\n this._value[keyInput] = valueInput;\r\n this.valueChange.emit(this._value);\r\n this.clearKeyInput();\r\n this.clearValueInput();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearKeyInput(): void {\r\n this.keyInput = '';\r\n }\r\n\r\n clearValueInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","@for (item of value | keyvalue; track item) {\r\n <div class=\"daga-value-item-element\">\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.key\"\r\n (focusout)=\"editKey(item.key, getValueFromEvent($event))\"\r\n />\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.value\"\r\n (focusout)=\"editValue(item.key, getValueFromEvent($event))\"\r\n />\r\n @if (!disabled) {\r\n <button\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(item.key)\"\r\n >\r\n <div class=\"daga-icon daga-close-icon\"></div>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (!disabled) {\r\n <div class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"keyInput\" />\r\n @if (keyInput !== '') {\r\n <button\r\n class=\"daga-clear\"\r\n (click)=\"clearKeyInput()\"\r\n ></button>\r\n }\r\n </div>\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n @if (valueInput !== '') {\r\n <button\r\n class=\"daga-clear\"\r\n (click)=\"clearValueInput()\"\r\n ></button>\r\n }\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n </div>\r\n }\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n inject,\r\n Input\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n Canvas,\r\n DiagramActions,\r\n Property,\r\n Type,\r\n ValueSet,\r\n equals\r\n} from '@metadev/daga';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\nimport { OptionListEditorComponent } from '../option-list-editor/option-list-editor.component';\r\nimport { getStyleClassName } from '../property-editor.component';\r\nimport { TextListEditorComponent } from '../text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from '../text-map-editor/text-map-editor.component';\r\n\r\n/**\r\n * Editor of a value set within a property editor.\r\n * @private\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-object-editor',\r\n templateUrl: './object-editor.component.html',\r\n imports: [\r\n AutocompleteComponent,\r\n FormsModule,\r\n OptionListEditorComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ObjectEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n #canvasProvider = inject(CanvasProviderService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n get userCanEdit(): boolean {\r\n return (\r\n this.canvas.canUserPerformAction(DiagramActions.UpdateValues) &&\r\n this.valueSet?.rootElement?.['removed'] !== true\r\n );\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n /** How many object-editor elements are parents of this object-editor element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n\r\n setValue(property: Property, value: unknown) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n if (property.editable !== false) {\r\n if (!equals(this.valueSet.getValue(property.name), value)) {\r\n this.valueSet.setValue(property.name, value);\r\n this.canvas.propertyEditorChanges$?.next();\r\n }\r\n }\r\n }\r\n\r\n dateToLocalDatetimeString(\r\n date: string | number | Date | null | undefined\r\n ): string {\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n if (date === null || date === undefined || isNaN(date.valueOf())) {\r\n return '';\r\n }\r\n const offsetDate = new Date(date);\r\n const timezoneOffset = offsetDate.getTimezoneOffset();\r\n offsetDate.setMinutes(offsetDate.getMinutes() - timezoneOffset);\r\n return offsetDate.toISOString().substring(0, 19); // for user friendliness, we trim off the milliseconds\r\n }\r\n\r\n localDatetimeStringToDate(string: string): Date {\r\n // with no timezone specified, the local time is assumed\r\n return new Date(string);\r\n }\r\n}\r\n","@for (property of valueSet?.displayedProperties || []; track property) {\r\n <div\r\n class=\"daga-property\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n >\r\n <p class=\"daga-property-name\">\r\n {{ property.label || property.name }}\r\n </p>\r\n @if (property.type === Type.Text) {\r\n <input\r\n type=\"daga-text\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.TextArea) {\r\n <textarea\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n ></textarea>\r\n }\r\n @if (property.type === Type.Number) {\r\n <input\r\n type=\"number\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Color) {\r\n <input\r\n type=\"text\"\r\n pattern=\"#[0-9a-fA-F]{6}\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Datetime) {\r\n <input\r\n type=\"datetime-local\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"dateToLocalDatetimeString(valueSet?.getValue(property.name))\"\r\n (ngModelChange)=\"setValue(property, localDatetimeStringToDate($event))\"\r\n />\r\n }\r\n @if (property.type === Type.Date) {\r\n <input\r\n type=\"date\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Time) {\r\n <input\r\n type=\"time\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Url) {\r\n <input\r\n type=\"url\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Boolean) {\r\n <div class=\"daga-radio\">\r\n <label\r\n class=\"daga-radio-item daga-radio-start\"\r\n [class]=\"\r\n valueSet?.getValue(property.name) === false ? 'daga-checked' : ''\r\n \"\r\n >\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"false\"\r\n (change)=\"setValue(property, false)\"\r\n />\r\n No\r\n </label>\r\n <label\r\n class=\"daga-radio-item daga-radio-end\"\r\n [class]=\"\r\n valueSet?.getValue(property.name) === true ? 'daga-checked' : ''\r\n \"\r\n >\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"true\"\r\n (change)=\"setValue(property, true)\"\r\n />\r\n Yes\r\n </label>\r\n </div>\r\n }\r\n @if (property.type === Type.Option) {\r\n <div class=\"daga-relatively-positioned\">\r\n <daga-autocomplete\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n />\r\n </div>\r\n }\r\n @if (\r\n property.type === Type.OptionList || property.type === Type.OptionSet\r\n ) {\r\n <daga-option-list-editor\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.OptionList\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-option-list-editor>\r\n }\r\n @if (property.type === Type.TextList || property.type === Type.TextSet) {\r\n <daga-text-list-editor\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.TextList\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-list-editor>\r\n }\r\n @if (property.type === Type.TextMap) {\r\n <daga-text-map-editor\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-map-editor>\r\n }\r\n @if (property.type === Type.Object) {\r\n <div class=\"daga-left-bar\">\r\n <daga-object-editor\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-object-editor>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n Corner,\r\n DiagramConfig,\r\n PropertyEditor,\r\n Side,\r\n ValueSet\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { Subscription } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\nimport { ObjectEditorComponent } from './object-editor/object-editor.component';\r\nimport { PropertySettingsComponent } from './property-settings/property-settings.component';\r\n\r\n/**\r\n * Duration of the highlight property animation in milliseconds.\r\n */\r\nconst HIGHLIGHT_ANIMATION_DURATION_MS = 1000;\r\n\r\n/**\r\n * Editor of the values of a value set.\r\n * @private\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-property-editor',\r\n templateUrl: './property-editor.component.html',\r\n imports: [\r\n CollapseButtonComponent,\r\n ObjectEditorComponent,\r\n PropertySettingsComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropertyEditorComponent\r\n implements PropertyEditor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #cdr = inject(ChangeDetectorRef);\r\n #configService = inject(DagaConfigurationService);\r\n\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n location!: Corner;\r\n direction!: Side;\r\n width!: string;\r\n height?: string;\r\n\r\n title?: string;\r\n _valueSet: ValueSet | undefined;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n this.settings = undefined;\r\n // force value change detection\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n settings?: boolean;\r\n\r\n private sub?: Subscription;\r\n\r\n ngOnInit(): void {\r\n this.sub = this.#configService.config$.subscribe((c) => {\r\n this.init(c);\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setPanelWidth();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n init(config: DiagramConfig): void {\r\n this.location =\r\n config.components?.propertyEditor?.location || Corner.TopRight;\r\n this.direction =\r\n config.components?.propertyEditor?.direction || Side.Bottom;\r\n this.width = config.components?.propertyEditor?.width || '24rem';\r\n this.height = config.components?.propertyEditor?.height;\r\n this.title = undefined;\r\n this.valueSet = undefined;\r\n this.setPanelWidth();\r\n }\r\n\r\n setPanelWidth(): void {\r\n if (this.panel !== undefined) {\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel().style('width', this.width);\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('height', this.height);\r\n }\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel().style('height', this.width);\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('width', this.height);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n highlightProperty(...propertyNames: string[]): void {\r\n let selector = '';\r\n let depth = 0;\r\n for (const propertyName of propertyNames) {\r\n selector += ` .daga-property.${getStyleClassName(propertyName)}.daga-depth-${depth}`;\r\n ++depth;\r\n }\r\n if (this.valueSet) {\r\n d3.select(this.panel.nativeElement)\r\n .select(selector)\r\n .transition()\r\n .duration(HIGHLIGHT_ANIMATION_DURATION_MS)\r\n .ease(d3.easeLinear)\r\n .styleTween('background-color', () => {\r\n const interpolator = d3.interpolate(\r\n 'rgba(255, 0, 0, 0)',\r\n 'rgba(255, 0, 0, 0.4)'\r\n );\r\n return (t: number) => interpolator(t > 0.5 ? 1 - t : t);\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const getStyleClassName = (s: string): string => {\r\n return 'daga-property-name-' + s.replace(/\\s/g, '');\r\n};\r\n","<div\r\n #panel\r\n class=\"daga-panel daga-bottom daga-{{ location }} daga-{{ direction }}\"\r\n>\r\n <daga-collapse-button\r\n #collapse\r\n [disabled]=\"\r\n !valueSet ||\r\n !valueSet.propertySet ||\r\n !valueSet.propertySet.hasProperties()\r\n \"\r\n [direction]=\"direction\"\r\n [collapsableSelector]=\"panel\"\r\n collapsableAdditionalSelector=\".daga-panel-content\"\r\n rule=\"display\"\r\n collapsedValue=\"none\"\r\n visibleValue=\"block\"\r\n />\r\n <div class=\"daga-panel-content\">\r\n @if (\r\n valueSet &&\r\n valueSet.propertySet &&\r\n valueSet.propertySet.hasProperties() &&\r\n !collapse.collapsed\r\n ) {\r\n @if (title) {\r\n <p class=\"daga-title\">\r\n {{ title }}\r\n <button class=\"daga-property-button\" (click)=\"settings = !settings\">\r\n <div\r\n class=\"daga-icon daga-settings-icon\"\r\n [class]=\"\r\n settings === undefined\r\n ? ''\r\n : settings\r\n ? 'daga-unrotate'\r\n : 'daga-rotate'\r\n \"\r\n ></div>\r\n </button>\r\n </p>\r\n }\r\n @if (!settings) {\r\n <daga-object-editor [valueSet]=\"valueSet\" />\r\n }\r\n @if (settings) {\r\n <daga-property-settings [valueSet]=\"valueSet\" />\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n Canvas,\r\n Corner,\r\n DagaExporter,\r\n DagaImporter,\r\n DagaModel,\r\n DiagramConfig,\r\n DiagramEditor,\r\n DiagramEvent,\r\n Side\r\n} from '@metadev/daga';\r\nimport { Observable, skip, Subscription } from 'rxjs';\r\nimport { DiagramButtonsComponent } from '../diagram-buttons/diagram-buttons.component';\r\nimport { ErrorsComponent } from '../errors/errors.component';\r\nimport { PaletteComponent } from '../palette/palette.component';\r\nimport { PropertyEditorComponent } from '../property-editor/property-editor.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * The context of a diagram. Every separate diagram must be contained within its own {@link DiagramComponent} and every {@link DiagramComponent} must contain its own {@link DiagramEditorComponent}.\r\n * This component defines a {@link DagaConfigurationService} and a {@link CanvasProviderService}, which is shared by all the components within and allows accessing the configuration and the canvas of this component's diagram, respectively.\r\n * @public\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram',\r\n templateUrl: './diagram.component.html',\r\n providers: [CanvasProviderService, DagaConfigurationService],\r\n imports: [\r\n DiagramButtonsComponent,\r\n PaletteComponent,\r\n PropertyEditorComponent,\r\n ErrorsComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DiagramComponent\r\n implements DiagramEditor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #configurationService = inject(DagaConfigurationService);\r\n #canvasProvider = inject(CanvasProviderService);\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n @ViewChild('appendTo') appendTo!: ElementRef<HTMLDivElement>;\r\n @ViewChild('diagramButtons') diagramButtons!: DiagramButtonsComponent;\r\n @ViewChild('palette') palette!: PaletteComponent;\r\n @ViewChild('propertyEditor') propertyEditor!: PropertyEditorComponent;\r\n\r\n private importer = new DagaImporter();\r\n private exporter = new DagaExporter();\r\n private _model!: DagaModel;\r\n\r\n /**\r\n * Getter for the configuration of this diagram.\r\n * @public\r\n */\r\n get config(): DiagramConfig {\r\n return this.#configurationService.getConfig();\r\n }\r\n /**\r\n * Setter for the configuration for the diagram.\r\n * @public\r\n */\r\n @Input()\r\n set config(config: DiagramConfig) {\r\n if (this.#configurationService.getConfig() !== config) {\r\n this.#configurationService.init(config);\r\n }\r\n }\r\n /**\r\n * Subject used to track when the diagram configuration has been updated.\r\n * @public\r\n */\r\n get config$(): Observable<DiagramConfig> {\r\n return this.#configurationService.config$;\r\n }\r\n /**\r\n * Getter for the canvas of this diagram.\r\n * @public\r\n */\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n /**\r\n * Subject used to track when the canvas has been updated.\r\n * @public\r\n */\r\n get canvas$(): Observable<Canvas> {\r\n return this.#canvasProvider.canvas$;\r\n }\r\n /**\r\n * Subject used to track when the view has been initialized after updating the canvas.\r\n * @public\r\n */\r\n get viewInitialized$(): Observable<Canvas> {\r\n return this.#canvasProvider.viewInitialized$;\r\n }\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n get model(): DagaModel {\r\n return this._model;\r\n }\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n @Input()\r\n set model(model: DagaModel) {\r\n if (this._model !== model) {\r\n this._model = model;\r\n const canvas = this.canvas;\r\n if (canvas) {\r\n this.importer.import(canvas.model, model);\r\n }\r\n }\r\n }\r\n /**\r\n * Output for changes to the diagram's model.\r\n * @public\r\n */\r\n @Output()\r\n modelChange = new EventEmitter<DagaModel>();\r\n /**\r\n * Output for user events on the diagram.\r\n * @public\r\n */\r\n @Output()\r\n diagramEvent = new EventEmitter<DiagramEvent>();\r\n\r\n private configurationSub?: Subscription;\r\n private canvasSub?: Subscription;\r\n\r\n Corner = Corner;\r\n Side = Side;\r\n\r\n ngOnInit(): void {\r\n this.#canvasProvider.initCanvas(this, this.config);\r\n\r\n this.setUpCanvas(this.canvas);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // wait for setTimeout(0) to force browser to finish calculating the size of parent before initializing the view\r\n setTimeout(() => {\r\n this.#canvasProvider.initCanvasView(this.appendTo.nativeElement);\r\n\r\n // initial import of the model\r\n if (this.model) {\r\n this.importer.import(this.canvas.model, this.model);\r\n }\r\n\r\n this.canvasSub = this.#canvasProvider.canvas$\r\n // we skip the first one as the subscribe() underneath is\r\n // for when the canvas is reloaded, not initially loaded\r\n .pipe(skip(1))\r\n .subscribe((c) => {\r\n // reset model of the old canvas\r\n this.model = this.exporter.export(c.model);\r\n this.setUpCanvas(c);\r\n });\r\n this.configurationSub = this.#configurationService.config$\r\n // we skip the first one as the subscribe() underneath is\r\n // for when the config is reloaded, not initially loaded\r\n .pipe(skip(1))\r\n .subscribe((c) => {\r\n this.#canvasProvider.initCanvas(this, c);\r\n this.#canvasProvider.initCanvasView(this.appendTo.nativeElement);\r\n this.#cdr.detectChanges();\r\n });\r\n }, 0);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.configurationSub?.unsubscribe();\r\n this.canvasSub?.unsubscribe();\r\n }\r\n\r\n private setUpCanvas(canvas: Canvas): void {\r\n canvas.diagramEvent$.subscribe((e) => {\r\n this.diagramEvent.emit(e);\r\n });\r\n canvas.diagramChange$.subscribe(() => {\r\n const exportedModel = this.exporter.export(this.canvas.model);\r\n this._model = exportedModel;\r\n this.modelChange.emit(exportedModel);\r\n });\r\n if (this.model) {\r\n this.importer.import(canvas.model, this.model);\r\n }\r\n }\r\n}\r\n","<div class=\"daga-append-to\" #appendTo></div>\r\n@if (\r\n config.components?.buttons !== undefined &&\r\n config.components?.buttons?.enabled !== false\r\n ) {\r\n <daga-diagram-buttons\r\n #diagramButtons\r\n />\r\n}\r\n@if (\r\n config.components?.palette !== undefined &&\r\n config.components?.palette?.enabled !== false &&\r\n config.components?.palette?.sections &&\r\n (config.components?.palette?.sections?.length || 0) > 0\r\n ) {\r\n <daga-palette\r\n #palette\r\n />\r\n}\r\n@if (\r\n config.components?.propertyEditor !== undefined &&\r\n config.components?.propertyEditor?.enabled !== false\r\n ) {\r\n <daga-property-editor\r\n #propertyEditor\r\n />\r\n}\r\n@if (\r\n config.components?.errors !== undefined &&\r\n config.components?.errors?.enabled !== false\r\n ) {\r\n <daga-errors\r\n />\r\n}\r\n<ng-content />\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { CollapseButtonComponent } from './collapse-button/collapse-button.component';\r\nimport { DiagramButtonsComponent } from './diagram-buttons/diagram-buttons.component';\r\nimport { DiagramComponent } from './diagram/diagram.component';\r\nimport { ErrorsComponent } from './errors/errors.component';\r\nimport { PaletteComponent } from './palette/palette.component';\r\nimport { ObjectEditorComponent } from './property-editor/object-editor/object-editor.component';\r\nimport { PropertyEditorComponent } from './property-editor/property-editor.component';\r\nimport { TextListEditorComponent } from './property-editor/text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from './property-editor/text-map-editor/text-map-editor.component';\r\nimport { CanvasProviderService } from './services/canvas-provider.service';\r\nimport { DagaConfigurationService } from './services/daga-configuration.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CollapseButtonComponent,\r\n DiagramButtonsComponent,\r\n DiagramComponent,\r\n ErrorsComponent,\r\n ObjectEditorComponent,\r\n PaletteComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent,\r\n PropertyEditorComponent,\r\n CommonModule,\r\n FormsModule\r\n ],\r\n exports: [DiagramComponent],\r\n providers: [DagaConfigurationService, CanvasProviderService]\r\n})\r\nexport class DagaModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadev-daga-angular.mjs","sources":["../../../../libs/daga-angular/src/lib/collapse-button/collapse-button.component.ts","../../../../libs/daga-angular/src/lib/collapse-button/collapse-button.component.html","../../../../libs/daga-angular/src/lib/services/canvas-provider.service.ts","../../../../libs/daga-angular/src/lib/services/daga-configuration.service.ts","../../../../libs/daga-angular/src/lib/diagram-buttons/diagram-buttons.component.ts","../../../../libs/daga-angular/src/lib/diagram-buttons/diagram-buttons.component.html","../../../../libs/daga-angular/src/lib/errors/errors.component.ts","../../../../libs/daga-angular/src/lib/errors/errors.component.html","../../../../libs/daga-angular/src/lib/palette/palette.component.ts","../../../../libs/daga-angular/src/lib/palette/palette.component.html","../../../../libs/daga-angular/src/lib/property-editor/property-settings/property-settings.component.ts","../../../../libs/daga-angular/src/lib/property-editor/property-settings/property-settings.component.html","../../../../libs/daga-angular/src/lib/property-editor/autocomplete/autocomplete.component.ts","../../../../libs/daga-angular/src/lib/property-editor/autocomplete/autocomplete.component.html","../../../../libs/daga-angular/src/lib/property-editor/option-list-editor/option-list-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/option-list-editor/option-list-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/text-list-editor/text-list-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/text-list-editor/text-list-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/text-map-editor/text-map-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/text-map-editor/text-map-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/object-editor/object-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/object-editor/object-editor.component.html","../../../../libs/daga-angular/src/lib/property-editor/property-editor.component.ts","../../../../libs/daga-angular/src/lib/property-editor/property-editor.component.html","../../../../libs/daga-angular/src/lib/diagram/diagram.component.ts","../../../../libs/daga-angular/src/lib/diagram/diagram.component.html","../../../../libs/daga-angular/src/lib/daga.module.ts","../../../../libs/daga-angular/src/metadev-daga-angular.ts"],"sourcesContent":["import { Component, ElementRef, Input } from '@angular/core';\r\nimport { Side } from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\n\r\n/**\r\n * Button used to collapse components that implement it.\r\n * @private\r\n */\r\n@Component({\r\n selector: 'daga-collapse-button',\r\n templateUrl: './collapse-button.component.html'\r\n})\r\nexport class CollapseButtonComponent {\r\n @Input()\r\n collapsableSelector!: string | ElementRef | HTMLElement;\r\n @Input()\r\n collapsableAdditionalSelector!: string;\r\n @Input()\r\n collapsed = false;\r\n @Input()\r\n disabled = false;\r\n @Input()\r\n direction = Side.Bottom;\r\n @Input()\r\n rule = 'visibility';\r\n @Input()\r\n collapsedValue = 'collapse';\r\n @Input()\r\n visibleValue = 'visible';\r\n\r\n Side = Side;\r\n\r\n toggleCollapse(): void {\r\n if (!this.disabled) {\r\n this.collapsed = !this.collapsed;\r\n let selection;\r\n if (this.collapsableSelector instanceof ElementRef) {\r\n selection = d3.select(this.collapsableSelector.nativeElement);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n } else if (this.collapsableSelector instanceof HTMLElement) {\r\n selection = d3.select(this.collapsableSelector);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n } else {\r\n selection = d3.select(this.collapsableSelector);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n }\r\n selection.style(\r\n this.rule,\r\n this.collapsed ? this.collapsedValue : this.visibleValue\r\n );\r\n }\r\n }\r\n\r\n getClass(): string {\r\n switch (this.direction) {\r\n case Side.Right:\r\n if (this.disabled) {\r\n return 'daga-horizontal-none';\r\n } else if (this.collapsed) {\r\n return 'daga-horizontal-right';\r\n } else {\r\n return 'daga-horizontal-left';\r\n }\r\n case Side.Bottom:\r\n if (this.disabled) {\r\n return 'daga-vertical-none';\r\n } else if (this.collapsed) {\r\n return 'daga-vertical-down';\r\n } else {\r\n return 'daga-vertical-up';\r\n }\r\n case Side.Left:\r\n if (this.disabled) {\r\n return 'daga-horizontal-none';\r\n } else if (this.collapsed) {\r\n return 'daga-horizontal-left';\r\n } else {\r\n return 'daga-horizontal-right';\r\n }\r\n case Side.Top:\r\n if (this.disabled) {\r\n return 'daga-vertical-none';\r\n } else if (this.collapsed) {\r\n return 'daga-vertical-up';\r\n } else {\r\n return 'daga-vertical-down';\r\n }\r\n }\r\n }\r\n}\r\n","<button\r\n class=\"daga-collapse-button daga-{{ direction }}\"\r\n (click)=\"toggleCollapse()\"\r\n>\r\n <div [class]=\"getClass()\"></div>\r\n</button>\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n Canvas,\r\n DiagramCanvas,\r\n DiagramConfig,\r\n DiagramEditor\r\n} from '@metadev/daga';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n/**\r\n * A provider for the {@link Canvas} associated with a {@link DiagramComponent} context.\r\n * @public\r\n */\r\n@Injectable()\r\nexport class CanvasProviderService {\r\n private _canvas!: Canvas;\r\n\r\n private canvasSubject$ = new ReplaySubject<Canvas>();\r\n\r\n /**\r\n * Subject used to track when the canvas has been updated.\r\n * @public\r\n */\r\n public canvas$ = this.canvasSubject$.asObservable();\r\n\r\n private viewInitializedSubject$ = new ReplaySubject<Canvas>();\r\n\r\n /**\r\n * Subject used to track when the view of the canvas has been updated after updating the canvas.\r\n * @public\r\n */\r\n public viewInitialized$ = this.viewInitializedSubject$.asObservable();\r\n\r\n /**\r\n * Initialize the diagram canvas object of this context using the given diagram configuration.\r\n * @private\r\n * @param parentComponent A diagram editor.\r\n * @param config A diagram configuration.\r\n */\r\n initCanvas(parentComponent: DiagramEditor, config: DiagramConfig) {\r\n this._canvas = new DiagramCanvas(parentComponent, config);\r\n this.canvasSubject$.next(this._canvas);\r\n }\r\n\r\n /**\r\n * Attach the canvas of this context to an HTML element to render it there.\r\n * @private\r\n * @param appendTo An HTML element.\r\n */\r\n initCanvasView(appendTo: HTMLElement) {\r\n this._canvas.initView(appendTo);\r\n this.viewInitializedSubject$.next(this._canvas);\r\n }\r\n\r\n /**\r\n * Get the current canvas of this context.\r\n * @public\r\n * @returns A canvas.\r\n */\r\n getCanvas(): Canvas {\r\n return this._canvas;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DiagramConfig } from '@metadev/daga';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n/**\r\n * A provider for the {@link DiagramConfig} associated with a {@link DiagramComponent} context.\r\n * @public\r\n */\r\n@Injectable()\r\nexport class DagaConfigurationService {\r\n private _config!: DiagramConfig;\r\n\r\n private configSubject$ = new ReplaySubject<DiagramConfig>();\r\n\r\n /**\r\n * Subject used to track when the diagram configuration has been updated.\r\n * @public\r\n */\r\n public config$ = this.configSubject$.asObservable();\r\n\r\n /**\r\n * Set the diagram configuration of this context.\r\n * @private\r\n * @param config A diagram configuration.\r\n */\r\n init(config: DiagramConfig) {\r\n this._config = config;\r\n this.configSubject$.next(config);\r\n }\r\n\r\n /**\r\n * Get the current diagram configuration of this context.\r\n * @public\r\n * @returns A diagram configuration.\r\n */\r\n getConfig(): DiagramConfig {\r\n return this._config;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n ApplyLayoutAction,\r\n Canvas,\r\n Corner,\r\n DiagramActions,\r\n DiagramButtons,\r\n DiagramConfig,\r\n getLocationsOfNodes,\r\n layouts,\r\n Side\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { Subscription } from 'rxjs';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * Buttons used to trigger diagram functionalities by the user.\r\n * @private\r\n */\r\n@Component({\r\n selector: 'daga-diagram-buttons',\r\n templateUrl: './diagram-buttons.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DiagramButtonsComponent\r\n implements DiagramButtons, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #canvasProvider = inject(CanvasProviderService);\r\n #configService = inject(DagaConfigurationService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('collapsableButtons')\r\n collapsableButtons!: ElementRef<HTMLDivElement>;\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n enableAction = true;\r\n @Input()\r\n enableFilter = false;\r\n @Input()\r\n enableLayout = false;\r\n @Input()\r\n enableSelection = true;\r\n @Input()\r\n enableZoom = true;\r\n\r\n filterOn = false;\r\n collapsed = true;\r\n animationOngoing = false;\r\n private sizeAttribute!: string;\r\n private transformFunction!: string;\r\n private transformOrigin!: string;\r\n private marginSide!: string;\r\n private collapsableButtonsSize!: string;\r\n\r\n private sub?: Subscription;\r\n\r\n DiagramActions = DiagramActions;\r\n\r\n ngOnInit() {\r\n this.sub = this.#configService.config$.subscribe((c) => {\r\n this.init(c);\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.recalculateSizeOfButtons();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n init(config: DiagramConfig) {\r\n this.filterOn = false;\r\n this.collapsed = true;\r\n this.animationOngoing = false;\r\n this.location = config.components?.buttons?.location || Corner.BottomRight;\r\n this.direction = config.components?.buttons?.direction || Side.Top;\r\n this.enableAction = config.components?.buttons?.enableAction !== false;\r\n this.enableFilter = config.components?.buttons?.enableFilter === true;\r\n this.enableLayout = config.components?.buttons?.enableLayout === true;\r\n this.enableSelection =\r\n config.components?.buttons?.enableSelection !== false;\r\n this.enableZoom = config.components?.buttons?.enableZoom !== false;\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'top';\r\n this.marginSide = 'bottom';\r\n break;\r\n case Side.Top:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'bottom';\r\n this.marginSide = 'top';\r\n break;\r\n case Side.Left:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'right';\r\n this.marginSide = 'left';\r\n break;\r\n case Side.Right:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'left';\r\n this.marginSide = 'right';\r\n break;\r\n }\r\n this.recalculateSizeOfButtons();\r\n }\r\n\r\n recalculateSizeOfButtons() {\r\n if (this.collapsableButtons) {\r\n const numberOfCollapsableButtons =\r\n (this.enableZoom &&\r\n this.canvas.canUserPerformAction(DiagramActions.Zoom)\r\n ? 1\r\n : 0) +\r\n (this.enableAction ? 2 : 0) +\r\n (this.enableSelection ? 5 : 0) +\r\n (this.enableLayout ? 1 : 0) +\r\n (this.enableFilter ? 1 : 0);\r\n this.collapsableButtonsSize = `${4 * numberOfCollapsableButtons}rem`;\r\n d3.select(this.collapsableButtons.nativeElement)\r\n .style(`margin-${this.marginSide}`, '-1rem')\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`)\r\n .style('transform-origin', this.transformOrigin);\r\n }\r\n }\r\n\r\n // Collapse functions\r\n\r\n async toggleCollapse() {\r\n if (!this.animationOngoing) {\r\n const duration = 500;\r\n const collapsableButtons = d3.select(\r\n this.collapsableButtons.nativeElement\r\n );\r\n if (this.collapsed) {\r\n this.collapsed = false;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, this.collapsableButtonsSize)\r\n .style('transform', `${this.transformFunction}(1)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n } else {\r\n this.collapsed = true;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n }\r\n }\r\n }\r\n\r\n // Button functions\r\n\r\n zoomIn(): void {\r\n this.canvas.zoomBy(this.canvas.zoomFactor);\r\n }\r\n\r\n zoomOut(): void {\r\n this.canvas.zoomBy(1 / this.canvas.zoomFactor);\r\n }\r\n\r\n center(): void {\r\n this.canvas.center();\r\n }\r\n\r\n layout(): void {\r\n if (this.canvas.layoutFormat && this.canvas.layoutFormat in layouts) {\r\n const from = getLocationsOfNodes(this.canvas.model);\r\n layouts[this.canvas.layoutFormat].apply(this.canvas.model);\r\n const to = getLocationsOfNodes(this.canvas.model);\r\n const action = new ApplyLayoutAction(this.canvas, from, to);\r\n this.canvas.actionStack.add(action);\r\n }\r\n }\r\n\r\n filter(): void {\r\n this.filterOn = !this.filterOn;\r\n const priorityThresholds = this.canvas.getPriorityThresholdOptions();\r\n if (priorityThresholds && priorityThresholds.length >= 2) {\r\n this.canvas.setPriorityThreshold(\r\n priorityThresholds[this.filterOn ? 1 : 0]\r\n );\r\n }\r\n }\r\n\r\n undo(): void {\r\n this.canvas.actionStack.undo();\r\n }\r\n\r\n redo(): void {\r\n this.canvas.actionStack.redo();\r\n }\r\n\r\n copySelection(): void {\r\n this.canvas.userSelection.copyToClipboard();\r\n }\r\n\r\n cutSelection(): void {\r\n this.canvas.userSelection.cutToClipboard();\r\n }\r\n\r\n pasteSelection(): void {\r\n this.canvas.userSelection.pasteFromClipboard();\r\n }\r\n\r\n deleteSelection(): void {\r\n this.canvas.userSelection.removeFromModel();\r\n }\r\n\r\n startMultipleSelection(): void {\r\n this.canvas.multipleSelectionOn = true;\r\n }\r\n}\r\n","<div class=\"daga-diagram-buttons daga-{{ location }} daga-{{ direction }}\">\r\n @if (enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)) {\r\n <button\r\n class=\"daga-zoom-in\"\r\n (click)=\"zoomIn()\"\r\n >\r\n <span class=\"daga-tooltip\">Zoom in</span>\r\n </button>\r\n }\r\n @if (enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)) {\r\n <button\r\n class=\"daga-zoom-out\"\r\n (click)=\"zoomOut()\"\r\n >\r\n <span class=\"daga-tooltip\">Zoom out</span>\r\n </button>\r\n }\r\n <div #collapsableButtons class=\"daga-collapsable-buttons daga-collapsed\">\r\n @if (enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)) {\r\n <button\r\n class=\"daga-center\"\r\n (click)=\"center()\"\r\n >\r\n <span class=\"daga-tooltip\">Fit diagram to screen</span>\r\n </button>\r\n }\r\n @if (enableAction) {\r\n <button class=\"daga-undo\" (click)=\"undo()\">\r\n <span class=\"daga-tooltip\">Undo</span>\r\n </button>\r\n }\r\n @if (enableAction) {\r\n <button class=\"daga-redo\" (click)=\"redo()\">\r\n <span class=\"daga-tooltip\">Redo</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button class=\"daga-copy\" (click)=\"copySelection()\">\r\n <span class=\"daga-tooltip\">Copy</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button class=\"daga-cut\" (click)=\"cutSelection()\">\r\n <span class=\"daga-tooltip\">Cut</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button\r\n class=\"daga-multiple-selection\"\r\n [class]=\"canvas.multipleSelectionOn ? 'daga-on' : 'daga-off'\"\r\n (click)=\"startMultipleSelection()\"\r\n >\r\n <span class=\"daga-tooltip\">Multiple selection</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button\r\n class=\"daga-paste\"\r\n (click)=\"pasteSelection()\"\r\n >\r\n <span class=\"daga-tooltip\">Paste</span>\r\n </button>\r\n }\r\n @if (enableSelection) {\r\n <button\r\n class=\"daga-delete\"\r\n (click)=\"deleteSelection()\"\r\n >\r\n <span class=\"daga-tooltip\">Delete</span>\r\n </button>\r\n }\r\n @if (enableLayout) {\r\n <button class=\"daga-layout\" (click)=\"layout()\">\r\n <span class=\"daga-tooltip\">Apply layout</span>\r\n </button>\r\n }\r\n @if (enableFilter) {\r\n <button\r\n class=\"daga-filter\"\r\n [class]=\"filterOn ? 'daga-on' : 'daga-off'\"\r\n (click)=\"filter()\"\r\n >\r\n <span class=\"daga-tooltip\">Apply filter</span>\r\n </button>\r\n }\r\n </div>\r\n <button class=\"daga-more-options\" (click)=\"toggleCollapse()\">\r\n @if (!collapsed) {\r\n <span class=\"daga-tooltip\">Less options</span>\r\n }\r\n @if (collapsed) {\r\n <span class=\"daga-tooltip\">More options</span>\r\n }\r\n </button>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n OnDestroy,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { Canvas, DiagramError, Side } from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { map, merge, Subscription } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\n\r\n/**\r\n * Displays the errors detected by a diagram's validators.\r\n * @private\r\n * @see DiagramValidator\r\n */\r\n@Component({\r\n selector: 'daga-errors',\r\n templateUrl: './errors.component.html',\r\n imports: [CollapseButtonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ErrorsComponent implements AfterViewInit, OnDestroy {\r\n #canvasProvider = inject(CanvasProviderService);\r\n #cdf = inject(ChangeDetectorRef);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('errors') errorsContainer!: ElementRef<HTMLDivElement>;\r\n\r\n errors: DiagramError[] = [];\r\n\r\n private canvasSub?: Subscription;\r\n private validationSub?: Subscription;\r\n\r\n Side = Side;\r\n\r\n ngAfterViewInit(): void {\r\n this.canvasSub = this.#canvasProvider.canvas$.subscribe((c) => {\r\n this.updateCanvas(c);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.canvasSub?.unsubscribe();\r\n this.validationSub?.unsubscribe();\r\n }\r\n\r\n selectPanel(): d3.Selection<d3.BaseType, unknown, null, unknown> {\r\n return d3\r\n .select(this.errorsContainer.nativeElement)\r\n .select('.daga-error-panel');\r\n }\r\n\r\n private updateCanvas(canvas: Canvas) {\r\n this.validationSub?.unsubscribe();\r\n this.validationSub = merge(canvas.validatorChange$, canvas.diagramChange$)\r\n .pipe(map(() => this.validate()))\r\n .subscribe();\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n for (const validator of this.canvas.validators) {\r\n const newErrors = validator.validate(this.canvas.model);\r\n this.errors = [...this.errors, ...newErrors];\r\n }\r\n // need to force detection changes here for some reason...\r\n this.#cdf.detectChanges();\r\n }\r\n\r\n showError(error: DiagramError): void {\r\n if (\r\n error.elementId &&\r\n (error.propertyNames === undefined || error.propertyNames.length === 0)\r\n ) {\r\n const element =\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId);\r\n if (element) {\r\n this.canvas.userHighlight.add(element);\r\n }\r\n } else if (\r\n error.elementId &&\r\n error.propertyNames !== undefined &&\r\n error.propertyNames.length > 0\r\n ) {\r\n this.canvas.userSelection.openInPropertyEditor(\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId)\r\n );\r\n const element =\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId);\r\n if (element) {\r\n this.canvas.userHighlight.add(element);\r\n }\r\n this.canvas.parentComponent?.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n } else if (\r\n !error.elementId &&\r\n error.propertyNames !== undefined &&\r\n error.propertyNames.length > 0\r\n ) {\r\n this.canvas.userSelection.openInPropertyEditor();\r\n this.canvas.parentComponent?.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n }\r\n }\r\n}\r\n","<div #errorsContainer class=\"daga-errors\">\r\n @if (errors.length === 0) {\r\n <div\r\n class=\"daga-errors-summary daga-no-errors daga-prevent-user-select\"\r\n >\r\n <span>No errors found</span>\r\n </div>\r\n }\r\n @if (errors.length > 0) {\r\n <div\r\n class=\"daga-errors-summary daga-with-errors daga-prevent-user-select\"\r\n >\r\n <span>{{ errors.length }} errors found</span>\r\n <div class=\"daga-collapse-button-container\">\r\n <daga-collapse-button\r\n [collapsableSelector]=\"errorsContainer\"\r\n [collapsableAdditionalSelector]=\"'.daga-error-panel'\"\r\n [direction]=\"Side.Top\"\r\n [rule]=\"'display'\"\r\n [collapsedValue]=\"'none'\"\r\n [visibleValue]=\"'block'\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n @if (errors.length > 0) {\r\n <div class=\"daga-error-panel\">\r\n <ol>\r\n @for (error of errors; track error; let i = $index) {\r\n <li\r\n (click)=\"showError(error)\"\r\n [innerHTML]=\"error.message\"\r\n ></li>\r\n }\r\n </ol>\r\n </div>\r\n }\r\n </div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n AddNodeAction,\r\n Canvas,\r\n ClosedShape,\r\n ConnectionTemplateConfig,\r\n Corner,\r\n CursorStyle,\r\n DIAGRAM_FIELD_DEFAULTS,\r\n DiagramActions,\r\n DiagramConfig,\r\n DiagramConnectionType,\r\n DiagramNodeType,\r\n DragEvents,\r\n Events,\r\n filterByOnlyDescendants,\r\n generalClosedPath,\r\n getLeftMargin,\r\n getTopMargin,\r\n NodeTemplateConfig,\r\n Palette,\r\n PaletteSectionConfig,\r\n Point,\r\n setCursorStyle,\r\n Side\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { Subscription } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * Distance in pixels by which labels must be shifted in order to be centered properly.\r\n */\r\nconst LABEL_VERTICAL_SHIFT_PX = 6;\r\n\r\n/**\r\n * Palette that the user can drag and drop nodes from.\r\n * @private\r\n * @see DiagramConfig\r\n * @see DiagramNode\r\n */\r\n@Component({\r\n selector: 'daga-palette',\r\n templateUrl: './palette.component.html',\r\n imports: [CollapseButtonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PaletteComponent\r\n implements Palette, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #canvasProvider = inject(CanvasProviderService);\r\n #configService = inject(DagaConfigurationService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n @Input()\r\n palettes!: PaletteSectionConfig[];\r\n @Input()\r\n currentPalette!: PaletteSectionConfig;\r\n @Input()\r\n currentCategory = '';\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n width!: string;\r\n @Input()\r\n height?: string;\r\n @Input()\r\n gap!: string;\r\n\r\n private priorityThreshold?: number;\r\n\r\n private sub?: Subscription;\r\n\r\n ngOnInit(): void {\r\n /*\r\n reload using the canvas observable instead of the config one\r\n because we're getting the type info from the model, not the configuration\r\n */\r\n this.sub = this.#canvasProvider.canvas$.subscribe(() => {\r\n this.init(this.#configService.getConfig());\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.refreshPalette();\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel()\r\n .style('width', this.width)\r\n .select('.daga-palette-view')\r\n .style('flex-direction', 'row');\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('height', this.height);\r\n }\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel()\r\n .style('height', this.width)\r\n .select('.daga-palette-view')\r\n .style('flex-direction', 'column');\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('width', this.height);\r\n }\r\n break;\r\n }\r\n this.selectPanel()\r\n .select('.daga-palette-view')\r\n .style('flex-wrap', 'wrap')\r\n .style('justify-content', 'center')\r\n .style('gap', this.gap);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n init(config: DiagramConfig): void {\r\n this.location = config.components?.palette?.location || Corner.TopLeft;\r\n this.direction = config.components?.palette?.direction || Side.Bottom;\r\n this.width = config.components?.palette?.width || '12rem';\r\n this.height = config.components?.palette?.height;\r\n this.gap = config.components?.palette?.gap || '1rem';\r\n this.palettes = config.components?.palette?.sections || [];\r\n this.currentPalette = this.palettes[0];\r\n this.refreshPalette();\r\n }\r\n\r\n refreshPalette(): void {\r\n this.switchPalette(this.currentPalette);\r\n }\r\n\r\n switchPalette(palette: PaletteSectionConfig): void {\r\n this.currentPalette = palette;\r\n\r\n if (this.panel !== undefined) {\r\n this.selectPalette().selectAll('*').remove();\r\n this.priorityThreshold = this.canvas.getPriorityThreshold();\r\n\r\n if (palette.categories) {\r\n this.appendCategories(palette.categories);\r\n }\r\n if (palette.templates) {\r\n for (const template of palette.templates) {\r\n this.appendTemplate(template);\r\n }\r\n }\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n selectPalette(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return this.selectPanel().select('.daga-palette-view');\r\n }\r\n\r\n private appendCategories(categories: {\r\n [key: string]: (NodeTemplateConfig | ConnectionTemplateConfig)[];\r\n }): void {\r\n const thisComponent = this.selectPalette()\r\n .append('select')\r\n .style('width', '100%')\r\n .style('height', '2rem')\r\n .style('padding', '0.5rem')\r\n .style('border-radius', '0.25rem')\r\n .style('background-color', '#f7f8fc')\r\n .style('border', `1px solid #e6e6e6`);\r\n thisComponent.append('option').attr('value', '').text('(None selected)');\r\n for (const categoryKey in categories) {\r\n thisComponent\r\n .append('option')\r\n .attr('value', categoryKey)\r\n .text(categoryKey);\r\n }\r\n thisComponent.on(Events.Change, () => {\r\n if (this.currentCategory) {\r\n this.selectPalette()\r\n .selectAll(`.daga-template-container.daga-in-category`)\r\n .remove();\r\n }\r\n\r\n const selectedKey = thisComponent.property('value');\r\n this.currentCategory = selectedKey;\r\n const templatesInCategory = categories[selectedKey] || [];\r\n for (const template of templatesInCategory) {\r\n this.appendTemplate(template, 'daga-in-category');\r\n }\r\n });\r\n if (this.currentCategory) {\r\n // if we had a category already selected, re-select it\r\n thisComponent.property('value', this.currentCategory);\r\n thisComponent.dispatch(Events.Change);\r\n }\r\n }\r\n\r\n private appendTemplate(\r\n template: NodeTemplateConfig | ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (template.templateType === 'node') {\r\n const nodeType = this.canvas.model.nodes.types.get(template.type);\r\n if (nodeType) {\r\n this.appendNodeTemplate(nodeType, template, classes);\r\n } else {\r\n console.error(`Could not find a node type called '${template.type}'`);\r\n }\r\n } else if (template.templateType === 'connection') {\r\n {\r\n const connectionType = this.canvas.model.connections.types.get(\r\n template.type\r\n );\r\n if (connectionType) {\r\n this.appendConnectionTemplate(connectionType, template, classes);\r\n } else {\r\n console.error(\r\n `Could not find a connection type called '${template.type}'`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private appendNodeTemplate(\r\n type: DiagramNodeType,\r\n templateConfig: NodeTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (\r\n this.priorityThreshold !== undefined &&\r\n type.priority < this.priorityThreshold\r\n ) {\r\n return;\r\n }\r\n const borderThickness =\r\n type.defaultLook.lookType === 'shaped-look'\r\n ? type.defaultLook.borderThickness || 1\r\n : 0;\r\n const templateHeight = type.defaultHeight + borderThickness;\r\n const templateWidth = type.defaultWidth + borderThickness;\r\n const stretchedTemplateHeight = templateConfig.height || templateHeight;\r\n const stretchedTemplateWidth = templateConfig.width || templateWidth;\r\n\r\n let thisComponentClone!: d3.Selection<Element, unknown, null, undefined>;\r\n\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `daga-template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${stretchedTemplateWidth}px`)\r\n .style('height', `${stretchedTemplateHeight}px`)\r\n .on(Events.MouseEnter, () => {\r\n setCursorStyle(CursorStyle.Grab);\r\n })\r\n .on(Events.MouseLeave, () => {\r\n setCursorStyle();\r\n })\r\n .call(\r\n d3\r\n .drag<HTMLDivElement, unknown, HTMLElement>()\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToRoot(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponentClone\r\n .style(\r\n 'left',\r\n `${pointerCoords[0] - stretchedTemplateWidth / 2}px`\r\n )\r\n .style(\r\n 'top',\r\n `${pointerCoords[1] - stretchedTemplateHeight / 2}px`\r\n );\r\n }\r\n })\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n setCursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToRoot(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n const thisComponentNodeCloned = thisComponent\r\n .node()\r\n ?.cloneNode(true);\r\n (this.canvas.selectRoot().node() as HTMLDivElement).appendChild(\r\n thisComponentNodeCloned as Node\r\n );\r\n thisComponentClone = d3.select(\r\n thisComponentNodeCloned as Element\r\n );\r\n thisComponentClone\r\n .style('position', 'absolute')\r\n .style(\r\n 'left',\r\n `${pointerCoords[0] - stretchedTemplateWidth / 2}px`\r\n )\r\n .style(\r\n 'top',\r\n `${pointerCoords[1] - stretchedTemplateHeight / 2}px`\r\n )\r\n .style('z-index', 1);\r\n // when trying to place a unique node in a diagram that already has a node of that type, set cursor style to not allowed\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n setCursorStyle(CursorStyle.NotAllowed);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n // take node back to its original position\r\n setCursorStyle(CursorStyle.Auto);\r\n thisComponentClone?.remove();\r\n // try to place node\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n // can't place, it's unique and that node is already in the model\r\n return;\r\n }\r\n const pointerCoordsRelativeToScreen =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoordsRelativeToScreen.length < 2 ||\r\n isNaN(pointerCoordsRelativeToScreen[0]) ||\r\n isNaN(pointerCoordsRelativeToScreen[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n\r\n const element = document.elementFromPoint(\r\n pointerCoordsRelativeToScreen[0],\r\n pointerCoordsRelativeToScreen[1]\r\n );\r\n if (\r\n element &&\r\n !this.canvas.selectCanvasView().node()?.contains(element)\r\n ) {\r\n // can't place, node hasn't been dropped on the canvas\r\n return;\r\n }\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToCanvas(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n let newNodeCoords: Point = [\r\n pointerCoords[0] - type.defaultWidth / 2,\r\n pointerCoords[1] - type.defaultHeight / 2\r\n ];\r\n if (this.canvas.snapToGrid) {\r\n newNodeCoords = this.canvas.getClosestGridPoint([\r\n newNodeCoords[0] - type.snapToGridOffset[0],\r\n newNodeCoords[1] - type.snapToGridOffset[1]\r\n ]);\r\n newNodeCoords[0] += type.snapToGridOffset[0];\r\n newNodeCoords[1] += type.snapToGridOffset[1];\r\n }\r\n\r\n // check whether we dropped this node on a potential parent\r\n const nodesAtLocation = this.canvas.model.nodes.getAtCoordinates(\r\n pointerCoords[0],\r\n pointerCoords[1]\r\n );\r\n // filter by which nodes can have this type as a child\r\n const nodesAtLocationWhichCanHaveNodeAsAChild =\r\n nodesAtLocation.filter((n) =>\r\n n.type.childrenTypes.includes(type.id)\r\n );\r\n // filter by which nodes don't have descendants in this collection\r\n const filteredNodesAtLocation = filterByOnlyDescendants(\r\n nodesAtLocationWhichCanHaveNodeAsAChild\r\n );\r\n const droppedOn =\r\n filteredNodesAtLocation[filteredNodesAtLocation.length - 1];\r\n\r\n if (!type.canBeParentless && droppedOn === undefined) {\r\n // can't place, node must have a parent and no suitable parent has been found\r\n return;\r\n }\r\n\r\n const ancestor = droppedOn?.getLastAncestor();\r\n\r\n const addNodeAction = new AddNodeAction(\r\n this.canvas,\r\n type,\r\n newNodeCoords,\r\n droppedOn?.id,\r\n ancestor?.id,\r\n ancestor?.getGeometry(),\r\n undefined,\r\n templateConfig.label,\r\n templateConfig.values\r\n );\r\n\r\n addNodeAction.do();\r\n addNodeAction.toAncestorGeometry = ancestor?.getGeometry();\r\n\r\n this.canvas.actionStack.add(addNodeAction);\r\n // reset cursor\r\n setCursorStyle();\r\n }\r\n })\r\n )\r\n .append('svg')\r\n .attr('class', `palette-node ${type.id}`)\r\n .attr('viewBox', `0 0 ${templateWidth} ${templateHeight}`)\r\n .attr('preserveAspectRatio', 'none')\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', `${stretchedTemplateWidth}px`)\r\n .style('height', `${stretchedTemplateHeight}px`);\r\n const nodeLook = templateConfig.look || type.defaultLook;\r\n\r\n switch (nodeLook.lookType) {\r\n case 'shaped-look':\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n nodeLook.shape || ClosedShape.Rectangle,\r\n (nodeLook.borderThickness || 1) / 2,\r\n (nodeLook.borderThickness || 1) / 2,\r\n type.defaultWidth,\r\n type.defaultHeight\r\n )\r\n )\r\n .attr('fill', nodeLook.fillColor || '#FFFFFF')\r\n .attr('stroke', nodeLook.borderColor || '#000000')\r\n .attr('stroke-width', `${nodeLook.borderThickness}px`);\r\n break;\r\n case 'image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.defaultWidth)\r\n .attr('height', type.defaultHeight)\r\n .attr('href', nodeLook.backgroundImage)\r\n .attr('preserveAspectRatio', 'none');\r\n break;\r\n case 'stretchable-image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', nodeLook.leftMargin)\r\n .attr('height', nodeLook.topMargin)\r\n .attr('href', nodeLook.backgroundImageTopLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', nodeLook.leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - nodeLook.rightMargin - nodeLook.leftMargin\r\n )\r\n .attr('height', nodeLook.topMargin)\r\n .attr('href', nodeLook.backgroundImageTop)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - nodeLook.rightMargin)\r\n .attr('y', 0)\r\n .attr('width', nodeLook.rightMargin)\r\n .attr('height', nodeLook.topMargin)\r\n .attr('href', nodeLook.backgroundImageTopRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', nodeLook.topMargin)\r\n .attr('width', nodeLook.leftMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - nodeLook.bottomMargin - nodeLook.topMargin\r\n )\r\n .attr('href', nodeLook.backgroundImageLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', nodeLook.leftMargin)\r\n .attr('y', nodeLook.topMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - nodeLook.rightMargin - nodeLook.leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n type.defaultHeight - nodeLook.bottomMargin - nodeLook.topMargin\r\n )\r\n .attr('href', nodeLook.backgroundImageCenter)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - nodeLook.rightMargin)\r\n .attr('y', nodeLook.topMargin)\r\n .attr('width', nodeLook.rightMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - nodeLook.bottomMargin - nodeLook.topMargin\r\n )\r\n .attr('href', nodeLook.backgroundImageRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.defaultHeight - nodeLook.bottomMargin)\r\n .attr('width', nodeLook.leftMargin)\r\n .attr('height', nodeLook.bottomMargin)\r\n .attr('href', nodeLook.backgroundImageBottomLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', nodeLook.leftMargin)\r\n .attr('y', type.defaultHeight - nodeLook.bottomMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - nodeLook.rightMargin - nodeLook.leftMargin\r\n )\r\n .attr('height', nodeLook.bottomMargin)\r\n .attr('href', nodeLook.backgroundImageBottom)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - nodeLook.rightMargin)\r\n .attr('y', type.defaultHeight - nodeLook.bottomMargin)\r\n .attr('width', nodeLook.rightMargin)\r\n .attr('height', nodeLook.bottomMargin)\r\n .attr('href', nodeLook.backgroundImageBottomRight)\r\n .attr('preserveAspectRatio', 'none');\r\n }\r\n\r\n if (templateConfig.look === undefined) {\r\n if (type.decorators) {\r\n for (const decoratorConfig of type.decorators) {\r\n thisComponent\r\n .append('foreignObject')\r\n .attr('width', `${decoratorConfig.width}px`)\r\n .attr('height', `${decoratorConfig.height}px`)\r\n .attr(\r\n 'transform',\r\n `translate(${decoratorConfig.coords[0]},${decoratorConfig.coords[1]})`\r\n )\r\n .html(decoratorConfig.html);\r\n }\r\n }\r\n\r\n if (templateConfig.label) {\r\n const labelConfig = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...type.label,\r\n ...templateConfig.labelLook\r\n };\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${(getLeftMargin(labelConfig) + type.defaultWidth + borderThickness / 2) / 2},${(getTopMargin(labelConfig) + type.defaultHeight + borderThickness / 2) / 2})`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', `${labelConfig.fontSize}px`)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfig.fontFamily)\r\n .attr('font-weight', 400)\r\n .attr('fill', labelConfig.color)\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n }\r\n\r\n private appendConnectionTemplate(\r\n type: DiagramConnectionType,\r\n templateConfig: ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `daga-template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${templateConfig.width}px`)\r\n .style('height', `${templateConfig.height}px`)\r\n .style('cursor', 'pointer')\r\n .append('svg')\r\n .attr('class', `palette-button ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .on('click', () => {\r\n this.canvas.connectionType = type;\r\n });\r\n\r\n if (this.canvas.connectionType !== type) {\r\n // the connection type of this template is not the currently selected one\r\n if (templateConfig.icon !== '') {\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.icon);\r\n }\r\n } else {\r\n // the connection type of this template is the currently selected one\r\n if (templateConfig.selectedIcon !== '') {\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.selectedIcon);\r\n } else if (templateConfig.icon !== '') {\r\n // if there's no selectedIcon, use the regular icon instead\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.icon);\r\n }\r\n }\r\n\r\n if (templateConfig.label !== '') {\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${templateConfig.width / 2},${\r\n templateConfig.height / 2 + LABEL_VERTICAL_SHIFT_PX\r\n })`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', '20px')\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\r\n .attr('font-weight', 400)\r\n .attr('fill', '#000000')\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n}\r\n","<div #panel class=\"daga-panel daga-{{ location }} daga-{{ direction }}\">\r\n <daga-collapse-button\r\n #collapseButton\r\n [direction]=\"direction\"\r\n [collapsableSelector]=\"panel\"\r\n collapsableAdditionalSelector=\".daga-panel-content\"\r\n rule=\"display\"\r\n collapsedValue=\"none\"\r\n visibleValue=\"block\"\r\n />\r\n <div class=\"daga-panel-content\">\r\n @if (palettes.length > 1) {\r\n <div class=\"daga-panel-tabs\">\r\n @for (palette of palettes; track palette) {\r\n <div\r\n class=\"daga-panel-tab\"\r\n [class]=\"palette === currentPalette ? 'daga-current-tab' : ''\"\r\n (click)=\"switchPalette(palette)\"\r\n >\r\n {{ palette.name }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"daga-palette-view\"></div>\r\n </div>\r\n </div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n Canvas,\r\n CursorStyle,\r\n DragEvents,\r\n Point,\r\n Property,\r\n Type,\r\n ValueSet,\r\n isObject,\r\n setCursorStyle\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { getStyleClassName } from '../property-editor.component';\r\n\r\n/**\r\n * Editor of the settings of a property editor, such as what properties are displayed and hidden and in what order.\r\n * @private\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-property-settings',\r\n templateUrl: './property-settings.component.html',\r\n imports: [FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropertySettingsComponent implements AfterViewInit {\r\n #element = inject(ElementRef);\r\n #cdr = inject(ChangeDetectorRef);\r\n #canvasProvider = inject(CanvasProviderService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n /** How many property-settings elements are parents of this property-settings element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n asString = asString;\r\n\r\n ngAfterViewInit(): void {\r\n this.addListeners();\r\n }\r\n\r\n private addListeners() {\r\n for (const property of this.valueSet?.displayedProperties || []) {\r\n let propertyElementWidth = 0;\r\n let propertyElementHeight = 0;\r\n let closestDropbarIndex = 0;\r\n const propertyElement = d3\r\n .select(this.#element.nativeElement)\r\n .select<HTMLDivElement>(\r\n `.daga-property.${getStyleClassName(property.name)}.daga-depth-${this.depth}`\r\n );\r\n propertyElement.select<HTMLButtonElement>('button.daga-move-button').call(\r\n d3\r\n .drag<HTMLButtonElement, unknown, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n setCursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n const boundingRect = propertyElement\r\n .node()\r\n ?.getBoundingClientRect();\r\n propertyElementWidth = boundingRect?.width || 0;\r\n propertyElementHeight = boundingRect?.height || 0;\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n setCursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n d3.select(this.#element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n d3.select(this.#element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'visible')\r\n .style('height', '0.25rem');\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n setCursorStyle(CursorStyle.Auto);\r\n propertyElement\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('z-index', 0)\r\n .style('width', 'unset')\r\n .style('height', 'unset');\r\n d3.select(this.#element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n this.valueSet?.displayedProperties?.splice(\r\n this.valueSet.displayedProperties.indexOf(property),\r\n 1\r\n );\r\n this.valueSet?.displayedProperties?.splice(\r\n closestDropbarIndex,\r\n 0,\r\n property\r\n );\r\n this.#cdr.detectChanges();\r\n })\r\n );\r\n }\r\n }\r\n\r\n getClosestDropbarIndex(pointerCoords: Point): number {\r\n const propertyList = this.valueSet?.propertySet.propertyList || [];\r\n // note that this is <= and not < as we are counting the index after the last element as well\r\n const coordsList: Point[] = [];\r\n for (let i = 0; i <= propertyList.length; ++i) {\r\n const boundingRect = d3\r\n .select(this.#element.nativeElement)\r\n .select<HTMLDivElement>(\r\n `.daga-dropbar.daga-index-${i}.daga-depth-${this.depth}`\r\n )\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (boundingRect) {\r\n coordsList.push([\r\n boundingRect.x + boundingRect.width / 2,\r\n boundingRect.y + boundingRect.height / 2\r\n ]);\r\n }\r\n }\r\n if (coordsList.length > 0) {\r\n // euclidean distance\r\n const distanceToDropbars = coordsList.map(\r\n (p) =>\r\n ((pointerCoords[0] - p[0]) ** 2 + (pointerCoords[1] - p[1]) ** 2) **\r\n 0.5\r\n );\r\n const indexOfClosestDropbar = distanceToDropbars.indexOf(\r\n Math.min(...distanceToDropbars)\r\n );\r\n return indexOfClosestDropbar;\r\n }\r\n return 0;\r\n }\r\n\r\n displayProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.displayProperty(selectedProperty);\r\n }\r\n this.#cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n\r\n hideProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.hideProperty(selectedProperty);\r\n }\r\n this.#cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n}\r\n\r\nexport const asString = (value: unknown): string => {\r\n if (Array.isArray(value)) {\r\n return value.join(', ');\r\n }\r\n if (isObject(value)) {\r\n return Object.entries(value as object)\r\n .map((pair) => pair.map((p) => JSON.stringify(p)).join(': '))\r\n .join(', ');\r\n }\r\n if (value instanceof Date) {\r\n return value.toLocaleString();\r\n }\r\n if (value === undefined || value === null) {\r\n return '';\r\n }\r\n return '' + value;\r\n};\r\n","<div\r\n class=\"daga-dropbar\"\r\n [class]=\"'daga-index-' + 0 + ' daga-depth-' + depth\"\r\n></div>\r\n@for (\r\n property of valueSet?.displayedProperties || [];\r\n track property;\r\n let i = $index\r\n) {\r\n <div\r\n class=\"daga-property-and-dropbar\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n >\r\n <div\r\n class=\"daga-property\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n >\r\n <div class=\"daga-property-name\">\r\n <span>{{ property.label || property.name }}</span>\r\n <div class=\"daga-buttons\">\r\n <button class=\"daga-property-button daga-move-button\">\r\n <div class=\"daga-icon daga-move-icon\"></div>\r\n </button>\r\n <button\r\n class=\"daga-property-button daga-hide-button\"\r\n (click)=\"hideProperty(property.name)\"\r\n >\r\n <div class=\"daga-icon daga-hide-icon\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n @if (property.type !== Type.Object) {\r\n <div class=\"daga-property-value\">\r\n {{ asString(valueSet?.getValue(property.name)) }}\r\n </div>\r\n }\r\n @if (property.type === Type.Object) {\r\n <div>\r\n <daga-property-settings\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-property-settings>\r\n </div>\r\n }\r\n </div>\r\n <div\r\n class=\"daga-dropbar\"\r\n [class]=\"'daga-index-' + (i + 1) + ' daga-depth-' + depth\"\r\n ></div>\r\n </div>\r\n}\r\n@if (valueSet && valueSet.hiddenProperties.length > 0) {\r\n <div class=\"daga-property\">\r\n <p class=\"daga-property-name\">Add property:</p>\r\n <select (change)=\"displayProperty($event)\">\r\n <option value=\"\">Select a property</option>\r\n @for (property of valueSet.hiddenProperties || []; track property) {\r\n <option [value]=\"property.name\">\r\n {{ property.label || property.name }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Keys, Option, equals } from '@metadev/daga';\r\nimport { asString } from '../property-settings/property-settings.component';\r\n\r\nexport const LOST_FOCUS_TIME_WINDOW_MS = 200;\r\n\r\n/**\r\n * Combobox with autocomplete.\r\n * @private\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-autocomplete',\r\n templateUrl: './autocomplete.component.html',\r\n imports: [FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AutocompleteComponent {\r\n @ViewChild('main', { static: true }) mainElement!: ElementRef;\r\n\r\n private _value: unknown;\r\n @Input()\r\n set value(value: unknown) {\r\n if (equals(value, this._value)) {\r\n return;\r\n }\r\n this._value = value;\r\n this.valueInput = this.getLabelOfValue(value);\r\n }\r\n get value(): unknown {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n focusIndex?: number;\r\n @Input() options!: Option<unknown>[];\r\n currentOptions!: Option<unknown>[];\r\n currentLabelStarts!: string[];\r\n currentLabelMatches!: string[];\r\n currentLabelEnds!: string[];\r\n\r\n @Input() disabled = false;\r\n showOptions = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown>();\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (equals(option.key, value)) {\r\n return option.label;\r\n }\r\n }\r\n return asString(value);\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent): void {\r\n if (!this.disabled) {\r\n switch (event.key) {\r\n case Keys.PageDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.PageUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.Escape:\r\n this.closeOptions();\r\n event.preventDefault();\r\n break;\r\n case Keys.Enter:\r\n this.complete(this.options[this.focusIndex || 0]);\r\n event.preventDefault();\r\n break;\r\n default:\r\n this.openOptions();\r\n }\r\n }\r\n }\r\n\r\n openOptions(): void {\r\n if (!this.disabled) {\r\n const mustContain = normalizeString(this.valueInput.trim());\r\n this.currentOptions = [];\r\n this.currentLabelStarts = [];\r\n this.currentLabelMatches = [];\r\n this.currentLabelEnds = [];\r\n for (const option of this.options) {\r\n const normalizedLabel = normalizeString(option.label);\r\n const position = normalizedLabel.indexOf(mustContain);\r\n if (position >= 0) {\r\n const labelStart = option.label.substring(0, position);\r\n const labelMatch = option.label.substring(\r\n position,\r\n position + mustContain.length\r\n );\r\n const labelEnd = option.label.substring(\r\n position + mustContain.length\r\n );\r\n this.currentOptions.push(option);\r\n this.currentLabelStarts.push(labelStart);\r\n this.currentLabelMatches.push(labelMatch);\r\n this.currentLabelEnds.push(labelEnd);\r\n }\r\n }\r\n this.showOptions = true;\r\n }\r\n }\r\n\r\n closeOptions(): void {\r\n this.showOptions = false;\r\n }\r\n\r\n focusOnOption(index: number | undefined) {\r\n if (!this.disabled) {\r\n this.focusIndex = index;\r\n if (index === undefined) {\r\n return;\r\n }\r\n if (index < 0) {\r\n this.focusIndex = 0;\r\n }\r\n if (index >= this.options.length) {\r\n this.focusIndex = this.options.length - 1;\r\n }\r\n }\r\n }\r\n\r\n onLostFocus(): void {\r\n setTimeout(() => {\r\n this.closeOptions();\r\n }, LOST_FOCUS_TIME_WINDOW_MS);\r\n }\r\n\r\n scrollToOption(index: number) {\r\n const target = this.mainElement.nativeElement.querySelectorAll('li')[index];\r\n if (target) {\r\n target.scrollIntoView({ block: 'center' });\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n if (!this.disabled) {\r\n this.value = undefined;\r\n this.valueInput = '';\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n }\r\n }\r\n\r\n complete(option: Option<unknown>): void {\r\n if (!this.disabled) {\r\n this.value = option;\r\n this.valueInput = option.label;\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n this.valueChange.emit(option.key);\r\n }\r\n }\r\n}\r\n\r\nconst normalizeString = (a: string): string =>\r\n (a || '')\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n","<div\r\n #main\r\n class=\"daga-autocomplete\"\r\n [class]=\"showOptions ? 'daga-showing-options' : ''\"\r\n (blur)=\"closeOptions()\"\r\n>\r\n <div class=\"daga-autocomplete-input\">\r\n <input\r\n [(ngModel)]=\"valueInput\"\r\n [disabled]=\"disabled\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (focus)=\"openOptions()\"\r\n (blur)=\"onLostFocus()\"\r\n />\r\n @if (valueInput !== '') {\r\n <button class=\"daga-clear\" (click)=\"clearInput()\"></button>\r\n }\r\n </div>\r\n <div class=\"daga-autocomplete-options\">\r\n <ul class=\"daga-autocomplete-option-list\">\r\n @if (currentOptions !== undefined ? currentOptions.length === 0 : true) {\r\n <li class=\"daga-autocomplete-option no-options\">(No options)</li>\r\n }\r\n @for (option of currentOptions; track option; let index = $index) {\r\n <li\r\n class=\"daga-autocomplete-option\"\r\n [class]=\"index === focusIndex ? 'daga-focused' : ''\"\r\n (mousemove)=\"focusOnOption(index)\"\r\n (click)=\"complete(option)\"\r\n >\r\n <span>{{ currentLabelStarts[index] }}</span>\r\n <span class=\"daga-match\">{{ currentLabelMatches[index] }}</span>\r\n <span>{{ currentLabelEnds[index] }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Option } from '@metadev/daga';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @private\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-option-list-editor',\r\n templateUrl: './option-list-editor.component.html',\r\n imports: [AutocompleteComponent, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OptionListEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n private _value: unknown[] = [];\r\n @Input()\r\n set value(value: unknown[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n this.labelsOfValue = [];\r\n for (const key of this._value) {\r\n this.labelsOfValue.push(this.getLabelOfValue(key));\r\n }\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n this.updateOptionsNotPresentInValue();\r\n }\r\n get value(): unknown[] {\r\n return this._value;\r\n }\r\n labelsOfValue: string[] = [];\r\n\r\n @Input() options: Option<unknown>[] = [];\r\n\r\n @Input() valueInput?: unknown = undefined;\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() optionsNotPresentInValue: Option<unknown>[] = [];\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown[]>();\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (option.key === value) {\r\n return option.label;\r\n }\r\n }\r\n return `${value}`;\r\n }\r\n\r\n hasValue(value: unknown): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.labelsOfValue.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.updateOptionsNotPresentInValue();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n if (\r\n this.valueInput !== undefined &&\r\n (this.allowRepeats ? true : !this.hasValue(this.valueInput))\r\n ) {\r\n this._value.push(this.valueInput);\r\n this.labelsOfValue.push(this.getLabelOfValue(this.valueInput));\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.updateOptionsNotPresentInValue();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n updateOptionsNotPresentInValue(): void {\r\n if (!this.allowRepeats) {\r\n const optionsNotPresentInValue = [];\r\n for (const option of this.options) {\r\n if (!this.hasValue(option.key)) {\r\n optionsNotPresentInValue.push(option);\r\n }\r\n }\r\n this.optionsNotPresentInValue = optionsNotPresentInValue;\r\n }\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","@for (item of value; track item; let index = $index) {\r\n <div\r\n class=\"daga-value-item-element\"\r\n >\r\n <span class=\"daga-input\">{{ labelsOfValue[index] }}</span>\r\n @if (!disabled) {\r\n <button\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"daga-icon daga-close-icon\"></div>\r\n </button>\r\n }\r\n </div>\r\n}\r\n@if (!disabled) {\r\n <div class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <daga-autocomplete\r\n [disabled]=\"disabled\"\r\n [options]=\"allowRepeats ? options || [] : optionsNotPresentInValue || []\"\r\n [(value)]=\"valueInput\"\r\n />\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n </div>\r\n }\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @private\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-text-list-editor',\r\n templateUrl: './text-list-editor.component.html',\r\n imports: [FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TextListEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n private _value: string[] = [];\r\n @Input()\r\n set value(value: string[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): string[] {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<string[]>();\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n hasValue(value: string): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n editFromValue(item: string, index: number): void {\r\n item = item.trim();\r\n if (this._value.length > index && item !== '') {\r\n this._value.splice(index, 1, item);\r\n this.valueChange.emit(this._value);\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const valueInput = this.valueInput.trim();\r\n if (\r\n valueInput !== '' &&\r\n (this.allowRepeats ? true : !this.hasValue(valueInput))\r\n ) {\r\n this._value.push(valueInput);\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","@for (item of value; track item; let index = $index) {\r\n <div\r\n class=\"daga-value-item-element\"\r\n >\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item\"\r\n (focusout)=\"editFromValue(getValueFromEvent($event), index)\"\r\n />\r\n @if (!disabled) {\r\n <button\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"daga-icon daga-close-icon\"></div>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (!disabled) {\r\n <div class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n @if (valueInput !== '') {\r\n <button\r\n class=\"daga-clear\"\r\n (click)=\"clearInput()\"\r\n ></button>\r\n }\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n </div>\r\n }\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text map type within a property editor.\r\n * @private\r\n * @see Type.TextMap\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-text-map-editor',\r\n templateUrl: './text-map-editor.component.html',\r\n imports: [CommonModule, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TextMapEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n private _value: { [name: string]: string } = {};\r\n\r\n @Input()\r\n set value(value: { [name: string]: string }) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty =\r\n Object.keys(value).length === 0 && Object.keys(this._value).length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): { [name: string]: string } {\r\n return this._value;\r\n }\r\n @Input() keyInput = '';\r\n @Input() valueInput = '';\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<{ [name: string]: string }>();\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n removeFromValue(key: string): void {\r\n delete this._value[key];\r\n this.#cdr.detectChanges();\r\n }\r\n\r\n editKey(oldKey: string, newKey: string): void {\r\n newKey = newKey.trim();\r\n if (oldKey !== newKey && newKey !== '') {\r\n this._value[newKey] = this._value[oldKey];\r\n delete this._value[oldKey];\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n editValue(key: string, value: string): void {\r\n value = value.trim();\r\n if (value !== '') {\r\n this._value[key] = value;\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const keyInput = this.keyInput.trim();\r\n const valueInput = this.valueInput.trim();\r\n if (keyInput !== '' && valueInput !== '') {\r\n this._value[keyInput] = valueInput;\r\n this.valueChange.emit(this._value);\r\n this.clearKeyInput();\r\n this.clearValueInput();\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearKeyInput(): void {\r\n this.keyInput = '';\r\n }\r\n\r\n clearValueInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","@for (item of value | keyvalue; track item) {\r\n <div class=\"daga-value-item-element\">\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.key\"\r\n (focusout)=\"editKey(item.key, getValueFromEvent($event))\"\r\n />\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.value\"\r\n (focusout)=\"editValue(item.key, getValueFromEvent($event))\"\r\n />\r\n @if (!disabled) {\r\n <button\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(item.key)\"\r\n >\r\n <div class=\"daga-icon daga-close-icon\"></div>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (!disabled) {\r\n <div class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"keyInput\" />\r\n @if (keyInput !== '') {\r\n <button\r\n class=\"daga-clear\"\r\n (click)=\"clearKeyInput()\"\r\n ></button>\r\n }\r\n </div>\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n @if (valueInput !== '') {\r\n <button\r\n class=\"daga-clear\"\r\n (click)=\"clearValueInput()\"\r\n ></button>\r\n }\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n </div>\r\n }\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n inject,\r\n Input\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n Canvas,\r\n DiagramActions,\r\n Property,\r\n Type,\r\n ValueSet,\r\n equals\r\n} from '@metadev/daga';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\nimport { OptionListEditorComponent } from '../option-list-editor/option-list-editor.component';\r\nimport { getStyleClassName } from '../property-editor.component';\r\nimport { TextListEditorComponent } from '../text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from '../text-map-editor/text-map-editor.component';\r\n\r\n/**\r\n * Editor of a value set within a property editor.\r\n * @private\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-object-editor',\r\n templateUrl: './object-editor.component.html',\r\n imports: [\r\n AutocompleteComponent,\r\n FormsModule,\r\n OptionListEditorComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ObjectEditorComponent {\r\n #cdr = inject(ChangeDetectorRef);\r\n #canvasProvider = inject(CanvasProviderService);\r\n\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n get userCanEdit(): boolean {\r\n return (\r\n this.canvas.canUserPerformAction(DiagramActions.UpdateValues) &&\r\n this.valueSet?.rootElement?.['removed'] !== true\r\n );\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n /** How many object-editor elements are parents of this object-editor element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n\r\n setValue(property: Property, value: unknown) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n if (property.editable !== false) {\r\n if (!equals(this.valueSet.getValue(property.name), value)) {\r\n this.valueSet.setValue(property.name, value);\r\n this.canvas.propertyEditorChanges$?.next();\r\n }\r\n }\r\n }\r\n\r\n dateToLocalDatetimeString(\r\n date: string | number | Date | null | undefined\r\n ): string {\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n if (date === null || date === undefined || isNaN(date.valueOf())) {\r\n return '';\r\n }\r\n const offsetDate = new Date(date);\r\n const timezoneOffset = offsetDate.getTimezoneOffset();\r\n offsetDate.setMinutes(offsetDate.getMinutes() - timezoneOffset);\r\n return offsetDate.toISOString().substring(0, 19); // for user friendliness, we trim off the milliseconds\r\n }\r\n\r\n localDatetimeStringToDate(string: string): Date {\r\n // with no timezone specified, the local time is assumed\r\n return new Date(string);\r\n }\r\n}\r\n","@for (property of valueSet?.displayedProperties || []; track property) {\r\n <div\r\n class=\"daga-property\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n >\r\n <p class=\"daga-property-name\">\r\n {{ property.label || property.name }}\r\n </p>\r\n @if (property.type === Type.Text) {\r\n <input\r\n type=\"daga-text\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.TextArea) {\r\n <textarea\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n ></textarea>\r\n }\r\n @if (property.type === Type.Number) {\r\n <input\r\n type=\"number\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Color) {\r\n <input\r\n type=\"text\"\r\n pattern=\"#[0-9a-fA-F]{6}\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Datetime) {\r\n <input\r\n type=\"datetime-local\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"dateToLocalDatetimeString(valueSet?.getValue(property.name))\"\r\n (ngModelChange)=\"setValue(property, localDatetimeStringToDate($event))\"\r\n />\r\n }\r\n @if (property.type === Type.Date) {\r\n <input\r\n type=\"date\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Time) {\r\n <input\r\n type=\"time\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Url) {\r\n <input\r\n type=\"url\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n }\r\n @if (property.type === Type.Boolean) {\r\n <div class=\"daga-radio\">\r\n <label\r\n class=\"daga-radio-item daga-radio-start\"\r\n [class]=\"\r\n valueSet?.getValue(property.name) === false ? 'daga-checked' : ''\r\n \"\r\n >\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"false\"\r\n (change)=\"setValue(property, false)\"\r\n />\r\n No\r\n </label>\r\n <label\r\n class=\"daga-radio-item daga-radio-end\"\r\n [class]=\"\r\n valueSet?.getValue(property.name) === true ? 'daga-checked' : ''\r\n \"\r\n >\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"true\"\r\n (change)=\"setValue(property, true)\"\r\n />\r\n Yes\r\n </label>\r\n </div>\r\n }\r\n @if (property.type === Type.Option) {\r\n <div class=\"daga-relatively-positioned\">\r\n <daga-autocomplete\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n />\r\n </div>\r\n }\r\n @if (\r\n property.type === Type.OptionList || property.type === Type.OptionSet\r\n ) {\r\n <daga-option-list-editor\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.OptionList\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-option-list-editor>\r\n }\r\n @if (property.type === Type.TextList || property.type === Type.TextSet) {\r\n <daga-text-list-editor\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.TextList\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-list-editor>\r\n }\r\n @if (property.type === Type.TextMap) {\r\n <daga-text-map-editor\r\n [disabled]=\"property.editable === false || !userCanEdit\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-map-editor>\r\n }\r\n @if (property.type === Type.Object) {\r\n <div class=\"daga-left-bar\">\r\n <daga-object-editor\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-object-editor>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n Corner,\r\n DiagramConfig,\r\n PropertyEditor,\r\n Side,\r\n ValueSet\r\n} from '@metadev/daga';\r\nimport * as d3 from 'd3';\r\nimport { Subscription } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\nimport { ObjectEditorComponent } from './object-editor/object-editor.component';\r\nimport { PropertySettingsComponent } from './property-settings/property-settings.component';\r\n\r\n/**\r\n * Duration of the highlight property animation in milliseconds.\r\n */\r\nconst HIGHLIGHT_ANIMATION_DURATION_MS = 1000;\r\n\r\n/**\r\n * Editor of the values of a value set.\r\n * @private\r\n * @see ValueSet\r\n */\r\n@Component({\r\n selector: 'daga-property-editor',\r\n templateUrl: './property-editor.component.html',\r\n imports: [\r\n CollapseButtonComponent,\r\n ObjectEditorComponent,\r\n PropertySettingsComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropertyEditorComponent\r\n implements PropertyEditor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #cdr = inject(ChangeDetectorRef);\r\n #configService = inject(DagaConfigurationService);\r\n\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n location!: Corner;\r\n direction!: Side;\r\n width!: string;\r\n height?: string;\r\n\r\n title?: string;\r\n _valueSet: ValueSet | undefined;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n this.settings = undefined;\r\n // force value change detection\r\n this.#cdr.detectChanges();\r\n }\r\n }\r\n\r\n settings?: boolean;\r\n\r\n private sub?: Subscription;\r\n\r\n ngOnInit(): void {\r\n this.sub = this.#configService.config$.subscribe((c) => {\r\n this.init(c);\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setPanelWidth();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n init(config: DiagramConfig): void {\r\n this.location =\r\n config.components?.propertyEditor?.location || Corner.TopRight;\r\n this.direction =\r\n config.components?.propertyEditor?.direction || Side.Bottom;\r\n this.width = config.components?.propertyEditor?.width || '24rem';\r\n this.height = config.components?.propertyEditor?.height;\r\n this.title = undefined;\r\n this.valueSet = undefined;\r\n this.setPanelWidth();\r\n }\r\n\r\n setPanelWidth(): void {\r\n if (this.panel !== undefined) {\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel().style('width', this.width);\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('height', this.height);\r\n }\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel().style('height', this.width);\r\n if (this.height) {\r\n this.selectPanel()\r\n .select('.daga-panel-content')\r\n .style('width', this.height);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n highlightProperty(...propertyNames: string[]): void {\r\n let selector = '';\r\n let depth = 0;\r\n for (const propertyName of propertyNames) {\r\n selector += ` .daga-property.${getStyleClassName(propertyName)}.daga-depth-${depth}`;\r\n ++depth;\r\n }\r\n if (this.valueSet) {\r\n d3.select(this.panel.nativeElement)\r\n .select(selector)\r\n .transition()\r\n .duration(HIGHLIGHT_ANIMATION_DURATION_MS)\r\n .ease(d3.easeLinear)\r\n .styleTween('background-color', () => {\r\n const interpolator = d3.interpolate(\r\n 'rgba(255, 0, 0, 0)',\r\n 'rgba(255, 0, 0, 0.4)'\r\n );\r\n return (t: number) => interpolator(t > 0.5 ? 1 - t : t);\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const getStyleClassName = (s: string): string => {\r\n return 'daga-property-name-' + s.replace(/\\s/g, '');\r\n};\r\n","<div\r\n #panel\r\n class=\"daga-panel daga-bottom daga-{{ location }} daga-{{ direction }}\"\r\n>\r\n <daga-collapse-button\r\n #collapse\r\n [disabled]=\"\r\n !valueSet ||\r\n !valueSet.propertySet ||\r\n !valueSet.propertySet.hasProperties()\r\n \"\r\n [direction]=\"direction\"\r\n [collapsableSelector]=\"panel\"\r\n collapsableAdditionalSelector=\".daga-panel-content\"\r\n rule=\"display\"\r\n collapsedValue=\"none\"\r\n visibleValue=\"block\"\r\n />\r\n <div class=\"daga-panel-content\">\r\n @if (\r\n valueSet &&\r\n valueSet.propertySet &&\r\n valueSet.propertySet.hasProperties() &&\r\n !collapse.collapsed\r\n ) {\r\n @if (title) {\r\n <p class=\"daga-title\">\r\n {{ title }}\r\n <button class=\"daga-property-button\" (click)=\"settings = !settings\">\r\n <div\r\n class=\"daga-icon daga-settings-icon\"\r\n [class]=\"\r\n settings === undefined\r\n ? ''\r\n : settings\r\n ? 'daga-unrotate'\r\n : 'daga-rotate'\r\n \"\r\n ></div>\r\n </button>\r\n </p>\r\n }\r\n @if (!settings) {\r\n <daga-object-editor [valueSet]=\"valueSet\" />\r\n }\r\n @if (settings) {\r\n <daga-property-settings [valueSet]=\"valueSet\" />\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n Canvas,\r\n Corner,\r\n DagaExporter,\r\n DagaImporter,\r\n DagaModel,\r\n DiagramConfig,\r\n DiagramEditor,\r\n DiagramEvent,\r\n Side\r\n} from '@metadev/daga';\r\nimport { Observable, skip, Subscription } from 'rxjs';\r\nimport { DiagramButtonsComponent } from '../diagram-buttons/diagram-buttons.component';\r\nimport { ErrorsComponent } from '../errors/errors.component';\r\nimport { PaletteComponent } from '../palette/palette.component';\r\nimport { PropertyEditorComponent } from '../property-editor/property-editor.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * The context of a diagram. Every separate diagram must be contained within its own {@link DiagramComponent} and every {@link DiagramComponent} must contain its own {@link DiagramEditorComponent}.\r\n * This component defines a {@link DagaConfigurationService} and a {@link CanvasProviderService}, which is shared by all the components within and allows accessing the configuration and the canvas of this component's diagram, respectively.\r\n * @public\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram',\r\n templateUrl: './diagram.component.html',\r\n providers: [CanvasProviderService, DagaConfigurationService],\r\n imports: [\r\n DiagramButtonsComponent,\r\n PaletteComponent,\r\n PropertyEditorComponent,\r\n ErrorsComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DiagramComponent\r\n implements DiagramEditor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n #configurationService = inject(DagaConfigurationService);\r\n #canvasProvider = inject(CanvasProviderService);\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n @ViewChild('appendTo') appendTo!: ElementRef<HTMLDivElement>;\r\n @ViewChild('diagramButtons') diagramButtons!: DiagramButtonsComponent;\r\n @ViewChild('palette') palette!: PaletteComponent;\r\n @ViewChild('propertyEditor') propertyEditor!: PropertyEditorComponent;\r\n\r\n private importer = new DagaImporter();\r\n private exporter = new DagaExporter();\r\n private _model!: DagaModel;\r\n\r\n /**\r\n * Getter for the configuration of this diagram.\r\n * @public\r\n */\r\n get config(): DiagramConfig {\r\n return this.#configurationService.getConfig();\r\n }\r\n /**\r\n * Setter for the configuration for the diagram.\r\n * @public\r\n */\r\n @Input()\r\n set config(config: DiagramConfig) {\r\n if (this.#configurationService.getConfig() !== config) {\r\n this.#configurationService.init(config);\r\n }\r\n }\r\n /**\r\n * Subject used to track when the diagram configuration has been updated.\r\n * @public\r\n */\r\n get config$(): Observable<DiagramConfig> {\r\n return this.#configurationService.config$;\r\n }\r\n /**\r\n * Getter for the canvas of this diagram.\r\n * @public\r\n */\r\n get canvas(): Canvas {\r\n return this.#canvasProvider.getCanvas();\r\n }\r\n /**\r\n * Subject used to track when the canvas has been updated.\r\n * @public\r\n */\r\n get canvas$(): Observable<Canvas> {\r\n return this.#canvasProvider.canvas$;\r\n }\r\n /**\r\n * Subject used to track when the view has been initialized after updating the canvas.\r\n * @public\r\n */\r\n get viewInitialized$(): Observable<Canvas> {\r\n return this.#canvasProvider.viewInitialized$;\r\n }\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n get model(): DagaModel {\r\n return this._model;\r\n }\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n @Input()\r\n set model(model: DagaModel) {\r\n if (this._model !== model) {\r\n this._model = model;\r\n const canvas = this.canvas;\r\n if (canvas) {\r\n this.importer.import(canvas.model, model);\r\n }\r\n }\r\n }\r\n /**\r\n * Output for changes to the diagram's model.\r\n * @public\r\n */\r\n @Output()\r\n modelChange = new EventEmitter<DagaModel>();\r\n /**\r\n * Output for user events on the diagram.\r\n * @public\r\n */\r\n @Output()\r\n diagramEvent = new EventEmitter<DiagramEvent>();\r\n\r\n private configurationSub?: Subscription;\r\n private canvasSub?: Subscription;\r\n\r\n Corner = Corner;\r\n Side = Side;\r\n\r\n ngOnInit(): void {\r\n this.#canvasProvider.initCanvas(this, this.config);\r\n\r\n this.setUpCanvas(this.canvas);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // wait for setTimeout(0) to force browser to finish calculating the size of parent before initializing the view\r\n setTimeout(() => {\r\n this.#canvasProvider.initCanvasView(this.appendTo.nativeElement);\r\n\r\n // initial import of the model\r\n if (this.model) {\r\n this.importer.import(this.canvas.model, this.model);\r\n }\r\n\r\n this.canvasSub = this.#canvasProvider.canvas$\r\n // we skip the first one as the subscribe() underneath is\r\n // for when the canvas is reloaded, not initially loaded\r\n .pipe(skip(1))\r\n .subscribe((c) => {\r\n // reset model of the old canvas\r\n this.model = this.exporter.export(c.model);\r\n this.setUpCanvas(c);\r\n });\r\n this.configurationSub = this.#configurationService.config$\r\n // we skip the first one as the subscribe() underneath is\r\n // for when the config is reloaded, not initially loaded\r\n .pipe(skip(1))\r\n .subscribe((c) => {\r\n this.#canvasProvider.initCanvas(this, c);\r\n this.#canvasProvider.initCanvasView(this.appendTo.nativeElement);\r\n this.#cdr.detectChanges();\r\n });\r\n }, 0);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.configurationSub?.unsubscribe();\r\n this.canvasSub?.unsubscribe();\r\n }\r\n\r\n private setUpCanvas(canvas: Canvas): void {\r\n canvas.diagramEvent$.subscribe((e) => {\r\n this.diagramEvent.emit(e);\r\n });\r\n canvas.diagramChange$.subscribe(() => {\r\n const exportedModel = this.exporter.export(this.canvas.model);\r\n this._model = exportedModel;\r\n this.modelChange.emit(exportedModel);\r\n });\r\n if (this.model) {\r\n this.importer.import(canvas.model, this.model);\r\n }\r\n }\r\n}\r\n","<div class=\"daga-append-to\" #appendTo></div>\r\n@if (\r\n config.components?.buttons !== undefined &&\r\n config.components?.buttons?.enabled !== false\r\n ) {\r\n <daga-diagram-buttons\r\n #diagramButtons\r\n />\r\n}\r\n@if (\r\n config.components?.palette !== undefined &&\r\n config.components?.palette?.enabled !== false &&\r\n config.components?.palette?.sections &&\r\n (config.components?.palette?.sections?.length || 0) > 0\r\n ) {\r\n <daga-palette\r\n #palette\r\n />\r\n}\r\n@if (\r\n config.components?.propertyEditor !== undefined &&\r\n config.components?.propertyEditor?.enabled !== false\r\n ) {\r\n <daga-property-editor\r\n #propertyEditor\r\n />\r\n}\r\n@if (\r\n config.components?.errors !== undefined &&\r\n config.components?.errors?.enabled !== false\r\n ) {\r\n <daga-errors\r\n />\r\n}\r\n<ng-content />\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { CollapseButtonComponent } from './collapse-button/collapse-button.component';\r\nimport { DiagramButtonsComponent } from './diagram-buttons/diagram-buttons.component';\r\nimport { DiagramComponent } from './diagram/diagram.component';\r\nimport { ErrorsComponent } from './errors/errors.component';\r\nimport { PaletteComponent } from './palette/palette.component';\r\nimport { ObjectEditorComponent } from './property-editor/object-editor/object-editor.component';\r\nimport { PropertyEditorComponent } from './property-editor/property-editor.component';\r\nimport { TextListEditorComponent } from './property-editor/text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from './property-editor/text-map-editor/text-map-editor.component';\r\nimport { CanvasProviderService } from './services/canvas-provider.service';\r\nimport { DagaConfigurationService } from './services/daga-configuration.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CollapseButtonComponent,\r\n DiagramButtonsComponent,\r\n DiagramComponent,\r\n ErrorsComponent,\r\n ObjectEditorComponent,\r\n PaletteComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent,\r\n PropertyEditorComponent,\r\n CommonModule,\r\n FormsModule\r\n ],\r\n exports: [DiagramComponent],\r\n providers: [DagaConfigurationService, CanvasProviderService]\r\n})\r\nexport class DagaModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@metadev/daga-angular",
3
3
  "description": "Diagramming engine for editing models on the Web. Made by Metadev.",
4
- "version": "4.2.6",
4
+ "version": "4.2.8",
5
5
  "author": "Metadev (https://metadev.pro)",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
7
7
  "repository": "git+https://github.com/metadevpro/daga-tutorial.git",
@@ -21,7 +21,7 @@
21
21
  "@angular/common": ">= 20.1.3 < 22",
22
22
  "@angular/core": ">= 20.1.3 < 22",
23
23
  "@angular/forms": ">= 20.1.3 < 22",
24
- "@metadev/daga": "^4.2.6",
24
+ "@metadev/daga": "^4.2.8",
25
25
  "d3": "^7.9.0",
26
26
  "rxjs": "~7.8.1"
27
27
  },