ngx-emfular-integration 0.4.0 → 0.4.1

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.
@@ -417,14 +417,14 @@ class TreeCanvasComponent {
417
417
  this.chooseReference.emit(reference);
418
418
  }
419
419
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: TreeCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
420
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: TreeCanvasComponent, isStandalone: true, selector: "tree-canvas", inputs: { modelService: "modelService" }, outputs: { chooseElement: "chooseElement", chooseReference: "chooseReference", svgReady: "svgReady" }, ngImport: i0, template: "<model-canvas\n [svgwidth]=\"svgwidth\"\n [svgheigth]=\"svgheigth\"\n (svgReady)=\"svgReady.emit($event)\"\n>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\"\n (chooseReference)=\"chooseRef($event)\"\n >\n </g>\n</model-canvas>", styles: [".modeling-container{flex:1 1 auto;overflow:auto;background:#fff}.canvas-svg{display:block}\n"], dependencies: [{ kind: "component", type: ReferencableBoxComponent, selector: "[referencable-box]", inputs: ["referencable", "position", "color"], outputs: ["chooseElement", "chooseReference"] }, { kind: "component", type: ModelCanvasComponent, selector: "model-canvas", inputs: ["svgwidth", "svgheigth"], outputs: ["svgReady"] }] });
420
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: TreeCanvasComponent, isStandalone: true, selector: "tree-canvas", inputs: { modelService: "modelService" }, outputs: { chooseElement: "chooseElement", chooseReference: "chooseReference", svgReady: "svgReady" }, ngImport: i0, template: "<model-canvas\n [svgwidth]=\"svgwidth\"\n [svgheigth]=\"svgheigth\"\n (svgReady)=\"svgReady.emit($event)\"\n>\n <svg:g canvas>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\"\n (chooseReference)=\"chooseRef($event)\"\n >\n </g>\n </svg:g>\n</model-canvas>", styles: [".modeling-container{flex:1 1 auto;overflow:auto;background:#fff}.canvas-svg{display:block}\n"], dependencies: [{ kind: "component", type: ReferencableBoxComponent, selector: "[referencable-box]", inputs: ["referencable", "position", "color"], outputs: ["chooseElement", "chooseReference"] }, { kind: "component", type: ModelCanvasComponent, selector: "model-canvas", inputs: ["svgwidth", "svgheigth"], outputs: ["svgReady"] }] });
421
421
  }
422
422
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: TreeCanvasComponent, decorators: [{
423
423
  type: Component,
424
424
  args: [{ selector: 'tree-canvas', imports: [
425
425
  ReferencableBoxComponent,
426
426
  ModelCanvasComponent
427
- ], template: "<model-canvas\n [svgwidth]=\"svgwidth\"\n [svgheigth]=\"svgheigth\"\n (svgReady)=\"svgReady.emit($event)\"\n>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\"\n (chooseReference)=\"chooseRef($event)\"\n >\n </g>\n</model-canvas>", styles: [".modeling-container{flex:1 1 auto;overflow:auto;background:#fff}.canvas-svg{display:block}\n"] }]
427
+ ], template: "<model-canvas\n [svgwidth]=\"svgwidth\"\n [svgheigth]=\"svgheigth\"\n (svgReady)=\"svgReady.emit($event)\"\n>\n <svg:g canvas>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\"\n (chooseReference)=\"chooseRef($event)\"\n >\n </g>\n </svg:g>\n</model-canvas>", styles: [".modeling-container{flex:1 1 auto;overflow:auto;background:#fff}.canvas-svg{display:block}\n"] }]
428
428
  }], propDecorators: { modelService: [{
429
429
  type: Input
430
430
  }], chooseElement: [{
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-emfular-integration.mjs","sources":["../../../projects/ngx-emfular-integration/src/lib/model.service.ts","../../../projects/ngx-emfular-integration/src/lib/editor/model-editing-bar/model-editing-bar.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/model-editing-bar/model-editing-bar.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/model-canvas/model-canvas.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/model-canvas/model-canvas.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar/file-level-bar.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar/file-level-bar.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/basic-editor/basic-editor.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/basic-editor/basic-editor.component.html","../../../projects/ngx-emfular-integration/src/lib/utils/graphical-helper.ts","../../../projects/ngx-emfular-integration/src/lib/utils/id-helper.ts","../../../projects/ngx-emfular-integration/src/lib/graphical/referencable-box/referencable-box.component.ts","../../../projects/ngx-emfular-integration/src/lib/graphical/referencable-box/referencable-box.component.svg","../../../projects/ngx-emfular-integration/src/lib/details/container-details/container-details.component.ts","../../../projects/ngx-emfular-integration/src/lib/details/container-details/container-details.component.html","../../../projects/ngx-emfular-integration/src/lib/details/model-details/model-details.component.ts","../../../projects/ngx-emfular-integration/src/lib/details/model-details/model-details.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/tree-canvas/tree-canvas.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/tree-canvas/tree-canvas.component.html","../../../projects/ngx-emfular-integration/src/lib/details/tree-model-details.service.ts","../../../projects/ngx-emfular-integration/src/lib/editor/tree-editor/tree-editor.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/tree-editor/tree-editor.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar-material/file-level-bar-material.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar-material/file-level-bar-material.component.html","../../../projects/ngx-emfular-integration/src/public-api.ts","../../../projects/ngx-emfular-integration/src/ngx-emfular-integration.ts"],"sourcesContent":["import {Inject, Injectable, InjectionToken, PLATFORM_ID} from '@angular/core';\nimport {Deserializer, JsonDeserializable, JsonOf, Referencable} from \"emfular\";\nimport {HistoryService, IoService} from \"ngx-emfular-helper\";\n\nexport const HISTORY_SERVICE = new InjectionToken<HistoryService<any>>(\n 'HistoryService'\n);\nexport function provideHistoryForModel<M>(\n prefix: string = 'history_',\n bufferSize: number = 50\n) {\n return {\n provide: HISTORY_SERVICE,\n useFactory: (platformId: Object) => new HistoryService<JsonOf<M>>(prefix, bufferSize, platformId),\n deps: [PLATFORM_ID]\n };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class ModelService<M extends Referencable<any>> {\n\n private _model!: M\n get model(): M {\n return this._model;\n }\n protected set model(model: M) {\n this._model = this.adjustModel(model);\n this.adaptToModel()\n }\n\n protected constructor(\n @Inject(HISTORY_SERVICE) readonly historyService: HistoryService<JsonOf<M>>,\n readonly ioService: IoService,\n protected readonly modelClass: JsonDeserializable<M>,\n ) {\n this._model = new modelClass() //default initialization without calling set, since adjustments might need not yet initialized properties\n queueMicrotask(() => { //necessary to avoid timing issues if adjust model or adapt to model call services or other not initialized properties of the inheriting class\n this.historyService.state$.subscribe(state => {\n if (state) {\n this.applyJson(state);\n }\n });\n })\n }\n\n //default implementation to override if you need any normalization on a model before setting it\n adjustModel(model: M): M {\n return model;\n }\n\n //default implementation to override if you need adaptation of surroundings,\n // e.g. other attributes, notifications, signals etc\n adaptToModel() {}\n\n // override by either a fixed string or sth from the current model itself\n public fileTitle(): string {\n return \"model\"\n }\n\n newModel() {\n this.model = new this.modelClass()\n this.saveCurrentState()\n }\n\n serialize(): JsonOf<M> {\n return this.model.toJson()\n }\n\n deserialize(modelJson: JsonOf<M>): M {\n let modelEClass = new this.modelClass().getEClass();\n return Deserializer.fromJSON<M>(modelJson, modelEClass);\n }\n\n saveCurrentState() {\n this.historyService.save(this.serialize())\n }\n\n protected applyJson(modelJson: JsonOf<M>): M {\n this.model = this.deserialize(modelJson);\n return this.model;\n }\n\n loadFromJson(modelJson: JsonOf<M>): void {\n this.applyJson(modelJson);\n this.saveCurrentState()\n }\n\n loadFromFile(event: Event) {\n this.ioService.loadStringFromFile(event).then(txt => {\n //todo insert detection code for wrong files (no json, not appropriately structured\n this.loadFromJson(JSON.parse(txt));\n });\n }\n\n save() {\n const jsonString = JSON.stringify(this.serialize());\n this.ioService.saveJson(jsonString, this.fileTitle())\n }\n\n}\n","import {Component, Input} from '@angular/core';\nimport {NgForOf, NgIf, NgOptimizedImage} from \"@angular/common\";\n\n@Component({\n selector: 'emfular-model-editing-bar',\n imports: [\n NgForOf,\n NgIf,\n NgOptimizedImage\n ],\n templateUrl: './model-editing-bar.component.html',\n styleUrl: './model-editing-bar.component.css'\n})\nexport class ModelEditingBarComponent {\n @Input() buttons: Array<{\n label: string;\n icon?: string;\n action: () => void;\n }> | null = null;\n\n\n}\n","<div class=\"model-editing-bar\">\n <button *ngFor=\"let b of buttons\" (click)=\"b.action()\">\n <img\n *ngIf=\"b.icon\"\n class=\"icon\"\n [src]=\"b.icon\"\n alt=\"Icon for {{b.label}}\"\n />\n {{ b.label }}\n </button>\n</div>\n","import {Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\n\n@Component({\n selector: 'model-canvas',\n imports: [],\n templateUrl: './model-canvas.component.html',\n styleUrl: './model-canvas.component.css'\n})\nexport class ModelCanvasComponent implements OnInit {\n\n @Input() svgwidth!: number;\n @Input() svgheigth!: number\n @Output() svgReady: EventEmitter<SVGSVGElement> = new EventEmitter<SVGSVGElement>();\n @ViewChild('svg', { static: true })\n svg!: ElementRef<SVGSVGElement>;\n\n ngOnInit() {\n // Safe because static: true\n this.svgReady.emit(this.svg.nativeElement);\n }\n\n}\n","<div class=\"modeling-container\">\n <svg #svg id=\"svg\" class=\"canvas-svg\" [attr.width]=\"svgwidth\" [attr.height]=\"svgheigth\">\n <ng-content></ng-content>\n </svg>\n</div>\n","import {Component, Input} from '@angular/core';\nimport {InputHandler, IoService} from \"ngx-emfular-helper\";\nimport {Referencable} from \"emfular\";\nimport {ModelService} from \"../../model.service\";\n\n@Component({\n selector: 'emfular-file-level-bar',\n imports: [],\n templateUrl: './file-level-bar.component.html',\n styleUrl: './file-level-bar.component.css'\n})\nexport class FileLevelBarComponent<M extends Referencable<any>> {\n @Input() svg!: SVGElement\n @Input() modelService!: ModelService<M>\n protected readonly InputHandler = InputHandler;\n\n constructor(public ioService: IoService) {\n }\n\n openModel() {\n document.getElementById('openModel')?.click();\n }\n\n\n saveSVG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSVG(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasPNG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsPng(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasJPEG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsJpeg(svgContent, this.modelService.fileTitle())\n }\n }\n\n\n}\n","<input id=\"openModel\" type=\"file\" class=\"file-upload\" style=\"display:none\"\n (change)=\"modelService.loadFromFile($event)\"\n (click)=\"InputHandler.clearElem($event)\">\n\n<div class=\"file-level-bar\">\n <button (click)=\"modelService.newModel()\">New</button>\n <button (click)=\"openModel()\">Open</button>\n <span class=\"separator\"></span>\n <button (click)=\"modelService.historyService.undo()\" [disabled]=\"modelService.historyService.isUndoNotPossible()\">Undo</button>\n <button (click)=\"modelService.historyService.redo()\" [disabled]=\"modelService.historyService.isRedoNotPossible()\">Redo</button>\n <span class=\"separator\"></span>\n <button (click)=\"modelService.save()\">Save</button>\n <button (click)=\"saveSVG()\">Save SVG</button>\n <button (click)=\"saveSVGasPNG()\">Save PNG</button>\n <button (click)=\"saveSVGasJPEG()\">Save JPEG</button>\n</div>\n","import { Referencable } from \"emfular\";\nimport {Component, Input} from \"@angular/core\";\nimport {ModelService} from \"../../model.service\";\nimport {ModelCanvasComponent} from \"../model-canvas/model-canvas.component\";\nimport {FileLevelBarComponent} from \"../file-level-bar/file-level-bar.component\";\n\n@Component({\n selector: 'emfular-basic-editor',\n standalone: true,\n imports: [ModelCanvasComponent, FileLevelBarComponent],\n templateUrl: './basic-editor.component.html',\n styleUrls: ['./basic-editor.component.css']\n})\nexport class BasicEditorComponent<M extends Referencable<any>> {\n @Input() modelService!: ModelService<M>;\n @Input() svgwidth = 1500;\n @Input() svgheight = 1000;\n\n svgElement!: SVGSVGElement;\n\n constructor() {}\n\n onSvgReady(svg: SVGSVGElement) {\n queueMicrotask(() => this.svgElement = svg);\n }\n\n}\n","<div class=\"editor-root\">\n\n <!-- Fixed top bar -->\n <div class=\"editor-topbar\">\n <emfular-file-level-bar\n [svg]=\"svgElement\"\n [modelService]=\"modelService\">\n </emfular-file-level-bar>\n </div>\n\n <div class=\"editor-main\">\n <!-- Optional sidebar -->\n <div class=\"editor-sidebar\">\n <ng-content select=\"[sidebar]\"></ng-content>\n </div>\n <model-canvas\n [svgwidth]=\"svgheight\"\n [svgheigth]=\"svgheight\"\n (svgReady)=\"onSvgReady($event)\"\n >\n <ng-content select=\"[canvas]\"></ng-content>\n </model-canvas>\n </div>\n</div>\n","import {ReContainer, Referencable } from \"emfular\";\n\nexport class GraphicalHelper {\n\n //todo, refactor into emfular\n static getAsList<T extends Referencable<any>>(refs: ReContainer<T, any>): T[] {\n const items: T[]|T|undefined = refs.get()\n if(items) {\n if(Array.isArray(items)) {\n return items\n }\n const result: T[] = [];\n result.push(items)\n return result\n } else {\n return [];\n }\n }\n\n}\n","import {getAllAttributes, Referencable } from \"emfular\";\n\nexport class IdHelper {\n\n static getLabel(ref: Referencable<any>): string {\n // 1. If the model has a \"name\" attribute → use it\n if ((ref as any).name) {\n return `${(ref as any).name}`;\n }\n\n // 2. Otherwise: first primitive attribute\n const attrs = getAllAttributes(ref.constructor);\n for (const [key] of attrs) {\n const value = (ref as any)[key];\n if (typeof value === \"string\" || typeof value === \"number\") {\n return `${value}`;\n }\n }\n\n /*\n // 3. Otherwise: use ID (EMFular always has stable IDs)\n if ((ref as any).id) {\n return `(id=${(ref as any).id})`;\n }*/\n\n // 4. Otherwise: fallback\n return \"(unnamed)\";\n }\n\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Referencable, ReTreeChildrenContainer} from 'emfular';\nimport {ArrowBetweenElemsComponent, BoundingBox, RectangleWithTextComponent, PositionHelper} from 'ngx-svg-graphics';\nimport {GraphicalHelper} from \"../../utils/graphical-helper\";\nimport {IdHelper} from \"../../utils/id-helper\";\n\n@Component({\n selector: '[referencable-box]',\n imports: [RectangleWithTextComponent, ArrowBetweenElemsComponent],\n templateUrl: './referencable-box.component.svg',\n styleUrl: './referencable-box.component.css'\n})\nexport class ReferencableBoxComponent {\n @Input() referencable!: Referencable<any>;\n @Input() position!: BoundingBox\n @Input() color?: string = \"#efad78\"\n @Output() chooseElement: EventEmitter<Referencable<any>> = new EventEmitter();\n @Output() chooseReference: EventEmitter<ReTreeChildrenContainer<any>> = new EventEmitter();\n\n isExpandedArray: boolean[] = []\n\n constructor() {}\n\n toggleExpand(i: number) {\n this.isExpandedArray[i]= !this.isExpandedArray[i];\n }\n\n createBoxInLastPart(bb: BoundingBox): BoundingBox {\n return {\n x: bb.x+bb.w -25,\n y: bb.y+bb.h -25,\n w: 25,\n h: 25\n }\n }\n\n choose(element: Referencable<any>) {\n this.chooseElement.emit(element);\n }\n\n chooseRef(ref: ReTreeChildrenContainer<any>) {\n this.chooseReference.emit(ref)\n }\n\n\n protected readonly GraphicalHelper = GraphicalHelper;\n protected readonly PositionHelper = PositionHelper\n protected readonly IdHelper = IdHelper;\n}\n","<svg:g [attr.id]=\"referencable.$gId\">\n\n <g rectangle-with-text\n (click)=\"choose(referencable)\"\n [id]=\"referencable.$gId + '_main'\"\n [text]=\"IdHelper.getLabel(referencable)\"\n [position]=\"position\"\n [color]=\"color\"\n >\n </g>\n\n <!-- containers -->\n @for (container of referencable.$treeChildren;\n track referencable.$gId + '_' + container.referenceName\n ; let i = $index) {\n\n @let containerKey = referencable.$gId + '_' + container.referenceName;\n @let containerAnchorBox = PositionHelper.computeChildBBox(\n i,\n referencable.$treeChildren.length,\n position\n );\n\n <!-- reference box -->\n <g rectangle-with-text\n (click)=\"chooseRef(container)\"\n [id]=\"containerKey + '_ref'\"\n [text]=\"container.referenceName\"\n [position]=\"containerAnchorBox\"\n color=\"#ede679\"\n >\n </g>\n <g rectangle-with-text\n (click)=\"toggleExpand(i)\"\n [id]=\"containerKey + '_toggle'\"\n [text]=\"isExpandedArray[i]?'◊':'V'\"\n [position]=\"createBoxInLastPart(containerAnchorBox)\"\n color=\"transparent\"\n ></g>\n\n <!-- arrow from main box to reference -->\n <g arrowElems\n [startGID]=\"referencable.$gId\"\n startSuffix=\"_main\"\n [endGID]=\"containerKey\"\n endSuffix=\"_ref\">\n </g>\n\n @if (isExpandedArray[i]) {\n <!-- real children inside this reference -->\n @let realChildren = GraphicalHelper.getAsList(container);\n\n @for (elem of realChildren; track elem.$gId; let j = $index) {\n\n @let elemBox = PositionHelper.computeChildBBox(\n j,\n realChildren.length,\n containerAnchorBox\n );\n <g referencable-box\n (chooseElement)=\"choose($event)\"\n [referencable]=\"elem\"\n [position]=\"elemBox\"\n >\n </g>\n <!-- arrow from reference to child box -->\n <g arrowElems\n [startGID]=\"containerKey\"\n startSuffix=\"_ref\"\n [endGID]=\"elem.$gId\"\n endSuffix=\"_main\">\n </g>\n }\n\n }\n }\n</svg:g>\n","import {Component, Input} from '@angular/core';\nimport {ReContainer, Referencable } from 'emfular';\nimport {GraphicalHelper} from \"../../utils/graphical-helper\";\nimport {NgForOf, NgIf} from \"@angular/common\";\nimport {IdHelper} from \"../../utils/id-helper\";\nimport {ModelService} from \"../../model.service\";\nimport {TreeDetailsService} from \"../tree-details-service\";\n\n@Component({\n selector: 'container-details',\n imports: [\n NgForOf,\n NgIf,\n ],\n templateUrl: './container-details.component.html',\n styleUrl: './container-details.component.css'\n})\nexport class ContainerDetailsComponent<M extends Referencable<any>> {\n @Input() container!: ReContainer<any, any>\n @Input() isTree!: boolean\n @Input() modelService!: ModelService<M>\n @Input() detailsService!: TreeDetailsService<M> //todo just enforce interface?\n\n open(ref: Referencable<any>) {\n this.detailsService.openDetails(ref, this.modelService)\n }\n\n remove(ref: Referencable<any>) {\n //todo service should do this... in order for single source of truth\n if(this.container.remove(ref))\n this.modelService.saveCurrentState()\n }\n\n add() {\n //create on tree and open choice by graphical model on other links\n if(this.isTree) {\n console.log(\"Creation for several possible sub types is not solved in a meta-agnostic scenario\")\n } else {\n this.detailsService\n .openModelChoice(this.modelService)\n .subscribe(chosen => {\n if (!chosen) return; // user cancelled\n // todo what about type mismatches?\n if (this.container.add(chosen)) {\n this.modelService.saveCurrentState();\n }\n });\n }\n }\n\n protected readonly GraphicalHelper = GraphicalHelper;\n protected readonly IdHelper = IdHelper;\n}\n","<h4>{{container.referenceName+\":\"}}</h4>\n\n<button *ngIf=\"!isTree\" class=\"add-ref\" (click)=\"add()\">Add</button>\n\n<div class=\"container-row\"\n *ngFor=\"let elem of GraphicalHelper.getAsList(container)\">\n <div class=\"ref-info\">\n <span class=\"ref-icon\">🔗</span>\n <span class=\"ref-type\">{{ elem.getEClass() }}</span>\n <span class=\"ref-label\">{{ IdHelper.getLabel(elem) }}</span>\n </div>\n\n <div class=\"ref-actions\">\n <button (click)=\"open(elem)\">Open</button>\n <button (click)=\"remove(elem)\">Remove</button>\n </div>\n</div>\n\n","import {Component, Input, OnInit} from '@angular/core';\nimport {AttributeOptions, Referencable, ReLinkContainer, ReTreeChildrenContainer } from 'emfular';\nimport {ModelService} from \"../../model.service\";\nimport { getAllAttributes } from \"emfular\";\nimport {FormsModule} from \"@angular/forms\";\nimport {NgForOf, NgIf} from \"@angular/common\";\nimport {\n ContainerDetailsComponent\n} from \"../container-details/container-details.component\";\nimport {TreeDetailsService} from \"../tree-details-service\";\nimport {IdHelper} from \"../../utils/id-helper\";\n\n@Component({\n selector: 'lib-model-details',\n imports: [\n FormsModule,\n NgForOf,\n ContainerDetailsComponent,\n NgIf\n ],\n templateUrl: './model-details.component.html',\n styleUrl: './model-details.component.css'\n})\nexport class ModelDetailsComponent<T extends Referencable<any>, M extends Referencable<any>> implements OnInit {\n @Input() model!: T\n @Input() modelService!: ModelService<M>\n @Input() detailsService!: TreeDetailsService<M>\n\n attributes: Array<{ key: string; options: AttributeOptions }> = [];\n\n ngOnInit() {\n const map = getAllAttributes(this.model.constructor);\n this.attributes = Array.from(map.entries()).map(([key, options]) => ({\n key,\n options\n }));\n }\n\n getLinks(): ReLinkContainer<any, any>[] {\n return this.model.$otherReferences\n }\n\n getChildren(): ReTreeChildrenContainer<any>[] {\n return this.model.$treeChildren\n }\n\n chooseParent() {\n this.detailsService\n .openParentChoice(this.modelService)\n .subscribe(chosen => {\n if (!chosen) return; // user cancelled\n // todo what about type mismatches?\n const res = chosen._parent.addToReferencableContainer(\n chosen.referenceName,\n this.model\n )\n if (res) {\n this.modelService.saveCurrentState();\n }\n });\n }\n\n protected readonly IdHelper = IdHelper;\n}\n","<h1>Detail-Editor</h1>\n<h2>{{model.getEClass()}}</h2>\n<div class=\"parent-choice\">\n <label>Current Parent</label>\n <div *ngIf=\"!model.getParentReferencable()\">\n <span class=\"alert-ref\">No Parent</span>\n </div>\n <div class=\"ref-info\" *ngIf=\"model.getParentReferencable()\">\n <span class=\"ref-icon\">🔗</span>\n <span class=\"ref-type\">{{ model.getParentReferencable().getEClass() }}</span>\n <span class=\"ref-label\">{{ IdHelper.getLabel(model.getParentReferencable()) }}</span>\n </div>\n <button (click)=\"chooseParent()\">\n Set Parent\n </button>\n</div>\n<div class=\"attribute-list\">\n <div class=\"attribute-row\" *ngFor=\"let attr of attributes\">\n <label>{{ attr.key }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"$any(model)[attr.key]\"\n />\n </div>\n</div>\n<h3>References</h3>\n<div class=\"reference-list\">\n <container-details\n *ngFor=\"let container of getChildren()\"\n [container]=\"container\"\n [isTree]=\"true\"\n [modelService]=\"modelService\"\n [detailsService]=\"detailsService\"\n >\n </container-details>\n <container-details\n *ngFor=\"let container of getLinks()\"\n [container]=\"container\"\n [isTree]=\"false\"\n [modelService]=\"modelService\"\n [detailsService]=\"detailsService\"\n >\n </container-details>\n</div>\n\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {ReferencableBoxComponent} from \"../../graphical/referencable-box/referencable-box.component\";\nimport {ModelService} from \"../../model.service\";\nimport { Referencable, ReTreeChildrenContainer } from 'emfular';\nimport { BoundingBox } from 'ngx-svg-graphics';\nimport {ModelCanvasComponent} from \"../model-canvas/model-canvas.component\";\n\n@Component({\n selector: 'tree-canvas',\n imports: [\n ReferencableBoxComponent,\n ModelCanvasComponent\n ],\n templateUrl: './tree-canvas.component.html',\n styleUrl: './tree-canvas.component.css'\n})\nexport class TreeCanvasComponent<M extends Referencable<any>> {\n svgwidth = 1500;\n svgheigth = 1000;\n initialBBox : BoundingBox = {x: this.svgwidth/2, y: 20, w: 200, h: 25}\n\n @Input() modelService!: ModelService<M>\n @Output() chooseElement: EventEmitter<Referencable<any>> = new EventEmitter();\n @Output() chooseReference: EventEmitter<ReTreeChildrenContainer<any>> = new EventEmitter();\n @Output() svgReady: EventEmitter<SVGSVGElement> = new EventEmitter<SVGSVGElement>();\n\n choose(element: Referencable<any>): void {\n this.chooseElement.emit(element);\n }\n\n chooseRef(reference: ReTreeChildrenContainer<any>) {\n this.chooseReference.emit(reference);\n }\n\n}\n","<model-canvas\n [svgwidth]=\"svgwidth\"\n [svgheigth]=\"svgheigth\"\n (svgReady)=\"svgReady.emit($event)\"\n>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\"\n (chooseReference)=\"chooseRef($event)\"\n >\n </g>\n</model-canvas>","import { Injectable } from '@angular/core';\nimport { Referencable, ReTreeChildrenContainer } from 'emfular';\nimport {ModelService} from \"../model.service\";\nimport {ModelDetailsComponent} from \"./model-details/model-details.component\";\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {TreeCanvasComponent} from \"../editor/tree-canvas/tree-canvas.component\";\nimport {Observable, Subject} from \"rxjs\";\nimport {TreeDetailsService} from \"./tree-details-service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeModelDetailsService<M extends Referencable<any>> implements TreeDetailsService<M> {\n\n constructor( private overlay: Overlay) { }\n\n //actually T must be somewhere on M\n openDetails<\n T extends Referencable<any>\n >(elem: T, modelService: ModelService<M>) {\n // instead of opening the generic ModeldetailsCompoennt you might like to consider opening a specific one\n //by determining the eClass and switching based on elem.getEClass()\n\n const overlayRef = this.overlay.create(\n { hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: 'basic-details-panel',\n positionStrategy: this.overlay.position()\n .global() .centerHorizontally() .centerVertically()\n });\n const portal = new ComponentPortal(ModelDetailsComponent<T,M>);\n const ref = overlayRef.attach(portal);\n ref.instance.model = elem;\n ref.instance.modelService = modelService;\n ref.instance.detailsService = this\n overlayRef.backdropClick().subscribe(\n () => overlayRef.dispose()\n );\n }\n\n openModelChoice(\n modelService: ModelService<M>\n ): Observable<Referencable<any>> {\n\n const subject = new Subject<Referencable<any>>();\n\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: 'basic-details-panel',\n positionStrategy: this.overlay.position()\n .global().centerHorizontally().centerVertically()\n });\n\n const portal = new ComponentPortal(TreeCanvasComponent<M>);\n const ref = overlayRef.attach(portal);\n\n ref.instance.modelService = modelService;\n ref.instance.chooseElement.subscribe(next => {\n subject.next(next);\n subject.complete();\n overlayRef.dispose();\n });\n\n overlayRef.backdropClick().subscribe(() => {\n subject.complete();\n overlayRef.dispose();\n });\n\n return subject.asObservable();\n }\n\n openParentChoice(\n modelService: ModelService<M>\n ): Observable<ReTreeChildrenContainer<any>> {\n const subject = new Subject<ReTreeChildrenContainer<any>>();\n\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: 'basic-details-panel',\n positionStrategy: this.overlay.position()\n .global().centerHorizontally().centerVertically()\n });\n\n const portal = new ComponentPortal(TreeCanvasComponent<M>);\n const ref = overlayRef.attach(portal);\n\n ref.instance.modelService = modelService;\n ref.instance.chooseReference.subscribe(next => {\n subject.next(next);\n subject.complete();\n overlayRef.dispose();\n });\n\n overlayRef.backdropClick().subscribe(() => {\n subject.complete();\n overlayRef.dispose();\n });\n\n return subject.asObservable();\n }\n\n}\n","import {Component, Input} from '@angular/core';\nimport { Referencable} from \"emfular\";\nimport {ModelEditingBarComponent} from \"../model-editing-bar/model-editing-bar.component\";\nimport {ModelService} from \"../../model.service\";\nimport {TreeDetailsService} from \"../../details/tree-details-service\";\nimport {TreeModelDetailsService} from \"../../details/tree-model-details.service\";\nimport {EditButtonDef} from \"../edit-button-def\";\nimport {BasicEditorComponent} from \"../basic-editor/basic-editor.component\";\nimport {ReferencableBoxComponent} from \"../../graphical/referencable-box/referencable-box.component\";\nimport { BoundingBox } from 'ngx-svg-graphics';\n\n@Component({\n selector: 'emfular-tree-editor',\n imports: [\n ModelEditingBarComponent,\n BasicEditorComponent,\n ReferencableBoxComponent\n ],\n templateUrl: './tree-editor.component.html',\n styleUrl: './tree-editor.component.css'\n})\nexport class TreeEditorComponent<M extends Referencable<any>> {\n @Input() modelService!: ModelService<M>\n @Input() detailsService?: TreeDetailsService<M>\n @Input() customButtons: Array<EditButtonDef> | null = null;\n svgwidth = 1500;\n svgheigth = 1000;\n initialBBox : BoundingBox = {x: this.svgwidth/2, y: 20, w: 200, h: 25}\n\n\n constructor(private basicDetailsService: TreeModelDetailsService<M>) {}\n\n get sidebarButtons() {\n if (this.customButtons) return this.customButtons;\n else //todo replace by default create buttons\n return[{label: \"test\", action: () => {console.log(\"Button on model edition works\")}}];\n }\n\n get effectiveDetailsService(): TreeDetailsService<M> {\n return this.detailsService ?? this.basicDetailsService;\n }\n\n choose(element: Referencable<any>) {\n this.effectiveDetailsService.openDetails(element, this.modelService)\n }\n}\n","<emfular-basic-editor\n [svgwidth]=\"svgwidth\"\n [svgheight]=\"svgheigth\"\n [modelService]=\"modelService\"\n>\n <!-- Default sidebar -->\n <emfular-model-editing-bar\n sidebar\n [buttons]=\"sidebarButtons\">\n </emfular-model-editing-bar>\n\n <!-- Default canvas content, needs svg namespace just like components -->\n <svg:g canvas>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\">\n </g>\n </svg:g>\n</emfular-basic-editor>\n","import {Component, Input} from '@angular/core';\nimport {InputHandler, IoService} from \"ngx-emfular-helper\";\nimport {Referencable} from \"emfular\";\nimport { CommonModule } from '@angular/common';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport {ModelService} from \"../../model.service\";\n\n@Component({\n selector: 'emfular-file-level-bar-material',\n imports: [CommonModule, MatToolbarModule, MatIconModule, MatButtonModule],\n templateUrl: './file-level-bar-material.component.html',\n styleUrl: './file-level-bar-material.component.css'\n})\nexport class FileLevelBarMaterialComponent<M extends Referencable<any>> {\n @Input() svg!: SVGElement\n @Input() modelService!: ModelService<M>\n protected readonly InputHandler = InputHandler;\n\n constructor(public ioService: IoService) {\n }\n\n openModel() {\n document.getElementById('openModel')?.click();\n }\n\n\n saveSVG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSVG(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasPNG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsPng(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasJPEG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsJpeg(svgContent, this.modelService.fileTitle())\n }\n }\n\n\n}\n","<input id=\"openModel\" type=\"file\" class=\"file-upload\" style=\"display: none\" (change)=\"modelService.loadFromFile($event)\" (click)=\"InputHandler.clearElem($event)\">\n<mat-toolbar class=\"file-level-bar\">\n <button (click)=\"modelService.newModel()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"insert_drive_file\" ></mat-icon>\n New\n </button>\n <button (click)=\"openModel()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"file_upload\" ></mat-icon>\n Open\n </button>\n <hr/>\n <button (click)=\"modelService.historyService.undo()\" [disabled]=\"modelService.historyService.isUndoNotPossible()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"undo\" ></mat-icon>\n Undo</button>\n <button (click)=\"modelService.historyService.redo()\" [disabled]=\"modelService.historyService.isRedoNotPossible()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"redo\" ></mat-icon>\n Redo</button>\n <hr />\n <button (click)=\"modelService.save()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"file_download\" ></mat-icon>\n Save\n </button>\n <button (click)=\"saveSVG()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"photo_library\" ></mat-icon>\n Save SVG\n </button>\n <button (click)=\"saveSVGasPNG()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"photo_library\" ></mat-icon>\n Save PNG\n </button>\n <button (click)=\"saveSVGasJPEG()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"photo_library\" ></mat-icon>\n Save JPEG\n </button>\n</mat-toolbar>\n","/*\n * Public API Surface of ngx-emfular-integration\n */\n\nexport * from './lib/model.service';\n\nexport * from './lib/editor/tree-editor/tree-editor.component'\nexport * from './lib/editor/file-level-bar/file-level-bar.component';\nexport * from './lib/editor/file-level-bar-material/file-level-bar-material.component';\nexport * from './lib/editor/model-editing-bar/model-editing-bar.component';\nexport * from './lib/editor/tree-canvas/tree-canvas.component';\nexport * from './lib/editor/model-canvas/model-canvas.component';\nexport * from './lib/editor/basic-editor/basic-editor.component';\nexport * from './lib/editor/edit-button-def';\n\nexport * from './lib/graphical/referencable-box/referencable-box.component';\n\nexport * from './lib/details/tree-details-service'\nexport { TreeModelDetailsService as BasicModelDetailsService } from './lib/details/tree-model-details.service';\nexport * from './lib/details/tree-model-details.service'\nexport * from './lib/details/model-details/model-details.component';\nexport * from './lib/details/container-details/container-details.component'\n\nexport * from './lib/utils/id-helper'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.TreeModelDetailsService"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-emfular-integration.mjs","sources":["../../../projects/ngx-emfular-integration/src/lib/model.service.ts","../../../projects/ngx-emfular-integration/src/lib/editor/model-editing-bar/model-editing-bar.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/model-editing-bar/model-editing-bar.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/model-canvas/model-canvas.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/model-canvas/model-canvas.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar/file-level-bar.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar/file-level-bar.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/basic-editor/basic-editor.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/basic-editor/basic-editor.component.html","../../../projects/ngx-emfular-integration/src/lib/utils/graphical-helper.ts","../../../projects/ngx-emfular-integration/src/lib/utils/id-helper.ts","../../../projects/ngx-emfular-integration/src/lib/graphical/referencable-box/referencable-box.component.ts","../../../projects/ngx-emfular-integration/src/lib/graphical/referencable-box/referencable-box.component.svg","../../../projects/ngx-emfular-integration/src/lib/details/container-details/container-details.component.ts","../../../projects/ngx-emfular-integration/src/lib/details/container-details/container-details.component.html","../../../projects/ngx-emfular-integration/src/lib/details/model-details/model-details.component.ts","../../../projects/ngx-emfular-integration/src/lib/details/model-details/model-details.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/tree-canvas/tree-canvas.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/tree-canvas/tree-canvas.component.html","../../../projects/ngx-emfular-integration/src/lib/details/tree-model-details.service.ts","../../../projects/ngx-emfular-integration/src/lib/editor/tree-editor/tree-editor.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/tree-editor/tree-editor.component.html","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar-material/file-level-bar-material.component.ts","../../../projects/ngx-emfular-integration/src/lib/editor/file-level-bar-material/file-level-bar-material.component.html","../../../projects/ngx-emfular-integration/src/public-api.ts","../../../projects/ngx-emfular-integration/src/ngx-emfular-integration.ts"],"sourcesContent":["import {Inject, Injectable, InjectionToken, PLATFORM_ID} from '@angular/core';\nimport {Deserializer, JsonDeserializable, JsonOf, Referencable} from \"emfular\";\nimport {HistoryService, IoService} from \"ngx-emfular-helper\";\n\nexport const HISTORY_SERVICE = new InjectionToken<HistoryService<any>>(\n 'HistoryService'\n);\nexport function provideHistoryForModel<M>(\n prefix: string = 'history_',\n bufferSize: number = 50\n) {\n return {\n provide: HISTORY_SERVICE,\n useFactory: (platformId: Object) => new HistoryService<JsonOf<M>>(prefix, bufferSize, platformId),\n deps: [PLATFORM_ID]\n };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class ModelService<M extends Referencable<any>> {\n\n private _model!: M\n get model(): M {\n return this._model;\n }\n protected set model(model: M) {\n this._model = this.adjustModel(model);\n this.adaptToModel()\n }\n\n protected constructor(\n @Inject(HISTORY_SERVICE) readonly historyService: HistoryService<JsonOf<M>>,\n readonly ioService: IoService,\n protected readonly modelClass: JsonDeserializable<M>,\n ) {\n this._model = new modelClass() //default initialization without calling set, since adjustments might need not yet initialized properties\n queueMicrotask(() => { //necessary to avoid timing issues if adjust model or adapt to model call services or other not initialized properties of the inheriting class\n this.historyService.state$.subscribe(state => {\n if (state) {\n this.applyJson(state);\n }\n });\n })\n }\n\n //default implementation to override if you need any normalization on a model before setting it\n adjustModel(model: M): M {\n return model;\n }\n\n //default implementation to override if you need adaptation of surroundings,\n // e.g. other attributes, notifications, signals etc\n adaptToModel() {}\n\n // override by either a fixed string or sth from the current model itself\n public fileTitle(): string {\n return \"model\"\n }\n\n newModel() {\n this.model = new this.modelClass()\n this.saveCurrentState()\n }\n\n serialize(): JsonOf<M> {\n return this.model.toJson()\n }\n\n deserialize(modelJson: JsonOf<M>): M {\n let modelEClass = new this.modelClass().getEClass();\n return Deserializer.fromJSON<M>(modelJson, modelEClass);\n }\n\n saveCurrentState() {\n this.historyService.save(this.serialize())\n }\n\n protected applyJson(modelJson: JsonOf<M>): M {\n this.model = this.deserialize(modelJson);\n return this.model;\n }\n\n loadFromJson(modelJson: JsonOf<M>): void {\n this.applyJson(modelJson);\n this.saveCurrentState()\n }\n\n loadFromFile(event: Event) {\n this.ioService.loadStringFromFile(event).then(txt => {\n //todo insert detection code for wrong files (no json, not appropriately structured\n this.loadFromJson(JSON.parse(txt));\n });\n }\n\n save() {\n const jsonString = JSON.stringify(this.serialize());\n this.ioService.saveJson(jsonString, this.fileTitle())\n }\n\n}\n","import {Component, Input} from '@angular/core';\nimport {NgForOf, NgIf, NgOptimizedImage} from \"@angular/common\";\n\n@Component({\n selector: 'emfular-model-editing-bar',\n imports: [\n NgForOf,\n NgIf,\n NgOptimizedImage\n ],\n templateUrl: './model-editing-bar.component.html',\n styleUrl: './model-editing-bar.component.css'\n})\nexport class ModelEditingBarComponent {\n @Input() buttons: Array<{\n label: string;\n icon?: string;\n action: () => void;\n }> | null = null;\n\n\n}\n","<div class=\"model-editing-bar\">\n <button *ngFor=\"let b of buttons\" (click)=\"b.action()\">\n <img\n *ngIf=\"b.icon\"\n class=\"icon\"\n [src]=\"b.icon\"\n alt=\"Icon for {{b.label}}\"\n />\n {{ b.label }}\n </button>\n</div>\n","import {Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\n\n@Component({\n selector: 'model-canvas',\n imports: [],\n templateUrl: './model-canvas.component.html',\n styleUrl: './model-canvas.component.css'\n})\nexport class ModelCanvasComponent implements OnInit {\n\n @Input() svgwidth!: number;\n @Input() svgheigth!: number\n @Output() svgReady: EventEmitter<SVGSVGElement> = new EventEmitter<SVGSVGElement>();\n @ViewChild('svg', { static: true })\n svg!: ElementRef<SVGSVGElement>;\n\n ngOnInit() {\n // Safe because static: true\n this.svgReady.emit(this.svg.nativeElement);\n }\n\n}\n","<div class=\"modeling-container\">\n <svg #svg id=\"svg\" class=\"canvas-svg\" [attr.width]=\"svgwidth\" [attr.height]=\"svgheigth\">\n <ng-content></ng-content>\n </svg>\n</div>\n","import {Component, Input} from '@angular/core';\nimport {InputHandler, IoService} from \"ngx-emfular-helper\";\nimport {Referencable} from \"emfular\";\nimport {ModelService} from \"../../model.service\";\n\n@Component({\n selector: 'emfular-file-level-bar',\n imports: [],\n templateUrl: './file-level-bar.component.html',\n styleUrl: './file-level-bar.component.css'\n})\nexport class FileLevelBarComponent<M extends Referencable<any>> {\n @Input() svg!: SVGElement\n @Input() modelService!: ModelService<M>\n protected readonly InputHandler = InputHandler;\n\n constructor(public ioService: IoService) {\n }\n\n openModel() {\n document.getElementById('openModel')?.click();\n }\n\n\n saveSVG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSVG(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasPNG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsPng(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasJPEG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsJpeg(svgContent, this.modelService.fileTitle())\n }\n }\n\n\n}\n","<input id=\"openModel\" type=\"file\" class=\"file-upload\" style=\"display:none\"\n (change)=\"modelService.loadFromFile($event)\"\n (click)=\"InputHandler.clearElem($event)\">\n\n<div class=\"file-level-bar\">\n <button (click)=\"modelService.newModel()\">New</button>\n <button (click)=\"openModel()\">Open</button>\n <span class=\"separator\"></span>\n <button (click)=\"modelService.historyService.undo()\" [disabled]=\"modelService.historyService.isUndoNotPossible()\">Undo</button>\n <button (click)=\"modelService.historyService.redo()\" [disabled]=\"modelService.historyService.isRedoNotPossible()\">Redo</button>\n <span class=\"separator\"></span>\n <button (click)=\"modelService.save()\">Save</button>\n <button (click)=\"saveSVG()\">Save SVG</button>\n <button (click)=\"saveSVGasPNG()\">Save PNG</button>\n <button (click)=\"saveSVGasJPEG()\">Save JPEG</button>\n</div>\n","import { Referencable } from \"emfular\";\nimport {Component, Input} from \"@angular/core\";\nimport {ModelService} from \"../../model.service\";\nimport {ModelCanvasComponent} from \"../model-canvas/model-canvas.component\";\nimport {FileLevelBarComponent} from \"../file-level-bar/file-level-bar.component\";\n\n@Component({\n selector: 'emfular-basic-editor',\n standalone: true,\n imports: [ModelCanvasComponent, FileLevelBarComponent],\n templateUrl: './basic-editor.component.html',\n styleUrls: ['./basic-editor.component.css']\n})\nexport class BasicEditorComponent<M extends Referencable<any>> {\n @Input() modelService!: ModelService<M>;\n @Input() svgwidth = 1500;\n @Input() svgheight = 1000;\n\n svgElement!: SVGSVGElement;\n\n constructor() {}\n\n onSvgReady(svg: SVGSVGElement) {\n queueMicrotask(() => this.svgElement = svg);\n }\n\n}\n","<div class=\"editor-root\">\n\n <!-- Fixed top bar -->\n <div class=\"editor-topbar\">\n <emfular-file-level-bar\n [svg]=\"svgElement\"\n [modelService]=\"modelService\">\n </emfular-file-level-bar>\n </div>\n\n <div class=\"editor-main\">\n <!-- Optional sidebar -->\n <div class=\"editor-sidebar\">\n <ng-content select=\"[sidebar]\"></ng-content>\n </div>\n <model-canvas\n [svgwidth]=\"svgheight\"\n [svgheigth]=\"svgheight\"\n (svgReady)=\"onSvgReady($event)\"\n >\n <ng-content select=\"[canvas]\"></ng-content>\n </model-canvas>\n </div>\n</div>\n","import {ReContainer, Referencable } from \"emfular\";\n\nexport class GraphicalHelper {\n\n //todo, refactor into emfular\n static getAsList<T extends Referencable<any>>(refs: ReContainer<T, any>): T[] {\n const items: T[]|T|undefined = refs.get()\n if(items) {\n if(Array.isArray(items)) {\n return items\n }\n const result: T[] = [];\n result.push(items)\n return result\n } else {\n return [];\n }\n }\n\n}\n","import {getAllAttributes, Referencable } from \"emfular\";\n\nexport class IdHelper {\n\n static getLabel(ref: Referencable<any>): string {\n // 1. If the model has a \"name\" attribute → use it\n if ((ref as any).name) {\n return `${(ref as any).name}`;\n }\n\n // 2. Otherwise: first primitive attribute\n const attrs = getAllAttributes(ref.constructor);\n for (const [key] of attrs) {\n const value = (ref as any)[key];\n if (typeof value === \"string\" || typeof value === \"number\") {\n return `${value}`;\n }\n }\n\n /*\n // 3. Otherwise: use ID (EMFular always has stable IDs)\n if ((ref as any).id) {\n return `(id=${(ref as any).id})`;\n }*/\n\n // 4. Otherwise: fallback\n return \"(unnamed)\";\n }\n\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Referencable, ReTreeChildrenContainer} from 'emfular';\nimport {ArrowBetweenElemsComponent, BoundingBox, RectangleWithTextComponent, PositionHelper} from 'ngx-svg-graphics';\nimport {GraphicalHelper} from \"../../utils/graphical-helper\";\nimport {IdHelper} from \"../../utils/id-helper\";\n\n@Component({\n selector: '[referencable-box]',\n imports: [RectangleWithTextComponent, ArrowBetweenElemsComponent],\n templateUrl: './referencable-box.component.svg',\n styleUrl: './referencable-box.component.css'\n})\nexport class ReferencableBoxComponent {\n @Input() referencable!: Referencable<any>;\n @Input() position!: BoundingBox\n @Input() color?: string = \"#efad78\"\n @Output() chooseElement: EventEmitter<Referencable<any>> = new EventEmitter();\n @Output() chooseReference: EventEmitter<ReTreeChildrenContainer<any>> = new EventEmitter();\n\n isExpandedArray: boolean[] = []\n\n constructor() {}\n\n toggleExpand(i: number) {\n this.isExpandedArray[i]= !this.isExpandedArray[i];\n }\n\n createBoxInLastPart(bb: BoundingBox): BoundingBox {\n return {\n x: bb.x+bb.w -25,\n y: bb.y+bb.h -25,\n w: 25,\n h: 25\n }\n }\n\n choose(element: Referencable<any>) {\n this.chooseElement.emit(element);\n }\n\n chooseRef(ref: ReTreeChildrenContainer<any>) {\n this.chooseReference.emit(ref)\n }\n\n\n protected readonly GraphicalHelper = GraphicalHelper;\n protected readonly PositionHelper = PositionHelper\n protected readonly IdHelper = IdHelper;\n}\n","<svg:g [attr.id]=\"referencable.$gId\">\n\n <g rectangle-with-text\n (click)=\"choose(referencable)\"\n [id]=\"referencable.$gId + '_main'\"\n [text]=\"IdHelper.getLabel(referencable)\"\n [position]=\"position\"\n [color]=\"color\"\n >\n </g>\n\n <!-- containers -->\n @for (container of referencable.$treeChildren;\n track referencable.$gId + '_' + container.referenceName\n ; let i = $index) {\n\n @let containerKey = referencable.$gId + '_' + container.referenceName;\n @let containerAnchorBox = PositionHelper.computeChildBBox(\n i,\n referencable.$treeChildren.length,\n position\n );\n\n <!-- reference box -->\n <g rectangle-with-text\n (click)=\"chooseRef(container)\"\n [id]=\"containerKey + '_ref'\"\n [text]=\"container.referenceName\"\n [position]=\"containerAnchorBox\"\n color=\"#ede679\"\n >\n </g>\n <g rectangle-with-text\n (click)=\"toggleExpand(i)\"\n [id]=\"containerKey + '_toggle'\"\n [text]=\"isExpandedArray[i]?'◊':'V'\"\n [position]=\"createBoxInLastPart(containerAnchorBox)\"\n color=\"transparent\"\n ></g>\n\n <!-- arrow from main box to reference -->\n <g arrowElems\n [startGID]=\"referencable.$gId\"\n startSuffix=\"_main\"\n [endGID]=\"containerKey\"\n endSuffix=\"_ref\">\n </g>\n\n @if (isExpandedArray[i]) {\n <!-- real children inside this reference -->\n @let realChildren = GraphicalHelper.getAsList(container);\n\n @for (elem of realChildren; track elem.$gId; let j = $index) {\n\n @let elemBox = PositionHelper.computeChildBBox(\n j,\n realChildren.length,\n containerAnchorBox\n );\n <g referencable-box\n (chooseElement)=\"choose($event)\"\n [referencable]=\"elem\"\n [position]=\"elemBox\"\n >\n </g>\n <!-- arrow from reference to child box -->\n <g arrowElems\n [startGID]=\"containerKey\"\n startSuffix=\"_ref\"\n [endGID]=\"elem.$gId\"\n endSuffix=\"_main\">\n </g>\n }\n\n }\n }\n</svg:g>\n","import {Component, Input} from '@angular/core';\nimport {ReContainer, Referencable } from 'emfular';\nimport {GraphicalHelper} from \"../../utils/graphical-helper\";\nimport {NgForOf, NgIf} from \"@angular/common\";\nimport {IdHelper} from \"../../utils/id-helper\";\nimport {ModelService} from \"../../model.service\";\nimport {TreeDetailsService} from \"../tree-details-service\";\n\n@Component({\n selector: 'container-details',\n imports: [\n NgForOf,\n NgIf,\n ],\n templateUrl: './container-details.component.html',\n styleUrl: './container-details.component.css'\n})\nexport class ContainerDetailsComponent<M extends Referencable<any>> {\n @Input() container!: ReContainer<any, any>\n @Input() isTree!: boolean\n @Input() modelService!: ModelService<M>\n @Input() detailsService!: TreeDetailsService<M> //todo just enforce interface?\n\n open(ref: Referencable<any>) {\n this.detailsService.openDetails(ref, this.modelService)\n }\n\n remove(ref: Referencable<any>) {\n //todo service should do this... in order for single source of truth\n if(this.container.remove(ref))\n this.modelService.saveCurrentState()\n }\n\n add() {\n //create on tree and open choice by graphical model on other links\n if(this.isTree) {\n console.log(\"Creation for several possible sub types is not solved in a meta-agnostic scenario\")\n } else {\n this.detailsService\n .openModelChoice(this.modelService)\n .subscribe(chosen => {\n if (!chosen) return; // user cancelled\n // todo what about type mismatches?\n if (this.container.add(chosen)) {\n this.modelService.saveCurrentState();\n }\n });\n }\n }\n\n protected readonly GraphicalHelper = GraphicalHelper;\n protected readonly IdHelper = IdHelper;\n}\n","<h4>{{container.referenceName+\":\"}}</h4>\n\n<button *ngIf=\"!isTree\" class=\"add-ref\" (click)=\"add()\">Add</button>\n\n<div class=\"container-row\"\n *ngFor=\"let elem of GraphicalHelper.getAsList(container)\">\n <div class=\"ref-info\">\n <span class=\"ref-icon\">🔗</span>\n <span class=\"ref-type\">{{ elem.getEClass() }}</span>\n <span class=\"ref-label\">{{ IdHelper.getLabel(elem) }}</span>\n </div>\n\n <div class=\"ref-actions\">\n <button (click)=\"open(elem)\">Open</button>\n <button (click)=\"remove(elem)\">Remove</button>\n </div>\n</div>\n\n","import {Component, Input, OnInit} from '@angular/core';\nimport {AttributeOptions, Referencable, ReLinkContainer, ReTreeChildrenContainer } from 'emfular';\nimport {ModelService} from \"../../model.service\";\nimport { getAllAttributes } from \"emfular\";\nimport {FormsModule} from \"@angular/forms\";\nimport {NgForOf, NgIf} from \"@angular/common\";\nimport {\n ContainerDetailsComponent\n} from \"../container-details/container-details.component\";\nimport {TreeDetailsService} from \"../tree-details-service\";\nimport {IdHelper} from \"../../utils/id-helper\";\n\n@Component({\n selector: 'lib-model-details',\n imports: [\n FormsModule,\n NgForOf,\n ContainerDetailsComponent,\n NgIf\n ],\n templateUrl: './model-details.component.html',\n styleUrl: './model-details.component.css'\n})\nexport class ModelDetailsComponent<T extends Referencable<any>, M extends Referencable<any>> implements OnInit {\n @Input() model!: T\n @Input() modelService!: ModelService<M>\n @Input() detailsService!: TreeDetailsService<M>\n\n attributes: Array<{ key: string; options: AttributeOptions }> = [];\n\n ngOnInit() {\n const map = getAllAttributes(this.model.constructor);\n this.attributes = Array.from(map.entries()).map(([key, options]) => ({\n key,\n options\n }));\n }\n\n getLinks(): ReLinkContainer<any, any>[] {\n return this.model.$otherReferences\n }\n\n getChildren(): ReTreeChildrenContainer<any>[] {\n return this.model.$treeChildren\n }\n\n chooseParent() {\n this.detailsService\n .openParentChoice(this.modelService)\n .subscribe(chosen => {\n if (!chosen) return; // user cancelled\n // todo what about type mismatches?\n const res = chosen._parent.addToReferencableContainer(\n chosen.referenceName,\n this.model\n )\n if (res) {\n this.modelService.saveCurrentState();\n }\n });\n }\n\n protected readonly IdHelper = IdHelper;\n}\n","<h1>Detail-Editor</h1>\n<h2>{{model.getEClass()}}</h2>\n<div class=\"parent-choice\">\n <label>Current Parent</label>\n <div *ngIf=\"!model.getParentReferencable()\">\n <span class=\"alert-ref\">No Parent</span>\n </div>\n <div class=\"ref-info\" *ngIf=\"model.getParentReferencable()\">\n <span class=\"ref-icon\">🔗</span>\n <span class=\"ref-type\">{{ model.getParentReferencable().getEClass() }}</span>\n <span class=\"ref-label\">{{ IdHelper.getLabel(model.getParentReferencable()) }}</span>\n </div>\n <button (click)=\"chooseParent()\">\n Set Parent\n </button>\n</div>\n<div class=\"attribute-list\">\n <div class=\"attribute-row\" *ngFor=\"let attr of attributes\">\n <label>{{ attr.key }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"$any(model)[attr.key]\"\n />\n </div>\n</div>\n<h3>References</h3>\n<div class=\"reference-list\">\n <container-details\n *ngFor=\"let container of getChildren()\"\n [container]=\"container\"\n [isTree]=\"true\"\n [modelService]=\"modelService\"\n [detailsService]=\"detailsService\"\n >\n </container-details>\n <container-details\n *ngFor=\"let container of getLinks()\"\n [container]=\"container\"\n [isTree]=\"false\"\n [modelService]=\"modelService\"\n [detailsService]=\"detailsService\"\n >\n </container-details>\n</div>\n\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {ReferencableBoxComponent} from \"../../graphical/referencable-box/referencable-box.component\";\nimport {ModelService} from \"../../model.service\";\nimport { Referencable, ReTreeChildrenContainer } from 'emfular';\nimport { BoundingBox } from 'ngx-svg-graphics';\nimport {ModelCanvasComponent} from \"../model-canvas/model-canvas.component\";\n\n@Component({\n selector: 'tree-canvas',\n imports: [\n ReferencableBoxComponent,\n ModelCanvasComponent\n ],\n templateUrl: './tree-canvas.component.html',\n styleUrl: './tree-canvas.component.css'\n})\nexport class TreeCanvasComponent<M extends Referencable<any>> {\n svgwidth = 1500;\n svgheigth = 1000;\n initialBBox : BoundingBox = {x: this.svgwidth/2, y: 20, w: 200, h: 25}\n\n @Input() modelService!: ModelService<M>\n @Output() chooseElement: EventEmitter<Referencable<any>> = new EventEmitter();\n @Output() chooseReference: EventEmitter<ReTreeChildrenContainer<any>> = new EventEmitter();\n @Output() svgReady: EventEmitter<SVGSVGElement> = new EventEmitter<SVGSVGElement>();\n\n choose(element: Referencable<any>): void {\n this.chooseElement.emit(element);\n }\n\n chooseRef(reference: ReTreeChildrenContainer<any>) {\n this.chooseReference.emit(reference);\n }\n\n}\n","<model-canvas\n [svgwidth]=\"svgwidth\"\n [svgheigth]=\"svgheigth\"\n (svgReady)=\"svgReady.emit($event)\"\n>\n <svg:g canvas>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\"\n (chooseReference)=\"chooseRef($event)\"\n >\n </g>\n </svg:g>\n</model-canvas>","import { Injectable } from '@angular/core';\nimport { Referencable, ReTreeChildrenContainer } from 'emfular';\nimport {ModelService} from \"../model.service\";\nimport {ModelDetailsComponent} from \"./model-details/model-details.component\";\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {TreeCanvasComponent} from \"../editor/tree-canvas/tree-canvas.component\";\nimport {Observable, Subject} from \"rxjs\";\nimport {TreeDetailsService} from \"./tree-details-service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeModelDetailsService<M extends Referencable<any>> implements TreeDetailsService<M> {\n\n constructor( private overlay: Overlay) { }\n\n //actually T must be somewhere on M\n openDetails<\n T extends Referencable<any>\n >(elem: T, modelService: ModelService<M>) {\n // instead of opening the generic ModeldetailsCompoennt you might like to consider opening a specific one\n //by determining the eClass and switching based on elem.getEClass()\n\n const overlayRef = this.overlay.create(\n { hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: 'basic-details-panel',\n positionStrategy: this.overlay.position()\n .global() .centerHorizontally() .centerVertically()\n });\n const portal = new ComponentPortal(ModelDetailsComponent<T,M>);\n const ref = overlayRef.attach(portal);\n ref.instance.model = elem;\n ref.instance.modelService = modelService;\n ref.instance.detailsService = this\n overlayRef.backdropClick().subscribe(\n () => overlayRef.dispose()\n );\n }\n\n openModelChoice(\n modelService: ModelService<M>\n ): Observable<Referencable<any>> {\n\n const subject = new Subject<Referencable<any>>();\n\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: 'basic-details-panel',\n positionStrategy: this.overlay.position()\n .global().centerHorizontally().centerVertically()\n });\n\n const portal = new ComponentPortal(TreeCanvasComponent<M>);\n const ref = overlayRef.attach(portal);\n\n ref.instance.modelService = modelService;\n ref.instance.chooseElement.subscribe(next => {\n subject.next(next);\n subject.complete();\n overlayRef.dispose();\n });\n\n overlayRef.backdropClick().subscribe(() => {\n subject.complete();\n overlayRef.dispose();\n });\n\n return subject.asObservable();\n }\n\n openParentChoice(\n modelService: ModelService<M>\n ): Observable<ReTreeChildrenContainer<any>> {\n const subject = new Subject<ReTreeChildrenContainer<any>>();\n\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: 'basic-details-panel',\n positionStrategy: this.overlay.position()\n .global().centerHorizontally().centerVertically()\n });\n\n const portal = new ComponentPortal(TreeCanvasComponent<M>);\n const ref = overlayRef.attach(portal);\n\n ref.instance.modelService = modelService;\n ref.instance.chooseReference.subscribe(next => {\n subject.next(next);\n subject.complete();\n overlayRef.dispose();\n });\n\n overlayRef.backdropClick().subscribe(() => {\n subject.complete();\n overlayRef.dispose();\n });\n\n return subject.asObservable();\n }\n\n}\n","import {Component, Input} from '@angular/core';\nimport { Referencable} from \"emfular\";\nimport {ModelEditingBarComponent} from \"../model-editing-bar/model-editing-bar.component\";\nimport {ModelService} from \"../../model.service\";\nimport {TreeDetailsService} from \"../../details/tree-details-service\";\nimport {TreeModelDetailsService} from \"../../details/tree-model-details.service\";\nimport {EditButtonDef} from \"../edit-button-def\";\nimport {BasicEditorComponent} from \"../basic-editor/basic-editor.component\";\nimport {ReferencableBoxComponent} from \"../../graphical/referencable-box/referencable-box.component\";\nimport { BoundingBox } from 'ngx-svg-graphics';\n\n@Component({\n selector: 'emfular-tree-editor',\n imports: [\n ModelEditingBarComponent,\n BasicEditorComponent,\n ReferencableBoxComponent\n ],\n templateUrl: './tree-editor.component.html',\n styleUrl: './tree-editor.component.css'\n})\nexport class TreeEditorComponent<M extends Referencable<any>> {\n @Input() modelService!: ModelService<M>\n @Input() detailsService?: TreeDetailsService<M>\n @Input() customButtons: Array<EditButtonDef> | null = null;\n svgwidth = 1500;\n svgheigth = 1000;\n initialBBox : BoundingBox = {x: this.svgwidth/2, y: 20, w: 200, h: 25}\n\n\n constructor(private basicDetailsService: TreeModelDetailsService<M>) {}\n\n get sidebarButtons() {\n if (this.customButtons) return this.customButtons;\n else //todo replace by default create buttons\n return[{label: \"test\", action: () => {console.log(\"Button on model edition works\")}}];\n }\n\n get effectiveDetailsService(): TreeDetailsService<M> {\n return this.detailsService ?? this.basicDetailsService;\n }\n\n choose(element: Referencable<any>) {\n this.effectiveDetailsService.openDetails(element, this.modelService)\n }\n}\n","<emfular-basic-editor\n [svgwidth]=\"svgwidth\"\n [svgheight]=\"svgheigth\"\n [modelService]=\"modelService\"\n>\n <!-- Default sidebar -->\n <emfular-model-editing-bar\n sidebar\n [buttons]=\"sidebarButtons\">\n </emfular-model-editing-bar>\n\n <!-- Default canvas content, needs svg namespace just like components -->\n <svg:g canvas>\n <g referencable-box\n [referencable]=\"modelService.model\"\n [position]=\"initialBBox\"\n (chooseElement)=\"choose($event)\">\n </g>\n </svg:g>\n</emfular-basic-editor>\n","import {Component, Input} from '@angular/core';\nimport {InputHandler, IoService} from \"ngx-emfular-helper\";\nimport {Referencable} from \"emfular\";\nimport { CommonModule } from '@angular/common';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport {ModelService} from \"../../model.service\";\n\n@Component({\n selector: 'emfular-file-level-bar-material',\n imports: [CommonModule, MatToolbarModule, MatIconModule, MatButtonModule],\n templateUrl: './file-level-bar-material.component.html',\n styleUrl: './file-level-bar-material.component.css'\n})\nexport class FileLevelBarMaterialComponent<M extends Referencable<any>> {\n @Input() svg!: SVGElement\n @Input() modelService!: ModelService<M>\n protected readonly InputHandler = InputHandler;\n\n constructor(public ioService: IoService) {\n }\n\n openModel() {\n document.getElementById('openModel')?.click();\n }\n\n\n saveSVG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSVG(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasPNG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsPng(svgContent, this.modelService.fileTitle())\n }\n }\n\n saveSVGasJPEG() {\n const svgContent = this.svg;\n if(svgContent) {\n this.ioService.saveSvgAsJpeg(svgContent, this.modelService.fileTitle())\n }\n }\n\n\n}\n","<input id=\"openModel\" type=\"file\" class=\"file-upload\" style=\"display: none\" (change)=\"modelService.loadFromFile($event)\" (click)=\"InputHandler.clearElem($event)\">\n<mat-toolbar class=\"file-level-bar\">\n <button (click)=\"modelService.newModel()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"insert_drive_file\" ></mat-icon>\n New\n </button>\n <button (click)=\"openModel()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"file_upload\" ></mat-icon>\n Open\n </button>\n <hr/>\n <button (click)=\"modelService.historyService.undo()\" [disabled]=\"modelService.historyService.isUndoNotPossible()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"undo\" ></mat-icon>\n Undo</button>\n <button (click)=\"modelService.historyService.redo()\" [disabled]=\"modelService.historyService.isRedoNotPossible()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"redo\" ></mat-icon>\n Redo</button>\n <hr />\n <button (click)=\"modelService.save()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"file_download\" ></mat-icon>\n Save\n </button>\n <button (click)=\"saveSVG()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"photo_library\" ></mat-icon>\n Save SVG\n </button>\n <button (click)=\"saveSVGasPNG()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"photo_library\" ></mat-icon>\n Save PNG\n </button>\n <button (click)=\"saveSVGasJPEG()\">\n <mat-icon aria-hidden=\"false\" fontIcon=\"photo_library\" ></mat-icon>\n Save JPEG\n </button>\n</mat-toolbar>\n","/*\n * Public API Surface of ngx-emfular-integration\n */\n\nexport * from './lib/model.service';\n\nexport * from './lib/editor/tree-editor/tree-editor.component'\nexport * from './lib/editor/file-level-bar/file-level-bar.component';\nexport * from './lib/editor/file-level-bar-material/file-level-bar-material.component';\nexport * from './lib/editor/model-editing-bar/model-editing-bar.component';\nexport * from './lib/editor/tree-canvas/tree-canvas.component';\nexport * from './lib/editor/model-canvas/model-canvas.component';\nexport * from './lib/editor/basic-editor/basic-editor.component';\nexport * from './lib/editor/edit-button-def';\n\nexport * from './lib/graphical/referencable-box/referencable-box.component';\n\nexport * from './lib/details/tree-details-service'\nexport { TreeModelDetailsService as BasicModelDetailsService } from './lib/details/tree-model-details.service';\nexport * from './lib/details/tree-model-details.service'\nexport * from './lib/details/model-details/model-details.component';\nexport * from './lib/details/container-details/container-details.component'\n\nexport * from './lib/utils/id-helper'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.TreeModelDetailsService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-emfular-integration",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Integrates emfular with its ngx-helper to provide modeling services",
5
5
  "keywords": [
6
6
  "EMFular",