{"version":3,"file":"ajf-material-form-builder.mjs","sources":["../../../projects/material/form-builder/src/branch-line.ts","../../../projects/material/form-builder/src/branch-line.html","../../../projects/material/form-builder/src/choices-origin-data-source.ts","../../../projects/material/form-builder/src/choices-origin-editor.ts","../../../projects/material/form-builder/src/choices-origin-editor.html","../../../projects/material/form-builder/src/form-builder-service.ts","../../../projects/material/form-builder/src/choices-origin-editor-dialog.ts","../../../projects/material/form-builder/src/choices-origin-editor-dialog.html","../../../projects/material/form-builder/src/condition-editor.ts","../../../projects/material/form-builder/src/fb-condition-editor.html","../../../projects/material/form-builder/src/condition-editor-dialog.ts","../../../projects/material/form-builder/src/condition-editor-dialog.html","../../../projects/material/form-builder/src/form-builder-utils.ts","../../../projects/material/form-builder/src/string-identifier-dialog.ts","../../../projects/material/form-builder/src/string-identifier-dialog.html","../../../projects/material/form-builder/src/node-entry.ts","../../../projects/material/form-builder/src/node-entry.html","../../../projects/material/form-builder/src/validation-condition-editor-dialog.ts","../../../projects/material/form-builder/src/validation-condition-editor-dialog.html","../../../projects/material/form-builder/src/warning-condition-editor-dialog.ts","../../../projects/material/form-builder/src/warning-condition-editor-dialog.html","../../../projects/material/form-builder/src/node-properties-name-validator.ts","../../../projects/material/form-builder/src/node-properties.ts","../../../projects/material/form-builder/src/node-properties.html","../../../projects/material/form-builder/src/node-type-entry.ts","../../../projects/material/form-builder/src/node-type-entry.html","../../../projects/material/form-builder/src/node-type-filter.pipe.ts","../../../projects/material/form-builder/src/form-builder.ts","../../../projects/material/form-builder/src/form-builder.html","../../../projects/material/form-builder/src/form-builder-module.ts","../../../projects/material/form-builder/src/public_api.ts","../../../projects/material/form-builder/src/ajf-material-form-builder.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  Renderer2,\n  ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n  selector: 'ajf-fb-branch-line',\n  templateUrl: 'branch-line.html',\n  styleUrls: ['branch-line.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbBranchLine {\n  private _offset = 0;\n  @Input()\n  set offset(offset: number) {\n    this._offset = offset;\n    this._updateOffset();\n  }\n\n  private _color: string = '';\n  @Input()\n  set color(color: string) {\n    this._color = color;\n    this._updateColor();\n  }\n\n  private _height = 0;\n  @Input()\n  set height(height: number) {\n    this._height = height;\n    this._updateHeight();\n  }\n\n  constructor(private _el: ElementRef, private _renderer: Renderer2) {}\n\n  private _updateHeight(): void {\n    const height = `${Math.max(0, this._height - 25)}px`;\n    this._renderer.setStyle(this._el.nativeElement, 'height', height);\n  }\n\n  private _updateOffset(): void {\n    const margin = `${this._offset * 4}px`;\n    this._renderer.setStyle(this._el.nativeElement, 'margin-top', margin);\n    this._renderer.setStyle(this._el.nativeElement, 'margin-left', margin);\n  }\n\n  private _updateColor(): void {\n    this._renderer.setStyle(this._el.nativeElement, 'border-color', this._color);\n  }\n}\n","","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {DataSource} from '@angular/cdk/collections';\n\nimport {BehaviorSubject, Observable} from 'rxjs';\n\nexport type ChoicesOriginChoiceEntry = {\n  label: string;\n  value: string;\n};\n\nexport class ChoicesOriginDataSource extends DataSource<ChoicesOriginChoiceEntry> {\n  private _choices: BehaviorSubject<ChoicesOriginChoiceEntry[]> = new BehaviorSubject<\n    ChoicesOriginChoiceEntry[]\n  >([]);\n  private _choicesObs: Observable<ChoicesOriginChoiceEntry[]>;\n\n  constructor() {\n    super();\n    this._choicesObs = this._choices as Observable<ChoicesOriginChoiceEntry[]>;\n  }\n\n  connect(): Observable<ChoicesOriginChoiceEntry[]> {\n    return this._choicesObs;\n  }\n\n  disconnect() {}\n\n  updateChoices(choices: ChoicesOriginChoiceEntry[]) {\n    this._choices.next(choices);\n  }\n}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfChoicesOrigin, isChoicesFixedOrigin} from '@ajf/core/forms';\nimport {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\n\nimport {ChoicesOriginChoiceEntry, ChoicesOriginDataSource} from './choices-origin-data-source';\n\n@Component({\n  selector: 'ajf-fb-choices-origin-editor',\n  templateUrl: 'choices-origin-editor.html',\n  styleUrls: ['choices-origin-editor.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbChoicesOriginEditor {\n  private _displayedColumns: string[] = ['value', 'label', 'delete'];\n  get displayedColumns(): string[] {\n    return this._displayedColumns;\n  }\n\n  private _choicesOrigin: AjfChoicesOrigin<any> | undefined;\n  get choicesOrigin(): AjfChoicesOrigin<any> | undefined {\n    return this._choicesOrigin;\n  }\n  @Input()\n  set choicesOrigin(choicesOrigin: AjfChoicesOrigin<any> | undefined) {\n    this._choicesOrigin = choicesOrigin;\n    if (choicesOrigin != null) {\n      this.name = choicesOrigin.name;\n      this.label = choicesOrigin.label;\n      this.canEditChoices = isChoicesFixedOrigin(choicesOrigin);\n      this._choicesArr = choicesOrigin.choices;\n    } else {\n      this.name = '';\n      this.label = '';\n      this.canEditChoices = false;\n      this._choicesArr = [];\n    }\n    this._choices.updateChoices(this._choicesArr);\n  }\n\n  editing: {[key: string]: boolean} = {};\n  name: string = '';\n  label: string = '';\n  canEditChoices: boolean = false;\n\n  private _choices: ChoicesOriginDataSource = new ChoicesOriginDataSource();\n  get choices(): ChoicesOriginDataSource {\n    return this._choices;\n  }\n\n  private _choicesArr: ChoicesOriginChoiceEntry[] = [];\n  get choicesArr(): ChoicesOriginChoiceEntry[] {\n    return this._choicesArr;\n  }\n\n  updateValue(evt: any, cell: string, _value: any, rowIdx: number): void {\n    this.editing[rowIdx + '-' + cell] = false;\n    (this._choicesArr[rowIdx] as any)[cell] = evt.target.value;\n    this._choices.updateChoices(this._choicesArr);\n  }\n\n  deleteRow(rowIdx: number): void {\n    this._choicesArr.splice(rowIdx, 1);\n    this._choices.updateChoices(this._choicesArr);\n  }\n\n  addRow(): void {\n    this._choicesArr.push({label: '', value: ''});\n    this._choices.updateChoices(this._choicesArr);\n  }\n}\n","<div>\n  <mat-form-field>\n    <input matInput [(ngModel)]=\"name\" [placeholder]=\"'Name' | transloco\" required #nameInput=\"ngModel\" />\n    <mat-error *ngIf=\"nameInput.invalid && nameInput.touched\">\n      {{'Name is required' | transloco}}\n    </mat-error>\n  </mat-form-field>\n  <mat-form-field>\n    <input matInput [(ngModel)]=\"label\" [placeholder]=\"'Label' | transloco\" />\n  </mat-form-field>\n  <ng-template [ngIf]=\"canEditChoices\">\n    <button (click)=\"addRow()\" mat-button>\n      <mat-icon>add</mat-icon>\n      <span>{{'Add value'|transloco}}</span>\n    </button>\n    <mat-table [dataSource]=\"choices\">\n      <ng-container matColumnDef=\"value\">\n        <mat-header-cell *matHeaderCellDef\n          >{{'Name'|transloco}}</mat-header-cell\n        >\n        <mat-cell *matCellDef=\"let row; let idx = index\">\n          <input matInput [(ngModel)]=\"row.value\" type=\"text\" />\n        </mat-cell>\n      </ng-container>\n      <ng-container matColumnDef=\"label\">\n        <mat-header-cell *matHeaderCellDef\n          >{{'Label'|transloco}}</mat-header-cell\n        >\n        <mat-cell *matCellDef=\"let row; let idx = index\">\n          <input matInput [(ngModel)]=\"row.label\" type=\"text\" />\n        </mat-cell>\n      </ng-container>\n      <ng-container matColumnDef=\"delete\">\n        <mat-header-cell *matHeaderCellDef\n          >{{'Delete'|transloco}}</mat-header-cell\n        >\n        <mat-cell *matCellDef=\"let row; let idx = index\">\n          <mat-icon (click)=\"deleteRow(idx)\">delete</mat-icon>\n        </mat-cell>\n      </ng-container>\n\n      <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n      <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\n    </mat-table>\n  </ng-template>\n</div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {\n  AjfAttachmentsOrigin,\n  AjfChoicesOrigin,\n  AjfField,\n  AjfFieldType,\n  AjfForm,\n  AjfFormStringIdentifier,\n  AjfNode,\n  AjfNodeGroup,\n  AjfNodesOperation,\n  AjfNodeType,\n  AjfRepeatingSlide,\n  AjfSlide,\n  createChoicesFixedOrigin,\n  createContainerNode,\n  createField,\n  createForm,\n  createValidation,\n  createValidationGroup,\n  createWarning,\n  createWarningGroup,\n  isChoicesFixedOrigin,\n  isContainerNode,\n  isEmptyField,\n  isField,\n  isFieldWithChoices,\n  isRangeField,\n  isRepeatingContainerNode,\n  isSlidesNode,\n  isTableField,\n  maxDigitsValidation,\n  maxValidation,\n  minDigitsValidation,\n  minValidation,\n  notEmptyValidation,\n  notEmptyWarning,\n} from '@ajf/core/forms';\nimport {\n  AjfCondition,\n  AjfFormula,\n  alwaysCondition,\n  createCondition,\n  createFormula,\n} from '@ajf/core/models';\nimport {deepCopy} from '@ajf/core/utils';\nimport {moveItemInArray} from '@angular/cdk/drag-drop';\nimport {EventEmitter, Injectable} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Observable, of as obsOf, Subject, Subscription} from 'rxjs';\nimport {filter, map, shareReplay, scan, withLatestFrom, take} from 'rxjs/operators';\n\nimport {\n  AjfAttachmentsOriginsOperation,\n  AjfChoicesOriginsOperation,\n  AjfFormStringIdentifierOperation,\n} from './operations';\n\nexport interface AjfFormBuilderNodeTypeEntry {\n  label: string;\n  nodeType: {node: AjfNodeType; field?: AjfFieldType};\n  isSlide?: boolean;\n}\n\nexport interface AjfFormBuilderNodeEntry {\n  node: AjfNode;\n  container: AjfContainerNode | null;\n  children: AjfFormBuilderNodeEntry[];\n  content: AjfFormBuilderNodeEntry[];\n}\n\nexport interface FormBuilderFieldValidation {\n  isValid: boolean;\n  errors: {[key: string]: any} | null;\n}\n\nexport interface AjfFormBuilderValidation {\n  [key: string]: FormBuilderFieldValidation | null;\n}\n\nexport interface AjfFormBuilderEmptySlot {\n  parent: AjfNode;\n  parentNode: number;\n}\n\n/**\n * Represents a node's position change in the formbuilder.\n */\nexport interface AjfFormBuilderMoveEvent {\n  /**\n   * The node being moved.\n   */\n  nodeEntry: AjfFormBuilderNode;\n\n  /**\n   * The index of the node previous position.\n   */\n  fromIndex: number;\n\n  /**\n   * The index of the node new position.\n   */\n  toIndex: number;\n}\n\nexport type AjfFormBuilderNode = AjfFormBuilderNodeEntry | AjfFormBuilderEmptySlot;\nexport type AjfContainerNode = AjfSlide | AjfRepeatingSlide | AjfNodeGroup;\n\nfunction getNodeContainer(c: {nodes: AjfNode[]}, node: AjfNode): {nodes: AjfNode[]} | null {\n  if (c.nodes.indexOf(node) > -1 || c.nodes.map(n => n.id).indexOf(node?.id) > -1) {\n    return c;\n  }\n  const cns = c.nodes.filter(n => isContainerNode(n));\n  const len = cns.length;\n  for (let i = 0; i < len; i++) {\n    const cn = getNodeContainer(<AjfContainerNode>cns[i], node);\n    if (cn != null) {\n      return cn;\n    }\n  }\n  return null;\n}\n\nfunction toArray(input: string): string[] {\n  if (!input) return [];\n  input = input.replace(/\\[|\\]/g, '').trim();\n  return input\n    .split(',')\n    .map(s => s.trim())\n    .map(s => s.replace(/^['\"]|['\"]$/g, ''))\n    .filter(s => s);\n}\n\n/**\n * Take the defaultValue from the properties box and return the new value to save in the ajf form defaultValue field properties\n * @param value\n * @param node\n * @returns\n * {\"formula\": \"'colazione note'\"}\n * {\"formula\": \"'[\\\"colazione\\\", \\\"docce\\\"]'\"}\n * {\"formula\": \"3\"}\n * {\"formula\": \"(1 === 1)\"}\n */\nfunction getDefaultValue(\n  value: any,\n  node: AjfField<any>,\n): string | string[] | number | boolean | AjfFormula | null {\n  let defaultValue = value && (value as string).trim() != '' ? (value as string) : null;\n  if (defaultValue) {\n    switch (node.fieldType) {\n      case AjfFieldType.Boolean:\n        if (defaultValue === 'true' || defaultValue === '1') {\n          return true;\n        }\n        if (defaultValue === 'false' || defaultValue === '0') {\n          return false;\n        }\n        return createFormula({formula: defaultValue});\n      case AjfFieldType.MultipleChoice:\n        // return a string[]\n        return toArray(defaultValue);\n    }\n    return createFormula({formula: defaultValue});\n  }\n  return defaultValue;\n}\n\n/**\n * Take the defaultValue from the ajf form defaultValue prop (non formula)\n * and return the value to be shown in the properties box\n * @param value\n * @param node\n * @returns\n */\nexport function cleanDefaultValue(value: any, node: AjfField<any>): string | null {\n  if (!value || String(value).trim() === '') {\n    return null;\n  }\n\n  switch (node.fieldType) {\n    case AjfFieldType.String:\n    case AjfFieldType.Text:\n    case AjfFieldType.SingleChoice:\n      if (/^\"[^\"]*\"$/.test(String(value)) || /^'[^']*'$/.test(String(value))) {\n        return String(value);\n      }\n      return `'${String(value)}'`;\n    case AjfFieldType.MultipleChoice:\n      return JSON.stringify(value);\n  }\n  return String(value);\n}\n\nfunction buildFormBuilderNodesSubtree(\n  nodes: AjfNode[],\n  parent: AjfNode,\n  ignoreConditionalBranches = false,\n): AjfFormBuilderNode[] {\n  const entries: AjfFormBuilderNode[] = nodes\n    .filter(n => n.parent === parent.id)\n    .sort((n1, n2) => n1.parentNode - n2.parentNode)\n    .map(n => {\n      const children = buildFormBuilderNodesSubtree(nodes, n);\n      if (children.length === 0) {\n        children.push({parent: n, parentNode: 0});\n      }\n      return <AjfFormBuilderNodeEntry>{\n        node: n,\n        children,\n        content: buildFormBuilderNodesContent(nodes, n),\n      };\n    });\n  if (!ignoreConditionalBranches) {\n    const entriesNum = entries.length;\n    const cbs = parent.conditionalBranches.length;\n    for (let i = entriesNum; i < cbs; i++) {\n      entries.push({parent: parent, parentNode: i});\n    }\n  }\n  return entries;\n}\n\nfunction buildFormBuilderNodesContent(_nodes: AjfNode[], node: AjfNode): AjfFormBuilderNode[] {\n  if (isContainerNode(node)) {\n    return buildFormBuilderNodesSubtree((<AjfContainerNode>node).nodes, node, true);\n  }\n  return [];\n}\n\nexport function flattenNodes(nodes: AjfNode[]): AjfNode[] {\n  let flatNodes: AjfNode[] = [];\n\n  nodes.forEach((node: AjfNode) => {\n    if (isContainerNode(node)) {\n      flatNodes = flatNodes.concat(flattenNodes((<AjfContainerNode>node).nodes));\n    }\n    flatNodes.push(node);\n  });\n\n  return flatNodes;\n}\n\nfunction getDescendants(\n  flatNodes: AjfNode[],\n  parentNode: AjfNode,\n  branch: number | null = null,\n): AjfNode[] {\n  return branch != null\n    ? flatNodes.filter(n => n.parent === parentNode.id && n.parentNode === branch)\n    : flatNodes.filter(n => n.parent === parentNode.id);\n}\n\nfunction removeNodes(nodes: AjfNode[], ids: number[]): AjfNode[] {\n  const len = nodes.length;\n  for (let i = 0; i < len; i++) {\n    const node = nodes[i];\n    if (isContainerNode(node)) {\n      const container = <AjfContainerNode>node;\n      container.nodes = removeNodes(container.nodes, ids);\n    }\n  }\n  return nodes.filter(n => ids.indexOf(n.id) === -1);\n}\n\nfunction deleteNodeSubtree(\n  nodes: AjfNode[],\n  parentNode: AjfNode,\n  branch: number | null = null,\n): AjfNode[] {\n  const flatNodes = flattenNodes(nodes);\n  let delNodes: AjfNode[] = [];\n  let descendants = getDescendants(flatNodes, parentNode, branch);\n  const len = descendants.length;\n  for (let i = 0; i < len; i++) {\n    delNodes = delNodes.concat(getDescendants(flatNodes, descendants[i]));\n  }\n  delNodes = delNodes.concat(descendants);\n  return removeNodes(\n    nodes,\n    delNodes.map(n => n.id),\n  );\n}\n\nlet nodeUniqueId = 0;\n\n@Injectable()\nexport class AjfFormBuilderService {\n  private _availableNodeTypes: AjfFormBuilderNodeTypeEntry[] = [\n    {\n      label: 'Slide',\n      nodeType: {node: AjfNodeType.AjfSlide},\n      isSlide: true,\n    },\n    {\n      label: 'Repeating slide',\n      nodeType: {node: AjfNodeType.AjfRepeatingSlide},\n      isSlide: true,\n    },\n    {\n      label: 'String',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.String},\n    },\n    {\n      label: 'Text',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Text},\n    },\n    {\n      label: 'Number',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Number},\n    },\n    {\n      label: 'Boolean',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Boolean},\n    },\n    {\n      label: 'Single choice',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.SingleChoice},\n    },\n    {\n      label: 'Multiple choice',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.MultipleChoice},\n    },\n    {\n      label: 'Formula',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Formula},\n    },\n    {\n      label: 'Note',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Empty},\n    },\n    {\n      label: 'Date',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Date},\n    },\n    {\n      label: 'Date input',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.DateInput},\n    },\n    {\n      label: 'Time',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Time},\n    },\n    {\n      label: 'Table',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Table},\n    },\n    {\n      label: 'Geolocation',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Geolocation},\n    },\n    {\n      label: 'Barcode',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Barcode},\n    },\n    {\n      label: 'Signature',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Signature},\n    },\n    {\n      label: 'File',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.File},\n    },\n    {\n      label: 'Image',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Image},\n    },\n    {\n      label: 'Range',\n      nodeType: {node: AjfNodeType.AjfField, field: AjfFieldType.Range},\n    },\n  ];\n  /**\n   * Available node types\n   *\n   * @readonly\n   * @memberOf AjfFormBuilderService\n   */\n  get availableNodeTypes(): AjfFormBuilderNodeTypeEntry[] {\n    return this._availableNodeTypes;\n  }\n\n  private _form: BehaviorSubject<AjfForm | null> = new BehaviorSubject<AjfForm | null>(null);\n  private _formObs: Observable<AjfForm | null> = this._form as Observable<AjfForm | null>;\n\n  /**\n   * Current edited form stream\n   *\n   * @readonly\n   * @memberOf AjfFormBuilderService\n   */\n  get form(): Observable<AjfForm | null> {\n    return this._formObs;\n  }\n\n  private _attachmentsOrigins: Observable<AjfAttachmentsOrigin<any>[]> = obsOf([]);\n  get attachmentsOrigins(): Observable<AjfAttachmentsOrigin<any>[]> {\n    return this._attachmentsOrigins;\n  }\n\n  private _choicesOrigins: Observable<AjfChoicesOrigin<any>[]> = obsOf([]);\n  get choicesOrigins(): Observable<AjfChoicesOrigin<any>[]> {\n    return this._choicesOrigins;\n  }\n\n  private _stringIdentifier: Observable<AjfFormStringIdentifier[]> = obsOf([]);\n  get stringIdentifier(): Observable<AjfFormStringIdentifier[]> {\n    return this._stringIdentifier;\n  }\n\n  private _nodesWithoutChoiceOrigins: Observable<AjfSlide[]> = obsOf([]);\n  private _nodes: Observable<AjfNode[]> = obsOf([]);\n  get nodes(): Observable<AjfNode[]> {\n    return this._nodes;\n  }\n\n  private _flatNodes: Observable<AjfNode[]> | undefined;\n  get flatNodes(): Observable<AjfNode[]> | undefined {\n    return this._flatNodes;\n  }\n\n  private _flatFields: Observable<AjfField[]> = obsOf([]);\n  get flatFields(): Observable<AjfField[]> {\n    return this._flatFields;\n  }\n\n  private _nodeEntriesTree: Observable<AjfFormBuilderNodeEntry[]> = obsOf([]);\n  get nodeEntriesTree(): Observable<AjfFormBuilderNodeEntry[]> {\n    return this._nodeEntriesTree;\n  }\n\n  /**\n   * A list of the ids of the dropLists connected to the source list.\n   */\n  private _connectedDropLists: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);\n  get connectedDropLists(): BehaviorSubject<string[]> {\n    return this._connectedDropLists;\n  }\n\n  /**\n   * A dictionary of the 'expanded' status of all nodeEntries in the tree {node.name: boolean}\n   */\n  private _nodeEntriesTreeExpandedStatus: BehaviorSubject<{[name: string]: boolean}> =\n    new BehaviorSubject<{[name: string]: boolean}>({});\n  get nodeEntriesTreeExpandedStatus(): BehaviorSubject<{[name: string]: boolean}> {\n    return this._nodeEntriesTreeExpandedStatus;\n  }\n\n  /**\n   * Determines the default expanded state of nodeEntries when the FormBuilder loads\n   */\n  private _defaultExpanded: boolean = false;\n\n  private _editedNodeEntry: BehaviorSubject<AjfFormBuilderNodeEntry | null> =\n    new BehaviorSubject<AjfFormBuilderNodeEntry | null>(null);\n  private _editedNodeEntryObs: Observable<AjfFormBuilderNodeEntry | null> = this\n    ._editedNodeEntry as Observable<AjfFormBuilderNodeEntry | null>;\n  get editedNodeEntry(): Observable<AjfFormBuilderNodeEntry | null> {\n    return this._editedNodeEntryObs;\n  }\n\n  /**\n   * New field or node just added in tree\n   */\n  private _newNodeEntry: BehaviorSubject<AjfNode | AjfField | null> = new BehaviorSubject<\n    AjfNode | AjfField | null\n  >(null);\n\n  private _editedCondition: BehaviorSubject<AjfCondition | null> =\n    new BehaviorSubject<AjfCondition | null>(null);\n  private _editedConditionObs: Observable<AjfCondition | null> = this\n    ._editedCondition as Observable<AjfCondition | null>;\n  get editedCondition(): Observable<AjfCondition | null> {\n    return this._editedConditionObs;\n  }\n\n  private _editedChoicesOrigin: BehaviorSubject<AjfChoicesOrigin<any> | null> =\n    new BehaviorSubject<AjfChoicesOrigin<any> | null>(null);\n  private _editedChoicesOriginObs: Observable<AjfChoicesOrigin<any> | null> = this\n    ._editedChoicesOrigin as Observable<AjfChoicesOrigin<any> | null>;\n  get editedChoicesOrigin(): Observable<AjfChoicesOrigin<any> | null> {\n    return this._editedChoicesOriginObs;\n  }\n\n  private _editedNodesValidation: BehaviorSubject<AjfFormBuilderValidation | null> =\n    new BehaviorSubject<AjfFormBuilderValidation | null>(null);\n  private _editedNodesValidationObs: Observable<AjfFormBuilderValidation | null> = this\n    ._editedNodesValidation as Observable<AjfFormBuilderValidation | null>;\n  get editedNodesValidation(): Observable<AjfFormBuilderValidation | null> {\n    return this._editedNodesValidationObs;\n  }\n\n  private _beforeNodesUpdate: EventEmitter<void> = new EventEmitter<void>();\n  private _beforeNodesUpdateObs: Observable<void> = this._beforeNodesUpdate as Observable<void>;\n  get beforeNodesUpdate(): Observable<void> {\n    return this._beforeNodesUpdateObs;\n  }\n  private _afterNodeUpdate: EventEmitter<void> = new EventEmitter<void>();\n  private _afterNodeUpdateObs: Observable<void> = this._afterNodeUpdate as Observable<void>;\n  get afterNodeUpdate(): Observable<void> {\n    return this._afterNodeUpdateObs;\n  }\n\n  private _nodesUpdates: Subject<AjfNodesOperation> = new Subject<AjfNodesOperation>();\n  private _attachmentsOriginsUpdates: Subject<AjfAttachmentsOriginsOperation> =\n    new Subject<AjfAttachmentsOriginsOperation>();\n  private _choicesOriginsUpdates: Subject<AjfChoicesOriginsOperation> =\n    new Subject<AjfChoicesOriginsOperation>();\n  private _stringIdentifierUpdates: Subject<AjfFormStringIdentifierOperation> =\n    new Subject<AjfFormStringIdentifierOperation>();\n\n  private _saveNodeEntryEvent: EventEmitter<any> = new EventEmitter<any>();\n  private _deleteNodeEntryEvent: EventEmitter<AjfFormBuilderNodeEntry> =\n    new EventEmitter<AjfFormBuilderNodeEntry>();\n  /**\n   * Event fired when the position of a node in a tree changes.\n   */\n  private _moveNodeEntryEvent: EventEmitter<AjfFormBuilderMoveEvent> =\n    new EventEmitter<AjfFormBuilderMoveEvent>();\n\n  /**\n   * Subscribes to the moveNodeEntryEvent event emitter;\n   */\n  private _moveNodeSub: Subscription = Subscription.EMPTY;\n\n  /**\n   * Counters for default name assigned to inserted fields/slides\n   */\n  private _emptyFieldCounter: number = 1;\n  private _emptySlideCounter: number = 1;\n\n  constructor() {\n    this._initChoicesOriginsStreams();\n    this._initAttachmentsOriginsStreams();\n    this._initStringIdentifierStreams();\n    this._initNodesStreams();\n    this._initFormStreams();\n    this._initSaveNode();\n    this._initMoveNode();\n    this._initDeleteNode();\n  }\n\n  /**\n   * Sets the current edited form\n   *\n   * @param form\n   *\n   * @memberOf AjfFormBuilderService\n   */\n  setForm(form: AjfForm | null): void {\n    if (form !== this._form.getValue()) {\n      this._form.next(form);\n    }\n  }\n\n  editNodeEntry(nodeEntry: AjfFormBuilderNodeEntry): void {\n    this._editedNodeEntry.next(nodeEntry);\n  }\n\n  /**\n   * Add a node validation entry\n   * @param fbNodeValidation\n   */\n  editNodeValidation(fbNodeValidation: AjfFormBuilderValidation): void {\n    this._editedNodesValidation.next({\n      ...this._editedNodesValidation.value,\n      ...fbNodeValidation,\n    });\n  }\n\n  /**\n   * Return if a node is valid\n   * @param nodeName\n   */\n  isNodeValid(nodeName: string): boolean {\n    const allNodeValidations = this._editedNodesValidation.value;\n    if (!allNodeValidations || allNodeValidations[nodeName] == null) {\n      return true;\n    }\n    return allNodeValidations[nodeName].isValid;\n  }\n\n  /**\n   * Clean node validation entries when a node is deleted\n   * @param fbNodeValidation the deleted node\n   */\n  cleanNodeValidation(fbNodeName: string): void {\n    if (fbNodeName) {\n      // set validation true for old unused name\n      const fbNodeValidation: AjfFormBuilderValidation = {};\n      fbNodeValidation[fbNodeName] = {isValid: true, errors: null};\n      this.editNodeValidation(fbNodeValidation);\n    }\n\n    // Clean all not existing invalid nodes\n    const allNodeValidations = this._editedNodesValidation.value;\n    if (allNodeValidations && this._flatNodes) {\n      const invalidNodes: string[] = [];\n\n      Object.keys(allNodeValidations).forEach(key => {\n        if (allNodeValidations[key]?.isValid === false) {\n          invalidNodes.push(key);\n        }\n      });\n\n      if (invalidNodes.length) {\n        this._flatNodes.pipe(take(1)).subscribe(nodes => {\n          const existingNodeNames = new Set(nodes.map(n => n.name));\n\n          invalidNodes.forEach(invalidNode => {\n            if (!existingNodeNames.has(invalidNode)) {\n              delete allNodeValidations[invalidNode];\n            }\n          });\n\n          this._editedNodesValidation.next(allNodeValidations);\n        });\n      }\n    }\n  }\n\n  editCondition(condition: AjfCondition): void {\n    this._editedCondition.next(condition);\n  }\n\n  saveCurrentCondition(condition: string): void {\n    let c = this._editedCondition.getValue();\n    if (c == null) {\n      return;\n    }\n    c.condition = condition;\n    this._editedCondition.next(null);\n  }\n\n  cancelConditionEdit(): void {\n    this._editedChoicesOrigin.next(null);\n  }\n\n  assignListId(node: AjfNode, empty: boolean = false): string {\n    if (node.nodeType === AjfNodeType.AjfSlide || node.nodeType === AjfNodeType.AjfRepeatingSlide) {\n      const listId = empty ? `empty_fields_list_${node.id}` : `fields_list_${node.id}`;\n      if (this._connectedDropLists.value.indexOf(listId) == -1) {\n        this._connectDropList(listId);\n      }\n      return listId;\n    }\n    return '';\n  }\n\n  insertNode(\n    nodeType: AjfFormBuilderNodeTypeEntry,\n    parent: AjfNode,\n    parentNode: number,\n    inContent = false,\n    insertInIndex = 0,\n  ): void {\n    let node: AjfNode | AjfField;\n    const id = ++nodeUniqueId;\n    const isFieldNode = nodeType.nodeType?.field != null;\n    if (isFieldNode) {\n      node = createField({\n        id,\n        nodeType: AjfNodeType.AjfField,\n        fieldType: nodeType.nodeType.field!,\n        parent: parent.id,\n        parentNode,\n        name: `new_field_${this._emptyFieldCounter}`,\n        label: `New ${AjfFieldType[nodeType.nodeType.field!]} field ${this._emptyFieldCounter}`,\n      });\n      this._emptyFieldCounter++;\n    } else {\n      node = createContainerNode({\n        id,\n        nodeType: nodeType.nodeType.node,\n        parent: 0,\n        parentNode,\n        name: `new_slide_${this._emptySlideCounter}`,\n        label: `New Slide ${this._emptySlideCounter}`,\n        nodes: [],\n      });\n      this._emptySlideCounter++;\n    }\n    this.cancelNodeEntryEdit();\n    this._newNodeEntry.next(node);\n\n    this._beforeNodesUpdate.emit();\n    this._nodesUpdates.next((nodes: AjfNode[]): AjfNode[] => {\n      const cn =\n        isContainerNode(parent) && inContent\n          ? <AjfContainerNode>parent\n          : (getNodeContainer({nodes}, parent) as AjfContainerNode);\n      if (!isFieldNode) {\n        let newNodes = nodes.slice(0);\n        newNodes.splice(insertInIndex, 0, node);\n        newNodes = this._updateNodesList(0, newNodes);\n        return newNodes;\n      } else {\n        let newNodes = cn.nodes.slice(0);\n        newNodes.splice(insertInIndex, 0, node);\n        newNodes = this._updateNodesList(cn.id, newNodes);\n        cn.nodes = newNodes;\n      }\n      return nodes;\n    });\n  }\n\n  saveNodeEntry(properties: any): void {\n    this._saveNodeEntryEvent.emit(properties);\n  }\n\n  cancelNodeEntryEdit(): void {\n    this._editedNodeEntry.next(null);\n  }\n\n  deleteNodeEntry(nodeEntry: AjfFormBuilderNodeEntry): void {\n    this._deleteNodeEntryEvent.next(nodeEntry);\n    this.cleanNodeValidation(nodeEntry.node.name);\n  }\n\n  /**\n   * Triggers the moveNode event when a node is moved in the formbuilder.\n   * @param nodeEntry The node to be moved.\n   */\n  moveNodeEntry(nodeEntry: AjfFormBuilderNodeEntry, from: number, to: number): void {\n    const moveEvent: AjfFormBuilderMoveEvent = {nodeEntry: nodeEntry, fromIndex: from, toIndex: to};\n    this._moveNodeEntryEvent.next(moveEvent);\n    this.cancelNodeEntryEdit();\n  }\n\n  getCurrentForm(): Observable<AjfForm> {\n    return combineLatest([\n      this.form,\n      this._nodesWithoutChoiceOrigins,\n      this.attachmentsOrigins,\n      this.choicesOrigins,\n      this.stringIdentifier,\n    ]).pipe(\n      filter(([form]) => form != null),\n      map(([form, nodes, attachmentsOrigins, choicesOrigins, stringIdentifier]) => {\n        const supplementaryInformations = (form || {}).supplementaryInformations;\n        return createForm({\n          choicesOrigins: [...choicesOrigins],\n          attachmentsOrigins: [...attachmentsOrigins],\n          stringIdentifier: [...(stringIdentifier || [])],\n          nodes: [...nodes],\n          supplementaryInformations,\n        });\n      }),\n    );\n  }\n\n  editChoicesOrigin(choicesOrigin: AjfChoicesOrigin<any>): void {\n    this._editedChoicesOrigin.next(choicesOrigin);\n  }\n\n  createChoicesOrigin(): void {\n    this._editedChoicesOrigin.next(createChoicesFixedOrigin<any>({name: ''}));\n  }\n\n  cancelChoicesOriginEdit(): void {\n    this._editedChoicesOrigin.next(null);\n  }\n\n  saveChoicesOrigin(params: {label: string; name: string; choices: any[]}): void {\n    const choicesOrigin = this._editedChoicesOrigin.getValue();\n    const choicesOriginPreviousName: string | undefined = choicesOrigin?.name;\n    if (choicesOrigin != null) {\n      choicesOrigin.label = params.label;\n      choicesOrigin.name = params.name;\n      if (isChoicesFixedOrigin(choicesOrigin)) {\n        choicesOrigin.choices = params.choices;\n      }\n      this._updateChoicesOriginRefInNodes(choicesOriginPreviousName, params.name);\n      this._choicesOriginsUpdates.next(choicesOrigins => {\n        const idx = choicesOrigins.indexOf(choicesOrigin);\n        if (idx > -1) {\n          choicesOrigins = [\n            ...choicesOrigins.slice(0, idx),\n            choicesOrigin,\n            ...choicesOrigins.slice(idx + 1),\n          ];\n        } else {\n          choicesOrigins = [...choicesOrigins, choicesOrigin];\n        }\n        return choicesOrigins;\n      });\n    }\n    this._editedChoicesOrigin.next(null);\n  }\n\n  saveStringIdentifier(identifier: AjfFormStringIdentifier[]): void {\n    this._stringIdentifierUpdates.next(() => [...identifier]);\n  }\n\n  /**\n   * Resets the nodeEntriesTreeExpandedStatus dictionary to an empty object.\n   */\n  resetNodeEntriesTreeExpandedStatus(): void {\n    this._nodeEntriesTreeExpandedStatus.next({});\n  }\n\n  /**\n   * Gets the expanded status of an entry in the nodeEntriesTreeExpandedStatus dictionary\n   * @param nodeName The unique name of the nodeEntry\n   */\n  getExpandedStatus(nodeName: string): Observable<boolean> {\n    return this._nodeEntriesTreeExpandedStatus.pipe(\n      map(tree => {\n        if (nodeName in tree) {\n          return tree[nodeName];\n        }\n        return this._defaultExpanded;\n      }),\n    );\n  }\n\n  /**\n   * Upserts an entry in the nodeEntriesTreeExpandedStatus dictionary\n   * @param nodeName The unique name of the nodeEntry\n   * @param expanded True if the nodeEntry is expanded\n   */\n  updateExpandedStatus(nodeName: string, expanded: boolean): void {\n    if (!nodeName) return;\n    const dictValue = this._nodeEntriesTreeExpandedStatus.value;\n    this._nodeEntriesTreeExpandedStatus.next({...dictValue, [nodeName]: expanded});\n  }\n\n  /**\n   * Removes an entry from the nodeEntriesTreeExpandedStatus dictionary\n   * @param nodeName The unique name of the nodeEntry\n   */\n  removeExpandedStatus(nodeName: string): void {\n    const dictValue = this._nodeEntriesTreeExpandedStatus.value;\n    delete dictValue[nodeName];\n    this._nodeEntriesTreeExpandedStatus.next(dictValue);\n  }\n\n  /**\n   * Sets expanded to true for each entry in the nodeEntriesTreeExpandedStatus dictionary\n   */\n  expandAll() {\n    const dictValue = this._nodeEntriesTreeExpandedStatus.value;\n    for (let nodeName in dictValue) {\n      dictValue[nodeName] = true;\n    }\n    this._defaultExpanded = true;\n    this._nodeEntriesTreeExpandedStatus.next(dictValue);\n  }\n\n  /**\n   * Sets expanded to false for each entry in the nodeEntriesTreeExpandedStatus dictionary\n   */\n  collapseAll() {\n    const dictValue = this._nodeEntriesTreeExpandedStatus.value;\n    for (let nodeName in dictValue) {\n      dictValue[nodeName] = false;\n    }\n    this._defaultExpanded = false;\n    this._nodeEntriesTreeExpandedStatus.next(dictValue);\n  }\n\n  /**\n   * Resets the empty fields/slides counters\n   */\n  resetEmptyCounters() {\n    this._emptyFieldCounter = 1;\n    this._emptySlideCounter = 1;\n  }\n\n  /**\n   * Searches the form nodes for field nodes with choicesOriginRef corresponding\n   * to an edited choicesOrigin and updates it with the new name.\n   * @param previous_name The choicesOrigin previous name\n   * @param new_name The choicesOrigin new name\n   */\n  private _updateChoicesOriginRefInNodes(previous_name?: string, new_name?: string): void {\n    if (!previous_name || !new_name) return;\n    const currentForm: AjfForm | null = this._form.value;\n    if (!currentForm) return;\n    const updatedNodes: AjfNode[] = [];\n    const currentSlides: (AjfSlide | AjfRepeatingSlide)[] = currentForm.nodes;\n    for (let slide of currentSlides) {\n      if (!slide.nodes || !slide.nodes.length) continue;\n      for (let node of slide.nodes) {\n        const nodeObj = node as {[key: string]: any};\n        if (nodeObj['choicesOriginRef'] && nodeObj['choicesOriginRef'] === previous_name) {\n          nodeObj['choicesOriginRef'] = new_name;\n          updatedNodes.push(nodeObj as AjfNode);\n        }\n      }\n    }\n    this._nodesUpdates.next((_nodes: AjfNode[]): AjfNode[] => {\n      return currentForm.nodes.slice(0);\n    });\n  }\n\n  private _buildFormBuilderNodesTree(nodes: AjfNode[]): (AjfFormBuilderNode | null)[] {\n    this._updateNodesList(0, nodes);\n    const rootNodes = nodes.filter(\n      n => n.nodeType == AjfNodeType.AjfSlide || n.nodeType == AjfNodeType.AjfRepeatingSlide,\n    );\n    if (rootNodes.length === 0) {\n      return [null];\n    }\n    const rootNode = rootNodes[0];\n    if (isSlidesNode(rootNode)) {\n      const tree: AjfFormBuilderNode[] = [];\n      tree.push(<AjfFormBuilderNodeEntry>{\n        node: rootNode,\n        container: null,\n        children: buildFormBuilderNodesSubtree(nodes, rootNode),\n        content: buildFormBuilderNodesContent(nodes, rootNode),\n      });\n\n      const lastAddedAjfNode = this._newNodeEntry.value;\n      if (lastAddedAjfNode) {\n        const lastAddedFbNode = this._findNodeInTree(tree, lastAddedAjfNode);\n        if (lastAddedFbNode) {\n          this.editNodeEntry(<AjfFormBuilderNodeEntry>lastAddedFbNode);\n        }\n        this._newNodeEntry.next(null);\n      }\n      return tree;\n    }\n    throw new Error('Invalid form definition');\n  }\n\n  /**\n   * Find an ajfNode in AjfFormBuilderNodeEntry tree, by node name\n   * @param tree\n   * @param node\n   * @returns the AjfFormBuilderNodeEntry node\n   */\n  private _findNodeInTree(\n    tree: AjfFormBuilderNode[],\n    node: AjfNode | AjfField,\n  ): AjfFormBuilderNodeEntry | null {\n    for (const fbn of tree) {\n      const fbe = fbn as AjfFormBuilderNodeEntry;\n      if (fbe.node?.name === node.name) {\n        return fbe;\n      }\n      if (fbe.content && fbe.content.length) {\n        const foundInContent = this._findNodeInTree(fbe.content, node);\n        if (foundInContent) {\n          return foundInContent;\n        }\n      }\n      if (fbe.children && fbe.children.length) {\n        const foundInChildren = this._findNodeInTree(fbe.children, node);\n        if (foundInChildren) {\n          return foundInChildren;\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Adds the id of a dropList to be connected with the FormBuilder source list.\n   * @param listId The id of the list to connect.\n   */\n  private _connectDropList(listId: string) {\n    let connectedLists = this._connectedDropLists.value.slice(0);\n    this._connectedDropLists.next([...connectedLists, listId]);\n  }\n\n  private _findMaxNodeId(nodes: AjfNode[], _curMaxId = 0): number {\n    let maxId = 0;\n    let maxNewFieldCounter = 0;\n    let maxNewSlideCounter = 0;\n    nodes.forEach(n => {\n      maxId = Math.max(maxId, n.id);\n      if (isContainerNode(n)) {\n        maxId = Math.max(maxId, this._findMaxNodeId((<AjfContainerNode>n).nodes));\n      }\n\n      if (n.name.startsWith('new_field_')) {\n        const newFieldNumber = this._extractNumberFromName(n.name, 'new_field_');\n        if (newFieldNumber !== null) {\n          maxNewFieldCounter = Math.max(maxNewFieldCounter, newFieldNumber);\n        }\n      } else if (n.name.startsWith('new_slide_')) {\n        const newSlideNumber = this._extractNumberFromName(n.name, 'new_slide_');\n        if (newSlideNumber !== null) {\n          maxNewSlideCounter = Math.max(maxNewSlideCounter, newSlideNumber);\n        }\n      }\n    });\n    this._emptyFieldCounter = Math.max(this._emptyFieldCounter, maxNewFieldCounter + 1);\n    this._emptySlideCounter = Math.max(this._emptySlideCounter, maxNewSlideCounter + 1);\n    return maxId;\n  }\n\n  private _extractNumberFromName(str: string, prefix: string): number | null {\n    const regex = new RegExp(`^${prefix}(\\\\d+)$`);\n    const match = regex.exec(str);\n    return match ? Number(match[1]) : null;\n  }\n\n  private _initFormStreams(): void {\n    this._form.subscribe((form: AjfForm | null) => {\n      nodeUniqueId = 0;\n      if (form != null && form.nodes != null && form.nodes.length > 0) {\n        nodeUniqueId = this._findMaxNodeId(form.nodes);\n      }\n      this._nodesUpdates.next((_nodes: AjfNode[]): AjfNode[] => {\n        return form != null && form.nodes != null ? form.nodes.slice(0) : [];\n      });\n      this._attachmentsOriginsUpdates.next(\n        (_attachmentsOrigins: AjfAttachmentsOrigin<any>[]): AjfAttachmentsOrigin<any>[] => {\n          return form != null && form.attachmentsOrigins != null\n            ? form.attachmentsOrigins.slice(0)\n            : [];\n        },\n      );\n      this._choicesOriginsUpdates.next(\n        (_choicesOrigins: AjfChoicesOrigin<any>[]): AjfChoicesOrigin<any>[] => {\n          return form != null && form.choicesOrigins != null ? form.choicesOrigins.slice(0) : [];\n        },\n      );\n      this._stringIdentifierUpdates.next(\n        (_: AjfFormStringIdentifier[]): AjfFormStringIdentifier[] => {\n          return form != null && form.stringIdentifier != null\n            ? form.stringIdentifier.slice(0)\n            : [];\n        },\n      );\n    });\n  }\n\n  private _initChoicesOriginsStreams(): void {\n    this._choicesOrigins = (<Observable<AjfChoicesOriginsOperation>>(\n      this._choicesOriginsUpdates\n    )).pipe(\n      scan((choicesOrigins: AjfChoicesOrigin<any>[], op: AjfChoicesOriginsOperation) => {\n        return op(choicesOrigins);\n      }, []),\n      shareReplay(1),\n    );\n  }\n\n  private _initAttachmentsOriginsStreams(): void {\n    this._attachmentsOrigins = this._attachmentsOriginsUpdates.pipe(\n      scan(\n        (attachmentsOrigins: AjfAttachmentsOrigin<any>[], op: AjfAttachmentsOriginsOperation) => {\n          return op(attachmentsOrigins);\n        },\n        [],\n      ),\n      shareReplay(1),\n    );\n  }\n\n  private _initStringIdentifierStreams(): void {\n    this._stringIdentifier = this._stringIdentifierUpdates.pipe(\n      scan((stringIdentifier: AjfFormStringIdentifier[], op: AjfFormStringIdentifierOperation) => {\n        return op(stringIdentifier);\n      }, []),\n      shareReplay(1),\n    );\n  }\n\n  private _initNodesStreams(): void {\n    this._nodes = (<Observable<AjfNodesOperation>>this._nodesUpdates).pipe(\n      scan((nodes: AjfNode[], op: AjfNodesOperation) => {\n        return op(nodes);\n      }, []),\n      shareReplay(1),\n    );\n\n    this._nodesWithoutChoiceOrigins = (this._nodes as Observable<AjfSlide[]>).pipe(\n      map(slides =>\n        slides.map(slide => {\n          slide.nodes = (slide.nodes as AjfField[]).map((node: AjfField) => {\n            if (isFieldWithChoices(node)) {\n              const fwc = deepCopy(node);\n              if (fwc && fwc.choices) {\n                delete fwc.choices;\n              }\n              if (fwc && fwc.choicesOrigin) {\n                delete fwc.choicesOrigin;\n              }\n              return fwc;\n            }\n            return node;\n          });\n          return slide;\n        }),\n      ),\n    );\n\n    this._flatNodes = this._nodes.pipe(\n      map((nodes: AjfNode[]) => flattenNodes(nodes)),\n      shareReplay(1),\n    );\n\n    this._flatFields = this._flatNodes.pipe(\n      map((nodes: AjfNode[]) => <AjfField[]>nodes.filter(n => !isContainerNode(n))),\n      shareReplay(1),\n    );\n\n    this._nodeEntriesTree = this._nodes.pipe(\n      map(nodes => <AjfFormBuilderNodeEntry[]>this._buildFormBuilderNodesTree(nodes)),\n      shareReplay(1),\n    );\n  }\n\n  private _initSaveNode(): void {\n    this._saveNodeEntryEvent\n      .pipe(\n        withLatestFrom(this.editedNodeEntry, this.choicesOrigins, this.attachmentsOrigins),\n        filter(([_, nodeEntry]) => nodeEntry != null),\n        map(([properties, ne]) => {\n          this._beforeNodesUpdate.emit();\n          const nodeEntry = ne as AjfFormBuilderNodeEntry;\n          const origNode = nodeEntry.node;\n          const node = deepCopy(origNode);\n          node.id = nodeEntry.node.id;\n          node.name = properties.name;\n          node.label = properties.label;\n          node.visibility =\n            properties.visibility != null\n              ? createCondition({condition: properties.visibility})\n              : null;\n\n          const oldConditionalBranches = node.conditionalBranches.length;\n          node.conditionalBranches =\n            properties.conditionalBranches != null\n              ? properties.conditionalBranches.map((condition: string) =>\n                  createCondition({condition}),\n                )\n              : [alwaysCondition()];\n          const newConditionalBranches = node.conditionalBranches.length;\n\n          if (isRepeatingContainerNode(node)) {\n            node.formulaReps =\n              properties.formulaReps != null\n                ? createFormula({formula: properties.formulaReps})\n                : undefined;\n            node.minReps = properties.minReps;\n            node.maxReps = properties.maxReps;\n          }\n\n          if (isField(node)) {\n            node.hint = properties.hint;\n            node.editable = !properties.readonlyField;\n            node.description = properties.description;\n            node.defaultValue = getDefaultValue(properties.defaultValue, node);\n            node.formula =\n              properties.formula != null ? createFormula({formula: properties.formula}) : undefined;\n            const forceValue = properties.value;\n            const notEmpty = properties.notEmpty;\n            const validationConditions = properties.validationConditions;\n            let minValue: number | null = parseInt(properties.minValue, 10);\n            let maxValue: number | null = parseInt(properties.maxValue, 10);\n            let minDigits: number | null = parseInt(properties.minDigits, 10);\n            let maxDigits: number | null = parseInt(properties.maxDigits, 10);\n            if (isNaN(minValue)) {\n              minValue = null;\n            }\n            if (isNaN(maxValue)) {\n              maxValue = null;\n            }\n            if (isNaN(minDigits)) {\n              minDigits = null;\n            }\n            if (isNaN(maxDigits)) {\n              maxDigits = null;\n            }\n            if (\n              forceValue != null ||\n              notEmpty != null ||\n              (validationConditions != null && validationConditions.length > 0) ||\n              minValue != null ||\n              maxValue != null ||\n              minDigits != null ||\n              maxDigits != null\n            ) {\n              const validation = node.validation || createValidationGroup({});\n              validation.forceValue = forceValue;\n              validation.notEmpty = notEmpty ? notEmptyValidation() : undefined;\n              validation.minValue = minValue != null ? minValidation(minValue) : undefined;\n              validation.maxValue = maxValue != null ? maxValidation(maxValue) : undefined;\n              validation.minDigits = minDigits != null ? minDigitsValidation(minDigits) : undefined;\n              validation.maxDigits = maxDigits != null ? maxDigitsValidation(maxDigits) : undefined;\n              validation.conditions = (validationConditions || []).map(\n                (c: {condition: string; errorMessage: string}) =>\n                  createValidation({\n                    condition: c.condition,\n                    errorMessage: c.errorMessage,\n                  }),\n              );\n              node.validation = validation;\n            } else {\n              node.validation = undefined;\n            }\n            const notEmptyWarn = properties.notEmptyWarning;\n            const warningConditions = properties.warningConditions;\n            if (\n              notEmptyWarn != null ||\n              (warningConditions != null && warningConditions.length > 0)\n            ) {\n              const warning = node.warning || createWarningGroup({});\n              warning.notEmpty = notEmptyWarn ? notEmptyWarning() : undefined;\n              warning.conditions = (warningConditions || []).map(\n                (w: {condition: string; warningMessage: string}) =>\n                  createWarning({\n                    condition: w.condition,\n                    warningMessage: w.warningMessage,\n                  }),\n              );\n              node.warning = warning;\n            } else {\n              node.warning = undefined;\n            }\n            node.nextSlideCondition =\n              properties.nextSlideCondition != null\n                ? createCondition({condition: properties.nextSlideCondition})\n                : undefined;\n            node.size = properties.size;\n\n            if (isFieldWithChoices(node)) {\n              (node as any).choicesOriginRef = properties.choicesOriginRef;\n              node.forceExpanded = properties.forceExpanded;\n              node.forceNarrow = properties.forceNarrow;\n              node.triggerConditions = (properties.triggerConditions || []).map((t: string) =>\n                createCondition({condition: t}),\n              );\n            }\n\n            if (isRangeField(node)) {\n              node.start = properties.start;\n              node.end = properties.end;\n              node.step = properties.step;\n            }\n\n            if (isEmptyField(node)) {\n              node.HTML = properties.HTML;\n            }\n\n            if (isTableField(node)) {\n              let {columnTypes, rows, columnLabels, rowLabels} = JSON.parse(properties.tableDef);\n              node.columnTypes = columnTypes || [];\n              node.rows = rows || [];\n              node.columnLabels = columnLabels || [];\n              node.rowLabels = rowLabels || [];\n              node.hideEmptyRows = properties.hideEmptyRows;\n            }\n          }\n\n          this._editedNodeEntry.next(null);\n\n          return (nodes: AjfNode[]): AjfNode[] => {\n            let cn = getNodeContainer({nodes}, origNode);\n            if (cn != null) {\n              // TODO: @trik check this, was always true?\n              // if (cn instanceof AjfNode) {\n              const replaceNodes = cn.nodes === nodes;\n              const idx = cn.nodes.map(n => n.id).indexOf(origNode.id);\n              let newNodes = cn.nodes.slice(0, idx);\n              newNodes.push(node);\n              newNodes = newNodes.concat(cn.nodes.slice(idx + 1));\n              cn.nodes = newNodes;\n              if (replaceNodes) {\n                nodes = newNodes;\n              } else {\n                nodes = nodes.slice(0);\n              }\n              // } else {\n              //   const idx = nodes.indexOf(origNode);\n              //   nodes = nodes.slice(0, idx).concat([node]).concat(nodes.slice(idx + 1));\n              // }\n              if (newConditionalBranches < oldConditionalBranches) {\n                for (let i = newConditionalBranches; i < oldConditionalBranches; i++) {\n                  nodes = deleteNodeSubtree(nodes, node, i);\n                }\n              }\n            }\n            return nodes;\n          };\n        }),\n      )\n      .subscribe(this._nodesUpdates);\n  }\n\n  private _initDeleteNode(): void {\n    (<Observable<AjfFormBuilderNodeEntry>>this._deleteNodeEntryEvent)\n      .pipe(\n        map((nodeEntry: AjfFormBuilderNodeEntry) => {\n          this._beforeNodesUpdate.emit();\n          this.removeExpandedStatus(nodeEntry.node.name);\n          return (nodes: AjfNode[]): AjfNode[] => {\n            const node = nodeEntry.node;\n            let cn = getNodeContainer({nodes}, node);\n            if (cn != null) {\n              const replaceNodes = cn.nodes === nodes;\n              const idx = cn.nodes.map(n => n.id).indexOf(node.id);\n              let newNodes = cn.nodes.slice(0, idx);\n              newNodes = newNodes.concat(cn.nodes.slice(idx + 1));\n              cn.nodes = newNodes;\n              if (replaceNodes) {\n                nodes = newNodes;\n              } else {\n                nodes = nodes.slice(0);\n              }\n            }\n            return nodes;\n          };\n        }),\n      )\n      .subscribe(this._nodesUpdates);\n  }\n\n  /**\n   * Initializes the subscription to the moveNodeEntryEvent.\n   */\n  private _initMoveNode(): void {\n    this._moveNodeSub.unsubscribe();\n    this._moveNodeSub = this._moveNodeEntryEvent\n      .pipe(\n        map((moveEvent: AjfFormBuilderMoveEvent) => {\n          this._beforeNodesUpdate.emit();\n          return (nodes: AjfNode[]): AjfNode[] => {\n            const nodeEntry = moveEvent.nodeEntry as AjfFormBuilderNodeEntry;\n            const node = nodeEntry.node;\n            let cn = getNodeContainer({nodes}, node) as AjfContainerNode;\n            let newNodes: AjfNode[] = nodes;\n            if (cn != null) {\n              const replaceNodes = cn.nodes === nodes;\n              newNodes = cn.nodes;\n              moveItemInArray(newNodes, moveEvent.fromIndex, moveEvent.toIndex);\n              newNodes = this._updateNodesList(cn.id, newNodes);\n              cn.nodes = newNodes;\n              if (replaceNodes) {\n                nodes = newNodes;\n              } else {\n                nodes = nodes.slice(0);\n              }\n            }\n            return nodes;\n          };\n        }),\n      )\n      .subscribe(this._nodesUpdates);\n  }\n\n  /**\n   * Updates the \"id\" and \"parent\" fields of a modified or rearranged list of nodes.\n   * @param containerId The id of the parent container of the list.\n   * @param nodesList The list of nodes to be updated.\n   */\n  private _updateNodesList(containerId: number, nodesList: AjfNode[]): AjfNode[] {\n    if (!nodesList.length) {\n      return [];\n    }\n    const contId = containerId != undefined ? containerId : 0;\n    for (let idx = 0; idx < nodesList.length; idx++) {\n      let currentNode = nodesList[idx];\n      currentNode.id = contId * 1000 + idx + 1;\n      currentNode.parent = idx == 0 ? contId : contId * 1000 + idx;\n      if (isSlidesNode(currentNode)) {\n        this._updateNodesList(currentNode.id, currentNode.nodes);\n      }\n    }\n    return nodesList;\n  }\n}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfChoicesOrigin} from '@ajf/core/forms';\nimport {ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {filter, map} from 'rxjs/operators';\n\nimport {AjfFbChoicesOriginEditor} from './choices-origin-editor';\nimport {AjfFormBuilderService} from './form-builder-service';\n\n@Component({\n  selector: 'ajf-fb-choices-origin-editor-dialog',\n  templateUrl: 'choices-origin-editor-dialog.html',\n  styleUrls: ['choices-origin-editor-dialog.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbChoicesOriginEditorDialog {\n  @ViewChild(AjfFbChoicesOriginEditor, {static: false}) editor!: AjfFbChoicesOriginEditor;\n\n  private _choicesOrigin: Observable<AjfChoicesOrigin<any>>;\n  get choicesOrigin(): Observable<AjfChoicesOrigin<any>> {\n    return this._choicesOrigin;\n  }\n\n  constructor(private _service: AjfFormBuilderService) {\n    this._choicesOrigin = this._service.editedChoicesOrigin.pipe(\n      filter(c => c != null),\n      map(c => c!),\n    );\n  }\n\n  disableSave(): boolean {\n    return this.editor == null || this.editor.name == null || this.editor.name.trim().length === 0;\n  }\n\n  saveChoicesOrigin(): void {\n    this._service.saveChoicesOrigin({\n      label: this.editor.label,\n      name: this.editor.name,\n      choices: this.editor.choicesArr,\n    });\n  }\n\n  cancelChoicesOriginEdit(): void {\n    this._service.cancelChoicesOriginEdit();\n  }\n}\n","<h3 matDialogTitle>{{'Edit choices origin'|transloco}}</h3>\n<mat-dialog-content>\n  <ajf-fb-choices-origin-editor\n    *ngIf=\"choicesOrigin|async as co\"\n    [choicesOrigin]=\"co!\"\n  ></ajf-fb-choices-origin-editor>\n</mat-dialog-content>\n<mat-dialog-actions align=\"center\">\n  <button mat-raised-button color=\"primary\" (click)=\"saveChoicesOrigin()\" [disabled]=\"disableSave()\">{{'Save'|transloco}}</button>\n  <button mat-raised-button color=\"accent\" (click)=\"cancelChoicesOriginEdit()\">\n    {{'Close'|transloco}}\n  </button>\n</mat-dialog-actions>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfField, AjfValidationService} from '@ajf/core/forms';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {FormControl} from '@angular/forms';\n\n@Component({\n  selector: 'ajf-condition-editor',\n  templateUrl: 'fb-condition-editor.html',\n  styleUrls: ['fb-condition-editor.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AjfFbConditionEditor implements AfterViewInit {\n  private _fields: AjfField[] = [];\n  get fields(): AjfField[] {\n    return this._fields;\n  }\n\n  @Input()\n  set fields(fields: AjfField[]) {\n    this._fields = fields;\n  }\n\n  @Input() condition: string = '';\n\n  formulaEditorControl = new FormControl<string>(this.condition);\n\n  constructor(_: AjfValidationService) {}\n\n  ngAfterViewInit(): void {\n    this.formulaEditorControl.setValue(this.condition);\n  }\n\n  insertVariable(variable: string): void {\n    const currValue =\n      this.formulaEditorControl.value != null ? this.formulaEditorControl.value : '';\n    const newValue: string = currValue + variable;\n    this.formulaEditorControl.setValue(newValue);\n  }\n}\n","<div class=\"ajf-editor\">\n  <mat-form-field class=\"ajf-formula-editor\">\n    <code><input matInput type=\"text\" [formControl]=\"formulaEditorControl\" /></code>\n  </mat-form-field>\n</div>\n<div class=\"ajf-editor-panel\">\n  <ng-container *ngIf=\"fields as curFields\">\n    <mat-nav-list dense *ngIf=\"curFields!.length > 0\">\n      <a\n        mat-list-item\n        (click)=\"insertVariable(field.name)\"\n        [matTooltip]=\"field.label\"\n        *ngFor=\"let field of curFields!\"\n      >\n        <ajf-node-icon [node]=\"field\"></ajf-node-icon>\n        {{ field.name }}\n      </a>\n    </mat-nav-list>\n  </ng-container>\n</div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfField} from '@ajf/core/forms';\nimport {ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {AjfFbConditionEditor} from './condition-editor';\nimport {AjfFormBuilderService} from './form-builder-service';\n\n@Component({\n  selector: 'ajf-condition-editor-dialog',\n  templateUrl: 'condition-editor-dialog.html',\n  styleUrls: ['condition-editor-dialog.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbConditionEditorDialog {\n  @ViewChild(AjfFbConditionEditor, {static: false}) editor!: AjfFbConditionEditor;\n\n  private _fields: Observable<AjfField[]>;\n  get fields(): Observable<AjfField[]> {\n    return this._fields;\n  }\n\n  condition: string = '';\n\n  constructor(\n    service: AjfFormBuilderService,\n    public dialogRef: MatDialogRef<AjfFbConditionEditorDialog>,\n  ) {\n    this._fields = service.flatFields.pipe(\n      map((fields: AjfField[]) => fields.sort((f1, f2) => f1.name.localeCompare(f2.name))),\n    );\n  }\n\n  saveCondition(): void {\n    if (this.editor == null) {\n      return;\n    }\n    const newValue = this.editor.formulaEditorControl.value;\n    this.dialogRef.close(newValue);\n  }\n\n  closeDialog(): void {\n    this.dialogRef.close(this.editor.formulaEditorControl.value);\n  }\n}\n","<h3 matDialogTitle>{{'Edit condition'|transloco}}</h3>\n<mat-dialog-content>\n  <ajf-condition-editor\n    *ngIf=\"fields|async as curFields\"\n    [fields]=\"curFields!\"\n    [condition]=\"condition\"\n  ></ajf-condition-editor>\n</mat-dialog-content>\n<mat-dialog-actions>\n  <button mat-button (click)=\"saveCondition()\">{{'Save'|transloco}}</button>\n  <button mat-button (click)=\"closeDialog()\">{{'Close'|transloco}}</button>\n</mat-dialog-actions>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {CdkDrag, CdkDragDrop} from '@angular/cdk/drag-drop';\nimport {\n  AjfFormBuilderEmptySlot,\n  AjfFormBuilderNode,\n  AjfFormBuilderNodeEntry,\n  AjfFormBuilderNodeTypeEntry,\n  AjfFormBuilderService,\n} from './form-builder-service';\n\n/**\n * Triggers when a field or slide node is moved or inserted by drag&dropping in the formbuilder.\n * @param event The drop event.\n * @param fbService The AjfFormBuilderService.\n * @param nodeEntry The current nodeEntry, if present.\n * @param content True if the current nodeEntry contains other nodeEntries.\n */\nexport function onDropProcess(\n  event: CdkDragDrop<AjfFormBuilderNodeEntry> | CdkDragDrop<AjfFormBuilderNodeTypeEntry>,\n  fbService: AjfFormBuilderService,\n  nodeEntry: AjfFormBuilderNode | null,\n  content = false,\n): void {\n  const itemData = event.item.data;\n  const containerId = event.container.id;\n  if (!itemData.node) {\n    if (nodeEntry == null && containerId === 'slides-list') {\n      fbService.insertNode(itemData, null as any, 0, content, event.currentIndex);\n      return;\n    }\n    const emptySlot = content\n      ? {parent: (<AjfFormBuilderNodeEntry>nodeEntry).node, parentNode: 0}\n      : <AjfFormBuilderEmptySlot>nodeEntry;\n    fbService.insertNode(\n      itemData,\n      emptySlot.parent,\n      emptySlot.parentNode,\n      content,\n      event.currentIndex,\n    );\n    return;\n  }\n  const previousIndex = event.previousIndex;\n  const currentIndex = event.currentIndex;\n  fbService.moveNodeEntry(<AjfFormBuilderNodeEntry>event.item.data, previousIndex, currentIndex);\n}\n\n/**\n * Disables the drag&drop of Slide items.\n * @param item The dragged item.\n */\nexport function disableSlideDropPredicate(item: CdkDrag<AjfFormBuilderNodeTypeEntry>): boolean {\n  return !item.data.isSlide;\n}\n\n/**\n * Disables the drag&drop of Field items.\n * @param item The dragged item.\n */\nexport function disableFieldDropPredicate(item: CdkDrag<AjfFormBuilderNodeTypeEntry>): boolean {\n  if (!item.data.isSlide) {\n    return false;\n  }\n  return true;\n}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfFormStringIdentifier} from '@ajf/core/forms';\nimport {COMMA, ENTER} from '@angular/cdk/keycodes';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  OnDestroy,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {MatAutocompleteSelectedEvent} from '@angular/material/autocomplete';\nimport {MatChipInputEvent} from '@angular/material/chips';\nimport {MatTableDataSource} from '@angular/material/table';\nimport {Observable, Subscription} from 'rxjs';\nimport {map, shareReplay} from 'rxjs/operators';\n\nimport {AjfFormBuilderService} from './form-builder-service';\n\n@Component({\n  selector: 'ajf-fb-string-identifier-dialog',\n  templateUrl: 'string-identifier-dialog.html',\n  styleUrls: ['./string-identifier-dialog.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AjfFbStringIdentifierDialogComponent implements OnDestroy {\n  readonly dataSource: MatTableDataSource<AjfFormStringIdentifier> =\n    new MatTableDataSource<AjfFormStringIdentifier>();\n  readonly displayedColumns = ['label', 'value', 'show', 'delete'];\n  readonly fields$: Observable<string[]>;\n  readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n  private _stringIdentifierSub: Subscription = Subscription.EMPTY;\n\n  constructor(private _service: AjfFormBuilderService, private _cdr: ChangeDetectorRef) {\n    this._stringIdentifierSub = _service.stringIdentifier.subscribe(identifier => {\n      this.dataSource.data = [...identifier];\n    });\n    this.fields$ = _service.flatFields.pipe(\n      map(fields =>\n        fields\n          .sort((f1, f2) => f1.name.localeCompare(f2.name))\n          .map(f => f.name)\n          .filter(f => f.length > 0),\n      ),\n      shareReplay(1),\n    );\n  }\n\n  addRow(): void {\n    this.dataSource.data = [...this.dataSource.data, {label: '', value: [], show: undefined}];\n  }\n\n  deleteRow(rowIdx: number): void {\n    this.dataSource.data = [\n      ...this.dataSource.data.slice(0, rowIdx),\n      ...this.dataSource.data.slice(rowIdx + 1),\n    ];\n  }\n\n  addValue(\n    row: AjfFormStringIdentifier,\n    evt: MatChipInputEvent,\n    valueInput: HTMLInputElement,\n  ): void {\n    if (evt.value.length === 0) {\n      return;\n    }\n    row.value = [...row.value, evt.value];\n    valueInput.value = '';\n    this._cdr.markForCheck();\n  }\n\n  removeValue(row: AjfFormStringIdentifier, value: string): void {\n    const idx = row.value.indexOf(value);\n    if (idx > -1) {\n      row.value = [...row.value.slice(0, idx), ...row.value.slice(idx + 1)];\n      this._cdr.markForCheck();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._stringIdentifierSub.unsubscribe();\n  }\n\n  saveStringIdentifier(): void {\n    this._service.saveStringIdentifier(this.dataSource.data);\n  }\n\n  selected(row: AjfFormStringIdentifier, evt: MatAutocompleteSelectedEvent): void {\n    row.value = [...row.value, evt.option.value];\n    this._cdr.markForCheck();\n  }\n}\n","<h3 matDialogTitle>{{'Edit identifier'|transloco}}</h3>\n<mat-dialog-content>\n  <button (click)=\"addRow()\" mat-button>\n    <mat-icon>add</mat-icon>\n    <span>{{'Add value'|transloco}}</span>\n  </button>\n  <mat-table [dataSource]=\"dataSource\">\n    <ng-container matColumnDef=\"label\">\n      <mat-header-cell *matHeaderCellDef>{{'Label'|transloco}}</mat-header-cell>\n      <mat-cell *matCellDef=\"let row; let idx = index\">\n        <mat-form-field>\n          <input\n            matInput\n            [placeholder]=\"'Label'|transloco\"\n            autofocus\n            [(ngModel)]=\"row.label\"\n          />\n        </mat-form-field>\n      </mat-cell>\n    </ng-container>\n    <ng-container matColumnDef=\"value\">\n      <mat-header-cell *matHeaderCellDef>{{'Value'|transloco}}</mat-header-cell>\n      <mat-cell *matCellDef=\"let row; let idx = index\">\n        <mat-form-field>\n          <mat-chip-grid #chipList>\n            <mat-chip-row\n              *ngFor=\"let field of row.value\"\n              (removed)=\"removeValue(row, field)\"\n            >\n              {{ field }}\n              <mat-icon matChipRemove>cancel</mat-icon>\n            </mat-chip-row>\n          </mat-chip-grid>\n          <input\n            #valueInput\n            [ngModel]=\"row.value\"\n            [matAutocomplete]=\"valueAc\"\n            [matChipInputFor]=\"chipList\"\n            [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n            [matChipInputAddOnBlur]=\"true\"\n            (matChipInputTokenEnd)=\"addValue(row, $event, valueInput)\"\n            [placeholder]=\"'Value'|transloco\"\n          />\n          <mat-autocomplete\n            #valueAc=\"matAutocomplete\"\n            (optionSelected)=\"selected(row, $event)\"\n          >\n            <mat-option *ngFor=\"let field of fields$ | async\" [value]=\"field\"\n              >{{field}}</mat-option\n            >\n          </mat-autocomplete>\n        </mat-form-field>\n      </mat-cell>\n    </ng-container>\n    <ng-container matColumnDef=\"show\">\n      <mat-header-cell *matHeaderCellDef>{{'Show'|transloco}}</mat-header-cell>\n      <mat-cell *matCellDef=\"let row; let idx = index\">\n        <mat-form-field>\n          <mat-select matNativeControl [(ngModel)]=\"row.show\">\n            <mat-option value=\"all\">{{'All'|transloco}}</mat-option>\n            <mat-option value=\"first\">{{'First'|transloco}}</mat-option>\n            <mat-option value=\"last\">{{'Last'|transloco}}</mat-option>\n          </mat-select>\n        </mat-form-field>\n      </mat-cell>\n    </ng-container>\n    <ng-container matColumnDef=\"delete\">\n      <mat-header-cell *matHeaderCellDef\n        >{{'Delete'|transloco}}</mat-header-cell\n      >\n      <mat-cell *matCellDef=\"let row; let idx = index\">\n        <mat-icon (click)=\"deleteRow(idx)\">delete</mat-icon>\n      </mat-cell>\n    </ng-container>\n\n    <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n    <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\n  </mat-table>\n</mat-dialog-content>\n<mat-dialog-actions>\n  <button mat-button matDialogClose (click)=\"saveStringIdentifier()\">\n    {{'Save'|transloco}}\n  </button>\n</mat-dialog-actions>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfNode, isContainerNode, isSlidesNode} from '@ajf/core/forms';\nimport {CdkDrag, CdkDragDrop, CdkDropList} from '@angular/cdk/drag-drop';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  forwardRef,\n  Input,\n  OnDestroy,\n  QueryList,\n  ViewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {Observable, Subscription, of as obsOf} from 'rxjs';\n\nimport {AjfFbBranchLine} from './branch-line';\nimport {\n  AjfFormBuilderNode,\n  AjfFormBuilderNodeEntry,\n  AjfFormBuilderNodeTypeEntry,\n  AjfFormBuilderService,\n} from './form-builder-service';\nimport {\n  disableFieldDropPredicate,\n  disableSlideDropPredicate,\n  onDropProcess,\n} from './form-builder-utils';\n\nconst branchColors: string[] = [\n  '#F44336', // RED\n  '#4CAF50', // GREEN\n  '#3F51B5', // INDIGO\n  '#FFC107', // AMBER\n  '#795548', // BROWN\n];\n\n@Component({\n  selector: 'ajf-fb-node-entry',\n  templateUrl: 'node-entry.html',\n  styleUrls: ['node-entry.scss'],\n  host: {'(window.resize)': 'onResize()'},\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbNodeEntry implements AfterViewInit, OnDestroy {\n  @ViewChildren(AjfFbBranchLine) branchLines!: QueryList<AjfFbBranchLine>;\n  @ViewChildren(forwardRef(() => AjfFbNodeEntry), {read: ElementRef})\n  childEntries!: QueryList<ElementRef>;\n\n  private _hasContent = false;\n  get hasContent(): boolean {\n    return this._hasContent;\n  }\n\n  private _isFirst = false;\n  get isFirst(): boolean {\n    return this._isFirst;\n  }\n  @Input()\n  set isFirst(isFirst: boolean) {\n    this._isFirst = isFirst;\n  }\n\n  private _isNodeEntry = false;\n  get isNodeEntry(): boolean {\n    return this._isNodeEntry;\n  }\n\n  private _nodeEntry: AjfFormBuilderNode | undefined;\n  get nodeEntry(): AjfFormBuilderNode | undefined {\n    return this._nodeEntry;\n  }\n  @Input()\n  set nodeEntry(nodeEntry: AjfFormBuilderNode | undefined) {\n    this._nodeEntry = nodeEntry;\n    if (nodeEntry != null && (<AjfFormBuilderNodeEntry>nodeEntry).node !== void 0) {\n      const ne = <AjfFormBuilderNodeEntry>nodeEntry;\n      this._isNodeEntry = true;\n      const node = ne.node;\n      this._hasContent = node != null && isContainerNode(node);\n    } else {\n      this._isNodeEntry = false;\n      this._hasContent = false;\n    }\n  }\n\n  private _level = 0;\n  get level(): number {\n    return this._level;\n  }\n  @Input()\n  set level(value: number) {\n    this._level = value;\n  }\n  private _isDraggable: boolean = true;\n  get isDraggable(): boolean {\n    return this._isDraggable;\n  }\n  @Input()\n  set isDraggable(draggable: boolean) {\n    this._isDraggable = draggable;\n  }\n\n  get realNodeEntry(): AjfFormBuilderNodeEntry {\n    return this._nodeEntry as AjfFormBuilderNodeEntry;\n  }\n\n  private _branchColors: string[] = branchColors.slice(0);\n  get branchColors(): string[] {\n    return this._branchColors;\n  }\n\n  private _dropZones: string[] = ['fbdz-node'];\n  get dropZones(): string[] {\n    return this._dropZones;\n  }\n\n  private _slideDropZones: string[] = ['fbdz-slide'];\n  get slideDropZones(): string[] {\n    return this._slideDropZones;\n  }\n\n  private _originOffset = 0;\n  get originOffset(): number {\n    return this._originOffset;\n  }\n  @Input()\n  set originOffset(originOffset: number) {\n    this._originOffset = originOffset;\n    this._originLeftMargin = `${this._originOffset * 4}px`;\n  }\n  private _originLeftMargin = '0';\n  get originLeftMargin(): string {\n    return this._originLeftMargin;\n  }\n\n  private _firstBranchColor = branchColors[0];\n  get firstBranchColor(): string {\n    return this._firstBranchColor;\n  }\n  @Input()\n  set firstBranchColor(firstBranchColor: string) {\n    const idx = branchColors.indexOf(firstBranchColor);\n    if (idx > 0) {\n      this._firstBranchColor = firstBranchColor;\n      this._branchColors = branchColors.slice(idx).concat(branchColors.slice(0, idx));\n    } else {\n      this._firstBranchColor = branchColors[0];\n      this._branchColors = branchColors.slice(0);\n    }\n  }\n\n  private _currentEditedNode: Observable<AjfFormBuilderNodeEntry | null>;\n  get currentEditedNode(): Observable<AjfFormBuilderNodeEntry | null> {\n    return this._currentEditedNode;\n  }\n\n  private _branchLinesSubscription: Subscription = Subscription.EMPTY;\n  private _childEntriesSubscription: Subscription = Subscription.EMPTY;\n\n  constructor(private _service: AjfFormBuilderService) {\n    this._currentEditedNode = this._service.editedNodeEntry;\n  }\n\n  onResize(): void {}\n\n  edit(evt: Event): void {\n    evt.stopPropagation();\n    if (this.nodeEntry == null || !this.isNodeEntry) {\n      return;\n    }\n    this._service.editNodeEntry(<AjfFormBuilderNodeEntry>this.nodeEntry);\n  }\n\n  delete(evt: Event): void {\n    evt.stopPropagation();\n    if (this.nodeEntry == null || !this.isNodeEntry) {\n      return;\n    }\n    this._service.cancelNodeEntryEdit();\n    this._service.deleteNodeEntry(<AjfFormBuilderNodeEntry>this.nodeEntry);\n  }\n\n  isInvalid(node: AjfNode): boolean {\n    return !this._service.isNodeValid(node.name);\n  }\n\n  isLastNode(): boolean {\n    if (!this.realNodeEntry || !this.realNodeEntry.children) {\n      return false;\n    }\n    return !this.realNodeEntry.children[0].children;\n  }\n\n  isSlide(node: AjfNode): boolean {\n    return isSlidesNode(node);\n  }\n\n  isExpanded(): Observable<boolean> {\n    if (this._nodeEntry && 'node' in this._nodeEntry) {\n      return this._service.getExpandedStatus(this._nodeEntry.node.name);\n    }\n    return obsOf(false);\n  }\n\n  ngAfterViewInit(): void {\n    this.updateBranchHeights();\n    this._childEntriesSubscription = this.childEntries.changes.subscribe(() => {\n      this.updateBranchHeights();\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._branchLinesSubscription.unsubscribe();\n    this._childEntriesSubscription.unsubscribe();\n  }\n\n  /**\n   * Triggers when a field or slide node is moved or inserted by drag&dropping in the formbuilder.\n   * @param event The drop event.\n   * @param content True if the current nodeEntry contains other nodeEntries.\n   */\n  onDrop(\n    event: CdkDragDrop<AjfFormBuilderNodeEntry> | CdkDragDrop<AjfFormBuilderNodeTypeEntry>,\n    content = false,\n  ): void {\n    if (this._nodeEntry == null) {\n      return;\n    }\n    onDropProcess(event, this._service, this._nodeEntry, content);\n  }\n\n  /**\n   * Assigns a progressive id to the dropList, to connect it to the FormBuilder source list.\n   * @param empty True if the list is marked as empty.\n   */\n  assignId(empty: boolean = false): string {\n    return this._service.assignListId(this.realNodeEntry.node, empty);\n  }\n\n  disableSlideDrop(item: CdkDrag<AjfFormBuilderNodeTypeEntry>): boolean {\n    return disableSlideDropPredicate(item);\n  }\n\n  disableFieldDrop(item: CdkDrag<AjfFormBuilderNodeTypeEntry>): boolean {\n    return disableFieldDropPredicate(item);\n  }\n\n  emptyAreaDropPredicate(): (item: CdkDrag, _drop: CdkDropList) => boolean {\n    return (item: CdkDrag, _drop: CdkDropList): boolean => {\n      if (this._level > 0) {\n        return !item.data.isSlide;\n      }\n      return item.data.isSlide || false;\n    };\n  }\n\n  updateBranchHeights(delay: number = 0): void {\n    setTimeout(() => {\n      if (\n        this.nodeEntry == null ||\n        !this.isNodeEntry ||\n        this.branchLines == null ||\n        this.childEntries == null\n      ) {\n        return;\n      }\n      const nodeEntry = <AjfFormBuilderNodeEntry>this.nodeEntry;\n      const branchLines: AjfFbBranchLine[] = this.branchLines.toArray();\n      const sliceIdx = nodeEntry.content != null ? nodeEntry.content.length : 0;\n      const childEntries: ElementRef[] = this.childEntries.toArray().slice(sliceIdx);\n\n      if (branchLines.length != childEntries.length) {\n        return;\n      }\n\n      branchLines.forEach((bl: AjfFbBranchLine, idx: number) => {\n        const ce: ElementRef = childEntries[idx];\n        bl.height = ce.nativeElement.offsetTop;\n      });\n    }, delay);\n  }\n\n  updateExpandedStatus(expanded: boolean) {\n    if (this._nodeEntry && 'node' in this._nodeEntry) {\n      this._service.updateExpandedStatus(this._nodeEntry.node.name, expanded);\n      this.updateBranchHeights(400);\n    }\n  }\n}\n","<ng-container *ngIf=\"nodeEntry; else rootEmpty\">\n  <ng-template [ngIf]=\"isNodeEntry && !isLastNode()\">\n    <ajf-fb-branch-line\n      *ngFor=\"let childNodeEntry of realNodeEntry.children; let idx = index\"\n      [offset]=\"idx\"\n      [color]=\"branchColors[idx]\"\n    ></ajf-fb-branch-line>\n  </ng-template>\n\n  <div\n    class=\"mat-card-container\"\n    [class.ajf-highlighted-formbuilder-node]=\"(currentEditedNode|async) === nodeEntry\"\n  >\n    <div\n      *ngIf=\"!isFirst\"\n      class=\"ajf-origin-line\"\n      [style.margin-left]=\"originLeftMargin\"\n      [style.border-color]=\"firstBranchColor\"\n    ></div>\n    <ng-template [ngIf]=\"isNodeEntry\">\n      <ng-container *ngIf=\"!isDraggable; else draggable\">\n        <mat-card appearance=\"outlined\">\n          <ng-container *ngTemplateOutlet=\"cardTitle\"></ng-container>\n          <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n        </mat-card>\n      </ng-container>\n\n      <ng-template #draggable>\n        <mat-card\n          appearance=\"outlined\"\n          cdkDrag\n          [cdkDragData]=\"realNodeEntry\"\n          class=\"ajf-draggable-box\"\n        >\n          <ng-container *ngIf=\"isSlide(realNodeEntry.node); else fieldPanel\">\n            <ng-container *ngTemplateOutlet=\"slidePanel\"></ng-container>\n          </ng-container>\n        </mat-card>\n      </ng-template>\n\n      <ng-template #slidePanel>\n        <mat-expansion-panel\n          [expanded]=\"isExpanded()|async\"\n          (opened)=\"updateExpandedStatus(true)\"\n          (closed)=\"updateExpandedStatus(false)\"\n          class=\"mat-elevation-z\"\n        >\n          <mat-expansion-panel-header>\n            <ng-container *ngTemplateOutlet=\"cardTitle\"></ng-container>\n          </mat-expansion-panel-header>\n          <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n        </mat-expansion-panel>\n      </ng-template>\n\n      <ng-template #fieldPanel>\n        <ng-container *ngTemplateOutlet=\"cardTitle\"></ng-container>\n        <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n      </ng-template>\n\n      <ng-template #cardTitle>\n        <div class=\"ajf-title-row\" [ngClass]=\"{ 'ajf-title-row-error': isInvalid(realNodeEntry.node) }\">\n          <ajf-node-icon [node]=\"realNodeEntry.node\"></ajf-node-icon>\n          &nbsp;\n          <span\n            class=\"ajf-title\"\n            [innerHTML]=\"(realNodeEntry.node.label || realNodeEntry.node.name)  | transloco\"\n          ></span>\n          <span\n            *ngIf=\"realNodeEntry.node.visibility && realNodeEntry.node.visibility?.condition !== 'true'\"\n            class=\"ajf-visibility-condition\"\n            [innerHTML]=\"'Condition: (' + realNodeEntry.node.visibility.condition + ')'\"\n          >\n          </span>\n          <span class=\"ajf-actions\">\n            <button\n              [disabled]=\"(currentEditedNode|async) === nodeEntry\"\n              (click)=\"edit($event)\"\n              mat-icon-button\n            >\n              <mat-icon>edit</mat-icon>\n            </button>\n            <button (click)=\"delete($event)\" mat-icon-button>\n              <mat-icon>delete</mat-icon>\n            </button>\n          </span>\n        </div>\n      </ng-template>\n\n      <ng-template #cardContent>\n        <div *ngIf=\"hasContent\">\n          <ajf-fb-node-entry\n            cdkDropList\n            class=\"ajf-fields-list\"\n            *ngFor=\"let contentEntry of realNodeEntry.content; let isFirstChild = first; let idx = index\"\n            [id]=\"assignId()\"\n            [level]=\"level + 1\"\n            [isFirst]=\"isFirstChild\"\n            [firstBranchColor]=\"branchColors[idx]\"\n            [nodeEntry]=\"contentEntry\"\n            [cdkDropListEnterPredicate]=\"disableSlideDrop\"\n            (cdkDropListDropped)=\"onDrop($event, true)\"\n          ></ajf-fb-node-entry>\n          <mat-card\n            appearance=\"outlined\"\n            class=\"ajf-empty\"\n            *ngIf=\"realNodeEntry.content.length === 0\"\n            cdkDropList\n            [id]=\"assignId(true)\"\n            [cdkDropListEnterPredicate]=\"disableSlideDrop\"\n            (cdkDropListDropped)=\"onDrop($event, true)\"\n            ><mat-card-title>Drop your fields here</mat-card-title></mat-card\n          >\n        </div>\n      </ng-template>\n    </ng-template>\n  </div>\n\n  <ng-template [ngIf]=\"isNodeEntry\">\n    <ng-container *ngFor=\"let childNodeEntry of realNodeEntry.children; let idx = index\">\n      <ajf-fb-node-entry\n        *ngIf=\"!isLastNode()\"\n        [level]=\"level\"\n        [originOffset]=\"idx\"\n        [firstBranchColor]=\"branchColors[idx]\"\n        [nodeEntry]=\"childNodeEntry\"\n      ></ajf-fb-node-entry>\n    </ng-container>\n  </ng-template>\n</ng-container>\n\n<ng-template #rootEmpty>\n  <div class=\"mat-card-container\">\n    <mat-card\n      appearance=\"outlined\"\n      class=\"ajf-empty\"\n      cdkDropList\n      [cdkDropListEnterPredicate]=\"emptyAreaDropPredicate()\"\n      (cdkDropListDropped)=\"onDrop($event)\"\n      ><mat-card-title>Drop your slides here</mat-card-title>\n    </mat-card>\n  </div>\n</ng-template>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfField} from '@ajf/core/forms';\nimport {ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {AjfFbConditionEditor} from './condition-editor';\nimport {AjfFormBuilderService} from './form-builder-service';\n\n@Component({\n  selector: 'ajf-fb-validation-condition-editor-dialog',\n  templateUrl: 'validation-condition-editor-dialog.html',\n  styleUrls: ['validation-condition-editor-dialog.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbValidationConditionEditorDialog {\n  @ViewChild(AjfFbConditionEditor, {static: false}) editor!: AjfFbConditionEditor;\n\n  private _fields: Observable<AjfField[]>;\n  get fields(): Observable<AjfField[]> {\n    return this._fields;\n  }\n\n  condition: string = '';\n  errorMessage: string = '';\n\n  constructor(\n    service: AjfFormBuilderService,\n    public dialogRef: MatDialogRef<AjfFbValidationConditionEditorDialog>,\n  ) {\n    this._fields = service.flatFields.pipe(\n      map((fields: AjfField[]) => fields.sort((f1, f2) => f1.name.localeCompare(f2.name))),\n    );\n  }\n\n  saveCondition(): void {\n    if (this.editor == null) {\n      return;\n    }\n    const newValue = this.editor.formulaEditorControl.value;\n    this.dialogRef.close({condition: newValue, errorMessage: this.errorMessage});\n  }\n\n  closeDialog(): void {\n    this.dialogRef.close(this.editor.formulaEditorControl.value);\n  }\n}\n","<h3 matDialogTitle>{{'Edit condition'|transloco}}</h3>\n<mat-dialog-content>\n  <mat-form-field>\n    <input\n      matInput\n      [(ngModel)]=\"errorMessage\"\n      [placeholder]=\"'Error message'|transloco\"\n    />\n  </mat-form-field>\n  <ajf-condition-editor\n    *ngIf=\"fields|async as curFields\"\n    [fields]=\"curFields!\"\n    [condition]=\"condition\"\n  ></ajf-condition-editor>\n</mat-dialog-content>\n<mat-dialog-actions>\n  <button mat-button (click)=\"saveCondition()\">{{'Save'|transloco}}</button>\n  <button mat-button (click)=\"closeDialog()\">{{'Close'|transloco}}</button>\n</mat-dialog-actions>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfField} from '@ajf/core/forms';\nimport {ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {AjfFbConditionEditor} from './condition-editor';\nimport {AjfFormBuilderService} from './form-builder-service';\n\n@Component({\n  selector: 'ajf-fb-warning-condition-editor-dialog',\n  templateUrl: 'warning-condition-editor-dialog.html',\n  styleUrls: ['warning-condition-editor-dialog.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbWarningConditionEditorDialog {\n  @ViewChild(AjfFbConditionEditor, {static: false}) editor!: AjfFbConditionEditor;\n\n  private _fields: Observable<AjfField[]>;\n  get fields(): Observable<AjfField[]> {\n    return this._fields;\n  }\n\n  condition: string = '';\n  warningMessage: string = '';\n\n  constructor(\n    service: AjfFormBuilderService,\n    public dialogRef: MatDialogRef<AjfFbWarningConditionEditorDialog>,\n  ) {\n    this._fields = service.flatFields.pipe(\n      map((fields: AjfField[]) => fields.sort((f1, f2) => f1.name.localeCompare(f2.name))),\n    );\n  }\n\n  saveCondition(): void {\n    if (this.editor == null) {\n      return;\n    }\n    const newValue = this.editor.formulaEditorControl.value;\n    this.dialogRef.close({condition: newValue, warningMessage: this.warningMessage});\n  }\n\n  closeDialog(): void {\n    this.dialogRef.close(this.editor.formulaEditorControl.value);\n  }\n}\n","<h3 matDialogTitle>{{'Edit condition'|transloco}}</h3>\n<mat-dialog-content>\n  <mat-form-field>\n    <input\n      matInput\n      [(ngModel)]=\"warningMessage\"\n      [placeholder]=\"'Warning message' | transloco\"\n    />\n  </mat-form-field>\n  <ajf-condition-editor\n    *ngIf=\"fields|async as curFields\"\n    [fields]=\"curFields!\"\n    [condition]=\"condition\"\n  ></ajf-condition-editor>\n</mat-dialog-content>\n<mat-dialog-actions>\n  <button mat-button (click)=\"saveCondition()\">{{'Save'|transloco}}</button>\n  <button mat-button (click)=\"closeDialog()\">{{'Close'|transloco}}</button>\n</mat-dialog-actions>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\nimport {ChangeDetectorRef, Injectable} from '@angular/core';\nimport {AbstractControl, AsyncValidatorFn, ValidationErrors} from '@angular/forms';\nimport {Observable, of} from 'rxjs';\nimport {finalize, map, take} from 'rxjs/operators';\nimport {AjfFormBuilderService} from './form-builder-service';\n\n/**\n * Custom validator service that checks for an already existing\n * Node with the given name.\n */\n@Injectable()\nexport class AjfNodePropertiesNameMatchValidator {\n  constructor(private _fbs: AjfFormBuilderService) {}\n\n  /**\n   * Custom async validator method.\n   * Checks if a Node with the same Name exists, in order to\n   * validate the Node Entry properties form.\n   * @param cdr The editor changeDetectionRef\n   * @param currentId The current node entry id\n   */\n  sameValueCheck(cdr: ChangeDetectorRef, currentId: number): AsyncValidatorFn {\n    return (control: AbstractControl): Observable<ValidationErrors | null> => {\n      const flatNodes$ = this._fbs.flatNodes ?? of([]);\n      return flatNodes$.pipe(\n        map(nodes => {\n          const sameNameNode = nodes.find(\n            n => n.name.toLowerCase() === control.value.toLowerCase() && n.id !== currentId,\n          );\n          return sameNameNode ? {name_exists: true} : null;\n        }),\n        take(1),\n        finalize(() => {\n          control.markAsTouched();\n          cdr.detectChanges();\n        }),\n      );\n    };\n  }\n}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {\n  AjfChoicesOrigin,\n  AjfEmptyField,\n  AjfFieldWithChoices,\n  AjfNode,\n  AjfNumberField,\n  AjfRangeField,\n  AjfRepeatingContainerNode,\n  AjfTableField,\n  isField,\n  isFieldWithChoices,\n  isNumberField,\n  isEmptyField,\n  isRangeField,\n  isRepeatingContainerNode,\n  isTableField,\n} from '@ajf/core/forms';\nimport {AjfCondition, alwaysCondition, neverCondition} from '@ajf/core/models';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  OnDestroy,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  UntypedFormBuilder,\n  UntypedFormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport {MatDialog, MatDialogRef} from '@angular/material/dialog';\nimport {Observable, Subscription} from 'rxjs';\nimport {\n  distinctUntilChanged,\n  filter,\n  map,\n  pairwise,\n  shareReplay,\n  startWith,\n  switchMap,\n  take,\n  withLatestFrom,\n} from 'rxjs/operators';\n\nimport {AjfFbConditionEditorDialog} from './condition-editor-dialog';\nimport {\n  AjfFormBuilderNodeEntry,\n  AjfFormBuilderService,\n  AjfFormBuilderValidation,\n  cleanDefaultValue,\n  FormBuilderFieldValidation,\n} from './form-builder-service';\nimport {AjfFbValidationConditionEditorDialog} from './validation-condition-editor-dialog';\nimport {AjfFbWarningConditionEditorDialog} from './warning-condition-editor-dialog';\nimport {MatCheckbox} from '@angular/material/checkbox';\nimport {AjfNodePropertiesNameMatchValidator} from './node-properties-name-validator';\n\nfunction checkRepsValidity(c: AbstractControl): {[key: string]: any} | null {\n  const minReps = c.value.minReps;\n  const maxReps = c.value.maxReps;\n  if (minReps && maxReps && minReps > maxReps) {\n    return {reps: 'Min repetions cannot be greater than max repetitions'};\n  }\n  return null;\n}\n\nfunction checkValueLimitsValidity(c: AbstractControl): {[key: string]: any} | null {\n  const minValue = c.value.minValue;\n  const maxValue = c.value.maxValue;\n  if (minValue != null && maxValue != null && minValue > maxValue) {\n    return {valueLimit: 'Min value cannot be greater than max value'};\n  }\n  return null;\n}\n\nfunction checkDigitsValidity(c: AbstractControl): {[key: string]: any} | null {\n  const minDigits = c.value.minDigits;\n  const maxDigits = c.value.maxDigits;\n  if (minDigits != null && maxDigits != null && minDigits > maxDigits) {\n    return {digits: 'Min digits cannot be greater than max digits'};\n  }\n  return null;\n}\n\nfunction checkRangeValidity(c: AbstractControl): {[key: string]: any} | null {\n  const {start, end} = c.value;\n  if (start != null && end != null && start > end) {\n    return {range: 'End must be greater than start'};\n  }\n  return null;\n}\n\nfunction checkTableValidity(c: AbstractControl): {[key: string]: any} | null {\n  try {\n    const jsonValue = JSON.parse(c.value);\n    return Object.keys(jsonValue).length\n      ? null\n      : {tableDef: 'You must enter a valid JSON for Table definition'};\n  } catch {\n    return {tableDef: 'Invalid JSON for Table definition'};\n  }\n}\n\nexport interface ValidationCondition {\n  condition: string;\n  errorMessage: string;\n}\n\nexport interface WarningCondition {\n  condition: string;\n  warningMessage: string;\n}\n\n@Component({\n  selector: 'ajf-fb-node-properties',\n  templateUrl: 'node-properties.html',\n  styleUrls: ['node-properties.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbNodeProperties implements OnDestroy, OnInit {\n  private _fieldSizes: {label: string; value: string}[] = [\n    {label: 'Normal', value: 'normal'},\n    {label: 'Small', value: 'small'},\n    {label: 'Smaller', value: 'smaller'},\n    {label: 'Tiny', value: 'tiny'},\n    {label: 'Mini', value: 'mini'},\n  ];\n  get fieldSizes(): {label: string; value: string}[] {\n    return this._fieldSizes;\n  }\n\n  private _nodeEntry: Observable<AjfFormBuilderNodeEntry | null>;\n  get nodeEntry(): Observable<AjfFormBuilderNodeEntry | null> {\n    return this._nodeEntry;\n  }\n\n  private _choicesOrigins: AjfChoicesOrigin<any>[] = [];\n  get choicesOrigins(): AjfChoicesOrigin<any>[] {\n    return this._choicesOrigins;\n  }\n\n  private _enabled: Observable<boolean>;\n  get enabled(): Observable<boolean> {\n    return this._enabled;\n  }\n\n  private _propertiesForm!: Observable<UntypedFormGroup>;\n  get propertiesForm(): Observable<UntypedFormGroup> {\n    return this._propertiesForm;\n  }\n\n  private _hasChoices: Observable<boolean> | undefined;\n  get hasChoices(): Observable<boolean> | undefined {\n    return this._hasChoices;\n  }\n\n  private _curVisibility: string | null = null;\n  get curVisibility(): string | null {\n    return this._curVisibility;\n  }\n\n  private _curFormulaReps: string | null = null;\n  get curFormulaReps(): string | null {\n    return this._curFormulaReps;\n  }\n\n  private _curChoicesFilter: string | null = null;\n  get curChoicesFilter(): string | null {\n    return this._curChoicesFilter;\n  }\n\n  private _curForceValue: string | null = null;\n  get curForceValue(): string | null {\n    return this._curForceValue;\n  }\n\n  private _curFormula: string | null = null;\n  get curFormula(): string | null {\n    return this._curFormula;\n  }\n\n  private _conditionalBranches: string[] = [];\n  get conditionalBranches(): string[] {\n    return this._conditionalBranches;\n  }\n\n  private _validationConditions: ValidationCondition[] = [];\n  get validationConditions(): ValidationCondition[] {\n    return this._validationConditions;\n  }\n\n  private _warningConditions: WarningCondition[] = [];\n  get warningConditions(): WarningCondition[] {\n    return this._warningConditions;\n  }\n\n  private _nextSlideCondition: string | undefined;\n  get nextSlideCondition(): string | undefined {\n    return this._nextSlideCondition;\n  }\n\n  private _triggerConditions: string[] = [];\n  get triggerConditions(): string[] {\n    return this._triggerConditions;\n  }\n\n  isRepeatingContainerNode: (nodeEntry: AjfFormBuilderNodeEntry | null) => boolean = nodeEntry => {\n    return nodeEntry != null && isRepeatingContainerNode(nodeEntry.node);\n  };\n\n  private _visibilityOptSub: Subscription = Subscription.EMPTY;\n  private _visibilitySub: Subscription = Subscription.EMPTY;\n  private _conditionalBranchesSub = Subscription.EMPTY;\n  private _formulaRepsSub = Subscription.EMPTY;\n  private _choicesFilterSub = Subscription.EMPTY;\n  private _formulaSub = Subscription.EMPTY;\n  private _forceValueSub = Subscription.EMPTY;\n  private _validationConditionsSub = Subscription.EMPTY;\n  private _warningConditionsSub = Subscription.EMPTY;\n  private _nextSlideConditionSub = Subscription.EMPTY;\n  private _choicesOriginsSub = Subscription.EMPTY;\n  private _triggerConditionsSub = Subscription.EMPTY;\n\n  private _editConditionDialog: MatDialogRef<AjfFbConditionEditorDialog> | null = null;\n  private _editConditionDialogSub: Subscription = Subscription.EMPTY;\n  private _editValidationConditionDialog: MatDialogRef<AjfFbValidationConditionEditorDialog> | null =\n    null;\n  private _editValidationConditionDialogSub: Subscription = Subscription.EMPTY;\n  private _editWarningConditionDialog: MatDialogRef<AjfFbWarningConditionEditorDialog> | null =\n    null;\n  private _editWarningConditionDialogSub: Subscription = Subscription.EMPTY;\n\n  private _editVisibilityEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _editVisibilitySub = Subscription.EMPTY;\n\n  private _editConditionalBranchEvt: EventEmitter<number> = new EventEmitter<number>();\n  private _editConditionalBranchSub = Subscription.EMPTY;\n\n  private _editFormulaRepsEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _editFormulaRepsSub = Subscription.EMPTY;\n\n  private _editChoicesFilterEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _editChoicesFilterSub = Subscription.EMPTY;\n\n  private _editFormulaEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _editFormulaSub = Subscription.EMPTY;\n\n  private _editForceValueEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _editForceValueSub = Subscription.EMPTY;\n\n  private _editValidationConditionEvt: EventEmitter<number> = new EventEmitter<number>();\n  private _editValidationConditionSub = Subscription.EMPTY;\n\n  private _addValidationConditionEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _addValidationConditionSub = Subscription.EMPTY;\n\n  private _removeValidationConditionEvt: EventEmitter<number> = new EventEmitter<number>();\n  private _removeValidationConditionSub = Subscription.EMPTY;\n\n  private _editWarningConditionEvt: EventEmitter<number> = new EventEmitter<number>();\n  private _editWarningConditionSub = Subscription.EMPTY;\n\n  private _addWarningConditionEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _addWarningConditionSub = Subscription.EMPTY;\n\n  private _removeWarningConditionEvt: EventEmitter<number> = new EventEmitter<number>();\n  private _removeWarningConditionSub = Subscription.EMPTY;\n\n  private _editNextSlideConditionEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _editNextSlideConditionSub = Subscription.EMPTY;\n\n  private _editTriggerConditionEvt: EventEmitter<number> = new EventEmitter<number>();\n  private _editTriggerConditionSub = Subscription.EMPTY;\n\n  private _addTriggerConditionEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _addTriggerConditionSub = Subscription.EMPTY;\n\n  private _removeTriggerConditionEvt: EventEmitter<number> = new EventEmitter<number>();\n  private _removeTriggerConditionSub = Subscription.EMPTY;\n\n  private _saveEvt: EventEmitter<void> = new EventEmitter<void>();\n  private _saveSub = Subscription.EMPTY;\n\n  private _isNodeValidSub = Subscription.EMPTY;\n  private _nodeNameChangedSub = Subscription.EMPTY;\n\n  constructor(\n    private _cdr: ChangeDetectorRef,\n    private _service: AjfFormBuilderService,\n    private _dialog: MatDialog,\n    private _fb: UntypedFormBuilder,\n    private _nodeNameValidator: AjfNodePropertiesNameMatchValidator,\n  ) {\n    this._nodeEntry = _service.editedNodeEntry;\n    this._choicesOriginsSub = _service.choicesOrigins.subscribe(\n      c => (this._choicesOrigins = c || []),\n    );\n\n    this._enabled = this._nodeEntry.pipe(map(n => n != null));\n\n    this._initForm();\n    this._initVisibilityEdit();\n    this._initConditionalBranchEdit();\n    this._initFormulaRepsEdit();\n    this._initChoicesFilterEdit();\n    this._initFormulaEdit();\n    this._initForceValueEdit();\n    this._initValidationConditionEdit();\n    this._initAddValidationCondition();\n    this._initRemoveValidationCondition();\n    this._initWarningConditionEdit();\n    this._initAddWarningCondition();\n    this._initRemoveWarningCondition();\n    this._initNextSlideConditionEdit();\n    this._initTriggerConditionEdit();\n    this._initAddTriggerCondition();\n    this._initRemoveTriggerCondition();\n    this._initSave();\n  }\n\n  ngOnInit() {\n    this._isNodeValidSub = this._propertiesForm\n      .pipe(\n        withLatestFrom(this._service.editedNodeEntry),\n        switchMap(([formGroup, _fbNode]) => {\n          formGroup.markAllAsTouched();\n          formGroup.updateValueAndValidity();\n\n          const nameControl = formGroup.get('name');\n\n          const nodeValidation: FormBuilderFieldValidation = {\n            isValid: formGroup.valid,\n            errors: formGroup.errors,\n          };\n          const fbNodeValidation: AjfFormBuilderValidation = {};\n          const fieldName = nameControl?.value || 'error';\n          fbNodeValidation[fieldName] = nodeValidation;\n          this._service.editNodeValidation(fbNodeValidation);\n\n          if (nameControl) {\n            this._nodeNameChangedSub = nameControl.valueChanges\n              .pipe(\n                startWith(nameControl.value),\n                pairwise(),\n                distinctUntilChanged((a, b) => a[1] === b[1]),\n              )\n              .subscribe(([oldValue, _newValue]) => {\n                // set validation true for old unused name\n                fbNodeValidation[oldValue] = {isValid: true, errors: null};\n                this._service.editNodeValidation(fbNodeValidation);\n              });\n          }\n\n          return formGroup.statusChanges.pipe(\n            filter(status => status !== 'VALID'),\n            map(() => {\n              nodeValidation.errors = formGroup.errors;\n              nodeValidation.isValid = formGroup.valid;\n              const currFieldName = formGroup.get('name')?.value || 'error';\n              fbNodeValidation[currFieldName] = nodeValidation;\n              return fbNodeValidation;\n            }),\n            distinctUntilChanged(),\n          );\n        }),\n      )\n      .subscribe(fbNodeValidation => {\n        this._service.editNodeValidation(fbNodeValidation);\n      });\n  }\n\n  editVisibility(): void {\n    this._editVisibilityEvt.emit();\n  }\n\n  editConditionalBranch(idx: number): void {\n    if (idx < 0 || idx >= this._conditionalBranches.length) {\n      return;\n    }\n    this._editConditionalBranchEvt.emit(idx);\n  }\n\n  editFormulaReps(): void {\n    this._editFormulaRepsEvt.emit();\n  }\n\n  editChoicesFilter(): void {\n    this._editChoicesFilterEvt.emit();\n  }\n\n  editFormula(): void {\n    this._editFormulaEvt.emit();\n  }\n\n  editForceValue(): void {\n    this._editForceValueEvt.emit();\n  }\n\n  editValidationCondition(idx: number): void {\n    if (idx < 0 || idx >= this._validationConditions.length) {\n      return;\n    }\n    this._editValidationConditionEvt.emit(idx);\n  }\n\n  addValidationCondition(): void {\n    this._addValidationConditionEvt.emit();\n  }\n\n  removeValidationCondition(idx: number): void {\n    if (idx < 0 || idx >= this._validationConditions.length) {\n      return;\n    }\n    this._removeValidationConditionEvt.emit(idx);\n  }\n\n  editWarningCondition(idx: number): void {\n    if (idx < 0 || idx >= this._warningConditions.length) {\n      return;\n    }\n    this._editWarningConditionEvt.emit(idx);\n  }\n\n  addWarningCondition(): void {\n    this._addWarningConditionEvt.emit();\n  }\n\n  removeWarningCondition(idx: number): void {\n    if (idx < 0 || idx >= this._warningConditions.length) {\n      return;\n    }\n    this._removeWarningConditionEvt.emit(idx);\n  }\n\n  editNextSlideCondition(): void {\n    this._editNextSlideConditionEvt.emit();\n  }\n\n  editTriggerCondition(idx: number): void {\n    if (idx < 0 || idx >= this._triggerConditions.length) {\n      return;\n    }\n    this._editTriggerConditionEvt.emit(idx);\n  }\n\n  addTriggerCondition(): void {\n    this._addTriggerConditionEvt.emit();\n  }\n\n  removeTriggerCondition(idx: number): void {\n    if (idx < 0 || idx >= this._triggerConditions.length) {\n      return;\n    }\n    this._removeTriggerConditionEvt.emit(idx);\n  }\n\n  isField(nodeEntry: AjfFormBuilderNodeEntry | null): boolean {\n    return nodeEntry != null && isField(nodeEntry.node);\n  }\n\n  isNumericField(node: AjfNode): node is AjfNumberField {\n    return isField(node) && isNumberField(node);\n  }\n\n  isEmptyField(node: AjfNode): node is AjfEmptyField {\n    return isField(node) && isEmptyField(node);\n  }\n\n  isFieldWithChoices(node: AjfNode): node is AjfFieldWithChoices<any> {\n    return isField(node) && isFieldWithChoices(node);\n  }\n\n  hasChoicesOriginRef(): Observable<boolean> {\n    return this._propertiesForm.pipe(\n      map(fg => {\n        const value = fg.get('choicesOriginRef')?.value != null;\n        return value;\n      }),\n      take(1),\n    );\n  }\n\n  isRangeField(node: AjfNode): node is AjfRangeField {\n    return isField(node) && isRangeField(node);\n  }\n\n  isTableField(node: AjfNode): node is AjfTableField {\n    return isField(node) && isTableField(node);\n  }\n\n  forceCheckbox(checked: boolean, checkbox: MatCheckbox): void {\n    if (!checked || !checkbox) {\n      return;\n    }\n    if (checkbox.checked) {\n      checkbox.toggle();\n    }\n  }\n\n  save(): void {\n    this._saveEvt.emit();\n  }\n\n  cancel(): void {\n    this._service.cancelNodeEntryEdit();\n  }\n\n  /**\n   * Return error message for the form control\n   * @param formControl\n   * @param fieldName\n   * @returns\n   */\n  fieldErrorMessage(formControl: AbstractControl | null, fieldName: string): string | null {\n    if (!formControl || !fieldName) return null;\n    if (formControl.hasError('required')) {\n      return `You must enter a value for ${fieldName}`;\n    }\n    if (formControl.hasError('name_exists')) {\n      return `This ${fieldName} has already been used`;\n    }\n    if (formControl.hasError(fieldName)) {\n      return formControl.getError(fieldName);\n    }\n    return null;\n  }\n\n  /**\n   * Return all form error messages\n   * @param formGroup\n   * @returns\n   */\n  allErrorMessages(formGroup: UntypedFormGroup | null): string | null {\n    if (!formGroup) return null;\n    let formErrors: string[] = [];\n    if (formGroup.errors && Object.keys(formGroup.errors).length) {\n      formErrors = Object.keys(formGroup.errors).map(key => `${key}: ${formGroup.errors?.[key]}`);\n    }\n\n    if (!formErrors.length && formGroup.controls) {\n      formErrors = Object.keys(formGroup.controls)\n        .filter(key => formGroup.controls[key].errors)\n        .map(key => `${key}: ${JSON.stringify(formGroup.controls[key].errors)}`);\n    }\n\n    return formErrors.join();\n  }\n\n  ngOnDestroy(): void {\n    this.cancel();\n    this._choicesOriginsSub.unsubscribe();\n\n    this._visibilityOptSub.unsubscribe();\n    this._visibilitySub.unsubscribe();\n    this._formulaRepsSub.unsubscribe();\n    this._choicesFilterSub.unsubscribe();\n    this._formulaSub.unsubscribe();\n    this._forceValueSub.unsubscribe();\n    this._validationConditionsSub.unsubscribe();\n    this._warningConditionsSub.unsubscribe();\n    this._triggerConditionsSub.unsubscribe();\n\n    this._editConditionDialogSub.unsubscribe();\n    this._editValidationConditionDialogSub.unsubscribe();\n    this._editWarningConditionDialogSub.unsubscribe();\n\n    this._editChoicesFilterSub.unsubscribe();\n    this._editConditionalBranchSub.unsubscribe();\n    this._editVisibilitySub.unsubscribe();\n    this._editFormulaRepsSub.unsubscribe();\n    this._editFormulaSub.unsubscribe();\n    this._editForceValueSub.unsubscribe();\n    this._editValidationConditionSub.unsubscribe();\n    this._editWarningConditionSub.unsubscribe();\n    this._nextSlideConditionSub.unsubscribe();\n\n    this._addTriggerConditionSub.unsubscribe();\n    this._addValidationConditionSub.unsubscribe();\n    this._addWarningConditionSub.unsubscribe();\n    this._editNextSlideConditionSub.unsubscribe();\n    this._editTriggerConditionSub.unsubscribe();\n    this._removeTriggerConditionSub.unsubscribe();\n    this._removeValidationConditionSub.unsubscribe();\n    this._removeWarningConditionSub.unsubscribe();\n\n    this._saveSub.unsubscribe();\n    this._isNodeValidSub.unsubscribe();\n    this._nodeNameChangedSub.unsubscribe();\n  }\n\n  private _initSave(): void {\n    this._saveSub = this._saveEvt\n      .pipe(withLatestFrom(this.propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        const fg = formGroup as UntypedFormGroup;\n        const val = {...fg.value, conditionalBranches: this._conditionalBranches};\n        this._service.saveNodeEntry(val);\n        const fbNodeValidation: AjfFormBuilderValidation = {};\n        fbNodeValidation[val.name] = {isValid: true, errors: null};\n        fbNodeValidation['error'] = {isValid: true, errors: null};\n        this._service.editNodeValidation(<AjfFormBuilderValidation>fbNodeValidation);\n      });\n  }\n\n  private _initForm(): void {\n    this._propertiesForm = this._nodeEntry.pipe(\n      filter(n => n != null),\n      map(n => {\n        if (this._visibilityOptSub != null) {\n          this._visibilityOptSub.unsubscribe();\n        }\n        if (this._visibilitySub != null) {\n          this._visibilitySub.unsubscribe();\n        }\n        if (this._conditionalBranchesSub != null) {\n          this._conditionalBranchesSub.unsubscribe();\n        }\n        if (n == null) {\n          return this._fb.group({});\n        }\n\n        const visibility = n.node.visibility != null ? n.node.visibility.condition : null;\n        const visibilityOpt =\n          n.node.visibility != null ? this._guessVisibilityOpt(n.node.visibility) : null;\n        let controls: any = {\n          name: [\n            n.node.name,\n            Validators.required,\n            this._nodeNameValidator.sameValueCheck(this._cdr, n.node.id),\n          ],\n          label: [n.node.label, Validators.required],\n          visibilityOpt: [visibilityOpt, Validators.required],\n          visibility: [visibility, Validators.required],\n          conditionalBranchesNum: n.node.conditionalBranches.length,\n        };\n        const validators: ValidatorFn[] = [];\n\n        if (isRepeatingContainerNode(n.node)) {\n          const rn = <AjfRepeatingContainerNode>n.node;\n\n          const formulaReps = rn.formulaReps != null ? rn.formulaReps.formula : null;\n\n          controls.formulaReps = [formulaReps];\n          controls.minReps = rn.minReps;\n          controls.maxReps = rn.maxReps;\n\n          this._curFormulaReps = formulaReps;\n\n          validators.push(checkRepsValidity);\n        }\n\n        const {node} = n;\n\n        if (isField(node)) {\n          let forceValue: string | null = null;\n          let notEmpty: boolean = false;\n          let validationConditions: ValidationCondition[] = [];\n          if (node.validation != null) {\n            if (node.validation.forceValue != null) {\n              forceValue = node.validation.forceValue.condition;\n            }\n            notEmpty = node.validation.notEmpty != null;\n            validationConditions = (node.validation.conditions || []).map(c => {\n              return {condition: c.condition, errorMessage: c.errorMessage};\n            });\n          }\n\n          let notEmptyW: boolean = false;\n          let warningConditions: WarningCondition[] = [];\n          if (node.warning != null) {\n            notEmptyW = node.warning.notEmpty != null;\n            warningConditions = (node.warning.conditions || []).map(w => {\n              return {condition: w.condition, warningMessage: w.warningMessage};\n            });\n          }\n          const formula = node.formula != null ? node.formula.formula : null;\n          const defaultValue =\n            node.defaultValue && node.defaultValue.formula != null\n              ? node.defaultValue.formula\n              : cleanDefaultValue(node.defaultValue, node);\n\n          controls.description = node.description;\n          controls.defaultValue = defaultValue;\n          controls.hint = node.hint;\n          controls.size = node.size;\n          controls.formula = formula;\n          controls.forceValue = forceValue;\n          controls.notEmpty = notEmpty;\n          controls.validationConditions = [validationConditions, []];\n          controls.notEmptyWarning = notEmptyW;\n          controls.readonlyField = node.editable != null ? !node.editable : false;\n          controls.warningConditions = [warningConditions, []];\n          controls.nextSlideCondition = [node.nextSlideCondition];\n\n          this._curForceValue = forceValue;\n          this._curFormula = formula;\n          this._validationConditions = validationConditions;\n          this._warningConditions = warningConditions;\n        }\n\n        if (this.isNumericField(node)) {\n          let minValue: any;\n          let maxValue: any;\n          let minDigits: any;\n          let maxDigits: any;\n          if (node.validation != null) {\n            if (node.validation.minValue != null) {\n              minValue = (node.validation.minValue.condition || '').replace('$value >= ', '');\n            }\n            if (node.validation.maxValue != null) {\n              maxValue = (node.validation.maxValue.condition || '').replace('$value <= ', '');\n            }\n            if (node.validation.minDigits != null) {\n              minDigits = (node.validation.minDigits.condition || '').replace(\n                '$value.toString().length >= ',\n                '',\n              );\n            }\n            if (node.validation.maxDigits != null) {\n              maxDigits = (node.validation.maxDigits.condition || '').replace(\n                '$value.toString().length <= ',\n                '',\n              );\n            }\n          }\n\n          controls.minValue = minValue;\n          controls.maxValue = maxValue;\n          controls.minDigits = minDigits;\n          controls.maxDigits = maxDigits;\n\n          validators.push(checkValueLimitsValidity);\n          validators.push(checkDigitsValidity);\n        }\n\n        if (this.isEmptyField(node)) {\n          const {HTML} = node;\n          controls.HTML = HTML;\n        }\n\n        if (this.isRangeField(node)) {\n          const {start, end, step} = node;\n\n          controls.start = start;\n          controls.end = end;\n          controls.step = step;\n\n          validators.push(checkRangeValidity);\n        }\n\n        if (this.isFieldWithChoices(node)) {\n          let triggerConditions: string[] = (node.triggerConditions || []).map(c => c.condition);\n\n          controls.choicesOriginRef = [(node as any).choicesOriginRef, Validators.required];\n          controls.choicesFilter = node.choicesFilter != null ? node.choicesFilter.formula : null;\n          controls.forceExpanded = node.forceExpanded;\n          controls.forceNarrow = node.forceNarrow;\n          controls.triggerConditions = triggerConditions;\n\n          this._triggerConditions = triggerConditions;\n        }\n\n        if (this.isTableField(node)) {\n          const {columnTypes, rows, columnLabels, rowLabels} = node;\n          const tableDef = {columnTypes, rows, columnLabels, rowLabels};\n          controls.tableDef = [\n            JSON.stringify(tableDef, undefined, 2),\n            [Validators.required, checkTableValidity],\n          ];\n          controls.hideEmptyRows = node.hideEmptyRows;\n        }\n\n        const fg = this._fb.group(controls);\n        fg.setValidators(validators);\n\n        fg.markAllAsTouched();\n        fg.updateValueAndValidity({onlySelf: false, emitEvent: true});\n\n        this._conditionalBranches = n.node.conditionalBranches.map(c => c.condition);\n        this._curVisibility = n.node.visibility != null ? n.node.visibility.condition : null;\n\n        this._handleConditionalBranchesChange(fg);\n        this._handleVisibilityChange(fg);\n        this._handleFormulaRepsChange(fg);\n        this._handleChoicesFilterChange(fg);\n        this._handleFormulaChange(fg);\n        this._handleForceValueChange(fg);\n        this._handleValidationCondtionsChange(fg);\n        this._handleWarningCondtionsChange(fg);\n        this._handleNextSlideConditionChange(fg);\n        this._handleTriggerCondtionsChange(fg);\n\n        return fg;\n      }),\n      shareReplay(1),\n    );\n  }\n\n  private _destroyConditionDialog(): void {\n    if (this._editConditionDialogSub != null) {\n      this._editConditionDialogSub.unsubscribe();\n      this._editConditionDialogSub = Subscription.EMPTY;\n    }\n    if (this._editConditionDialog != null) {\n      this._editConditionDialog.close();\n      this._editConditionDialog = null;\n    }\n  }\n\n  private _destroyValidationConditionDialog(): void {\n    if (this._editValidationConditionDialogSub != null) {\n      this._editValidationConditionDialogSub.unsubscribe();\n      this._editValidationConditionDialogSub = Subscription.EMPTY;\n    }\n    if (this._editValidationConditionDialog != null) {\n      this._editValidationConditionDialog.close();\n      this._editValidationConditionDialog = null;\n    }\n  }\n\n  private _destroyWarningConditionDialog(): void {\n    if (this._editWarningConditionDialogSub != null) {\n      this._editWarningConditionDialogSub.unsubscribe();\n      this._editWarningConditionDialogSub = Subscription.EMPTY;\n    }\n    if (this._editWarningConditionDialog != null) {\n      this._editWarningConditionDialog.close();\n      this._editWarningConditionDialog = null;\n    }\n  }\n\n  private _initRemoveTriggerCondition(): void {\n    this._removeTriggerConditionSub = this._removeTriggerConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([vcIdx, formGroup]) => {\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['triggerConditions'];\n        let vcs = (ctrl.value || []).slice(0);\n        if (vcIdx < 0 || vcIdx >= vcs.length) {\n          return;\n        }\n        vcs.splice(vcIdx, 1);\n        ctrl.setValue(vcs);\n      });\n  }\n\n  private _initAddTriggerCondition(): void {\n    this._addTriggerConditionSub = this._addTriggerConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['triggerConditions'];\n        let vcs = (ctrl.value || []).slice(0);\n        vcs.push('');\n        ctrl.setValue(vcs);\n      });\n  }\n\n  private _initTriggerConditionEdit(): void {\n    this._editConditionDialogSub = Subscription.EMPTY;\n    this._cdr.markForCheck();\n    this._editTriggerConditionSub = this._editTriggerConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([vcIdx, fg]) => {\n        this._destroyConditionDialog();\n        if (vcIdx < 0 || vcIdx >= this._triggerConditions.length || fg == null) {\n          return;\n        }\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        const cmp = this._editConditionDialog.componentInstance;\n        cmp.condition = this._triggerConditions[vcIdx];\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              this._triggerConditions[vcIdx] = cond;\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initRemoveWarningCondition(): void {\n    this._removeWarningConditionSub = this._removeWarningConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([vcIdx, formGroup]) => {\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['warningConditions'];\n        let vcs = (ctrl.value || []).slice(0);\n        if (vcIdx < 0 || vcIdx >= vcs.length) {\n          return;\n        }\n        vcs.splice(vcIdx, 1);\n        ctrl.setValue(vcs);\n      });\n  }\n\n  private _initAddWarningCondition(): void {\n    this._addWarningConditionSub = this._addWarningConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['warningConditions'];\n        let vcs = (ctrl.value || []).slice(0);\n        vcs.push({condition: '', errorMessage: ''});\n        ctrl.setValue(vcs);\n      });\n  }\n\n  private _initWarningConditionEdit(): void {\n    this._editWarningConditionSub = this._editWarningConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([vcIdx, fg]) => {\n        this._destroyWarningConditionDialog();\n        if (vcIdx < 0 || vcIdx >= this._warningConditions.length || fg == null) {\n          return;\n        }\n        this._editWarningConditionDialog = this._dialog.open(AjfFbWarningConditionEditorDialog);\n        const cmp = this._editWarningConditionDialog.componentInstance;\n        const w = this._warningConditions[vcIdx];\n        cmp.condition = w.condition;\n        cmp.warningMessage = w.warningMessage;\n        this._editWarningConditionDialogSub = this._editWarningConditionDialog\n          .afterClosed()\n          .subscribe((cond: WarningCondition) => {\n            if (cond !== void 0) {\n              this._warningConditions[vcIdx] = cond;\n            }\n            this._editWarningConditionDialogSub.unsubscribe();\n            this._editWarningConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initRemoveValidationCondition(): void {\n    this._removeValidationConditionSub = this._removeValidationConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([vcIdx, formGroup]) => {\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['validationConditions'];\n        let vcs = (ctrl.value || []).slice(0);\n        if (vcIdx < 0 || vcIdx >= vcs.length) {\n          return;\n        }\n        vcs.splice(vcIdx, 1);\n        ctrl.setValue(vcs);\n      });\n  }\n\n  private _initAddValidationCondition(): void {\n    this._addValidationConditionSub = this._addValidationConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['validationConditions'];\n        let vcs = (ctrl.value || []).slice(0);\n        vcs.push({condition: '', errorMessage: ''});\n        ctrl.setValue(vcs);\n      });\n  }\n\n  private _initValidationConditionEdit(): void {\n    this._editValidationConditionSub = this._editValidationConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([vcIdx, fg]) => {\n        this._destroyValidationConditionDialog();\n        if (vcIdx < 0 || vcIdx >= this._validationConditions.length || fg == null) {\n          return;\n        }\n        this._editValidationConditionDialog = this._dialog.open(\n          AjfFbValidationConditionEditorDialog,\n        );\n        const cmp = this._editValidationConditionDialog.componentInstance;\n        const v = this._validationConditions[vcIdx];\n        cmp.condition = v.condition;\n        cmp.errorMessage = v.errorMessage;\n        this._editValidationConditionDialogSub = this._editValidationConditionDialog\n          .afterClosed()\n          .subscribe((cond: ValidationCondition) => {\n            if (cond !== void 0) {\n              this._validationConditions[vcIdx] = cond;\n            }\n            this._editValidationConditionDialogSub.unsubscribe();\n            this._editValidationConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initForceValueEdit(): void {\n    this._editForceValueSub = this._editForceValueEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        this._destroyConditionDialog();\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['forceValue'];\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        this._editConditionDialog.componentInstance.condition = ctrl.value;\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              ctrl.setValue(cond);\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initNextSlideConditionEdit(): void {\n    this._editNextSlideConditionSub = this._editNextSlideConditionEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        this._destroyConditionDialog();\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['nextSlideCondition'];\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        this._editConditionDialog.componentInstance.condition = ctrl.value;\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              ctrl.setValue(cond);\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initFormulaEdit(): void {\n    this._editConditionDialogSub = Subscription.EMPTY;\n    this._cdr.markForCheck();\n    this._editFormulaSub = this._editFormulaEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        this._destroyConditionDialog();\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['formula'];\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        this._editConditionDialog.componentInstance.condition = ctrl.value;\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              ctrl.setValue(cond);\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initFormulaRepsEdit(): void {\n    this._editFormulaRepsSub = this._editFormulaRepsEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        this._destroyConditionDialog();\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['formulaReps'];\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        this._editConditionDialog.componentInstance.condition = ctrl.value;\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              ctrl.setValue(cond);\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initChoicesFilterEdit(): void {\n    this._editChoicesFilterSub = this._editChoicesFilterEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        this._destroyConditionDialog();\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['choicesFilter'];\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        this._editConditionDialog.componentInstance.condition = ctrl.value;\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              ctrl.setValue(cond);\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initConditionalBranchEdit(): void {\n    this._editConditionalBranchSub = this._editConditionalBranchEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([cbIdx, fg]) => {\n        this._destroyConditionDialog();\n        if (cbIdx < 0 || cbIdx >= this._conditionalBranches.length || fg == null) {\n          return;\n        }\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        this._editConditionDialog.componentInstance.condition = this._conditionalBranches[cbIdx];\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              this._conditionalBranches[cbIdx] = cond;\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _initVisibilityEdit(): void {\n    this._editVisibilitySub = this._editVisibilityEvt\n      .pipe(withLatestFrom(this._propertiesForm))\n      .subscribe(([_, formGroup]) => {\n        this._destroyConditionDialog();\n        if (formGroup == null) {\n          return;\n        }\n        const fg = formGroup as UntypedFormGroup;\n        const ctrl = fg.controls['visibility'];\n        const condition = ctrl.value;\n        this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog);\n        this._editConditionDialog.componentInstance.condition = condition;\n        this._editConditionDialogSub = this._editConditionDialog\n          .afterClosed()\n          .subscribe((cond: string) => {\n            if (cond !== void 0) {\n              ctrl.setValue(cond);\n            }\n            this._editConditionDialogSub.unsubscribe();\n            this._editConditionDialogSub = Subscription.EMPTY;\n            this._cdr.markForCheck();\n          });\n      });\n  }\n\n  private _handleTriggerCondtionsChange(fg: UntypedFormGroup): void {\n    this._triggerConditionsSub = fg.valueChanges\n      .pipe(\n        distinctUntilChanged(\n          (v1, v2) => JSON.stringify(v1.triggerConditions) === JSON.stringify(v2.triggerConditions),\n        ),\n      )\n      .subscribe((v: any) => {\n        this._triggerConditions = v.triggerConditions;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleWarningCondtionsChange(fg: UntypedFormGroup): void {\n    this._warningConditionsSub = fg.valueChanges\n      .pipe(\n        distinctUntilChanged(\n          (v1, v2) => JSON.stringify(v1.warningConditions) === JSON.stringify(v2.warningConditions),\n        ),\n      )\n      .subscribe((v: any) => {\n        this._warningConditions = v.warningConditions;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleValidationCondtionsChange(fg: UntypedFormGroup): void {\n    this._validationConditionsSub = fg.valueChanges\n      .pipe(\n        distinctUntilChanged(\n          (v1, v2) =>\n            JSON.stringify(v1.validationConditions) === JSON.stringify(v2.validationConditions),\n        ),\n      )\n      .subscribe((v: any) => {\n        this._validationConditions = v.validationConditions;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleForceValueChange(fg: UntypedFormGroup): void {\n    this._forceValueSub = fg.valueChanges\n      .pipe(distinctUntilChanged((v1, v2) => v1.forceValue === v2.forceValue))\n      .subscribe((v: any) => {\n        this._curForceValue = v.forceValue;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleNextSlideConditionChange(fg: UntypedFormGroup): void {\n    this._formulaSub = fg.valueChanges\n      .pipe(distinctUntilChanged((v1, v2) => v1.nextSlideCondition === v2.nextSlideCondition))\n      .subscribe((v: any) => {\n        this._nextSlideCondition = v.nextSlideCondition;\n        this._cdr.markForCheck();\n      });\n    this._formulaSub = fg.valueChanges\n      .pipe(distinctUntilChanged((v1, v2) => v1.nextSlideCondition === v2.nextSlideCondition))\n      .subscribe((v: any) => {\n        this._nextSlideCondition = v.nextSlideCondition;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleFormulaChange(fg: UntypedFormGroup): void {\n    this._formulaSub = fg.valueChanges\n      .pipe(distinctUntilChanged((v1, v2) => v1.formula === v2.formula))\n      .subscribe((v: any) => {\n        this._curFormula = v.formula;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleFormulaRepsChange(fg: UntypedFormGroup): void {\n    this._formulaRepsSub = fg.valueChanges\n      .pipe(distinctUntilChanged((v1, v2) => v1.formulaReps === v2.formulaReps))\n      .subscribe((v: any) => {\n        this._curFormulaReps = v.formulaReps;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleChoicesFilterChange(fg: UntypedFormGroup): void {\n    this._choicesFilterSub = fg.valueChanges\n      .pipe(distinctUntilChanged((v1, v2) => v1.choicesFilter === v2.choicesFilter))\n      .subscribe((v: any) => {\n        this._curChoicesFilter = v.choicesFilter;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleConditionalBranchesChange(fg: UntypedFormGroup): void {\n    this._conditionalBranchesSub = fg.valueChanges\n      .pipe(\n        distinctUntilChanged((v1, v2) => v1.conditionalBranchesNum === v2.conditionalBranchesNum),\n      )\n      .subscribe((v: any) => {\n        const cbNum: number = v.conditionalBranchesNum;\n        const curCbNum = this._conditionalBranches.length;\n        if (curCbNum < cbNum) {\n          let newCbs: string[] = [];\n          for (let i = curCbNum; i < cbNum; i++) {\n            newCbs.push(alwaysCondition().condition);\n          }\n          this._conditionalBranches = this._conditionalBranches.concat(newCbs);\n        } else if (curCbNum > cbNum) {\n          this._conditionalBranches.splice(0, curCbNum - cbNum);\n        }\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _handleVisibilityChange(fg: UntypedFormGroup): void {\n    this._visibilitySub = fg.valueChanges\n      .pipe(distinctUntilChanged((v1, v2) => v1.visibilityOpt === v2.visibilityOpt))\n      .subscribe(v => {\n        const visibilityOpt = v.visibilityOpt;\n        const visibility: string = v.visibility;\n        let newCondition: string | null;\n        switch (visibilityOpt) {\n          case 'always':\n            newCondition = alwaysCondition().condition;\n            break;\n          case 'never':\n            newCondition = neverCondition().condition;\n            break;\n          case 'condition':\n            newCondition = visibility && visibility.length ? visibility : null;\n            break;\n          default:\n            newCondition = null;\n        }\n        this._curVisibility = newCondition;\n        fg.controls['visibility'].setValue(newCondition);\n        this._cdr.markForCheck();\n      });\n    this._visibilitySub = fg.valueChanges\n      .pipe(\n        filter(v => v.visibilityOpt === 'condition'),\n        distinctUntilChanged((v1, v2) => v1.visibility === v2.visibility),\n      )\n      .subscribe(v => {\n        this._curVisibility = v.visibility;\n        this._cdr.markForCheck();\n      });\n  }\n\n  private _guessVisibilityOpt(condition: AjfCondition): string {\n    if (condition.condition.localeCompare(alwaysCondition().condition) === 0) {\n      return 'always';\n    }\n    if (condition.condition.localeCompare(neverCondition().condition) === 0) {\n      return 'never';\n    }\n    return 'condition';\n  }\n}\n","<div [style.display]=\"(enabled|async) ? 'none' : 'block'\" class=\"ajf-disabled-overlay\"></div>\n<ng-container *ngIf=\"nodeEntry|async as ne\">\n  <ng-container *ngIf=\"propertiesForm|async as pf\">\n    <div class=\"ajf-header\">\n      <h3>{{'Properties'|transloco}}</h3>\n      <button\n        mat-icon-button\n        [disabled]=\"pf.status !== 'VALID'\"\n        (click)=\"save()\"\n      >\n        <mat-icon>save</mat-icon>\n      </button>\n      <button mat-icon-button (click)=\"cancel()\">\n        <mat-icon>cancel</mat-icon>\n      </button>  \n    </div>\n    <mat-error *ngIf=\"pf?.invalid\">\n      {{allErrorMessages(pf)}}\n    </mat-error>\n    <form [formGroup]=\"pf!\" novalidate>\n      <div class=\"ajf-prop\">\n        <mat-form-field>\n          <input matInput formControlName=\"name\" [placeholder]=\"'Name' | transloco\" />\n          <mat-error *ngIf=\"pf.get('name')?.invalid\">\n            {{fieldErrorMessage(pf.get('name'), 'Name')}}\n          </mat-error>\n        </mat-form-field>\n      </div>\n      <div class=\"ajf-prop\">\n        <mat-form-field>\n          <input matInput formControlName=\"label\" [placeholder]=\"'Label' | transloco\" />\n          <mat-error *ngIf=\"pf.get('label')?.invalid\">\n            {{fieldErrorMessage(pf.get('label'), 'Label')}}\n          </mat-error>\n        </mat-form-field>\n      </div>\n      <ng-template [ngIf]=\"isEmptyField(ne!.node)\">\n        <div class=\"ajf-prop\">\n          <mat-form-field>\n            <input matInput formControlName=\"HTML\" [placeholder]=\"'HTML' | transloco\" />\n          </mat-form-field>\n        </div>\n      </ng-template>\n      <div class=\"ajf-prop\">\n        <mat-form-field>\n          <mat-label>{{'Visibility'|transloco}}</mat-label>\n          <mat-select formControlName=\"visibilityOpt\" [placeholder]=\"'Visible' | transloco\">\n            <mat-option value=\"always\">{{'Always'|transloco}}</mat-option>\n            <mat-option value=\"never\">{{'Never'|transloco}}</mat-option>\n            <mat-option value=\"condition\">{{'Condition...'|transloco}}</mat-option>\n          </mat-select>\n        </mat-form-field>\n        <button\n          (click)=\"editVisibility()\"\n          [disabled]=\"pf!.value.visibilityOpt !== 'condition'\"\n          mat-raised-button\n          [matTooltip]=\"curVisibility || ''\"\n        >\n          <div class=\"ajf-icon-cont\">\n            <mat-icon>edit</mat-icon>\n            <span><code>{{ curVisibility }}</code></span>\n          </div>\n        </button>\n      </div>\n      <div class=\"ajf-prop\">\n        <div><label>{{'Branches'|transloco}}</label></div>\n        <div>\n          <mat-slider discrete min=\"1\" max=\"5\" step=\"1\"\n            ><input matSliderThumb formControlName=\"conditionalBranchesNum\"\n          /></mat-slider>\n        </div>\n        <div *ngFor=\"let branch of conditionalBranches; let idx = index\">\n          <button (click)=\"editConditionalBranch(idx)\" mat-raised-button [matTooltip]=\"branch\">\n            <div class=\"ajf-icon-cont\">\n              <mat-icon>edit</mat-icon>\n              <span><code>{{ branch }}</code></span>\n            </div>\n          </button>\n        </div>\n      </div>\n      <ng-template [ngIf]=\"isRepeatingContainerNode(ne)\">\n        <div class=\"ajf-prop\">\n          <div><label>{{'Min repetitions'|transloco}}</label></div>\n          <div>\n            <mat-slider discrete min=\"1\" max=\"5\" step=\"1\"\n              ><input  formControlName=\"minReps\" matSliderThumb\n            /></mat-slider>\n          </div>\n          <div><label>{{'Max repetitions'|transloco}}</label></div>\n          <div>\n            <mat-slider discrete min=\"1\" max=\"5\" step=\"1\"\n              ><input formControlName=\"maxReps\" matSliderThumb\n            /></mat-slider>\n          </div>\n        </div>\n      </ng-template>\n      <ng-template [ngIf]=\"isField(ne)\">\n        <div class=\"ajf-prop\">\n          <mat-checkbox formControlName=\"readonlyField\">{{'Readonly'|transloco}}</mat-checkbox>\n        </div>\n        <div class=\"ajf-prop\">\n          <mat-form-field>\n            <mat-label>{{'Field size'|transloco}}</mat-label>\n            <mat-select formControlName=\"size\" [placeholder]=\"'Size' | transloco\">\n              <mat-option *ngFor=\"let fieldSize of fieldSizes\" [value]=\"fieldSize.value\">\n                {{ fieldSize.label|transloco }}\n              </mat-option>\n            </mat-select>\n          </mat-form-field>\n        </div>\n        <div class=\"ajf-prop\">\n          <mat-form-field>\n            <input matInput formControlName=\"hint\" [placeholder]=\"'Hint' | transloco\" />\n          </mat-form-field>\n        </div>\n        <div class=\"ajf-prop\">\n          <mat-form-field>\n            <textarea\n              matInput\n              formControlName=\"description\"\n              [placeholder]=\"'Description' | transloco\"\n            ></textarea>\n          </mat-form-field>\n        </div>\n        <div class=\"ajf-prop\">\n          <mat-form-field>\n            <input\n              matInput\n              formControlName=\"defaultValue\"\n              [placeholder]=\"'Default value' | transloco\"\n            />\n          </mat-form-field>\n        </div>\n        <div class=\"ajf-prop\">\n          <div><label>{{'Formula'|transloco}}</label></div>\n          <div>\n            <button (click)=\"editFormula()\" mat-raised-button [matTooltip]=\"curFormula || ''\">\n              <div class=\"ajf-icon-cont\">\n                <mat-icon>edit</mat-icon>\n                <span><code>{{ curFormula }}</code></span>\n              </div>\n            </button>\n          </div>\n        </div>\n        <!-- <div class=\"ajf-prop\">\n          <div><label>{{'Force value'|translco}}</label></div>\n          <div>\n            <button (click)=\"editForceValue()\" mat-raised-button [matTooltip]=\"curForceValue\">\n              <div class=\"ajf-icon-cont\">\n                <mat-icon>edit</mat-icon>\n                <span>{{ curForceValue }}</span>\n              </div>\n            </button>\n          </div>\n        </div> -->\n        <div class=\"ajf-prop\">\n          <mat-checkbox formControlName=\"notEmpty\">{{'Not empty'|transloco}}</mat-checkbox>\n        </div>\n        <ng-template [ngIf]=\"isNumericField(ne!.node)\">\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <input matInput formControlName=\"minValue\" [placeholder]=\"'Min value' | transloco\" />\n            </mat-form-field>\n          </div>\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <input matInput formControlName=\"maxValue\" [placeholder]=\"'Max value' | transloco\" />\n            </mat-form-field>\n          </div>\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <input\n                matInput\n                formControlName=\"minDigits\"\n                [placeholder]=\"'Min digits' | transloco\"\n              />\n            </mat-form-field>\n          </div>\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <input\n                matInput\n                formControlName=\"maxDigits\"\n                [placeholder]=\"'Max digits' | transloco\"\n              />\n            </mat-form-field>\n          </div>\n        </ng-template>\n        <ng-template [ngIf]=\"isRangeField(ne!.node)\">\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <input\n                matInput\n                type=\"number\"\n                formControlName=\"start\"\n                [placeholder]=\"'Start' | transloco\"\n              />\n            </mat-form-field>\n          </div>\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <input\n                matInput\n                type=\"number\"\n                formControlName=\"end\"\n                [placeholder]=\"'End' | transloco\"\n              />\n            </mat-form-field>\n          </div>\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <input\n                matInput\n                type=\"number\"\n                formControlName=\"step\"\n                [placeholder]=\"'Step' | transloco\"\n              />\n            </mat-form-field>\n          </div>\n        </ng-template>\n        <div class=\"ajf-prop\">\n          <div class=\"ajf-header\">\n            <label>{{ 'Validation' | transloco }}</label>\n            <mat-icon class=\"ajf-pointer\" (click)=\"addValidationCondition()\"\n              >add_circle_outline</mat-icon\n            >\n          </div>\n          <div *ngIf=\"validationConditions.length === 0\" class=\"ajf-validation-row ajf-emph\">\n            {{'No conditions'|transloco}}\n          </div>\n          <div\n            class=\"ajf-validation-row\"\n            *ngFor=\"let validationCondition of validationConditions; let idx = index\"\n          >\n            <button\n              (click)=\"editValidationCondition(idx)\"\n              mat-raised-button\n              [matTooltip]=\"validationCondition.condition\"\n            >\n              <div class=\"ajf-icon-cont\">\n                <mat-icon>edit</mat-icon>\n                <span><code>{{ validationCondition.condition }}</code></span>\n              </div>\n            </button>\n            <mat-icon class=\"ajf-pointer\" (click)=\"removeValidationCondition(idx)\"\n              >remove_circle_outline</mat-icon\n            >\n          </div>\n        </div>\n        <div class=\"ajf-prop\">\n          <mat-checkbox formControlName=\"notEmptyWarning\"\n            >{{'Not empty warning'|transloco}}</mat-checkbox\n          >\n        </div>\n        <div class=\"ajf-prop\">\n          <div class=\"ajf-header\">\n            <label>{{'Warnings'|transloco}}</label>\n            <mat-icon class=\"ajf-pointer\" (click)=\"addWarningCondition()\"\n              >add_circle_outline</mat-icon\n            >\n          </div>\n          <div *ngIf=\"warningConditions.length === 0\" class=\"ajf-validation-row ajf-emph\">\n            {{'No warnings'|transloco}}\n          </div>\n          <div\n            class=\"ajf-validation-row\"\n            *ngFor=\"let warningCondition of warningConditions; let idx = index\"\n          >\n            <button\n              (click)=\"editWarningCondition(idx)\"\n              mat-raised-button\n              [matTooltip]=\"warningCondition.condition\"\n            >\n              <div class=\"ajf-icon-cont\">\n                <mat-icon>edit</mat-icon>\n                <span><code>{{ warningCondition.condition }}</code></span>\n              </div>\n            </button>\n            <mat-icon class=\"ajf-pointer\" (click)=\"removeWarningCondition(idx)\"\n              >remove_circle_outline</mat-icon\n            >\n          </div>\n        </div>\n        <div class=\"ajf-prop\">\n          <div><label>{{'Go to next slide condition'|transloco}}</label></div>\n          <div>\n            <button\n              (click)=\"editNextSlideCondition()\"\n              mat-raised-button\n              [matTooltip]=\"nextSlideCondition || ''\"\n            >\n              <div class=\"ajf-icon-cont\">\n                <mat-icon>edit</mat-icon>\n                <span><code>{{ nextSlideCondition }}</code></span>\n              </div>\n            </button>\n          </div>\n        </div>\n        <ng-template [ngIf]=\"isFieldWithChoices(ne!.node)\">\n          <div class=\"ajf-prop\">\n            <mat-form-field>\n              <mat-label>{{'Choices origins'|transloco}}</mat-label>\n              <mat-select formControlName=\"choicesOriginRef\" [placeholder]=\"'Choices' | transloco\">\n                <mat-option\n                  *ngFor=\"let choicesOrigin of choicesOrigins\"\n                  [value]=\"choicesOrigin.name\"\n                >\n                  {{ (choicesOrigin.label || choicesOrigin.name)|transloco }}\n                </mat-option>\n              </mat-select>\n              <mat-error *ngIf=\"pf.get('choicesOriginRef')?.invalid\">\n                {{fieldErrorMessage(pf.get('choicesOriginRef'), 'choicesOriginRef')}}\n              </mat-error>\n            </mat-form-field>\n          </div>\n          <div class=\"ajf-prop\">\n            <div><label>{{'Choices filter'|transloco}}</label></div>\n            <div>\n              <button\n                (click)=\"editChoicesFilter()\"\n                mat-raised-button\n                [matTooltip]=\"curChoicesFilter || ''\"\n              >\n                <div class=\"ajf-icon-cont\">\n                  <mat-icon>edit</mat-icon>\n                  <span><code>{{ curChoicesFilter }}</code></span>\n                </div>\n              </button>\n            </div>\n          </div>\n          <div class=\"ajf-prop\">\n            <mat-checkbox\n              formControlName=\"forceExpanded\"\n              #forceExpanded\n              (change)=\"forceCheckbox($event.checked, forceNarrow)\"\n              >{{'Force expanded selection'|transloco}}</mat-checkbox\n            >\n          </div>\n          <div class=\"ajf-prop\">\n            <mat-checkbox\n              formControlName=\"forceNarrow\"\n              #forceNarrow\n              (change)=\"forceCheckbox($event.checked, forceExpanded)\"\n              >{{'Force narrow selection'|transloco}}</mat-checkbox\n            >\n          </div>\n          <div class=\"ajf-prop\">\n            <div class=\"ajf-header\">\n              <label>{{'Trigger selection'|transloco}}</label>\n              <mat-icon class=\"ajf-pointer\" (click)=\"addTriggerCondition()\"\n                >add_circle_outline</mat-icon\n              >\n            </div>\n            <div\n              *ngIf=\"!triggerConditions || triggerConditions.length === 0\"\n              class=\"ajf-validation-row ajf-emph\"\n            >\n              {{'No trigger condition'|transloco}}\n            </div>\n            <div\n              class=\"ajf-validation-row\"\n              *ngFor=\"let triggerCondition of triggerConditions; let idx = index\"\n            >\n              <button\n                (click)=\"editTriggerCondition(idx)\"\n                mat-raised-button\n                [matTooltip]=\"triggerCondition\"\n              >\n                <div class=\"ajf-icon-cont\">\n                  <mat-icon>edit</mat-icon>\n                  <span><code>{{ triggerCondition }}</code></span>\n                </div>\n              </button>\n              <mat-icon class=\"pointer\" (click)=\"removeTriggerCondition(idx)\"\n                >remove_circle_outline</mat-icon\n              >\n            </div>\n          </div>\n        </ng-template>\n        <ng-container *ngIf=\"isTableField(ne!.node)\">\n          <div class=\"ajf-prop\">\n            <mat-checkbox formControlName=\"hideEmptyRows\"\n              >{{'Hide empty rows'|transloco}}</mat-checkbox\n            >\n            <mat-form-field>\n              <textarea\n                matInput\n                formControlName=\"tableDef\"\n                [placeholder]=\"'Table definition' | transloco\"\n              ></textarea>\n              <mat-error *ngIf=\"pf.get('tableDef')?.invalid\">\n                {{fieldErrorMessage(pf.get('tableDef'), 'tableDef')}}\n              </mat-error>\n            </mat-form-field>\n          </div>\n        </ng-container>\n      </ng-template>\n    </form>\n  </ng-container>\n</ng-container>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\n\nimport {AjfFormBuilderNodeTypeEntry} from './form-builder-service';\n\n@Component({\n  selector: 'ajf-fb-node-type-entry',\n  templateUrl: 'node-type-entry.html',\n  styleUrls: ['node-type-entry.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AjfFbNodeTypeEntry {\n  private _nodeType: AjfFormBuilderNodeTypeEntry | undefined;\n  get nodeType(): AjfFormBuilderNodeTypeEntry | undefined {\n    return this._nodeType;\n  }\n  @Input()\n  set nodeType(nodeType: AjfFormBuilderNodeTypeEntry | undefined) {\n    this._nodeType = nodeType;\n    this._cdr.markForCheck();\n  }\n  get node(): any {\n    return {nodeType: this.nodeType?.nodeType.node, fieldType: this.nodeType?.nodeType.field};\n  }\n\n  constructor(private _cdr: ChangeDetectorRef) {}\n}\n","<ng-container *ngIf=\"nodeType\">\n  <ajf-node-icon [node]=\"node\"></ajf-node-icon>&nbsp;{{nodeType.label}}\n</ng-container>\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {AjfFormBuilderNodeTypeEntry} from './form-builder-service';\n\n@Pipe({\n  name: 'nodeTypeFilter',\n  pure: false,\n})\nexport class NodeTypeFilterPipe implements PipeTransform {\n  transform(nodeTypes: AjfFormBuilderNodeTypeEntry[], searchTerm: string): any[] {\n    if (!nodeTypes) return [];\n    if (!searchTerm) return nodeTypes;\n    const term = searchTerm.toLowerCase();\n    return nodeTypes.filter(nt => nt.label.toLowerCase().includes(term));\n  }\n}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfChoicesOrigin, AjfForm} from '@ajf/core/forms';\nimport {AjfCondition} from '@ajf/core/models';\nimport {CdkDrag, CdkDragDrop} from '@angular/cdk/drag-drop';\nimport {\n  AfterContentInit,\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {MatDialog, MatDialogRef} from '@angular/material/dialog';\nimport {MatSlideToggleChange} from '@angular/material/slide-toggle';\nimport {Observable, Subscription} from 'rxjs';\nimport {sample} from 'rxjs/operators';\n\nimport {AjfFbChoicesOriginEditorDialog} from './choices-origin-editor-dialog';\nimport {AjfFbConditionEditorDialog} from './condition-editor-dialog';\nimport {\n  AjfFormBuilderNodeEntry,\n  AjfFormBuilderNodeTypeEntry,\n  AjfFormBuilderService,\n  AjfFormBuilderValidation,\n} from './form-builder-service';\nimport {disableFieldDropPredicate, onDropProcess} from './form-builder-utils';\nimport {AjfFbStringIdentifierDialogComponent} from './string-identifier-dialog';\n\n@Component({\n  selector: 'ajf-form-builder',\n  templateUrl: 'form-builder.html',\n  styleUrls: ['form-builder.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AjfFormBuilder implements AfterViewChecked, AfterContentInit, OnDestroy {\n  @ViewChild('designer', {static: true}) designerCont!: ElementRef;\n\n  private _form: AjfForm | undefined;\n  get form(): AjfForm | undefined {\n    return this._form;\n  }\n  @Input()\n  set form(form: AjfForm | undefined) {\n    if (this._form !== form) {\n      this._form = form;\n      if (this._init) {\n        this._setCurrentForm();\n      }\n    }\n  }\n\n  /**\n   * Called to set form builder validation errors\n   */\n  private _formBuilderValidation: EventEmitter<AjfFormBuilderValidation> =\n    new EventEmitter<AjfFormBuilderValidation>();\n  @Output()\n  readonly formBuilderValidation: Observable<AjfFormBuilderValidation> = this\n    ._formBuilderValidation as Observable<AjfFormBuilderValidation>;\n\n  private _nodeTypes: AjfFormBuilderNodeTypeEntry[];\n  get nodeTypes(): AjfFormBuilderNodeTypeEntry[] {\n    return this._nodeTypes;\n  }\n\n  private _nodeEntriesTree: Observable<AjfFormBuilderNodeEntry[]>;\n  get nodeEntriesTree(): Observable<AjfFormBuilderNodeEntry[]> {\n    return this._nodeEntriesTree;\n  }\n\n  private _choicesOrigins: Observable<AjfChoicesOrigin<any>[]>;\n  get choicesOrigins(): Observable<AjfChoicesOrigin<any>[]> {\n    return this._choicesOrigins;\n  }\n\n  /**\n   * The list of the ids of all the dropLists connected to the formbuilder source list.\n   */\n  private _connectedDropLists: Observable<string[]> = this._service.connectedDropLists;\n  get connectedDropLists(): Observable<string[]> {\n    return this._connectedDropLists;\n  }\n\n  searchTerm: string = '';\n\n  private _vc: EventEmitter<void> = new EventEmitter<void>();\n\n  private _init = false;\n  private _editConditionSub: Subscription = Subscription.EMPTY;\n  private _editConditionDialog: MatDialogRef<AjfFbConditionEditorDialog> | null = null;\n  private _beforeNodesUpdateSub: Subscription = Subscription.EMPTY;\n  private _editChoicesOriginSub: Subscription = Subscription.EMPTY;\n  private _editNodesValidationSub: Subscription = Subscription.EMPTY;\n  private _editChoicesOriginDialog: MatDialogRef<AjfFbChoicesOriginEditorDialog> | null = null;\n  private _stringIdentifierDialog: MatDialogRef<AjfFbStringIdentifierDialogComponent> | null = null;\n  private _stringIdentifierSub: Subscription = Subscription.EMPTY;\n\n  private _lastScrollTop: number = 0;\n\n  constructor(private _service: AjfFormBuilderService, private _dialog: MatDialog) {\n    this._nodeTypes = _service.availableNodeTypes;\n    this._nodeEntriesTree = _service.nodeEntriesTree;\n    this._choicesOrigins = _service.choicesOrigins;\n    this._editConditionSub = this._service.editedCondition.subscribe(\n      (condition: AjfCondition | null) => {\n        if (this._editConditionDialog != null) {\n          this._editConditionDialog.close();\n          this._editConditionDialog = null;\n        }\n        if (condition != null) {\n          this._editConditionDialog = this._dialog.open(AjfFbConditionEditorDialog, {\n            disableClose: true,\n          });\n        }\n      },\n    );\n    this._editChoicesOriginSub = this._service.editedChoicesOrigin.subscribe(\n      (choicesOrigin: AjfChoicesOrigin<any> | null) => {\n        if (this._editChoicesOriginDialog != null) {\n          this._editChoicesOriginDialog.close();\n          this._editChoicesOriginDialog = null;\n        }\n        if (choicesOrigin != null) {\n          this._editChoicesOriginDialog = this._dialog.open(AjfFbChoicesOriginEditorDialog, {\n            disableClose: true,\n          });\n        }\n      },\n    );\n\n    this._editNodesValidationSub = this._service.editedNodesValidation.subscribe(\n      (nodeValidation: AjfFormBuilderValidation | null) => {\n        if (nodeValidation != null) {\n          this._formBuilderValidation.next(nodeValidation);\n        }\n      },\n    );\n\n    this._beforeNodesUpdateSub = this._service.beforeNodesUpdate.subscribe(() => {\n      if (this.designerCont == null) {\n        return;\n      }\n      this._lastScrollTop = this.designerCont.nativeElement.scrollTop;\n    });\n\n    this.nodeEntriesTree.pipe(sample(<Observable<void>>this._vc)).subscribe(() => {\n      if (this.designerCont == null) {\n        return;\n      }\n      this.designerCont.nativeElement.scrollTop = this._lastScrollTop;\n    });\n\n    this._stringIdentifierSub = this._service.stringIdentifier.subscribe(() => {});\n  }\n\n  ngAfterViewChecked(): void {\n    this._vc.emit();\n  }\n\n  ngAfterContentInit(): void {\n    this._setCurrentForm();\n    this._init = true;\n  }\n\n  ngOnDestroy(): void {\n    this._editConditionSub.unsubscribe();\n    this._beforeNodesUpdateSub.unsubscribe();\n    this._editChoicesOriginSub.unsubscribe();\n    this._editNodesValidationSub.unsubscribe();\n    this._stringIdentifierSub.unsubscribe();\n    this._service.setForm(null);\n    this._service.resetNodeEntriesTreeExpandedStatus();\n    this._service.resetEmptyCounters();\n  }\n\n  createChoicesOrigin(): void {\n    this._service.createChoicesOrigin();\n  }\n\n  disableDrop(): boolean {\n    return false;\n  }\n\n  disableFieldDrop(item: CdkDrag<AjfFormBuilderNodeTypeEntry>): boolean {\n    return disableFieldDropPredicate(item);\n  }\n\n  /**\n   * Triggers when a field or slide node is moved or inserted by drag&dropping in the formbuilder.\n   * @param event The drop event.\n   * @param content True if the current nodeEntry contains other nodeEntries.\n   */\n  onDrop(\n    event: CdkDragDrop<AjfFormBuilderNodeEntry> | CdkDragDrop<AjfFormBuilderNodeTypeEntry>,\n    content = false,\n  ): void {\n    onDropProcess(event, this._service, null, content);\n  }\n\n  editChoicesOrigin(choicesOrigin: AjfChoicesOrigin<any>): void {\n    this._service.editChoicesOrigin(choicesOrigin);\n  }\n\n  editStringIdentifier(): void {\n    if (this._stringIdentifierDialog != null) {\n      this._stringIdentifierDialog.close();\n      this._stringIdentifierDialog = null;\n    }\n    this._stringIdentifierDialog = this._dialog.open(AjfFbStringIdentifierDialogComponent, {\n      disableClose: true,\n      width: '60%',\n      height: '60%',\n    });\n  }\n\n  expandAll() {\n    this._service.expandAll();\n  }\n\n  collapseAll() {\n    this._service.collapseAll();\n  }\n\n  expandToggle(evt: MatSlideToggleChange) {\n    if (evt.checked) {\n      this.expandAll();\n    } else {\n      this.collapseAll();\n    }\n  }\n\n  private _setCurrentForm(): void {\n    if (this._form == null) {\n      return;\n    }\n    this._service.setForm(this._form);\n  }\n}\n","<mat-toolbar class=\"ajf-formbuilder-toolbar\">\n  <button mat-icon-button (click)=\"leftSidenav.toggle()\" aria-label=\"Toggle side navigation\">\n    <mat-icon>add_box</mat-icon>\n  </button>\n  <button mat-button [matMenuTriggerFor]=\"choicesMenu\">\n    {{ 'Choices' | transloco }}\n  </button>\n  <button mat-button (click)=\"editStringIdentifier()\">\n    {{ 'Identifier' | transloco }}\n  </button>\n\n  <div class=\"ajf-toolbar-group\">\n    <button\n      mat-icon-button\n      aria-label=\"Collapse all slides\"\n      matTooltip=\"Keep slides collapsed\"\n    >\n      <mat-icon>unfold_less</mat-icon>\n    </button>\n\n    <mat-slide-toggle\n      color=\"primary\"\n      (change)=\"expandToggle($event)\"\n      aria-label=\"Toggle slide expansion\"\n    ></mat-slide-toggle>\n\n    <button\n      mat-icon-button\n      aria-label=\"Expand all slides\"\n      matTooltip=\"Keep slides expanded\"\n    >\n      <mat-icon>unfold_more</mat-icon>\n    </button>\n  </div>\n\n  <span class=\"ajf-spacer\"></span>\n\n  <mat-menu #choicesMenu=\"matMenu\">\n    <button mat-menu-item (click)=\"createChoicesOrigin()\">\n      {{ 'New..' | transloco }}\n    </button>\n    <ng-container *ngIf=\"choicesOrigins | async as cos\">\n      <button\n        mat-menu-item\n        *ngFor=\"let choicesOrigin of cos\"\n        (click)=\"editChoicesOrigin(choicesOrigin)\"\n      >\n        {{ (choicesOrigin.label || choicesOrigin.name) | transloco }}\n      </button>\n    </ng-container>\n  </mat-menu>\n</mat-toolbar>\n\n<div class=\"ajf-formtree-container\">\n  <mat-drawer-container\n    cdkDropListGroup\n    class=\"ajf-formtree-drawer-container\"\n  >\n    <mat-drawer #leftSidenav position=\"start\" mode=\"over\" class=\"ajf-sidenav-modern\">\n      <div class=\"ajf-drawer-header\">\n        <mat-form-field class=\"ajf-search-field\" floatLabel=\"auto\">\n          <mat-icon matPrefix>search</mat-icon>\n          <input\n            matInput\n            type=\"text\"\n            [(ngModel)]=\"searchTerm\"\n            placeholder=\"{{ 'Search elements...' | transloco }}\"\n          />\n          <button\n            *ngIf=\"searchTerm\"\n            matSuffix\n            mat-icon-button\n            aria-label=\"Clear\"\n            (click)=\"searchTerm=''\"\n          >\n            <mat-icon>close</mat-icon>\n          </button>\n        </mat-form-field>\n      </div>\n    \n      <div\n        #sourceDropList\n        class=\"ajf-drawer-content\"\n        cdkDropList\n        [cdkDropListConnectedTo]=\"(connectedDropLists | async)!\"\n        [cdkDropListEnterPredicate]=\"disableDrop\"\n        [cdkDropListData]=\"nodeTypes\"\n      >\n        <ajf-fb-node-type-entry\n          *ngFor=\"let nodeType of nodeTypes | nodeTypeFilter: searchTerm\"\n          cdkDrag\n          [cdkDragData]=\"nodeType\"\n          (cdkDragStarted)=\"leftSidenav.close()\"\n          [nodeType]=\"nodeType\"\n        ></ajf-fb-node-type-entry>\n      </div>\n    </mat-drawer>\n    \n    <div #designer class=\"ajf-designer\">\n      <ajf-fb-node-entry\n        id=\"slides-list\"\n        cdkDropList\n        (cdkDropListDropped)=\"onDrop($event)\"\n        [cdkDropListEnterPredicate]=\"disableFieldDrop\"\n        *ngFor=\"let nodeEntry of (nodeEntriesTree | async); let isFirst = first\"\n        [isFirst]=\"isFirst\"\n        [nodeEntry]=\"nodeEntry\"\n      ></ajf-fb-node-entry>\n    </div>\n  </mat-drawer-container>\n\n  <div class=\"ajf-formtree-properties\" #rightSidenav position=\"end\" mode=\"side\">\n    <ajf-fb-node-properties></ajf-fb-node-properties>\n  </div>\n</div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfTranslocoModule} from '@ajf/core/transloco';\nimport {AjfNodeIconModule} from '@ajf/material/node-icon';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatCardModule} from '@angular/material/card';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatListModule} from '@angular/material/list';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatSidenavModule} from '@angular/material/sidenav';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport {MatSliderModule} from '@angular/material/slider';\nimport {MatTableModule} from '@angular/material/table';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {MatTooltipModule} from '@angular/material/tooltip';\n\nimport {AjfFbBranchLine} from './branch-line';\nimport {AjfFbChoicesOriginEditor} from './choices-origin-editor';\nimport {AjfFbChoicesOriginEditorDialog} from './choices-origin-editor-dialog';\nimport {AjfFbConditionEditor} from './condition-editor';\nimport {AjfFbConditionEditorDialog} from './condition-editor-dialog';\nimport {AjfFormBuilder} from './form-builder';\nimport {AjfFormBuilderService} from './form-builder-service';\nimport {AjfFbNodeEntry} from './node-entry';\nimport {AjfFbNodeProperties} from './node-properties';\nimport {AjfFbNodeTypeEntry} from './node-type-entry';\nimport {AjfFbStringIdentifierDialogComponent} from './string-identifier-dialog';\nimport {AjfFbValidationConditionEditorDialog} from './validation-condition-editor-dialog';\nimport {AjfFbWarningConditionEditorDialog} from './warning-condition-editor-dialog';\nimport {AjfNodePropertiesNameMatchValidator} from './node-properties-name-validator';\nimport {NodeTypeFilterPipe} from './node-type-filter.pipe';\n\n@NgModule({\n  imports: [\n    AjfNodeIconModule,\n    CommonModule,\n    DragDropModule,\n    FormsModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatCardModule,\n    MatCheckboxModule,\n    MatChipsModule,\n    MatDialogModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    MatListModule,\n    MatMenuModule,\n    MatSelectModule,\n    MatSidenavModule,\n    MatSliderModule,\n    MatTableModule,\n    MatToolbarModule,\n    MatTooltipModule,\n    ReactiveFormsModule,\n    AjfTranslocoModule,\n    MatExpansionModule,\n    MatSlideToggleModule,\n  ],\n  declarations: [\n    AjfFbBranchLine,\n    AjfFbChoicesOriginEditor,\n    AjfFbChoicesOriginEditorDialog,\n    AjfFbConditionEditor,\n    AjfFbConditionEditorDialog,\n    AjfFbNodeEntry,\n    AjfFbNodeProperties,\n    AjfFbNodeTypeEntry,\n    AjfFbStringIdentifierDialogComponent,\n    AjfFbValidationConditionEditorDialog,\n    AjfFbWarningConditionEditorDialog,\n    AjfFormBuilder,\n    NodeTypeFilterPipe,\n  ],\n  exports: [AjfFormBuilder],\n  providers: [AjfFormBuilderService, AjfNodePropertiesNameMatchValidator],\n})\nexport class AjfFormBuilderModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './form-builder-module';\nexport * from './form-builder-service';\nexport * from './form-builder-utils';\nexport * from './form-builder';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i4","i5","i8","obsOf","i1.AjfFormBuilderService","i5.AjfFbChoicesOriginEditor","i6","i7","i5.AjfFbConditionEditor","i11","i13","i14","i9.AjfFbBranchLine","i10","i8.AjfFbConditionEditor","i9","i4.AjfNodePropertiesNameMatchValidator","i15","i12","i15.AjfFbNodeEntry","i16.AjfFbNodeProperties","i17.AjfFbNodeTypeEntry","i18","i19.NodeTypeFilterPipe"],"mappings":"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"}