{"version":3,"file":"spring-flo.mjs","sources":["../../../projects/flo/shared/flo-common.ts","../../../projects/flo/shared/shapes.ts","../../../projects/flo/shared/logger.ts","../../../projects/flo/palette/palette.component.ts","../../../projects/flo/palette/palette.component.html","../../../projects/flo/editor/editor-utils.ts","../../../projects/flo/directives/resizer.ts","../../../projects/flo/editor/paper.component.ts","../../../projects/flo/editor/editor.component.ts","../../../projects/flo/editor/editor.component.html","../../../projects/flo/dsl-editor/dsl-editor.component.ts","../../../projects/flo/dsl-editor/dsl-editor.component.html","../../../projects/flo/code-editor/code-editor.component.ts","../../../projects/flo/code-editor/code-editor.component.html","../../../projects/flo/shared/flo-properties.ts","../../../projects/flo/properties/df.property.component.ts","../../../projects/flo/properties/df.property.component.html","../../../projects/flo/properties/properties.group.component.ts","../../../projects/flo/properties/properties.group.component.html","../../../projects/flo/module.ts","../../../projects/flo/spring-flo.ts"],"sourcesContent":["import { dia, g } from 'jointjs';\r\nimport { Observable } from 'rxjs';\r\nimport * as _joint from 'jointjs';\r\nimport $ from 'jquery';\r\n\r\nexport namespace Flo {\r\n\r\n  export const joint: any = _joint;\r\n\r\n  export enum DnDEventType {\r\n    DRAG,\r\n    DROP\r\n  }\r\n\r\n  export interface DnDEvent {\r\n    type: DnDEventType;\r\n    view: dia.CellView;\r\n    event: MouseEvent;\r\n  }\r\n\r\n  export interface PropertyMetadata {\r\n    readonly id: string;\r\n    readonly name: string;\r\n    readonly description?: string;\r\n    readonly defaultValue?: any;\r\n    readonly type?: string;\r\n    readonly [propName: string]: any;\r\n  }\r\n\r\n  export interface ExtraMetadata {\r\n    readonly titleProperty?: string;\r\n    readonly noEditableProps?: boolean;\r\n    readonly noPaletteEntry?: boolean;\r\n    readonly unselectable?: boolean;\r\n    readonly [propName: string]: any;\r\n\r\n    readonly allowAdditionalProperties?: boolean; //TODO: Verify it is still needed\r\n  }\r\n\r\n  export interface ElementMetadata {\r\n    readonly name: string;\r\n    readonly group: string;\r\n    readonly metadata?: ExtraMetadata;\r\n    readonly [propName: string]: any;\r\n    description?(): Promise<string>;\r\n    get(property: String): Promise<PropertyMetadata>;\r\n    properties(): Promise<Map<string, PropertyMetadata>>;\r\n  }\r\n\r\n  export interface ViewerDescriptor {\r\n    readonly graph?: dia.Graph;\r\n    readonly paper?: dia.Paper;\r\n  }\r\n\r\n  export interface MetamodelListener {\r\n    metadataError(data: any): void;\r\n    metadataAboutToChange(): void;\r\n    metadataChanged(): void;\r\n  }\r\n\r\n  export interface Metamodel {\r\n    textToGraph(flo: EditorContext, dsl: string): Promise<any>;\r\n    graphToText(flo: EditorContext): Promise<string>;\r\n    load(): Promise<Map<string, Map<string, ElementMetadata>>>;\r\n    groups(): Array<string>;\r\n\r\n    refresh?(): Promise<Map<string, Map<string, ElementMetadata>>>;\r\n    subscribe?(listener: MetamodelListener): void;\r\n    unsubscribe?(listener: MetamodelListener): void;\r\n    isValidPropertyValue?(element: dia.Element, property: string, value: any): boolean;\r\n  }\r\n\r\n  export interface CreationParams {\r\n    metadata?: ElementMetadata;\r\n    props?: Map<string, any>;\r\n  }\r\n\r\n  export interface ElementCreationParams extends CreationParams {\r\n    position?: dia.Point;\r\n  }\r\n\r\n  export interface LinkCreationParams extends CreationParams {\r\n    source: string;\r\n    target: string;\r\n  }\r\n\r\n  export interface EmbeddedChildCreationParams extends CreationParams {\r\n    parent: dia.Cell;\r\n    position?: dia.Point;\r\n  }\r\n\r\n  export interface DecorationCreationParams extends EmbeddedChildCreationParams {\r\n    kind: string;\r\n    messages: Array<string>;\r\n  }\r\n\r\n  export interface HandleCreationParams extends EmbeddedChildCreationParams {\r\n    kind: string;\r\n  }\r\n\r\n  export interface PaletteRenderer {\r\n    createGroupHeader(title: string, isOpen: boolean): dia.Element;\r\n    onOpen?(groupView: dia.CellView): Promise<any>;\r\n    onClose?(groupView: dia.CellView): Promise<any>;\r\n  }\r\n\r\n  export interface Renderer {\r\n    createNode?(viewerDescriptor: ViewerDescriptor, metadata: ElementMetadata, props?: Map<string, any>): dia.Element;\r\n    createLink?(source: LinkEnd, target: LinkEnd, metadata?: ElementMetadata, props?: Map<string, any>): dia.Link;\r\n    createHandle?(kind: string, parent: dia.Cell): dia.Element;\r\n    createDecoration?(kind: string, parent: dia.Cell): dia.Element;\r\n    getPaletteRenderer?(): PaletteRenderer;\r\n    initializeNewNode?(node: dia.Element, viewerDescriptor: ViewerDescriptor): void;\r\n    initializeNewLink?(link: dia.Link, viewerDescriptor: ViewerDescriptor): void;\r\n    initializeNewHandle?(handle: dia.Element, viewerDescriptor: ViewerDescriptor): void;\r\n    initializeNewDecoration?(decoration: dia.Element, viewerDescriptor: ViewerDescriptor): void;\r\n    getNodeView?(): dia.ElementView;\r\n    getLinkView?(): dia.LinkView;\r\n    layout?(paper: dia.Paper): Promise<any>;\r\n    handleLinkEvent?(context: EditorContext, event: string, link: dia.Link): void;\r\n    isSemanticProperty?(propertyPath: string, element: dia.Cell): boolean;\r\n    refreshVisuals?(cell: dia.Cell, propertyPath: string, paper: dia.Paper): void;\r\n    getLinkAnchorPoint?(linkView: dia.LinkView, view: dia.ElementView, port: SVGElement, reference: dia.Point): dia.Point;\r\n    markersChanged?(cell: dia.Cell, paper: dia.Paper): void;\r\n  }\r\n\r\n  export interface EditorContext {\r\n    readonly textToGraphConversionObservable: Observable<void>;\r\n    readonly graphToTextConversionObservable: Observable<void>;\r\n    readonly paletteReady: Observable<boolean>;\r\n    zoomPercent: number;\r\n    gridSize: number;\r\n    readOnlyCanvas: boolean;\r\n    selection: dia.CellView;\r\n    graphToTextSync: boolean;\r\n    noPalette: boolean;\r\n    setDsl(dsl: string): void;\r\n    updateGraph(): Promise<any>;\r\n    updateText(): Promise<any>;\r\n    performLayout(): Promise<void>;\r\n    clearGraph(): Promise<void>;\r\n    getGraph(): dia.Graph;\r\n    getPaper(): dia.Paper;\r\n    getMinZoom(): number;\r\n    getMaxZoom(): number;\r\n    getZoomStep(): number;\r\n    fitToPage(): void;\r\n    createNode(metadata: ElementMetadata, props?: Map<string, any>, position?: dia.Point): dia.Element;\r\n    createLink(source: LinkEnd, target: LinkEnd, metadata?: ElementMetadata, props?: Map<string, any>): dia.Link;\r\n    deleteSelectedNode(): void;\r\n    delete(cell: dia.Cell): void;\r\n    [propName: string]: any;\r\n  }\r\n\r\n  export interface LinkEndDescriptor {\r\n    view: dia.CellView;\r\n    cssClassSelector?: string;\r\n  }\r\n\r\n  export interface DnDDescriptor {\r\n    sourceComponent?: string;\r\n    range?: number;\r\n    source?: LinkEndDescriptor;\r\n    target?: LinkEndDescriptor;\r\n  }\r\n\r\n  export interface LinkEnd {\r\n    id: string | number;\r\n    selector?: string;\r\n    port?: string;\r\n    magnet?: string;\r\n  }\r\n\r\n  export enum Severity {\r\n    Error,\r\n    Warning\r\n  }\r\n\r\n  export interface Marker {\r\n    severity: Severity;\r\n    message: string;\r\n    range?: Range;\r\n  }\r\n\r\n  export interface Position {\r\n    ch: number;\r\n    line: number;\r\n  }\r\n\r\n  export interface Range {\r\n    start: Position;\r\n    end: Position;\r\n  }\r\n\r\n  export interface Editor {\r\n    interactive?: ((cellView: dia.CellView, event: string) => boolean) | boolean | dia.CellView.InteractivityOptions;\r\n    allowLinkVertexEdit?: boolean;\r\n    highlighting?: any;\r\n    createHandles?(context: EditorContext, createHandle: (owner: dia.CellView, kind: string, action: () => void, location: dia.Point) => void, owner: dia.CellView): void;\r\n    validatePort?(context: EditorContext, view: dia.CellView, magnet: SVGElement): boolean;\r\n    validateLink?(context: EditorContext, cellViewS: dia.CellView, portS: SVGElement, cellViewT: dia.CellView, portT: SVGElement, isSource: boolean, linkView: dia.LinkView): boolean;\r\n    calculateDragDescriptor?(context: EditorContext, draggedView: dia.CellView, targetUnderMouse: dia.CellView, coordinate: g.Point, sourceComponent: string): DnDDescriptor;\r\n    handleNodeDropping?(context: EditorContext, dragDescriptor: DnDDescriptor): void;\r\n    showDragFeedback?(context: EditorContext, dragDescriptor: DnDDescriptor): void;\r\n    hideDragFeedback?(context: EditorContext, dragDescriptor: DnDDescriptor): void;\r\n    validate?(graph: dia.Graph, dsl: string, flo: EditorContext): Promise<Map<string | number, Array<Marker>>>;\r\n    preDelete?(context: EditorContext, deletedElement: dia.Cell): boolean;\r\n    setDefaultContent?(editorContext: EditorContext, data: Map<string, Map<string, ElementMetadata>>): void;\r\n  }\r\n\r\n  export function findMagnetByClass(view: dia.CellView, className: string): SVGElement | undefined {\r\n    if (className && className.startsWith('.')) {\r\n      className = className.substr(1);\r\n    }\r\n    const element = view.$('[magnet]').toArray().find((magnet: any) => magnet.getAttribute('class').split(/\\s+/).indexOf(className) >= 0);\r\n    if (element) {\r\n      return view.findMagnet($(element));\r\n    }\r\n  }\r\n\r\n  export function findMagnetByPort(view: dia.CellView, port: string): SVGElement | undefined {\r\n    const element = view.$('[magnet]').toArray().find((magnet: HTMLElement) => magnet.getAttribute('port') === port);\r\n    if (element) {\r\n      return view.findMagnet($(element));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Return the metadata for a particular palette entry in a particular group.\r\n   * @param name - name of the palette entry\r\n   * @param group - group in which the palette entry should exist (e.g. sinks)\r\n   * @return\r\n   */\r\n  export function getMetadata(metamodel: Map<string, Map<string, ElementMetadata>>, name: string, group: string): ElementMetadata | undefined {\r\n    const groupObj = metamodel && group ? metamodel.get(group) : undefined;\r\n    if (name && groupObj && groupObj.get(name)) {\r\n      return metamodel!.get(group)!.get(name);\r\n    } else {\r\n      return {\r\n        name: name,\r\n        group: group,\r\n        unresolved: true,\r\n        get: (property: string) => new Promise<PropertyMetadata>(resolve => resolve(undefined)),\r\n        properties: () => Promise.resolve(new Map<string, PropertyMetadata>())\r\n      };\r\n    }\r\n  }\r\n\r\n  export function getScrollbarWidth() {\r\n\r\n    // Creating invisible container\r\n    const outer = document.createElement('div');\r\n    outer.style.visibility = 'hidden';\r\n    outer.style.overflow = 'scroll'; // forcing scrollbar to appear\r\n    // outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps\r\n    document.body.appendChild(outer);\r\n\r\n    // Creating inner element and placing it in the container\r\n    const inner = document.createElement('div');\r\n    outer.appendChild(inner);\r\n\r\n    // Calculating difference between container's full width and the child width\r\n    const scrollbarWidth = (outer.offsetWidth - inner.offsetWidth);\r\n\r\n    // Removing temporary elements from the DOM\r\n    outer.parentNode.removeChild(outer);\r\n\r\n    return scrollbarWidth;\r\n\r\n  }\r\n\r\n  export const SCROLLBAR_WIDTH = getScrollbarWidth();\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","import { dia } from 'jointjs';\r\nimport { Flo } from './flo-common';\r\nimport template from 'lodash/template';\r\nimport isFunction from 'lodash/isFunction';\r\nimport $ from 'jquery';\r\nconst joint: any = Flo.joint;\r\n\r\nconst isChrome: boolean = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\nconst isFF: boolean = navigator.userAgent.indexOf('Firefox') > 0;\r\n\r\nconst IMAGE_W = 120;\r\nconst IMAGE_H = 35;\r\n\r\nconst ERROR_MARKER_SIZE: dia.Size = {width: 16, height: 16};\r\n\r\nconst HANDLE_SIZE: dia.Size = {width: 10, height: 10};\r\n\r\nconst HANDLE_ICON_MAP: Map<string, string> = new Map<string, string>();\r\nconst REMOVE = 'remove';\r\nHANDLE_ICON_MAP.set(REMOVE, 'icons/delete.svg');\r\n\r\nconst DECORATION_ICON_MAP: Map<string, string> = new Map<string, string>();\r\nconst ERROR = 'error';\r\nDECORATION_ICON_MAP.set(ERROR, 'icons/error.svg');\r\n\r\nexport function loadShapes() {\r\n\r\n  joint.shapes.flo = {};\r\n\r\n  joint.shapes.flo.NODE_TYPE = 'sinspctr.IntNode';\r\n  joint.shapes.flo.LINK_TYPE = 'sinspctr.Link';\r\n  joint.shapes.flo.DECORATION_TYPE = 'decoration';\r\n  joint.shapes.flo.HANDLE_TYPE = 'handle';\r\n\r\n\r\n  // joint.util.cloneDeep = (obj: any) => {\r\n  //   return _.cloneDeepWith(obj, (o) => {\r\n  //     if (_.isObject(o) && !_.isPlainObject(o)) {\r\n  //       return o;\r\n  //     }\r\n  //   });\r\n  // };\r\n\r\n  joint.util.filter.redscale = (args: Shapes.FilterOptions) => {\r\n\r\n    let amount = Number.isFinite(args.amount) ? args.amount : 1;\r\n\r\n    return template(\r\n      '<filter><feColorMatrix type=\"matrix\" values=\"${a} ${b} ${c} 0 ${d} ${e} ${f} ${g} 0 0 ${h} ${i} ${k} 0 0 0 0 0 1 0\"/></filter>',\r\n      <any>{\r\n        a: 1 - 0.96 * amount,\r\n        b: 0.95 * amount,\r\n        c: 0.01 * amount,\r\n        d: 0.3 * amount,\r\n        e: 0.2 * amount,\r\n        f: 1 - 0.9 * amount,\r\n        g: 0.7 * amount,\r\n        h: 0.05 * amount,\r\n        i: 0.05 * amount,\r\n        k: 1 - 0.1 * amount\r\n      }\r\n    );\r\n  };\r\n\r\n  joint.util.filter.orangescale = (args: Shapes.FilterOptions) => {\r\n\r\n    let amount = Number.isFinite(args.amount) ? args.amount : 1;\r\n\r\n    return template(\r\n      '<filter><feColorMatrix type=\"matrix\" values=\"${a} ${b} ${c} 0 ${d} ${e} ${f} ${g} 0 ${h} ${i} ${k} ${l} 0 0 0 0 0 1 0\"/></filter>',\r\n      <any>{\r\n        a: 1.0 + 0.5 * amount,\r\n        b: 1.4 * amount,\r\n        c: 0.2 * amount,\r\n        d: 0.3 * amount,\r\n        e: 0.3 * amount,\r\n        f: 1 + 0.05 * amount,\r\n        g: 0.2 * amount,\r\n        h: 0.15 * amount,\r\n        i: 0.3 * amount,\r\n        k: 0.3 * amount,\r\n        l: 1 - 0.6 * amount\r\n      }\r\n    );\r\n  };\r\n\r\n  joint.shapes.flo.Node = joint.shapes.basic.Generic.extend({\r\n    markup:\r\n    '<g class=\"shape\"><image class=\"image\" /></g>' +\r\n    '<rect class=\"border-white\"/>' +\r\n    '<rect class=\"border\"/>' +\r\n    '<rect class=\"box\"/>' +\r\n    '<text class=\"label\"/>' +\r\n    '<text class=\"label2\"></text>' +\r\n    '<rect class=\"input-port\" />' +\r\n    '<rect class=\"output-port\"/>' +\r\n    '<rect class=\"output-port-cover\"/>',\r\n\r\n    defaults: joint.util.deepSupplement({\r\n\r\n      type: joint.shapes.flo.NODE_TYPE,\r\n      position: {x: 0, y: 0},\r\n      size: { width: IMAGE_W, height: IMAGE_H },\r\n      attrs: {\r\n        '.': { magnet: false },\r\n        // rounded edges around image\r\n        '.border': {\r\n          refWidth: 1,\r\n          refHeight: 1,\r\n          rx: 3,\r\n          ry: 3,\r\n          'fill-opacity': 0, // see through\r\n          stroke: '#eeeeee',\r\n          'stroke-width': 0\r\n        },\r\n\r\n        '.box': {\r\n          refWidth: 1,\r\n          refHeight: 1,\r\n          rx: 3,\r\n          ry: 3,\r\n          //'fill-opacity': 0, // see through\r\n          stroke: '#6db33f',\r\n          fill: '#eeeeee',\r\n          'stroke-width': 1\r\n        },\r\n        '.input-port': {\r\n          idp: 'input',\r\n          port: 'input',\r\n          height: 8, width: 8,\r\n          magnet: true,\r\n          fill: '#eeeeee',\r\n          transform: 'translate(' + -4 + ',' + ((IMAGE_H / 2 ) - 4) + ')',\r\n          stroke: '#34302d',\r\n          'stroke-width': 1\r\n        },\r\n        '.output-port': {\r\n          id: 'output',\r\n          port: 'output',\r\n          height: 8, width: 8,\r\n          magnet: true,\r\n          fill: '#eeeeee',\r\n          transform: 'translate(' + (IMAGE_W - 4) + ',' + ((IMAGE_H / 2) - 4) + ')',\r\n          stroke: '#34302d',\r\n          'stroke-width': 1\r\n        },\r\n        '.label': {\r\n          'text-anchor': 'middle',\r\n          'ref-x': 0.5, // jointjs specific: relative position to ref'd element\r\n          // 'ref-y': -12, // jointjs specific: relative position to ref'd element\r\n          'ref-y': 0.3,\r\n          ref: '.border', // jointjs specific: element for ref-x, ref-y\r\n          fill: 'black',\r\n          'font-size': 14\r\n        },\r\n        '.label2': {\r\n          'text': '\\u21d2',\r\n          'text-anchor': 'middle',\r\n          'ref-x': 0.15, // jointjs specific: relative position to ref'd element\r\n          'ref-y': 0.2, // jointjs specific: relative position to ref'd element\r\n          ref: '.border', // jointjs specific: element for ref-x, ref-y\r\n          // transform: 'translate(' + (IMAGE_W/2) + ',' + (IMAGE_H/2) + ')',\r\n          fill: 'black',\r\n          'font-size': 24\r\n        },\r\n        '.shape': {\r\n        },\r\n        '.image': {\r\n          refWidth: 1,\r\n          refHeight: 1,\r\n        }\r\n      }\r\n    }, joint.shapes.basic.Generic.prototype.defaults)\r\n  });\r\n\r\n\r\n  joint.shapes.flo.Link = joint.dia.Link.extend({\r\n    defaults: joint.util.deepSupplement({\r\n      type: joint.shapes.flo.LINK_TYPE,\r\n      attrs: {\r\n        '.connection': { stroke: '#34302d', 'stroke-width': 2 },\r\n        // Lots of alternatives that have been played with:\r\n//\t            '.smoooth': true\r\n//\t            '.marker-source': { stroke: '#9B59B6', fill: '#9B59B6', d: 'M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z' },\r\n//\t            '.marker-target': { stroke: '#F39C12', fill: '#F39C12', d: 'M14.615,4.928c0.487-0.986,1.284-0.986,1.771,0l2.249,4.554c0.486,0.986,1.775,1.923,2.864,2.081l5.024,0.73c1.089,0.158,1.335,0.916,0.547,1.684l-3.636,3.544c-0.788,0.769-1.28,2.283-1.095,3.368l0.859,5.004c0.186,1.085-0.459,1.553-1.433,1.041l-4.495-2.363c-0.974-0.512-2.567-0.512-3.541,0l-4.495,2.363c-0.974,0.512-1.618,0.044-1.432-1.041l0.858-5.004c0.186-1.085-0.307-2.6-1.094-3.368L3.93,13.977c-0.788-0.768-0.542-1.525,0.547-1.684l5.026-0.73c1.088-0.158,2.377-1.095,2.864-2.081L14.615,4.928z' },\r\n//\t        \t'.connection': { 'stroke':'black'},\r\n//\t        \t'.': { filter: { name: 'dropShadow', args: { dx: 1, dy: 1, blur: 2 } } },\r\n//\t        \t'.connection': { 'stroke-width': 10, 'stroke-linecap': 'round' },\r\n        // This means: moveto 10 0, lineto 0 5, lineto, 10 10 closepath(z)\r\n//\t        \t'.marker-target': { d: 'M 5 0 L 0 7 L 5 14 z', stroke: '#34302d','stroke-width': 1},\r\n//\t        \t'.marker-target': { d: 'M 14 2 L 9,2 L9,0 L 0,7 L 9,14 L 9,12 L 14,12 z', 'stroke-width': 1, fill: '#34302d', stroke: '#34302d'},\r\n//\t        \t'.marker-source': {d: 'M 5 0 L 5,10 L 0,10 L 0,0 z', 'stroke-width': 0, fill: '#34302d', stroke: '#34302d'},\r\n//\t            '.marker-target': { stroke: '#E74C3C', fill: '#E74C3C', d: 'M 10 0 L 0 5 L 10 10 z' },\r\n        '.marker-arrowheads': { display: 'none' },\r\n        '.tool-options': { display: 'none' }\r\n      },\r\n//\t    \tconnector: { name: 'normalDimFix' }\r\n    }, joint.dia.Link.prototype.defaults)\r\n  });\r\n\r\n  joint.shapes.flo.LinkView = joint.dia.LinkView.extend({\r\n\r\n    options: joint.util.deepSupplement({\r\n      linkToolsOffset: 0.5,\r\n      shortLinkLength: 40\r\n    }, joint.dia.LinkView.prototype.options),\r\n\r\n    updateToolsPosition: function() {\r\n      // Overriden to support relative offset for tools placement.\r\n      // If offset is between 0 and 1 then percentage of the connection length will be used to offset the tools group\r\n      if (this.options.linkToolsOffset < 1 && this.options.linkToolsOffset > 0) {\r\n        let connectionLength = this.getConnectionLength();\r\n        const relativeOffset = this.options.linkToolsOffset\r\n        this.options.linkToolsOffset = connectionLength * relativeOffset;\r\n        const returnValue = joint.dia.LinkView.prototype.updateToolsPosition.apply(this, arguments);\r\n        this.options.linkToolsOffset = relativeOffset;\r\n        return returnValue;\r\n      } else {\r\n        return joint.dia.LinkView.prototype.updateToolsPosition.apply(this, arguments);\r\n      }\r\n    },\r\n\r\n    _beforeArrowheadMove: function() {\r\n      if (this.model.get('source').id) {\r\n        this._oldSource = this.model.get('source');\r\n      }\r\n      if (this.model.get('target').id) {\r\n        this._oldTarget = this.model.get('target');\r\n      }\r\n      joint.dia.LinkView.prototype._beforeArrowheadMove.apply(this, arguments);\r\n    },\r\n\r\n    _afterArrowheadMove: function() {\r\n      joint.dia.LinkView.prototype._afterArrowheadMove.apply(this, arguments);\r\n      if (!this.model.get('source').id) {\r\n        if (this._oldSource) {\r\n          this.model.set('source', this._oldSource);\r\n        } else {\r\n          this.model.remove();\r\n        }\r\n      }\r\n      if (!this.model.get('target').id) {\r\n        if (this._oldTarget) {\r\n          this.model.set('target', this._oldTarget);\r\n        } else {\r\n          this.model.remove();\r\n        }\r\n      }\r\n      delete this._oldSource;\r\n      delete this._oldTarget;\r\n    }\r\n\r\n  });\r\n\r\n// TODO: must do cleanup for the `mainElementView'\r\n  joint.shapes.flo.ElementView = joint.dia.ElementView.extend({\r\n    // canShowTooltip: true,\r\n    beingDragged: false,\r\n    // _tempZorder: 0,\r\n    _tempOpacity: 1.0,\r\n    _hovering: false,\r\n\r\n    dragLinkStart: function(evt: any, magnet: any, x: number, y: number) {\r\n\r\n      this.model.startBatch('add-link');\r\n\r\n      const linkView = this.addLinkFromMagnet(magnet, x, y);\r\n\r\n      // backwards compatiblity events\r\n      joint.dia.CellView.prototype.pointerdown.apply(linkView, [evt, x, y]);\r\n      linkView.notify('link:pointerdown', evt, x, y);\r\n\r\n      /*** START MAIN DIFF ***/\r\n      const sourceOrTarget = $(magnet).attr('port') === 'input' ? 'source' : 'target';\r\n      linkView.eventData(evt, linkView.startArrowheadMove(sourceOrTarget, { whenNotAllowed: 'remove' }));\r\n      /*** END MAIN DIFF ***/\r\n\r\n      this.eventData(evt, { linkView: linkView });\r\n    },\r\n\r\n    addLinkFromMagnet: function(magnet: any, x: number, y: number) {\r\n\r\n      const paper = this.paper;\r\n      const graph = paper.model;\r\n\r\n      const link = paper.getDefaultLink(this, magnet);\r\n\r\n      let sourceEnd, targetEnd: any;\r\n\r\n      /*** START MAIN DIFF ***/\r\n      if ($(magnet).attr('port') === 'input') {\r\n        sourceEnd = { x: x, y: y };\r\n        targetEnd = this.getLinkEnd(magnet, x, y, link, 'target');\r\n      } else {\r\n        sourceEnd = this.getLinkEnd(magnet, x, y, link, 'source');\r\n        targetEnd = { x: x, y: y };\r\n      }\r\n      /*** END MAIN DIFF ***/\r\n\r\n      link.set({\r\n        source: sourceEnd,\r\n        target: targetEnd\r\n      }).addTo(graph, {\r\n        async: false,\r\n        ui: true\r\n      });\r\n\r\n      return link.findView(paper);\r\n    },\r\n\r\n    // pointerdown: function(evt: any, x: number, y: number) {\r\n    //   // this.canShowTooltip = false;\r\n    //   // this.hideTooltip();\r\n    //   this.beingDragged = false;\r\n    //   this._tempOpacity = this.model.attr('./opacity');\r\n    //\r\n    //   this.model.trigger('batch:start');\r\n    //\r\n    //   if ( // target is a valid magnet start linking\r\n    //     evt.target.getAttribute('magnet') &&\r\n    //     this.paper.options.validateMagnet.call(this.paper, this, evt.target)\r\n    //   ) {\r\n    //     let link = this.paper.getDefaultLink(this, evt.target);\r\n    //     if ($(evt.target).attr('port') === 'input') {\r\n    //       link.set({\r\n    //         source: { x: x, y: y },\r\n    //         target: {\r\n    //           id: this.model.id,\r\n    //           selector: this.getSelector(evt.target),\r\n    //           port: evt.target.getAttribute('port')\r\n    //         }\r\n    //       });\r\n    //     } else {\r\n    //       link.set({\r\n    //         source: {\r\n    //           id: this.model.id,\r\n    //           selector: this.getSelector(evt.target),\r\n    //           port: evt.target.getAttribute('port')\r\n    //         },\r\n    //         target: { x: x, y: y }\r\n    //       });\r\n    //     }\r\n    //     this.paper.model.addCell(link);\r\n    //     this._linkView = this.paper.findViewByModel(link);\r\n    //     if ($(evt.target).attr('port') === 'input') {\r\n    //       this._linkView.startArrowheadMove('source');\r\n    //     } else {\r\n    //       this._linkView.startArrowheadMove('target');\r\n    //     }\r\n    //     this.paper.__creatingLinkFromPort = true;\r\n    //   } else {\r\n    //     this._dx = x;\r\n    //     this._dy = y;\r\n    //     joint.dia.CellView.prototype.pointerdown.apply(this, arguments);\r\n    //   }\r\n    // },\r\n    drag: function(evt: MouseEvent, x: number, y: number) {\r\n      let interactive = isFunction(this.options.interactive) ? this.options.interactive(this, 'pointermove') :\r\n        this.options.interactive;\r\n      if (interactive !== false) {\r\n        this.paper.trigger('dragging-node-over-canvas', {type: Flo.DnDEventType.DRAG, view: this, event: evt});\r\n      }\r\n      joint.dia.ElementView.prototype.drag.apply(this, arguments);\r\n    },\r\n    dragEnd: function(evt: MouseEvent, x: number, y: number) { // jshint ignore:line\r\n      this.paper.trigger('dragging-node-over-canvas', {type: Flo.DnDEventType.DROP, view: this, event: evt});\r\n      joint.dia.ElementView.prototype.dragEnd.apply(this, arguments);\r\n    },\r\n    // events: {\r\n    //   // Tooltips on the elements in the graph\r\n    //   'mouseenter': function(evt: MouseEvent) {\r\n    //     if (this.canShowTooltip) {\r\n    //       this.showTooltip(evt.pageX, evt.pageY);\r\n    //     }\r\n    //     if (!this._hovering && !this.paper.__creatingLinkFromPort) {\r\n    //       this._hovering = true;\r\n    //       if (isChrome || isFF) {\r\n    //         this._tempZorder = this.model.get('z');\r\n    //         this.model.toFront({deep: true});\r\n    //       }\r\n    //     }\r\n    //   },\r\n    //   'mouseleave': function() {\r\n    //     this.hideTooltip();\r\n    //     if (this._hovering) {\r\n    //       this._hovering = false;\r\n    //       if (isChrome || isFF) {\r\n    //         this.model.set('z', this._tempZorder);\r\n    //         var z = this._tempZorder;\r\n    //         this.model.getEmbeddedCells({breadthFirst: true}).forEach(function(cell: dia.Cell) {\r\n    //           cell.set('z', ++z);\r\n    //         });\r\n    //       }\r\n    //     }\r\n    //   },\r\n    //   'mousemove': function(evt: MouseEvent) {\r\n    //     this.moveTooltip(evt.pageX, evt.pageY);\r\n    //   }\r\n    // },\r\n    // showTooltip: function(x: number, y: number) {\r\n    //   var mousex = x + 10;\r\n    //   var mousey = y + 10;\r\n    //\r\n    //   var nodeTooltip: HTMLElement;\r\n    //   if (this.model instanceof joint.dia.Element && this.model.get('metadata')) {\r\n    //     nodeTooltip = document.createElement('div');\r\n    //     $(nodeTooltip).addClass('node-tooltip');\r\n    //\r\n    //     $(nodeTooltip).appendTo($('body')).fadeIn('fast');\r\n    //     $(nodeTooltip).addClass('tooltip-description');\r\n    //     var nodeTitle = document.createElement('div');\r\n    //     $(nodeTooltip).append(nodeTitle);\r\n    //     var nodeDescription = document.createElement('div');\r\n    //     $(nodeTooltip).append(nodeDescription);\r\n    //\r\n    //     var model = this.model;\r\n    //\r\n    //     if (model.attr('metadata/name')) {\r\n    //       var typeSpan = document.createElement('span');\r\n    //       $(typeSpan).addClass('tooltip-title-type');\r\n    //       $(nodeTitle).append(typeSpan);\r\n    //       $(typeSpan).text(model.attr('metadata/name'));\r\n    //       if (model.attr('metadata/group')) {\r\n    //         var groupSpan = document.createElement('span');\r\n    //         $(groupSpan).addClass('tooltip-title-group');\r\n    //         $(nodeTitle).append(groupSpan);\r\n    //         $(groupSpan).text('(' + model.attr('metadata/group') + ')');\r\n    //       }\r\n    //     }\r\n    //\r\n    //     model.get('metadata').get('description').then(function(description: string) {\r\n    //       $(nodeDescription).text(description);\r\n    //     }, function(error: any) {\r\n    //       if (error) {\r\n    //         Logger.error(error);\r\n    //       }\r\n    //     });\r\n    //\r\n    //     // defaultValue\r\n    //     if (!model.attr('metadata/metadata/hide-tooltip-options')) {\r\n    //       model.get('metadata')?.get('properties').then(function(metaProps: any) {\r\n    //         var props = model.attr('props'); // array of {'name':,'value':}\r\n    //         if (metaProps && props) {\r\n    //           Object.keys(props).sort().forEach(function(propertyName) {\r\n    //             if (metaProps[propertyName]) {\r\n    //               var optionRow = document.createElement('div');\r\n    //               var optionName = document.createElement('span');\r\n    //               var optionDescription = document.createElement('span');\r\n    //               $(optionName).addClass('node-tooltip-option-name');\r\n    //               $(optionDescription).addClass('node-tooltip-option-description');\r\n    //               $(optionName).text(metaProps[propertyName].name);\r\n    //               $(optionDescription).text(props[propertyName]);//nodeOptionData[i].description);\r\n    //               $(optionRow).append(optionName);\r\n    //               $(optionRow).append(optionDescription);\r\n    //               $(nodeTooltip).append(optionRow);\r\n    //             }\r\n    //             // This was the code to add every parameter in:\r\n    //             //\t\t\t    \t\t\t\t$(optionName).addClass('node-tooltip-option-name');\r\n    //             //\t\t\t    \t\t\t\t$(optionDescription).addClass('node-tooltip-option-description');\r\n    //             //\t\t\t    \t\t\t\t$(optionName).text(metaProps[propertyName].name);\r\n    //             //\t\t\t    \t\t\t\t$(optionDescription).text(metaProps[propertyName].description);\r\n    //             //\t\t\t    \t\t\t\t$(optionRow).append(optionName);\r\n    //             //\t\t\t    \t\t\t\t$(optionRow).append(optionDescription);\r\n    //             //\t\t\t    \t\t\t\t$(nodeTooltip).append(optionRow);\r\n    //           });\r\n    //         }\r\n    //       }, function(error: any) {\r\n    //         if (error) {\r\n    //           Logger.error(error);\r\n    //         }\r\n    //       });\r\n    //     }\r\n    //\r\n    //     $('.node-tooltip').css({ top: mousey, left: mousex });\r\n    //   } else if (this.model.get('type') === joint.shapes.flo.DECORATION_TYPE && this.model.attr('./kind') === 'error') {\r\n    //     Logger.debug('mouse enter: ERROR box=' + JSON.stringify(this.model.getBBox()));\r\n    //     nodeTooltip = document.createElement('div');\r\n    //     var errors = this.model.attr('messages');\r\n    //     if (errors && errors.length > 0) {\r\n    //       $(nodeTooltip).addClass('error-tooltip');\r\n    //       $(nodeTooltip).appendTo($('body')).fadeIn('fast');\r\n    //       var header = document.createElement('p');\r\n    //       $(header).text('Errors:');\r\n    //       $(nodeTooltip).append(header);\r\n    //       for (var i = 0;i < errors.length; i++) {\r\n    //         var errorElement = document.createElement('li');\r\n    //         $(errorElement).text(errors[i]);\r\n    //         $(nodeTooltip).append(errorElement);\r\n    //       }\r\n    //       $('.error-tooltip').css({ top: mousey, left: mousex });\r\n    //     }\r\n    //   }\r\n    // },\r\n    // hideTooltip: function() {\r\n    //   $('.node-tooltip').remove();\r\n    //   $('.error-tooltip').remove();\r\n    // },\r\n    // moveTooltip: function(x: number, y: number) {\r\n    //   $('.node-tooltip')\r\n    //     .css({ top: y + 10, left: x + 10 });\r\n    //   $('.error-tooltip')\r\n    //     .css({ top: y + 10, left: x + 10 });\r\n    // }\r\n  });\r\n\r\n  joint.shapes.flo.ErrorDecoration = joint.shapes.basic.Generic.extend({\r\n\r\n    markup: '<g class=\"rotatable\"><g class=\"scalable\"><image/></g></g>',\r\n\r\n    defaults: joint.util.deepSupplement({\r\n\r\n      type: joint.shapes.flo.DECORATION_TYPE,\r\n      size: ERROR_MARKER_SIZE,\r\n      attrs: {\r\n        'image': ERROR_MARKER_SIZE\r\n      }\r\n\r\n    }, joint.shapes.basic.Generic.prototype.defaults)\r\n  });\r\n\r\n  joint.shapes.flo.PaletteGroupHeader = joint.shapes.basic.Generic.extend({\r\n    // The path is the open/close arrow, defaults to vertical (open)\r\n    markup: '<g class=\"scalable\"><rect/></g><text/><g class=\"rotatable\"><path d=\"m 10 10 l 5 8.7 l 5 -8.7 z\"/></g>',\r\n    defaults: joint.util.deepSupplement({\r\n      type: 'palette.groupheader',\r\n      size: {width: 170, height: 30},\r\n      position: {x: 0, y: 0},\r\n      attrs: {\r\n        'rect': { fill: '#34302d', 'stroke-width': 1, stroke: '#6db33f', 'follow-scale': true, width: 80, height: 40 },\r\n        'text': {\r\n          text: '',\r\n          fill: '#eeeeee',\r\n          'ref-x': 0.5,\r\n          'ref-y': 7,\r\n          'x-alignment': 'middle',\r\n          'font-size': 18/*, 'font-weight': 'bold', 'font-variant': 'small-caps', 'text-transform': 'capitalize'*/\r\n        },\r\n        'path': { fill: 'white', 'stroke-width': 2, stroke: 'white'/*,transform:'rotate(90,15,15)'*/}\r\n      },\r\n      // custom properties\r\n      isOpen: true\r\n    }, joint.shapes.basic.Generic.prototype.defaults)\r\n  });\r\n\r\n  joint.shapes.flo.NoMatchesFound = joint.shapes.basic.Generic.extend({\r\n    // The path is the open/close arrow, defaults to vertical (open)\r\n    markup: '<g class=\"scalable\"><rect class=\"no-matches-label-border\"/></g><rect class=\"no-mathes-label-bg\"/><text class=\"no-matches-label\"/>',\r\n    defaults: joint.util.deepSupplement({\r\n      size: {width: 170, height: 30},\r\n      position: {x: 0, y: 0},\r\n      attrs: {\r\n        '.no-matches-label-border': {\r\n          refWidth: 1,\r\n          refHeight: 1,\r\n          refX: 0,\r\n          refY: 0,\r\n        },\r\n        '.no-macthes-label-bg': {\r\n          ref: '.no-matches-label',\r\n          refWidth: 10,\r\n          refHeight: 2,\r\n          'follow-scale': true\r\n        },\r\n        '.no-matches-label': {\r\n          text: 'No results found.',\r\n          ref: '.no-matches-label-border',\r\n          refY: 0.5,\r\n          refY2: 5,\r\n          yAlignment: 'middle',\r\n        },\r\n      },\r\n    }, joint.shapes.basic.Generic.prototype.defaults)\r\n  });\r\n\r\n}\r\n\r\n\r\nexport namespace Constants {\r\n\r\n  export const REMOVE_HANDLE_TYPE = REMOVE;\r\n\r\n  export const PROPERTIES_HANDLE_TYPE = 'properties';\r\n\r\n  export const ERROR_DECORATION_KIND = ERROR;\r\n\r\n  export const PALETTE_CONTEXT = 'palette';\r\n\r\n  export const CANVAS_CONTEXT = 'canvas';\r\n\r\n  export const FEEDBACK_CONTEXT = 'feedback';\r\n\r\n}\r\n\r\nexport namespace Shapes {\r\n\r\n  export interface CreationParams extends Flo.CreationParams {\r\n    renderer?: Flo.Renderer;\r\n    paper?: dia.Paper;\r\n    graph?: dia.Graph;\r\n  }\r\n\r\n  export interface ElementCreationParams extends CreationParams {\r\n    position?: dia.Point;\r\n  }\r\n\r\n  export interface LinkCreationParams extends CreationParams {\r\n    source: Flo.LinkEnd;\r\n    target: Flo.LinkEnd;\r\n  }\r\n\r\n  export interface EmbeddedChildCreationParams extends CreationParams {\r\n    parent: dia.Cell;\r\n    position?: dia.Point;\r\n  }\r\n\r\n  export interface DecorationCreationParams extends EmbeddedChildCreationParams {\r\n    kind: string;\r\n    messages: Array<string>;\r\n  }\r\n\r\n  export interface HandleCreationParams extends EmbeddedChildCreationParams {\r\n    kind: string;\r\n  }\r\n\r\n  export interface FilterOptions {\r\n    amount: number;\r\n    [propName: string]: any;\r\n  }\r\n\r\n\r\n  export class Factory {\r\n\r\n    /**\r\n     * Create a JointJS node that embeds extra metadata (properties).\r\n     */\r\n    static createNode(params: ElementCreationParams): dia.Element {\r\n      let renderer = params.renderer;\r\n      let paper = params.paper;\r\n      let metadata = params.metadata;\r\n      let position = params.position;\r\n      let props = params.props;\r\n      let graph = params.graph || (params.paper ? params.paper.model : undefined);\r\n\r\n      let node: dia.Element;\r\n      if (!position) {\r\n        position = {x: 0, y: 0};\r\n      }\r\n\r\n      if (renderer && isFunction(renderer.createNode)) {\r\n        node = renderer.createNode({graph, paper}, metadata, props);\r\n      } else {\r\n        node = new joint.shapes.flo.Node();\r\n        if (metadata) {\r\n          node.attr('.label/text', metadata.name);\r\n        }\r\n      }\r\n      node.set('type', joint.shapes.flo.NODE_TYPE);\r\n      if (position) {\r\n        node.set('position', position);\r\n      }\r\n      if (props) {\r\n        Array.from(props.keys()).forEach(key => node.attr(`props/${key}`, props!.get(key)));\r\n      }\r\n      node.set('metadata', metadata);\r\n      if (graph) {\r\n        graph.addCell(node);\r\n      }\r\n      if (renderer && isFunction(renderer.initializeNewNode)) {\r\n        let descriptor: Flo.ViewerDescriptor = {\r\n          paper: paper,\r\n          graph: graph\r\n        };\r\n        renderer.initializeNewNode(node, descriptor);\r\n      }\r\n      return node;\r\n    }\r\n\r\n    static createLink(params: LinkCreationParams): dia.Link {\r\n      let renderer = params.renderer;\r\n      let paper = params.paper;\r\n      let metadata = params.metadata;\r\n      let source = params.source;\r\n      let target = params.target;\r\n      let props = params.props;\r\n      let graph = params.graph || (params.paper ? params.paper.model : undefined);\r\n\r\n      let link: dia.Link;\r\n      if (renderer && isFunction(renderer.createLink)) {\r\n        link = renderer.createLink(source, target, metadata, props);\r\n      } else {\r\n        link = new joint.shapes.flo.Link();\r\n      }\r\n      if (source) {\r\n        link.set('source', source);\r\n      }\r\n      if (target) {\r\n        link.set('target', target);\r\n      }\r\n      link.set('type', joint.shapes.flo.LINK_TYPE);\r\n      if (metadata) {\r\n        link.set('metadata', metadata);\r\n      }\r\n      if (props) {\r\n        Array.from(props.keys()).forEach(key => link.attr(`props/${key}`, props!.get(key)));\r\n      }\r\n      if (graph) {\r\n        graph.addCell(link);\r\n      }\r\n      if (renderer && isFunction(renderer.initializeNewLink)) {\r\n        let descriptor: Flo.ViewerDescriptor = {\r\n          paper: paper,\r\n          graph: graph\r\n        };\r\n        renderer.initializeNewLink(link, descriptor);\r\n      }\r\n      // prevent creation of link breaks\r\n      link.attr('.marker-vertices/display', 'none');\r\n      return link;\r\n    }\r\n\r\n    static createDecoration(params: DecorationCreationParams): dia.Element {\r\n      let renderer = params.renderer;\r\n      let paper = params.paper;\r\n      let parent = params.parent;\r\n      let kind = params.kind;\r\n      let messages = params.messages;\r\n      let location = params.position;\r\n      let graph = params.graph || (params.paper ? params.paper.model : undefined);\r\n\r\n      let decoration: dia.Element;\r\n      if (renderer && isFunction(renderer.createDecoration)) {\r\n        decoration = renderer.createDecoration(kind, parent);\r\n      }\r\n      if (decoration) {\r\n        decoration.set('type', joint.shapes.flo.DECORATION_TYPE);\r\n        if ((isChrome || isFF) && parent && typeof parent.get('z') === 'number') {\r\n          decoration.set('z', parent.get('z') + 1);\r\n        }\r\n        decoration.attr('./kind', kind);\r\n        decoration.attr('messages', messages);\r\n        if (graph) {\r\n          graph.addCell(decoration);\r\n        }\r\n        parent.embed(decoration);\r\n        if (renderer && isFunction(renderer.initializeNewDecoration)) {\r\n          let descriptor: Flo.ViewerDescriptor = {\r\n            paper: paper,\r\n            graph: graph\r\n          };\r\n          renderer.initializeNewDecoration(decoration, descriptor);\r\n        }\r\n        return decoration;\r\n      }\r\n\r\n    }\r\n\r\n    static createHandle(params: HandleCreationParams): dia.Element {\r\n      let renderer = params.renderer;\r\n      let paper = params.paper;\r\n      let parent = params.parent;\r\n      let kind = params.kind;\r\n      let location = params.position;\r\n      let graph = params.graph || (params.paper ? params.paper.model : undefined);\r\n\r\n      let handle: dia.Element;\r\n      if (!location) {\r\n        location = {x: 0, y: 0};\r\n      }\r\n      if (renderer && isFunction(renderer.createHandle)) {\r\n        handle = renderer.createHandle(kind, parent);\r\n      } else {\r\n        handle = new joint.shapes.flo.ErrorDecoration({\r\n          size: HANDLE_SIZE,\r\n          attrs: {\r\n            'image': {\r\n              'xlink:href': HANDLE_ICON_MAP.get(kind)\r\n            }\r\n          }\r\n        });\r\n      }\r\n      handle.set('type', joint.shapes.flo.HANDLE_TYPE);\r\n      handle.set('position', location);\r\n      if ((isChrome || isFF) && parent && typeof parent.get('z') === 'number') {\r\n        handle.set('z', parent.get('z') + 1);\r\n      }\r\n      handle.attr('./kind', kind);\r\n      if (graph) {\r\n        graph.addCell(handle);\r\n      }\r\n      parent.embed(handle);\r\n      if (renderer && isFunction(renderer.initializeNewHandle)) {\r\n        let descriptor: Flo.ViewerDescriptor = {\r\n          paper: paper,\r\n          graph: graph\r\n        };\r\n        renderer.initializeNewHandle(handle, descriptor);\r\n      }\r\n      return handle;\r\n    }\r\n\r\n  }\r\n}\r\n\r\nloadShapes();\r\n\r\n","import { isDevMode } from '@angular/core';\r\n\r\nexport class Logger {\r\n\r\n  constructor() {\r\n  }\r\n\r\n  static log(value: any, ...rest: any[]) {\r\n    if (isDevMode()) {\r\n      console.log(value, ...rest);\r\n    }\r\n  }\r\n\r\n  static debug(value: any, ...rest: any[]) {\r\n    if (isDevMode()) {\r\n      console.debug(value, ...rest);\r\n    }\r\n  }\r\n\r\n  static error(value: any, ...rest: any[]) {\r\n    console.error(value, ...rest);\r\n  }\r\n\r\n  static warn(value: any, ...rest: any[]) {\r\n    console.warn(value, ...rest);\r\n  }\r\n\r\n}\r\n","import {Component, ElementRef, Input, Output, EventEmitter, OnInit, OnDestroy, Inject, ViewEncapsulation} from '@angular/core';\r\nimport { Subject, fromEvent } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { dia } from 'jointjs';\r\nimport { Flo } from '../shared/flo-common';\r\nimport '../shared/shapes';\r\nimport { Shapes, Constants } from '../shared/shapes';\r\nimport { DOCUMENT } from '@angular/common'\r\nimport $ from 'jquery';\r\nimport {Logger} from '../shared/logger';\r\nconst joint: any = Flo.joint;\r\n\r\nconst DEBOUNCE_TIME = 300;\r\n\r\n@Component({\r\n  selector: 'flo-palette',\r\n  templateUrl: './palette.component.html',\r\n  styleUrls: ['./palette.component.scss'],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class Palette implements OnInit, OnDestroy {\r\n\r\n  private _metamodelListener: Flo.MetamodelListener = {\r\n    metadataError: (data) => {},\r\n    metadataAboutToChange: () => {},\r\n    metadataChanged: () => {\r\n      if (this.initialized && this.metamodel) {\r\n        this.metamodel.load().then(metamodel => this.buildPalette(metamodel));\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * The names of any groups in the palette that have been deliberately closed (the arrow clicked on)\r\n   */\r\n  private closedGroups: Set<string>;\r\n\r\n  /**\r\n   * Model of the clicked element\r\n   */\r\n  private clickedElement: dia.Cell | undefined;\r\n\r\n  private viewBeingDragged: dia.CellView | undefined;\r\n\r\n  private initialized = false;\r\n\r\n  private _paletteSize: number;\r\n\r\n  private _filterText = '';\r\n\r\n  private paletteGraph: dia.Graph;\r\n\r\n  private palette: dia.Paper;\r\n\r\n  private floaterpaper: dia.Paper;\r\n\r\n  private filterTextModel = new Subject<string>();\r\n\r\n  private noMacthesFoundNode: dia.Cell;\r\n\r\n  @Input()\r\n  metamodel: Flo.Metamodel;\r\n\r\n  @Input()\r\n  renderer: Flo.Renderer;\r\n\r\n  @Input()\r\n  paletteEntryPadding: dia.Size = {width: 12, height: 12};\r\n\r\n  @Input()\r\n  searchFilterPlaceHolder = 'Search...';\r\n\r\n  @Output()\r\n  onPaletteEntryDrop = new EventEmitter<Flo.DnDEvent>();\r\n\r\n  @Output()\r\n  paletteReady = new EventEmitter<boolean>();\r\n\r\n  @Output()\r\n  paletteFocus = new EventEmitter<void>();\r\n\r\n  private mouseMoveHanlder = (e: any) => this.handleDrag(e);\r\n  private mouseUpHanlder = (e: any) => this.handleMouseUp(e);\r\n\r\n  @Input()\r\n  set paletteSize(size: number) {\r\n    Logger.debug('Palette Size: ' + size);\r\n    if (this._paletteSize !== size) {\r\n      this._paletteSize = size;\r\n      if (this.palette) {\r\n        this.layout();\r\n      }\r\n    }\r\n  }\r\n\r\n  constructor(private element: ElementRef, @Inject(DOCUMENT) private document: any) {\r\n    this.paletteGraph = new joint.dia.Graph();\r\n    this.paletteGraph.set('type', Constants.PALETTE_CONTEXT);\r\n    this._filterText = '';\r\n\r\n    this.closedGroups = new Set<string>();\r\n  }\r\n\r\n  onFocus(): void {\r\n    this.paletteFocus.emit();\r\n  }\r\n\r\n  ngOnInit() {\r\n    let element = $('#palette-paper', this.element.nativeElement);\r\n    // Create the paper for the palette using the specified element view\r\n    this.palette = new joint.dia.Paper({\r\n      el: element,\r\n      gridSize: 1,\r\n      model: this.paletteGraph,\r\n      height: $(this.element.nativeElement.parentNode).height(),\r\n      width: $(this.element.nativeElement.parentNode).width(),\r\n      elementView: this.getPaletteView(this.renderer && this.renderer.getNodeView ? this.renderer.getNodeView() : joint.dia.ElementView),\r\n      interactive: false\r\n    });\r\n\r\n    this.palette.on('cell:pointerup', (cellview: dia.CellView, evt: any) => {\r\n        if (this.viewBeingDragged) {\r\n          this.trigger({\r\n            type: Flo.DnDEventType.DROP,\r\n            view: this.viewBeingDragged,\r\n            event: evt\r\n          });\r\n          this.viewBeingDragged = undefined;\r\n        }\r\n        this.clickedElement = undefined;\r\n        $('#palette-floater').remove();\r\n        if (this.floaterpaper) {\r\n          this.floaterpaper.remove();\r\n        }\r\n    });\r\n\r\n    // Toggle the header open/closed on a click\r\n    this.palette.on('cell:pointerclick', (cellview: dia.CellView, event: any) => {\r\n        // TODO [design][palette] should the user need to click on the arrow rather than anywhere on the header?\r\n        // Click position within the element would be: evt.offsetX, evt.offsetY\r\n        const cell: dia.Cell = cellview.model;\r\n        if (cell.attributes.header) {\r\n          // Toggle the header open/closed\r\n          // if (cell.get('isOpen')) {\r\n          //   this.rotateClosed(cell);\r\n          // } else {\r\n          //   this.rotateOpen(cell);\r\n          // }\r\n        }\r\n        // TODO [palette] ensure other mouse handling events do nothing for headers\r\n        // TODO [palette] move 'metadata' field to the right place (not inside attrs I think)\r\n      });\r\n\r\n    $(this.document).on('mouseup', this.mouseUpHanlder);\r\n\r\n    if (this.metamodel) {\r\n      this.metamodel.load().then(data => {\r\n        this.buildPalette(data);\r\n\r\n        // Add listener to metamodel\r\n        if (this.metamodel && this.metamodel.subscribe) {\r\n          this.metamodel.subscribe(this._metamodelListener);\r\n        }\r\n\r\n        // Add debounced listener to filter text changes\r\n        this.filterTextModel\r\n          .pipe(debounceTime(DEBOUNCE_TIME))\r\n          .subscribe((value) => this.layout());\r\n\r\n        this.initialized = true;\r\n      });\r\n    } else {\r\n      Logger.error('No Metamodel service specified for palette!');\r\n    }\r\n\r\n    this._paletteSize = this._paletteSize || $(this.element.nativeElement.parentNode).width();\r\n\r\n  }\r\n\r\n  ngOnDestroy() {\r\n      if (this.metamodel && this.metamodel.unsubscribe) {\r\n        this.metamodel.unsubscribe(this._metamodelListener);\r\n      }\r\n      $(this.document).off('mouseup', this.mouseUpHanlder);\r\n      this.palette.remove();\r\n  }\r\n\r\n  private createPaletteGroup(title: string, isOpen: boolean): dia.Element {\r\n    const paletteRenderer: Flo.PaletteRenderer = this.renderer && this.renderer.getPaletteRenderer ? this.renderer.getPaletteRenderer() : {\r\n      createGroupHeader: (titleStr: string, isOpenParam: boolean) => {\r\n        const header = new joint.shapes.flo.PaletteGroupHeader({attrs: {text: {text: titleStr}}});\r\n        if (!isOpenParam) {\r\n          header.attr({'path': {'transform': 'rotate(-90,15,13)'}});\r\n        }\r\n        return header;\r\n      },\r\n      onClose: (groupView: dia.CellView) => this.rotateClosed(groupView.model),\r\n      onOpen: (groupView: dia.CellView) => this.rotateOpen(groupView.model)\r\n    };\r\n    let newGroupHeader = paletteRenderer.createGroupHeader(title, isOpen);\r\n    if (!isOpen) {\r\n      newGroupHeader.set('isOpen', false);\r\n    }\r\n    newGroupHeader.set('header', title);\r\n\r\n    this.paletteGraph.addCell(newGroupHeader);\r\n\r\n    const view = this.palette.findViewByModel(newGroupHeader);\r\n\r\n    view.on('cell:pointerclick', () => {\r\n      if (newGroupHeader.get('isOpen')) {\r\n        if (typeof paletteRenderer.onClose === 'function') {\r\n          paletteRenderer.onClose(view).then(() => {\r\n            newGroupHeader.set('isOpen', false);\r\n            this.closedGroups.add(newGroupHeader.get('header'));\r\n            this.layout();\r\n          });\r\n        } else {\r\n          newGroupHeader.set('isOpen', false);\r\n          this.closedGroups.add(newGroupHeader.get('header'));\r\n          this.layout();\r\n        }\r\n      } else {\r\n        if (typeof paletteRenderer.onOpen === 'function') {\r\n          paletteRenderer.onOpen(view).then(() => {\r\n            newGroupHeader.set('isOpen', true);\r\n            this.closedGroups.delete(newGroupHeader.get('header'));\r\n            this.layout();\r\n          });\r\n        } else {\r\n          newGroupHeader.set('isOpen', true);\r\n          this.closedGroups.delete(newGroupHeader.get('header'));\r\n          this.layout();\r\n        }\r\n      }\r\n    });\r\n\r\n    return newGroupHeader;\r\n  }\r\n\r\n  private createPaletteEntry(title: string, metadata: Flo.ElementMetadata) {\r\n    return Shapes.Factory.createNode({\r\n      renderer: this.renderer,\r\n      paper: this.palette,\r\n      metadata: metadata\r\n    });\r\n  }\r\n\r\n  private buildPalette(metamodel: Map<string, Map<string, Flo.ElementMetadata>>) {\r\n    let startTime: number = new Date().getTime();\r\n\r\n    this.paletteReady.emit(false);\r\n    this.paletteGraph.clear();\r\n\r\n    let groupAdded: Set<string> = new Set<string>();\r\n\r\n    let parentWidth: number = this._paletteSize - Flo.SCROLLBAR_WIDTH;\r\n    Logger.debug(`Parent Width: ${parentWidth}`);\r\n\r\n    // The field closedGroups tells us which should not be shown\r\n    // Work out the list of active groups/nodes based on the filter text\r\n    this.metamodel.groups().forEach(group => {\r\n      if (metamodel && metamodel.has(group)) {\r\n        Array.from(metamodel.get(group)!.keys()).sort().forEach(name => {\r\n          let node = metamodel.get(group)!.get(name);\r\n          if (node) {\r\n              if (!groupAdded.has(group)) {\r\n                this.createPaletteGroup(group, !this.closedGroups.has(group));\r\n                groupAdded.add(group);\r\n              }\r\n              if (!(node.metadata && node.metadata.noPaletteEntry)) {\r\n                this.createPaletteEntry(name, node);\r\n              }\r\n            }\r\n        });\r\n      }\r\n    });\r\n\r\n    this.noMacthesFoundNode = new joint.shapes.flo.NoMatchesFound();\r\n    this.palette.model.addCell(this.noMacthesFoundNode);\r\n\r\n    this.layout();\r\n\r\n    this.paletteReady.emit(true);\r\n    Logger.debug('buildPalette took ' + (new Date().getTime() - startTime) + 'ms');\r\n  }\r\n\r\n  private layout() {\r\n    let startTime: number = new Date().getTime();\r\n\r\n    let filterText = this.filterText;\r\n    if (filterText) {\r\n      filterText = filterText.toLowerCase();\r\n    }\r\n\r\n    let paletteNodes: Array<dia.Cell> = [];\r\n\r\n    let parentWidth: number = this._paletteSize - Flo.SCROLLBAR_WIDTH;\r\n    Logger.debug(`Parent Width: ${parentWidth}`);\r\n\r\n    const presentGroups = new Set<string>();\r\n\r\n    this.palette.model.getCells().forEach((cell: dia.Cell) => {\r\n      const metadata: Flo.ElementMetadata = cell.get('metadata');\r\n      if (cell.get('header')) {\r\n        paletteNodes.push(cell);\r\n      } else if (metadata && metadata.group && metadata.name\r\n        && (!filterText\r\n          || metadata.group.toLocaleLowerCase().indexOf(filterText) >= 0\r\n          || metadata.name.toLocaleLowerCase().indexOf(filterText) >= 0)\r\n      ) {\r\n        if (!this.closedGroups.has(metadata.group)) {\r\n          cell.attr('./display', 'block');\r\n          cell.removeAttr('./display');\r\n          paletteNodes.push(cell);\r\n        } else {\r\n          cell.attr('./display', 'none');\r\n        }\r\n        presentGroups.add(metadata.group);\r\n      } else {\r\n        if (cell === this.noMacthesFoundNode) {\r\n\r\n        } else {\r\n          cell.attr('./display', 'none');\r\n        }\r\n      }\r\n    });\r\n\r\n    // Clean group headers\r\n    const filteredGroupHeaders: dia.Cell[] = [];\r\n    paletteNodes.forEach(cell => {\r\n      if (cell.get('header')) {\r\n        if (presentGroups.has(cell.get('header'))) {\r\n          cell.attr('./display', 'block');\r\n          cell.removeAttr('./display');\r\n          filteredGroupHeaders.push(cell);\r\n        } else {\r\n          cell.attr('./display', 'none');\r\n        }\r\n      } else {\r\n        filteredGroupHeaders.push(cell);\r\n      }\r\n    });\r\n\r\n    paletteNodes = filteredGroupHeaders;\r\n\r\n    // Check if last group is empty\r\n    const previous = paletteNodes.length > 0 ? paletteNodes[paletteNodes.length - 1] : undefined;\r\n    // If previous is a paletter header node as well then the previous header had no nodes under it and we can hide it and remove from paletteNodes aeeay\r\n    if (previous && previous.get('header') && !this.closedGroups.has(previous.get('header'))) {\r\n      paletteNodes.pop().attr('./display', 'none');\r\n    }\r\n\r\n    let cellWidth = 0, cellHeight = 0;\r\n    // Determine the size of the palette entry cell (width and height)\r\n    paletteNodes.forEach(pnode => {\r\n      if (pnode.get('metadata')?.name) {\r\n        const elementSize = this.palette.findViewByModel(pnode).getBBox();\r\n        let dimension: dia.Size = {\r\n          width: elementSize.width,\r\n          height: elementSize.height\r\n        };\r\n        if (cellWidth < dimension.width) {\r\n          cellWidth = dimension.width;\r\n        }\r\n        if (cellHeight < dimension.height) {\r\n          cellHeight = dimension.height;\r\n        }\r\n      }\r\n    });\r\n\r\n    // Adjust the palette entry cell size with paddings.\r\n    cellWidth += 2 * this.paletteEntryPadding.width;\r\n    cellHeight += 2 * this.paletteEntryPadding.height;\r\n\r\n    // Align palette entries row to be at the center\r\n    let startX: number = parentWidth >= cellWidth ? (parentWidth - Math.floor(parentWidth / cellWidth) * cellWidth) / 2 : 0;\r\n    let xpos = startX;\r\n    let ypos = 0;\r\n    let prevNode: dia.Cell;\r\n\r\n    // Layout palette entry nodes\r\n    paletteNodes.forEach(pnode => {\r\n      const elementSize = this.palette.findViewByModel(pnode).getBBox();\r\n      let dimension: dia.Size = {\r\n        width: elementSize.width,\r\n        height: elementSize.height\r\n      };\r\n      if (pnode.get('header')) { //attributes.attrs.header) {\r\n        // Palette entry header\r\n        xpos = startX;\r\n        if (ypos) {\r\n          ypos += this.paletteEntryPadding.height;\r\n        }\r\n        pnode.set('size', {width: parentWidth, height: pnode.get('size').height || 30});\r\n        pnode.set('position', {x: 0, y: ypos});\r\n        ypos += dimension.height + this.paletteEntryPadding.height;\r\n      } else {\r\n        // Palette entry element\r\n        if (xpos + cellWidth > parentWidth) {\r\n          // Not enough real estate to place entry in a row - reset x position and leave the y pos which is next line\r\n          xpos = startX;\r\n          pnode.set('position', { x: xpos + (cellWidth - dimension.width) / 2, y: ypos + (cellHeight - dimension.height) / 2});\r\n        } else {\r\n          // Enough real estate to place entry in a row - adjust y position\r\n          if (prevNode && prevNode.get('metadata')?.name) {\r\n            ypos -= cellHeight;\r\n          }\r\n          pnode.set('position', { x: xpos + (cellWidth - dimension.width) / 2, y: ypos + (cellHeight - dimension.height) / 2});\r\n        }\r\n        // increment x position and y position (can be reorganized)\r\n        xpos += cellWidth;\r\n        ypos += cellHeight;\r\n      }\r\n      prevNode = pnode;\r\n    });\r\n\r\n    this.noMacthesFoundNode.set('size', {width: parentWidth, height: this.noMacthesFoundNode.get('size').height || 30});\r\n    this.noMacthesFoundNode.set('position', {x: 0, y: 0});\r\n    if (paletteNodes.length === 0 && filterText) {\r\n      // There is a filter present but everything is filtered out\r\n      // Show no matches found node\r\n      this.noMacthesFoundNode.attr('./display', 'block');\r\n      this.noMacthesFoundNode.removeAttr('./display');\r\n      ypos = this.noMacthesFoundNode.get('size').height;\r\n    } else {\r\n      // Hide no matches node in all other cases\r\n      this.noMacthesFoundNode.attr('./display', 'none');\r\n    }\r\n\r\n    this.palette.setDimensions(parentWidth, ypos);\r\n    Logger.debug('buildPalette layout ' + (new Date().getTime() - startTime) + 'ms');\r\n\r\n  }\r\n\r\n  set filterText(text: string) {\r\n    if (this._filterText !== text) {\r\n      this._filterText = text;\r\n      this.filterTextModel.next(text);\r\n    }\r\n  }\r\n\r\n  get filterText(): string {\r\n    return this._filterText;\r\n  }\r\n\r\n  private getPaletteView(view: any): dia.Element {\r\n    let self: Palette = this;\r\n    return view.extend({\r\n      pointerdown: function(/*evt, x, y*/) {\r\n        // Remove the tooltip\r\n        // $('.node-tooltip').remove();\r\n        // TODO move metadata to the right place (not inside attrs I think)\r\n        self.clickedElement = this.model;\r\n        if (self.clickedElement && self.clickedElement.get('metadata')) {\r\n          $(self.document).on('mousemove', self.mouseMoveHanlder);\r\n        }\r\n      },\r\n      pointermove: function(/*evt, x, y*/) {\r\n        // Nothing to prevent move within the palette canvas\r\n      },\r\n      // events: {\r\n      //   // Tooltips on the palette elements\r\n      //   'mouseenter': function(evt) {\r\n      //\r\n      //     // Ignore 'mouseenter' if any other buttons are pressed\r\n      //     if (evt.buttons) {\r\n      //       return;\r\n      //     }\r\n      //\r\n      //     var model = this.model;\r\n      //     var metadata = model.get('metadata');\r\n      //     if (!metadata) {\r\n      //       return;\r\n      //     }\r\n      //\r\n      //     this.showTooltip(evt.pageX, evt.pageY);\r\n      //   },\r\n      //   // TODO bug here - if the call to get the info takes a while, the tooltip may appear after the pointer has left the cell\r\n      //   'mouseleave': function(/*evt, x,y*/) {\r\n      //     this.hideTooltip();\r\n      //   },\r\n      //   'mousemove': function(evt) {\r\n      //     this.moveTooltip(evt.pageX, evt.pageY);\r\n      //   }\r\n      // },\r\n\r\n      // showTooltip: function(x, y) {\r\n      //   var model = this.model;\r\n      //   var metadata = model.get('metadata');\r\n      //   // TODO refactor to use tooltip module\r\n      //   var nodeTooltip = document.createElement('div');\r\n      //   $(nodeTooltip).addClass('node-tooltip');\r\n      //   $(nodeTooltip).appendTo($('body')).fadeIn('fast');\r\n      //   var nodeDescription = document.createElement('div');\r\n      //   $(nodeTooltip).addClass('tooltip-description');\r\n      //   $(nodeTooltip).append(nodeDescription);\r\n      //\r\n      //   metadata.get('description').then(function(description) {\r\n      //     $(nodeDescription).text(description ? description: model.attr('metadata/name'));\r\n      //   }, function() {\r\n      //     $(nodeDescription).text(model.attr('metadata/name'));\r\n      //   });\r\n      //\r\n      //   if (!metadata.metadata || !metadata.metadata['hide-tooltip-options']) {\r\n      //     metadata.get('properties').then(function(metaProps) {\r\n      //       if (metaProps) {\r\n      //         Object.keys(metaProps).sort().forEach(function(propertyName) {\r\n      //           var optionRow = document.createElement('div');\r\n      //           var optionName = document.createElement('span');\r\n      //           var optionDescription = document.createElement('span');\r\n      //           $(optionName).addClass('node-tooltip-option-name');\r\n      //           $(optionDescription).addClass('node-tooltip-option-description');\r\n      //           $(optionName).text(metaProps[propertyName].name);\r\n      //           $(optionDescription).text(metaProps[propertyName].description);\r\n      //           $(optionRow).append(optionName);\r\n      //           $(optionRow).append(optionDescription);\r\n      //           $(nodeTooltip).append(optionRow);\r\n      //         });\r\n      //       }\r\n      //     }, function(error) {\r\n      //       if (error) {\r\n      //         $log.error(error);\r\n      //       }\r\n      //     });\r\n      //   }\r\n      //\r\n      //   var mousex = x + 10;\r\n      //   var mousey = y + 10;\r\n      //   $('.node-tooltip').css({ top: mousey, left: mousex });\r\n      // },\r\n      //\r\n      // hideTooltip: function() {\r\n      //   $('.node-tooltip').remove();\r\n      // },\r\n      //\r\n      // moveTooltip: function(x, y) {\r\n      //   var mousex = x + 10; // Get X coordinates\r\n      //   var mousey = y + 10; // Get Y coordinates\r\n      //   $('.node-tooltip').css({ top: mousey, left: mousex });\r\n      // }\r\n\r\n    });\r\n  }\r\n\r\n  private handleMouseUp(event: any) {\r\n    $(this.document).off('mousemove', this.mouseMoveHanlder);\r\n  }\r\n\r\n  private trigger(event: Flo.DnDEvent) {\r\n    this.onPaletteEntryDrop.emit(event);\r\n  }\r\n\r\n  private handleDrag(event: any) {\r\n    // TODO offsetX/Y not on firefox\r\n    // Logger.debug(\"tracking move: x=\"+event.pageX+\",y=\"+event.pageY);\r\n    // Logger.debug('Element = ' + (this.clickedElement ? this.clickedElement.attr('metadata/name'): 'null'));\r\n    if (this.clickedElement && this.clickedElement.get('metadata')) {\r\n      if (!this.viewBeingDragged) {\r\n\r\n        let dataOfClickedElement: Flo.ElementMetadata = this.clickedElement.get('metadata');\r\n        // custom div if not already built.\r\n        $('<div>', {\r\n          id: 'palette-floater'\r\n        }).appendTo($('body'));\r\n\r\n        let floatergraph: dia.Graph = new joint.dia.Graph();\r\n        floatergraph.set('type', Constants.FEEDBACK_CONTEXT);\r\n\r\n        const parent = $('#palette-floater');\r\n\r\n        this.floaterpaper = new joint.dia.Paper({\r\n          el: $('#palette-floater'),\r\n          elementView: this.renderer && this.renderer.getNodeView ? this.renderer.getNodeView() : joint.dia.ElementView,\r\n          gridSize: 10,\r\n          model: floatergraph,\r\n          height: parent.height(),\r\n          width: parent.width(),\r\n          validateMagnet: () => false,\r\n          validateConnection: () => false\r\n        });\r\n\r\n        // TODO float thing needs to be bigger otherwise icon label is missing\r\n        // Initiative drag and drop - create draggable element\r\n        let floaternode: dia.Element = Shapes.Factory.createNode({\r\n          'renderer': this.renderer,\r\n          'paper': this.floaterpaper,\r\n          'graph': floatergraph,\r\n          'metadata': dataOfClickedElement\r\n        });\r\n\r\n        // Only node view expected\r\n        this.viewBeingDragged = this.floaterpaper.findViewByModel(floaternode);\r\n\r\n        const resizeObserver = new ResizeObserver(() => {\r\n          if (this.viewBeingDragged) {\r\n            const box: dia.BBox = (<dia.ElementView>this.viewBeingDragged).getBBox();\r\n            const size: dia.Size = (<dia.ElementView>this.viewBeingDragged).model.size();\r\n            // Account for ports. Especially on the left side. Box includes ports, size does not\r\n            parent.css('width', box.width + box.width - size.width);\r\n            parent.css('height', box.height + box.height - size.height);\r\n            floaternode.position(box.width - size.width, box.height - size.height);\r\n          }\r\n        });\r\n\r\n        resizeObserver.observe(this.viewBeingDragged.el);\r\n\r\n        let box: dia.BBox = (<dia.ElementView>this.viewBeingDragged).getBBox();\r\n        let size: dia.Size = floaternode.size();\r\n        // Account for node real size including ports\r\n        parent.css('width', box.width + box.width - size.width);\r\n        parent.css('height', box.height + box.height - size.height);\r\n        floaternode.position(box.width - size.width, box.height - size.height);\r\n        parent.offset({left: event.pageX + 5, top: event.pageY + 5});\r\n      } else {\r\n        $('#palette-floater').offset({left: event.pageX + 5, top: event.pageY + 5});\r\n        this.trigger({\r\n          type: Flo.DnDEventType.DRAG,\r\n          view: this.viewBeingDragged,\r\n          event: event\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  /*\r\n   * Modify the rotation of the arrow in the header from horizontal(closed) to vertical(open)\r\n   */\r\n  private rotateOpen(element: dia.Cell): Promise<void> {\r\n    return new Promise(resolve => {\r\n      setTimeout(() => this.doRotateOpen(element, 90).then(() => {\r\n        resolve();\r\n      }));\r\n    });\r\n  }\r\n\r\n  private doRotateOpen(element: dia.Cell, angle: number): Promise<void> {\r\n    return new Promise(resolve => {\r\n      angle -= 10;\r\n      element.attr({'path': {'transform': 'rotate(-' + angle + ',15,13)'}});\r\n      if (angle <= 0) {\r\n        resolve();\r\n      } else {\r\n        setTimeout(() => this.doRotateOpen(element, angle).then(() => resolve()), 10);\r\n      }\r\n    });\r\n  }\r\n\r\n  private doRotateClose(element: dia.Cell, angle: number): Promise<void> {\r\n    return new Promise(resolve => {\r\n      angle += 10;\r\n      element.attr({'path': {'transform': 'rotate(-' + angle + ',15,13)'}});\r\n      if (angle >= 90) {\r\n        resolve();\r\n      } else {\r\n        setTimeout(() => this.doRotateClose(element, angle).then(() => resolve()), 10);\r\n      }\r\n    });\r\n  }\r\n\r\n  // TODO better name for this function as this does the animation *and* updates the palette\r\n\r\n  /*\r\n   * Modify the rotation of the arrow in the header from vertical(open) to horizontal(closed)\r\n   */\r\n  private rotateClosed(element: dia.Cell): Promise<void> {\r\n    return new Promise(resolve => {\r\n      setTimeout(() => {\r\n        this.doRotateClose(element, 0).then(() => {\r\n          resolve();\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n}\r\n","<div id=\"palette-filter\" class=\"palette-filter\">\r\n  <label class=\"palette-filter-label\" for=\"palette-filter-textfield\">\r\n    <input type=\"search\" id=\"palette-filter-textfield\" class=\"palette-filter-textfield\" [(ngModel)]=\"filterText\" (focus)=\"onFocus()\" [placeholder]=\"searchFilterPlaceHolder\"/>\r\n  </label>\r\n</div>\r\n<div id=\"palette-paper-container\">\r\n  <div id=\"palette-paper\" class=\"palette-paper\" style=\"overflow:hidden;\"></div>\r\n</div>\r\n\r\n","import { dia } from 'jointjs';\r\nimport { Flo } from '../shared/flo-common';\r\nimport * as _ from 'lodash';\r\nconst joint: any = Flo.joint;\r\nimport * as _$ from 'jquery';\r\nimport { Event } from 'jquery';\r\nconst $: any = _$;\r\n\r\n\r\nexport class Utils {\r\n\r\n  static fanRoute(graph: dia.Graph, cell: dia.Cell) {\r\n    if (cell instanceof joint.dia.Element) {\r\n\r\n      const links = graph.getConnectedLinks(cell);\r\n\r\n      const groupsOfOverlappingLinks = _.groupBy(links, (link: dia.Link) => {\r\n        // the key of the group is the model id of the link's source or target, but not our cell id.\r\n        const sourceId = link.get('source').id;\r\n        const targetId = link.get('target').id;\r\n        return cell.id !== sourceId ? sourceId : targetId;\r\n      });\r\n\r\n      _.each(groupsOfOverlappingLinks, (group: any, key: string) => {\r\n        // If the member of the group has both source and target model adjust vertices.\r\n        let toRoute: any = {};\r\n        if (key !== undefined) {\r\n          group.forEach((link: dia.Link) => {\r\n            if (link.get('source').id === cell.get('id') && link.get('target').id) {\r\n              toRoute[link.get('target').id] = link;\r\n            } else if (link.get('target').id === cell.get('id') && link.get('source').id) {\r\n              toRoute[link.get('source').id] = link;\r\n            }\r\n          });\r\n          Object.keys(toRoute).forEach(k => {\r\n            Utils.fanRoute(graph, toRoute[k]);\r\n          });\r\n        }\r\n      });\r\n\r\n    } else if (cell instanceof joint.dia.Link) {\r\n      const link = <joint.dia.Link> cell;\r\n      // The cell is a link. Let's find its source and target models.\r\n      let src = link.source() || link.previous('source');\r\n      let trg = link.target() || cell.previous('target');\r\n\r\n      // If one of the ends is not a model, the link has no siblings.\r\n      if (!src.id || !trg.id) { return; }\r\n\r\n      const siblings: dia.Link[] = graph.getLinks().filter((sibling: dia.Link) => {\r\n\r\n        const _src = sibling.source();\r\n        const _trg = sibling.target();\r\n        const vertices = sibling.get('vertices');\r\n        const fanRouted = !vertices || vertices.length === 0 || sibling.get('fanRouted');\r\n\r\n        return ((_.isEqual(_src, src) && _.isEqual(_trg, trg)) || (_.isEqual(_src, trg) && _.isEqual(_trg, src))) && fanRouted;\r\n\r\n      });\r\n\r\n      switch (siblings.length) {\r\n\r\n        case 0:\r\n          // The link was removed and had no siblings.\r\n          break;\r\n\r\n        case 1:\r\n          // There is only one link between the source and target. No vertices needed.\r\n          let vertices = cell.get('vertices');\r\n          if (vertices && vertices.length && cell.get('fanRouted')) {\r\n            cell.unset('vertices');\r\n          }\r\n          break;\r\n\r\n        default:\r\n\r\n          // There is more than one siblings. We need to create vertices.\r\n\r\n          // First of all we'll find the middle point of the link.\r\n          let source = link.getSourceElement();\r\n          let target = link.getTargetElement();\r\n\r\n          if (!source || !target) {\r\n            // When clearing the graph it may happen that some nodes are gone and some are left\r\n            return;\r\n          }\r\n\r\n          let srcCenter = source.getBBox().center();\r\n          let trgCenter = target.getBBox().center();\r\n          let midPoint = joint.g.line(srcCenter, trgCenter).midpoint();\r\n\r\n          // Then find the angle it forms.\r\n          let theta = srcCenter.theta(trgCenter);\r\n\r\n          // This is the maximum distance between links\r\n          let gap = 20;\r\n\r\n          siblings.forEach((sibling: dia.Link, index: number) => {\r\n\r\n            // We want the offset values to be calculated as follows 0, 20, 20, 40, 40, 60, 60 ..\r\n            let offset = gap * Math.ceil(index / 2);\r\n\r\n            // Now we need the vertices to be placed at points which are 'offset' pixels distant\r\n            // from the first link and forms a perpendicular angle to it. And as index goes up\r\n            // alternate left and right.\r\n            //\r\n            //  ^  odd indexes\r\n            //  |\r\n            //  |---->  index 0 line (straight line between a source center and a target center.\r\n            //  |\r\n            //  v  even indexes\r\n            let sign = index % 2 ? 1 : -1;\r\n            let angle = joint.g.toRad(theta + sign * 90);\r\n\r\n            // We found the vertex.\r\n            let vertex = joint.g.point.fromPolar(offset, angle, midPoint);\r\n\r\n            sibling.set('fanRouted', true);\r\n            (<any>sibling).set('vertices', [{ x: vertex.x, y: vertex.y }], {'fanRouted': true});\r\n          });\r\n      }\r\n    }\r\n\r\n  }\r\n\r\n  static isCustomPaperEvent(args: any): boolean {\r\n    return args.length === 5 &&\r\n      _.isString(args[0]) &&\r\n      (args[0].indexOf('link:') === 0 || args[0].indexOf('element:') === 0) &&\r\n      args[1] instanceof Event &&\r\n      args[2] instanceof joint.dia.CellView &&\r\n      _.isNumber(args[3]) &&\r\n      _.isNumber(args[4]);\r\n  }\r\n\r\n}\r\n","import {Directive, Input, Output, EventEmitter, Inject, ElementRef, OnInit, OnDestroy} from '@angular/core';\r\nimport {DOCUMENT} from '@angular/common'\r\nimport { fromEvent } from 'rxjs';\r\nimport { sampleTime } from 'rxjs/operators';\r\n\r\nimport { CompositeDisposable, Disposable } from 'ts-disposables';\r\nimport $ from 'jquery';\r\n\r\n@Directive({\r\n  selector: '[resizer]',\r\n  host: {'(mousedown)': 'startDrag()'}\r\n})\r\nexport class ResizerDirective implements OnInit, OnDestroy {\r\n  private dragInProgress = false;\r\n  private vertical = true;\r\n  private first: string;\r\n  private second: string;\r\n  private _size: number;\r\n  private _splitSize: number;\r\n  private _subscriptions = new CompositeDisposable();\r\n  @Input()\r\n  maxSplitSize: number;\r\n\r\n  @Output()\r\n  sizeChange = new EventEmitter<number>();\r\n\r\n  private mouseMoveHandler = (e: any) => {\r\n    if (this.dragInProgress) {\r\n      this.mousemove(e);\r\n    }\r\n  };\r\n\r\n  @Input()\r\n  set splitSize(splitSize: number) {\r\n\r\n    if (this.maxSplitSize && splitSize > this.maxSplitSize) {\r\n      splitSize = this.maxSplitSize;\r\n    }\r\n\r\n    if (this.vertical) {\r\n      // Handle vertical resizer\r\n      $(this.element.nativeElement).css({\r\n        left: splitSize + 'px'\r\n      });\r\n\r\n      $(this.element.nativeElement).parent().find(this.first).css({\r\n        width: splitSize + 'px'\r\n      });\r\n      $(this.element.nativeElement).parent().find(this.second).css({\r\n        left: (splitSize + this._size) + 'px'\r\n      });\r\n    } else {\r\n      // Handle horizontal resizer\r\n      $(this.element.nativeElement).css({\r\n        bottom: splitSize + 'px'\r\n      });\r\n\r\n      $(this.element.nativeElement).parent().find(this.first).css({\r\n        bottom: (splitSize + this._size) + 'px'\r\n      });\r\n      $(this.element.nativeElement).parent().find(this.second).css({\r\n        height: splitSize + 'px'\r\n      });\r\n    }\r\n\r\n    this._splitSize = splitSize;\r\n\r\n    // Update the local field\r\n    this.sizeChange.emit(splitSize);\r\n  }\r\n\r\n  @Input()\r\n  set resizerWidth(width: number) {\r\n    this._size = width;\r\n    this.vertical = true;\r\n  }\r\n\r\n  @Input()\r\n  set resizerHeight(height: number) {\r\n    this._size = height;\r\n    this.vertical = false;\r\n  }\r\n\r\n  @Input()\r\n  set resizerLeft(first: string) {\r\n    this.first = first;\r\n  }\r\n\r\n  @Input()\r\n  set resizerTop(first: string) {\r\n    this.first = first;\r\n  }\r\n\r\n  @Input()\r\n  set resizerRight(second: string) {\r\n    this.second = second;\r\n  }\r\n\r\n  @Input()\r\n  set resizerBottom(second: string) {\r\n    this.second = second;\r\n  }\r\n\r\n  constructor(private element: ElementRef, @Inject(DOCUMENT) private document: any) {\r\n  }\r\n\r\n  startDrag() {\r\n    this.dragInProgress = true;\r\n  }\r\n\r\n  private mousemove(event: any) {\r\n    let size: number;\r\n    if (this.vertical) {       // Handle vertical resizer. Calculate new size relative to palette container DOM node \r\n      size = event.pageX - $(this.first).offset().left;\r\n    } else {\r\n      // Handle horizontal resizer Calculate new size relative to palette container DOM node \r\n      size = window.innerHeight - event.pageY - $(this.second).offset().top;\r\n    }\r\n    this.splitSize = size;\r\n  }\r\n\r\n  ngOnInit() {\r\n    // Need to set left and right elements width and fire events on init when DOM is built \r\n    this.splitSize = this._splitSize;\r\n\r\n    let subscription1 = fromEvent($(this.document).get(0), 'mousemove')\r\n      .pipe(sampleTime(300))\r\n      .subscribe(this.mouseMoveHandler);\r\n    this._subscriptions.add(Disposable.create(() => subscription1.unsubscribe()));\r\n    let subscription2 = fromEvent($(this.document).get(0), 'mouseup')\r\n      .subscribe(e => {\r\n        if (this.dragInProgress) {\r\n          this.mousemove(e);\r\n          this.dragInProgress = false;\r\n        }\r\n      });\r\n    this._subscriptions.add(Disposable.create(() => subscription2.unsubscribe()));\r\n\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._subscriptions.dispose();\r\n  }\r\n} \r\n","import {\r\n  Component,\r\n  ElementRef, EventEmitter,\r\n  HostListener, OnInit,\r\n  Output,\r\n  ViewChild,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'flo-editor-paper',\r\n  template: `\r\n    <div #paper tabindex=\"0\" id=\"paper-container\">\r\n      <ng-content></ng-content>\r\n    </div>`,\r\n  styleUrls: ['./editor.component.scss'],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class PaperComponent implements OnInit {\r\n\r\n  @ViewChild('paper', { static: true }) paperElement: ElementRef;\r\n\r\n  @Output()\r\n  onDelete = new EventEmitter<number>();\r\n\r\n  @Output()\r\n  onProperties = new EventEmitter<number>();\r\n\r\n  @Output()\r\n  onBlur = new EventEmitter<boolean>();\r\n\r\n  @HostListener('click')\r\n  click() {\r\n    this.paperElement.nativeElement.focus();\r\n  }\r\n\r\n  @HostListener('mousedown')\r\n  mousedown() {\r\n    this.paperElement.nativeElement.focus();\r\n  }\r\n\r\n  @HostListener('keydown.backspace')\r\n  backspaceHandle() {\r\n    this.onDelete.emit();\r\n  }\r\n\r\n  @HostListener('keydown.delete')\r\n  deleteHandle() {\r\n    this.onDelete.emit();\r\n  }\r\n\r\n  @HostListener('keydown.o')\r\n  oHandle() {\r\n    this.onProperties.emit();\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    const onBlur = this.onBlur;\r\n    this.paperElement.nativeElement.addEventListener('blur', () => {\r\n      onBlur.emit();\r\n    });\r\n  }\r\n\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  ElementRef,\r\n  EventEmitter,\r\n  OnInit,\r\n  OnDestroy,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { dia } from 'jointjs';\r\nimport { Flo } from '../shared/flo-common';\r\nimport { Shapes, Constants } from '../shared/shapes';\r\nimport { Utils } from './editor-utils';\r\nimport { CompositeDisposable, Disposable } from 'ts-disposables';\r\nimport $ from 'jquery';\r\nimport isEqual from 'lodash/isEqual';\r\nimport partial from 'lodash/partial';\r\n\r\nimport { Observable, Subject, BehaviorSubject } from 'rxjs';\r\nimport { Logger } from '../shared/logger';\r\nconst joint: any = Flo.joint;\r\n\r\nexport interface VisibilityState {\r\n  visibility: string;\r\n  children: Array<VisibilityState>;\r\n}\r\n\r\nconst SCROLLBAR_SIZE = 17;\r\n\r\n@Component({\r\n  selector: 'flo-editor',\r\n  templateUrl: './editor.component.html',\r\n  styleUrls: ['./editor.component.scss'],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class EditorComponent implements OnInit, OnDestroy {\r\n\r\n  /**\r\n   * Joint JS Graph object representing the Graph model\r\n   */\r\n  private graph: dia.Graph;\r\n\r\n  /**\r\n   * Joint JS Paper object representing the canvas control containing the graph view\r\n   */\r\n  private paper: dia.Paper;\r\n\r\n  /**\r\n   * Currently selected element\r\n   */\r\n  private _selection: dia.CellView;\r\n\r\n  /**\r\n   * Current DnD descriptor for frag in progress\r\n   */\r\n  private highlighted: Flo.DnDDescriptor;\r\n\r\n  /**\r\n   * Flag specifying whether the Flo-Editor is in read-only mode.\r\n   */\r\n  private _readOnlyCanvas = false;\r\n\r\n  /**\r\n   * Grid size\r\n   */\r\n  private _gridSize = 1;\r\n\r\n  private _hiddenPalette = false;\r\n\r\n  private paletteSizeValue = 170;\r\n\r\n  private editorContext: Flo.EditorContext;\r\n\r\n  private textToGraphEventEmitter = new EventEmitter<void>();\r\n\r\n  private graphToTextEventEmitter = new EventEmitter<void>();\r\n\r\n  private _graphToTextSyncEnabled = true;\r\n\r\n  private validationEventEmitter = new EventEmitter<void>();\r\n\r\n  private _disposables = new CompositeDisposable();\r\n\r\n  private _dslText = '';\r\n\r\n  private textToGraphConversionCompleted = new Subject<void>();\r\n\r\n  private graphToTextConversionCompleted = new Subject<void>();\r\n\r\n  private paletteReady = new BehaviorSubject<boolean>(false);\r\n\r\n  /**\r\n   * Metamodel. Retrieves metadata about elements that can be shown in Flo\r\n   */\r\n  @Input()\r\n  metamodel: Flo.Metamodel;\r\n\r\n  /**\r\n   * Renders elements.\r\n   */\r\n  @Input()\r\n  renderer: Flo.Renderer;\r\n\r\n  /**\r\n   * Editor. Provides domain specific editing capabilities on top of standard Flo features\r\n   */\r\n  @Input()\r\n  editor: Flo.Editor;\r\n\r\n  /**\r\n   * Size (Width) of the palette\r\n   */\r\n  @Input()\r\n  get paletteSize(): number {\r\n    return this.paletteSizeValue;\r\n  }\r\n\r\n  @Output()\r\n  paletteSizeChange = new EventEmitter<number>();\r\n  set paletteSize(newSize: number) {\r\n    this.paletteSizeValue = newSize;\r\n    this.paletteSizeChange.emit(newSize);\r\n  }\r\n\r\n  @Input()\r\n  searchFilterPlaceHolder = 'Search...';\r\n\r\n  /**\r\n   * Palette entry padding\r\n   */\r\n  @Input()\r\n  paletteEntryPadding: dia.Size;\r\n\r\n  /**\r\n   * Min zoom percent value\r\n   */\r\n  @Input()\r\n  minZoom = 5;\r\n\r\n  /**\r\n   * Max zoom percent value\r\n   */\r\n  @Input()\r\n  maxZoom = 400;\r\n\r\n  /**\r\n   * Zoom percent increment/decrement step\r\n   */\r\n  @Input()\r\n  zoomStep = 5;\r\n\r\n  @Input()\r\n  paperPadding = 0;\r\n\r\n  @Output()\r\n  floApi = new EventEmitter<Flo.EditorContext>();\r\n\r\n  @Output()\r\n  validationMarkers = new EventEmitter<Map<string | number, Array<Flo.Marker>>>();\r\n\r\n  @Output()\r\n  contentValidated = new EventEmitter<boolean>();\r\n\r\n  @Output()\r\n  private dslChange = new EventEmitter<string>();\r\n\r\n  @Output()\r\n  onProperties = new EventEmitter<any>();\r\n\r\n  private _resizeHandler = () => this.autosizePaper();\r\n\r\n\r\n  constructor(private element: ElementRef) {\r\n    let self = this;\r\n    this.editorContext = new (class DefaultRunnableContext implements Flo.EditorContext {\r\n\r\n      set zoomPercent(percent: number) {\r\n        self.zoomPercent = percent;\r\n      }\r\n\r\n      get zoomPercent(): number {\r\n        return self.zoomPercent;\r\n      }\r\n\r\n      set noPalette(noPalette: boolean) {\r\n        self.noPalette = noPalette;\r\n      }\r\n\r\n      get noPalette(): boolean {\r\n        return self.noPalette;\r\n      }\r\n\r\n      set gridSize(gridSize: number) {\r\n        self.gridSize = gridSize;\r\n      }\r\n\r\n      get gridSize(): number {\r\n        return self.gridSize;\r\n      }\r\n\r\n      set readOnlyCanvas(readOnly: boolean) {\r\n        self.readOnlyCanvas = readOnly;\r\n      }\r\n\r\n      get readOnlyCanvas(): boolean {\r\n        return self.readOnlyCanvas;\r\n      }\r\n\r\n      setDsl(dsl: string) {\r\n        self.dsl = dsl;\r\n      }\r\n\r\n      updateGraph(): Promise<any> {\r\n        return self.updateGraphRepresentation();\r\n      }\r\n\r\n      updateText(): Promise<any> {\r\n        return self.updateTextRepresentation();\r\n      }\r\n\r\n      performLayout(): Promise<void> {\r\n        return self.doLayout();\r\n      }\r\n\r\n      clearGraph(): Promise<void> {\r\n        self.selection = undefined;\r\n        self.graph.clear();\r\n        if (self.metamodel && self.metamodel.load && self.editor && self.editor.setDefaultContent) {\r\n          return self.metamodel.load().then(data => {\r\n            self.editor.setDefaultContent(this, data);\r\n            if (!self.graphToTextSync) {\r\n              return self.updateTextRepresentation();\r\n            }\r\n          });\r\n        } else {\r\n          if (!self.graphToTextSync) {\r\n            return self.updateTextRepresentation();\r\n          }\r\n        }\r\n      }\r\n\r\n      getGraph() {\r\n        return self.graph;\r\n      }\r\n\r\n      getPaper() {\r\n        return self.paper;\r\n      }\r\n\r\n      get graphToTextSync(): boolean {\r\n        return self.graphToTextSync;\r\n      }\r\n\r\n      set graphToTextSync(sync: boolean) {\r\n        self.graphToTextSync = sync;\r\n      }\r\n\r\n      getMinZoom() {\r\n        return self.minZoom;\r\n      }\r\n\r\n      getMaxZoom() {\r\n        return self.maxZoom;\r\n      }\r\n\r\n      getZoomStep() {\r\n        return self.zoomStep;\r\n      }\r\n\r\n      fitToPage() {\r\n        self.fitToPage();\r\n      }\r\n\r\n      createNode(metadata: Flo.ElementMetadata, props?: Map<string, any>, position?: dia.Point): dia.Element {\r\n        return self.createNode(metadata, props, position);\r\n      }\r\n\r\n      createLink(source: Flo.LinkEnd, target: Flo.LinkEnd, metadata?: Flo.ElementMetadata, props?: Map<string, any>): dia.Link {\r\n        return self.createLink(source, target, metadata, props);\r\n      }\r\n\r\n      get selection(): dia.CellView {\r\n        return self.selection;\r\n      }\r\n\r\n      set selection(newSelection: dia.CellView) {\r\n        self.selection = newSelection;\r\n      }\r\n\r\n      deleteSelectedNode(): void {\r\n        self.deleteSelected();\r\n      }\r\n\r\n      delete(cell: dia.Cell) {\r\n        self.delete(cell);\r\n      }\r\n\r\n      get textToGraphConversionObservable(): Observable<void> {\r\n        return self.textToGraphConversionCompleted;\r\n      }\r\n\r\n      get graphToTextConversionObservable(): Observable<void> {\r\n        return self.graphToTextConversionCompleted;\r\n      }\r\n\r\n      get paletteReady(): Observable<boolean> {\r\n        return self.paletteReady;\r\n      }\r\n\r\n    })();\r\n  }\r\n\r\n  onPropertiesHandle() {\r\n    if (this.editorContext.selection) {\r\n      this.onProperties.emit(this.editorContext.selection.model)\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.initGraph();\r\n\r\n    this.initPaper();\r\n\r\n    this.initGraphListeners();\r\n\r\n    this.initPaperListeners();\r\n\r\n    this.initMetamodel();\r\n\r\n    $(window).on('resize', this._resizeHandler);\r\n    this._disposables.add(Disposable.create(() => $(window).off('resize', this._resizeHandler)));\r\n\r\n    /*\r\n     * Execute resize to get the right size for the SVG element on the editor canvas.\r\n     * Executed via timeout to let angular render the DOM first and elements to have the right width and height\r\n     */\r\n    window.setTimeout(this._resizeHandler);\r\n\r\n    this.floApi.emit(this.editorContext);\r\n\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._disposables.dispose();\r\n  }\r\n\r\n  deleteSelected() {\r\n    if (this.selection) {\r\n      this.delete(this.selection.model);\r\n    }\r\n  }\r\n\r\n  delete(cell: dia.Cell) {\r\n    this.graph.trigger('startDeletion', cell);\r\n  }\r\n\r\n  get noPalette(): boolean {\r\n    return this._hiddenPalette;\r\n  }\r\n\r\n  set noPalette(hidden: boolean) {\r\n    this._hiddenPalette = hidden;\r\n    // If palette is not shown ensure that canvas starts from the left==0!\r\n    if (hidden) {\r\n      $('#paper-container', this.element.nativeElement).css('left', 0);\r\n    }\r\n  }\r\n\r\n  get graphToTextSync(): boolean {\r\n    return this._graphToTextSyncEnabled;\r\n  }\r\n\r\n  set graphToTextSync(sync: boolean) {\r\n    this._graphToTextSyncEnabled = sync;\r\n    // Try commenting the sync out. Just set the flag but don't kick off graph->text conversion\r\n    // this.performGraphToTextSyncing();\r\n  }\r\n\r\n  private performGraphToTextSyncing() {\r\n    if (this._graphToTextSyncEnabled) {\r\n      this.graphToTextEventEmitter.emit();\r\n    }\r\n  }\r\n\r\n  createHandle(element: dia.CellView, kind: string, action: () => void, location: dia.Point): dia.Element {\r\n    if (!location) {\r\n      let bbox: any = (<any>element.model).getBBox();\r\n      location = bbox.origin().offset(bbox.width / 2, bbox.height / 2);\r\n    }\r\n    let handle = Shapes.Factory.createHandle({\r\n      renderer: this.renderer,\r\n      paper: this.paper,\r\n      parent: element.model,\r\n      kind: kind,\r\n      position: location\r\n    });\r\n    const view: dia.ElementView = this.paper.findViewByModel(handle);\r\n    view.on('cell:pointerdown', () => {\r\n      if (action) {\r\n        action();\r\n      }\r\n    });\r\n    view.on('cell:mouseover', () => {\r\n      handle.attr('image/filter', {\r\n        name: 'dropShadow',\r\n        args: {dx: 1, dy: 1, blur: 1, color: 'black'}\r\n      });\r\n    });\r\n    view.on('cell:mouseout', () => {\r\n      handle.removeAttr('image/filter');\r\n    });\r\n\r\n    view.setInteractivity(false);\r\n\r\n    return handle;\r\n  }\r\n\r\n  removeEmbeddedChildrenOfType(element: dia.Cell, types: Array<string>): void {\r\n    let embeds = element.getEmbeddedCells();\r\n    for (let i = 0; i < embeds.length; i++) {\r\n      if (types.indexOf(embeds[i].get('type')) >= 0) {\r\n        embeds[i].remove();\r\n      }\r\n    }\r\n  }\r\n\r\n  get selection(): dia.CellView {\r\n    return this._selection;\r\n  }\r\n\r\n  set selection(newSelection: dia.CellView) {\r\n    if (newSelection && (newSelection.model.get('type') === joint.shapes.flo.DECORATION_TYPE || newSelection.model.get('type') === joint.shapes.flo.HANDLE_TYPE)) {\r\n      newSelection = this.paper.findViewByModel(this.graph.getCell(newSelection.model.get('parent')));\r\n    }\r\n    if (newSelection && (!newSelection.model.get('metadata') || newSelection.model.get('metadata')?.metadata?.unselectable)) {\r\n      newSelection = undefined;\r\n    }\r\n    if (newSelection !== this._selection) {\r\n      if (this._selection) {\r\n        const elementview = this.paper.findViewByModel(this._selection.model);\r\n        if (elementview) { // May have been removed from the graph\r\n          this.removeEmbeddedChildrenOfType(elementview.model, joint.shapes.flo.HANDLE_TYPE);\r\n          elementview.unhighlight();\r\n        }\r\n      }\r\n      if (newSelection) {\r\n        newSelection.highlight();\r\n        if (this.editor && this.editor.createHandles) {\r\n          this.editor.createHandles(this.editorContext, (owner: dia.CellView, kind: string, action: () => void, location: dia.Point) => this.createHandle(owner, kind, action, location), newSelection);\r\n        }\r\n      }\r\n      this._selection = newSelection;\r\n    }\r\n  }\r\n\r\n  get readOnlyCanvas(): boolean {\r\n    return this._readOnlyCanvas;\r\n  }\r\n\r\n  set readOnlyCanvas(value: boolean) {\r\n    if (this._readOnlyCanvas === value) {\r\n      // Nothing to do\r\n      return\r\n    }\r\n\r\n    if (value) {\r\n      this.selection = undefined;\r\n    }\r\n    if (this.graph) {\r\n      this.graph.getLinks().forEach((link: dia.Link) => {\r\n        if (value) {\r\n            link.attr('.link-tools/display', 'none');\r\n            link.attr('.marker-vertices/display', 'none');\r\n            link.attr('.connection-wrap/display', 'none');\r\n          } else {\r\n            link.removeAttr('.link-tools/display');\r\n            if (this.editor && this.editor.allowLinkVertexEdit) {\r\n              link.removeAttr('.marker-vertices/display');\r\n            }\r\n            link.removeAttr('.connection-wrap/display');\r\n          }\r\n        });\r\n      }\r\n    this._readOnlyCanvas = value;\r\n  }\r\n\r\n  /**\r\n   * Displays graphical feedback for the drag and drop in progress based on current drag and drop descriptor object\r\n   *\r\n   * @param dragDescriptor DnD info object. Has on info on graph node being dragged (drag source) and what it is\r\n   * being dragged over at the moment (drop target)\r\n   */\r\n  showDragFeedback(dragDescriptor: Flo.DnDDescriptor): void {\r\n    if (this.editor && this.editor.showDragFeedback) {\r\n      this.editor.showDragFeedback(this.editorContext, dragDescriptor);\r\n    } else {\r\n      let magnet: SVGElement;\r\n      if (dragDescriptor.source && dragDescriptor.source.view) {\r\n        joint.V(dragDescriptor.source.view.el).addClass('dnd-source-feedback');\r\n        if (dragDescriptor.source.cssClassSelector) {\r\n          magnet = Flo.findMagnetByClass(dragDescriptor.source.view, dragDescriptor.source.cssClassSelector);\r\n          if (magnet) {\r\n            joint.V(magnet).addClass('dnd-source-feedback');\r\n          }\r\n        }\r\n      }\r\n      if (dragDescriptor.target && dragDescriptor.target.view) {\r\n        joint.V(dragDescriptor.target.view.el).addClass('dnd-target-feedback');\r\n        if (dragDescriptor.target.cssClassSelector) {\r\n          magnet = Flo.findMagnetByClass(dragDescriptor.target.view, dragDescriptor.target.cssClassSelector);\r\n          if (magnet) {\r\n            joint.V(magnet).addClass('dnd-target-feedback');\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Hides graphical feedback for the drag and drop in progress based on current drag and drop descriptor object\r\n   *\r\n   * @param dragDescriptor DnD info object. Has on info on graph node being dragged (drag source) and what it is\r\n   * being dragged over at the moment (drop target)\r\n   */\r\n  hideDragFeedback(dragDescriptor: Flo.DnDDescriptor): void {\r\n    if (this.editor && this.editor.hideDragFeedback) {\r\n      this.editor.hideDragFeedback(this.editorContext, dragDescriptor);\r\n    } else {\r\n      let magnet: SVGElement;\r\n      if (dragDescriptor.source && dragDescriptor.source.view) {\r\n        joint.V(dragDescriptor.source.view.el).removeClass('dnd-source-feedback');\r\n        if (dragDescriptor.source.cssClassSelector) {\r\n          magnet = Flo.findMagnetByClass(dragDescriptor.source.view, dragDescriptor.source.cssClassSelector);\r\n          if (magnet) {\r\n            joint.V(magnet).removeClass('dnd-source-feedback');\r\n          }\r\n        }\r\n      }\r\n      if (dragDescriptor.target && dragDescriptor.target.view) {\r\n        joint.V(dragDescriptor.target.view.el).removeClass('dnd-target-feedback');\r\n        if (dragDescriptor.target.cssClassSelector) {\r\n          magnet = Flo.findMagnetByClass(dragDescriptor.target.view, dragDescriptor.target.cssClassSelector);\r\n          if (magnet) {\r\n            joint.V(magnet).removeClass('dnd-target-feedback');\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the new DnD info object - the descriptor for DnD\r\n   *\r\n   * @param dragDescriptor DnD info object. Has on info on graph node being dragged (drag source) and what it is\r\n   * being dragged over at the moment (drop target)\r\n   */\r\n  setDragDescriptor(dragDescriptor?: Flo.DnDDescriptor): void {\r\n    if (this.highlighted === dragDescriptor) {\r\n      return;\r\n    }\r\n    if (this.highlighted && dragDescriptor && isEqual(this.highlighted.sourceComponent, dragDescriptor.sourceComponent)) {\r\n      if (this.highlighted.source === dragDescriptor.source && this.highlighted.target === dragDescriptor.target) {\r\n        return;\r\n      }\r\n      if (this.highlighted.source &&\r\n        dragDescriptor.source &&\r\n        this.highlighted.target &&\r\n        dragDescriptor.target &&\r\n        this.highlighted.source.view.model === dragDescriptor.source.view.model &&\r\n        this.highlighted.source.cssClassSelector === dragDescriptor.source.cssClassSelector &&\r\n        this.highlighted.target.view.model === dragDescriptor.target.view.model &&\r\n        this.highlighted.target.cssClassSelector === dragDescriptor.target.cssClassSelector) {\r\n        return;\r\n      }\r\n    }\r\n    if (this.highlighted) {\r\n      this.hideDragFeedback(this.highlighted);\r\n    }\r\n    this.highlighted = dragDescriptor;\r\n    if (this.highlighted) {\r\n      this.showDragFeedback(this.highlighted);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles DnD events when a node is being dragged over canvas\r\n   *\r\n   * @param draggedView The Joint JS view object being dragged\r\n   * @param targetUnderMouse The Joint JS view under mouse cursor\r\n   * @param x X coordinate of the mouse on the canvas\r\n   * @param y Y coordinate of the mosue on the canvas\r\n   * @param context DnD context (palette or canvas)\r\n   */\r\n  handleNodeDragging(draggedView: dia.CellView, targetUnderMouse: dia.CellView, x: number, y: number, sourceComponent: string) {\r\n    if (this.editor && this.editor.calculateDragDescriptor) {\r\n      this.setDragDescriptor(this.editor.calculateDragDescriptor(this.editorContext, draggedView, targetUnderMouse, joint.g.point(x, y), sourceComponent));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles DnD drop event when a node is being dragged and dropped on the main canvas\r\n   */\r\n  handleNodeDropping() {\r\n    if (this.highlighted && this.editor && this.editor.handleNodeDropping) {\r\n      this.editor.handleNodeDropping(this.editorContext, this.highlighted);\r\n    }\r\n    this.setDragDescriptor(undefined);\r\n  }\r\n\r\n  /**\r\n   * Hides DOM Node (used to determine drop target DOM element)\r\n   * @param domNode DOM node to hide\r\n   * @returns\r\n   */\r\n  private _hideNode(domNode: Element & ElementCSSInlineStyle): VisibilityState {\r\n    let oldVisibility: VisibilityState = {\r\n      visibility: domNode.style ? domNode.style.display : undefined,\r\n      children: []\r\n    };\r\n    for (let i = 0; i < domNode.children.length; i++) {\r\n      let node = domNode.children.item(i);\r\n      if (node instanceof HTMLElement) {\r\n        oldVisibility.children.push(this._hideNode(<HTMLElement> node));\r\n      }\r\n    }\r\n    domNode.style.display = 'none';\r\n    return oldVisibility;\r\n  }\r\n\r\n  /**\r\n   * Restored DOM node original visibility (used to determine drop target DOM element)\r\n   * @param domNode DOM node to restore visibility of\r\n   * @param oldVisibility original visibility parameter\r\n   */\r\n  _restoreNodeVisibility(domNode: Element & ElementCSSInlineStyle, oldVisibility: VisibilityState) {\r\n    if (domNode.style) {\r\n      domNode.style.display = oldVisibility.visibility;\r\n    }\r\n    let j = 0;\r\n    for (let i = 0; i < domNode.childNodes.length; i++) {\r\n      if (j < oldVisibility.children.length) {\r\n        let node = domNode.children.item(i);\r\n        if (node instanceof HTMLElement) {\r\n          this._restoreNodeVisibility(node as any, oldVisibility.children[j++]);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Unfortunately we can't just use event.target because often draggable shape on the canvas overlaps the target.\r\n   * We can easily find the element(s) at location, but only nodes :-( Unclear how to find links at location\r\n   * (bounding box of a link for testing is bad).\r\n   * The result of that is that links can only be the drop target when dragging from the palette currently.\r\n   * When DnDing shapes on the canvas drop target cannot be a link.\r\n   *\r\n   * Excluded views enables you to choose to filter some possible answers (useful in the case where elements are stacked\r\n   * - e.g. Drag-n-Drop)\r\n   */\r\n  getTargetViewFromEvent(event: MouseEvent, x: number, y: number, excludeViews: Array<dia.CellView> = []): dia.CellView {\r\n    if (!x && !y) {\r\n      let l = this.paper.snapToGrid({x: event.clientX, y: event.clientY});\r\n      x = l.x;\r\n      y = l.y;\r\n    }\r\n\r\n    // TODO: See if next code paragraph is needed. Most likely it's just code executed for nothing\r\n    // let elements = this.graph.findModelsFromPoint(joint.g.point(x, y));\r\n    // let underMouse = elements.find(e => !_.isUndefined(excludeViews.find(x => x === this.paper.findViewByModel(e))));\r\n    // if (underMouse) {\r\n    //   return underMouse;\r\n    // }\r\n\r\n    let oldVisibility = excludeViews.map(_x => this._hideNode(_x.el));\r\n    let targetElement = document.elementFromPoint(event.clientX, event.clientY) as HTMLElement;\r\n    excludeViews.forEach((excluded, i) => {\r\n      this._restoreNodeVisibility(excluded.el, oldVisibility[i]);\r\n    });\r\n    return this.paper.findView($(targetElement));\r\n  }\r\n\r\n  handleDnDFromPalette(dndEvent: Flo.DnDEvent) {\r\n    switch (dndEvent.type) {\r\n      case Flo.DnDEventType.DRAG:\r\n        this.handleDragFromPalette(dndEvent);\r\n        break;\r\n      case Flo.DnDEventType.DROP:\r\n        this.handleDropFromPalette(dndEvent);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleDragFromPalette(dnDEvent: Flo.DnDEvent) {\r\n    if (dnDEvent.view && !this.readOnlyCanvas) {\r\n      let location = this.paper.snapToGrid({x: dnDEvent.event.clientX, y: dnDEvent.event.clientY});\r\n      this.handleNodeDragging(dnDEvent.view,  this.getTargetViewFromEvent(dnDEvent.event, location.x, location.y, [dnDEvent.view]), location.x, location.y, Constants.PALETTE_CONTEXT);\r\n    }\r\n  }\r\n\r\n  createNode(metadata: Flo.ElementMetadata, props: Map<string, any>, position: dia.Point): dia.Element {\r\n    return Shapes.Factory.createNode({\r\n      renderer: this.renderer,\r\n      paper: this.paper,\r\n      metadata: metadata,\r\n      props: props,\r\n      position: position\r\n    });\r\n  }\r\n\r\n  createLink(source: Flo.LinkEnd, target: Flo.LinkEnd, metadata: Flo.ElementMetadata, props: Map<string, any>): dia.Link {\r\n    return Shapes.Factory.createLink({\r\n      renderer: this.renderer,\r\n      paper: this.paper,\r\n      source: source,\r\n      target: target,\r\n      metadata: metadata,\r\n      props: props\r\n    });\r\n  }\r\n\r\n  handleDropFromPalette(event: Flo.DnDEvent) {\r\n    let cellview = event.view;\r\n    let evt = event.event;\r\n    if (this.paper.el === evt.target || $.contains(this.paper.el, evt.target as HTMLElement)) {\r\n      if (this.readOnlyCanvas) {\r\n        this.setDragDescriptor(undefined);\r\n      } else {\r\n        let metadata = cellview.model.get('metadata');\r\n        let props = cellview.model.attr('props');\r\n\r\n        let position = this.paper.snapToGrid({x: evt.clientX, y: evt.clientY});\r\n        /* Calculate target element before creating the new\r\n         * element under mouse location. Otherwise target\r\n         * element would be the newly created element because\r\n         * it's under the mouse pointer\r\n         */\r\n        let targetElement = this.getTargetViewFromEvent(evt, position.x, position.y, [ event.view ]);\r\n        let newNode = this.createNode(metadata, props, position);\r\n        let newView = this.paper.findViewByModel(newNode);\r\n\r\n        this.handleNodeDragging(newView, targetElement, position.x, position.y, Constants.PALETTE_CONTEXT);\r\n        this.handleNodeDropping();\r\n      }\r\n    }\r\n  }\r\n\r\n  private fitToContent(gridWidth: number, gridHeight: number, padding: number, opt: any) {\r\n    const paper = this.paper;\r\n\r\n    if (joint.util.isObject(gridWidth)) {\r\n      // first parameter is an option object\r\n      opt = gridWidth;\r\n      gridWidth = opt.gridWidth || 1;\r\n      gridHeight = opt.gridHeight || 1;\r\n      padding = opt.padding || 0;\r\n\r\n    } else {\r\n\r\n      opt = opt || {};\r\n      gridWidth = gridWidth || 1;\r\n      gridHeight = gridHeight || 1;\r\n      padding = padding || 0;\r\n    }\r\n\r\n    const paddingJson = joint.util.normalizeSides(padding);\r\n\r\n    // Calculate the paper size to accomodate all the graph's elements.\r\n    const bbox = joint.V(paper.viewport).getBBox();\r\n\r\n    const currentScale = paper.scale();\r\n    const currentTranslate = paper.translate();\r\n\r\n    bbox.x *= currentScale.sx;\r\n    bbox.y *= currentScale.sy;\r\n    bbox.width *= currentScale.sx;\r\n    bbox.height *= currentScale.sy;\r\n\r\n    let calcWidth = Math.max((bbox.width + bbox.x) / gridWidth, 1) * gridWidth;\r\n    let calcHeight = Math.max((bbox.height + bbox.y) / gridHeight, 1) * gridHeight;\r\n\r\n    let tx = 0;\r\n    let ty = 0;\r\n\r\n    if ((opt.allowNewOrigin === 'negative' && bbox.x < 0) || (opt.allowNewOrigin === 'positive' && bbox.x >= 0) || opt.allowNewOrigin === 'any') {\r\n      tx = (-bbox.x / gridWidth) * gridWidth;\r\n      tx += paddingJson.left;\r\n    } else if (opt.allowNewOrigin === 'same') {\r\n      tx = currentTranslate.tx;\r\n    }\r\n    calcWidth += tx;\r\n\r\n    if ((opt.allowNewOrigin === 'negative' && bbox.y < 0) || (opt.allowNewOrigin === 'positive' && bbox.y >= 0) || opt.allowNewOrigin === 'any') {\r\n      ty = (-bbox.y / gridHeight) * gridHeight;\r\n      ty += paddingJson.top;\r\n    } else if (opt.allowNewOrigin === 'same') {\r\n      ty = currentTranslate.ty;\r\n    }\r\n    calcHeight += ty;\r\n\r\n    calcWidth += paddingJson.right;\r\n    calcHeight += paddingJson.bottom;\r\n\r\n    // Make sure the resulting width and height are greater than minimum.\r\n    calcWidth = Math.max(calcWidth, opt.minWidth || 0);\r\n    calcHeight = Math.max(calcHeight, opt.minHeight || 0);\r\n\r\n    // Make sure the resulting width and height are lesser than maximum.\r\n    calcWidth = Math.min(calcWidth, opt.maxWidth || Number.MAX_VALUE);\r\n    calcHeight = Math.min(calcHeight, opt.maxHeight || Number.MAX_VALUE);\r\n\r\n    const dimensionChange = calcWidth !== paper.options.width || calcHeight !== paper.options.height;\r\n    const originChange = tx !== currentTranslate.tx || ty !== currentTranslate.ty;\r\n\r\n    // Change the dimensions only if there is a size discrepency or an origin change\r\n    if (originChange) {\r\n      paper.translate(tx, ty);\r\n    }\r\n    if (dimensionChange) {\r\n      paper.setDimensions(calcWidth, calcHeight);\r\n    }\r\n\r\n  }\r\n\r\n  autosizePaper(): void {\r\n    let parent = $('#paper-container', this.element.nativeElement);\r\n    const parentWidth = parent.innerWidth();\r\n    const parentHeight = parent.innerHeight();\r\n    this.fitToContent(this.gridSize, this.gridSize, this.paperPadding, {\r\n      minWidth: parentWidth - Flo.SCROLLBAR_WIDTH,\r\n      minHeight: parentHeight - Flo.SCROLLBAR_WIDTH,\r\n      allowNewOrigin: 'same'\r\n    });\r\n  }\r\n\r\n  fitToPage(): void {\r\n    let parent = $('#paper-container', this.element.nativeElement);\r\n    let minScale = this.minZoom / 100;\r\n    let maxScale = 2;\r\n    const parentWidth = parent.innerWidth();\r\n    const parentHeight = parent.innerHeight();\r\n    this.paper.scaleContentToFit({\r\n      padding: this.paperPadding,\r\n      minScaleX: minScale,\r\n      minScaleY: minScale,\r\n      maxScaleX: maxScale,\r\n      maxScaleY: maxScale,\r\n      fittingBBox: {x: 0, y: 0, width: parentWidth - Flo.SCROLLBAR_WIDTH, height: parentHeight - Flo.SCROLLBAR_WIDTH}\r\n    });\r\n    /**\r\n     * Size the canvas appropriately and allow origin movement\r\n     */\r\n    this.fitToContent(this.gridSize, this.gridSize, this.paperPadding, {\r\n      minWidth: parentWidth,\r\n      minHeight: parentHeight,\r\n      maxWidth: parentWidth,\r\n      maxHeight: parentHeight,\r\n      allowNewOrigin: 'any'\r\n    });\r\n  }\r\n\r\n  get zoomPercent(): number {\r\n    return Math.round(this.paper.scale().sx * 100);\r\n  }\r\n\r\n  set zoomPercent(percent: number) {\r\n    if (!isNaN(percent)) {\r\n      if (percent < this.minZoom) {\r\n          percent = this.minZoom;\r\n      } else if (percent >= this.maxZoom) {\r\n        percent = this.maxZoom;\r\n      } else {\r\n        if (percent <= 0) {\r\n          percent = 0.00001;\r\n        }\r\n      }\r\n      this.paper.scale(percent / 100, percent / 100);\r\n    }\r\n  }\r\n\r\n  get gridSize(): number {\r\n    return this._gridSize;\r\n  }\r\n\r\n  set gridSize(size: number) {\r\n    if (!isNaN(size) && size >= 1) {\r\n      this._gridSize = size;\r\n      if (this.paper) {\r\n        this.paper.setGridSize(size);\r\n      }\r\n    }\r\n  }\r\n\r\n  validateContent(): Promise<any> {\r\n    return new Promise<void>(resolve => {\r\n      if (this.editor && this.editor.validate) {\r\n        return this.editor\r\n          .validate(this.graph, this.dsl, this.editorContext)\r\n          .then(allMarkers => {\r\n            this.graph.getCells()\r\n              .forEach((cell: dia.Cell) => this.markElement(cell, allMarkers.has(cell.id) ? allMarkers.get(cell.id) : []));\r\n            this.validationMarkers.emit(allMarkers);\r\n            this.contentValidated.emit(true);\r\n            resolve();\r\n          });\r\n      } else {\r\n        resolve();\r\n      }\r\n    });\r\n  }\r\n\r\n  markElement(cell: dia.Cell, markers: Array<Flo.Marker>) {\r\n    cell.set('markers', markers);\r\n\r\n    // Old legacy code below consider removing\r\n    let errorMessages = markers.map(m => m.message);\r\n    let errorCell = cell.getEmbeddedCells().find((e: dia.Cell) => e.attr('./kind') === Constants.ERROR_DECORATION_KIND);\r\n    if (errorCell) {\r\n      if (errorMessages.length === 0) {\r\n        errorCell.remove();\r\n      } else {\r\n        // Without rewrite we merge this list with existing errors\r\n        errorCell.attr('messages', errorMessages, {rewrite: true});\r\n      }\r\n    } else if (errorMessages.length > 0) {\r\n      let error = Shapes.Factory.createDecoration({\r\n        renderer: this.renderer,\r\n        paper: this.paper,\r\n        parent: cell,\r\n        kind: Constants.ERROR_DECORATION_KIND,\r\n        messages: errorMessages\r\n      });\r\n      if (error) {\r\n        const view = this.paper.findViewByModel(error);\r\n        view.setInteractivity(false);\r\n      }\r\n    }\r\n\r\n  }\r\n\r\n  doLayout(): Promise<void> {\r\n    if (this.renderer && this.renderer.layout) {\r\n      return this.renderer.layout(this.paper);\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  set dsl(dslText: string) {\r\n    if (this._dslText !== dslText) {\r\n      this._dslText = dslText;\r\n      this.textToGraphEventEmitter.emit();\r\n    }\r\n  }\r\n\r\n  get dsl(): string {\r\n    return this._dslText;\r\n  }\r\n\r\n  /**\r\n   * Ask the server to parse the supplied text into a JSON graph of nodes and links,\r\n   * then update the view based on that new information.\r\n   */\r\n  updateGraphRepresentation(): Promise<any> {\r\n    Logger.debug(`Updating graph to represent '${this._dslText}'`);\r\n    if (this.metamodel && this.metamodel.textToGraph) {\r\n      return this.metamodel.textToGraph(this.editorContext, this._dslText).then(() => {\r\n        this.textToGraphConversionCompleted.next();\r\n        return this.validateContent()\r\n      });\r\n    } else {\r\n      this.textToGraphConversionCompleted.next();\r\n      return this.validateContent();\r\n    }\r\n  }\r\n\r\n  updateTextRepresentation(): Promise<any> {\r\n    if (this.metamodel && this.metamodel.graphToText) {\r\n      return this.metamodel.graphToText(this.editorContext).then(text => {\r\n        if (this._dslText !== text) {\r\n          this._dslText = text;\r\n          this.dslChange.emit(text);\r\n        }\r\n        this.graphToTextConversionCompleted.next();\r\n        return this.validateContent();\r\n      })\r\n      .catch(error => {\r\n        // Validation may reveal why the graph couldn't be\r\n        // converted so let it run\r\n        this.graphToTextConversionCompleted.next();\r\n        return this.validateContent();\r\n      });\r\n    } else {\r\n      this.graphToTextConversionCompleted.next();\r\n      return this.validateContent();\r\n    }\r\n  }\r\n\r\n  initMetamodel() {\r\n    this.metamodel.load().then(data => {\r\n      this.updateGraphRepresentation();\r\n\r\n      let textSyncSubscription = this.graphToTextEventEmitter.pipe(debounceTime(100)).subscribe(() => {\r\n        if (this._graphToTextSyncEnabled) {\r\n          this.updateTextRepresentation();\r\n        }\r\n      });\r\n      this._disposables.add(Disposable.create(() => textSyncSubscription.unsubscribe()));\r\n\r\n      // Setup content validated event emitter. Emit not validated when graph to text conversion required\r\n      let graphValidatedSubscription1 = this.graphToTextEventEmitter.subscribe(() => this.contentValidated.emit(false));\r\n      this._disposables.add(Disposable.create(() => graphValidatedSubscription1.unsubscribe));\r\n\r\n      // let validationSubscription = this.validationEventEmitter.pipe(debounceTime(100)).subscribe(() => this.validateGraph());\r\n      // this._disposables.add(Disposable.create(() => validationSubscription.unsubscribe()));\r\n\r\n      let graphSyncSubscription = this.textToGraphEventEmitter.pipe(debounceTime(300)).subscribe(() => this.updateGraphRepresentation());\r\n      this._disposables.add(Disposable.create(() => graphSyncSubscription.unsubscribe()));\r\n\r\n      // Setup content validated event emitter. Emit not validated when text to graph conversion required\r\n      let graphValidatedSubscription2 = this.textToGraphEventEmitter.subscribe(() => this.contentValidated.emit(false));\r\n      this._disposables.add(Disposable.create(() => graphValidatedSubscription2.unsubscribe));\r\n\r\n      if (this.editor && this.editor.setDefaultContent) {\r\n        this.editor.setDefaultContent(this.editorContext, data);\r\n      }\r\n    });\r\n  }\r\n\r\n  initGraph() {\r\n    this.graph = new joint.dia.Graph();\r\n    this.graph.set('type', Constants.CANVAS_CONTEXT);\r\n    this.graph.set('paperPadding', this.paperPadding);\r\n  }\r\n\r\n  handleNodeCreation(node: dia.Element) {\r\n    node.on('change:size', this._resizeHandler);\r\n    node.on('change:position', this._resizeHandler);\r\n    if (node.get('metadata')) {\r\n\r\n      node.on('change:attrs', (cell: dia.Element, attrs: any, changeData: any) => {\r\n        let propertyPath = changeData ? changeData.propertyPath : undefined;\r\n        if (propertyPath) {\r\n          let propAttr = propertyPath.substr(propertyPath.indexOf('/') + 1);\r\n          if (propAttr.indexOf('props') === 0 ||\r\n            (this.renderer && this.renderer.isSemanticProperty && this.renderer.isSemanticProperty(propAttr, node))) {\r\n            this.performGraphToTextSyncing();\r\n          }\r\n          if (this.renderer && this.renderer.refreshVisuals) {\r\n            this.renderer.refreshVisuals(node, propAttr, this.paper);\r\n          }\r\n\r\n        }\r\n      });\r\n\r\n      node.on('change:metadata', (cell: dia.Element, attrs: any, changeData: any) => {\r\n        let propertyPath = changeData ? changeData.propertyPath : undefined;\r\n        if (propertyPath && this.renderer && this.renderer.refreshVisuals) {\r\n            this.renderer.refreshVisuals(node, propertyPath, this.paper);\r\n        }\r\n      });\r\n\r\n    }\r\n\r\n    node.on('change:markers', () => {\r\n      if (this.renderer && this.renderer.markersChanged) {\r\n        this.renderer.markersChanged(node, this.paper);\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n  /**\r\n   * Forwards a link event occurrence to any handlers in the editor service, if they are defined. Event examples\r\n   * are 'change:source', 'change:target'.\r\n   */\r\n  handleLinkEvent(event: string, link: dia.Link) {\r\n    if (this.renderer && this.renderer.handleLinkEvent) {\r\n      this.renderer.handleLinkEvent(this.editorContext, event, link);\r\n    }\r\n  }\r\n\r\n  handleLinkCreation(link: dia.Link) {\r\n    link.on('change:source', (l: dia.Link) => {\r\n      this.autosizePaper();\r\n      let newSourceId = l.get('source').id;\r\n      let oldSourceId = l.previous('source').id;\r\n      if (newSourceId !== oldSourceId) {\r\n        this.performGraphToTextSyncing();\r\n      }\r\n      this.handleLinkEvent('change:source', l);\r\n    });\r\n\r\n    link.on('change:target', (l: dia.Link) => {\r\n      this.autosizePaper();\r\n      let newTargetId = l.get('target').id;\r\n      let oldTargetId = l.previous('target').id;\r\n      if (newTargetId !== oldTargetId) {\r\n        this.performGraphToTextSyncing();\r\n      }\r\n      this.handleLinkEvent('change:target', l);\r\n    });\r\n\r\n    link.on('change:vertices', this._resizeHandler);\r\n\r\n    link.on('change:attrs', (cell: dia.Link, attrs: any, changeData: any) => {\r\n      let propertyPath = changeData ? changeData.propertyPath : undefined;\r\n      if (propertyPath) {\r\n        let propAttr = propertyPath.substr(propertyPath.indexOf('/') + 1);\r\n        if (propAttr.indexOf('props') === 0 ||\r\n          (this.renderer && this.renderer.isSemanticProperty && this.renderer.isSemanticProperty(propAttr, link))) {\r\n          let sourceId = link.get('source').id;\r\n          let targetId = link.get('target').id;\r\n          this.performGraphToTextSyncing();\r\n        }\r\n        if (this.renderer && this.renderer.refreshVisuals) {\r\n          this.renderer.refreshVisuals(link, propAttr, this.paper);\r\n        }\r\n      }\r\n    });\r\n\r\n    link.on('change:metadata', (cell: dia.Element, attrs: any, changeData: any) => {\r\n      let propertyPath = changeData ? changeData.propertyPath : undefined;\r\n      if (propertyPath && this.renderer && this.renderer.refreshVisuals) {\r\n        this.renderer.refreshVisuals(link, propertyPath, this.paper);\r\n      }\r\n    });\r\n\r\n    this.paper.findViewByModel(link).on('link:options', () => this.handleLinkEvent('options', link));\r\n\r\n    if (this.readOnlyCanvas) {\r\n      link.attr('.link-tools/display', 'none');\r\n    }\r\n\r\n    this.handleLinkEvent('add', link);\r\n  }\r\n\r\n  initGraphListeners() {\r\n    this.graph.on('add', (element: dia.Cell) => {\r\n      if (element instanceof joint.dia.Link) {\r\n        this.handleLinkCreation(<dia.Link> element);\r\n      } else if (element instanceof joint.dia.Element) {\r\n        this.handleNodeCreation(<dia.Element> element);\r\n      }\r\n      if (element.get('type') === joint.shapes.flo.NODE_TYPE || element.get('type') === joint.shapes.flo.LINK_TYPE) {\r\n        this.performGraphToTextSyncing();\r\n      }\r\n      this.autosizePaper();\r\n    });\r\n\r\n    this.graph.on('remove', (element: dia.Cell) => {\r\n      if (element instanceof joint.dia.Link) {\r\n        this.handleLinkEvent('remove', <dia.Link> element);\r\n      }\r\n      if (this.selection && this.selection.model === element) {\r\n        this.selection = undefined;\r\n      }\r\n      if (element.isLink()) {\r\n        window.setTimeout(() => this.performGraphToTextSyncing(), 100);\r\n      } else if (element.get('type') === joint.shapes.flo.NODE_TYPE) {\r\n        this.performGraphToTextSyncing();\r\n      }\r\n      this.autosizePaper();\r\n    });\r\n\r\n    // Set if link is fan-routed. Should be called before routing call\r\n    this.graph.on('change:vertices', (link: dia.Link, changed: any, opt: any) => {\r\n      if (opt.fanRouted) {\r\n        link.set('fanRouted', true);\r\n      } else {\r\n        link.unset('fanRouted');\r\n      }\r\n    });\r\n    // adjust vertices when a cell is removed or its source/target was changed\r\n    this.graph.on('add remove change:source change:target change:vertices change:position', partial(Utils.fanRoute, this.graph));\r\n\r\n    this.graph.on('startDeletion', (cell: dia.Cell) => {\r\n      if (this.editor && this.editor.preDelete) {\r\n        if (this.editor.preDelete(this.editorContext, this.selection.model)) {\r\n          cell.remove();\r\n        }\r\n      } else {\r\n        cell.remove();\r\n      }\r\n    });\r\n  }\r\n\r\n  initPaperListeners() {\r\n    // https://stackoverflow.com/questions/20463533/how-to-add-an-onclick-event-to-a-joint-js-element\r\n    this.paper.on('cell:pointerup', (cellView: dia.CellView) => {\r\n        if (!this.readOnlyCanvas) {\r\n          this.selection = cellView;\r\n        }\r\n      }\r\n    );\r\n\r\n    this.paper.on('blank:pointerdown', () => {\r\n      this.selection = undefined;\r\n    });\r\n\r\n    this.paper.on('scale', this._resizeHandler);\r\n\r\n    this.paper.on('all', function() {\r\n      if (Utils.isCustomPaperEvent(arguments)) {\r\n        arguments[2].trigger.apply(arguments[2], [arguments[0], arguments[1], arguments[3], arguments[4]]);\r\n      }\r\n    });\r\n\r\n    this.paper.on('dragging-node-over-canvas', (dndEvent: Flo.DnDEvent) => {\r\n      let location = this.paper.snapToGrid({x: dndEvent.event.clientX, y: dndEvent.event.clientY});\r\n      switch (dndEvent.type) {\r\n        case Flo.DnDEventType.DRAG:\r\n          this.handleNodeDragging(dndEvent.view, this.getTargetViewFromEvent(dndEvent.event, location.x, location.y, [ dndEvent.view ]), location.x, location.y, Constants.CANVAS_CONTEXT);\r\n          break;\r\n        case Flo.DnDEventType.DROP:\r\n          this.handleNodeDropping();\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n    });\r\n\r\n    // JointJS now no longer grabs focus if working in a paper element - crude...\r\n    // $('#flow-view', this.element.nativeElement).on('mousedown', () => {\r\n      // $('#palette-filter-textfield', this.element.nativeElement).focus();\r\n    // });\r\n  }\r\n\r\n  initPaper(): void {\r\n\r\n    let options: dia.Paper.Options = {\r\n      el: $('#paper', this.element.nativeElement),\r\n      gridSize: this._gridSize,\r\n      drawGrid: true,\r\n      model: this.graph,\r\n      elementView: this.renderer && this.renderer.getNodeView ? this.renderer.getNodeView() : joint.shapes.flo.ElementView/*joint.dia.ElementView*/,\r\n      linkView: this.renderer && this.renderer.getLinkView ? this.renderer.getLinkView() : joint.shapes.flo.LinkView,\r\n      // Enable link snapping within 25px lookup radius\r\n      snapLinks: { radius: 25 },\r\n      defaultLink: /*this.renderer && this.renderer.createDefaultLink ? this.renderer.createDefaultLink: new joint.shapes.flo.Link*/\r\n        (cellView: dia.CellView, magnet: SVGElement) => {\r\n          if (this.renderer && this.renderer.createLink) {\r\n            let linkEnd: Flo.LinkEnd = {\r\n              id: cellView.model.id\r\n            };\r\n            if (magnet) {\r\n              linkEnd.selector = cellView.getSelector(magnet, undefined);\r\n            }\r\n            if (magnet.getAttribute('port')) {\r\n              linkEnd.port = magnet.getAttribute('port');\r\n            }\r\n            if (magnet.getAttribute('port') === 'input') {\r\n              return this.renderer.createLink(undefined, linkEnd);\r\n            } else {\r\n              return this.renderer.createLink(linkEnd, undefined);\r\n            }\r\n          } else {\r\n            return new joint.shapes.flo.Link();\r\n          }\r\n        },\r\n\r\n      // decide whether to create a link if the user clicks a magnet\r\n      validateMagnet: (cellView: dia.CellView, magnet: SVGElement) => {\r\n        if (this.readOnlyCanvas) {\r\n          return false;\r\n        } else {\r\n          if (this.editor && this.editor.validatePort) {\r\n            return this.editor.validatePort(this.editorContext, cellView, magnet);\r\n          } else {\r\n            return true;\r\n          }\r\n        }\r\n      },\r\n\r\n      interactive: (cellView: dia.CellView, event: string) => {\r\n        if (this.readOnlyCanvas) {\r\n          return false;\r\n        } else {\r\n          if (this.editor && this.editor.interactive) {\r\n            if (typeof this.editor.interactive === 'function') {\r\n              // Type for interactive is wrong in JointJS have to cast to <any>\r\n              return <any>this.editor.interactive(cellView, event);\r\n            } else {\r\n              return this.editor.interactive\r\n            }\r\n          }\r\n          return true\r\n        }\r\n      },\r\n\r\n      highlighting: this.editor && this.editor.highlighting ? this.editor.highlighting : {\r\n          'default': {\r\n            name: 'addClass',\r\n            options: {\r\n              className: 'highlighted'\r\n            }\r\n          }\r\n        },\r\n\r\n      markAvailable: true\r\n    };\r\n\r\n    if (this.renderer && this.renderer.getLinkAnchorPoint) {\r\n      options.linkConnectionPoint = this.renderer.getLinkAnchorPoint;\r\n    }\r\n\r\n    if (this.editor && this.editor.validateLink) {\r\n      const self = this;\r\n      options.validateConnection = (cellViewS: dia.CellView, magnetS: SVGElement, cellViewT: dia.CellView, magnetT: SVGElement, end: 'source' | 'target', linkView: dia.LinkView) =>\r\n        self!.editor!.validateLink(this.editorContext, cellViewS, magnetS, cellViewT, magnetT, end === 'source', linkView);\r\n    }\r\n\r\n    // The paper is what will represent the graph on the screen\r\n    this.paper = new joint.dia.Paper(options);\r\n    this._disposables.add(Disposable.create(() => this.paper.remove()));\r\n\r\n    this.paper.options.highlighterNamespace['addParentClass'] = {\r\n\r\n      /**\r\n       * @param {joint.dia.CellView} cellView\r\n       * @param {Element} magnetEl\r\n       * @param {object=} opt\r\n       */\r\n      highlight(cellView: dia.CellView, magnetEl: SVGElement, opt: any) {\r\n        opt = opt || {};\r\n        const className = opt.className || this.className;\r\n        joint.V(magnetEl.parentElement).addClass(className);\r\n      },\r\n\r\n      /**\r\n       * @param {joint.dia.CellView} cellView\r\n       * @param {Element} magnetEl\r\n       * @param {object=} opt\r\n       */\r\n      unhighlight(cellView: dia.CellView, magnetEl: SVGElement, opt: any) {\r\n        opt = opt || {};\r\n        const className = opt.className || this.className;\r\n        joint.V(magnetEl.parentElement).removeClass(className);\r\n      }\r\n    };\r\n\r\n  }\r\n\r\n  updatePaletteReadyState(ready: boolean) {\r\n    this.paletteReady.next(ready);\r\n  }\r\n\r\n}\r\n","<ng-content select=\"[header]\"></ng-content>\r\n<div id=\"flow-view\" class=\"flow-view\" style=\"position:relative\">\r\n  <div id=\"canvas\" class=\"canvas\" style=\"position:relative; display: block; width: 100%; height: 100%;\">\r\n    <div *ngIf=\"!noPalette\" id=\"palette-container\" class=\"palette-container\" style=\"overflow:hidden;\">\r\n      <flo-palette [metamodel]=\"metamodel\" [renderer]=\"renderer\" [paletteSize]=\"paletteSize\"\r\n                   [paletteEntryPadding]=\"paletteEntryPadding || {width: 12, height: 12}\"\r\n                   (onPaletteEntryDrop)=\"handleDnDFromPalette($event)\"\r\n                    (paletteReady)=\"updatePaletteReadyState($event)\"\r\n                    (paletteFocus)=\"graphToTextSync=true\"\r\n                    [searchFilterPlaceHolder]=\"searchFilterPlaceHolder\">\r\n      </flo-palette>\r\n    </div>\r\n\r\n    <div id=\"sidebar-resizer\" *ngIf=\"!noPalette\"\r\n      resizer\r\n      [splitSize]=\"paletteSize\"\r\n      (sizeChange)=\"paletteSize = $event\"\r\n      [resizerWidth]=\"6\"\r\n      [resizerLeft]=\"'#palette-container'\"\r\n      [resizerRight]=\"'#paper-container'\">\r\n    </div>\r\n\r\n      <flo-editor-paper tabindex=\"0\" (onDelete)=\"deleteSelected()\" (onBlur)=\"selection = null\"\r\n                        (onProperties)=\"onPropertiesHandle()\">\r\n        <div id=\"paper\" class=\"paper\" tabindex=\"0\" style=\"overflow: hidden; position: absolute; display: block; height:100%; width:100%; overflow:auto;\"></div>\r\n        <ng-content select=\"[canvas]\"></ng-content>\r\n      </flo-editor-paper>\r\n\r\n      <span class=\"canvas-controls-container\" ng-if=\"canvasControls\">\r\n        <table ng-if=\"canvasControls.zoom\" class=\"canvas-control zoom-canvas-control\">\r\n          <tbody>\r\n            <tr>\r\n              <td>\r\n                <input class=\"zoom-canvas-input canvas-control zoom-canvas-control\" type=\"text\"\r\n                       data-inline=\"true\" [(ngModel)]=\"zoomPercent\"\r\n                       size=\"3\">\r\n              </td>\r\n              <td>\r\n                <label class=\"canvas-control zoom-canvas-label\">%</label>\r\n              </td>\r\n              <td>\r\n                <input type=\"range\" data-inline=\"true\" [(ngModel)]=\"zoomPercent\"\r\n                       [step]=\"zoomStep\"\r\n                       [max]=\"maxZoom\" [min]=\"minZoom\" data-type=\"range\"\r\n                       name=\"range\" class=\"canvas-control zoom-canvas-control\">\r\n              </td>\r\n            </tr>\r\n          </tbody>\r\n        </table>\r\n      </span>\r\n\r\n  </div>\r\n</div>\r\n<ng-content select=\"[footer]\"></ng-content>\r\n\r\n","import { Component, Input, Output, ElementRef, EventEmitter, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport debounce from 'lodash/debounce';\r\nimport * as CodeMirror from 'codemirror';\r\nimport $ from 'jquery';\r\n\r\nimport 'codemirror/addon/lint/lint';\r\nimport 'codemirror/addon/hint/show-hint';\r\nimport 'codemirror/addon/display/placeholder';\r\nimport 'codemirror/addon/scroll/annotatescrollbar';\r\nimport 'codemirror/addon/scroll/simplescrollbars';\r\n\r\n@Component({\r\n  selector: 'dsl-editor',\r\n  templateUrl: './dsl-editor.component.html',\r\n  styleUrls: ['./dsl-editor.component.scss', ],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DslEditorComponent implements OnInit {\r\n\r\n  private doc: CodeMirror.EditorFromTextArea;\r\n\r\n  private _dsl = '';\r\n\r\n  private _lint: boolean | CodeMirror.LintOptions = false;\r\n\r\n  private _hint: any;\r\n\r\n  @Input('line-numbers')\r\n  lineNumbers = false;\r\n\r\n  @Input('line-wrapping')\r\n  lineWrapping = false;\r\n\r\n  @Input('scrollbar-style')\r\n  scrollbarStyle: string;\r\n\r\n  @Input()\r\n  placeholder: string;\r\n\r\n  @Input()\r\n  debounce = 0;\r\n\r\n  @Output()\r\n  dslChange = new EventEmitter<string>();\r\n\r\n  @Output()\r\n  focus = new EventEmitter<void>();\r\n\r\n  @Output()\r\n  blur = new EventEmitter<void>();\r\n\r\n  @Output()\r\n  editor = new EventEmitter<CodeMirror.EditorFromTextArea>();\r\n\r\n  private _dslChangedHandler = () => {\r\n    this._dsl = this.doc.getValue();\r\n    this.dslChange.emit(this._dsl);\r\n  };\r\n\r\n  constructor(private element: ElementRef) {}\r\n\r\n  @Input()\r\n  set dsl(dsl: string) {\r\n    this._dsl = dsl;\r\n    if (this.doc && this._dsl !== this.doc.getValue()) {\r\n      let cursorPosition = (<any>this.doc).getCursor();\r\n      this.doc.setValue(this._dsl || '');\r\n      (<any>this.doc).setCursor(cursorPosition);\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  set lintOptions(lintOptions: boolean | CodeMirror.LintOptions) {\r\n    this._lint = lintOptions;\r\n    if (this.doc) {\r\n      this.doc.setOption('lint', this._lint);\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  set hintOptions(hintOptions: any) {\r\n    this._hint = hintOptions;\r\n    if (this.doc) {\r\n      this.doc.setOption('hintOptions', this._hint);\r\n    }\r\n  }\r\n\r\n  triggerLinting() {\r\n    this.doc.setOption('lint', {});\r\n    this.doc.setOption('lint', this._lint);\r\n  }\r\n\r\n  ngOnInit() {\r\n\r\n    let options: CodeMirror.EditorConfiguration = {\r\n      value: this._dsl || '',\r\n      gutters: ['CodeMirror-lint-markers'],\r\n      extraKeys: {'Ctrl-Space': 'autocomplete'},\r\n      lineNumbers: this.lineNumbers,\r\n      lineWrapping: this.lineWrapping,\r\n      electricChars: false,\r\n      smartIndent: false,\r\n    };\r\n\r\n    if (this.scrollbarStyle) {\r\n      (<any> options).scrollbarStyle = this.scrollbarStyle;\r\n    }\r\n\r\n    if (this._lint) {\r\n      options.lint = this._lint;\r\n    }\r\n\r\n    if (this._hint) {\r\n      (<any>options).hintOptions = this._hint;\r\n    }\r\n\r\n    this.doc = CodeMirror.fromTextArea(<HTMLTextAreaElement>$('#dsl-editor-host', this.element.nativeElement)[0], options);\r\n\r\n    if (this.placeholder) {\r\n      this.doc.setOption('placeholder', this.placeholder);\r\n    }\r\n\r\n    // Turns out \"value\" in the option doesn't set it.\r\n    this.doc.setValue(this._dsl || '');\r\n\r\n    this.doc.on('change', this.debounce ? debounce(this._dslChangedHandler, this.debounce) : this._dslChangedHandler);\r\n    this.doc.on('focus', () => this.focus.emit());\r\n    this.doc.on('blur', () => this.blur.emit());\r\n\r\n    this.editor.emit(this.doc);\r\n  }\r\n\r\n}\r\n","<textarea id=\"dsl-editor-host\"></textarea>\r\n","import { Component, Input, Output, ElementRef, EventEmitter, OnInit, ViewEncapsulation, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport * as CodeMirror from 'codemirror';\r\n\r\nimport $ from 'jquery';\r\n\r\n// CodeMirror extensions\r\nimport 'codemirror/mode/meta';\r\nimport 'codemirror/addon/lint/lint';\r\nimport 'codemirror/addon/hint/show-hint';\r\n// import 'codemirror/addon/mode/loadmode';\r\nimport 'codemirror/addon/edit/matchbrackets';\r\nimport 'codemirror/addon/edit/closebrackets';\r\nimport 'codemirror/addon/display/placeholder';\r\nimport 'codemirror/addon/scroll/annotatescrollbar';\r\nimport 'codemirror/addon/scroll/simplescrollbars';\r\n\r\n// Lint support\r\n// Unclear how to import this dynamically...\r\n// import 'codemirror/addon/lint/javascript-lint';\r\n// import 'codemirror/addon/lint/json-lint';\r\n// import 'codemirror/addon/lint/yaml-lint';\r\n\r\n// TODO: use dynamic import with JS7 in the future. CM autoLoad cannot load it properly - thinks its AMD\r\n// Supported languages until dynamic loading\r\n// import 'codemirror/mode/groovy/groovy';\r\n// import 'codemirror/mode/javascript/javascript';\r\n// import 'codemirror/mode/python/python';\r\n// import 'codemirror/mode/ruby/ruby';\r\n// import 'codemirror/mode/clike/clike';\r\n// import 'codemirror/mode/yaml/yaml';\r\n\r\n@Component({\r\n  selector: 'code-editor',\r\n  templateUrl: './code-editor.component.html',\r\n  styleUrls: ['./code-editor.component.scss', ],\r\n  encapsulation: ViewEncapsulation.None,\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => CodeEditorComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class CodeEditorComponent implements OnInit, ControlValueAccessor {\r\n\r\n  private doc: CodeMirror.EditorFromTextArea;\r\n\r\n  private _dsl = '';\r\n\r\n  private _lint: boolean | CodeMirror.LintOptions = false;\r\n\r\n  private _language: string;\r\n\r\n  private errorRuler: any;\r\n\r\n  private warningRuler: any;\r\n\r\n  private _onChangeHandler: (_: any) => void;\r\n\r\n  private _onTouchHandler: () => void;\r\n\r\n  @Input('line-numbers')\r\n  lineNumbers = false;\r\n\r\n  @Input('line-wrapping')\r\n  lineWrapping = false;\r\n\r\n  @Input('scrollbar-style')\r\n  scrollbarStyle: string;\r\n\r\n  @Input()\r\n  placeholder: string;\r\n\r\n  @Input('overview-ruler')\r\n  overviewRuler: boolean;\r\n\r\n  @Output()\r\n  dslChange = new EventEmitter<string>();\r\n\r\n  @Output()\r\n  focus = new EventEmitter<void>();\r\n\r\n  @Output()\r\n  blur = new EventEmitter<void>();\r\n\r\n  @Output()\r\n  editor = new EventEmitter<CodeMirror.EditorFromTextArea>();\r\n\r\n  private _dslChangedHandler = () => {\r\n    this._dsl = this.doc.getValue();\r\n    this.dslChange.emit(this._dsl);\r\n    if (this._onChangeHandler) {\r\n      this._onChangeHandler(this._dsl);\r\n    }\r\n  };\r\n\r\n  constructor(private element: ElementRef) {}\r\n\r\n  @Input()\r\n  set dsl(dsl: string) {\r\n    this._dsl = dsl;\r\n    if (this.doc && this._dsl !== this.doc.getValue()) {\r\n      let cursorPosition = (<any>this.doc).getCursor();\r\n      this.doc.setValue(this._dsl || '');\r\n      (<any>this.doc).setCursor(cursorPosition);\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  set language(_language: string) {\r\n    if (this._language !== _language) {\r\n      this._language = _language;\r\n      this.loadEditorMode();\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n\r\n    let options: any = {\r\n      value: this._dsl || '',\r\n      gutters: ['CodeMirror-lint-markers'],\r\n      extraKeys: {'Ctrl-Space': 'autocomplete'},\r\n      lineNumbers: this.lineNumbers,\r\n      lineWrapping: this.lineWrapping,\r\n      matchBrackets: true,\r\n      autoCloseBrackets: true,\r\n    };\r\n\r\n    if (this.scrollbarStyle) {\r\n      (<any> options).scrollbarStyle = this.scrollbarStyle;\r\n    }\r\n\r\n    if (this._lint) {\r\n      options.lint = this._lint;\r\n    }\r\n\r\n    this.doc = CodeMirror.fromTextArea(<HTMLTextAreaElement>$('#code-editor-host', this.element.nativeElement)[0], options);\r\n\r\n    if (this.placeholder) {\r\n      this.doc.setOption('placeholder', this.placeholder);\r\n    }\r\n\r\n    // Turns out \"value\" in the option doesn't set it.\r\n    this.doc.setValue(this._dsl || '');\r\n\r\n    this.doc.on('change', this._dslChangedHandler);\r\n    this.doc.on('focus', () => {\r\n      this.focus.emit();\r\n      if (this._onTouchHandler) {\r\n        this._onTouchHandler();\r\n      }\r\n    });\r\n    this.doc.on('blur', () => this.blur.emit());\r\n\r\n    this.warningRuler = (<any>this.doc).annotateScrollbar('CodeMirror-vertical-ruler-warning');\r\n    this.errorRuler = (<any>this.doc).annotateScrollbar('CodeMirror-vertical-ruler-error');\r\n\r\n    this.loadEditorMode();\r\n\r\n    this.editor.emit(this.doc);\r\n  }\r\n\r\n  private loadEditorMode() {\r\n    // CodeMirror doc object must be initialized\r\n    if (!this.doc) {\r\n      return\r\n    }\r\n\r\n    const info = this._language ? (<any>CodeMirror).findModeByName(this._language) : undefined;\r\n\r\n    // Set proper editor mode\r\n    if (info) {\r\n      this.doc.setOption('mode', info.mime);\r\n      // (<any>CodeMirror).autoLoadMode(this.doc, info.mode);\r\n    } else {\r\n      this.doc.setOption('mode', 'text/plain');\r\n    }\r\n\r\n    // Set proper Lint mode\r\n    this.doc.setOption('lint', this.getLintOptions());\r\n  }\r\n\r\n  writeValue(obj: any): void {\r\n    this.dsl = obj;\r\n  }\r\n\r\n  registerOnChange(fn: (_: any) => void): void {\r\n    this._onChangeHandler = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this._onTouchHandler = fn;\r\n  }\r\n\r\n  private getLintOptions(): boolean | any {\r\n    switch (this._language) {\r\n      case 'javascript':\r\n      case 'json':\r\n      case 'coffeescript':\r\n      case 'yaml':\r\n        return {\r\n          onUpdateLinting: (annotations: {}[]) => {\r\n            const warnings: any[] = [];\r\n            const errors: any[] = [];\r\n            if (this.overviewRuler) {\r\n              if (Array.isArray(annotations)) {\r\n                annotations.forEach((a: any) => {\r\n                  if (a.to && a.from && a.from.line >= 0 && a.from.ch >= 0 && a.to.line >= a.from.line && a.from.ch >= 0) {\r\n                    if (a.severity === 'error') {\r\n                      errors.push(a);\r\n                    } else if (a.severity === 'warning') {\r\n                      warnings.push(a);\r\n                    }\r\n                  }\r\n                });\r\n              }\r\n            }\r\n            this.warningRuler.update(warnings);\r\n            this.errorRuler.update(errors);\r\n          }\r\n        }\r\n    }\r\n    return false;\r\n  }\r\n\r\n}\r\n","<div class=\"code-editor-host\">\r\n  <textarea id=\"code-editor-host\"></textarea>\r\n</div>\r\n","import { dia } from 'jointjs';\r\nimport { ValidatorFn, AsyncValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms'\r\nimport { Flo } from './flo-common';\r\nimport { Subject, Observable } from 'rxjs'\r\nimport {debounceTime, switchMap} from 'rxjs/operators';\r\n\r\nexport namespace Properties {\r\n\r\n  export enum InputType {\r\n    TEXT,\r\n    NUMBER,\r\n    SELECT,\r\n    CHECKBOX,\r\n    PASSWORD,\r\n    EMAIL,\r\n    URL,\r\n    CODE\r\n  }\r\n\r\n  export interface Property {\r\n    readonly id: string;\r\n    readonly name: string;\r\n    readonly type?: string;\r\n    readonly description?: string;\r\n    readonly defaultValue?: any;\r\n    value?: any;\r\n    readonly valueOptions?: any[]\r\n    readonly [propName: string]: any;\r\n  }\r\n\r\n  export interface PropertyFilter {\r\n    accept: (property: Property) => boolean;\r\n  }\r\n\r\n  export interface SelectOption {\r\n    name: string;\r\n    value: any;\r\n  }\r\n\r\n  export interface ErrorData {\r\n    id: string;\r\n    message: string;\r\n  }\r\n\r\n  export interface Validation {\r\n    validator?: ValidatorFn|ValidatorFn[]|null,\r\n    asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null,\r\n    errorData?: Array<ErrorData>;\r\n  }\r\n\r\n  export interface ControlModel<T> {\r\n    readonly type: InputType;\r\n    readonly id: string;\r\n    value: T;\r\n    readonly defaultValue: T;\r\n    readonly name?: string;\r\n    readonly description?: string;\r\n    readonly property: Property\r\n    readonly validation?: Validation;\r\n  }\r\n\r\n  export interface CodeControlModel<T> extends ControlModel<T> {\r\n    readonly language: string;\r\n  }\r\n\r\n  export class GenericControlModel<T> implements ControlModel<T> {\r\n\r\n    constructor(private _property: Property, public type: InputType, public validation?: Validation) {}\r\n\r\n    get id() {\r\n      return this.property.id;\r\n    }\r\n\r\n    get name() {\r\n      return this.property.name;\r\n    }\r\n\r\n    get description() {\r\n      return this.property.description;\r\n    }\r\n\r\n    get defaultValue() {\r\n      return this.property.defaultValue;\r\n    }\r\n\r\n    get value(): T {\r\n      return this.getValue();\r\n    }\r\n\r\n    set value(value: T) {\r\n      this.setValue(value);\r\n    }\r\n\r\n    get property(): Property {\r\n      return this._property;\r\n    }\r\n\r\n    protected setValue(value: T) {\r\n      this.property.value = value;\r\n    }\r\n\r\n    protected getValue(): T {\r\n      return this.property.value;\r\n    }\r\n\r\n  }\r\n\r\n  export class CheckBoxControlModel extends GenericControlModel<boolean> {\r\n\r\n    constructor(_property: Property, validation?: Validation) {\r\n      super(_property, InputType.CHECKBOX, validation);\r\n    }\r\n\r\n    protected getValue() {\r\n      const res = super.getValue();\r\n      const type = typeof res;\r\n      switch (type) {\r\n        case 'boolean':\r\n          return res;\r\n        case 'string':\r\n          switch ((<any>res).trim().toLowerCase()) {\r\n            case 'true':\r\n            case '1':\r\n              return true;\r\n            case 'false':\r\n            case '0':\r\n              return false;\r\n            default:\r\n              return this.property.defaultValue\r\n          }\r\n        case 'number':\r\n          const num = <any> res;\r\n          if (num === 0) {\r\n            return false;\r\n          } else if (num === 1) {\r\n            return true;\r\n          } else {\r\n            return this.property.defaultValue\r\n          }\r\n      }\r\n      return this.property.defaultValue;\r\n    }\r\n\r\n  }\r\n\r\n  export abstract class AbstractCodeControlModel  extends GenericControlModel<string> implements CodeControlModel<string> {\r\n\r\n    abstract language: string;\r\n\r\n    constructor(_property: Property, private encode?: (s: string) => string, private decode?: (s: string) => string, validation?: Validation) {\r\n      super(_property, InputType.CODE, validation);\r\n    }\r\n\r\n    set value(value: string) {\r\n      if (value && this.encode) {\r\n        super.setValue(this.encode(value));\r\n      } else {\r\n        super.setValue(value);\r\n      }\r\n    }\r\n\r\n    get value(): string {\r\n      let dsl = super.getValue();\r\n      if (dsl && this.decode) {\r\n        return this.decode(dsl);\r\n      } else {\r\n        return dsl;\r\n      }\r\n    }\r\n\r\n  }\r\n\r\n\r\n  export class GenericCodeControlModel extends AbstractCodeControlModel {\r\n\r\n    constructor(_property: Property, public language: string, encode?: (s: string) => string, decode?: (s: string) => string, validation?: Validation) {\r\n      super(_property, encode, decode, validation);\r\n    }\r\n\r\n  }\r\n\r\n  export class CodeControlModelWithDynamicLanguageProperty extends AbstractCodeControlModel {\r\n\r\n    private _langControlModel: Properties.ControlModel<any>;\r\n\r\n    constructor(_property: Properties.Property, private _languagePropertyName: string,\r\n                private _groupModel: Properties.PropertiesGroupModel,\r\n                encode?: (s: string) => string, decode?: (s: string) => string, validation?: Validation) {\r\n      super(_property, encode, decode, validation);\r\n    }\r\n\r\n    get language(): string {\r\n      const value = this.languageControlModel.value;\r\n      return value ? value : this.languageControlModel.defaultValue;\r\n    }\r\n\r\n    get languageControlModel(): Properties.ControlModel<any> {\r\n      if (!this._langControlModel) {\r\n        // Cast to Properties.ControlModel<any> from Properties.ControlModel<any> | undefined\r\n        // Should not be undefined!\r\n        this._langControlModel = <Properties.ControlModel<any>> this._groupModel.getControlsModels().find(c => c.id === this._languagePropertyName);\r\n      }\r\n      return this._langControlModel;\r\n    }\r\n\r\n  }\r\n\r\n  export class GenericListControlModel extends GenericControlModel<string> {\r\n\r\n    constructor(property: Property, validation?: Validation) {\r\n      super(property, InputType.TEXT, validation);\r\n    }\r\n\r\n    get value(): string {\r\n      return this.property.value ? this.property.value.toString().trim().split(/\\s*,\\s*/).join(', ') : '';\r\n    }\r\n\r\n    set value(value: string) {\r\n      this.property.value = value && value.trim() ? value.split(/\\s*,\\s*/).join(',') : undefined;\r\n    }\r\n\r\n  }\r\n\r\n  export class SelectControlModel extends GenericControlModel<any> {\r\n    constructor(_property: Property, type: InputType, public options: Array<SelectOption>, validation?: Validation) {\r\n      super(_property, type, validation);\r\n      if (_property.defaultValue === undefined) {\r\n        options.unshift({\r\n          name: 'SELECT',\r\n          value: _property.defaultValue\r\n        })\r\n      }\r\n    }\r\n  }\r\n\r\n  export interface PropertiesSource {\r\n    getProperties(): Promise<Property[]>;\r\n    applyChanges(properties: Property[]): void;\r\n  }\r\n\r\n  export class DefaultCellPropertiesSource implements PropertiesSource {\r\n\r\n    protected cell: dia.Cell;\r\n\r\n    constructor(cell: dia.Cell) {\r\n      this.cell = cell;\r\n    }\r\n\r\n    getProperties(): Promise<Array<Property>> {\r\n      let metadata: Flo.ElementMetadata = this.cell.get('metadata');\r\n      return Promise.resolve(metadata.properties().then(propsMetadata => Array.from(propsMetadata.values()).map(m => this.createProperty(m))));\r\n    }\r\n\r\n    protected createProperty(metadata: Flo.PropertyMetadata): Property {\r\n      return {\r\n        id: metadata.id,\r\n        name: metadata.name,\r\n        type: metadata.type,\r\n        defaultValue: metadata.defaultValue,\r\n        attr: `props/${metadata.name}`,\r\n        value: this.cell.attr(`props/${metadata.name}`),\r\n        description: metadata.description,\r\n        valueOptions: metadata.options\r\n      }\r\n    }\r\n\r\n    applyChanges(properties: Property[]) {\r\n      this.cell.trigger('batch:start', { batchName: 'update properties' });\r\n\r\n      properties.forEach(property => {\r\n        if ((typeof property.value === 'boolean' && !property.defaultValue && !property.value) ||\r\n          (property.value === property.defaultValue || property.value === '' || property.value === undefined || property.value === null)) {\r\n          let currentValue = this.cell.attr(property.attr);\r\n          if (currentValue !== undefined && currentValue !== null) {\r\n            // Remove attr doesn't fire appropriate event. Set default value first as a workaround to schedule DSL resync\r\n            // this.cell.attr(property.attr, property.defaultValue === undefined ? null : property.defaultValue);\r\n            this.cell.attr(property.attr, null);\r\n            this.cell.removeAttr(property.attr);\r\n          }\r\n        } else {\r\n          this.cell.attr(property.attr, property.value);\r\n        }\r\n      });\r\n\r\n      this.cell.trigger('batch:stop', { batchName: 'update properties' });\r\n    }\r\n\r\n  }\r\n\r\n  export class PropertiesGroupModel {\r\n\r\n    protected propertiesSource: PropertiesSource;\r\n\r\n    protected controlModels: Array<ControlModel<any>>;\r\n\r\n    protected loading = true;\r\n\r\n    protected _loadedSubject: Subject<boolean>;\r\n\r\n    constructor(propertiesSource: PropertiesSource) {\r\n      this.propertiesSource = propertiesSource;\r\n    }\r\n\r\n    load() {\r\n      this.loading = true;\r\n      this._loadedSubject = new Subject<boolean>();\r\n      this.propertiesSource.getProperties().then(properties => {\r\n        this.controlModels = properties.map(p => this.createControlModel(p));\r\n        this.loading = false;\r\n        this._loadedSubject.next(true);\r\n        this._loadedSubject.complete();\r\n      });\r\n    }\r\n\r\n    get isLoading(): boolean {\r\n      return this.loading;\r\n    }\r\n\r\n    get loadedSubject() {\r\n      return this._loadedSubject;\r\n    }\r\n\r\n    getControlsModels() {\r\n      return this.controlModels;\r\n    }\r\n\r\n    protected createControlModel(property: Property): ControlModel<any> {\r\n      return new GenericControlModel(property, InputType.TEXT);\r\n    }\r\n\r\n    public applyChanges(): void {\r\n      if (this.loading) {\r\n        return;\r\n      }\r\n\r\n      let properties = this.controlModels.map(cm => cm.property);\r\n\r\n      this.propertiesSource.applyChanges(properties);\r\n    }\r\n\r\n  }\r\n\r\n  const UNIQUE_RESOURCE_ERROR = {uniqueResource: true};\r\n\r\n  export namespace Validators {\r\n\r\n    export function uniqueResource(service: (value: any) => Observable<boolean>, debounceDuration: number): AsyncValidatorFn {\r\n      return (control: AbstractControl): Observable<ValidationErrors> => {\r\n        return new Observable<ValidationErrors>(obs => {\r\n          if (control.valueChanges) {\r\n            return control.valueChanges.pipe(\r\n              debounceTime(debounceDuration),\r\n              switchMap(() => service(control.value)),\r\n            ).subscribe((res) => {\r\n              if (res) {\r\n                obs.next(undefined);\r\n              } else {\r\n                obs.next(UNIQUE_RESOURCE_ERROR);\r\n              }\r\n              obs.complete();\r\n            }, () => {\r\n              obs.next(UNIQUE_RESOURCE_ERROR);\r\n              obs.complete();\r\n            });\r\n          } else {\r\n            service(control.value).subscribe((res) => {\r\n              if (res) {\r\n                obs.next(undefined);\r\n              } else {\r\n                obs.next(UNIQUE_RESOURCE_ERROR);\r\n              }\r\n              obs.complete();\r\n            }, () => {\r\n              obs.next(UNIQUE_RESOURCE_ERROR);\r\n              obs.complete();\r\n            })\r\n          }\r\n        });\r\n      }\r\n    }\r\n\r\n    export function noneOf(excluded: Array<any>): ValidatorFn {\r\n      return (control: AbstractControl): {[key: string]: any} => {\r\n        return excluded.find(e => e === control.value) ? {'noneOf': {value: control.value}} : {};\r\n      };\r\n    }\r\n\r\n  }\r\n\r\n}\r\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup, AbstractControl } from '@angular/forms';\r\nimport { Properties } from '../shared/flo-properties';\r\n\r\n@Component({\r\n  selector: 'df-property',\r\n  templateUrl: './df.property.component.html',\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DynamicFormPropertyComponent {\r\n\r\n  @Input()\r\n  model: Properties.ControlModel<any>;\r\n\r\n  @Input() form: FormGroup;\r\n\r\n  constructor() {}\r\n\r\n  get types() {\r\n    return Properties.InputType;\r\n  }\r\n\r\n  get control(): AbstractControl {\r\n    return this.form.controls[this.model.id];\r\n  }\r\n\r\n  get errorData() {\r\n    return (this.model.validation && this.model.validation.errorData ? this.model.validation.errorData : [])\r\n      .filter(e => this.control.errors && this.control.errors[e.id]);\r\n  }\r\n\r\n  get selectControlModel(): Properties.SelectControlModel {\r\n    return this.model as Properties.SelectControlModel;\r\n  }\r\n\r\n  get codeControlModel(): Properties.CodeControlModel<any> {\r\n    return this.model as Properties.CodeControlModel<any>;\r\n  }\r\n\r\n}\r\n","<tr [formGroup]=\"form\" class=\"df-property-row\" [ngClass]=\"{'invalid-property-value': control.invalid}\">\r\n\r\n  <td class=\"df-property-label-cell\">\r\n    <label [attr.for]=\"model.id\" class=\"df-form-label\">{{model.name}}</label>\r\n  </td>\r\n\r\n  <td class=\"df-property-control-cell\">\r\n    <div [ngSwitch]=\"model.type\" class=\"df-property-container\">\r\n\r\n      <label *ngSwitchCase=\"types.CHECKBOX\" class=\"df-property-control\">\r\n        <input type=\"checkbox\" [id]=\"model.id\" [(ngModel)]=\"model.value\" [formControlName]=\"model.id\">\r\n        {{model.value ? 'True' : 'False' }}\r\n      </label>\r\n\r\n      <input *ngSwitchCase=\"types.NUMBER\" class=\"df-property-control\" type=\"number\" [id]=\"model.id\"\r\n             [formControlName]=\"model.id\" [placeholder]=\"model.defaultValue || ''\" [(ngModel)]=\"model.value\">\r\n\r\n      <input *ngSwitchCase=\"types.PASSWORD\" class=\"df-property-control\" type=\"password\" [id]=\"model.id\"\r\n             [formControlName]=\"model.id\" [placeholder]=\"model.defaultValue || ''\" [(ngModel)]=\"model.value\">\r\n\r\n      <input *ngSwitchCase=\"types.EMAIL\" class=\"df-property-control\" type=\"password\" [id]=\"model.id\"\r\n             [formControlName]=\"model.id\" [placeholder]=\"model.defaultValue || ''\" [(ngModel)]=\"model.value\">\r\n\r\n      <input *ngSwitchCase=\"types.URL\" class=\"df-property-control\" type=\"url\" [id]=\"model.id\"\r\n             [formControlName]=\"model.id\" [placeholder]=\"model.defaultValue || ''\" [(ngModel)]=\"model.value\">\r\n\r\n      <select *ngSwitchCase=\"types.SELECT\" class=\"df-property-control\" [id]=\"model.id\"\r\n             [formControlName]=\"model.id\" [(ngModel)]=\"model.value\">\r\n        <option *ngFor=\"let o of selectControlModel.options\" [ngValue]=\"o.value\">{{o.name}}</option>\r\n      </select>\r\n\r\n      <code-editor *ngSwitchCase=\"types.CODE\" class=\"df-property-control\" [id]=\"model.id\"\r\n              [formControlName]=\"model.id\" [language]=\"codeControlModel.language\" [(ngModel)]=\"model.value\" [line-numbers]=\"true\"\r\n              scrollbar-style=\"simple\" [placeholder]=\"model.defaultValue || 'Enter code snippet...'\" [overview-ruler]=\"true\">\r\n      </code-editor>\r\n\r\n      <input *ngSwitchDefault class=\"df-property-control\" type=\"text\" [id]=\"model.id\" [formControlName]=\"model.id\"\r\n             [placeholder]=\"model.defaultValue || ''\" [(ngModel)]=\"model.value\">\r\n    </div>\r\n    <div class=\"help-block\">\r\n      <div>{{model.description}}</div>\r\n      <div *ngFor=\"let e of errorData\" class=\"validation-error-block\">{{e.message}}</div>\r\n    </div>\r\n  </td>\r\n\r\n</tr>\r\n\r\n","import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup, FormControl } from '@angular/forms';\r\nimport { Properties } from '../shared/flo-properties';\r\nimport PropertyFilter = Properties.PropertyFilter;\r\n\r\n@Component({\r\n  selector: 'properties-group',\r\n  templateUrl: './properties.group.component.html',\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class PropertiesGroupComponent implements OnInit {\r\n\r\n  @Input()\r\n  propertiesGroupModel: Properties.PropertiesGroupModel;\r\n\r\n  @Input()\r\n  form: FormGroup;\r\n\r\n  @Input()\r\n  filter: PropertyFilter;\r\n\r\n  ngOnInit() {\r\n    if (this.propertiesGroupModel.isLoading) {\r\n      let subscription = this.propertiesGroupModel.loadedSubject.subscribe(loaded => {\r\n        if (loaded) {\r\n          subscription.unsubscribe();\r\n          this.createGroupControls();\r\n        }\r\n      })\r\n    } else {\r\n      this.createGroupControls();\r\n    }\r\n  }\r\n\r\n  createGroupControls() {\r\n    this.propertiesGroupModel.getControlsModels().forEach(c => {\r\n      if (c.validation) {\r\n        this.form.addControl(c.id, new FormControl(c.value || '', c.validation.validator, c.validation.asyncValidator));\r\n      } else {\r\n        this.form.addControl(c.id, new FormControl(c.value || ''));\r\n      }\r\n    })\r\n  }\r\n\r\n  get controlModelsToDisplay() {\r\n    return this.propertiesGroupModel.getControlsModels().filter(c => !this.filter || this.filter.accept(c.property));\r\n  }\r\n\r\n}\r\n","<div *ngIf=\"propertiesGroupModel && !propertiesGroupModel.isLoading\" class=\"properties-group-container\"\r\n     [formGroup]=\"form\">\r\n  <div\r\n    *ngIf=\"propertiesGroupModel.getControlsModels().length > 0 && controlModelsToDisplay.length === 0; else propertiesList\"\r\n    class=\"no-matches-label\">No results found.\r\n  </div>\r\n</div>\r\n\r\n<ng-template #propertiesList>\r\n  <df-property *ngFor=\"let model of controlModelsToDisplay\" [model]=\"model\" [form]=\"form\"\r\n               class=\"property-row\"></df-property>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { Palette } from './palette/palette.component';\r\nimport { EditorComponent } from './editor/editor.component';\r\nimport { ResizerDirective } from './directives/resizer';\r\nimport { DslEditorComponent } from './dsl-editor/dsl-editor.component';\r\nimport { CodeEditorComponent } from './code-editor/code-editor.component';\r\nimport { PropertiesGroupComponent } from './properties/properties.group.component';\r\nimport { DynamicFormPropertyComponent } from './properties/df.property.component';\r\nimport { PaperComponent } from './editor/paper.component';\r\n\r\n@NgModule({\r\n  imports: [\r\n    FormsModule,\r\n    CommonModule,\r\n    ReactiveFormsModule\r\n  ],\r\n  declarations: [\r\n    Palette,\r\n    EditorComponent,\r\n    ResizerDirective,\r\n    DslEditorComponent,\r\n    CodeEditorComponent,\r\n    PropertiesGroupComponent,\r\n    DynamicFormPropertyComponent,\r\n    PaperComponent\r\n  ],\r\n  exports: [\r\n    EditorComponent,\r\n    DslEditorComponent,\r\n    DynamicFormPropertyComponent,\r\n    PropertiesGroupComponent\r\n  ]\r\n})\r\nexport class FloModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["$","joint","_$","i3.Palette","i4.ResizerDirective","i5.PaperComponent","i3.CodeEditorComponent","i3.DynamicFormPropertyComponent"],"mappings":"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"}