{"version":3,"file":"jaspero-form-builder.mjs","sources":["../../../../projects/form-builder/src/lib/injection-tokens/custom-component-data.token.ts","../../../../projects/form-builder/src/lib/custom/custom.component.ts","../../../../projects/form-builder/src/lib/injection-tokens/component-data.token.ts","../../../../projects/form-builder/src/lib/field/field.component.ts","../../../../projects/form-builder/src/lib/injection-tokens/custom-components.token.ts","../../../../projects/form-builder/src/lib/form-builder-context.service.ts","../../../../projects/form-builder/src/lib/enums/state.enum.ts","../../../../projects/form-builder/src/lib/form-builder.service.ts","../../../../projects/form-builder/src/lib/utils/default-segment.ts","../../../../projects/form-builder/src/lib/injection-tokens/segment-data.token.ts","../../../../projects/form-builder/src/lib/interfaces/condition.interface.ts","../../../../projects/form-builder/src/lib/utils/compile-fields.ts","../../../../projects/form-builder/src/lib/utils/compile-segment.ts","../../../../projects/form-builder/src/lib/utils/filter-and-compile-segments.ts","../../../../projects/form-builder/src/lib/enums/schema-type.enum.ts","../../../../projects/form-builder/src/lib/validators/schema-validators.class.ts","../../../../projects/form-builder/src/lib/utils/custom-fields.ts","../../../../projects/form-builder/src/lib/utils/schema-to-component.ts","../../../../projects/form-builder/src/lib/utils/parser.ts","../../../../projects/form-builder/src/lib/utils/role.ts","../../../../projects/form-builder/src/lib/form-builder.component.ts","../../../../projects/form-builder/src/lib/form-builder.component.html","../../../../projects/form-builder/src/lib/segment/segment.component.ts","../../../../projects/form-builder/src/lib/form-builder.module.ts","../../../../projects/form-builder/src/lib/modules/show-field/show-field.pipe.ts","../../../../projects/form-builder/src/lib/modules/show-field/show-field.module.ts","../../../../projects/form-builder/src/lib/services/db.service.ts","../../../../projects/form-builder/src/lib/services/storage.service.ts","../../../../projects/form-builder/src/lib/interfaces/global-state.interface.ts","../../../../projects/form-builder/src/lib/enums/filter-method.enum.ts","../../../../projects/form-builder/src/lib/utils/additional-context.ts","../../../../projects/form-builder/src/lib/utils/storage-url.ts","../../../../projects/form-builder/src/lib/utils/get-hsd.ts","../../../../projects/form-builder/src/lib/utils/format-file-name.ts","../../../../projects/form-builder/src/lib/utils/format-generated-images.ts","../../../../projects/form-builder/src/lib/utils/clone-abstract-control.ts","../../../../projects/form-builder/src/jaspero-form-builder.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\r\nimport {UntypedFormGroup} from '@angular/forms';\r\n\r\nexport interface CustomComponentData {\r\n  id?: string;\r\n  columnsDesktop?: number;\r\n  columnsTablet?: number;\r\n  columnsMobile?: number;\r\n  class?: string;\r\n  form: UntypedFormGroup;\r\n}\r\n\r\nexport const CUSTOM_COMPONENT_DATA = new InjectionToken<CustomComponentData>('CUSTOM_COMPONENT_DATA');\r\n","import {Component, HostBinding, Inject} from '@angular/core';\nimport {CustomComponentData, CUSTOM_COMPONENT_DATA} from '../injection-tokens/custom-component-data.token';\n\n@Component({\n  selector: 'fb-custom-component',\n  template: ''\n})\nexport class CustomComponent {\n  constructor(\n    @Inject(CUSTOM_COMPONENT_DATA)\n    public data: CustomComponentData\n  ) {\n    const classes = [\n      `fb-field-${this.data.columnsDesktop || 12}`\n    ];\n\n    if (this.data.columnsTablet) {\n      classes.push(`m-fb-field-${this.data.columnsTablet}`);\n    }\n\n    if (this.data.columnsMobile) {\n      classes.push(`s-fb-field-${this.data.columnsMobile}`);\n    }\n\n    if (this.data.class) {\n      classes.push(this.data.class);\n    }\n\n    this.class = classes.join(' ');\n  }\n\n  @HostBinding('class')\n  class: string;\n}\n","import {InjectionToken} from '@angular/core';\r\n\r\nexport const COMPONENT_DATA = new InjectionToken<{}>('COMPONENT_DATA');\r\n","import {Component, HostBinding, Inject} from '@angular/core';\nimport {UntypedFormControl} from '@angular/forms';\nimport {COMPONENT_DATA} from '../injection-tokens/component-data.token';\nimport {FieldData} from '../interfaces/field-data.interface';\n\n// @dynamic\n@Component({\n  selector: 'fb-field',\n  template: ''\n})\nexport class FieldComponent<T extends FieldData<C>, C = UntypedFormControl> {\n  constructor(\n    @Inject(COMPONENT_DATA) public cData: T\n  ) {\n\n    const classes = [\n      `fb-field-${this.cData.columnsDesktop || 12}`\n    ];\n\n    if (this.cData.columnsTablet) {\n      classes.push(`m-fb-field-${this.cData.columnsTablet}`);\n    }\n\n    if (this.cData.columnsMobile) {\n      classes.push(`s-fb-field-${this.cData.columnsMobile}`);\n    }\n\n    if (this.cData.class) {\n      classes.push(this.cData.class);\n    }\n\n    this.class = classes.join(' ');\n  }\n\n  @HostBinding('class')\n  class: string;\n}\n","import {InjectionToken} from '@angular/core';\r\n\r\nexport interface CustomComponents {\r\n  [key: string]: any;\r\n}\r\n\r\nexport const CUSTOM_COMPONENTS = new InjectionToken<CustomComponents>('CUSTOM_COMPONENTS');\r\n","import {Inject, Injectable, Optional} from '@angular/core';\nimport {CustomComponents, CUSTOM_COMPONENTS} from './injection-tokens/custom-components.token';\nimport {CustomFields} from './utils/custom-fields';\n\n@Injectable({providedIn: 'root'})\nexport class FormBuilderContextService {\n  constructor(\n    @Optional()\n    @Inject(CUSTOM_COMPONENTS)\n    private injectedComponents: CustomComponents\n  ) {}\n\n  fields: CustomFields = {};\n  segments: CustomFields = {};\n  components: CustomComponents = {};\n\n  /**\n   * Currently active module. Important for\n   * components where the module is needed\n   * before save triggers.\n   */\n  module: string;\n\n  get componentMap() {\n    return {\n      ...this.injectedComponents || {},\n      ...this.components\n    }\n  }\n\n  registerField(\n    name: string,\n    component: any\n  ) {\n    if (this.fields.hasOwnProperty(name)) {\n      throw new Error(`Field with selector ${name} already registered.`);\n    }\n\n    this.fields[name] = component;\n  }\n\n  registerSegment(\n    selector: string,\n    component: any\n  ) {\n    if (this.segments.hasOwnProperty(selector)) {\n      throw new Error(`Segment with selector ${selector} already registered.`);\n    }\n\n    this.segments[selector] = component;\n  }\n\n  registerComponent(\n    selector: string,\n    component: any\n  ) {\n    if (this.components.hasOwnProperty(selector)) {\n      throw new Error(`Field with selector ${selector} already registered.`);\n    }\n\n    this.components[selector] = component;\n  }\n}\n","export enum State {\n  Create = 'create',\n  Edit = 'edit'\n}\n","import {Injectable} from '@angular/core';\nimport {MatSnackBar} from '@angular/material/snack-bar';\nimport {TranslocoService} from '@jsverse/transloco';\nimport {Observable, throwError} from 'rxjs';\nimport {catchError, tap} from 'rxjs/operators';\n\n@Injectable()\nexport class FormBuilderService {\n  constructor(\n    private transloco: TranslocoService,\n    private snackBar: MatSnackBar\n  ) {}\n\n  notify(\n    options: {\n      success?: string | null;\n      error?: string;\n    } = {}\n  ): <T>(source$: Observable<T>) => Observable<T> {\n    const finalOptions = {\n      success: 'OPERATION_COMPLETED',\n      error: 'OPERATION_FAILED',\n      ...options\n    };\n\n    return <T>(source$: Observable<T>) => {\n      return source$.pipe(\n        tap(() => {\n          if (finalOptions.success) {\n            this.snackBar.open(\n              this.transloco.translate(finalOptions.success),\n              this.transloco.translate('DISMISS'),\n              {\n                duration: 5000\n              }\n            );\n          }\n        }),\n        catchError(err => {\n          if (finalOptions.error) {\n            this.snackBar.open(\n              this.transloco.translate(finalOptions.error),\n              this.transloco.translate('DISMISS'),\n              {\n                panelClass: 'snack-bar-error',\n                duration: 5000\n              }\n            );\n          }\n\n          console.error(err);\n          return throwError(err);\n        })\n      );\n    };\n  }\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const DEFAULT_SEGMENT = new InjectionToken<string>('DEFAULT_SEGMENT');\n","import {InjectionToken} from '@angular/core';\r\n\r\nexport const SEGMENT_DATA = new InjectionToken<{}>('SEGMENT_DATA');\r\n","\n\nexport enum ConditionType {\n  Function = 'function',\n  Statement = 'statement'\n}\n\nexport enum ConditionAction {\n  Show = 'show',\n  Hide = 'hide'\n}\n\nexport enum ConditionEvaluate {\n  OnLoad = 'onLoad',\n  OnChange = 'onChange'\n}\n\nexport interface Condition {\n\n  /**\n   * Defaults to function\n   */\n  type?: ConditionType;\n\n  /**\n   * Stringified condition that could\n   * later also be an object representing\n   * a more complex statement\n   */\n  condition?: string;\n\n  /**\n   * Defaults to show\n   */\n  action?: ConditionAction;\n\n  /**\n   * Not always required; depends on\n   * condition type\n   */\n  data?: any;\n\n  /**\n   * Empty or undefined means evaluate always\n   */\n  evaluateStates?: number[];\n\n  /**\n   * Defaults to OnLoad\n   */\n  evaluateOn?: ConditionEvaluate;\n}\n\nexport interface CompiledCondition {\n  type: ConditionType;\n  action: ConditionAction;\n  condition: (data?: any) => any;\n  evaluateStates: number[];\n  evaluateOn: ConditionEvaluate;\n  data?: any;\n}\n","import {safeEval} from '@jaspero/utils';\nimport {CompiledField, FieldCondition} from '../interfaces/compiled-field.interface';\nimport {Definitions} from '../interfaces/definitions.interface';\nimport {Parser, Pointers} from './parser';\n\nexport function compileFields(config: {\n  parser: Parser;\n  definitions: Definitions;\n  fields: (string | any | FieldCondition)[];\n  pointers?: Pointers;\n  mutateKey?: (key: string) => string;\n  formId?: string;\n  parentForm?: {\n    id: string;\n    pointer: string;\n  };\n}) {\n\n  const {\n    parser,\n    definitions,\n    fields,\n    pointers = null,\n    mutateKey = (key: string) => key,\n    formId,\n    parentForm\n  } = config;\n\n  return (fields || [])\n    .reduce((acc: CompiledField[], keyObject: string | object) => {\n      let condition: any;\n      let key = keyObject as string;\n\n      if (keyObject?.constructor === Object) {\n\n        const {field, action, deps} = keyObject as any;\n\n        condition = {field};\n\n        switch (action?.constructor) {\n          case Object:\n            condition.action = [action];\n            break;\n          case Array:\n            condition.action = action;\n            break;\n          default:\n            condition.action = [{}];\n            break;\n        }\n\n        condition.action.forEach((item) => {\n          item.type = item.type || 'show';\n          item.eval = safeEval(item.eval) || null;\n        });\n        condition.deps = deps || [];\n\n        key = mutateKey(field);\n      } else {\n        key = mutateKey(key);\n      }\n\n      const definition = parser.getFromDefinitions(key, definitions);\n\n      if (\n        !definition ||\n        !definition.roles ||\n        (\n          typeof definition.roles === 'string' ?\n            definition.roles === parser.role :\n            definition.roles.includes(parser.role)\n        )\n      ) {\n        acc.push(\n          parser.field({\n            pointerKey: key,\n            pointer: (pointers || parser.pointers)[key],\n            definitions,\n            single: true,\n            condition,\n            formId,\n            parentForm\n          })\n        );\n      }\n\n      return acc;\n    }, []);\n}\n","import {ComponentPortal} from '@angular/cdk/portal';\nimport {Injector} from '@angular/core';\nimport {safeEval} from '@jaspero/utils';\nimport {CustomComponent} from '../custom/custom.component';\nimport {FormBuilderContextService} from '../form-builder-context.service';\nimport {CUSTOM_COMPONENT_DATA} from '../injection-tokens/custom-component-data.token';\nimport {SEGMENT_DATA} from '../injection-tokens/segment-data.token';\nimport {CompiledField} from '../interfaces/compiled-field.interface';\nimport {CompiledSegment} from '../interfaces/compiled-segment.interface';\nimport {CompiledCondition, ConditionAction, ConditionEvaluate, ConditionType} from '../interfaces/condition.interface';\nimport {Definitions} from '../interfaces/definitions.interface';\nimport {Segment} from '../interfaces/segment.interface';\nimport {SegmentComponent} from '../segment/segment.component';\nimport {compileFields} from './compile-fields';\nimport {DEFAULT_SEGMENT} from './default-segment';\nimport {Parser, Pointer} from './parser';\n\nexport function compileSegment(config: {\n  segment: Segment,\n  parser: Parser,\n  definitions: Definitions,\n  injector: Injector,\n  value?: any,\n  parent?: string,\n  formId?: string;\n  parentForm?: {\n    id: string;\n    pointer: string;\n  },\n  index?: number\n}) {\n\n  const {\n    segment,\n    parser,\n    definitions,\n    injector,\n    value = {},\n    parent,\n    formId,\n    parentForm,\n    index\n  } = config;\n\n  const classes: string[] = [];\n\n  let fields: CompiledField[] | string[] = [];\n  let customComponents: ComponentPortal<CustomComponent>[] = [];\n\n  if (segment.columnsDesktop) {\n    classes.push(`col-${segment.columnsDesktop}`);\n  }\n\n  if (segment.columnsTablet) {\n    classes.push(`col-m-${segment.columnsTablet}`);\n  }\n\n  if (segment.columnsMobile) {\n    classes.push(`col-s-${segment.columnsMobile}`);\n  }\n\n  /**\n   * If there aren't any column definitions\n   * default to full width\n   */\n  if (!classes.length) {\n    classes.push(parent ? 'fb-field-12' : 'col-12');\n  }\n\n  if (segment.classes) {\n    classes.push(...segment.classes);\n  }\n\n  if (segment.fields) {\n\n    /**\n     * If it's an array fields aren't parsed\n     */\n    if (segment.array) {\n      // @ts-ignore\n      fields = (segment.fields || []).map(fi => {\n        if (fi.constructor === Object) {\n          return {\n            ...fi,\n            segment: segment.array\n          };\n        } else {\n          return segment.array + fi;\n        }\n      });\n    } else {\n      fields = compileFields({\n        parser,\n        definitions,\n        fields: segment.fields,\n        formId,\n        parentForm\n      });\n    }\n  }\n\n  if (segment.components) {\n\n    const {componentMap} = injector.get(FormBuilderContextService);\n\n    if (componentMap) {\n      customComponents = segment.components.reduce((acc: ComponentPortal<CustomComponent>[], component) => {\n        const comp = componentMap[component.selector];\n        const id = parser.form.get('id');\n        if (comp && (!component.authorization || component.authorization.includes(parser.role))) {\n          acc.push(\n            new ComponentPortal<CustomComponent>(\n              comp,\n              null,\n              Injector.create({\n                providers: [{provide: CUSTOM_COMPONENT_DATA, useValue: {\n                  form: parser.form,\n                  parentForm,\n                  formId,\n                  ...id && {id: id.value},\n                  ...(component.input || {})\n                }}],\n                parent: injector\n              })\n            )\n          );\n        }\n\n        return acc;\n      }, []);\n    }\n  }\n\n  const compiledSegment = {\n    ...segment,\n    classes,\n    fields,\n    entryValue: value,\n    customComponents\n  } as CompiledSegment;\n\n  /**\n   * TODO:\n   * Statement support\n   */\n  if (segment.conditions) {\n\n    compiledSegment.conditions = [];\n\n    for (const cur of segment.conditions) {\n      let condition;\n\n      const type = cur.type || ConditionType.Function;\n      const action = cur.action || ConditionAction.Show;\n      const evaluateOn = cur.evaluateOn || ConditionEvaluate.OnLoad;\n      const evaluateStates = cur.evaluateStates || [0, 1, 2];\n\n      if (cur.condition) {\n        condition = safeEval(cur.condition as string);\n      }\n\n      if (condition) {\n\n        /**\n         * Evaluate on load conditions\n         */\n        if (evaluateOn === ConditionEvaluate.OnLoad) {\n\n          /**\n           * Check if items should be excluded right away\n           */\n          if (\n            (action === ConditionAction.Show && !condition(value)) ||\n            (action === ConditionAction.Hide && condition(value))\n          ) {\n            return null;\n          }\n        }\n\n        compiledSegment.conditions.push({\n          condition,\n          type,\n          action,\n          evaluateStates,\n          evaluateOn,\n          ...cur.data && {\n            data: cur.data\n          }\n        } as CompiledCondition);\n      }\n    }\n  }\n\n  const ctx = injector.get(FormBuilderContextService);\n\n  let defaultSegment = 'card';\n\n  try {\n    defaultSegment = injector.get(DEFAULT_SEGMENT);\n  } catch (e) {}\n\n  return {\n    component: new ComponentPortal<SegmentComponent>(\n      ctx.segments[segment.type || defaultSegment],\n      null,\n      Injector.create({\n        providers: [{provide: SEGMENT_DATA, useValue: {\n          segment: compiledSegment,\n          parser,\n          definitions,\n          parentForm,\n          formId,\n          ...parent && {parent},\n          ...index !== undefined && {index}\n        }}],\n        parent: injector\n      })\n    ),\n    ...compiledSegment\n  } as CompiledSegment;\n}\n","import {Injector} from '@angular/core';\nimport {Definitions} from '../interfaces/definitions.interface';\nimport {Segment} from '../interfaces/segment.interface';\nimport {compileSegment} from './compile-segment';\nimport {Parser, Pointer} from './parser';\n\nexport function filterAndCompileSegments(config: {\n  segments: Segment[],\n  parser: Parser,\n  definitions: Definitions,\n  injector: Injector,\n  value?: any,\n  formId?: string;\n  parentForm?: {\n    id: string;\n    pointer: string;\n  },\n  parent?: string,\n  index?: number,\n  pointer?: Pointer\n}) {\n\n  const {segments, parser, ...segmentConfig} = config;\n\n  return segments.reduce((acc, segment) => {\n    if (!segment.authorization || segment.authorization.includes(parser.role)) {\n\n      const compiled = compileSegment({\n        segment,\n        parser,\n        ...segmentConfig,\n      });\n\n      /**\n       * TODO:\n       * Exclude any segments that end up not having\n       * a single field or component\n       */\n      if (compiled) {\n        acc.push(\n          // @ts-ignore\n          compiled\n        );\n      }\n    }\n\n    return acc;\n  }, []);\n}\n","export enum SchemaType {\n  Object = 'object',\n  Array = 'array',\n\n  // Simple\n  String = 'string',\n  Number = 'number',\n  Integer = 'integer',\n  Boolean = 'boolean',\n  Null = 'null'\n}\n","import {AbstractControl} from '@angular/forms';\n\n// @dynamic\nexport class SchemaValidators {\n  static multipleOf(num: number) {\n    return (control: AbstractControl) => {\n      return control.value % num === 0 ? null : {multipleOf: num};\n    };\n  }\n}\n","import {InjectionToken} from '@angular/core';\n\nexport interface CustomFields {\n  [key: string]: any;\n}\n\nexport const CUSTOM_FIELDS = new InjectionToken<CustomFields>('CUSTOM_FIELDS');\n","import {SchemaType} from '../enums/schema-type.enum';\n\n/**\n * TODO:\n * We need a better approach for defaults.\n * With the fields being delivered as a separate\n * module there is no guaranty that an \"input\"\n * field will exist\n */\nexport function schemaToComponent(schemaType: SchemaType) {\n  switch (schemaType) {\n    case SchemaType.String:\n      return {\n        type: 'input',\n        configuration: {\n          type: 'text'\n        }\n      };\n\n    case SchemaType.Number:\n    case SchemaType.Integer:\n      return {\n        type: 'input',\n        configuration: {\n          type: 'number'\n        }\n      };\n\n    case SchemaType.Boolean:\n      return {\n        type: 'checkbox'\n      };\n\n    case SchemaType.Array:\n      return {\n        type: 'chips'\n      };\n  }\n}\n","import {moveItemInArray} from '@angular/cdk/drag-drop';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {Injector} from '@angular/core';\nimport {UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators} from '@angular/forms';\nimport {safeEval, toLabel} from '@jaspero/utils';\nimport {get, has} from 'json-pointer';\nimport {SchemaType} from '../enums/schema-type.enum';\nimport {State} from '../enums/state.enum';\nimport {FieldComponent} from '../field/field.component';\nimport {FormBuilderContextService} from '../form-builder-context.service';\nimport {COMPONENT_DATA} from '../injection-tokens/component-data.token';\nimport {CompiledField} from '../interfaces/compiled-field.interface';\nimport {Control} from '../interfaces/control.type';\nimport {Definitions} from '../interfaces/definitions.interface';\nimport {SchemaValidators} from '../validators/schema-validators.class';\nimport {CUSTOM_FIELDS, CustomFields} from './custom-fields';\nimport {schemaToComponent} from './schema-to-component';\n\nexport interface PropertyDefinition {\n  type: SchemaType;\n  description?: string;\n  default?: any;\n}\n\nexport interface StringPropertyDefinition extends PropertyDefinition {\n  type: SchemaType.String;\n  default?: string;\n\n  pattern?: string;\n  minLength?: number;\n  maxLength?: number;\n}\n\nexport interface NumberPropertyDefinition extends PropertyDefinition {\n  type: SchemaType.Number | SchemaType.Integer;\n  default?: number;\n\n  minimum?: number;\n  maximum?: number;\n  exclusiveMinimum?: boolean;\n  exclusiveMaximum?: boolean;\n  multipleOf?: number;\n}\n\nexport interface BooleanPropertyDefinition extends PropertyDefinition {\n  type: SchemaType.Boolean;\n  default?: boolean;\n}\n\nexport interface ArrayPropertyDefinition extends PropertyDefinition {\n  type: SchemaType.Array;\n  items?: any;\n  contains?: any;\n}\n\nexport interface Pointer {\n  key: string;\n  type: SchemaType;\n  control: Control;\n  validation: any;\n\n  formatOnSave?: (item: any, dataSet?: any) => any;\n  formatOnLoad?: (item: any) => any;\n  formatOnCreate?: (item: any, dataSet?: any) => any;\n  formatOnEdit?: (item: any, dataSet?: any) => any;\n\n  /**\n   * Arrays can have these properties\n   */\n  arrayType?: SchemaType;\n  properties?: any;\n  required?: string[];\n  arrayPointers?: Pointers[];\n}\n\nexport interface Pointers {\n  [key: string]: Pointer;\n}\n\n// @dynamic\nexport class Parser {\n  constructor(\n    public schema: any,\n    public injector: Injector,\n    public state: State,\n    public role: string,\n    public definitions: Definitions = {},\n    customFields?: CustomFields\n  ) {\n\n    if (customFields) {\n      this.customFields = customFields;\n      return;\n    }\n\n    let custom: CustomFields;\n    let ctxFields: CustomFields;\n\n    try {\n      custom = this.injector.get(CUSTOM_FIELDS);\n    } catch (e) { }\n\n    try {\n      const ctx = this.injector.get(FormBuilderContextService);\n      ctxFields = ctx.fields || {};\n    } catch (e) { }\n\n    this.customFields = {\n      ...custom || {},\n      ...ctxFields || {}\n    };\n  }\n\n  form: UntypedFormGroup;\n  pointers: Pointers = {};\n  customFields: CustomFields = {};\n  parent: Parser;\n\n  static standardizeKey(key: string) {\n    if (key[0] === '/') {\n      key = key.slice(1);\n    }\n\n    return key;\n  }\n\n  static standardizeKeyWithSlash(key: string) {\n    if (key[0] !== '/') {\n      key = '/' + key;\n    }\n\n    return key;\n  }\n\n  static stringControl(\n    definition: StringPropertyDefinition,\n    required: boolean\n  ) {\n    const controlValidation: any[] = [];\n    const validation: any = {};\n\n    if (required) {\n      controlValidation.push(Validators.required);\n      validation.required = true;\n    }\n\n    if (definition.maxLength) {\n      controlValidation.push(Validators.maxLength(definition.maxLength));\n      validation.maxLength = definition.maxLength;\n    }\n\n    if (definition.minLength) {\n      controlValidation.push(Validators.minLength(definition.minLength));\n      validation.minLength = definition.minLength;\n    }\n\n    if (definition.pattern) {\n      controlValidation.push(Validators.pattern(definition.pattern));\n      validation.patter = definition.pattern;\n    }\n\n    return {\n      control: new UntypedFormControl(definition.default || '', controlValidation),\n      validation\n    };\n  }\n\n  static numberControl(\n    definition: NumberPropertyDefinition,\n    required: boolean\n  ) {\n    const validation: any = {};\n    const controlValidation: any[] = [];\n\n    if (required) {\n      controlValidation.push(Validators.required);\n      validation.required = true;\n    }\n\n    if (definition.minimum) {\n      const minimum =\n        definition.minimum + (definition.exclusiveMinimum ? 1 : 0);\n      controlValidation.push(Validators.min(minimum));\n      validation.minimum = minimum;\n    }\n\n    if (definition.maximum) {\n      const maximum =\n        definition.maximum - (definition.exclusiveMaximum ? 1 : 0);\n      controlValidation.push(Validators.max(maximum));\n      validation.maximum = maximum;\n    }\n\n    if (definition.multipleOf) {\n      controlValidation.push(\n        SchemaValidators.multipleOf(definition.multipleOf)\n      );\n      validation.multipleOf = definition.multipleOf;\n    }\n\n    return {\n      control: new UntypedFormControl(definition.default || null, controlValidation),\n      validation\n    };\n  }\n\n  static booleanControl(\n    definition: BooleanPropertyDefinition,\n    required: boolean\n  ) {\n    const controlValidation: any[] = [];\n    const validation: any = {};\n\n    if (required) {\n      controlValidation.push(Validators.required);\n      validation.required = true;\n    }\n\n    return {\n      control: new UntypedFormControl(definition.hasOwnProperty('default') ? definition.default : false, controlValidation),\n      validation\n    };\n  }\n\n  buildForm(\n    value?: any,\n    required: string[] | null = [],\n    base = '/',\n    addId = true\n  ) {\n    const properties = this.buildProperties(\n      this.schema.properties || {},\n      required || this.schema.required,\n      base,\n      addId,\n      value\n    );\n\n    this.form = properties.form;\n    this.pointers = properties.pointers;\n\n    if (value) {\n      this.form.patchValue(value);\n    }\n\n    return this.form;\n  }\n\n  buildProperties(\n    properties: object,\n    required: string[] = [],\n    base = '/',\n    addId = true,\n    entryValue = null\n  ) {\n    const {form, pointers} = [\n      ...Object.entries(properties),\n      /**\n       * Add the id field as a property so that\n       * it can be added to the form if needed\n       */\n      ...(addId\n        ? [\n          [\n            'id',\n            {\n              type: 'string'\n            }\n          ]\n        ]\n        : [])\n    ].reduce(\n      (group, [key, value]: [string, any]) => {\n        const isRequired = required.includes(key);\n        const pointerKey = base + key;\n        const definition = this.getFromDefinitions(pointerKey) || {};\n\n        let parsed: {\n          control: any;\n          validation: any;\n          arrayType?: SchemaType;\n          properties?: any;\n          required?: string[];\n        };\n\n        switch (value.type) {\n          case SchemaType.String:\n            parsed = Parser.stringControl(value, isRequired);\n            break;\n\n          case SchemaType.Number:\n          case SchemaType.Integer:\n            parsed = Parser.numberControl(value, isRequired);\n            break;\n\n          case SchemaType.Boolean:\n            parsed = Parser.booleanControl(value, isRequired);\n            break;\n\n          case SchemaType.Object:\n            if (value.properties && Object.keys(value.properties).length) {\n              const objectProperties = this.buildProperties(\n                value.properties,\n                value.required,\n                pointerKey + '/',\n                false\n              );\n\n              for (const added in objectProperties.pointers) {\n                if (objectProperties.pointers.hasOwnProperty(added)) {\n                  // @ts-ignore\n                  group.pointers[added] = objectProperties.pointers[added];\n                }\n              }\n\n              parsed = {\n                control: objectProperties.form,\n                validation: {}\n              };\n            }\n\n            /**\n             * When properties aren't defined we create a\n             * FormControl instead of a FormGroup\n             */\n            else {\n              parsed = Parser.stringControl(value, isRequired);\n            }\n            break;\n\n          case SchemaType.Array:\n            parsed = this.buildArray(base, value);\n            break;\n        }\n\n        // @ts-ignore\n        group.form[key] = parsed.control;\n        // @ts-ignore\n        group.pointers[pointerKey] = {\n          key,\n          type: value.type,\n          ...definition.formatOnLoad\n          && {formatOnLoad: safeEval(definition.formatOnLoad)},\n          ...definition.formatOnSave\n          && {formatOnSave: safeEval(definition.formatOnSave)},\n          ...definition.formatOnCreate\n          && {formatOnCreate: safeEval(definition.formatOnCreate)},\n          ...definition.formatOnEdit\n          && {formatOnEdit: safeEval(definition.formatOnEdit)},\n          // @ts-ignore\n          ...parsed\n        };\n\n        /**\n         * Creat all FormArray controls\n         */\n        if (value.type === SchemaType.Array) {\n          this.populateArray(\n            pointerKey,\n            entryValue,\n            group.pointers\n          );\n        }\n\n        return group;\n      },\n      {\n        form: {},\n        pointers: {}\n      }\n    );\n\n    return {\n      pointers,\n      form: new UntypedFormGroup(form)\n    };\n  }\n\n  /**\n   * @param pointerKey Lookup key for the pointer\n   * @param pointer Entire pointer object that should be used\n   * @param definitions Entire definitions object that should be used\n   * @param single Defines if the field shown in the form or in the table\n   * @param condition Evaluate function which validates provided action ('show' | 'hide')\n   */\n  field(config: {\n    pointerKey: string,\n    pointer: Pointer,\n    definitions: Definitions,\n    single: boolean,\n    condition?: any,\n    formId?: string;\n    parentForm?: {\n      id: string;\n      pointer: string;\n    };\n  }): CompiledField {\n    const {\n      pointerKey,\n      pointer,\n      definitions = {},\n      single = true,\n      condition,\n      formId,\n      parentForm\n    } = config;\n\n    if (!pointer) {\n      throw new Error(`Couldn't find pointer for ${pointerKey}.`);\n    }\n\n    const {key, type, control, validation} = pointer;\n    const definition = {\n      ...this.getFromDefinitions(pointerKey, definitions)\n    };\n\n    if (definition.label === undefined) {\n      definition.label = toLabel(key);\n    }\n\n    if (\n      (\n        definition.disableOn &&\n        (\n          Array.isArray(definition.disableOn) ?\n            definition.disableOn.includes(this.state)\n            : definition.disableOn === this.state\n        )\n      ) ||\n      (\n        definition.disableForRoles &&\n        (\n          Array.isArray(definition.disableForRoles) ?\n            definition.disableForRoles.includes(this.role)\n            : definition.disableForRoles === this.role\n        )\n      )\n    ) {\n      control.disable();\n    }\n\n    /**\n     * We don't show labels in the table\n     */\n    if (!single) {\n      definition.label = '';\n    }\n\n    if (!definition.component) {\n      definition.component = schemaToComponent(type);\n    }\n\n    // @ts-ignore\n    const component = this.customFields[definition.component.type];\n\n    if (!component) {\n      // @ts-ignore\n      throw new Error(`Couldn't find a component defined for type: ${definition.component.type}`);\n    }\n\n    const configuration = safeEval(definition.component.configuration || {});\n    const safeConfiguration = typeof configuration === 'function' ? configuration() : configuration;\n\n    const portal = new ComponentPortal<FieldComponent<any>>(\n      component,\n      null,\n      Injector.create({\n        providers: [{\n          provide: COMPONENT_DATA, useValue: {\n            control,\n            validation,\n            single,\n            pointers: this.pointers,\n            form: this.form,\n            formId,\n            parentForm,\n            pointer: pointerKey,\n            ...definition,\n            ...safeConfiguration\n          }\n        }],\n        parent: this.injector\n      })\n    );\n\n    return {\n      pointer: pointerKey,\n      control,\n      portal,\n      validation,\n      placeholder: definition.placeholder || '',\n      label: definition.label,\n      onlyOn: definition.onlyOn,\n      condition\n    };\n  }\n\n  addArrayItem(\n    pointer: string,\n    target: Pointer,\n    loadHooks = false,\n    reverse = true\n  ) {\n    const operation = reverse ? 'unshift' : 'push';\n    const control = target.control as UntypedFormArray;\n\n    if (\n      target.arrayType === SchemaType.Array ||\n      target.arrayType === SchemaType.Object\n    ) {\n      const properties = this.buildProperties(\n        target.properties,\n        target.required,\n        pointer + '/',\n        false\n      );\n\n      if (loadHooks) {\n        this.loadHooks(properties.pointers);\n      }\n      // @ts-ignore\n      target.arrayPointers[operation](properties.pointers);\n      if (reverse) {\n        control.insert(0, properties.form);\n      } else {\n        control.push(properties.form);\n      }\n\n\n      return properties.pointers;\n    } else {\n      const cont = new UntypedFormControl('');\n\n      if (control instanceof UntypedFormArray) {\n        if (reverse) {\n          control.insert(0, cont);\n        } else {\n          control.push(cont);\n        }\n      }\n\n      return cont;\n    }\n  }\n\n  moveArrayItem(target: Pointer, fromIndex: number, toIndex: number) {\n    if (\n      target.arrayType === SchemaType.Array ||\n      target.arrayType === SchemaType.Object\n    ) {\n      moveItemInArray(\n        target.arrayPointers as any[],\n        fromIndex,\n        toIndex\n      );\n    }\n\n    const control = target.control as UntypedFormArray;\n    const currentGroup = control.at(fromIndex);\n\n    control.removeAt(fromIndex);\n    control.insert(toIndex, currentGroup);\n  }\n\n  removeArrayItem(target: Pointer, index: number) {\n    target.arrayPointers.splice(index, 1);\n    (target.control as UntypedFormArray).removeAt(index);\n  }\n\n  loadHooks(pointers = this.pointers) {\n    Object.values(pointers).forEach(entry => {\n      /**\n       * TODO:\n       * For the moment formatOn methods are\n       * only supported on FormControls.\n       * We might want to expand on this later on.\n       */\n      if (entry.control instanceof UntypedFormControl && entry.formatOnLoad) {\n        const adjustedValue = entry.formatOnLoad(entry.control.value);\n\n        if (adjustedValue !== entry.control.value) {\n          entry.control.setValue(adjustedValue);\n        }\n      }\n    });\n  }\n\n  preSaveHooks(\n    currentState: State,\n    statesToProcess = [State.Create, State.Edit],\n    pointers = this.pointers\n  ) {\n\n    const preSaveData = this.form.getRawValue();\n\n    Object.values(pointers).forEach(entry => {\n      /**\n       * TODO:\n       * For the moment formatOn methods are\n       * only supported on FormControls.\n       * We might want to expand on this later on.\n       */\n      if (entry.control instanceof UntypedFormControl) {\n        let value = entry.control.value;\n\n        if (entry.formatOnSave) {\n          value = entry.formatOnSave(value, preSaveData);\n        }\n\n        if (statesToProcess.includes(currentState)) {\n          if (currentState === State.Edit && entry.formatOnEdit) {\n            value = entry.formatOnEdit(value, preSaveData);\n          } else if (entry.formatOnCreate) {\n            value = entry.formatOnCreate(value, preSaveData);\n          }\n        }\n\n        if (value !== entry.control.value) {\n          entry.control.setValue(value);\n        }\n      }\n\n      if (entry.arrayPointers) {\n        entry.arrayPointers.forEach(arrayPointers =>\n          this.preSaveHooks(currentState, statesToProcess, arrayPointers)\n        );\n      }\n    });\n  }\n\n  getFromDefinitions(\n    key: string,\n    definitions: Definitions = this.definitions\n  ) {\n    return definitions[Parser.standardizeKey(key)];\n  }\n\n  /**\n   * TODO:\n   * - Handle contains case\n   * - Handle items or contains as array not object\n   */\n  private buildArray(base: string, definition: ArrayPropertyDefinition) {\n    if (definition.items) {\n      return {\n        arrayType: definition.items.type,\n        properties: definition.items.properties,\n        required: definition.items.required,\n        validation: {},\n        control: new UntypedFormArray([]),\n        arrayPointers: []\n      };\n    } else {\n      return {\n        control: new UntypedFormControl([]),\n        arrayType: SchemaType.String,\n        validation: {}\n      };\n    }\n  }\n\n  private populateArray(\n    pointer: string,\n    entryValue: any,\n    pointers: any\n  ) {\n    if (has(entryValue, pointer)) {\n      const values = get(entryValue, pointer);\n\n      if (Array.isArray(values) && values.length) {\n        values.forEach(v => {\n\n          const items = this.addArrayItem(\n            pointer,\n            pointers[pointer],\n            false,\n            false\n          );\n\n          for (const key in items) {\n\n            const itemVal = items[key];\n\n            if (!itemVal || !itemVal.arrayPointers) {\n              continue;\n            }\n\n            this.populateArray(\n              key,\n              pointer\n                .split('/')\n                .reverse()\n                .reduce((acc, cur) => {\n\n                  if (!cur) {\n                    return acc;\n                  }\n\n                  return {[Parser.standardizeKey(cur)]: acc};\n                }, v),\n              {[key]: itemVal}\n            );\n          }\n        });\n      }\n    }\n  }\n\n  copy(\n    overrides: Partial<{\n      schema: any;\n      injector: Injector;\n      state: State;\n      role: string;\n      definitions: Definitions;\n      customFields: CustomFields;\n      form: UntypedFormGroup;\n      pointers: Pointers;\n    }> = {}\n  ) {\n    const cp = new Parser(\n      overrides.schema || this.schema,\n      overrides.injector || this.injector,\n      overrides.state || this.state,\n      overrides.role || this.role,\n      overrides.definitions || this.definitions,\n      overrides.customFields || this.customFields\n    );\n\n    ['form', 'pointers'].forEach(key => {\n      if (overrides[key]) {\n        cp[key] = overrides[key];\n      }\n    });\n\n    cp.parent = this;\n\n    return cp;\n  }\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const ROLE = new InjectionToken<{}>('ROLE');\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  HostBinding,\n  Inject,\n  Injector,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {get} from 'json-pointer';\nimport {of, Subscription} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators'\nimport {State} from './enums/state.enum';\nimport {FormBuilderService} from './form-builder.service';\nimport {CompiledSegment} from './interfaces/compiled-segment.interface';\nimport {FormBuilderData} from './interfaces/form-builder-data.interface';\nimport {GlobalState, Operation} from './interfaces/global-state.interface';\nimport {DEFAULT_SEGMENT} from './utils/default-segment';\nimport {filterAndCompileSegments} from './utils/filter-and-compile-segments';\nimport {Parser} from './utils/parser';\nimport {ROLE} from './utils/role';\n\ndeclare global {\n  interface Window {\n    // @ts-ignore\n    jpFb: GlobalState;\n  }\n}\n@Component({\n  selector: 'fb-form-builder',\n  templateUrl: './form-builder.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [FormBuilderService]\n})\nexport class FormBuilderComponent implements OnChanges, OnDestroy {\n  constructor(\n    public service: FormBuilderService,\n    private injector: Injector,\n    @Optional()\n    @Inject(ROLE)\n    private role: string,\n    @Optional()\n    @Inject(DEFAULT_SEGMENT)\n    private defaultSegment: string,\n    private cdr: ChangeDetectorRef\n  ) { }\n\n  @Input() data: FormBuilderData;\n  @Input() value: any;\n  @Input() parser: Parser;\n  @Input() state: State = State.Create;\n  @Input() clearOnClose = true;\n\n  @HostBinding('id')\n  @Input() id = 'jp-fb-main';\n\n  /**\n   * Used when child forms are rendered in parent\n   */\n  @Input() parent: {\n    id: string;\n    pointer: string;\n  };\n\n  @Output() valueChanges = new EventEmitter<any>();\n  @Output() validityChanges = new EventEmitter<boolean>();\n  @Output() rendered = new EventEmitter();\n\n  form: UntypedFormGroup;\n  segments: CompiledSegment[];\n  innerParser: Parser;\n\n  private changeSubscription: Subscription;\n  private statusSubscription: Subscription;\n\n  ngOnChanges(changes: SimpleChanges) {\n\n    /**\n     * In case the provider is provided internally\n     * and the id has changed we delete it here\n     * before going in to rendering to force the\n     * creation of a new parser\n     */\n    if (changes.id && (changes.id.currentValue !== changes.id.previousValue)) {\n      delete this.innerParser;\n    }\n\n    if (changes.parser?.currentValue) {\n      this.innerParser = changes.parser.currentValue;\n    }\n\n    if (changes.data) {\n      this.render();\n    }\n\n    if (changes.value && this.form) {\n      this.form.patchValue(changes.value.currentValue);\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.changeSubscription) {\n      this.changeSubscription.unsubscribe();\n    }\n\n    if (this.statusSubscription) {\n      this.statusSubscription.unsubscribe();\n    }\n\n    if (this.clearOnClose) {\n      try {\n        delete window.jpFb.forms[this.id];\n        delete window.jpFb.parsers[this.id];\n        delete window.jpFb.operations[this.id];\n      } catch (e) { }\n    }\n  }\n\n  process() {\n    this.innerParser.preSaveHooks(\n      this.state\n    );\n\n    return this.form.getRawValue();\n  }\n\n  save(collectionId: string, documentId: string) {\n\n    const data = this.form.getRawValue();\n\n    /**\n     * Child forms processes are run on save\n     * of the parent form\n     */\n    if (this.parent) {\n      return of(data);\n    }\n\n    const processes = Object.entries<Operation>(window.jpFb.operations[this.id])\n      .sort((p1, p2) => p1[1].priority - p2[1].priority)\n      .filter(process => process[1].save);\n\n    if (!processes.length) {\n      return of(data);\n    }\n\n\n    const operations = [\n      ...processes.map(([pointer, process]) =>\n        switchMap(() => process.save({\n          cData: process.cData,\n          pointer,\n          collectionId,\n          documentId,\n          entryValue: this.value,\n          outputValue: data\n        }))\n      ),\n      map(() => data)\n    ]\n\n    return (of(data).pipe as any)(...operations)\n  }\n\n  saveAndProcess(collectionId: string, documentId: string) {\n    this.process();\n\n    return this.save(\n      collectionId,\n      documentId\n    );\n  }\n\n  validate(data: FormBuilderData) {\n    this.data = data;\n    try {\n      this.render();\n      return {\n        error: false,\n        message: ''\n      };\n    } catch (error) {\n      return {\n        error: true,\n        message: error.message || 'Invalid Schema provided!'\n      };\n    }\n  }\n\n  private render() {\n    const value = this.data.value || {};\n    const definitions = this.data.definitions || {};\n\n    if (!this.innerParser) {\n      this.innerParser = new Parser(\n        this.data.schema,\n        this.injector,\n        this.state,\n        this.role,\n        definitions\n      );\n\n      this.form = this.innerParser.buildForm(\n        value,\n        null,\n        '/',\n        false\n      );\n    } else {\n      this.form = this.innerParser.form;\n    }\n\n    if (!window.jpFb) {\n      window.jpFb = {\n        assignOperation: config => {\n          const {cData, ...operation} = config;\n          const parentForm = cData.parentForm || {} as any;\n          const formId = parentForm?.id || cData.formId || 'jp-fb-main';\n          const path = parentForm?.pointer ?\n            (parentForm.pointer + cData.pointer) :\n            cData.pointer;\n\n          window.jpFb.operations[formId][path] = {\n            priority: 1,\n            cData,\n            ...operation\n          };\n        },\n        exists: config => {\n          let value: any;\n\n          try {\n            value = get(config.outputValue, config.pointer);\n          } catch (e) {\n            return {exists: false};\n          }\n\n          return {value, exists: true};\n        },\n        change: (config) => {\n          if (!config.entryValue) {\n            return true;\n          }\n\n          let originalValue: any;\n\n          try {\n            originalValue = get(config.entryValue, config.pointer);\n          } catch (e) {\n            return true;\n          }\n\n          let currentValue: any;\n\n          try {\n            currentValue = get(config.outputValue, config.pointer);\n          } catch (e) {\n            return false;\n          }\n\n          return currentValue !== originalValue;\n        },\n        forms: {},\n        parsers: {},\n        operations: {}\n      }\n    }\n\n    window.jpFb.forms[this.id] = this.form;\n    // @ts-ignore\n    window.jpFb.parsers[this.id] = this.innerParser;\n\n    /**\n     * Child forms push operations to their parent form\n     */\n    if (!this.parent) {\n      window.jpFb.operations[this.id] = {};\n    }\n\n    this.innerParser.loadHooks();\n\n    this.segments = filterAndCompileSegments({\n      segments: this.data.segments || [{\n        title: '',\n        fields: Object.keys(this.innerParser.pointers),\n        columnsDesktop: 12,\n        type: this.defaultSegment || 'empty'\n      }],\n      parser: this.innerParser,\n      definitions,\n      injector: this.injector,\n      value,\n      formId: this.id,\n      parentForm: this.parent\n    });\n\n    if (this.changeSubscription) {\n      this.changeSubscription.unsubscribe();\n    }\n\n    if (this.statusSubscription) {\n      this.statusSubscription.unsubscribe();\n    }\n\n    this.changeSubscription = this.form.valueChanges\n      .subscribe(val => {\n        this.valueChanges.emit(val);\n      });\n\n    this.statusSubscription = this.form.statusChanges\n      .subscribe(val => {\n        this.validityChanges.emit(val === 'VALID');\n      });\n\n    this.cdr.markForCheck();\n\n    this.rendered.emit();\n  }\n}\n","<div class=\"grid\">\n  <ng-container *ngFor=\"let segment of segments\">\n    <ng-template [cdkPortalOutlet]=\"segment.component\"></ng-template>\n  </ng-container>\n</div>\n","import {moveItemInArray} from '@angular/cdk/drag-drop';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {Component, HostBinding, Inject, Injector, OnInit} from '@angular/core';\nimport {get, has} from 'json-pointer';\nimport {CustomComponent} from '../custom/custom.component';\nimport {SEGMENT_DATA} from '../injection-tokens/segment-data.token';\nimport {CompiledField} from '../interfaces/compiled-field.interface';\nimport {CompiledSegment} from '../interfaces/compiled-segment.interface';\nimport {Definitions} from '../interfaces/definitions.interface';\nimport {ArrayConfiguration} from '../interfaces/segment.interface';\nimport {compileFields} from '../utils/compile-fields';\nimport {filterAndCompileSegments} from '../utils/filter-and-compile-segments';\nimport {Parser, Pointer, Pointers} from '../utils/parser';\n\nexport interface SegmentData {\n  segment: CompiledSegment;\n  parser: Parser;\n  definitions: Definitions;\n  parent?: string;\n  index?: number;\n  formId?: string;\n  parentForm?: {\n    id: string;\n    pointer: string;\n  };\n}\n\n@Component({\n  selector: 'fb-segment',\n  template: ''\n})\nexport class SegmentComponent<T = any> implements OnInit {\n  constructor(\n    @Inject(SEGMENT_DATA) public sData: SegmentData,\n    public injector: Injector\n  ) { }\n\n  segment: CompiledSegment<T>;\n  arrayConfiguration: ArrayConfiguration;\n  pointers: Pointers;\n  arrayPointer: Pointer;\n  nestedSegments: CompiledSegment<T>[];\n  nestedArraySegments: Array<CompiledSegment[]> = [];\n  arrayFields: Array<CompiledField[]> = [];\n  components: ComponentPortal<CustomComponent>[];\n\n  @HostBinding('class') classes: string;\n  @HostBinding('id') id: string;\n\n  get parentIndex() {\n    if (!this.sData.parent) {\n      return 0;\n    }\n\n    return this.sData.parser.parent.pointers[this.sData.parent].arrayPointers.indexOf(this.pointers);\n  }\n\n  ngOnInit() {\n    this.segment = this.sData.segment;\n    this.arrayConfiguration = {\n      add: true,\n      remove: true,\n      sort: true,\n      reverse: true,\n      ...this.segment.arrayConfiguration || {}\n    };\n    this.classes = this.sData.segment.classes.join(' ');\n    this.pointers = this.sData.parser.pointers;\n    this.arrayPointer = this.pointers[(this.sData.parent || '') + this.segment.array];\n    this.id = this.sData.segment.id || '';\n    this.components = this.segment.customComponents || [];\n\n    /**\n     * Each segment compiles all nested segments\n     */\n    this.nestedSegments = this.compileNestedSegments(this.sData.segment.nestedSegments);\n\n    const {arrayFields, nestedArraySegments} = this.populateArrayFields(this.segment);\n\n    this.arrayFields = arrayFields;\n    this.nestedArraySegments = nestedArraySegments;\n  }\n\n  addArrayItem(\n    loadHook = true,\n    index?: number\n  ) {\n    const operation = this.arrayConfiguration.reverse ? 'unshift' : 'push';\n    // debugger;\n    const {arrayFields, nestedArraySegments} = this.generateArrayFieldsAndSegments(\n      index || (this.arrayConfiguration.reverse ? 0 : this.nestedArraySegments.length),\n      this.segment,\n      this.sData.parser.addArrayItem(\n        (this.sData.parent || '') + this.segment.array,\n        this.arrayPointer,\n        loadHook,\n        this.arrayConfiguration.reverse\n      )\n    )\n\n    this.arrayFields[operation](arrayFields);\n    this.nestedArraySegments[operation](nestedArraySegments);\n  }\n\n  moveArray(up: boolean, fromIndex: number) {\n    let toIndex: number;\n\n    if (up) {\n      toIndex = fromIndex === 0 ? this.arrayFields.length - 1 : fromIndex - 1;\n    } else {\n      toIndex = fromIndex === (this.arrayFields.length - 1) ? 0 : fromIndex + 1;\n    }\n\n    moveItemInArray(\n      this.arrayFields,\n      fromIndex,\n      toIndex\n    );\n\n    moveItemInArray(\n      this.nestedArraySegments,\n      fromIndex,\n      toIndex\n    );\n\n    this.sData.parser.moveArrayItem(\n      this.arrayPointer,\n      fromIndex,\n      toIndex\n    );\n  }\n\n  removeArrayItem(index: number) {\n    this.sData.parser.removeArrayItem(\n      this.arrayPointer,\n      index,\n    );\n    this.nestedArraySegments.splice(index, 1);\n    this.arrayFields.splice(index, 1);\n  }\n\n  generateArrayFields(pointers: any, segment: CompiledSegment<T> = this.segment) {\n\n    if (!segment.fields?.length) {\n      return [];\n    }\n\n    return compileFields({\n      parser: this.sData.parser,\n      definitions: this.sData.definitions,\n      fields: segment.fields,\n      pointers,\n      mutateKey: key => (this.sData.parent || '') + key,\n      formId: this.sData.formId,\n      parentForm: this.sData.parentForm,\n    });\n  }\n\n  compileNestedSegments(segments: CompiledSegment<T>[]) {\n\n    let parser = this.sData.parser;\n\n    if (this.sData.parent) {\n      parser = parser.copy({\n        pointers: this.pointers[this.sData.parent + this.sData.segment.array].arrayPointers[this.sData.index as number]\n      })\n    }\n\n    return filterAndCompileSegments({\n      segments: (segments || []).map(item => {\n        if (!item.classes?.length) {\n          item.classes = ['fb-field-12'];\n        }\n\n        return item;\n      }) || [],\n      parser,\n      definitions: this.sData.definitions,\n      injector: this.injector,\n      value: this.segment.entryValue,\n      formId: this.sData.formId,\n      parentForm: this.sData.parentForm\n    })\n  }\n\n  populateArrayFields(segment: CompiledSegment<T>) {\n    const arrayFields: Array<CompiledField[]> = [];\n    const nestedArraySegments: Array<CompiledSegment[]> = [];\n\n    /**\n     * Populate array fields\n     */\n    if (\n      segment.array &&\n      this.segment.entryValue &&\n      has(this.segment.entryValue, segment.array)\n    ) {\n\n      const values = get(this.segment.entryValue, segment.array);\n\n      values.forEach((value, index) => {\n        const generated = this.generateArrayFieldsAndSegments(index, segment, undefined, value);\n\n        arrayFields.push(generated.arrayFields);\n        nestedArraySegments.push(generated.nestedArraySegments);\n      });\n\n      for (let i = 0; i < values.length; i++) {\n        const pointers = (this.pointers[(this.sData.parent || '') + segment.array] as any).arrayPointers[i];\n        this.sData.parser.loadHooks(pointers);\n      }\n    }\n\n    return {\n      arrayFields,\n      nestedArraySegments\n    }\n  }\n\n  generateArrayFieldsAndSegments(\n    index: number,\n    segment: CompiledSegment<T>,\n    pointers?: Pointers,\n    value?: any\n  ) {\n\n    if (!pointers) {\n      pointers = this.pointers[(this.sData.parent || '') + segment.array].arrayPointers[index];\n    }\n\n    const parser = this.sData.parser.copy({pointers});\n    const arrayFields = this.generateArrayFields(pointers, segment);\n    const nestedArraySegments =  filterAndCompileSegments({\n      segments: this.sData.segment.nestedSegments || [],\n      parser,\n      definitions: this.sData.definitions,\n      injector: this.injector,\n      ...value && {value},\n      parent: (this.sData.parent || '') + segment.array,\n      index,\n      formId: this.sData.formId,\n      parentForm: this.sData.parentForm\n    })\n\n    return {arrayFields, nestedArraySegments};\n  }\n}\n","import {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TranslocoModule} from '@jsverse/transloco';\nimport {CustomComponent} from './custom/custom.component';\nimport {FieldComponent} from './field/field.component';\nimport {FormBuilderContextService} from './form-builder-context.service';\nimport {FormBuilderComponent} from './form-builder.component';\nimport {SegmentComponent} from './segment/segment.component';\n\n@NgModule({\n  declarations: [\n    SegmentComponent,\n    FieldComponent,\n    FormBuilderComponent,\n    CustomComponent\n  ],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n\n    /**\n     * External\n     */\n    PortalModule,\n    TranslocoModule\n  ],\n  exports: [FormBuilderComponent]\n})\nexport class FormBuilderModule {\n  static forRoot(): ModuleWithProviders<FormBuilderModule> {\n    return {\n      ngModule: FormBuilderModule,\n      providers: [FormBuilderContextService]\n    }\n  }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {combineLatest, Observable, of} from 'rxjs';\nimport {map, startWith} from 'rxjs/operators';\nimport {Action, CompiledField} from '../../interfaces/compiled-field.interface';\nimport {Parser} from '../../utils/parser';\nimport {safeEval} from '@jaspero/utils';\n\n@Pipe({name: 'showField'})\nexport class ShowFieldPipe implements PipeTransform {\n  transform(fields: CompiledField[], parser: Parser, index?: number): Observable<CompiledField[]> {\n\n    const changes = fields.reduce<Array<Observable<CompiledField | null>>>((filtered, field) => {\n      if (field.condition) {\n        filtered.push(\n          (\n            field.condition.deps.length ?\n              combineLatest(\n                field.condition.deps.map(dep => this.getListener(dep, parser, index))\n              ) :\n              this.getListener('form', parser, index)\n          )\n            .pipe(\n              map(() => field),\n              startWith(null),\n              map(() => this.checkField(field, parser, index) ? field : null)\n            )\n        );\n      } else {\n        filtered.push(\n          this.checkField(field, parser, index) ? of(field) : of(null)\n        );\n      }\n\n      return filtered;\n    }, []);\n\n    return combineLatest(changes).pipe(\n      map((items: Array<CompiledField | null>) => items.filter(it => it) as CompiledField[])\n    );\n  }\n\n  getListener(control: string, parser: Parser, valueIndex: number | undefined) {\n    if (control === 'form') {\n      return parser.form.valueChanges\n    }\n\n    const fields = control.split('/').filter(it => it);\n\n    let pointer;\n\n    for (let i = 0; i < fields.length; i++) {\n      const path = fields.map((item, index) =>\n        index > i ? '' : ('/' + item)\n      ).join('');\n      const field = '/' + fields[i];\n\n      if (!pointer) {\n        pointer = parser.pointers[field];\n      } else {\n        pointer = pointer.arrayPointers[valueIndex || 0][path];\n      }\n    }\n\n    return pointer.control.valueChanges;\n  }\n\n  checkField(field: CompiledField, parser: Parser, index: number | undefined) {\n    return (!field.onlyOn ||\n      (\n        Array.isArray(field.onlyOn) ?\n          field.onlyOn.includes(parser.state) :\n          field.onlyOn === parser.state\n      )\n    ) && this.checkCondition(field.condition, parser, index);\n  }\n\n  checkCondition(condition: CompiledField['condition'], parser: Parser, index: number | undefined) {\n    if (!condition) {\n      return true;\n    }\n\n    const row = parser.form.getRawValue();\n\n    let response = true;\n\n    (condition.action as Action[]).forEach(action => {\n      if (!action.eval) {\n        return;\n      }\n\n      let valid = false;\n\n      try {\n        valid = action.eval(row, index || 0);\n      } catch(error) {}\n\n      switch (action.type) {\n        case 'show': {\n          response = valid;\n          break;\n        }\n        case 'hide': {\n          response = !valid;\n          break;\n        }\n        case 'set-to': {\n          if (valid) {\n\n            const value = safeEval(action.configuration.value);\n\n            parser.pointers[condition.field].control.setValue(\n              typeof value === 'function' ? value(row, index || 0) : value, {emitEvent: false}\n            );\n          }\n          break;\n        }\n        default: {\n          response = true;\n          break;\n        }\n      }\n    });\n\n    return response;\n  }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ShowFieldPipe} from './show-field.pipe';\n\n@NgModule({\n  declarations: [ShowFieldPipe],\n  imports: [CommonModule],\n  exports: [ShowFieldPipe]\n})\nexport class ShowFieldModule { }\n","import {Observable, of} from 'rxjs';\nimport {WhereFilter} from '../interfaces/where-filter.interface';\n\nexport abstract class DbService {\n\n  getDocuments(\n    moduleId: string,\n    pageSize?: number,\n    sort?: {\n      active: string;\n      direction: string;\n    },\n    cursor?: any,\n    filters?: WhereFilter[]\n  ): Observable<any[]> {\n    return of([]);\n  }\n\n  getDocumentsSimple(\n    moduleId: string,\n    orderBy?: string,\n    filter?: WhereFilter\n  ): Observable<any[]> {\n    return of([]);\n  }\n\n  getSubdocumentsSimple(\n    moduleId: string,\n    orderBy?: string,\n    filter?: WhereFilter\n  ): Observable<any[]> {\n    return of([]);\n  }\n\n  getStateChanges(\n    moduleId: string,\n    pageSize?: number,\n    sort?: {\n      active: string;\n      direction: string;\n    },\n    cursor?: any,\n    filters?: WhereFilter[],\n  ): Observable<any[]> {\n    return of([]);\n  }\n\n  getDocument<T = any>(\n    moduleId: string,\n    documentId: string,\n    stream = false\n  ): Observable<T> {\n    return of();\n  }\n\n  setDocument(\n    moduleId: string,\n    documentId: string,\n    data: any,\n    options?: any\n  ): Observable<void> {\n    return of();\n  }\n\n  removeDocument(moduleId: string, documentId: string): Observable<void> {\n    return of();\n  }\n\n  createUserAccount(email: string, password: string): Observable<{id: string}> {\n    return of();\n  }\n\n  removeUserAccount(id: string): Observable<any> {\n    return of();\n  }\n\n  createId() {\n    return '';\n  }\n}\n","import {Observable} from 'rxjs';\n\nexport abstract class StorageService {\n  storage: any;\n\n  upload(path: string, data: any, metadata?: any): any {}\n\n  getDownloadURL(ref: any): Observable<string> {\n    return  new Observable();\n  }\n\n  deleteObject(url: string): Observable<void> {\n    return new Observable();\n  }\n}\n","import {UntypedFormGroup} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {Parser} from '../utils/parser';\nimport {FieldData} from './field-data.interface';\n\nexport interface ProcessConfig<T = FieldData> {\n  cData: T;\n  pointer: string;\n  collectionId: string;\n  documentId: string;\n  /**\n   * Value at form initialization.\n   * This will only be available when\n   * updating or deleting\n   */\n  entryValue?: any;\n\n  /**\n   * This is the value passed on to further\n   * operations and returned by the form\n   */\n  outputValue: any;\n}\n\nexport interface Process<T = FieldData> {\n  (data: ProcessConfig<T>): Observable<any>\n}\n\nexport interface Operation<T = FieldData> {\n  cData: T;\n  priority?: number;\n  save?: Process<T>;\n  delete?: Process<T>;\n};\n\nexport interface GlobalState {\n  forms: {[id: string]: UntypedFormGroup};\n  parsers: {[id: string]: Parser};\n\n  /**\n   * Operators are sorted in order of priority\n   * and executed when the \"save\" method is called.\n   *\n   * They should each mutate the \"outputValue\" which\n   * is forwarded along to each subsuqent \"save\"\n   * method and returned by the \"save\" method.\n   *\n   * TODO:\n   * Implement Delete\n   */\n  operations: {\n    [id: string]: {\n      [pointer: string]: Operation\n    }\n  };\n\n  /**\n   * Utilities\n   */\n\n  /**\n   * Creates an operation on the correct property\n   */\n  assignOperation: (config: Operation) => void;\n\n  /**\n   * Verifies that the requested pointer exists and returns its value\n   */\n  exists: (config: ProcessConfig) => {\n    exists: boolean;\n    value?: any\n  };\n\n  /**\n   * Verifies that value has changed.\n   * It only works with primitives.\n   */\n  change: (config: ProcessConfig) => boolean;\n}\n","export enum FilterMethod {\n  Equal = '==',\n  GreaterThen = '>',\n  GreaterThenOrEqual = '>=',\n  LessThen = '<',\n  LessThenOrEqual = '<=',\n  In = 'in',\n  ArrayContains = 'array-contains',\n  ArrayContainsAny = 'array-contains-any'\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const ADDITIONAL_CONTEXT = new InjectionToken<{}>('ADDITIONAL_CONTEXT');\n","import {InjectionToken} from '@angular/core';\n\nexport const STORAGE_URL = new InjectionToken<{}>('STORAGE_URL');\n","import {safeEval} from '@jaspero/utils';\nimport {Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {FieldData} from '../interfaces/field-data.interface';\n\nexport interface HSD {\n  type?: 'html' | 'static' | 'dynamic';\n  value: string;\n}\n\nexport function getHsd(\n  key: string,\n  data: FieldData\n): Observable<string> {\n  if (data[key]) {\n\n    let item: any;\n\n    if (typeof data[key] === 'string') {\n      return of(data[key])\n    }\n\n    switch (data[key].type) {\n      case 'dynamic':\n        item = safeEval(data[key].value);\n\n        if (item) {\n          return data.form.valueChanges\n            .pipe(\n              map(value =>\n                item(\n                  data.control.value,\n                  value\n                )\n              )\n            );\n        }\n\n        break;\n      case 'static':\n        item = safeEval(data[key].value);\n\n        if (item) {\n          return of(item(\n            data.control.value,\n            data.form.getRawValue()\n          ));\n        }\n        break;\n      case 'html':\n      default:\n        return of(data[key].value);\n    }\n  }\n\n  return of('');\n}\n","/**\n * Remove all characters that are not alphanumeric.\n *\n * In case of not finding any alphanumeric characters\n * return string `file-{random number}`\n *\n * @param name\n * File name to format\n */\nexport const formatFileName = (name: string): string => {\n  const extension = name.slice(name.lastIndexOf('.'));\n  name = name.slice(0, name.lastIndexOf('.'));\n  name = (name.match(/[a-zA-Z\\d.]/g) || []).join('');\n  return !!name.length ? name + extension : `file-${Math.floor(Math.random() * 10 ** 5) + 1}${extension}`;\n};\n","import {GeneratedImage} from '../interfaces/generated-image.interface';\n\nexport function formatGeneratedImages(data: GeneratedImage[]) {\n  return data.reduce((acc, cur, index) => {\n    acc[`generate_${index + 1}`] = Object.entries(cur).reduce((generated, [key, value]) => {\n      generated += `----${key}:${value}`;\n      return generated;\n    }, '');\n    return acc;\n  }, {}) as {\n    [key: string]: string;\n  };\n}\n","import {\n  AbstractControl,\n  UntypedFormArray,\n  UntypedFormControl,\n  UntypedFormGroup\n} from '@angular/forms';\n\n/**\n * Deep clones the given AbstractControl, preserving values, validators, async validators, and disabled status.\n * @param control AbstractControl\n * @returns AbstractControl\n */\nexport function cloneAbstractControl<T extends AbstractControl>(control: T, entryValue?: any): T {\n  let newControl: T;\n\n  if (control instanceof UntypedFormGroup) {\n    const formGroup = new UntypedFormGroup(\n      {},\n      control.validator,\n      control.asyncValidator\n    );\n    const controls = control.controls;\n\n    Object.keys(controls).forEach(key => {\n      formGroup.addControl(key, cloneAbstractControl(controls[key]));\n    });\n\n    newControl = formGroup as any;\n  } else if (control instanceof UntypedFormArray) {\n    const formArray = new UntypedFormArray(\n      [],\n      control.validator,\n      control.asyncValidator\n    );\n\n    control.controls.forEach(formControl =>\n      formArray.push(cloneAbstractControl(formControl))\n    );\n\n    newControl = formArray as any;\n  } else if (control instanceof UntypedFormControl) {\n    newControl = new UntypedFormControl(\n      entryValue !== undefined ? entryValue : control.value,\n      control.validator,\n      control.asyncValidator\n    ) as any;\n  } else {\n    throw new Error('Error: unexpected control value');\n  }\n\n  if (control.disabled) {\n    newControl.disable({emitEvent: false});\n  }\n\n  return newControl;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FormBuilderService","i2"],"mappings":"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"}