{"version":3,"file":"jaspero-fb-page-builder.mjs","sources":["../../../../projects/page-builder/src/lib/block-form/block-form.component.ts","../../../../projects/page-builder/src/lib/block-form/block-form.component.html","../../../../projects/page-builder/src/lib/block/block.component.ts","../../../../projects/page-builder/src/lib/block/block.component.html","../../../../projects/page-builder/src/lib/fields/mbp/mbp.component.ts","../../../../projects/page-builder/src/lib/fields/mbp/mbp.component.html","../../../../projects/page-builder/src/lib/navigation/navigation.component.ts","../../../../projects/page-builder/src/lib/navigation/navigation.component.html","../../../../projects/page-builder/src/lib/page-builder-ctx.service.ts","../../../../projects/page-builder/src/lib/options.token.ts","../../../../projects/page-builder/src/lib/state.const.ts","../../../../projects/page-builder/src/lib/register-blocks.ts","../../../../projects/page-builder/src/lib/utils/unique-id.ts","../../../../projects/page-builder/src/lib/page-builder/page-builder.component.ts","../../../../projects/page-builder/src/lib/page-builder/page-builder.component.html","../../../../projects/page-builder/src/lib/toolbar.service.ts","../../../../projects/page-builder/src/lib/page-builder.module.ts","../../../../projects/page-builder/src/lib/inline-editor/components/image-dialog/image-dialog.component.ts","../../../../projects/page-builder/src/lib/inline-editor/components/image-dialog/image-dialog.component.html","../../../../projects/page-builder/src/lib/utils/dom-listener.ts","../../../../projects/page-builder/src/lib/utils/get-control.ts","../../../../projects/page-builder/src/lib/inline-editor/directives/image-ie.directive.ts","../../../../projects/page-builder/src/lib/inline-editor/tinymce-obs.ts","../../../../projects/page-builder/src/lib/inline-editor/directives/single-line-ie.directive.ts","../../../../projects/page-builder/src/lib/inline-editor/inline-editor.module.ts","../../../../projects/page-builder/src/lib/utils/block-style.ts","../../../../projects/page-builder/src/lib/block-data.component.ts","../../../../projects/page-builder/src/lib/field-definitions.ts","../../../../projects/page-builder/src/lib/img-preview/img-preview.directive.ts","../../../../projects/page-builder/src/lib/img-preview/img-preview.module.ts","../../../../projects/page-builder/src/lib/decorators/block.decorator.ts","../../../../projects/page-builder/src/jaspero-fb-page-builder.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Injector,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {FormBuilderComponent, FormBuilderData, Parser, State} from '@jaspero/form-builder';\nimport {Subscription} from 'rxjs';\nimport {Selected} from '../selected.interface';\n\n@Component({\n  selector: 'fb-pb-block-form',\n  templateUrl: './block-form.component.html',\n  styleUrls: ['./block-form.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BlockFormComponent implements OnDestroy {\n  constructor(\n    private injector: Injector,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  @Input() parentFormId = 'jp-fb-main';\n  @Output() optionsChanged = new EventEmitter<any>();\n  @Output() remove = new EventEmitter();\n  @ViewChild(FormBuilderComponent) formBuilderComponent: FormBuilderComponent;\n\n  parser: Parser;\n  id: string;\n  formData: FormBuilderData | undefined;\n  parent: {\n    id: string;\n    pointer: string;\n  };\n\n  private formSub: Subscription;\n  private _selected: Selected;\n\n  @Input()\n  set selected(selected: Selected) {\n    this.formData = null;\n    this.cdr.markForCheck();\n    if (this.formSub) {\n      this.formSub.unsubscribe();\n    }\n\n    this.parser = new Parser(\n      selected.form.schema,\n      this.injector,\n      // TODO: Replace with correct state\n      State.Create,\n      'admin',\n      selected.form.definitions\n    );\n\n    this.parser.form = this.parser.buildForm(\n      selected.value,\n      null,\n      '/',\n      false\n    );\n\n    setTimeout(() => {\n      this.id = [this.parentFormId || 'jp-fb-main', 'blocks', selected.index].join('-');\n\n      let pointer = `/blocks/${selected.index}/value`;\n\n      if (selected.nested && typeof selected.nested.index === 'number' && selected.nested.arrayProperty) {\n        pointer += '/' + selected.nested.arrayProperty + '/' + selected.nested.index;\n      }\n\n      if (selected.form.segments) {\n        this.formData = {\n          ...selected.form,\n          segments: (selected.form.segments || []).map(segment => {\n            return {\n              ...segment,\n              title: ''\n            };\n          })\n        };\n      } else {\n        this.formData = selected.form;\n      }\n\n      this.parent = {\n        id: this.parentFormId,\n        pointer\n      };\n      this.formData.value = selected.value;\n      this.cdr.markForCheck();\n\n      this._selected = selected;\n      this.cdr.markForCheck();\n    });\n  }\n\n  changedFormBuilder() {\n    this.formSub = window.jpFb.forms[this.id].valueChanges.subscribe(formValue => {\n      if (this._selected.nested?.arrayProperty && typeof this._selected.nested?.index === 'number') {\n        this._selected.value = {\n          ...this._selected.nested.completeValue\n        };\n\n        this._selected.value[this._selected.nested.arrayProperty][this._selected.nested.index] = formValue;\n\n        this.optionsChanged.next(this._selected.value);\n      } else {\n        this._selected.value = {\n          ...this._selected.value,\n          ...formValue\n        };\n\n        this.optionsChanged.next(formValue);\n      }\n    });\n\n    setTimeout(() =>\n      this.formBuilderComponent?.form.setValue(this.formBuilderComponent.form.getRawValue())\n    );\n  }\n\n  ngOnDestroy() {\n    if (this.formSub) {\n      this.formSub.unsubscribe();\n    }\n  }\n}\n","<fb-form-builder\n  *ngIf=\"formData && id\"\n  [data]=\"formData\"\n  [id]=\"id\"\n  [parser]=\"parser\"\n  [parent]=\"parent\"\n  (rendered)=\"changedFormBuilder()\">\n</fb-form-builder>\n","import {ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, OnInit} from '@angular/core';\n\n@Component({\n  selector: 'fb-pb-block',\n  templateUrl: './block.component.html',\n  styleUrls: ['./block.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BlockComponent implements OnInit {\n  constructor(\n    public el: ElementRef\n  ) {}\n\n  @HostBinding('id')\n  @Input()\n  id: string;\n\n  @HostBinding('class.selected')\n  @Input()\n  selected: boolean;\n\n  @Input() module: string;\n  @Input() styles: string[];\n\n  ngOnInit() {\n    if (this.styles) {\n      this.styles.forEach(style => {\n        const el = document.createElement('style');\n        el.innerHTML = style;\n        this.el.nativeElement.appendChild(el);\n      })\n    }\n  }\n\n  change() {\n    if (this.el.nativeElement.children[0]) {\n      this.el.nativeElement.children[0].change = {};\n    }\n  }\n}\n","<ng-content></ng-content>","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit, TemplateRef, ViewChild} from '@angular/core';\nimport {UntypedFormBuilder, UntypedFormGroup} from '@angular/forms';\nimport {COMPONENT_DATA, FieldComponent, FieldData} from '@jaspero/form-builder';\nimport {UntilDestroy, untilDestroyed} from '@ngneat/until-destroy';\nimport {Subscription} from 'rxjs';\n\nenum Unit {\n  px = 'px',\n  em = 'em',\n  rem = 'rem'\n};\n\nenum BorderStyle {\n  solid = 'solid',\n  dotted = 'dotted',\n  dahsed = 'dashed'\n};\n\nenum Type {\n  margin = 'margin',\n  border = 'border',\n  padding = 'padding'\n}\n\nenum Side {\n  top = 'top',\n  right = 'right',\n  bottom = 'bottom',\n  left = 'left'\n}\n\ninterface Sides<T = {size: number, unit: Unit.px}> {\n  top?: T;\n  right?: T;\n  bottom?: T;\n  left?: T;\n}\n\ninterface BorderSide {\n  size: number;\n  unit: Unit.px;\n  style: BorderStyle;\n  radius: string;\n  color: string;\n}\n\ninterface Preset<T = string> {\n  name: string;\n  sides: Sides<T>;\n}\n\ninterface Presets {\n  border?: Preset<BorderSide>[];\n  margin?: Preset[];\n  padding?: Preset[];\n}\n\nexport interface MbpConfiguration {\n  units?: Unit[];\n  presets?: Presets;\n  margin?: {\n    enabled?: boolean;\n    defaultUnit?: string;\n    defaultSize?: number;\n  };\n  border?: {\n    enabled?: boolean;\n    defaultUnit?: string;\n    defaultSize?: number;\n    defaultStyle?: BorderStyle;\n    defaultRadiusLeft?: number;\n    defaultRadiusRight?: number;\n    defaultColor?: string\n  };\n  padding?: {\n    enabled?: boolean;\n    defaultUnit?: string;\n    defaultSize?: number;\n  };\n  defaultUnit?: string;\n}\n\ninterface Item {\n  type: string;\n  template: TemplateRef<any>;\n  color: string;\n  child?: Item;\n}\n\nexport type MbpData = MbpConfiguration & FieldData;\n\n@UntilDestroy()\n@Component({\n  selector: 'fb-pb-mbp',\n  templateUrl: './mbp.component.html',\n  styleUrls: ['./mbp.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MbpComponent extends FieldComponent<MbpData> implements OnInit {\n  constructor(\n    @Inject(COMPONENT_DATA) public cData: MbpData,\n    private fb: UntypedFormBuilder,\n    private cdr: ChangeDetectorRef\n  ) {\n    super(cData);\n  }\n\n  @ViewChild('sidesTemp', {static: true}) sidesTemplate: TemplateRef<any>\n\n  Side = Side;\n  Type = Type;\n  BorderStyle = BorderStyle;\n\n  form: UntypedFormGroup;\n  selected: {type: Type; side: Side;};\n  units: Unit[];\n  item: Item;\n  defaults: {\n    margin?: {\n      unit: string;\n      size: number;\n    };\n    border?: {\n      unit: string;\n      size: number;\n      style?: BorderStyle;\n      radiusLeft?: number;\n      radiusRight?: number;\n      color?: string\n    };\n    padding?: {\n      unit: string;\n      size: number;\n    };\n  } = {};\n  presets: Presets;\n\n  private subscription: Subscription;\n\n  get locked() {\n    return this.form.get('locked').value as boolean;\n  }\n\n  ngOnInit() {\n    this.item = [\n      {type: Type.margin, template: this.sidesTemplate, color: '#f59e42'},\n      {type: Type.border, template: this.sidesTemplate, color: '#ffc382'},\n      {type: Type.padding, template: this.sidesTemplate, color: '#82ffb0'}\n    ]\n      .filter(({type}) => !this.cData[type] || this.cData[type].enabled)\n      .reverse()\n      .reduce((acc, cur) => ({\n        ...cur,\n        child: acc\n      }), null);\n\n    Object.values(Type).forEach(type => {\n      if (!this.cData[type] || this.cData[type].enabled) {\n        this.defaults[type] = {\n          unit: this.cData[type]?.defaultUnit || this.cData.defaultUnit || 'px',\n          size: this.cData[type]?.defaultSize || 0\n        }\n      }\n    });\n\n    if (this.defaults.border) {\n      this.defaults.border.radiusLeft = this.cData?.border?.defaultRadiusLeft || 0;\n      this.defaults.border.radiusRight = this.cData?.border?.defaultRadiusRight || 0;\n      this.defaults.border.style = this.cData?.border?.defaultStyle || BorderStyle.solid;\n      this.defaults.border.color = this.cData?.border?.defaultColor || '#000000';\n    }\n\n    this.units = this.cData.units || [Unit.px, Unit.em, Unit.rem];\n    this.presets = this.cData.presets || {};\n  }\n\n  getSize(type: Type, side: Side) {\n    const s = this.cData.control.value[type]?.[side] || {};\n    const v = s.size;\n\n    if (v) {\n      return v + s.unit;\n    }\n\n    return '-';\n  }\n\n  selectSide(type: Type, side: Side) {\n\n    this.selected = {type, side};\n\n    const currentValue =\n      this.cData.control.value[type]?.[side] ||\n      this.defaults[type];\n\n    let group: any = {\n      preset: currentValue.preset || null,\n      locked: currentValue.locked !== undefined ? currentValue.locked : true,\n      size: currentValue.size || 0,\n      unit: currentValue.unit\n    };\n\n    if (type === Type.border) {\n      group.style = currentValue.style;\n      group.radiusLeft = currentValue.radiusLeft;\n      group.radiusRight = currentValue.radiusRight;\n      group.color = currentValue.color\n    }\n\n    this.form = this.fb.group(group);\n\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n\n    this.subscription = this.form.valueChanges\n      .pipe(\n        untilDestroyed(this)\n      )\n      .subscribe(value => {\n        for (const key in value) {\n          if (value[key] === null) {\n            delete value[key];\n          }\n        }\n\n        const current = this.cData.control.value || {};\n\n        if (!current[type]) {\n          current[type] = {};\n        }\n\n        if (value.locked) {\n          Object.values(Side).forEach(s =>\n            current[type][s] = value\n          );\n        } else {\n          current[type][side] = value;\n        }\n\n        if (value.preset) {\n          const selectedPreset = (this.presets[type] as any[]).find(it => it.name === value.preset);\n\n          if (\n            selectedPreset.sides[side].size !== value.size ||\n            selectedPreset.sides[side].unit !== value.unit\n          ) {\n            current[type][side].preset = null;\n            this.form.get('preset').setValue(null, {onlySelf: true, emitEvent: false});\n          }\n        }\n\n        this.cData.control.setValue(current);\n      });\n\n    this.cdr.markForCheck();\n  }\n\n  selectPreset(preset: Preset<any>) {\n    const current = this.cData.control.value || {};\n\n    if (!current[this.selected.type]) {\n      current[this.selected.type] = {};\n    }\n\n    if (this.locked) {\n      for (let key in preset.sides) {\n        current[this.selected.type][key] = {...preset.sides[key], preset: preset.name};\n      }\n    } else {\n      current[this.selected.type][this.selected.side] = preset.sides[this.selected.side];\n      current[this.selected.type][this.selected.side].preset = preset.name;\n    }\n\n    this.form.patchValue(\n      {...preset.sides[this.selected.side], preset: preset.name},\n      {emitEvent: false}\n    );\n    this.cData.control.setValue(current);\n  }\n\n  clear() {\n    const current = this.form.getRawValue();\n\n\n    for (const key in current) {\n      if (key !== 'locked') {\n        current[key] = null;\n      }\n    }\n\n    current.unit = this.defaults[this.selected.type].unit;\n\n    this.form.setValue(current);\n  }\n}\n","<ng-template #sidesTemp let-type=\"type\" let-child=\"child\">\n  <div class=\"box-label\">{{type}}</div>\n  <div class=\"box-sides\">\n    <div *ngFor=\"let item of Side | keyvalue\" [ngClass]=\"'box-sides-' + item.value\"\n      [class.active]=\"selected?.type === type && selected?.side === item.value\" (click)=\"selectSide(type, item.value)\">\n      <div class=\"box-sides-label\">{{getSize(type, item.value)}}</div>\n    </div>\n  </div>\n\n  <ng-container *ngIf=\"child\">\n    <div class=\"box\" [style.background]=\"child.color\">\n      <ng-container *ngTemplateOutlet=\"child.template; context: {type: child.type, child: child.child}\"></ng-container>\n    </div>\n  </ng-container>\n</ng-template>\n\n<div class=\"box\" [style.background]=\"item.color\">\n  <ng-container *ngTemplateOutlet=\"item.template; context: {type: item.type, child: item.child}\"></ng-container>\n</div>\n\n<div *ngIf=\"form\" [formGroup]=\"form\">\n\n  <div class=\"option-set\" *ngIf=\"presets[selected.type]?.length\">\n    <div class=\"option-set-label\">Presets</div>\n\n    <mat-chip-listbox>\n      <mat-chip-option\n        class=\"preset\"\n        *ngFor=\"let preset of presets[selected.type]\"\n        [selected]=\"form.get('preset').value === preset.name\"\n        (click)=\"selectPreset(preset)\">\n        {{preset.name}}\n      </mat-chip-option>\n    </mat-chip-listbox>\n  </div>\n\n  <div class=\"option-set\">\n    <div class=\"option-set-label\">\n      <span>{{selected.type}}</span>\n      <span class=\"option-set-label-clear\" (click)=\"clear()\">Clear</span>\n    </div>\n\n    <div class=\"option-set-fields\">\n      <mat-form-field>\n        <mat-label>Size</mat-label>\n        <input matInput type=\"number\" formControlName=\"size\">\n      </mat-form-field>\n      <mat-form-field>\n        <mat-label>Unit</mat-label>\n        <mat-select formControlName=\"unit\">\n          <mat-option *ngFor=\"let unit of units\" [value]=\"unit\">{{unit}}</mat-option>\n        </mat-select>\n      </mat-form-field>\n      <button mat-icon-button [matTooltip]=\"locked ? 'Unlock (different for each side)' : 'Lock (same for each side)'\"\n        (click)=\"form.get('locked').setValue(locked ? false : true)\">\n        <mat-icon>{{locked ? 'lock' : 'lock_open'}}</mat-icon>\n      </button>\n    </div>\n  </div>\n\n  <ng-container *ngIf=\"selected.type === Type.border\">\n    <div class=\"option-set\" *ngIf=\"selected.side === Side.top || selected.side === Side.bottom\">\n      <div class=\"option-set-label\">Radius</div>\n  \n      <div class=\"option-set-fields\">\n        <mat-form-field>\n          <mat-label>Left</mat-label>\n          <input matInput type=\"number\" formControlName=\"radiusLeft\">\n        </mat-form-field>\n        <mat-form-field>\n          <mat-label>Right</mat-label>\n          <input matInput type=\"number\" formControlName=\"radiusRight\">\n        </mat-form-field>\n      </div>\n    </div>\n\n    <div class=\"option-set\">\n      <div class=\"option-set-label\">Style</div>\n\n      <div class=\"option-set-fields\">\n        <mat-form-field>\n          <mat-label>Line Color</mat-label>\n          <input type=\"color\" matInput formControlName=\"color\">\n        </mat-form-field>\n        <mat-form-field>\n          <mat-label>Line Style</mat-label>\n          <mat-select formControlName=\"style\">\n            <mat-option *ngFor=\"let bs of BorderStyle | keyvalue\" [value]=\"bs.value\">{{bs.value}}</mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n    </div>\n  </ng-container>\n\n</div>","import {FlatTreeControl} from '@angular/cdk/tree';\nimport {\n  ChangeDetectionStrategy, ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree';\nimport {TranslocoService} from '@jsverse/transloco';\nimport {MatDialog, MatDialogRef} from '@angular/material/dialog';\nimport {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\n\ninterface ParentNode {\n  name: string;\n  children?: ParentNode[];\n}\n\ninterface FlatNode {\n  expandable: boolean;\n  name: string;\n  level: number;\n}\n\n@Component({\n  selector: 'fb-pb-navigation',\n  templateUrl: './navigation.component.html',\n  styleUrls: ['./navigation.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class NavigationComponent {\n  constructor(\n    private transloco: TranslocoService,\n    private dialog: MatDialog,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  @ViewChild('itemOptions') itemOptionsRef: TemplateRef<any>;\n  @ViewChild('blockOptions') blockOptionsRef: TemplateRef<any>;\n\n  optionsDialog: MatDialogRef<any>;\n\n  @Input() index: number;\n  @Input() selectBlock: any;\n  @Input() closeBlock: any;\n  @Input() removeBlock: any;\n  @Input() addBlock: any;\n  @Input() preview: any;\n\n  treeControl: FlatTreeControl<any>;\n  treeFlattener: MatTreeFlattener<any, any>;\n  dataSource: MatTreeFlatDataSource<any, any>;\n\n  valueCache: any;\n  blockCache: any;\n\n  selectLastItem = false;\n\n  @Input()\n  set value(value: any) {\n\n    if (this.valueCache) {\n      this.populateNavigation({\n        ...this.blockCache,\n        value\n      });\n\n      this.treeControl.expandAll();\n    }\n\n    this.valueCache = value;\n  }\n\n  @Input()\n  set block(block: any) {\n    this.blockCache = block;\n\n    this.populateNavigation(block);\n  }\n\n  @Output()\n  optionsChanged = new EventEmitter<any>();\n\n  @Output()\n  blockSelected = new EventEmitter<number>();\n\n  populateNavigation(block) {\n    if (!this.treeControl) {\n      this.treeControl = new FlatTreeControl<FlatNode>(\n        node => node.level, node => node.expandable);\n    }\n\n    if (!this.treeFlattener) {\n      this.treeFlattener = new MatTreeFlattener(\n        this._transformer, node => node.level, node => node.expandable, node => node.children);\n    }\n\n    if (!this.dataSource) {\n      this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\n    }\n\n    const children = (block.form.segments || []).map((segment, index) => {\n      if (!segment.type || segment.type === 'card') {\n        segment.type = 'empty';\n      }\n\n      let child = {\n        ...block,\n        ...segment,\n        name: segment.title,\n        form: {\n          ...block.form,\n          segments: block.form.segments.filter((item, i) => i === index)\n        }\n      };\n\n      if (child.array) {\n        const arrayProperty = child.array.slice(1);\n        child.form = {\n          ...child.form,\n          segments: [\n            {\n              type: 'empty',\n              fields: segment.fields,\n              ...segment.nestedSegments && {\n                nestedSegments: segment.nestedSegments\n              }\n            }\n          ],\n          schema: child.form.schema.properties[arrayProperty].items,\n          definitions: {\n            ...Object.keys(child.form.definitions || {}).reduce((acc, key) => {\n              if (key.startsWith(child.array) || key.startsWith(arrayProperty)) {\n                /**\n                 * Removes the parent array from the definitions\n                 */\n                const eKey = key.split('/').slice(1).join('/');\n                acc[eKey] = child.form.definitions[key];\n              }\n\n              return acc;\n            }, {})\n          }\n        };\n\n        delete child.array;\n\n        const addButton = {\n          ...child,\n          name: this.transloco.translate('fbPb.ADD') + ' ' + this.parseTitle(child.title) || child.label,\n          button: true,\n          icon: 'add_circle_outline',\n          class: 'navigation-button',\n          action: 'add',\n          arrayProperty,\n          value: {}\n        };\n\n        child = (child.value?.[arrayProperty] || []).map((item, i) => {\n          return {\n            ...child,\n            name: this.parseTitle(child.title, i) || child.label,\n            value: child.value?.[arrayProperty]?.[i],\n            nested: {\n              arrayProperty,\n              index: i\n            }\n          };\n        });\n\n        if (this.selectLastItem) {\n          this.selectLastItem = false;\n          setTimeout(() => this.selectCustomBlock(child[child.length - 2]));\n        }\n\n        child.push(addButton);\n      }\n\n      return child;\n    })\n      .reduce((acc, child: Array<any> | object) =>\n        [...acc, ...(child.constructor === Array ? child : [child])], []\n      );\n\n    this.dataSource.data = [{\n      name: block.label,\n      icon: block.icon,\n      children\n    }];\n  }\n\n  hasChild = (_: number, node: FlatNode) => node.expandable;\n\n  selectCustomBlock(node) {\n    if (node.button) {\n      if (node.action === 'add') {\n        this.blockCache.value[node.arrayProperty] = [\n          ...(this.blockCache.value[node.arrayProperty] || []),\n          {}\n        ];\n\n        this.valueCache = this.blockCache;\n\n        this.selectBlock({\n          ...node,\n          nested: {\n            ...node.nested,\n            completeValue: this.valueCache,\n            arrayProperty: node.arrayProperty,\n            index: this.blockCache.value[node.arrayProperty].length - 1\n          },\n          value: {}\n        }, this.index);\n\n        setTimeout(() => {\n          this.optionsChanged.next(this.blockCache.value);\n\n          this.selectLastItem = true;\n\n          setTimeout(() => this.preview(), 50);\n        });\n      }\n\n      return;\n    }\n\n    if (node.nested) {\n      return this.selectBlock({\n        ...node,\n        nested: {\n          ...node.nested,\n          completeValue: this.valueCache\n        },\n        value: {\n          ...this.blockCache.value[node.nested.arrayProperty][node.nested.index]\n        }\n      }, this.index);\n    }\n\n    if (node.expandable) {\n      return this.selectBlock({\n        ...this.blockCache,\n        ...node\n      }, this.index);\n    }\n\n    this.blockSelected.emit(this.index);\n\n    if ((this.blockCache.form.segments || []).length > 1) {\n      return this.selectBlock({...node, value: this.blockCache.value}, this.index);\n    }\n\n    return this.selectBlock(this.blockCache, this.index);\n  }\n\n  selectParent(node, nd) {\n    if (nd.ariaExpanded === 'false' || !node.children?.length) {\n      return;\n    }\n\n    const selectable = node.children.find(child => !child.action);\n\n    if (selectable) {\n      this.selectCustomBlock(selectable);\n    }\n  }\n\n  openOptions(event, block, isBlock = false) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (!block.expandable) {\n      this.selectCustomBlock(block);\n    }\n\n    this.optionsDialog = this.dialog.open(isBlock ? this.blockOptionsRef : this.itemOptionsRef, {\n      autoFocus: false,\n      position: {\n        top: event.clientY + 'px',\n        left: event.clientX + 'px'\n      },\n      backdropClass: 'clear-backdrop',\n      panelClass: 'contextmenu-dialog',\n      width: '140px',\n      data: {block}\n    });\n  }\n\n  deleteItem(block: any) {\n    if (block.nested) {\n\n      this.blockCache.value[block.nested.arrayProperty].splice(block.nested.index, 1);\n      this.blockCache.value[block.nested.arrayProperty] = [...this.blockCache.value[block.nested.arrayProperty]];\n      this.valueCache = this.blockCache;\n\n      setTimeout(() => {\n        this.optionsChanged.next(this.blockCache.value);\n        setTimeout(() => this.closeBlock());\n      });\n    } else {\n      this.deleteBlock(block);\n    }\n\n    this.optionsDialog.close();\n  }\n\n  deleteBlock(block: any) {\n    this.selectCustomBlock(block);\n    this.removeBlock();\n    this.optionsDialog.close();\n  }\n\n  duplicateBlock(block: any) {\n    const duplicate = {\n      ...this.blockCache,\n      ...block,\n      duplicateValue: this.valueCache,\n      id: this.blockCache.type,\n      name: this.blockCache.name\n    };\n\n    this.addBlock(duplicate);\n    this.optionsDialog.close();\n  }\n\n  drop(event: CdkDragDrop<any[]>) {\n    const items = event.container.getSortedItems().map(item => item.data);\n    const leftBound = items.findIndex(item => item.nested?.arrayProperty === event.item.data.nested.arrayProperty);\n    const rightBound = items.findIndex((item, i) => i >= leftBound && item?.action === 'add') - 1;\n\n    if (event.currentIndex < leftBound || event.currentIndex > rightBound) {\n      return;\n    }\n\n    moveItemInArray(\n      this.blockCache.value[event.item.data.nested.arrayProperty],\n      event.previousIndex - leftBound,\n      event.currentIndex - leftBound\n    );\n\n    this.optionsChanged.next(this.blockCache.value);\n    setTimeout(() => {\n      this.preview();\n      this.cdr.markForCheck();\n    });\n  }\n\n  sorted() {\n    this.closeBlock();\n  }\n\n  parseTitle(title: string | ((_) => string), index?) {\n    if (typeof title === 'function') {\n      return title(index);\n    }\n    return title;\n  }\n\n  private _transformer = (node: ParentNode, level: number) => {\n    return {\n      ...node,\n      expandable: !!node.children && node.children.length > 0,\n      name: node.name,\n      level\n    };\n  };\n}\n","<div class=\"block-navigation\">\n  <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" cdkDropList (cdkDropListSorted)=\"sorted()\" (cdkDropListDropped)=\"drop($event)\">\n    <mat-tree-node\n      *matTreeNodeDef=\"let node\"\n      matTreeNodePadding\n      cdkDrag\n      [cdkDragData]=\"node\"\n      [cdkDragDisabled]=\"!node.nested\"\n      (jpStopPropagation)=\"selectCustomBlock(node)\"\n      [class]=\"'pointer flex w-full ' + (node.class || '') + (!!node.nested ? ' movable' : '')\"\n      (contextmenu)=\"openOptions($event, node)\">\n      <mat-icon class=\"mat-icon-rtl-mirror hidden mat-elevation-z12\" *ngIf=\"hasChild(0, node)\">chevron_right</mat-icon>\n      <mat-icon class=\"tree-label\"\n        [class.not-expandable]=\"!hasChild(0, node) && node.level === 0\">{{node.icon || 'tab'}}</mat-icon>\n      {{node.name | transloco}}\n    </mat-tree-node>\n    <mat-tree-node\n      *matTreeNodeDef=\"let node;when:hasChild\"\n      #nd\n      matTreeNodePadding\n      matTreeNodeToggle\n      class=\"pointer flex\"\n      (jpStopPropagation)=\"selectParent(node, nd)\"\n      (contextmenu)=\"openOptions($event, node, true)\">\n      <mat-icon class=\"mat-icon-rtl-mirror\">\n        {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n      </mat-icon>\n      <mat-icon class=\"tree-label\">{{node.icon || 'tab'}}</mat-icon>\n      {{node.name | transloco}}\n    </mat-tree-node>\n  </mat-tree>\n</div>\n\n<ng-template #itemOptions let-data>\n  <button\n    class=\"contextmenu-dialog-item\"\n    mat-button\n    *ngIf=\"!data.block.nested && data.block.level\">\n    No Actions\n  </button>\n  <button\n    class=\"contextmenu-dialog-item\"\n    mat-button\n    (click)=\"duplicateBlock(data.block)\"\n    *ngIf=\"!data.block.nested && !data.block.level\">\n    <mat-icon>content_copy</mat-icon>\n    Duplicate\n  </button>\n  <button\n    class=\"contextmenu-dialog-item\"\n    mat-button\n    color=\"warn\"\n    (click)=\"deleteItem(data.block)\"\n    *ngIf=\"data.block.nested || !data.block.level\">\n    <mat-icon>delete</mat-icon>\n    Delete\n  </button>\n</ng-template>\n\n\n<ng-template #blockOptions let-data>\n  <button\n    class=\"contextmenu-dialog-item\"\n    mat-button\n    (click)=\"duplicateBlock(data.block)\">\n    <mat-icon>content_copy</mat-icon>\n    Duplicate\n  </button>\n  <button\n    class=\"contextmenu-dialog-item\"\n    mat-button\n    color=\"warn\"\n    (click)=\"deleteBlock(data.block)\">\n    <mat-icon>delete</mat-icon>\n    Delete\n  </button>\n</ng-template>\n","import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n@Injectable()\nexport class PageBuilderCtxService {\n  selectedBlock$ = new Subject<number>();\n}\n","import {InjectionToken} from '@angular/core';\nimport {FbPageBuilderOptions} from './options.interface';\n\nexport const FB_PAGE_BUILDER_OPTIONS = new InjectionToken<FbPageBuilderOptions>('FB_PAGE_BUILDER_OPTIONS');\n","export const STATE: {\n  renderMode: boolean;\n  registered: {[key: string]: boolean};\n  registeredElements: {[key: string]: boolean};\n  blocks: {\n    [key: string]: {\n      [key: string]: any;\n    }\n  }\n} = {\n  renderMode: false,\n  registered: {},\n  registeredElements: {},\n  blocks: {}\n};\n","import {Injector} from '@angular/core';\nimport {createCustomElement} from '@angular/elements';\nimport {STATE} from './state.const';\n\nexport function registerBlocks(page: string, injector: Injector) {\n  if (!STATE.registered[page]) {\n    STATE.registered[page] = true;\n    Object.entries(STATE.blocks[page]).forEach(([key, {component}]) => {\n      if (STATE.registeredElements[key]) {\n        return;\n      }\n\n      const element = createCustomElement(component, {injector});\n      customElements.define(key, element);\n      STATE.registeredElements[key] = true;\n    });\n  }\n}\n","export interface UniqueId {\n  next: () => number\n}\n\nexport function uniqueId(init = 0): UniqueId {\n  return {\n    next: () => ++init,\n  };\n}\n","import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  ElementRef,\n  Inject,\n  Injector,\n  OnDestroy,\n  OnInit,\n  Optional,\n  QueryList,\n  Renderer2,\n  ViewChild,\n  ViewChildren,\n  ViewContainerRef\n} from '@angular/core';\nimport {DomSanitizer, ɵSharedStylesHost} from '@angular/platform-browser';\nimport {\n  COMPONENT_DATA,\n  FieldComponent,\n  FieldData,\n  FormBuilderContextService,\n  FormBuilderData,\n  Segment\n} from '@jaspero/form-builder';\nimport {safeEval} from '@jaspero/utils';\nimport {TranslocoService} from '@jsverse/transloco';\nimport {UntilDestroy} from '@ngneat/until-destroy';\nimport {set} from 'json-pointer';\nimport {Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {BlockFormComponent} from '../block-form/block-form.component';\nimport {BlockComponent} from '../block/block.component';\nimport {NavigationComponent} from '../navigation/navigation.component';\nimport {FbPageBuilderOptions} from '../options.interface';\nimport {FB_PAGE_BUILDER_OPTIONS} from '../options.token';\nimport {PageBuilderCtxService} from '../page-builder-ctx.service';\nimport {registerBlocks} from '../register-blocks';\nimport {Selected} from '../selected.interface';\nimport {STATE} from '../state.const';\nimport {TopBlock} from '../top-block.interface';\nimport {uniqueId, UniqueId} from '../utils/unique-id';\n\ndeclare global {\n  interface Window {\n    jpFbPb: {\n      [key: string]: {\n        [key: string]: any\n      }\n    }\n  }\n}\n\ninterface BlockSegment extends Segment {\n  icon: string | ((value: any) => string);\n}\n\ninterface BlockFormBuilderData extends FormBuilderData {\n  segments?: BlockSegment[];\n}\n\ninterface Block {\n  label: string;\n  id: string;\n  form: BlockFormBuilderData;\n\n  /**\n   * Prevents automatically opening\n   * the block for editing. This is useful\n   * on blocks that don't have any configuration.\n   */\n  skipOpen?: boolean;\n  previewStyle?: string;\n  previewValue?: any;\n\n  /**\n   * Used for formatting the entry value for\n   * the preview\n   *\n   * (value: any, utils: {ds: DomSanitizer}) => any\n   */\n  previewFormat?: string;\n  icon?: string;\n\n  /**\n   * Limit the number of instances per page\n   */\n  maxInstances?: number;\n\n  /**\n   * Default value to use when duplicated\n   */\n  duplicateValue?: any;\n}\n\ninterface CompileOptions {\n  removeWrapper: boolean;\n}\n\nexport interface BlocksConfiguration {\n  blocks?: Block[];\n  layout?: {\n    selector: string;\n    content: string;\n  };\n  intro?: string | {[key: string]: string};\n  rightSidebar?: {\n    emptyState?: string;\n  };\n  styles?: string | string[];\n  styleUrls?: string | string[];\n  parentFormId?: string;\n  /**\n   * Should the compiled version of the html\n   * be persisted in to database\n   */\n  saveCompiled?: boolean | CompileOptions;\n}\n\nexport type BlocksData = BlocksConfiguration & FieldData;\n\n@UntilDestroy()\n@Component({\n  selector: 'fb-pb-page-builder',\n  templateUrl: './page-builder.component.html',\n  styleUrls: ['./page-builder.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PageBuilderComponent extends FieldComponent<BlocksData> implements OnInit, OnDestroy {\n  constructor(\n    @Inject(COMPONENT_DATA)\n    public cData: BlocksData,\n    public transloco: TranslocoService,\n    private formCtx: FormBuilderContextService,\n    @Optional()\n    @Inject(FB_PAGE_BUILDER_OPTIONS)\n    private options: FbPageBuilderOptions,\n    private cdr: ChangeDetectorRef,\n    private domSanitizer: DomSanitizer,\n    @Inject(DOCUMENT)\n    private document: any,\n    private renderer: Renderer2,\n    private ctx: PageBuilderCtxService,\n    private injector: Injector,\n    private domSharedStyleHost: ɵSharedStylesHost\n  ) {\n    super(cData);\n  }\n\n  @ViewChild('ipe', {static: false, read: ViewContainerRef}) vce: ViewContainerRef;\n  @ViewChild('iframe', {static: false}) iframeEl: ElementRef<HTMLIFrameElement>;\n  @ViewChild(BlockFormComponent, {static: false}) blockFormComponent: BlockFormComponent;\n  @ViewChildren(NavigationComponent) navigations: QueryList<NavigationComponent>;\n\n  iframeTarget: HTMLElement;\n  state = 'blocks';\n  selected: Selected | null;\n  selectedIndex: number;\n  selection: {[key: string]: Selected};\n  blocks: TopBlock[];\n  availableBlocks: Block[];\n  previewed: number | undefined;\n  isOpen = false;\n  originalOverflowY: string;\n  view: 'fullscreen' | 'desktop' | 'mobile' = 'desktop';\n  counter: UniqueId;\n  intro$: Observable<string>;\n  rightEmpty$: Observable<string>;\n\n  private compRefs: ComponentRef<BlockComponent>[];\n\n  get isFullscreen() {\n    return this.view === 'fullscreen';\n  }\n\n  get iFrame() {\n    return this.iframeEl.nativeElement as HTMLIFrameElement;\n  }\n\n  get iFrameDoc() {\n    return (this.iFrame.contentDocument || this.iFrame.contentWindow) as Document;\n  }\n\n  get module() {\n    return this.formCtx.module || 'pages';\n  }\n\n  get dataStore() {\n    if (!window.jpFbPb) {\n      window.jpFbPb = {};\n    }\n\n    if (!window.jpFbPb[this.module]) {\n      window.jpFbPb[this.module] = {};\n    }\n\n    return window.jpFbPb[this.module];\n  }\n\n  ngOnInit() {\n\n    this.counter = uniqueId();\n\n    let {blocks = [], control} = this.cData;\n\n    // @ts-ignore\n    const addedBlocks = STATE.blocks[this.module];\n\n    if (addedBlocks) {\n      blocks = [\n        ...blocks,\n        ...Object.entries(addedBlocks).map(([id, block]) => ({\n          id,\n          ...block\n        }))\n      ];\n    }\n\n    this.selection = blocks.reduce((acc, cur) => {\n      acc[cur.id] = cur;\n      return acc;\n    }, {});\n\n    this.availableBlocks = [...blocks];\n    this.blocks = control.value.map(it => {\n      const item = this.selection[it.type];\n      return {\n        id: this.counter.next(),\n        value: it.value,\n        type: it.type,\n        icon: item.icon,\n        label: item.label,\n        visible: true,\n        form: item.form,\n      } as TopBlock;\n    });\n\n    this.intro$ = this.transloco.langChanges$.pipe(\n      map(() => {\n        if (!this.cData.intro) {\n          return `<p><b>Page Builder</b><br>Create and edit contents of your web page.</p>`;\n        }\n\n        if (typeof this.cData.intro === 'string') {\n          return this.cData.intro;\n        } else {\n          return this.cData.intro[this.transloco.getActiveLang()];\n        }\n      })\n    );\n\n    this.rightEmpty$ = this.transloco.langChanges$.pipe(\n      map(() => {\n        if (!this.cData.rightSidebar?.emptyState) {\n          return `\n            <ul>\n              <li>Use the left sidebar to add additional segments.</li>\n              <li>You can delete and duplicate segments by right clicking on them in the sidebar.</li>\n              <li>Most content can be edited inline.</li>\n            </ul>\n          `;\n        }\n\n        const {emptyState} = this.cData.rightSidebar;\n\n        if (typeof emptyState === 'string') {\n          return emptyState;\n        } else {\n          return emptyState[this.transloco.getActiveLang()];\n        }\n      })\n    )\n\n    window.jpFb.assignOperation({\n      priority: 0,\n      cData: this.cData,\n      save: data => {\n\n        const sharedStyles: {[key: string]: string} = {};\n\n        set(\n          data.outputValue,\n          data.pointer,\n          this.blocks.map((block, index) => {\n\n            let compiled: string;\n\n            if (this.cData.saveCompiled) {\n\n              /**\n               * If the page builder hasn't been open this will be undefined.\n               */\n              if (!this.compRefs) {\n                this.open();\n              }\n\n              const el = this.compRefs[index].location.nativeElement;\n              const {firstChild} = el;\n\n              if (!sharedStyles[firstChild.localName]) {\n                sharedStyles[firstChild.localName] = this.compileBlockStyle(firstChild);\n              }\n\n              compiled = this.compileBlockHtml(firstChild, (this.cData.saveCompiled as CompileOptions)?.removeWrapper)\n            }\n\n            return {\n              value: block.value,\n              type: block.type,\n              ...compiled && {compiled}\n            }\n          })\n        );\n\n        const styles = Object.values(sharedStyles);\n\n        if (styles.length) {\n          set(\n            data.outputValue,\n            '/globalStyles',\n            styles.reduce((acc, value) => acc + value, '')\n          )\n        }\n\n        return of(true);\n      }\n    })\n  }\n\n  ngOnDestroy() {\n    if (window.jpFbPb?.[this.module]) {\n      delete window.jpFbPb[this.module];\n    }\n  }\n\n  dragStarted() {\n    (document.querySelector('.pb-preview-inner') as HTMLDivElement).style.transform = 'scale(0.7)';\n  }\n\n  dragStopped() {\n    (document.querySelector('.pb-preview-inner') as HTMLDivElement).style.transform = 'scale(1)';\n    this.blocks.forEach((_, i) => {\n      this.removeFocus(i);\n    });\n\n    this.blocks = this.compRefs.map(ref => {\n      const id = parseInt(ref.location.nativeElement.id.replace('block-', ''), 10);\n      return this.blocks.find(block => block.id === id);\n    });\n\n    this.preview();\n  }\n\n  openAdd() {\n    this.state = 'add';\n    this.cdr.markForCheck();\n  }\n\n  previewBlock(block: Block, index: number) {\n\n    if (this.previewed !== undefined) {\n      this.compRefs[this.compRefs.length - 1].destroy();\n      this.compRefs.splice(this.compRefs.length - 1, 1);\n    }\n\n    const value = block.hasOwnProperty('previewValue') ?\n      JSON.parse(JSON.stringify(block.previewValue)) :\n      {};\n\n    this.compRefs.push(\n      this.renderComponent(\n        {type: block.id, id: this.counter.next()},\n        value\n      )\n    );\n\n    this.focusBlock(this.compRefs.length - 1);\n\n    this.previewed = index;\n    this.cdr.markForCheck();\n  }\n\n  blockSelected(index: number) {\n    this.navigations.forEach((el, ind) => {\n      if (index !== ind) {\n        el.treeControl.collapseAll();\n      }\n    });\n  }\n\n  addBlock(block: Block) {\n    const topBlock = {\n      id: this.counter.next(),\n      /**\n       * Stringifying and parsing ensures we lose references.\n       * The value should always be parsable json so this shouldn't\n       * be a problem.\n       */\n      value: JSON.parse(JSON.stringify(block.duplicateValue || block.previewValue || {})),\n      type: block.id,\n      icon: block.icon,\n      label: block.label,\n      form: block.form,\n      visible: true\n    };\n\n    this.previewed = undefined;\n    this.blocks.push(topBlock);\n\n    this.state = '';\n    this.cdr.markForCheck();\n\n    const index = this.compRefs.length - 1;\n\n    this.bindSelect(this.compRefs[index], topBlock, index);\n\n    setTimeout(() => {\n      this.preview();\n\n      /**\n       * Scroll to the bottom of the sidebar\n       */\n      const listEl = document.querySelector('.pb-sidebar-list');\n      listEl.scrollTop = listEl.getBoundingClientRect().height;\n\n      /**\n       * Automatically activate the newly added block\n       */\n      setTimeout(() => {\n        (listEl.children[listEl.children.length - 1].querySelector('mat-tree-node') as any).click();\n      }, 100);\n    });\n  }\n\n  closeAdd() {\n    this.state = '';\n    if (this.previewed !== undefined) {\n      this.compRefs[this.compRefs.length - 1].destroy();\n      this.compRefs.splice(this.compRefs.length - 1, 1);\n    }\n\n    this.previewed = undefined;\n\n    this.cdr.markForCheck();\n  }\n\n  moveBlocks(event: CdkDragDrop<string[]> | any) {\n    this.swapElements(\n      this.compRefs[event.previousIndex].location.nativeElement,\n      this.compRefs[event.currentIndex].location.nativeElement\n    );\n\n    moveItemInArray(this.compRefs, event.previousIndex, event.currentIndex);\n\n    setTimeout(() => this.focusBlock(event.currentIndex), 200);\n  }\n\n  swapElements(previous, current) {\n    const parent = this.iframeTarget;\n\n    const after = current.nextElementSibling;\n    if (previous === after) {\n      parent.insertBefore(previous, current);\n    } else {\n      previous.replaceWith(current);\n      parent.insertBefore(previous, after);\n    }\n  }\n\n  removeBlock() {\n    this.selected = null;\n    this.state = '';\n    this.blocks.splice(this.selectedIndex, 1);\n    this.compRefs[this.selectedIndex].destroy();\n    this.compRefs.splice(this.selectedIndex, 1);\n    this.cdr.markForCheck();\n  }\n\n  toggleVisible(index: number) {\n\n    const el = this.compRefs[index].location.nativeElement;\n    const block = this.blocks[index];\n\n    if (block.visible || block.visible === undefined) {\n      el.style.display = 'none';\n      block.visible = false;\n    } else {\n      el.style.display = 'unset';\n      block.visible = true;\n    }\n  }\n\n  selectBlock(block: TopBlock, index: number, focus = true) {\n    this.selectedIndex = index;\n    this.selected = {\n      index,\n      ...this.selection[block.type],\n      id: block.id,\n      value: block.value,\n      form: block.form,\n      nested: block.nested,\n      label: block.name || this.selection[block.type]?.label || this.transloco.translate('fbPb.SEGMENT'),\n      icon: block.icon\n    };\n\n    this.cdr.markForCheck();\n    this.ctx.selectedBlock$.next(this.selectedIndex);\n\n    if (focus) {\n      this.focusBlock();\n      this.state = 'inner';\n      this.cdr.markForCheck();\n    }\n  }\n\n  focusBlock(index = this.selectedIndex) {\n    setTimeout(() => {\n      const activeBlock = this.compRefs[index]?.location.nativeElement;\n\n      if (!activeBlock) {\n        return;\n      }\n\n      this.compRefs[index].instance.selected = true;\n\n      if (index === 0) {\n        this.iFrameDoc.body.scrollTo({\n          behavior: 'smooth',\n          top: 0\n        });\n        return;\n      }\n\n      if (activeBlock) {\n        activeBlock.scrollIntoView({behavior: 'smooth', block: 'start'});\n      }\n    });\n  }\n\n  removeFocus(index = this.selectedIndex) {\n    const block = this.compRefs[index];\n    if (block) {\n      block.instance.selected = false;\n    }\n  }\n\n  optionsChanged(data: any) {\n    const selected = this.selected as Selected;\n\n    if (selected?.previewFormat) {\n      const format = safeEval(selected.previewFormat);\n\n      if (format) {\n        data = format(data, {\n          ds: this.domSanitizer\n        });\n      }\n    }\n\n    if (!this.blocks[this.selectedIndex]) {\n      return;\n    }\n\n    this.blocks[this.selectedIndex].value = data;\n    this.blocks[this.selectedIndex].value = {...this.blocks[this.selectedIndex].value};\n    this.dataStore[selected.id] = data || {};\n    this.compRefs[this.selectedIndex].instance.change();\n  }\n\n  closeBlock() {\n    if (!this.selected) {\n      return;\n    }\n\n    this.removeFocus(this.selectedIndex);\n    this.selected = null;\n    // @ts-ignore\n    this.selectedIndex = undefined;\n    this.state = '';\n    this.ctx.selectedBlock$.next(undefined);\n    this.cdr.markForCheck();\n  }\n\n  open() {\n\n    /**\n     * We need to reset the screen scroll to the top\n     * in order for the inline editors to work properly\n     */\n    window.scrollTo(0, 0);\n\n    this.isOpen = true;\n\n    registerBlocks(this.module, this.injector);\n\n    this.originalOverflowY = this.document.body.style.overflowY;\n    this.document.body.style.overflowY = 'hidden';\n\n    this.document.body.classList.add('page-builder-open');\n\n    this.cdr.detectChanges();\n\n    /**\n     * Set the iframe to standrs mode\n     */\n    const content = `<!DOCTYPE html><html><head></head><body></body></html>`;\n\n    this.iFrame.contentWindow.document.open('text/htmlreplace');\n    this.iFrame.contentWindow.document.write(content);\n    this.iFrame.contentWindow.document.close();\n\n    this.preview();\n\n    if (this.cData.styleUrls) {\n      const urls = typeof this.cData.styleUrls === 'string' ? [this.cData.styleUrls] : this.cData.styleUrls;\n\n      if (urls.length) {\n        urls.forEach(url => {\n          const lEl = document.createElement('link');\n          lEl.href = url;\n          lEl.rel = 'stylesheet';\n          lEl.type = 'text/css';\n          this.iFrameDoc.head.appendChild(lEl);\n        });\n      }\n    }\n\n    const inlineStyles = (this.cData.styles ? (typeof this.cData.styles === 'string' ? [this.cData.styles] : this.cData.styles) : []);\n\n    if (inlineStyles.length) {\n      inlineStyles.forEach(style => {\n        const el = document.createElement('style');\n        el.innerHTML = style;\n        this.iFrameDoc.head.appendChild(el);\n      })\n    }\n\n    this.domSharedStyleHost.addHost(this.iFrameDoc.head);\n  }\n\n  close() {\n    this.domSharedStyleHost.removeHost(this.iFrameDoc.head);\n    this.closeBlock();\n    this.cdr.markForCheck();\n\n    setTimeout(() => {\n      this.document.body.style.overflowY = this.originalOverflowY;\n      this.document.body.classList.remove('page-builder-open');\n\n      setTimeout(() => {\n        this.state = 'blocks';\n        this.isOpen = false;\n        this.selectedIndex = undefined;\n        this.cdr.markForCheck();\n      });\n    }, 100);\n  }\n\n  preview() {\n    if (this.vce.length) {\n      this.vce.clear();\n    }\n\n    if (this.cData.layout) {\n      this.iFrameDoc.body.innerHTML = this.cData.layout.content;\n      this.iframeTarget = this.iFrameDoc.querySelector(this.cData.layout.selector);\n    } else {\n      this.iframeTarget = this.iFrameDoc.body;\n    }\n\n    this.compRefs = this.blocks.map((block, index) => {\n      const ref = this.renderComponent(block, block.value);\n      this.bindSelect(ref, block, index);\n      return ref;\n    });\n\n    this.cdr.markForCheck();\n  }\n\n  isDisabled(block: Block) {\n    if (!block.maxInstances) {\n      return false;\n    }\n\n    return this.blocks.filter(it => it.type === block.id).length >= block.maxInstances;\n  }\n\n  private renderComponent(\n    block: {type: string; id: number;},\n    value: any\n  ) {\n\n    /**\n     * Define state\n     */\n    this.dataStore[block.id] = value || {};\n\n\n    /**\n     * Creating block component\n     */\n    const type = this.selection[block.type];\n    const element = document.createElement(block.type);\n\n    element.setAttribute('id', block.id.toString());\n    element.setAttribute('module', this.module);\n\n    const cmpRef = this.vce.createComponent(BlockComponent, {\n      projectableNodes: [[element]]\n    });\n\n    /**\n     * Assigning inputs\n     */\n    cmpRef.instance.id = `block-${block.id}`;\n    cmpRef.instance.module = this.module;\n    cmpRef.instance.styles = type.previewStyle ? [type.previewStyle] : [];\n\n    this.iframeTarget.appendChild(cmpRef.location.nativeElement);\n\n    return cmpRef;\n  }\n\n  private bindSelect(ref: ComponentRef<any>, block: TopBlock, index: number) {\n    this.renderer.listen(\n      ref.location.nativeElement,\n      'click',\n      () => {\n\n        if (this.selectedIndex !== undefined) {\n\n          /**\n           * Prevent clicking on the same element from impacting anything\n           */\n          if (\n            this.compRefs[this.selectedIndex].location.nativeElement === ref.location.nativeElement\n            && !this.selected.form.segments.length\n          ) {\n            this.ctx.selectedBlock$.next(this.selectedIndex);\n            return;\n          }\n\n          this.closeBlock();\n        }\n\n        this.cdr.markForCheck();\n        setTimeout(() => {\n          this.cdr.markForCheck();\n          this.selectBlock({\n            ...block,\n            form: {\n              ...block.form,\n              segments: []\n            }\n          }, index);\n          this.cdr.markForCheck();\n        }, 50);\n      }\n    );\n  }\n\n  private compileBlockStyle(component) {\n    const selector = component.localName;\n    const {styles} = component._ngElementStrategy.componentFactory.componentDef;\n\n    return styles.reduce((acc, style) =>\n      acc + style\n        .replace(/\\[_nghost-%COMP%\\]/g, selector)\n        .replace(/(\\[_ngcontent-%COMP%\\])|[\\n]|(\\/\\*.*?\\*\\/)/g, ''),\n    '');\n  }\n\n  private compileBlockHtml(component, removeWrapper: boolean) {\n    return (removeWrapper ? component.innerHTML : component.outerHTML)\n      .replace(/(\\x3C!--bindings={(\\n|.)*?}-->)|(_nghost.*?\"\")|(ng-version=\".*?\")|(_ngcontent.*?\"\")|(ng-reflect-entry-options=\"\\[object Object\\]\")|(ng-star-inserted)|(contenteditable=\".*?\")|(spellcheck=\"false\")|(data-mce-style=\".*?\")|(data-mce-bogus=\".*?\")|(id=\"mce_*.?\")|(mce-content-body)/g, '');\n  }\n}\n","<section class=\"pb\">\n  <article class=\"pb-intro\">\n    <div [innerHTML]=\"intro$ | async | jpSanitize\"></div>\n    <button mat-stroked-button (click)=\"open()\">{{'fbPb.START' | transloco}}</button>\n  </article>\n\n  <ng-container *ngIf=\"isOpen\">\n    <aside class=\"pb-sidebar\" [class.fullscreen]=\"isFullscreen\">\n      <ng-container *ngIf=\"blocks.length\">\n        <ul class=\"pb-sidebar-list\" cdkDropList (cdkDropListSorted)=\"moveBlocks($event)\" (cdkDropListDropped)=\"dragStopped()\">\n          <li\n            class=\"pb-sidebar-list-item\"\n            *ngFor=\"let block of blocks; index as index\"\n            cdkDrag\n            cdkDragBoundary=\".pb-sidebar-list\"\n            cdkDragLockAxis=\"y\"\n            [id]=\"block.id\"\n            (cdkDragStarted)=\"dragStarted()\">\n            <fb-pb-navigation\n              class=\"w-full\"\n              [block]=\"block\"\n              [value]=\"block.value\"\n              [index]=\"index\"\n              [selectBlock]=\"selectBlock.bind(this)\"\n              [closeBlock]=\"closeBlock.bind(this)\"\n              [removeBlock]=\"removeBlock.bind(this)\"\n              [addBlock]=\"addBlock.bind(this)\"\n              [preview]=\"preview.bind(this)\"\n              (blockSelected)=\"blockSelected($event)\"\n              (optionsChanged)=\"optionsChanged($event)\">\n            </fb-pb-navigation>\n            <button class=\"pb-sidebar-list-item-visibility\" mat-icon-button (click)=\"toggleVisible(index)\">\n              <mat-icon>{{block.visible ? 'visibility' : 'visibility_off'}}</mat-icon>\n            </button>\n            <mat-icon class=\"pb-sidebar-list-item-drag\" cdkDragHandle>drag_indicator</mat-icon>\n          </li>\n        </ul>\n      </ng-container>\n\n      <button class=\"pb-sidebar-new\" (click)=\"openAdd()\" matRipple>\n        <mat-icon class=\"pb-sidebar-new-icon\">add</mat-icon>\n        <span class=\"pb-sidebar-new-label\">{{'fbPb.OPEN_ADD' | transloco}}</span>\n      </button>\n\n      <article class=\"pb-sidebar-add\" *ngIf=\"state === 'add'\">\n        <div class=\"pb-sidebar-add-title\">\n          <span>{{'fbPb.OPEN_ADD' | transloco}}</span>\n          <button mat-icon-button (click)=\"closeAdd()\">\n            <mat-icon>close</mat-icon>\n          </button>\n        </div>\n\n        <div class=\"pb-sidebar-add-blocks\">\n          <div\n            class=\"pb-sidebar-add-block\"\n            matRipple\n            *ngFor=\"let block of availableBlocks; index as index\"\n            [class.b-dis]=\"isDisabled(block)\"\n            (click)=\"previewBlock(block, index)\">\n            {{block.label | transloco}}\n            <button *ngIf=\"previewed === index\" mat-button (jpStopPropagation)=\"addBlock(block)\">\n              {{'fbPb.ADD' | transloco}}\n            </button>\n            </div>\n        </div>\n      </article>\n\n    </aside>\n\n    <header class=\"pb-header\" [class.fullscreen]=\"isFullscreen\">\n      <span class=\"pb-header-space\"></span>\n\n      <mat-button-toggle-group [(value)]=\"view\">\n        <mat-button-toggle value=\"mobile\" aria-label=\"Phone view\">\n          <mat-icon>smartphone</mat-icon>\n        </mat-button-toggle>\n        <mat-button-toggle value=\"desktop\" aria-label=\"Desktop view\">\n          <mat-icon>desktop_windows</mat-icon>\n        </mat-button-toggle>\n        <mat-button-toggle value=\"fullscreen\" aria-label=\"Fullscreen\">\n          <mat-icon>fullscreen</mat-icon>\n        </mat-button-toggle>\n      </mat-button-toggle-group>\n\n      <button mat-stroked-button (click)=\"close()\">{{'fbPb.CLOSE' | transloco}}</button>\n    </header>\n\n    <main class=\"pb-preview\" [class.fullscreen]=\"isFullscreen\">\n      <div class=\"pb-preview-inner\" [ngClass]=\"view\">\n        <ng-container #ipe></ng-container>\n        <iframe id=\"fb-pb-iframe\" #iframe></iframe>\n      </div>\n    </main>\n\n    <aside class=\"pb-right-sidebar\" [class.fullscreen]=\"isFullscreen\">\n      <article class=\"pb-sidebar-inner\">\n\n        <ng-container *ngIf=\"selected; else emptyRight\">\n          <header>\n            <mat-icon>{{selected.icon || 'tab'}}</mat-icon>\n            <span class=\"m-l-s\">{{selected?.label | transloco}}</span>\n          </header>\n\n          <main>\n            <fb-pb-block-form\n              [selected]=\"selected\"\n              [parentFormId]=\"cData.formId\"\n              (remove)=\"removeBlock()\"\n              (optionsChanged)=\"optionsChanged($event)\">\n            </fb-pb-block-form>\n          </main>\n        </ng-container>\n\n        <ng-template #emptyRight>\n          <div class=\"empty-state\" [innerHTML]=\"rightEmpty$ | async | jpSanitize\"></div>\n        </ng-template>\n      </article>\n    </aside>\n  </ng-container>\n</section>\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {UniqueId, uniqueId} from './utils/unique-id';\n\nexport interface Toolbar {\n  id: number;\n  el: HTMLDivElement;\n  visible: boolean;\n  elements: {\n    typeSelect?: HTMLSelectElement;\n    b?: HTMLButtonElement;\n    i?: HTMLButtonElement;\n    u?: HTMLButtonElement;\n    left?: HTMLButtonElement;\n    center?: HTMLButtonElement;\n    justify?: HTMLButtonElement;\n    right?: HTMLButtonElement;\n    remove?: HTMLButtonElement;\n    link?: HTMLButtonElement;\n    linkDialog: HTMLDivElement;\n    linkSubmit?: HTMLButtonElement;\n    linkInput?: HTMLInputElement;\n    color?: HTMLButtonElement;\n    colorPicker?: HTMLInputElement;\n  };\n}\n\n@Injectable()\nexport class ToolbarService {\n  constructor() {\n    this.uniqueId = uniqueId();\n  }\n\n  uniqueId: UniqueId;\n  private _scroll$: Observable<number>;\n\n  get parentEl() {\n    return document.body;\n  }\n\n  get iframeEl() {\n    return document.getElementById('fb-pb-iframe') as HTMLIFrameElement;\n  }\n}\n","import {DragDropModule} from '@angular/cdk/drag-drop';\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatRippleModule} from '@angular/material/core';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatTreeModule} from '@angular/material/tree';\nimport {FormBuilderContextService, FormBuilderModule} from '@jaspero/form-builder';\nimport {SanitizeModule, StopPropagationModule} from '@jaspero/ng-helpers';\nimport {TRANSLOCO_SCOPE, TranslocoModule} from '@jsverse/transloco';\nimport {BlockFormComponent} from './block-form/block-form.component';\nimport {BlockComponent} from './block/block.component';\nimport {MbpComponent} from './fields/mbp/mbp.component';\nimport {NavigationComponent} from './navigation/navigation.component';\nimport {PageBuilderCtxService} from './page-builder-ctx.service';\nimport {PageBuilderComponent} from './page-builder/page-builder.component';\nimport {ToolbarService} from './toolbar.service';\n\n@NgModule({\n  declarations: [\n    PageBuilderComponent,\n    BlockFormComponent,\n    NavigationComponent,\n    BlockComponent,\n    MbpComponent\n  ],\n  imports: [\n    CommonModule,\n    FormBuilderModule,\n    ReactiveFormsModule,\n\n    MatButtonModule,\n    MatDialogModule,\n    MatRippleModule,\n    MatButtonToggleModule,\n    MatIconModule,\n    DragDropModule,\n    MatTreeModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    MatIconModule,\n    MatTooltipModule,\n    MatInputModule,\n    MatChipsModule,\n    MatCheckboxModule,\n\n    StopPropagationModule,\n    SanitizeModule,\n    ObserversModule,\n\n    TranslocoModule\n  ],\n  providers: [\n    ToolbarService,\n    PageBuilderCtxService,\n    {\n      provide: TRANSLOCO_SCOPE,\n      useValue: 'fb-pb'\n    }\n  ]\n})\nexport class PageBuilderModule {\n  constructor(\n    private ctx: FormBuilderContextService\n  ) {\n    [\n      ['blocks', PageBuilderComponent],\n      ['block', BlockFormComponent],\n      ['mbp', MbpComponent]\n    ]\n      .forEach(([key, component]) =>\n        this.ctx.registerField('pb-' + key, component)\n      )\n  }\n}\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\nimport {UntypedFormBuilder, UntypedFormGroup} from '@angular/forms';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\n\n@Component({\n  selector: 'fb-pb-image-dialog',\n  templateUrl: './image-dialog.component.html',\n  styleUrls: ['./image-dialog.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageDialogComponent implements OnInit {\n  constructor(\n    private fb: UntypedFormBuilder,\n    @Inject(MAT_DIALOG_DATA)\n    private url: string\n  ) { }\n\n  form: UntypedFormGroup;\n\n  ngOnInit() {\n    this.form = this.fb.group({\n      url: this.url || ''\n    })\n  }\n}\n","<h2 mat-dialog-title>Edit Image</h2>\n\n<form [formGroup]=\"form\">\n  <mat-dialog-content>\n    <mat-form-field>\n      <mat-label>URL</mat-label>\n      <input type=\"url\" matInput formControlName=\"url\" />\n    </mat-form-field>\n  </mat-dialog-content>\n\n  <mat-dialog-actions>\n    <button mat-button matDialogClose type=\"button\">Close</button>\n    &nbsp;\n    <button mat-button type=\"submit\" color=\"primary\" [matDialogClose]=\"form.getRawValue()\">Save</button>\n  </mat-dialog-actions>\n</form>\n","import {Renderer2} from '@angular/core';\nimport {fromEventPattern} from 'rxjs';\n\nexport function domListener(\n  renderer: Renderer2,\n  target: HTMLElement,\n  event: string\n) {\n\n  let removeListener: () => void;\n\n  const createListener = (\n    handler: (e: Event) => boolean | void\n  ) => {\n    removeListener = renderer.listen(target, event, handler);\n  };\n\n  return fromEventPattern<Event>(createListener, () =>\n    removeListener()\n  );\n}\n","import {GlobalState} from '@jaspero/form-builder';\n\ndeclare const window: Window & {jpFb: GlobalState};\n\n/**\n * TODO:\n * Array updating isn't recursive at the moment\n * and only supports one level of nesting\n */\nexport function getControl(\n  id: string,\n  index: number,\n  pointer: string,\n  array?: string,\n  arrayIndex?: number\n) {\n\n  const key = [id, 'blocks', index].join('-');\n  const parser = window.jpFb.parsers[key];\n\n  let pointers;\n\n  if (parser) {\n    pointers = parser.pointers;\n  } else {\n    pointers = window.jpFb.parsers[id].pointers;\n  }\n\n  if (array) {\n    pointers = pointers[array].arrayPointers[arrayIndex];\n  }\n\n  return pointers[pointer].control;\n}\n","import {AfterViewInit, Directive, ElementRef, Input, Renderer2, Optional} from '@angular/core';\nimport {MatDialog} from '@angular/material/dialog';\nimport {Parser} from '@jaspero/form-builder';\nimport {UntilDestroy, untilDestroyed} from '@ngneat/until-destroy';\nimport {merge} from 'rxjs';\nimport {filter, switchMap, tap} from 'rxjs/operators';\nimport {PageBuilderCtxService} from '../../page-builder-ctx.service';\nimport {domListener} from '../../utils/dom-listener';\nimport {getControl} from '../../utils/get-control';\nimport {ImageDialogComponent} from '../components/image-dialog/image-dialog.component';\nimport {ToolbarService} from '../../toolbar.service';\n\ninterface Options {\n  formId?: string;\n  array?: string;\n  index?: number;\n  pointer: string;\n  position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n  customElements?: string[];\n  remove?: boolean;\n}\n\n@UntilDestroy()\n@Directive({selector: '[fbPbImageIE]'})\nexport class ImageIEDirective implements AfterViewInit {\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2,\n    private dialog: MatDialog,\n    @Optional()\n    private toolbarService: ToolbarService,\n    @Optional()\n    private ctx: PageBuilderCtxService\n  ) { }\n\n  @Input('fbPbImageIE')\n  entryOptions: Partial<Options>;\n  defaultOptions: Partial<Options> = {position: 'top-right', remove: true};\n  id: string;\n  pointer: string;\n  options: Options;\n  toolbar: HTMLDivElement;\n  triggerEl: HTMLButtonElement;\n  removeEl: HTMLButtonElement;\n\n  isHoovered: boolean;\n  isActive: boolean;\n\n  get htmlEl() {\n    return this.el.nativeElement;\n  }\n\n  get host() {\n    return this.htmlEl.closest('fb-pb-block');\n  }\n\n  get index() {\n    return [...this.host.parentElement.children].indexOf(this.host);\n  }\n\n  get control() {\n    return getControl(\n      this.id,\n      this.index,\n      this.pointer,\n      this.options.array,\n      this.options.index\n    )\n  }\n\n  ngAfterViewInit() {\n    if (!this.toolbarService) {\n      return;\n    }\n\n    this.options = {\n      ...this.defaultOptions,\n      ...this.entryOptions\n    } as Options;\n\n    this.id = this.options.formId || 'jp-fb-main';\n    this.pointer = Parser.standardizeKeyWithSlash(this.options.pointer);\n\n    if (this.options.array) {\n      this.pointer = this.options.array + this.pointer;\n    }\n\n    this.buildToolbar();\n\n    this.renderer.setStyle(\n      this.htmlEl,\n      'position',\n      'relative'\n    );\n\n    merge(\n      domListener(\n        this.renderer,\n        this.htmlEl,\n        'mouseenter'\n      )\n        .pipe(\n          tap(() => {\n            if (this.isActive) {\n              this.toolbar.style.opacity = '1';\n            }\n            this.isHoovered = true;\n          })\n        ),\n      domListener(\n        this.renderer,\n        this.htmlEl,\n        'mouseleave'\n      )\n        .pipe(\n          tap(() => {\n            if (this.isActive) {\n              this.toolbar.style.opacity = '0';\n            }\n            this.isHoovered = false;\n          })\n        )\n    )\n      .pipe(\n        untilDestroyed(this)\n      )\n      .subscribe();\n\n    this.ctx.selectedBlock$\n      .pipe(\n        filter(index => {\n          this.isActive = this.index === index;\n\n          if (!this.isActive) {\n            this.toolbar.style.opacity = '0';\n          } else if (this.isHoovered) {\n            this.toolbar.style.opacity = '1';\n          }\n\n          return this.isActive;\n        }),\n        switchMap(() =>\n          merge(\n            domListener(\n              this.renderer,\n              this.triggerEl,\n              'click'\n            )\n              .pipe(\n                tap(() => {\n                  this.dialog.open(\n                    ImageDialogComponent,\n                    {\n                      width: '500px',\n                      data: this.control.value\n                    }\n                  )\n                    .afterClosed()\n                    .pipe(\n                      filter(it => it)\n                    )\n                    .subscribe(({url}) => {\n                      this.update(url);\n                      this.htmlEl.querySelector('img').src = url;\n                    })\n                })\n              ),\n            domListener(\n              this.renderer,\n              this.removeEl,\n              'click',\n            )\n              .pipe(\n                tap(() => {\n                  this.update('');\n                  this.htmlEl.parentElement.removeChild(this.htmlEl);\n                })\n              )\n          )\n        ),\n        untilDestroyed(this)\n      )\n      .subscribe()\n  }\n\n  private buildToolbar() {\n    this.toolbar = document.createElement('div');\n\n    this.toolbar.style.position = 'absolute';\n    this.toolbar.style.zIndex = '1000';\n    this.toolbar.style.height = '40px';\n    this.toolbar.style.padding = '5px';\n    this.toolbar.style.margin = '5px';\n    this.toolbar.style.translate = '.2s';\n    this.toolbar.style.display = 'flex';\n    this.toolbar.style.opacity = '0';\n    this.toolbar.style.background = '#fff';\n    this.toolbar.style.borderRadius = '4px';\n\n    this.options.position.split('-')\n      .forEach(it => {\n        this.toolbar.style[it] = 0;\n      });\n\n    const drawButton = (icon: string, color = '#000') => {\n      const buttonEl = document.createElement('button');\n      const svgEl = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n      buttonEl.style.width = '40px';\n      buttonEl.style.height = '40px';\n      buttonEl.style.display = 'flex';\n      buttonEl.style.justifyContent = 'center';\n      buttonEl.style.alignItems = 'center';\n      buttonEl.style.cursor = 'pointer';\n      buttonEl.style.background = 'none';\n      buttonEl.style.border = 'none';\n\n      svgEl.setAttribute('viewBox', '0 0 24 24');\n      svgEl.setAttribute('fill', color);\n      svgEl.setAttribute('height', '24px');\n      svgEl.setAttribute('width', '24px');\n\n      svgEl.innerHTML = icon;\n      svgEl.style.pointerEvents = 'none';\n\n      buttonEl.appendChild(svgEl);\n\n      return buttonEl;\n    }\n\n    this.triggerEl = drawButton(\n      `<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M14.06 9.02l.92.92L5.92 19H5v-.92l9.06-9.06M17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z\"/>`\n    );\n\n    if (this.options.remove) {\n      this.removeEl = drawButton(\n        `<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M16 9v10H8V9h8m-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7z\"/>`,\n        '#f44336'\n      );\n\n      this.toolbar.appendChild(this.removeEl);\n    }\n\n    this.toolbar.appendChild(this.triggerEl);\n\n    if (this.options.customElements) {\n      this.options.customElements.forEach(el => {\n        this.toolbar.innerHTML += el;\n      })\n    }\n\n    this.htmlEl.appendChild(this.toolbar);\n  }\n\n  update(value: string, onlySelf = false) {\n    this.control.setValue(value, {onlySelf});\n  }\n}\n","import {Observable, shareReplay} from 'rxjs';\r\n\r\nlet instance: {\r\n\tiframe: HTMLIFrameElement;\r\n\tinst$: Observable<{\r\n\t\tinit: (options: any) => Promise<void>\r\n\t}>\r\n};\r\n\r\nexport function tinyInstance(iframe: HTMLIFrameElement) {\r\n\tif (instance && instance.iframe === iframe) {\r\n\t\treturn instance.inst$;\r\n\t}\r\n\r\n\tinstance = {\r\n\t\tiframe,\r\n\t\tinst$: new Observable(obs => {\r\n\t\t\tconst sc = iframe.contentDocument.createElement('script');\r\n    \r\n\t\t\t/**\r\n\t\t\t * TODO: \r\n\t\t\t * Maybe allow for specifiying the path\r\n\t\t\t */\r\n\t\t\tsc.src = '/tinymce.min.js';\r\n\r\n\t\t\tsc.onload = () => {\r\n\t\t\t\tobs.next(iframe.contentWindow['tinymce']);\r\n\t\t\t\tobs.complete();\r\n\t\t\t};\r\n\r\n\t\t\tiframe.contentDocument.head.appendChild(sc);\r\n\t\t})\r\n\t\t\t.pipe(\r\n\t\t\t\tshareReplay(1)\r\n\t\t\t) as any\r\n\t}\r\n\r\n\treturn instance.inst$;\r\n}","import {Component, ElementRef, Input, NgZone, OnDestroy, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {FormBuilderContextService, Parser} from '@jaspero/form-builder';\nimport {UntilDestroy} from '@ngneat/until-destroy';\nimport {Toolbar, ToolbarService} from '../../toolbar.service';\nimport {getControl} from '../../utils/get-control';\nimport {tinyInstance} from '../tinymce-obs';\n\ninterface Options {\n  formId?: string;\n  array?: string;\n  index?: number;\n  pointer: string;\n  toolbar?: string[];\n}\n\n@UntilDestroy()\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: '[fbPbSingleLineIE]',\n  template: '',\n  styleUrls: ['./toolbar.scss'],\n  encapsulation: ViewEncapsulation.None\n})\n// tslint:disable-next-line:component-class-suffix\nexport class SingleLineIEDirective implements OnInit, OnDestroy {\n  constructor(\n    private el: ElementRef,\n    @Optional()\n    private toolbarService: ToolbarService,\n    @Optional()\n    private formCtx: FormBuilderContextService,\n    private zone: NgZone\n  ) {\n  }\n\n  @Input('fbPbSingleLineIE')\n  entryOptions: Options;\n  defaultOptions = {\n    toolbar: [\n      'undo redo | bold italic underline | formatselect | link',\n      'forecolor backcolor emoticons | alignleft aligncenter alignright alignfull | numlist bullist outdent indent'\n    ]\n  };\n  lastTarget: HTMLElement;\n  options: Options;\n  toolbar: Toolbar;\n  id: string;\n  pointer: string;\n  activeCls = 'pb-t-active';\n\n  get htmlEl() {\n    return this.el.nativeElement;\n  }\n\n  get iFrame() {\n    return (document.querySelector('#fb-pb-iframe') as HTMLIFrameElement);\n  }\n\n  get host() {\n    return this.htmlEl.closest('fb-pb-block');\n  }\n\n  get index() {\n    if (!this.host) {\n      return 0;\n    }\n    \n    return [...this.host.parentElement?.children || []].indexOf(this.host);\n  }\n\n  get control() {\n    return getControl(\n      this.id,\n      this.index,\n      this.pointer,\n      this.options.array,\n      this.options.index\n    );\n  }\n\n  _editor: any;\n  _tiny: any;\n\n  ngOnInit() {\n    if (!this.toolbarService) {\n      return;\n    }\n\n    this.options = {\n      ...this.defaultOptions,\n      ...this.entryOptions\n    };\n\n    this.id = this.options.formId || this.formCtx.module || 'jp-fb-main';\n    this.pointer = Parser.standardizeKeyWithSlash(this.options.pointer);\n\n    if (this.options.array) {\n      this.pointer = this.options.array + this.pointer;\n    }\n\n    tinyInstance(this.iFrame)\n      .subscribe(value => {\n\n        this._tiny = value;\n\n        return  value.init({\n          target: this.htmlEl,\n          menubar: false,\n          inline: true,\n          paste_as_text: true,\n          plugins: [\n            'link',\n            'lists',\n            'autolink',\n            'emoticons'\n          ],\n          toolbar: this.options.toolbar,\n          setup: (editor: any) => {\n\n            this._editor = editor;\n\n            editor.on('blur', () => {\n              this.zone.run(() =>\n                this.control.setValue(editor.getContent())\n              )\n            });\n          }\n        })\n          .catch()\n      });\n  }\n\n  ngOnDestroy() {\n    if (this._tiny && this._editor) {\n      try {\n        this._tiny.remove(this._editor);\n      } catch {}\n    }\n  }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {ImageDialogComponent} from './components/image-dialog/image-dialog.component';\nimport {ImageIEDirective} from './directives/image-ie.directive';\nimport {SingleLineIEDirective} from './directives/single-line-ie.directive';\n\nconst DIRECTIVES = [\n  SingleLineIEDirective,\n  ImageIEDirective\n];\n\n@NgModule({\n  declarations: [\n    ImageDialogComponent,\n\n    ...DIRECTIVES,\n  ],\n  exports: [\n    ...DIRECTIVES\n  ],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n\n    MatDialogModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatButtonModule\n  ]\n})\nexport class InlineEditorModule { }\n","export interface BackgroundData {\n  background?: string;\n  backgroundSize?: string;\n  backgroundRepeat?: boolean;\n  backgroundPosition?: string;\n}\n\nexport interface BoxSides<T = {\n  unit: string;\n  size: number;\n}> {\n  top: T;\n  right: T;\n  bottom: T;\n  left: T;\n}\n\nexport interface BoxData {\n  margin?: BoxSides;\n  border?: BoxSides<{\n    unit: string;\n    size: number;\n    radiusLeft: number;\n    radiusRight: number;\n    style: string;\n    color: string;\n  }>;\n  padding?: BoxSides\n}\n\nexport function backgroundStyle(data: BackgroundData) {\n  const styles: {[key: string]: string} = {};\n\n  if (data.background) {\n    if (data.background.startsWith('http')) {\n\n      if (data.backgroundSize) {\n        styles['background-size'] = data.backgroundSize;\n      }\n\n      if (data.backgroundPosition) {\n        styles['background-position'] = data.backgroundPosition;\n      }\n\n      if (!data.backgroundRepeat) {\n        styles['background-repeat'] = 'no-repeat';\n      }\n\n      styles['background-image'] = `url(\"${data.background}\")`;\n    } else {\n      styles.background = data.background;\n    }\n  }\n\n  return styles;\n}\n\nexport function boxStyle(data: BoxData = {}) {\n  const styles: {[key: string]: string} = {};\n  const borderStyles: {[key: string]: string} = {};\n  const sides = [\n    'top',\n    'right',\n    'bottom',\n    'left'\n  ];\n\n  [\n    'margin',\n    'padding'\n  ]\n    .forEach(key => {\n      if (!data[key]) {\n        return;\n      }\n\n      const [top, right, bottom, left] = sides.map(side => {\n        if (!data[key][side]) {\n          return '0px';\n        }\n\n        const {size, unit} = data[key][side];\n\n        return [size || 0, unit || 'px'].join('');\n      });\n\n      let final = '';\n\n      if (top === right && top === bottom && top === left) {\n        final = top;\n      } else if (top === bottom && right === left) {\n        final = [top, right].join(' ');\n      } else {\n        final = [top, right, bottom, left].join(' ');\n      }\n\n      styles[key] = final;\n    });\n\n  if (data.border) {\n    const [top, right, bottom, left] = sides\n      .map(side => {\n        if (!data.border[side] || !data.border[side].size) {\n          return '';\n        }\n\n        const {size, unit, style, color} = data.border[side];\n\n        return [\n          [size || 0, unit || 'px'].join(''),\n          style || 'solid',\n          color || 'black'\n        ]\n          .join(' ');\n      });\n\n    if (top === right && top === bottom && top === left) {\n      if (top) {\n        borderStyles.border = top;\n      }\n    } else {\n      if (top) {\n        borderStyles['border-top'] = top;\n      }\n\n      if (right) {\n        borderStyles['border-right'] = right;\n      }\n\n      if (bottom) {\n        borderStyles['border-bottom'] = bottom;\n      }\n\n      if (left) {\n        borderStyles['border-left'] = left;\n      }\n    }\n\n    const [topRightRadius, topLeftRadius, bottomRightRadius, bottomLeftRadius] = ['top', 'bottom']\n      .reduce((acc: string[], side) => {\n\n        ['Right', 'Left'].forEach(s => {\n          if (!data.border[side] || !data.border[side]['radius' + s]) {\n            acc.push('');\n            return;\n          }\n\n          acc.push(\n            [data.border[side]['radius' + s], data.border[side].unit || 'px']\n              .join('')\n          )\n        });\n\n        return acc;\n      }, []);\n\n    if (topRightRadius === topLeftRadius && topRightRadius === bottomRightRadius && topRightRadius === bottomLeftRadius) {\n      if (topRightRadius) {\n        borderStyles['border-radius'] = topRightRadius;\n      }\n    } else {\n      if (topRightRadius) {\n        borderStyles['border-top-right-radius'] = topRightRadius;\n      }\n\n      if (topLeftRadius) {\n        borderStyles['border-top-left-radius'] = topLeftRadius;\n      }\n\n      if (bottomRightRadius) {\n        borderStyles['border-bottom-right-radius'] = bottomRightRadius;\n      }\n\n      if (bottomLeftRadius) {\n        borderStyles['border-bottom-left-radius'] = bottomLeftRadius;\n      }\n    }\n  }\n\n  return {\n    ...styles,\n    ...borderStyles\n  };\n}\n\nexport function blockStyle(\n  data: {\n    box?: BoxData;\n  } & BackgroundData\n) {\n  const styles: {[key: string]: string} = {\n    ...backgroundStyle(data),\n    ...boxStyle(data.box)\n  };\n\n  let final = '';\n\n  // tslint:disable-next-line:forin\n  for (const key in styles) {\n    final += `${key}:${styles[key]};`;\n  }\n\n  return final;\n}\n","import {ChangeDetectorRef, Component, ElementRef, HostBinding, Input} from '@angular/core';\nimport {BackgroundData, blockStyle, BoxData} from './utils/block-style';\n\nexport interface BlockDataOptions extends BackgroundData {\n  additionalStyle?: string;\n  box?: BoxData;\n}\n\n@Component({template: ''})\nexport class BlockData<Options extends BlockDataOptions = any> {\n  constructor(\n    public cdr: ChangeDetectorRef,\n    public el: ElementRef\n  ) {}\n\n  @Input() id: string;\n  @Input() module: string;\n  @Input() set change(data: any) {\n    this.triggerChange();\n    this.cdr.markForCheck();\n  }\n\n  styleEl: HTMLStyleElement;\n  additionalStyle: string;\n\n  get data() {\n    return {} as Options;\n  }\n\n  get addedClasses() {\n    return [];\n  }\n\n  @HostBinding('class')\n  get classes() {\n    return [\n      'block',\n      ...this.addedClasses\n    ];\n  }\n\n  @HostBinding('style')\n  get style() {\n    return blockStyle(this.data);\n  }\n\n  triggerChange() {\n\n    const additionalStyle = this.data.additionalStyle;\n\n    if (\n      this.styleEl &&\n      (!additionalStyle || (this.additionalStyle !== additionalStyle))\n    ) {\n      this.additionalStyle = '';\n      this.el.nativeElement.removeChild(this.styleEl);\n    }\n\n    if (additionalStyle) {\n      this.styleEl = document.createElement('style');\n      this.additionalStyle = additionalStyle;\n      this.styleEl.innerHTML = this.additionalStyle;\n      this.el.nativeElement.appendChild(this.styleEl);\n    }\n  }\n}\n","import {DefinitionWithConfiguration} from '@jaspero/form-builder';\r\n// import {BackgroundConfiguration} from './fields/background/background.component';\r\nimport {MbpConfiguration} from './fields/mbp/mbp.component';\r\nimport {BlocksConfiguration} from './page-builder/page-builder.component';\r\n\r\nexport type FieldDefinitions<Prefix extends string = 'pb-'> =\r\n  DefinitionWithConfiguration<BlocksConfiguration, Prefix, 'blocks'> |\r\n  DefinitionWithConfiguration<MbpConfiguration, Prefix, 'mbp'>\r\n  // DefinitionWithConfiguration<BackgroundConfiguration, Prefix, 'background'>\r\n","import {Directive, ElementRef, Input, Optional, Renderer2} from '@angular/core';\r\nimport {OnChange} from '@jaspero/ng-helpers';\r\nimport {ToolbarService} from '../toolbar.service';\r\n\r\n@Directive({selector: 'img[imgPreview]'})\r\nexport class ImgPreviewDirective {\r\n  constructor(\r\n    private renderer: Renderer2,\r\n    private el: ElementRef,\r\n    @Optional()\r\n    private toolbarService: ToolbarService,\r\n  ) {\r\n\r\n    if (!this.toolbarService) {\r\n      return;\r\n    }\r\n\r\n    this.reader = new FileReader();\r\n    this.reader.onload = () =>\r\n      this.setSrc(this.reader.result as string)\r\n  }\r\n\r\n  @OnChange(function(value) {\r\n    if (value instanceof File) {\r\n      this.reader.readAsDataURL(value);\r\n    } else {\r\n      this.setSrc(value);\r\n    }\r\n  })\r\n  @Input('imgPreview')\r\n  url: string | File;\r\n\r\n  reader: FileReader;\r\n\r\n  setSrc(src: string) {\r\n    this.renderer.setAttribute(this.el.nativeElement, 'src', src);\r\n  }\r\n}\r\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ImgPreviewDirective} from './img-preview.directive';\n\n@NgModule({\n  declarations: [ImgPreviewDirective],\n  exports: [ImgPreviewDirective],\n  imports: [\n    CommonModule\n  ]\n})\nexport class ImgPreviewModule { }\n","import {ɵNG_COMP_DEF} from '@angular/core';\nimport {Definitions, Segment} from '@jaspero/form-builder';\nimport {JSONSchema7} from 'json-schema';\nimport {STATE} from '../state.const';\n\nexport interface BlockSegment extends Segment {\n  icon?: string;\n}\n\nexport interface BlockOptions {\n  /**\n   * Defulats to selector\n   */\n  id?: string;\n  /**\n   * Defaults to 'pages'\n   */\n  module?: string | string[];\n  /**\n   * Defaults to component name\n   */\n  label?: string;\n  icon?: string;\n  previewValue?: any;\n  form?: {\n    segments?: BlockSegment[];\n    schema: JSONSchema7;\n    definitions?: Definitions;\n  }\n}\n\nexport function Block(options: BlockOptions): ClassDecorator {\n  return (type: any) => {\n\n    if (!STATE.renderMode) {\n      Object.defineProperty(type.prototype, 'data', {\n        get: function() {\n          return ((window.jpFbPb || {})[this.module] || {})[this.id] || {};\n        }\n      });\n    }\n\n    const componentDef = type[ɵNG_COMP_DEF];\n\n    if (componentDef === undefined) {\n      throw new Error('Ivy is not enabled.');\n    }\n\n    const {name} = componentDef.type;\n    const selector = options.id || componentDef.selectors[0][0];\n\n    const label = name.replace('Component', '').split(/(?=[A-Z])/);\n    const module = options.module || 'pages';\n\n    if (!options.form) {\n      options.form = {\n        segments: [],\n        schema: {\n          properties: {\n            id: {type: 'string'}\n          }\n        },\n        definitions: {}\n      };\n    }\n\n    function assignBlock(m: string) {\n      if (!STATE.blocks[m]) {\n        STATE.blocks[m] = {};\n      }\n\n      STATE.blocks[m][selector] = {\n        ...options,\n        component: type,\n        label: options.label || label.join(' ')\n      };\n    }\n\n    if (Array.isArray(module)) {\n      module.forEach(m => assignBlock(m));\n    } else {\n      assignBlock(module);\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i6","i4","i5","i7","i8","i4.PageBuilderCtxService","i9","i10","i12.BlockFormComponent","i13.NavigationComponent","i2.ToolbarService","i3.PageBuilderCtxService","i1.ToolbarService","ɵNG_COMP_DEF"],"mappings":"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"}