{"version":3,"file":"novo-elements-elements-form.mjs","sources":["../../../projects/novo-elements/src/elements/form/controls/BaseControl.ts","../../../projects/novo-elements/src/elements/form/controls/ace-editor/AceEditorControl.ts","../../../projects/novo-elements/src/elements/form/FormValidators.ts","../../../projects/novo-elements/src/elements/form/controls/address/AddressControl.ts","../../../projects/novo-elements/src/elements/form/controls/check-list/CheckListControl.ts","../../../projects/novo-elements/src/elements/form/controls/checkbox/CheckboxControl.ts","../../../projects/novo-elements/src/elements/form/controls/code-editor/CodeEditorControl.ts","../../../projects/novo-elements/src/elements/form/controls/custom/CustomControl.ts","../../../projects/novo-elements/src/elements/form/controls/date/DateControl.ts","../../../projects/novo-elements/src/elements/form/controls/date-time/DateTimeControl.ts","../../../projects/novo-elements/src/elements/form/controls/editor/EditorControl.ts","../../../projects/novo-elements/src/elements/form/controls/file/FileControl.ts","../../../projects/novo-elements/src/elements/form/controls/grouped/GroupedControl.ts","../../../projects/novo-elements/src/elements/form/controls/native-select/NativeSelectControl.ts","../../../projects/novo-elements/src/elements/form/controls/picker/PickerControl.ts","../../../projects/novo-elements/src/elements/form/controls/quick-note/QuickNoteControl.ts","../../../projects/novo-elements/src/elements/form/controls/radio/RadioControl.ts","../../../projects/novo-elements/src/elements/form/controls/read-only/ReadOnlyControl.ts","../../../projects/novo-elements/src/elements/form/controls/select/SelectControl.ts","../../../projects/novo-elements/src/elements/form/controls/switch/SwitchControl.ts","../../../projects/novo-elements/src/elements/form/controls/text-area/TextAreaControl.ts","../../../projects/novo-elements/src/elements/form/controls/textbox/TextBoxControl.ts","../../../projects/novo-elements/src/elements/form/controls/tiles/TilesControl.ts","../../../projects/novo-elements/src/elements/form/controls/time/TimeControl.ts","../../../projects/novo-elements/src/elements/form/controls/timezone/TimezoneControl.ts","../../../projects/novo-elements/src/elements/form/controls/ControlFactory.ts","../../../projects/novo-elements/src/elements/form/NovoFormControl.ts","../../../projects/novo-elements/src/elements/form/NovoFormGroup.ts","../../../projects/novo-elements/src/elements/form/utils/FormUtils.ts","../../../projects/novo-elements/src/elements/form/FieldInteractionModals.ts","../../../projects/novo-elements/src/elements/form/FieldInteractionApi.ts","../../../projects/novo-elements/src/elements/form/Control.ts","../../../projects/novo-elements/src/elements/form/ControlGroup.ts","../../../projects/novo-elements/src/elements/form/ControlGroup.html","../../../projects/novo-elements/src/elements/form/extras/address/Address.ts","../../../projects/novo-elements/src/elements/form/extras/file/extras/file/File.ts","../../../projects/novo-elements/src/elements/form/extras/file/FileInput.ts","../../../projects/novo-elements/src/elements/form/extras/file/FileInput.html","../../../projects/novo-elements/src/elements/form/ControlTemplates.ts","../../../projects/novo-elements/src/elements/form/DynamicForm.ts","../../../projects/novo-elements/src/elements/form/extras/number-range/number-range.component.ts","../../../projects/novo-elements/src/elements/form/extras/FormExtras.module.ts","../../../projects/novo-elements/src/elements/form/Form.ts","../../../projects/novo-elements/src/elements/form/Form.module.ts","../../../projects/novo-elements/src/elements/form/novo-elements-elements-form.ts"],"sourcesContent":["// NG2\nimport { EventEmitter } from '@angular/core';\nimport { Validators } from '@angular/forms';\n// APP\nimport { Helpers, notify } from 'novo-elements/utils';\nimport type { IMaskOptions } from '../Control';\nimport type { NovoControlGroupAddConfig } from '../ControlGroup';\n\nexport interface NovoGroupedControlConfig {\n  label?: string;\n  icon?: string;\n  add?: NovoControlGroupAddConfig;\n  remove?: boolean;\n  key: string;\n  initialValue?: {}[];\n}\n\nclass ControlConfig {\n  alwaysActive?: Boolean;\n  allowInvalidDate?: boolean;\n  appendToBody: boolean; // Deprecated;\n  associatedEntity: string;\n  asyncValidators?: Array<any>;\n  checkboxLabel: string;\n  closeOnSelect: boolean;\n  config: any;\n  controlType: string;\n  currencyFormat: string;\n  customControl?: any;\n  customControlConfig?: any;\n  dataSpecialization: string;\n  dataType: string;\n  dateFormat?: string;\n  description?: string;\n  dirty: boolean;\n  disabled: boolean;\n  enabled: boolean;\n  encrypted: boolean;\n  endDate?: Date | Number;\n  fileBrowserImageUploadUrl?: string;\n  forceClear: EventEmitter<any>;\n  headerConfig: any;\n  hidden: boolean;\n  interactions: Array<{ event?: 'change' | 'focus' | string; invokeOnInit?: boolean; script? }>;\n  isEmpty?: Function;\n  key: string;\n  label: string;\n  maskOptions?: IMaskOptions;\n  maxlength: number;\n  metaType: string;\n  military?: boolean;\n  minimal?: boolean;\n  minlength: number;\n  multiple: boolean;\n  name: string;\n  options: Array<any>;\n  optionsType: string;\n  parentScrollSelector: string;\n  placeholder: string;\n  popoverAlways?: boolean;\n  popoverAnimation?: boolean;\n  popoverContent?: string;\n  popoverDisabled?: boolean;\n  popoverDismissTimeout?: number;\n  popoverHtmlContent?: string;\n  popoverOnHover?: boolean;\n  popoverPlacement?: 'left' | 'right' | 'top' | 'bottom';\n  popoverTitle?: string;\n  readOnly: boolean; // \"disabled\", so it appears in the model still;\n  removeTooltipArrow?: boolean;\n  required: boolean;\n  restrictFieldInteractions?: boolean;\n  sortOrder: number;\n  startDate?: Date | Number;\n  startupFocus?: boolean;\n  subType?: string;\n  template?: any;\n  textMaskEnabled?: boolean;\n  tooltip?: string;\n  tooltipAutoPosition?: boolean;\n  tooltipPosition?: string;\n  tooltipPreline?: boolean;\n  tooltipSize?: string;\n  type: string;\n  validators: Array<any>;\n  value: any;\n  warning?: string;\n  width: number;\n  layoutOptions?: {\n    customActions?: boolean;\n    download?: boolean;\n    draggable?: boolean;\n    edit?: boolean;\n    iconStyle?: string;\n    labelStyle?: string;\n    order?: string;\n    removable?: boolean;\n    customValidation?: { action: string; fn: Function }[];\n    removableWhenNew?: boolean;\n  };\n  tipWell?: {\n    button?: boolean;\n    icon?: string;\n    tip: string;\n  };\n  isEmbedded = false;\n  isInlineEmbedded = false;\n  weekStart?: number;\n  highlighted = false;\n  disabledDateMessage?: string;\n}\n\nexport type NovoControlConfig = Partial<ControlConfig>;\n\nexport class BaseControl extends ControlConfig {\n  __type: string = 'BaseControl';\n  __config: NovoControlConfig;\n\n  constructor(type: string = 'BaseControl', config: NovoControlConfig = {}) {\n    super();\n    this.__type = type;\n    this.__config = config;\n    this.alwaysActive = config.alwaysActive;\n    this.validators = config.validators || [];\n    this.asyncValidators = config.asyncValidators || [];\n    this.value = config.value;\n    this.key = config.key || '';\n    this.label = config.label || '';\n    this.checkboxLabel = config.checkboxLabel;\n    this.name = config.name || '';\n    this.required = !!config.required;\n    this.hidden = !!config.hidden;\n    this.encrypted = !!config.encrypted;\n    this.sortOrder = config.sortOrder === undefined ? 1 : config.sortOrder;\n    this.controlType = config.controlType || '';\n    this.type = config.type;\n    this.subType = config.subType;\n    this.metaType = config.metaType;\n    this.placeholder = config.placeholder || '';\n    this.config = config.config || null;\n    this.dirty = !!(config.value !== undefined && config.value !== null);\n    this.multiple = !!config.multiple;\n    this.headerConfig = config.headerConfig || null;\n    this.currencyFormat = config.currencyFormat || null;\n    this.associatedEntity = config.associatedEntity || null;\n    this.optionsType = config.optionsType || null;\n    this.options = config.options || [];\n    this.forceClear = new EventEmitter();\n    this.readOnly = !!config.readOnly || !!config.disabled;\n    this.disabled = !!config.disabled;\n    this.enabled = true;\n    this.layoutOptions = config.layoutOptions || {};\n    this.military = !!config.military;\n    this.dateFormat = config.dateFormat;\n    this.textMaskEnabled = config.textMaskEnabled;\n    this.maskOptions = config.maskOptions;\n    this.allowInvalidDate = config.allowInvalidDate;\n    this.startDate = config.startDate;\n    this.endDate = config.endDate;\n    this.restrictFieldInteractions = !!config.restrictFieldInteractions;\n    this.highlighted = !!config.highlighted;\n    if (!Helpers.isEmpty(config.warning)) {\n      this.warning = config.warning;\n    }\n\n    if (this.required) {\n      this.validators.push(Validators.required);\n    }\n    if (!Helpers.isBlank(config.maxlength)) {\n      this.maxlength = config.maxlength;\n      this.validators.push(Validators.maxLength(this.maxlength));\n    }\n    if (!Helpers.isBlank(config.minlength)) {\n      this.minlength = config.minlength;\n      this.validators.push(Validators.minLength(this.minlength));\n    }\n    this.closeOnSelect = !!config.closeOnSelect;\n    this.interactions = config.interactions;\n    this.dataSpecialization = config.dataSpecialization;\n    this.dataType = config.dataType;\n    this.appendToBody = !!config.appendToBody;\n    if (this.appendToBody) {\n      notify('\\'appendToBody\\' has been deprecated. Please remove this attribute.');\n    }\n    this.parentScrollSelector = config.parentScrollSelector;\n    this.description = config.description;\n    if (config.tooltip) {\n      this.tooltip = config.tooltip;\n      this.tooltipPosition = config.tooltipPosition;\n      this.tooltipSize = config.tooltipSize;\n      this.tooltipPreline = config.tooltipPreline;\n      this.removeTooltipArrow = config.removeTooltipArrow;\n      this.tooltipAutoPosition = config.tooltipAutoPosition;\n    }\n    this.popoverAlways = config.popoverAlways;\n    this.popoverAnimation = config.popoverAnimation;\n    this.popoverContent = config.popoverContent;\n    this.popoverDisabled = config.popoverDisabled;\n    this.popoverDismissTimeout = config.popoverDismissTimeout;\n    this.popoverHtmlContent = config.popoverHtmlContent;\n    this.popoverOnHover = config.popoverOnHover;\n    this.popoverPlacement = config.popoverPlacement;\n    this.popoverTitle = config.popoverTitle;\n    this.template = config.template;\n    this.customControlConfig = config.customControlConfig;\n    this.tipWell = config.tipWell;\n    this.width = config.width;\n    this.startupFocus = !!config.startupFocus;\n    if (config.fileBrowserImageUploadUrl) {\n      this.fileBrowserImageUploadUrl = config.fileBrowserImageUploadUrl;\n    }\n    if (config.isEmpty) {\n      this.isEmpty = config.isEmpty;\n    }\n    this.weekStart = config.weekStart || 0;\n    this.disabledDateMessage = config.disabledDateMessage;\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class AceEditorControl extends BaseControl {\n  controlType = 'ace-editor';\n\n  constructor(config: NovoControlConfig) {\n    super('AceEditorControl', config);\n  }\n}\n","import { Helpers } from 'novo-elements/utils';\n\nconst MAX_INTEGER = 2147483647;\nconst MIN_YEAR = 1753;\n\nexport class FormValidators {\n  private showStateRequiredFlag(subfield, control): boolean {\n    return (\n      subfield === 'state' &&\n      !Helpers.isEmpty(control.config.state) &&\n      control.config.state.required &&\n      Helpers.isBlank(control.value.state) &&\n      control.config.state.updated &&\n      !Helpers.isBlank(control.value.countryName) &&\n      control.config.state.pickerConfig &&\n      control.config.state.pickerConfig.defaultOptions &&\n      control.config.state.pickerConfig.defaultOptions.length > 0\n    );\n  }\n\n  // Makes sure the control value does not exceed the max integer value\n  static maxInteger(control) {\n    return control.value < MAX_INTEGER ? null : { integerTooLarge: true };\n  }\n\n  // Makes sure the control value is above the minimum year\n  static minYear(control) {\n    if (!control.value) {\n      return null;\n    }\n    return control.value >= MIN_YEAR ? null : { minYear: true };\n  }\n\n  // Makes sure the control value does not exceed the max number value\n  static maxDouble(control) {\n    return control.value < Number.MAX_SAFE_INTEGER ? null : { doubleTooLarge: true };\n  }\n\n  // Make sure the control value is an email\n  static isEmail(control) {\n    const EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;\n    return !control.value || EMAIL_REGEXP.test(control.value) ? null : { invalidEmail: true };\n  }\n  // Makes sure the control value is a valid address\n  static isValidAddress(control) {\n    const fieldList: string[] = ['address1', 'address2', 'city', 'state', 'zip', 'countryID'];\n    const invalidAddressFields: string[] = [];\n    const maxlengthFields: string[] = [];\n    let returnVal: {\n      invalidAddress?: boolean;\n      invalidAddressFields?: string[];\n      invalidAddressForForm?: boolean;\n      maxlength?: boolean;\n      maxlengthFields?: string[];\n    } = null;\n    let maxlengthError: boolean = false;\n    const showCountryRequiredFlag = (subfield, ctrl) => {\n      return (\n        subfield === 'countryID' &&\n        !Helpers.isEmpty(ctrl.config.countryID) &&\n        ctrl.config.countryID.required &&\n        Helpers.isBlank(ctrl.value.countryName) &&\n        ctrl.config.countryID.updated\n      );\n    };\n\n    const showStateRequiredFlag = (subfield, ctrl): boolean => {\n      return (\n        subfield === 'state' &&\n        !Helpers.isEmpty(ctrl.config.state) &&\n        ctrl.config.state.required &&\n        Helpers.isBlank(ctrl.value.state) &&\n        ctrl.config.state.updated &&\n        !Helpers.isBlank(ctrl.value.countryName) &&\n        ctrl.config.state.pickerConfig &&\n        ctrl.config.state.pickerConfig.defaultOptions &&\n        ctrl.config.state.pickerConfig.defaultOptions.length > 0\n      );\n    };\n\n    if (control.value && control.config) {\n      let valid = true;\n      let formValidity = true;\n      fieldList.forEach((subfield: string) => {\n        if (!Helpers.isEmpty(control.config[subfield])) {\n          if (\n            (['countryID', 'state'].indexOf(subfield) === -1 &&\n              control.config[subfield].required &&\n              !Helpers.isBlank(control.value[subfield]) &&\n              Helpers.isEmpty(control.value[subfield])) ||\n            showCountryRequiredFlag(subfield, control) ||\n            showStateRequiredFlag(subfield, control)\n          ) {\n            valid = false;\n            invalidAddressFields.push(control.config[subfield].label);\n          }\n          if (\n            ((subfield !== 'countryID' && control.config[subfield].required && Helpers.isEmpty(control.value[subfield])) ||\n              (subfield === 'countryID' &&\n                !Helpers.isEmpty(control.config.countryID) &&\n                control.config.countryID.required &&\n                Helpers.isEmpty(control.value.countryName))) &&\n            !(\n              subfield === 'state' &&\n              !Helpers.isBlank(control.value.countryName) &&\n              control.config.state.pickerConfig &&\n              control.config.state.pickerConfig.defaultOptions &&\n              control.config.state.pickerConfig.defaultOptions.length === 0\n            )\n          ) {\n            formValidity = false;\n          }\n          if (\n            !Helpers.isEmpty(control.config[subfield].maxlength) &&\n            !Helpers.isEmpty(control.value[subfield]) &&\n            control.value[subfield].length > control.config[subfield].maxlength\n          ) {\n            maxlengthError = true;\n            maxlengthFields.push(subfield);\n            formValidity = false;\n          }\n        }\n      });\n      if (!valid || !formValidity || maxlengthError) {\n        returnVal = {};\n      }\n      if (!valid) {\n        returnVal.invalidAddress = true;\n        returnVal.invalidAddressFields = invalidAddressFields;\n      }\n      if (!formValidity) {\n        returnVal.invalidAddressForForm = true;\n      }\n      if (maxlengthError) {\n        returnVal.maxlength = true;\n        returnVal.maxlengthFields = maxlengthFields;\n      }\n      return returnVal;\n    }\n    return null;\n  }\n}\n","// APP\nimport { FormValidators } from '../../FormValidators';\nimport { BaseControl, NovoControlConfig } from '../BaseControl';\n\nexport class AddressControl extends BaseControl {\n  controlType = 'address';\n\n  constructor(config: NovoControlConfig) {\n    super('AddressControl', config);\n    this.validators.push(FormValidators.isValidAddress);\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class CheckListControl extends BaseControl {\n  controlType = 'checklist';\n\n  constructor(config: NovoControlConfig) {\n    super('CheckListControl', config);\n    this.options = config.options || [];\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class CheckboxControl extends BaseControl {\n  controlType = 'checkbox';\n\n  constructor(config: NovoControlConfig) {\n    super('CheckboxControl', config);\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from '../BaseControl';\n\nexport class CodeEditorControl extends BaseControl {\n  controlType = 'code-editor';\n\n  constructor(config: NovoControlConfig) {\n    super('CodeEditorControl', config);\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class CustomControl extends BaseControl {\n  controlType = 'custom';\n\n  constructor(config: NovoControlConfig) {\n    super(config.template, config);\n    this.controlType = config.template;\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class DateControl extends BaseControl {\n  controlType = 'date';\n\n  constructor(config: NovoControlConfig) {\n    super('DateControl', config);\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class DateTimeControl extends BaseControl {\n  controlType = 'date-time';\n\n  constructor(config: NovoControlConfig) {\n    super('DateTimeControl', config);\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class EditorControl extends BaseControl {\n  controlType = 'editor';\n  minimal: boolean = false;\n\n  constructor(config: NovoControlConfig) {\n    super('EditorControl', config);\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class FileControl extends BaseControl {\n  controlType = 'file';\n\n  constructor(config: NovoControlConfig) {\n    super('FileControl', config);\n    // TODO - translate\n    this.placeholder = config.placeholder;\n    this.multiple = config.multiple;\n  }\n}\n","// APP\nimport { NovoGroupedControlConfig } from './../BaseControl';\n\nexport class GroupedControl implements NovoGroupedControlConfig {\n  public __type: string;\n  key: string;\n\n  constructor(config: NovoGroupedControlConfig) {\n    this.__type = 'GroupedControl';\n    Object.keys(config).forEach((key) => (this[key] = config[key]));\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class NativeSelectControl extends BaseControl {\n  controlType = 'native-select';\n  options = [];\n\n  constructor(config: NovoControlConfig) {\n    super('NativeSelectControl', config);\n    this.options = config.options || [];\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class PickerControl extends BaseControl {\n  controlType = 'picker';\n  options = [];\n\n  constructor(config: NovoControlConfig) {\n    super('PickerControl', config);\n    this.options = config.options || [];\n  }\n}\n\nexport class TablePickerControl extends PickerControl {\n  constructor(config: NovoControlConfig) {\n    super(Object.assign(config, { parentScrollSelector: '.table-container' }));\n    this.__type = 'TablePickerControl';\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from '../BaseControl';\n\nexport class QuickNoteControl extends BaseControl {\n  controlType = 'quick-note';\n  options = [];\n\n  constructor(config: NovoControlConfig) {\n    super('QuickNoteControl', config);\n    this.options = config.options || [];\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class RadioControl extends BaseControl {\n  controlType = 'radio';\n  options = [];\n\n  constructor(config: NovoControlConfig) {\n    super('RadioControl', config);\n    this.options = config.options || [];\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class ReadOnlyControl extends BaseControl {\n  controlType = 'read-only';\n\n  constructor(config: NovoControlConfig) {\n    super('ReadOnlyControl', config);\n    config.readOnly = true;\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class SelectControl extends BaseControl {\n  controlType = 'select';\n  options = [];\n\n  constructor(config: NovoControlConfig) {\n    super('SelectControl', config);\n    this.options = config.options || [];\n    this.placeholder = config.placeholder || '';\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from '../BaseControl';\n\nexport class SwitchControl extends BaseControl {\n  controlType = 'switch';\n\n  constructor(config: NovoControlConfig) {\n    super('SwitchControl', config);\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class TextAreaControl extends BaseControl {\n  controlType = 'text-area';\n\n  constructor(config: NovoControlConfig) {\n    super('TextAreaControl', config);\n  }\n}\n","// APP\nimport { FormValidators } from './../../FormValidators';\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class TextBoxControl extends BaseControl {\n  controlType: string = 'textbox';\n  type: string;\n  subType: string;\n\n  constructor(config: NovoControlConfig) {\n    super('TextBoxControl', config);\n    this.type = this.getTextboxType(config.type) || '';\n    this.subType = config.type || '';\n    this.setValidators(this.subType);\n  }\n\n  setValidators(type) {\n    switch (type) {\n      case 'email':\n        this.validators.push(FormValidators.isEmail);\n        break;\n      case 'number':\n      case 'currency':\n        this.validators.push(FormValidators.maxInteger);\n        break;\n      case 'float':\n      case 'percentage':\n        this.validators.push(FormValidators.maxDouble);\n        break;\n      case 'year':\n        this.validators.push(FormValidators.minYear);\n        break;\n      default:\n        break;\n    }\n  }\n\n  getTextboxType(type) {\n    switch (type) {\n      case 'percentage':\n      case 'currency':\n      case 'float':\n      case 'year':\n        return 'number';\n      default:\n        return type;\n    }\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class TilesControl extends BaseControl {\n  controlType = 'tiles';\n  options = [];\n\n  constructor(config: NovoControlConfig) {\n    super('TilesControl', config);\n    this.options = config.options || [];\n  }\n}\n","// APP\nimport { BaseControl, NovoControlConfig } from './../BaseControl';\n\nexport class TimeControl extends BaseControl {\n  controlType = 'time';\n\n  constructor(config: NovoControlConfig) {\n    super('TimeControl', config);\n  }\n}\n","// APP\nimport { findTimeZone, getZonedTime, listTimeZones } from 'timezone-support';\nimport { formatZonedTime } from 'novo-elements/utils';\nimport { BaseControl, NovoControlConfig } from '../BaseControl';\n\nexport class TimezoneControl extends BaseControl {\n  controlType = 'timezone';\n  options = [];\n\n  constructor(config: NovoControlConfig) {\n    super('TimezoneControl', config);\n    this.options = this.buildTimezones(new Date());\n    this.placeholder = config.placeholder || '';\n    // current timezone\n    const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n    this.value = tz;\n  }\n\n  private buildTimezones = (compareDate: Date) => {\n    const timezones = listTimeZones()\n      .map((zone) => {\n        const timezone = findTimeZone(zone);\n        const zonedTime = getZonedTime(compareDate, timezone);\n        const formatted = formatZonedTime(zonedTime, `z - [${zone}] ([GMT] Z)`).replace('_', ' ');\n\n        const option = {\n          value: zone,\n          label: formatted,\n          offset: zonedTime.zone.offset,\n        };\n        return option;\n      })\n      // Formats 'noisy' timezones without a letter acronym.\n      .map((option) => {\n        const rgx = /(^(\\+|-)\\d+\\s- )/;\n        const matches = option.label.match(rgx);\n        if (matches) {\n          const prefix = matches[0];\n          option.label = option.label.split(prefix)[1];\n        }\n        return option;\n      })\n      // Sorts W -> E, prioritizes america. could be more nuanced based on system tz but simple for now\n      .sort((a, b) => {\n        const offsetDelta = b.offset - a.offset;\n        if (offsetDelta !== 0) {\n          return offsetDelta;\n        }\n        if (a.label < b.label) {\n          return -1;\n        }\n        if (a.label > b.label) {\n          return 1;\n        }\n        return 0;\n      });\n    return timezones;\n  };\n}\n","import { BaseControl } from './BaseControl';\nimport {\n  AddressControl,\n  CheckboxControl,\n  CheckListControl,\n  DateTimeControl,\n  EditorControl,\n  FileControl,\n  NativeSelectControl,\n  PickerControl,\n  QuickNoteControl,\n  RadioControl,\n  ReadOnlyControl,\n  SelectControl,\n  SwitchControl,\n  TablePickerControl,\n  TextAreaControl,\n  TextBoxControl,\n  TilesControl,\n  TimeControl,\n} from './index';\n\nexport class ControlFactory {\n  static create(type: string, config: BaseControl): BaseControl {\n    switch (type) {\n      case 'AddressControl':\n        return new AddressControl(config);\n      case 'CheckboxControl':\n        return new CheckboxControl(config);\n      case 'CheckListControl':\n        return new CheckListControl(config);\n      case 'DateTimeControl':\n        return new DateTimeControl(config);\n      case 'EditorControl':\n        return new EditorControl(config);\n      case 'FileControl':\n        return new FileControl(config);\n      case 'NativeSelectControl':\n        return new NativeSelectControl(config);\n      case 'PickerControl':\n        return new PickerControl(config);\n      case 'TablePickerControl':\n        return new TablePickerControl(config);\n      case 'QuickNoteControl':\n        return new QuickNoteControl(config);\n      case 'RadioControl':\n        return new RadioControl(config);\n      case 'ReadOnlyControl':\n        return new ReadOnlyControl(config);\n      case 'TextAreaControl':\n        return new TextAreaControl(config);\n      case 'TextBoxControl':\n        return new TextBoxControl(config);\n      case 'SelectControl':\n        return new SelectControl(config);\n      case 'SwitchControl':\n        return new SwitchControl(config);\n      case 'TilesControl':\n        return new TilesControl(config);\n      case 'TimeControl':\n        return new TimeControl(config);\n      default:\n        console.warn(\n          '[ControlFactory] - unable to find control for type. Make sure to set \"editorType\" and \"editorConfig\" on your column',\n          type,\n        );\n        return null;\n    }\n  }\n}\n","// NG2\nimport { EventEmitter } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { notify } from 'novo-elements/utils';\nimport type { IMaskOptions } from './Control';\n// APP\nimport { NovoControlConfig } from './FormControls';\n\nexport class NovoFormControl extends FormControl {\n  displayValueChanges: EventEmitter<any> = new EventEmitter<any>();\n  hidden: boolean;\n  encrypted: boolean;\n  key: string;\n  required: boolean;\n  readOnly: boolean;\n  hasRequiredValidator: boolean;\n  label: string;\n  tooltip: string;\n  tooltipPosition: string;\n  tooltipSize?: string;\n  tooltipPreline?: boolean;\n  tooltipIsHTML?: boolean;\n  popoverContent?: string;\n  popoverHtmlContent?: string;\n  popoverTitle?: string;\n  popoverPlacement?: 'left' | 'right' | 'top' | 'bottom';\n  popoverOnHover?: boolean;\n  popoverAlways?: boolean;\n  popoverDisabled?: boolean;\n  popoverAnimation?: boolean;\n  popoverDismissTimeout?: number;\n  removeTooltipArrow?: boolean;\n  tooltipAutoPosition?: boolean;\n  initialValue: any;\n  valueHistory = [];\n  validators: any;\n  config: any;\n  sortOrder: number;\n  controlType: string;\n  placeholder: string;\n  minimal: boolean;\n  multiple: boolean;\n  headerConfig: any;\n  optionsType: string;\n  maxlength: number;\n  minlength: number;\n  options: Array<any>;\n  type: string;\n  subType: string;\n  name: string;\n  closeOnSelect: boolean;\n  interactions: Array<Object>;\n  appendToBody: boolean; // Deprecated\n  parentScrollSelector: string;\n  description?: string;\n  layoutOptions?: { order?: string; download?: boolean; labelStyle?: string; draggable?: boolean; iconStyle?: string };\n  military?: boolean;\n  dateFormat?: string;\n  currencyFormat?: string;\n  startDate?: Date | Number;\n  endDate?: Date | Number;\n  weekStart?: number;\n  textMaskEnabled?: boolean;\n  maskOptions: IMaskOptions;\n  allowInvalidDate?: boolean;\n  tipWell?: {\n    tip: string;\n    icon?: string;\n    button?: boolean;\n    sanitize?: boolean;\n  };\n  rawValue?: any;\n  customControlConfig?: any;\n  checkboxLabel?: string;\n  restrictFieldInteractions?: boolean;\n  warning?: string;\n  highlighted?: boolean;\n  disabledDateMessage?: string;\n  private historyTimeout: any;\n\n  constructor(value: any, control: NovoControlConfig) {\n    super(value, control.validators, control.asyncValidators);\n    this.validators = control.validators;\n    this.initialValue = value;\n    this.valueHistory.push(value);\n    this.key = control.key;\n    this.label = control.label;\n    this.readOnly = control.readOnly;\n    this.hidden = control.hidden;\n    this.encrypted = control.encrypted;\n    this.config = control.config;\n    this.type = control.type;\n    this.subType = control.subType;\n    this.required = control.required;\n    this.hasRequiredValidator = this.required;\n    this.tooltip = control.tooltip;\n    this.tooltipPosition = control.tooltipPosition;\n    this.tooltipSize = control.tooltipSize;\n    this.tooltipPreline = control.tooltipPreline;\n    this.removeTooltipArrow = control.removeTooltipArrow;\n    this.tooltipAutoPosition = control.tooltipAutoPosition;\n    this.label = control.label;\n    this.name = control.name;\n    this.required = control.required;\n    this.sortOrder = control.sortOrder;\n    this.controlType = control.controlType;\n    this.placeholder = control.placeholder;\n    this.minimal = control.minimal;\n    this.multiple = control.multiple;\n    this.headerConfig = control.headerConfig;\n    this.optionsType = control.optionsType;\n    this.readOnly = control.readOnly;\n    this.layoutOptions = control.layoutOptions;\n    this.military = control.military;\n    this.dateFormat = control.dateFormat;\n    this.currencyFormat = control.currencyFormat;\n    this.startDate = control.startDate;\n    this.endDate = control.endDate;\n    this.weekStart = control.weekStart;\n    this.textMaskEnabled = control.textMaskEnabled;\n    this.maskOptions = control.maskOptions;\n    this.allowInvalidDate = control.allowInvalidDate;\n    this.maxlength = control.maxlength;\n    this.minlength = control.minlength;\n    this.closeOnSelect = control.closeOnSelect;\n    this.interactions = control.interactions;\n    this.checkboxLabel = control.checkboxLabel;\n    this.restrictFieldInteractions = control.restrictFieldInteractions;\n    this.appendToBody = control.appendToBody;\n    if (this.appendToBody) {\n      notify('\\'appendToBody\\' has been deprecated. Please remove this attribute.');\n    }\n    this.parentScrollSelector = control.parentScrollSelector;\n    this.description = control.description;\n    this.options = control.options;\n    this.tipWell = control.tipWell;\n    this.customControlConfig = control.customControlConfig;\n    this.warning = control.warning;\n    this.disabledDateMessage = control.disabledDateMessage;\n\n    // Reactive Form, need to enable/disable, can't bind to [disabled]\n    if (this.readOnly) {\n      this.disable();\n    } else {\n      this.enable();\n    }\n  }\n\n  /**\n   * @param clearValue - flag to reset the control's value\n   */\n  hide(clearValue: boolean = true): void {\n    this.hidden = true;\n    if (clearValue) {\n      this.setValue(null);\n    }\n  }\n\n  show(): void {\n    this.hidden = false;\n  }\n\n  setRequired(isRequired: boolean): void {\n    this.required = isRequired;\n    // Update validators to have the required\n    if (this.required && !this.hasRequiredValidator) {\n      const validators: any = [...this.validators];\n      validators.push(Validators.required);\n      // TODO: duplicated below\n      this.setValidators(validators);\n      this.updateValueAndValidity({ emitEvent: false });\n      this.hasRequiredValidator = this.required;\n    } else if (!this.required && this.hasRequiredValidator) {\n      let validators: any = [...this.validators];\n      validators = validators.filter((val) => val !== Validators.required);\n      // TODO: duplicated above\n      this.setValidators(validators);\n      this.updateValueAndValidity({ emitEvent: false });\n      this.hasRequiredValidator = this.required;\n    }\n  }\n\n  setValue(\n    value: any,\n    {\n      onlySelf,\n      emitEvent,\n      emitModelToViewChange,\n      emitViewToModelChange,\n    }: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n      emitModelToViewChange?: boolean;\n      emitViewToModelChange?: boolean;\n    } = {},\n  ) {\n    this.markAsDirty();\n    this.markAsTouched();\n    this.displayValueChanges.emit(value);\n    super.setValue(value, { onlySelf, emitEvent, emitModelToViewChange, emitViewToModelChange });\n\n    // History\n    clearTimeout(this.historyTimeout);\n    this.historyTimeout = setTimeout(() => {\n      this.valueHistory.push(value);\n    }, 300);\n  }\n\n  setReadOnly(isReadOnly: boolean): void {\n    this.readOnly = isReadOnly;\n    if (this.readOnly) {\n      this.disable();\n    } else {\n      this.enable();\n    }\n  }\n\n  /**\n   * Disables the control. This means the control will be exempt from validation checks and\n   * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n   *\n   * If the control has children, all children will be disabled to maintain the model.\n   */\n  disable(opts: { onlySelf?: boolean; emitEvent?: boolean } = { emitEvent: false }): void {\n    if (typeof opts.emitEvent === 'undefined') {\n      opts.emitEvent = false;\n    }\n    super.disable(opts);\n  }\n\n  enable(opts: { onlySelf?: boolean; emitEvent?: boolean } = { emitEvent: false }): void {\n    if (typeof opts.emitEvent === 'undefined') {\n      opts.emitEvent = false;\n    }\n    super.enable(opts);\n  }\n\n  markAsInvalid(message: string): void {\n    this.markAsDirty();\n    this.markAsTouched();\n    this.setErrors(Object.assign({}, this.errors, { custom: message }));\n  }\n\n  markAsValid(): void {\n    this.setErrors(null);\n  }\n}\n","// NG\nimport { EventEmitter } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n// App\nimport { IFieldInteractionEvent } from './FormInterfaces';\nimport { NovoFormControl } from './NovoFormControl';\n\nexport class NovoFormGroup extends UntypedFormGroup {\n  public fieldInteractionEvents: EventEmitter<IFieldInteractionEvent> = new EventEmitter();\n  public layout: string;\n  public edit: boolean;\n  public currentEntity: string;\n  public currentEntityId: string;\n  public associations: object;\n  public fieldsets: any[];\n  public _value: any;\n  public controls: { [key: string]: any };\n  public novoControls: any[];\n\n  public enableAllControls(): void {\n    for (const key in this.controls) {\n      if ((this.controls[key] as NovoFormControl).readOnly) {\n        (this.controls[key] as NovoFormControl).readOnly = false;\n        this.controls[key].enable();\n      }\n    }\n  }\n\n  public disableAllControls(): void {\n    for (const key in this.controls) {\n      if (!(this.controls[key] as NovoFormControl).readOnly) {\n        (this.controls[key] as NovoFormControl).readOnly = true;\n        this.controls[key].disable();\n      }\n    }\n  }\n}\n","// NG\nimport { Injectable } from '@angular/core';\n// Vendor\nimport { startOfToday } from 'date-fns';\n// App\nimport {\n  AddressControl,\n  BaseControl,\n  CheckboxControl,\n  CheckListControl,\n  CustomControl,\n  DateControl,\n  DateTimeControl,\n  EditorControl,\n  FileControl,\n  NovoControlConfig,\n  PickerControl,\n  RadioControl,\n  SelectControl,\n  SwitchControl,\n  TextAreaControl,\n  TextBoxControl,\n  TilesControl,\n  TimeControl,\n  TimezoneControl,\n} from '../FormControls';\nimport type { FormField, NovoFieldset } from '../FormInterfaces';\nimport { NovoFormControl } from '../NovoFormControl';\nimport { NovoFormGroup } from '../NovoFormGroup';\nimport { EntityPickerResult, EntityPickerResults } from 'novo-elements/elements/picker';\nimport { NovoLabelService, OptionsService } from 'novo-elements/services';\nimport { DateUtil, Helpers } from 'novo-elements/utils';\n\n@Injectable()\nexport class FormUtils {\n  ASSOCIATED_ENTITY_LIST: string[] = [\n    'Candidate',\n    'ClientContact',\n    'ClientCorporation',\n    'CorporationDepartment',\n    'Lead',\n    'Opportunity',\n    'JobOrder',\n    'CorporateUser',\n    'Person',\n    'Placement',\n    'JobShift',\n  ];\n  ENTITY_PICKER_LIST: string[] = [\n    'Candidate',\n    'CandidateText',\n    'Client',\n    'ClientText',\n    'ClientContact',\n    'ClientContactText',\n    'ClientCorporation',\n    'ClientCorporationText',\n    'Lead',\n    'LeadText',\n    'Opportunity',\n    'OpportunityText',\n    'JobOrder',\n    'JobOrderText',\n    'CorporateUser',\n    'CorporateUserText',\n    'Person',\n    'PersonText',\n    'Placement',\n    'JobShift',\n  ];\n\n  constructor(public labels: NovoLabelService, public optionsService: OptionsService) {}\n\n  toFormGroup(controls: Array<any>): NovoFormGroup {\n    const group: any = {};\n    controls.forEach((control) => {\n      const value = Helpers.isBlank(control.value) ? '' : control.value;\n      group[control.key] = new NovoFormControl(value, control);\n    });\n    return new NovoFormGroup(group);\n  }\n\n  emptyFormGroup(): NovoFormGroup {\n    return new NovoFormGroup({});\n  }\n\n  addControls(formGroup: NovoFormGroup, controls: Array<NovoControlConfig>): void {\n    controls.forEach((control) => {\n      const value = Helpers.isBlank(control.value) ? '' : control.value;\n      const formControl = new NovoFormControl(value, control);\n      formGroup.addControl(control.key, formControl);\n    });\n  }\n\n  removeControls(formGroup: NovoFormGroup, controls: Array<NovoControlConfig>): void {\n    controls.forEach((control) => {\n      formGroup.removeControl(control.key);\n    });\n  }\n\n  toFormGroupFromFieldset(fieldsets: Array<NovoFieldset>): NovoFormGroup {\n    const controls: Array<NovoFormControl> = [];\n    fieldsets.forEach((fieldset) => {\n      controls.push(...fieldset.controls);\n    });\n    return this.toFormGroup(controls);\n  }\n\n  hasAssociatedEntity(field: FormField): boolean {\n    return !!(field.associatedEntity && ~this.ASSOCIATED_ENTITY_LIST.indexOf(field.associatedEntity.entity));\n  }\n\n  determineInputType(field: FormField): string {\n    let type: string;\n    const dataSpecializationTypeMap = {\n      DATETIME: 'datetime',\n      TIME: 'time',\n      MONEY: 'currency',\n      PERCENTAGE: 'percentage',\n      HTML: 'editor',\n      'HTML-MINIMAL': 'editor-minimal',\n      YEAR: 'year',\n      WORKFLOW_OPTIONS: 'select',\n      SPECIALIZED_OPTIONS: 'select',\n      ALL_WORKFLOW_OPTIONS: 'select',\n      WorkflowOptionsLookup: 'select',\n      SpecializedOptionsLookup: 'select',\n      SimplifiedOptionsLookup: 'select',\n      AllWorkflowOptionsLookup: 'select',\n    };\n    const dataTypeToTypeMap = {\n      Timestamp: 'date',\n      Date: 'date',\n      Boolean: 'tiles', // eslint-disable-line\n    };\n    const inputTypeToTypeMap = {\n      CHECKBOX: 'radio',\n      RADIO: 'radio',\n      SELECT: 'select',\n      TILES: 'tiles',\n    };\n    const inputTypeMultiToTypeMap = {\n      CHECKBOX: 'checklist',\n      RADIO: 'checklist',\n      SELECT: 'chips',\n    };\n    const typeToTypeMap = {\n      file: 'file',\n      COMPOSITE: 'address',\n    };\n    const numberDataTypeToTypeMap = {\n      Double: 'float',\n      BigDecimal: 'float',\n      Integer: 'number',\n    };\n    if (field.type === 'TO_MANY') {\n      if (this.hasAssociatedEntity(field)) {\n        if (field.multiValue === false) {\n          type = 'entitypicker';\n        } else {\n          type = 'entitychips';\n        }\n      } else {\n        if (field.multiValue === false) {\n          type = 'picker';\n        } else {\n          type = 'chips';\n        }\n      }\n    } else if (field.type === 'TO_ONE') {\n      if (\n        'SYSTEM' === field.dataSpecialization &&\n        ['WorkflowOptionsLookup', 'SpecializedOptionsLookup', 'AllWorkflowOptionsLookup'].includes(field.dataType)\n      ) {\n        type = dataSpecializationTypeMap[field.dataType];\n      } else if (['WORKFLOW_OPTIONS', 'SPECIALIZED_OPTIONS', 'ALL_WORKFLOW_OPTIONS'].includes(field.dataSpecialization)) {\n        type = dataSpecializationTypeMap[field.dataSpecialization];\n      } else if (['SimplifiedOptionsLookup', 'SpecializedOptionsLookup'].includes(field.dataType)) {\n        if (field.options && Object.keys(inputTypeToTypeMap).indexOf(field.inputType) > -1 && !field.multiValue) {\n          type = inputTypeToTypeMap[field.inputType];\n        } else if (field.options && Object.keys(inputTypeMultiToTypeMap).indexOf(field.inputType) > -1 && field.multiValue) {\n          type = inputTypeMultiToTypeMap[field.inputType];\n        } else {\n          type = dataSpecializationTypeMap[field.dataType];\n        }\n      } else if (this.hasAssociatedEntity(field)) {\n        type = 'entitypicker'; // TODO!\n      } else {\n        type = 'picker';\n      }\n    } else if (field.optionsUrl && field.inputType === 'SELECT') {\n      if (field.optionsType && ~this.ENTITY_PICKER_LIST.indexOf(field.optionsType)) {\n        type = 'entitypicker'; // TODO!\n      } else {\n        type = 'picker';\n      }\n    } else if (Object.keys(dataSpecializationTypeMap).indexOf(field.dataSpecialization) > -1) {\n      type = dataSpecializationTypeMap[field.dataSpecialization];\n    } else if (Object.keys(dataTypeToTypeMap).indexOf(field.dataType) > -1) {\n      type = dataTypeToTypeMap[field.dataType];\n    } else if (field.inputType === 'TEXTAREA') {\n      type = 'textarea';\n    } else if (field.options && Object.keys(inputTypeToTypeMap).indexOf(field.inputType) > -1 && !field.multiValue) {\n      type = inputTypeToTypeMap[field.inputType];\n    } else if (field.options && Object.keys(inputTypeMultiToTypeMap).indexOf(field.inputType) > -1 && field.multiValue) {\n      type = inputTypeMultiToTypeMap[field.inputType];\n    } else if (Object.keys(typeToTypeMap).indexOf(field.type) > -1) {\n      type = typeToTypeMap[field.type];\n    } else if (Object.keys(numberDataTypeToTypeMap).indexOf(field.dataType) > -1) {\n      type = numberDataTypeToTypeMap[field.dataType];\n    } /* else {\n            throw new Error('FormUtils: This field type is unsupported.');\n        }*/\n    return type;\n  }\n\n  isFieldEncrypted(key: string): boolean {\n    return key.indexOf('customEncrypted') > -1;\n  }\n\n  getControlForField(\n    field: any,\n    http,\n    config: { token?: string; restUrl?: string; military?: boolean; weekStart?: number },\n    overrides?: any,\n    forTable: boolean = false,\n    fieldData?: any,\n  ) {\n    // TODO: if field.type overrides `determineInputType` we should use it in that method or use this method\n    // TODO: (cont.) as the setter of the field argument\n    let type: string = this.determineInputType(field) || field.type;\n    let control: any;\n    const controlConfig: NovoControlConfig = {\n      metaType: field.type,\n      type,\n      key: field.name,\n      label: field.label,\n      placeholder: field.hint || '',\n      required: field.required || field.systemRequired,\n      hidden: !field.required,\n      encrypted: this.isFieldEncrypted(field.name ? field.name.toString() : ''),\n      value: field.value || field.defaultValue,\n      sortOrder: field.sortOrder,\n      associatedEntity: field.associatedEntity,\n      optionsType: field.optionsType,\n      multiple: field.multiValue,\n      readOnly: !!field.disabled || !!field.readOnly,\n      disabled: field.disabled,\n      maxlength: field.maxLength,\n      interactions: field.interactions,\n      dataSpecialization: field.dataSpecialization,\n      dataType: field.dataType,\n      description: field.description || '',\n      tooltip: field.tooltip,\n      tooltipPosition: field.tooltipPosition,\n      customControl: field.customControl,\n      template: field.template,\n      customControlConfig: field.customControlConfig,\n      restrictFieldInteractions: field.restrictFieldInteractions,\n      validators: field.validators,\n      warning: field.warning,\n      config: field.config || {},\n      closeOnSelect: field.closeOnSelect,\n      layoutOptions: field.layoutOptions,\n    };\n    this.inferDateRange(controlConfig, field);\n    // TODO: getControlOptions should always return the correct format\n    const optionsConfig = this.getControlOptions(field, http, config, fieldData);\n    if (Array.isArray(optionsConfig) && !(type === 'chips' || type === 'picker')) {\n      controlConfig.options = optionsConfig;\n    } else if (Array.isArray(optionsConfig) && (type === 'chips' || type === 'picker')) {\n      controlConfig.config = {\n        options: optionsConfig,\n      };\n    } else if (optionsConfig) {\n      controlConfig.config = {\n        ...optionsConfig,\n        ...(controlConfig && controlConfig.config),\n      };\n    }\n\n    if (type === 'year') {\n      controlConfig.maxlength = 4;\n    }\n    // TODO: Overrides should be an iterable of all properties (potentially a private method)\n    let overrideResultsTemplate;\n    let overridePreviewTemplate;\n    if (overrides && overrides[field.name]) {\n      if (overrides[field.name].resultsTemplate) {\n        overrideResultsTemplate = overrides[field.name].resultsTemplate;\n        controlConfig.config.resultsTemplate = overrideResultsTemplate;\n        delete overrides[field.name].resultsTemplate;\n      }\n      if (overrides[field.name].overridePreviewTemplate) {\n        overrideResultsTemplate = overrides[field.name].overridePreviewTemplate;\n        controlConfig.config.overridePreviewTemplate = overrideResultsTemplate;\n        delete overrides[field.name].overridePreviewTemplate;\n      }\n      if (overrides[field.name].pickerCallback) {\n        controlConfig.config.callback = overrides[field.name].pickerCallback;\n      }\n      if (overrides[field.name].type) {\n        type = overrides[field.name].type;\n      }\n      if (overrides[field.name].columns) {\n        controlConfig.config.columns = overrides[field.name].columns;\n        controlConfig.closeOnSelect = true;\n        delete controlConfig.label;\n      }\n      if (overrides[field.name].warning) {\n        controlConfig.warning = overrides[field.name].warning;\n      }\n      Object.assign(controlConfig, overrides[field.name]);\n    }\n\n    switch (type) {\n      case 'entitychips':\n        // TODO: This doesn't belong in this codebase\n        controlConfig.multiple = true;\n        controlConfig.config.resultsTemplate = overrideResultsTemplate || EntityPickerResults;\n        controlConfig.config.previewTemplate = overridePreviewTemplate || EntityPickerResult;\n        // TODO: When appendToBody picker works better in table/form\n        control = new PickerControl(controlConfig);\n        break;\n      case 'chips':\n        controlConfig.multiple = true;\n        // TODO: When appendToBody picker works better in table/form\n        control = new PickerControl(controlConfig);\n        break;\n      case 'entitypicker':\n        // TODO: This doesn't belong in this codebase\n        controlConfig.config.resultsTemplate = overrideResultsTemplate || EntityPickerResults;\n        // TODO: When appendToBody picker works better in table/form\n        control = new PickerControl(controlConfig);\n        break;\n      case 'picker':\n        // TODO: When appendToBody picker works better in table/form\n        control = new PickerControl(controlConfig);\n        break;\n      case 'datetime':\n        controlConfig.military = config ? !!config.military : false;\n        controlConfig.weekStart = config && config.weekStart ? config.weekStart : 0;\n        control = new DateTimeControl(controlConfig);\n        break;\n      case 'date':\n        controlConfig.dateFormat = field.dateFormat;\n        controlConfig.textMaskEnabled = field.textMaskEnabled;\n        controlConfig.allowInvalidDate = field.allowInvalidDate;\n        controlConfig.military = config ? !!config.military : false;\n        controlConfig.weekStart = config && config.weekStart ? config.weekStart : 0;\n        control = new DateControl(controlConfig);\n        break;\n      case 'time':\n        controlConfig.military = config ? !!config.military : false;\n        control = new TimeControl(controlConfig);\n        break;\n      case 'native-time':\n      case 'native-date':\n      case 'native-week':\n      case 'native-year':\n      case 'native-datetime-local':\n      case 'native-tel':\n      case 'native-email':\n      case 'native-url':\n      case 'native-number':\n        control = new CustomControl({ ...controlConfig, template: 'native-input', type: type.replace('native-', ''), alwaysActive: true });\n        break;\n      case 'timezone':\n        control = new TimezoneControl(controlConfig);\n        break;\n      case 'currency':\n      case 'money':\n      case 'email':\n      case 'percentage':\n      case 'float':\n      case 'number':\n      case 'year':\n        // TODO: Only types from `determineInputType` should be used in this class\n        if (type === 'money') {\n          type = 'currency';\n        }\n        controlConfig.type = type;\n        control = new TextBoxControl(controlConfig);\n        break;\n      case 'text':\n        control = new TextBoxControl(controlConfig);\n        break;\n      case 'textarea':\n        control = new TextAreaControl(controlConfig);\n        break;\n      case 'editor':\n        control = new EditorControl(controlConfig);\n        break;\n      case 'editor-minimal':\n        control = new EditorControl(controlConfig);\n        control.minimal = true;\n        break;\n      case 'tiles':\n        control = new TilesControl(controlConfig);\n        break;\n      case 'checkbox':\n        controlConfig.checkboxLabel = field.checkboxLabel;\n        control = new CheckboxControl(controlConfig);\n        break;\n      case 'switch':\n        control = new SwitchControl(controlConfig);\n        break;\n      case 'checklist':\n        control = new CheckListControl(controlConfig);\n        break;\n      case 'radio':\n        control = new RadioControl(controlConfig);\n        break;\n      case 'select':\n        control = new SelectControl(controlConfig);\n        break;\n      case 'address':\n        controlConfig.required = field.required || false;\n        if (Helpers.isBlank(controlConfig.config)) {\n          controlConfig.config = {};\n        }\n        controlConfig.config.required = field.required;\n        controlConfig.config.readOnly = controlConfig.readOnly;\n        if (field.fields && field.fields.length) {\n          for (const subfield of field.fields) {\n            controlConfig.config[subfield.name] = {\n              required: !!subfield.required,\n              hidden: !!subfield.readOnly,\n            };\n            if (!Helpers.isEmpty(subfield.label)) {\n              controlConfig.config[subfield.name].label = subfield.label;\n            }\n            if (!Helpers.isEmpty(subfield.maxLength)) {\n              controlConfig.config[subfield.name].maxlength = subfield.maxLength;\n            }\n            controlConfig.required = controlConfig.required || subfield.required;\n            if (subfield.defaultValue) {\n              if (Helpers.isBlank(controlConfig.value)) {\n                controlConfig.value = {};\n              }\n              controlConfig.value[subfield.name] = subfield.defaultValue;\n            } else if (subfield.name === 'countryID') {\n              if (Helpers.isBlank(controlConfig.value)) {\n                controlConfig.value = {};\n              }\n              controlConfig.value[subfield.name] = 1;\n            }\n            if (subfield.name === 'state' || subfield.name === 'countryID') {\n              if (subfield.name === 'countryID') {\n                subfield.optionsType = 'Country';\n              }\n              if (!subfield.optionsUrl) {\n                subfield.optionsUrl = `options/${subfield.optionsType}`;\n              }\n              controlConfig.config[subfield.name].pickerConfig = this.getControlOptions(subfield, http, config, fieldData);\n            }\n          }\n        }\n        controlConfig.isEmpty = this.isAddressEmpty;\n        control = new AddressControl(controlConfig);\n        break;\n      case 'file':\n        control = new FileControl(controlConfig);\n        break;\n      case 'custom':\n        control = new CustomControl(controlConfig);\n        break;\n      default:\n        control = new TextBoxControl(controlConfig);\n        break;\n    }\n    return control;\n  }\n\n  private shouldCreateControl(field): boolean {\n    if (field.systemRequired) {\n      field.readOnly = false;\n    }\n\n    return (\n      field.name !== 'id' &&\n      (!['SYSTEM', 'SECTION_HEADER'].includes(field.dataSpecialization) ||\n        ['address', 'billingAddress', 'secondaryAddress'].includes(field.name)) &&\n      !field.readOnly\n    );\n  }\n\n  toControls(\n    meta,\n    currencyFormat,\n    http,\n    config: { token?: string; restUrl?: string; military?: boolean; weekStart?: number },\n    overrides?: any,\n    forTable: boolean = false,\n  ) {\n    const controls = [];\n    if (meta && meta.fields) {\n      const fields = meta.fields;\n      fields.forEach((field) => {\n        if (this.shouldCreateControl(field)) {\n          const control = this.getControlForField(field, http, config, overrides, forTable);\n          // Set currency format\n          if (control.subType === 'currency') {\n            control.currencyFormat = currencyFormat;\n          }\n          // Add to controls\n          controls.push(control);\n        }\n      });\n    }\n    return controls;\n  }\n\n  toTableControls(meta, currencyFormat, http, config: { token?: string; restUrl?: string; military?: boolean }, overrides?: any) {\n    const controls = this.toControls(meta, currencyFormat, http, config, overrides, true);\n    const ret = {};\n    controls.forEach((control: BaseControl) => {\n      ret[control.key] = {\n        editorType: control.__type,\n        editorConfig: control.__config,\n      };\n    });\n    return ret;\n  }\n\n  toFieldSets(\n    meta,\n    currencyFormat,\n    http,\n    config: { token?: string; restUrl?: string; military?: boolean; weekStart?: number },\n    overrides?,\n    data?: { [key: string]: any },\n  ) {\n    const fieldsets: Array<NovoFieldset> = [];\n    let formFields = [];\n\n    if (meta && meta.fields) {\n      formFields = this.getFormFields(meta);\n\n      formFields.forEach((field) => {\n        if (this.isHeader(field)) {\n          if (field.enabled) {\n            this.insertHeaderToFieldsets(fieldsets, field);\n          }\n        } else if (this.isEmbeddedField(field)) {\n          this.insertHeaderToFieldsets(fieldsets, field);\n\n          const embeddedFields = this.getEmbeddedFields(field);\n\n          embeddedFields.forEach((embeddedField) => {\n            if (this.shouldCreateControl(embeddedField)) {\n              let control = this.createControl(embeddedField, data, http, config, overrides, currencyFormat);\n              control = this.markControlAsEmbedded(control, field.dataSpecialization ? field.dataSpecialization.toLowerCase() : null);\n              fieldsets[fieldsets.length - 1].controls.push(control);\n            } else if (this.isHeader(embeddedField)) {\n              this.insertHeaderToFieldsets(fieldsets, embeddedField);\n            }\n          });\n        } else if (this.shouldCreateControl(field)) {\n          let control = this.createControl(field, data, http, config, overrides, currencyFormat);\n          if (field.inlineEmbeddedAssociatedEntityField) {\n            control = this.markControlAsEmbedded(control, 'inline_embedded');\n          }\n\n          if (fieldsets.length === 0) {\n            fieldsets.push({ controls: [] });\n          }\n\n          fieldsets[fieldsets.length - 1].controls.push(control);\n        }\n      });\n    }\n    if (fieldsets.length > 0) {\n      return fieldsets;\n    } else {\n      return [\n        {\n          controls: this.toControls(meta, currencyFormat, http, config),\n        },\n      ];\n    }\n  }\n\n  private isEmbeddedField(field) {\n    return field.dataSpecialization && ['embedded'].includes(field.dataSpecialization.toLowerCase()) && !field.readOnly;\n  }\n\n  private createControl(field, data, http, config, overrides, currencyFormat) {\n    const fieldData = this.isEmbeddedFieldData(field, data) ? this.getEmbeddedFieldData(field, data) : this.getFieldData(field, data);\n    const control = this.getControlForField(field, http, config, overrides, undefined, fieldData);\n    // Set currency format\n    if (control.subType === 'currency') {\n      control.currencyFormat = currencyFormat;\n    }\n    return control;\n  }\n\n  private isEmbeddedFieldData(field, data) {\n    return data && field.name.includes('.');\n  }\n\n  private getFieldData(field, data) {\n    return (data && data[field.name]) || null;\n  }\n\n  private getEmbeddedFieldData(field, data) {\n    const [parentFieldName, fieldName] = field.name.split('.');\n    return (data && data[parentFieldName] && data[parentFieldName][fieldName]) || null;\n  }\n\n  private getFormFields(meta) {\n    const sectionHeaders = meta.sectionHeaders\n      ? meta.sectionHeaders.map((element) => {\n          element.isSectionHeader = true;\n          return element;\n        })\n      : [];\n\n    let fields = meta.fields.map((field) => {\n      field.parentEntity = meta.entity;\n      if (!field.hasOwnProperty('sortOrder')) {\n        field.sortOrder = Number.MAX_SAFE_INTEGER - 1;\n      }\n      return field;\n    });\n\n    // build list of fields that should be displayed inline but belong to associated entities\n    const inlineEmbeddedAssociatedEntityFields = this.getInlineEmbeddedFields(fields);\n\n    // remove the inline embedded fields because the associated entity fields were extracted above\n    // and will be added to the regular list of fields. This prevents the fields from being added multiple times.\n    fields = fields.filter((f) => !f.dataSpecialization || f.dataSpecialization.toLowerCase() !== 'inline_embedded');\n\n    // sort fields\n    return [...sectionHeaders, ...fields, ...inlineEmbeddedAssociatedEntityFields].sort(Helpers.sortByField(['sortOrder', 'name']));\n  }\n\n  private getInlineEmbeddedFields(fields) {\n    let inlineEmbeddedAssociatedEntityFields = [];\n    fields\n      .filter((f) => f.dataSpecialization && f.dataSpecialization.toLowerCase() === 'inline_embedded')\n      .forEach((f) => {\n        inlineEmbeddedAssociatedEntityFields = [...inlineEmbeddedAssociatedEntityFields, ...this.getAssociatedFieldsForInlineEmbedded(f)];\n      });\n    return inlineEmbeddedAssociatedEntityFields;\n  }\n\n  private getAssociatedFieldsForInlineEmbedded(field) {\n    let associatedEntityFields = [];\n    associatedEntityFields = this.getEmbeddedFields(field).map((aef) => {\n      aef.inlineEmbeddedAssociatedEntityField = true;\n      return aef;\n    });\n    return associatedEntityFields;\n  }\n\n  private getEmbeddedFields(subHeader) {\n    return subHeader.associatedEntity.fields\n      .filter((field) => field.name !== 'id')\n      .map((field) => {\n        if (!field.name.startsWith(`${subHeader.name}.`)) {\n          field.name = `${subHeader.name}.${field.name}`;\n        }\n        return field;\n      })\n      .sort(Helpers.sortByField(['sortOrder', 'name']));\n  }\n\n  private isHeader(field): boolean {\n    return (\n      !Helpers.isBlank(field) &&\n      ((field.hasOwnProperty('isSectionHeader') && field.isSectionHeader) ||\n        (field.dataSpecialization && field.dataSpecialization.toLowerCase() === 'section_header'))\n    );\n  }\n\n  private insertHeaderToFieldsets(fieldsets, field) {\n    const constantProperties = {\n      controls: [],\n      isEmbedded: field.dataSpecialization && field.dataSpecialization.toLowerCase() === 'embedded',\n      isInlineEmbedded: field.dataSpecialization && field.dataSpecialization.toLowerCase() === 'inline_embedded',\n      key: field.name,\n    };\n    if (field.name && field.name.startsWith('customObject') && field.associatedEntity && field.associatedEntity.label) {\n      fieldsets.push({\n        title: field.associatedEntity.label || field.label,\n        icon: field.icon || 'bhi-card-expand',\n        ...constantProperties,\n      });\n    } else {\n      fieldsets.push({\n        title: field.label,\n        icon: field.icon || 'bhi-section',\n        ...constantProperties,\n      });\n    }\n  }\n\n  private markControlAsEmbedded(control, dataSpecialization?: 'embedded' | 'inline_embedded') {\n    if (Helpers.isBlank(control.config)) {\n      control.config = {};\n    }\n    control.config.embedded = true;\n    control.isEmbedded = dataSpecialization === 'embedded';\n    control.isInlineEmbedded = dataSpecialization === 'inline_embedded';\n    return control;\n  }\n\n  getControlOptions(field: any, http: any, config: { token?: string; restUrl?: string; military?: boolean }, fieldData?: any): any {\n    // TODO: The token property of config is the only property used; just pass in `token: string`\n    if (field.dataType === 'Boolean' && !field.options) {\n      // TODO: dataType should only be determined by `determineInputType` which doesn't ever return 'Boolean' it\n      // TODO: (cont.) returns `tiles`\n      return [\n        { value: false, label: this.labels.no },\n        { value: true, label: this.labels.yes },\n      ];\n    } else if (field.dataSpecialization === 'ALL_WORKFLOW_OPTIONS' && field.options) {\n      return field.options;\n    } else if (field.workflowOptions) {\n      return this.getWorkflowOptions(field.workflowOptions, fieldData);\n    } else if (\n      field.dataSpecialization === 'SPECIALIZED_OPTIONS' ||\n      (field.options && ['SpecializedOptionsLookup', 'SimplifiedOptionsLookup'].includes(field.dataType))\n    ) {\n      return field.options;\n    } else if (field.optionsUrl) {\n      return this.optionsService.getOptionsConfig(http, field, config);\n    } else if (Array.isArray(field.options) && field.type === 'chips') {\n      const options = field.options;\n      return {\n        field: 'value',\n        format: '$label',\n        options,\n      };\n    } else if (field.options) {\n      return field.options;\n    }\n    return null;\n  }\n\n  private getWorkflowOptions(\n    workflowOptions: { [key: string]: any },\n    fieldData: { id?: number; value?: string | number; label?: string | number } | null,\n  ): Array<{ id?: number; value?: string | number; label?: string | number }> {\n    let currentValue: { id?: number; value?: string | number; label?: string | number } = null;\n    let currentWorkflowOption: number | string = 'initial';\n    if (fieldData?.id) {\n      currentValue = { ...fieldData, value: fieldData.id, label: fieldData.label || fieldData.id };\n      currentWorkflowOption = fieldData.id;\n    }\n    const updateWorkflowOptions: Array<{ id?: number; value?: string | number; label?: string | number }> =\n      workflowOptions[currentWorkflowOption] || [];\n\n    // Ensure that the current value is added to the beginning of the options list\n    if (currentValue && !updateWorkflowOptions.find((option) => option.value === currentValue.value)) {\n      updateWorkflowOptions.unshift(currentValue);\n    }\n\n    return updateWorkflowOptions;\n  }\n\n  setInitialValues(controls: Array<NovoControlConfig>, values: any, keepClean?: boolean, keyOverride?: string) {\n    for (let i = 0; i < controls.length; i++) {\n      const control = controls[i];\n      const key = keyOverride ? control.key.replace(keyOverride, '') : control.key;\n      let value = values[key];\n\n      if (Helpers.isBlank(value)) {\n        continue;\n      }\n\n      if (Array.isArray(value) && value.length === 0) {\n        continue;\n      }\n\n      if (Array.isArray(value) && value.length > 0) {\n        value = value.filter((val) => !(Object.keys(val).length === 0 && val.constructor === Object));\n        if (value.length === 0) {\n          continue;\n        }\n      }\n\n      if (value.data && value.data.length === 0) {\n        continue;\n      }\n\n      if (Object.keys(value).length === 0 && value.constructor === Object) {\n        continue;\n      }\n\n      if (control.dataType === 'Date' && typeof value === 'string' && control.optionsType !== 'skipConversion') {\n        value = DateUtil.startOfDay(value);\n      }\n\n      control.value = value;\n      // TODO: keepClean is not required, but is always used. It should default (to true?)\n      control.dirty = !keepClean;\n    }\n  }\n\n  setInitialValuesFieldsets(fieldsets: Array<NovoFieldset>, values, keepClean?: boolean) {\n    fieldsets.forEach((fieldset) => {\n      this.setInitialValues(fieldset.controls, values, keepClean);\n    });\n  }\n\n  forceShowAllControls(controls: Array<NovoControlConfig>) {\n    controls.forEach((control) => {\n      control.hidden = false;\n    });\n  }\n\n  forceShowAllControlsInFieldsets(fieldsets: Array<NovoFieldset>) {\n    fieldsets.forEach((fieldset) => {\n      fieldset.controls.forEach((control) => {\n        control.hidden = false;\n      });\n    });\n  }\n\n  forceValidation(form: NovoFormGroup): void {\n    Object.keys(form.controls).forEach((key: string) => {\n      const control: any = form.controls[key];\n      if (control.required && Helpers.isBlank(form.getRawValue()[control.key])) {\n        control.markAsDirty();\n        control.markAsTouched();\n      }\n    });\n  }\n\n  isAddressEmpty(control: any): boolean {\n    const fieldList: string[] = ['address1', 'address2', 'city', 'state', 'zip', 'countryID'];\n    let valid: boolean = true;\n    if (control.value && control.config) {\n      fieldList.forEach((subfield: string) => {\n        if (\n          ((subfield !== 'countryID' &&\n            !Helpers.isEmpty(control.config[subfield]) &&\n            control.config[subfield].required &&\n            (Helpers.isBlank(control.value[subfield]) || Helpers.isEmpty(control.value[subfield]))) ||\n            (subfield === 'countryID' &&\n              !Helpers.isEmpty(control.config.countryID) &&\n              control.config.countryID.required &&\n              Helpers.isEmpty(control.value.countryName))) &&\n          !(\n            subfield === 'state' &&\n            !Helpers.isBlank(control.value.countryName) &&\n            control.config.state.pickerConfig &&\n            control.config.state.pickerConfig.defaultOptions &&\n            control.config.state.pickerConfig.defaultOptions.length === 0\n          )\n        ) {\n          valid = false;\n        }\n      });\n    }\n    return valid;\n  }\n\n  private getStartDateFromRange(dateRange: { minDate: string; minOffset: number }): Date {\n    if (dateRange.minDate) {\n      return DateUtil.parse(dateRange.minDate);\n    } else if (dateRange.minOffset) {\n      return DateUtil.addDays(startOfToday(), dateRange.minOffset);\n    }\n  }\n\n  private getEndDateFromRange(dateRange: { maxDate: string; minOffset: number }): Date {\n    if (dateRange.maxDate) {\n      return DateUtil.parse(dateRange.maxDate);\n    } else if (dateRange.minOffset) {\n      return DateUtil.addDays(startOfToday(), dateRange.minOffset);\n    }\n  }\n\n  /**\n   * Get the min start date and max end date of a Date base on field data.\n   */\n\n  private inferDateRange(controlConfig, field): void {\n    if (field.dataType === 'Date' && field.allowedDateRange) {\n      controlConfig.startDate = this.getStartDateFromRange(field.allowedDateRange);\n      controlConfig.endDate = this.getEndDateFromRange(field.allowedDateRange);\n      controlConfig.disabledDateMessage = field.allowedDateRange?.disabledDateMessage;\n    }\n  }\n\n  inflateEmbeddedProperties(data: object): object {\n    if (data) {\n      Object.keys(data)\n        .filter((fieldName) => fieldName.includes('.'))\n        .forEach((field) => {\n          const [parentFieldName, fieldName] = field.split('.');\n          if (!data[parentFieldName]) {\n            data[parentFieldName] = {};\n          }\n          data[parentFieldName][fieldName] = data[field];\n          delete data[field];\n        });\n    }\n\n    return data;\n  }\n}\n","// NG2\nimport { Component } from '@angular/core';\n// APP\nimport { NovoModalParams, NovoModalRef } from 'novo-elements/elements/modal';\nimport { NovoLabelService } from 'novo-elements/services';\n\n@Component({\n    selector: 'control-confirm-modal',\n    template: `\n    <novo-notification type=\"warning\" [attr.data-automation-id]=\"'field-interaction-modal-' + params['key']\">\n      <h1>{{ labels.confirmChangesModalMessage }}</h1>\n      <h2 *ngIf=\"!params['message']\">\n        <label>{{ params['label'] }}:</label> {{ params['oldValue'] }} <i class=\"bhi-arrow-right\"></i> {{ params['newValue'] }}\n      </h2>\n      <h2 *ngIf=\"params['message']\">{{ params['message'] }}</h2>\n      <novo-button theme=\"standard\" (click)=\"close(false)\" [attr.data-automation-id]=\"'field-interaction-modal-cancel' + params['key']\">\n        {{ labels.cancel }}\n      </novo-button>\n      <novo-button\n        theme=\"primary\"\n        icon=\"check\"\n        (click)=\"close(true)\"\n        autofocus\n        [attr.data-automation-id]=\"'field-interaction-modal-save-' + params['key']\"\n      >\n        {{ labels.save }}\n      </novo-button>\n    </novo-notification>\n  `,\n    standalone: false,\n})\nexport class ControlConfirmModal {\n  constructor(private modalRef: NovoModalRef, public params: NovoModalParams, public labels: NovoLabelService) {}\n\n  public close(result: boolean): void {\n    this.modalRef.close(result);\n  }\n}\n\n@Component({\n    selector: 'control-prompt-modal',\n    template: `\n    <novo-notification type=\"warning\" [attr.data-automation-id]=\"'field-interaction-modal-' + params['key']\">\n      <h1>{{ labels.promptModalMessage }}</h1>\n      <p *ngFor=\"let change of params['changes']\">{{ change }}</p>\n      <novo-button theme=\"standard\" (click)=\"close(false)\" [attr.data-automation-id]=\"'field-interaction-modal-cancel' + params['key']\">\n        {{ labels.cancel }}\n      </novo-button>\n      <novo-button\n        theme=\"primary\"\n        icon=\"check\"\n        (click)=\"close(true)\"\n        autofocus\n        [attr.data-automation-id]=\"'field-interaction-modal-yes-' + params['key']\"\n      >\n        {{ labels.yes }}\n      </novo-button>\n    </novo-notification>\n  `,\n    standalone: false,\n})\nexport class ControlPromptModal {\n  constructor(private modalRef: NovoModalRef, public params: NovoModalParams, public labels: NovoLabelService) {}\n\n  public close(result: boolean): void {\n    this.modalRef.close(result);\n  }\n}\n","// NG2\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { FormArray } from '@angular/forms';\n// Vendor\nimport { Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n// APP\nimport { NovoModalService } from 'novo-elements/elements/modal';\nimport { EntityPickerResults } from 'novo-elements/elements/picker';\nimport { NovoToastService, ToastOptions } from 'novo-elements/elements/toast';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { AppBridge, Helpers } from 'novo-elements/utils';\nimport { FormUtils } from './utils/FormUtils';\nimport { CustomHttp, ModifyPickerConfigArgs, OptionsFunction } from './FieldInteractionApiTypes';\nimport { ControlConfirmModal, ControlPromptModal } from './FieldInteractionModals';\nimport { NovoControlConfig } from './FormControls';\nimport { IFieldInteractionEvent, NovoFieldset, ResultsTemplateType } from './FormInterfaces';\nimport { NovoFormControl } from './NovoFormControl';\nimport { NovoFormGroup } from './NovoFormGroup';\n\nclass CustomHttpImpl implements CustomHttp {\n  url: string;\n  options;\n  mapFn = (x) => x;\n\n  constructor(private http: HttpClient) {}\n\n  get(url: string, options?): CustomHttp {\n    this.url = url;\n    this.options = options;\n    return this;\n  }\n\n  map(mapFn): CustomHttp {\n    this.mapFn = mapFn;\n    return this;\n  }\n\n  subscribe(resolve, reject?): Subscription {\n    return this.http.get(this.url, this.options).pipe(map(this.mapFn)).subscribe(resolve, reject);\n  }\n}\n\n@Injectable()\nexport class FieldInteractionApi {\n  private _globals;\n  form: NovoFormGroup | any;\n  private _currentKey: string;\n  appBridge: AppBridge;\n  private asyncBlockTimeout;\n  private _isInvokedOnInit = false;\n\n  static FIELD_POSITIONS = {\n    ABOVE_FIELD: 'ABOVE_FIELD',\n    BELOW_FIELD: 'BELOW_FIELD',\n    TOP_OF_FORM: 'TOP_OF_FORM',\n    BOTTOM_OF_FORM: 'BOTTOM_OF_FORM',\n  };\n\n  constructor(\n    private toaster: NovoToastService,\n    private modalService: NovoModalService,\n    private formUtils: FormUtils,\n    private http: HttpClient,\n    private labels: NovoLabelService,\n  ) {}\n\n  get associations(): object {\n    return this.form.hasOwnProperty('associations') ? this.form.associations : {};\n  }\n\n  get currentEntity(): string {\n    return this.form.hasOwnProperty('currentEntity') ? this.form.currentEntity : undefined;\n  }\n\n  get currentEntityId(): string {\n    return this.form.hasOwnProperty('currentEntityId') ? this.form.currentEntityId : undefined;\n  }\n\n  get isEdit(): boolean {\n    return this.form.hasOwnProperty('edit') ? this.form.edit : false;\n  }\n\n  get isAdd(): boolean {\n    return this.form.hasOwnProperty('edit') ? !this.form.edit : false;\n  }\n\n  set globals(globals) {\n    this._globals = globals;\n  }\n\n  get globals() {\n    return this._globals;\n  }\n\n  set currentKey(key: string) {\n    this._currentKey = key;\n  }\n\n  get currentKey(): string {\n    return this._currentKey;\n  }\n\n  set isInvokedOnInit(isOnInit: boolean) {\n    this._isInvokedOnInit = isOnInit;\n  }\n\n  get isInvokedOnInit(): boolean {\n    return this._isInvokedOnInit;\n  }\n\n  isActiveControlValid(): boolean {\n    return !!this.getValue(this.currentKey);\n  }\n\n  getActiveControl(): NovoFormControl {\n    return this.getControl(this.currentKey);\n  }\n\n  getActiveKey(): string {\n    return this.currentKey;\n  }\n\n  getActiveValue() {\n    return this.getValue(this.currentKey);\n  }\n\n  getActiveInitialValue() {\n    return this.getInitialValue(this.currentKey);\n  }\n\n  getFieldSet(key: string, otherForm?: NovoFormGroup): NovoFieldset {\n    if (!key) {\n      console.error('[FieldInteractionAPI] - invalid or missing \"key\"');\n      return null;\n    }\n\n    const form = otherForm || this.form;\n    const fieldSet = form.fieldsets.find((fs: NovoFieldset) => fs.key && fs.key.toLowerCase() === key.toLowerCase());\n    if (!fieldSet) {\n      console.error('[FieldInteractionAPI] - could not find a fieldset in the form by the key --', key);\n      return null;\n    }\n\n    return fieldSet as NovoFieldset;\n  }\n\n  getControl(key: string, otherForm?: NovoFormGroup) {\n    if (!key) {\n      console.error('[FieldInteractionAPI] - invalid or missing \"key\"');\n      return null;\n    }\n\n    const form = otherForm || this.form;\n    const control = form.controls[key] as NovoFormControl;\n    if (!control) {\n      console.error('[FieldInteractionAPI] - could not find a control in the form by the key --', key);\n      return null;\n    }\n\n    return control;\n  }\n\n  getFormGroupArray(key: string, otherForm?: NovoFormGroup): NovoFormGroup[] {\n    if (!key) {\n      console.error('[FieldInteractionAPI] - invalid or missing \"key\"');\n      return null;\n    }\n\n    const form = otherForm || this.form;\n    const formArray = form.controls[key] as FormArray;\n    if (!formArray || !formArray.controls) {\n      console.error('[FieldInteractionAPI] - could not find a form array in the form by the key --', key);\n      return null;\n    }\n\n    return formArray.controls as NovoFormGroup[] | any;\n  }\n\n  getValue(key: string, otherForm?: NovoFormGroup) {\n    const control = this.getControl(key, otherForm);\n    if (control) {\n      return control.value;\n    }\n    return null;\n  }\n\n  getRawValue(key: string, otherForm?: NovoFormGroup) {\n    const control = this.getControl(key, otherForm);\n    if (control) {\n      return control.rawValue;\n    }\n    return null;\n  }\n\n  getInitialValue(key: string, otherForm?: NovoFormGroup) {\n    const control = this.getControl(key, otherForm);\n    if (control) {\n      return control.initialValue;\n    }\n    return null;\n  }\n\n  setValue(\n    key: string,\n    value,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n      emitModelToViewChange?: boolean;\n      emitViewToModelChange?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.setValue(value, options);\n      this.triggerEvent({ controlKey: key, prop: 'value', value }, otherForm);\n    }\n  }\n\n  patchValue(\n    key: string,\n    value,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n      emitModelToViewChange?: boolean;\n      emitViewToModelChange?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.setValue(value, options);\n      this.triggerEvent({ controlKey: key, prop: 'value', value }, otherForm);\n    }\n  }\n\n  setReadOnly(key: string, isReadOnly: boolean, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.setReadOnly(isReadOnly);\n      this.triggerEvent({ controlKey: key, prop: 'readOnly', value: isReadOnly }, otherForm);\n    }\n  }\n\n  setRequired(key: string, required: boolean, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.setRequired(required);\n      this.triggerEvent({ controlKey: key, prop: 'required', value: required }, otherForm);\n    }\n  }\n\n  setDescription(key: string, description: string, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.description = description;\n      this.triggerEvent({ controlKey: key, prop: 'description', value: description }, otherForm);\n    }\n  }\n\n  highlight(key: string, isHighlighted: boolean, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.highlighted = isHighlighted;\n      this.triggerEvent({ controlKey: key, prop: 'highlight', value: isHighlighted }, otherForm);\n    }\n  }\n\n  hide(key: string, clearValue = true, otherForm?: NovoFormGroup) {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.hide(clearValue);\n      this.disable(key, { emitEvent: false });\n      this.triggerEvent({ controlKey: key, prop: 'hidden', value: true }, otherForm);\n    }\n    return control;\n  }\n\n  show(key: string, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.show();\n      this.enable(key, { emitEvent: false });\n      this.triggerEvent({ controlKey: key, prop: 'hidden', value: false }, otherForm);\n    }\n  }\n\n  hideFieldSetHeader(key: string): void {\n    const fieldSet = this.getFieldSet(key);\n    if (fieldSet) {\n      fieldSet.hidden = true;\n    }\n  }\n\n  showFieldSetHeader(key: string): void {\n    const fieldSet = this.getFieldSet(key);\n    if (fieldSet) {\n      fieldSet.hidden = false;\n    }\n  }\n\n  disable(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.disable(options);\n      this.triggerEvent({ controlKey: key, prop: 'readOnly', value: true }, otherForm);\n    }\n  }\n\n  enable(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.enable(options);\n      this.triggerEvent({ controlKey: key, prop: 'readOnly', value: false }, otherForm);\n    }\n  }\n\n  markAsInvalid(key: string, validationMessage?: string, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control) {\n      if (control && !control.restrictFieldInteractions) {\n        control.markAsInvalid(validationMessage);\n        this.triggerEvent({ controlKey: key, prop: 'errors', value: validationMessage }, otherForm);\n      }\n    }\n  }\n\n  markAsValid(key: string, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control) {\n      if (control && !control.restrictFieldInteractions) {\n        control.markAsValid();\n        this.triggerEvent({ controlKey: key, prop: 'errors', value: null }, otherForm);\n      }\n    }\n  }\n\n  markAsDirty(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.markAsDirty(options);\n    }\n  }\n\n  markAsPending(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.markAsPending(options);\n    }\n  }\n\n  markAsPristine(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.markAsPristine(options);\n    }\n  }\n\n  markAsTouched(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.markAsTouched(options);\n    }\n  }\n\n  markAsUntouched(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.markAsUntouched(options);\n    }\n  }\n\n  updateValueAndValidity(\n    key: string,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    },\n    otherForm?: NovoFormGroup,\n  ): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.updateValueAndValidity(options);\n    }\n  }\n\n  displayToast(toastConfig: ToastOptions): void {\n    if (this.toaster) {\n      this.toaster.alert(toastConfig);\n    }\n  }\n\n  displayTip(key: string, tip: string, icon?: string, allowDismiss?: boolean, sanitize?: boolean, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.tipWell = {\n        tip,\n        icon,\n        button: allowDismiss,\n        sanitize: sanitize !== false, // defaults to true when undefined\n      };\n      this.triggerEvent({ controlKey: key, prop: 'tipWell', value: tip }, otherForm);\n    }\n  }\n\n  clearTip(key: string, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.tipWell = null;\n      this.triggerEvent({ controlKey: key, prop: 'tipWell', value: null }, otherForm);\n    }\n  }\n\n  setTooltip(key: string, tooltip: string, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.tooltip = tooltip;\n      if (tooltip.length >= 40 && tooltip.length <= 400) {\n        control.tooltipSize = 'large';\n        control.tooltipPreline = true;\n      } else if (tooltip.length > 400) {\n        control.tooltipSize = 'extra-large';\n      }\n      this.triggerEvent({ controlKey: key, prop: 'tooltip', value: tooltip }, otherForm);\n    }\n  }\n\n  setPopOver(key: string, popover: {\n    title?: string,\n    content?: string,\n    htmlContent?: string,\n    placement?: 'left' | 'right' | 'top' | 'bottom',\n    onHover?: boolean,\n    always?: boolean,\n    disabled?: boolean,\n    animation?: boolean,\n    dismissTimeout?: number,\n  }, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control.popoverTitle = popover.title;\n      control.popoverContent = popover.content;\n      control.popoverHtmlContent = popover.htmlContent;\n      control.popoverPlacement = popover.placement;\n      control.popoverOnHover = popover.onHover;\n      control.popoverAlways = popover.always;\n      control.popoverDisabled = popover.disabled;\n      control.popoverAnimation = popover.animation;\n      control.popoverDismissTimeout = popover.dismissTimeout;\n      this.triggerEvent({ controlKey: key, prop: 'popover', value: popover }, otherForm);\n    }\n  }\n\n  confirmChanges(key: string, message?: string): Promise<boolean> {\n    const history = this.getProperty(key, 'valueHistory');\n    const oldValue = history[history.length - 2];\n    const newValue = this.getValue(key);\n    const label = this.getProperty(key, 'label');\n    (document.activeElement as any).blur();\n    return this.modalService.open(ControlConfirmModal, { oldValue, newValue, label, message, key }).onClosed.then((result) => {\n      if (!result) {\n        this.setValue(key, oldValue, { emitEvent: false });\n      }\n      return true;\n    });\n  }\n\n  promptUser(key: string, changes: string[]): Promise<boolean> {\n    (document.activeElement as any).blur();\n    return this.modalService.open(ControlPromptModal, { changes, key }).onClosed;\n  }\n\n  setProperty(key: string, prop: string, value, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      control[prop] = value;\n      this.triggerEvent({ controlKey: key, prop, value }, otherForm);\n    }\n  }\n\n  getProperty(key: string, prop: string, otherForm?: NovoFormGroup) {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      return control[prop];\n    }\n    return null;\n  }\n\n  isValueEmpty(key: string): boolean {\n    const value = this.getValue(key);\n    return Helpers.isEmpty(value);\n  }\n\n  isValueBlank(key: string): boolean {\n    const value = this.getValue(key);\n    return Helpers.isBlank(value);\n  }\n\n  hasField(key: string, otherForm?: NovoFormGroup): boolean {\n    const form = otherForm || this.form;\n    return !!form.controls[key];\n  }\n\n  addStaticOption(key: string, newOption: any, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    let optionToAdd = newOption;\n    let isUnique = true;\n    if (control && !control.restrictFieldInteractions) {\n      let currentOptions = this.getProperty(key, 'options');\n      if (!currentOptions || !currentOptions.length) {\n        const config = this.getProperty(key, 'config');\n        if (config) {\n          currentOptions = config.options;\n          if (currentOptions && Array.isArray(currentOptions)) {\n            if (currentOptions[0].value && !optionToAdd.value) {\n              optionToAdd = { value: newOption, label: newOption };\n            }\n            config.options = [...currentOptions, optionToAdd];\n            this.setProperty(key, 'config', config);\n          }\n        }\n      } else {\n        if (currentOptions[0].value && !optionToAdd.value) {\n          optionToAdd = { value: newOption, label: newOption };\n        }\n        // Ensure duplicate values are not added\n        currentOptions.forEach((option) => {\n          if ((option.value && option.value === optionToAdd.value) || option === optionToAdd) {\n            isUnique = false;\n          }\n        });\n        if (isUnique) {\n          this.setProperty(key, 'options', [...currentOptions, optionToAdd]);\n        }\n      }\n      if (isUnique) {\n        this.triggerEvent({ controlKey: key, prop: 'options', value: [...currentOptions, optionToAdd] }, otherForm);\n      }\n    }\n  }\n\n  removeStaticOption(key: string, optionToRemove: any, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      let currentOptions = this.getProperty(key, 'options', otherForm);\n      if (!currentOptions || !currentOptions.length) {\n        const config = this.getProperty(key, 'config', otherForm);\n        if (config) {\n          currentOptions = config.options;\n          if (currentOptions && Array.isArray(currentOptions)) {\n            let index = -1;\n            currentOptions.forEach((opt, i) => {\n              if (opt.value || opt.label) {\n                if (opt.value === optionToRemove || opt.label === optionToRemove) {\n                  index = i;\n                }\n              } else {\n                if (opt === optionToRemove) {\n                  index = i;\n                }\n              }\n            });\n            if (index !== -1) {\n              currentOptions.splice(index, 1);\n            }\n            config.options = [...currentOptions];\n            this.setProperty(key, 'config', config, otherForm);\n          }\n        }\n      } else {\n        let index = -1;\n        currentOptions.forEach((opt, i) => {\n          if (opt.value || opt.label) {\n            if (opt.value === optionToRemove || opt.label === optionToRemove) {\n              index = i;\n            }\n          } else {\n            if (opt === optionToRemove) {\n              index = i;\n            }\n          }\n        });\n        if (index !== -1) {\n          currentOptions.splice(index, 1);\n        }\n        this.setProperty(key, 'options', [...currentOptions], otherForm);\n      }\n      this.triggerEvent({ controlKey: key, prop: 'options', value: control.options }, otherForm);\n    }\n  }\n\n  modifyPickerConfig(\n    key: string,\n    config: {\n      format?: string;\n      optionsUrl?: string;\n      optionsUrlBuilder?: Function;\n      optionsPromise?;\n      options?: any[];\n      resultsTemplateType?: ResultsTemplateType;\n    },\n    mapper?,\n  ): void {\n    // call another method to avoid a breaking change but still enable stricter types\n    this.mutatePickerConfig(key, config as ModifyPickerConfigArgs, mapper);\n  }\n\n  mutatePickerConfig(key: string, args: ModifyPickerConfigArgs, mapper?: (item: unknown) => unknown, otherForm?: NovoFormGroup): void {\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      const { minSearchLength, enableInfiniteScroll, filteredOptionsCreator, format, getLabels, emptyPickerMessage } = control.config;\n      const optionsConfig = this.getOptionsConfig(args, mapper, filteredOptionsCreator, format);\n\n      const newConfig: NovoControlConfig['config'] = {\n        ...(emptyPickerMessage && { emptyPickerMessage }),\n        ...(Number.isInteger(minSearchLength) && { minSearchLength }),\n        ...(enableInfiniteScroll && { enableInfiniteScroll }),\n        ...(filteredOptionsCreator && { filteredOptionsCreator }),\n        ...(getLabels && { getLabels }),\n        ...(optionsConfig && optionsConfig),\n        resultsTemplate:\n          control.config.resultsTemplate || ('resultsTemplateType' in args && this.getAppropriateResultsTemplate(args.resultsTemplateType)),\n      };\n\n      this.setProperty(key, 'config', newConfig);\n      this.triggerEvent({ controlKey: key, prop: 'pickerConfig', value: args }, otherForm);\n    }\n  }\n\n  addPropertiesToPickerConfig(key: string, properties: { [key: string]: unknown }, otherForm?: NovoFormGroup) {\n    const control = this.getControl(key, otherForm);\n    if (!control || control.restrictFieldInteractions) {\n      return;\n    }\n\n    const config = {\n      ...control.config,\n      ...properties,\n    };\n\n    this.setProperty(key, 'config', config);\n    this.triggerEvent({ controlKey: key, prop: 'pickerConfig', value: properties }, otherForm);\n  }\n  getOptionsConfig = (\n    args: ModifyPickerConfigArgs,\n    mapper?: (item: unknown) => unknown,\n    filteredOptionsCreator?: (where: string) => (query: string) => Promise<unknown[]>,\n    pickerConfigFormat?: string,\n  ): undefined | { options: unknown[] } | { options: OptionsFunction; format?: string } => {\n    if (filteredOptionsCreator || 'optionsUrl' in args || 'optionsUrlBuilder' in args || 'optionsPromise' in args) {\n      const format = ('format' in args && args.format) || pickerConfigFormat;\n      return {\n        options: this.createOptionsFunction(args, mapper, filteredOptionsCreator),\n        ...('emptyPickerMessage' in args && { emptyPickerMessage: args.emptyPickerMessage }),\n        ...(format && { format }),\n      };\n    } else if ('options' in args && Array.isArray(args.options)) {\n      return {\n        options: [...args.options],\n      };\n    } else {\n      return undefined;\n    }\n  };\n\n  private getAppropriateResultsTemplate(resultsTemplateType: ResultsTemplateType) {\n    switch (resultsTemplateType) {\n      case 'entity-picker':\n        return EntityPickerResults;\n      default:\n        return undefined;\n    }\n  }\n\n  createOptionsFunction =\n    (\n      config: ModifyPickerConfigArgs,\n      mapper?: (item: unknown) => unknown,\n      filteredOptionsCreator?: (where?: string) => (query: string, page?: number) => Promise<unknown[]>,\n    ): ((query: string) => Promise<unknown[]>) =>\n    (query: string, page?: number) => {\n      if ('optionsPromise' in config && config.optionsPromise) {\n        return config.optionsPromise(query, new CustomHttpImpl(this.http), page);\n      } else if (('optionsUrlBuilder' in config && config.optionsUrlBuilder) || ('optionsUrl' in config && config.optionsUrl)) {\n        return new Promise((resolve, reject) => {\n          const url = 'optionsUrlBuilder' in config ? config.optionsUrlBuilder(query) : `${config.optionsUrl}?filter=${query || ''}`;\n          this.http\n            .get(url)\n            .pipe(\n              map((results: unknown[]) => {\n                if (mapper) {\n                  return results.map(mapper);\n                }\n                return results;\n              }),\n            )\n            .subscribe(resolve, reject);\n        });\n      } else if (filteredOptionsCreator) {\n        if ('where' in config) {\n          return filteredOptionsCreator(config.where)(query, page);\n        } else {\n          return filteredOptionsCreator()(query, page);\n        }\n      }\n    };\n\n  setLoading(key: string, loading: boolean, otherForm?: NovoFormGroup) {\n    const form = otherForm || this.form;\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      if (loading) {\n        form.controls[key].fieldInteractionloading = true;\n        control.setErrors({ loading: true });\n        // History\n        clearTimeout(this.asyncBlockTimeout);\n        this.asyncBlockTimeout = setTimeout(() => {\n          this.setLoading(key, false);\n          this.displayTip(key, this.labels.asyncFailure, 'info', false);\n          this.setProperty(key, '_displayedAsyncFailure', true);\n        }, 10000);\n      } else {\n        form.controls[key].fieldInteractionloading = false;\n        clearTimeout(this.asyncBlockTimeout);\n        control.setErrors({ loading: null });\n        control.updateValueAndValidity({ emitEvent: false });\n        if (this.getProperty(key, '_displayedAsyncFailure')) {\n          this.setProperty(key, 'tipWell', null);\n        }\n      }\n      this.triggerEvent({ controlKey: key, prop: 'loading', value: loading }, otherForm);\n    }\n  }\n\n  addControl(\n    key: string,\n    metaForNewField: {\n      key?: string;\n      type?: string;\n      name?: string;\n      label?: string;\n      interactions?: Array<{ event?: string; invokeOnInit?: boolean; script? }>;\n    },\n    position: string = FieldInteractionApi.FIELD_POSITIONS.ABOVE_FIELD,\n    initialValue?,\n    otherForm?: NovoFormGroup,\n  ): void {\n    if (!metaForNewField.key && !metaForNewField.name) {\n      console.error('[FieldInteractionAPI] - missing \"key\" in meta for new field');\n      return null;\n    }\n\n    if (!metaForNewField.key) {\n      // If key is not explicitly declared, use name as key\n      metaForNewField.key = metaForNewField.name;\n    }\n\n    const form = otherForm || this.form;\n    if (form.controls[metaForNewField.key]) {\n      // Field is already on the form\n      return null;\n    }\n\n    const control = form.controls[key];\n    let fieldsetIndex: number;\n    let controlIndex: number;\n    if (control) {\n      fieldsetIndex = -1;\n      controlIndex = -1;\n\n      form.fieldsets.forEach((fieldset, fi) => {\n        fieldset.controls.forEach((fieldsetControl, ci) => {\n          if (fieldsetControl.key === key) {\n            fieldsetIndex = fi;\n            controlIndex = ci;\n          }\n        });\n      });\n\n      // Change the position of the newly added field\n      switch (position) {\n        case FieldInteractionApi.FIELD_POSITIONS.ABOVE_FIELD:\n          // Adding field above active field\n          // index can stay the same\n          break;\n        case FieldInteractionApi.FIELD_POSITIONS.BELOW_FIELD:\n          // Adding field below active field\n          controlIndex += 1;\n          break;\n        case FieldInteractionApi.FIELD_POSITIONS.TOP_OF_FORM:\n          // Adding field to the top of the form\n          controlIndex = 0;\n          fieldsetIndex = 0;\n          break;\n        case FieldInteractionApi.FIELD_POSITIONS.BOTTOM_OF_FORM:\n          // Adding field to the bottom of the form\n          fieldsetIndex = form.fieldsets.length - 1;\n          controlIndex = form.fieldsets[fieldsetIndex].controls.length;\n          break;\n        default:\n          break;\n      }\n\n      if (fieldsetIndex !== -1 && controlIndex !== -1) {\n        const novoControl = this.formUtils.getControlForField(metaForNewField, this.http, {});\n        novoControl.hidden = false;\n        const formControl = new NovoFormControl(initialValue, novoControl);\n        form.addControl(novoControl.key, formControl);\n        form.fieldsets[fieldsetIndex].controls.splice(controlIndex, 0, novoControl);\n        this.triggerEvent({ controlKey: key, prop: 'addControl', value: formControl }, otherForm);\n      }\n    }\n  }\n\n  removeControl(key: string, otherForm?: NovoFormGroup): void {\n    const form = otherForm || this.form;\n    if (!form.controls[key]) {\n      // Field is not on the form\n      return null;\n    }\n    const control = this.getControl(key, otherForm);\n    if (control && !control.restrictFieldInteractions) {\n      let fieldsetIndex = -1;\n      let controlIndex = -1;\n\n      form.fieldsets.forEach((fieldset, fi) => {\n        fieldset.controls.forEach((fieldsetControl, ci) => {\n          if (fieldsetControl.key === key) {\n            fieldsetIndex = fi;\n            controlIndex = ci;\n          }\n        });\n      });\n\n      if (fieldsetIndex !== -1 && controlIndex !== -1) {\n        form.removeControl(key);\n        form.fieldsets[fieldsetIndex].controls.splice(controlIndex, 1);\n        this.triggerEvent({ controlKey: key, prop: 'removeControl', value: key }, otherForm);\n      }\n    }\n  }\n\n  debounce(func: () => void, wait = 50) {\n    // eslint-disable-next-line prefer-const\n    let h;\n    clearTimeout(h);\n    h = setTimeout(() => func(), wait);\n  }\n\n  /**\n   * Allows traversing nested forms by accessing the parent form.\n   *\n   * @param otherForm optional parameter for getting the parent of a different form.\n   * If not provided will default to the parent of the current form.\n   */\n  getParent(otherForm?: NovoFormGroup) {\n    const form = otherForm || this.form;\n    return form.parent;\n  }\n\n  /**\n   * The index is assigned as a property on the form's associations object when the form is part of a NovoControlGroup array.\n   *\n   * @param otherForm optional parameter for getting the index of a different form. If not provided will default to the current form.\n   * @returns the index if it exists for the current or form, or null otherwise.\n   */\n  getIndex(otherForm?: NovoFormGroup) {\n    const form = otherForm || this.form;\n    return form.associations && form.associations.hasOwnProperty('index') ? form.associations.index : null;\n  }\n\n  private triggerEvent(event: IFieldInteractionEvent, otherForm?: NovoFormGroup): void {\n    const form = otherForm || this.form;\n    if (form && form.fieldInteractionEvents) {\n      form.fieldInteractionEvents.emit(event);\n    }\n  }\n}\n","// NG2\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Inject,\n  Input,\n  LOCALE_ID,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\n// Vendor\nimport { DateFormatService, NovoLabelService, NovoTemplateService } from 'novo-elements/services';\nimport { Helpers, Key, OutsideClick } from 'novo-elements/utils';\nimport { Observable } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n// APP\nimport { MaskedOptions } from 'imask';\nimport { FieldInteractionApi } from './FieldInteractionApi';\n\nexport interface IMaskOptions {\n  mask: MaskedOptions['mask'];\n  keepCharPositions: boolean;\n  guide: boolean;\n}\n\n@Directive({\n    selector: 'textarea[autosize]',\n    standalone: false,\n})\nexport class NovoAutoSize implements AfterContentInit {\n  @HostListener('input', ['$event.target'])\n  onInput(textArea: HTMLTextAreaElement): void {\n    this.adjust();\n  }\n\n  constructor(public element: ElementRef) {}\n\n  ngAfterContentInit(): void {\n    setTimeout(() => {\n      this.adjust();\n    });\n  }\n\n  adjust(): void {\n    const nativeElement = this.element.nativeElement;\n    nativeElement.style.height = nativeElement.style.minHeight;\n    nativeElement.style.height = `${nativeElement.scrollHeight}px`;\n  }\n}\n// undo all template context references!\n@Component({\n    selector: 'novo-control',\n    template: `\n    <div\n      class=\"novo-control-container\"\n      [hidden]=\"\n        form.controls[control.key].hidden ||\n        form.controls[control.key].type === 'hidden' ||\n        form.controls[control.key].controlType === 'hidden'\n      \"\n    >\n      <!--Encrypted Field-->\n      <span [tooltip]=\"labels.encryptedFieldTooltip\" [tooltipPosition]=\"'right'\"\n        ><i [hidden]=\"!form.controls[control.key].encrypted\" class=\"bhi-lock\"></i\n      ></span>\n      <!--Label (for horizontal)-->\n      <label\n        [attr.for]=\"control.key\"\n        *ngIf=\"form.layout !== 'vertical' && form.controls[control.key].label && !condensed\"\n        [ngClass]=\"{ encrypted: form.controls[control.key].encrypted }\"\n      >\n        {{ form.controls[control.key].label }}\n      </label>\n      <div class=\"novo-control-outer-container\">\n        <!--Label (for vertical)-->\n        <label\n          *ngIf=\"form.layout === 'vertical' && form.controls[control.key].label && !condensed\"\n          class=\"novo-control-label\"\n          [attr.for]=\"control.key\"\n          [class.novo-control-empty]=\"!hasValue\"\n          [class.novo-control-focused]=\"focused\"\n          [class.novo-control-filled]=\"hasValue\"\n          [class.novo-control-always-active]=\"alwaysActive || form.controls[control.key].placeholder\"\n          [class.novo-control-extra-spacing]=\"requiresExtraSpacing\"\n        >\n          {{ form.controls[control.key].label }}\n        </label>\n        <div\n          class=\"novo-control-inner-container\"\n          [class.required]=\"form.controls[control.key].required && !form.controls[control.key].readOnly\"\n        >\n          <div class=\"novo-control-inner-input-container\" [class.novo-control-filled]=\"hasValue\" [class.novo-control-empty]=\"!hasValue\">\n            <!--Required Indicator-->\n            <i\n              [hidden]=\"!form.controls[control.key].required || form.controls[control.key].readOnly\"\n              class=\"required-indicator {{ form.controls[control.key].controlType }}\"\n              [ngClass]=\"{ 'bhi-circle': !isValid, 'bhi-check': isValid }\"\n              *ngIf=\"!condensed || form.controls[control.key].required\"\n            >\n            </i>\n            <!--Form Controls-->\n            <div\n              class=\"novo-control-input {{ form.controls[control.key].controlType }}\"\n              [attr.data-automation-id]=\"control.key\"\n              [class.control-disabled]=\"form.controls[control.key].disabled\"\n              [class.highlighted]=\"form.controls[control.key].highlighted\"\n            >\n              <!--TODO prefix/suffix on the control-->\n              <ng-container *ngIf=\"templates\">\n                <ng-container\n                  *ngTemplateOutlet=\"templates[form.controls[control.key].controlType]; context: templateContext\"\n                ></ng-container>\n              </ng-container>\n              <ng-container *ngIf=\"!templates || loading\">\n                <div class=\"novo-control-input-container novo-control-input-with-label\">\n                  <input type=\"text\" />\n                </div>\n              </ng-container>\n            </div>\n          </div>\n          <!--Error Message-->\n          <div\n            class=\"field-message {{ form.controls[control.key].controlType }}\"\n            *ngIf=\"!condensed\"\n            [class.has-tip]=\"form.controls[control.key].tipWell\"\n            [ngClass]=\"showErrorState || showMaxLengthMetMessage ? 'error-shown' : 'error-hidden'\"\n          >\n            <div class=\"messages\" [ngClass]=\"showMessages ? 'count-shown messages-shown' : 'count-hidden messages-hidden'\">\n              <span class=\"error-text\" *ngIf=\"showFieldMessage\"></span>\n              <span class=\"error-text\" *ngIf=\"isDirty && errors?.required && form.controls[control.key].controlType !== 'address'\"\n                >{{ form.controls[control.key].label | uppercase }} {{ labels.isRequired }}</span\n              >\n              <span class=\"error-text\" *ngIf=\"isDirty && errors?.minlength\"\n                >{{ form.controls[control.key].label | uppercase }} {{ labels.minLength }} {{ form.controls[control.key].minlength }}</span\n              >\n              <span\n                class=\"error-text\"\n                *ngIf=\"isDirty && maxLengthMet && focused && !errors?.maxlength && form.controls[control.key].controlType !== 'picker'\"\n                >{{ labels.maxlengthMet(form.controls[control.key].maxlength) }}</span\n              >\n              <span class=\"error-text\" *ngIf=\"errors?.maxlength && focused && !errors?.maxlengthFields\">{{\n                labels.invalidMaxlength(form.controls[control.key].maxlength)\n              }}</span>\n              <span class=\"error-text\" *ngIf=\"maxLengthMet && form.controls[control.key].controlType === 'picker'\">{{\n                labels.maxRecordsReached\n              }}</span>\n              <span class=\"error-text\" *ngIf=\"isDirty && errors?.invalidEmail\"\n                >{{ form.controls[control.key].label | uppercase }} {{ labels.invalidEmail }}</span\n              >\n              <span class=\"error-text\" *ngIf=\"isDirty && (errors?.integerTooLarge || errors?.doubleTooLarge)\"\n                >{{ form.controls[control.key].label | uppercase }} {{ labels.isTooLarge }}</span\n              >\n              <span *ngIf=\"isDirty && errors?.minYear\">{{ form.controls[control.key].label | uppercase }} {{ labels.notValidYear }}</span>\n              <span class=\"error-text\" *ngIf=\"isDirty && errors?.custom\">{{ errors.custom }}</span>\n              <span class=\"error-text\" *ngIf=\"errors?.maxlength && errors?.maxlengthFields && maxlengthErrorField && focused\">\n                {{\n                  labels.invalidMaxlengthWithField(\n                    control.config[maxlengthErrorField]?.label,\n                    control.config[maxlengthErrorField]?.maxlength\n                  )\n                }}\n              </span>\n              <span\n                class=\"error-text\"\n                *ngIf=\"isDirty && maxlengthMetField && focused && !errors?.maxlengthFields?.includes(maxlengthMetField)\"\n              >\n                {{ labels.maxlengthMetWithField(control.config[maxlengthMetField]?.label, control.config[maxlengthMetField]?.maxlength) }}\n              </span>\n              <span *ngIf=\"isDirty && errors?.invalidAddress\">\n                <span class=\"error-text\" *ngFor=\"let invalidAddressField of errors?.invalidAddressFields\"\n                  >{{ invalidAddressField | uppercase }} {{ labels.isRequired }}\n                </span>\n              </span>\n              <!--Field Hint-->\n              <div class=\"description\" *ngIf=\"form.controls[control.key].description\" [innerHTML]=\"form.controls[control.key].description\">\n              </div>\n              <span class=\"warning-text\" *ngIf=\"form.controls[control.key].warning\">{{ form.controls[control.key].warning }}</span>\n            </div>\n            <span\n              class=\"character-count\"\n              [class.error]=\"\n                (errors?.maxlength && !errors?.maxlengthFields) ||\n                (errors?.maxlength && errors?.maxlengthFields && errors.maxlengthFields.includes(focusedField))\n              \"\n              *ngIf=\"showCount && form.controls[control.key].controlType !== 'picker'\"\n              >{{ itemCount }}/{{ maxLength || form.controls[control.key].maxlength }}</span\n            >\n            <span\n              class=\"record-count\"\n              [class.zero-count]=\"itemCount === 0\"\n              [class.row-picker]=\"form.controls[this.control.key].config.columns\"\n              *ngIf=\"showCount && form.controls[control.key].controlType === 'picker'\"\n              >{{ itemCount }}/{{ maxLength || form.controls[control.key].maxlength }}</span\n            >\n          </div>\n          <!--Tip Wel-->\n          <novo-tip-well\n            *ngIf=\"form.controls[control.key].tipWell\"\n            [name]=\"control.key\"\n            [tip]=\"form.controls[control.key]?.tipWell?.tip\"\n            [icon]=\"form.controls[control.key]?.tipWell?.icon\"\n            [button]=\"form.controls[control.key]?.tipWell?.button\"\n            [sanitize]=\"form.controls[control.key]?.tipWell?.sanitize\"\n          ></novo-tip-well>\n        </div>\n        <i *ngIf=\"form.controls[control.key].fieldInteractionloading\" class=\"loading\">\n          <svg\n            version=\"1.1\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n            xmlns:a=\"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/\"\n            x=\"0px\"\n            y=\"0px\"\n            width=\"18.2px\"\n            height=\"18.5px\"\n            viewBox=\"0 0 18.2 18.5\"\n            style=\"enable-background:new 0 0 18.2 18.5;\"\n            xml:space=\"preserve\"\n          >\n            <style type=\"text/css\">\n              .spinner {\n                fill: #ffffff;\n              }\n            </style>\n            <path\n              class=\"spinner\"\n              d=\"M9.2,18.5C4.1,18.5,0,14.4,0,9.2S4.1,0,9.2,0c0.9,0,1.9,0.1,2.7,0.4c0.8,0.2,1.2,1.1,1,1.9\n                            c-0.2,0.8-1.1,1.2-1.9,1C10.5,3.1,9.9,3,9.2,3C5.8,3,3,5.8,3,9.2s2.8,6.2,6.2,6.2c2.8,0,5.3-1.9,6-4.7c0.2-0.8,1-1.3,1.8-1.1\n                            c0.8,0.2,1.3,1,1.1,1.8C17.1,15.7,13.4,18.5,9.2,18.5z\"\n            />\n          </svg>\n        </i>\n      </div>\n    </div>\n  `,\n    host: {\n        '[class]': 'form.controls[control.key].controlType',\n        '[attr.data-control-type]': 'form.controls[control.key].controlType',\n        '[class.disabled]': 'form.controls[control.key].readOnly',\n        '[class.hidden]': 'form.controls[control.key].hidden',\n        '[attr.data-control-key]': 'control.key',\n        '[class.inline-embedded]': 'control.isInlineEmbedded',\n        '[class.embedded]': 'control.isEmbedded',\n    },\n    standalone: false,\n})\nexport class NovoControlElement extends OutsideClick implements OnInit, OnDestroy, AfterViewInit, AfterContentInit {\n  @Input()\n  control: any;\n  @Input()\n  form: any;\n  @Input()\n  condensed: boolean = false;\n  @Input()\n  autoFocus: boolean = false;\n  @Output()\n  change: EventEmitter<any> = new EventEmitter();\n  @Output()\n  edit: EventEmitter<any> = new EventEmitter();\n  @Output()\n  save: EventEmitter<any> = new EventEmitter();\n  @Output()\n  delete: EventEmitter<any> = new EventEmitter();\n  @Output()\n  upload: EventEmitter<any> = new EventEmitter();\n  @Output('blur')\n  get onBlur(): Observable<FocusEvent> {\n    return this._blurEmitter.asObservable();\n  }\n\n  @Output('focus')\n  get onFocus(): Observable<FocusEvent> {\n    return this._focusEmitter.asObservable();\n  }\n  public maxLength: number;\n  public focusedField: string;\n  formattedValue: string = '';\n  percentValue: number;\n  maxLengthMet: boolean = false;\n  itemCount: number = 0;\n  maskOptions: IMaskOptions;\n\n  private _blurEmitter: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n  private _focusEmitter: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n  private _focused: boolean = false;\n  private _enteredText: string = '';\n  private forceClearSubscription: any;\n  private percentChangeSubscription: any;\n  private valueChangeSubscription: any;\n  private dateChangeSubscription: any;\n  private _showCount: boolean = false;\n  private characterCountField: string;\n  private maxLengthMetErrorfields: string[] = [];\n  private statusChangeSubscription: any;\n\n  templates: any = {};\n  templateContext: any;\n  loading: boolean = false;\n\n  constructor(\n    element: ElementRef,\n    public labels: NovoLabelService,\n    private dateFormatService: DateFormatService,\n    private fieldInteractionApi: FieldInteractionApi,\n    private templateService: NovoTemplateService,\n    private changeDetectorRef: ChangeDetectorRef,\n    @Inject(LOCALE_ID) public locale: string = 'en-US',\n  ) {\n    super(element);\n  }\n\n  get maxlengthMetField(): string {\n    if (this.maxLengthMetErrorfields && this.maxLengthMetErrorfields.length) {\n      return this.maxLengthMetErrorfields.find((field: string) => field === this.focusedField) || '';\n    } else {\n      return '';\n    }\n  }\n\n  get maxlengthErrorField(): string {\n    if (this.errors && this.errors.maxlengthFields && this.errors.maxlengthFields.length) {\n      return this.errors.maxlengthFields.find((field: string) => field === this.focusedField) || '';\n    } else {\n      return '';\n    }\n  }\n\n  get showFieldMessage() {\n    return !this.errors && !this.maxLengthMet && Helpers.isBlank(this.control.description);\n  }\n\n  get showMaxLengthMetMessage() {\n    return (\n      (this.isDirty && this.maxLengthMet && this.focused && (!this.errors || (this.errors && !this.errors.maxlength))) ||\n      (this.isDirty &&\n        this.maxlengthMetField &&\n        this.focused &&\n        (!this.errors || (this.errors && !this.errors.maxlengthFields.includes(this.maxlengthMetField))))\n    );\n  }\n\n  get showErrorState() {\n    return (\n      (this.isDirty && this.errors) ||\n      (this.focused && this.errors && this.errors.maxlength && this.errors.maxlengthFields) ||\n      (this.focused && this.errors && this.errors.maxlength && this.errors.maxlengthFields && this.maxlengthErrorField)\n    );\n  }\n\n  get showCount() {\n    const MAX_LENGTH_CONTROL_TYPES: string[] = ['textbox', 'picker', 'text-area'];\n    const charCount: boolean =\n      this.focused &&\n      !!this.form.controls[this.control.key].maxlength &&\n      MAX_LENGTH_CONTROL_TYPES.includes(this.form.controls[this.control.key].controlType);\n    return this._showCount || charCount;\n  }\n\n  set showCount(value) {\n    this._showCount = value;\n  }\n\n  get showMessages(): boolean {\n    return (\n      this.showCount ||\n      !Helpers.isEmpty(this.form.controls[this.control.key].warning) ||\n      !Helpers.isEmpty(this.form.controls[this.control.key].description)\n    );\n  }\n\n  get decimalSeparator(): string {\n    return new Intl.NumberFormat(this.locale).format(1.2)[1];\n  }\n\n  ngAfterViewInit() {\n    const DO_NOT_FOCUS_ME: string[] = ['picker', 'time', 'date', 'date-time'];\n    if (this.autoFocus && !DO_NOT_FOCUS_ME.includes(this.control.controlType)) {\n      setTimeout(() => {\n        const input: HTMLElement = this.element.nativeElement.querySelector('input');\n        if (input) {\n          input.focus();\n        }\n      });\n    }\n  }\n\n  ngAfterContentInit() {\n    // Subscribe to control interactions\n    if (this.control.interactions && !this.form.controls[this.control.key].restrictFieldInteractions) {\n      for (const interaction of this.control.interactions) {\n        switch (interaction.event) {\n          case 'blur':\n            this.valueChangeSubscription = this.onBlur.pipe(debounceTime(300)).subscribe(() => {\n              if (!this.form.controls[this.control.key].restrictFieldInteractions) {\n                this.executeInteraction(interaction);\n              }\n            });\n            break;\n          case 'focus':\n            this.valueChangeSubscription = this.onFocus.pipe(debounceTime(300)).subscribe(() => {\n              if (!this.form.controls[this.control.key].restrictFieldInteractions) {\n                this.executeInteraction(interaction);\n              }\n            });\n            break;\n          case 'change':\n            this.valueChangeSubscription = this.form.controls[this.control.key].valueChanges.pipe(debounceTime(300)).subscribe(() => {\n              if (!this.form.controls[this.control.key].restrictFieldInteractions) {\n                this.executeInteraction(interaction);\n              }\n            });\n            break;\n          case 'init':\n            interaction.invokeOnInit = true;\n            break;\n          default:\n            break;\n        }\n        if (interaction.invokeOnInit) {\n          if (!this.form.controls[this.control.key].restrictFieldInteractions) {\n            this.executeInteraction(interaction, true);\n          }\n        }\n      }\n    }\n    setTimeout(() => {\n      this.templates = this.templateService.getAll();\n      this.loading = false;\n      this.changeDetectorRef.markForCheck();\n    });\n  }\n\n  ngOnInit() {\n    this.loading = true;\n    // Make sure to initially format the time controls\n    if (this.control && this.form.controls[this.control.key].value) {\n      if (\n        this.form.controls[this.control.key].controlType === 'textbox' ||\n        this.form.controls[this.control.key].controlType === 'text-area'\n      ) {\n        this.itemCount = this.form.controls[this.control.key].value.length;\n      }\n    }\n    if (this.control) {\n      // Listen to clear events\n      this.forceClearSubscription = this.control.forceClear.subscribe(() => {\n        this.clearValue();\n      });\n      // For Asynchronous validations\n      this.statusChangeSubscription = this.form.controls[this.control.key].statusChanges.subscribe((validity) => {\n        this.form.controls[this.control.key] = this.templateContext.$implicit;\n        if (validity !== 'PENDING' && this.form.updateValueAndValidity) {\n          this.form.updateValueAndValidity();\n        }\n      });\n    }\n    this.templateContext = {\n      $implicit: this.form.controls[this.control.key],\n      methods: {\n        restrictKeys: this.restrictKeys.bind(this),\n        emitChange: this.emitChange.bind(this),\n        handleAccept: this.handleAccept.bind(this),\n        handleFocus: this.handleFocus.bind(this),\n        handlePercentChange: this.handlePercentChange.bind(this),\n        handleBlur: this.handleBlur.bind(this),\n        handleTextAreaInput: this.handleTextAreaInput.bind(this),\n        handleEdit: this.handleEdit.bind(this),\n        handleSave: this.handleSave.bind(this),\n        handleDelete: this.handleDelete.bind(this),\n        handleUpload: this.handleUpload.bind(this),\n        modelChange: this.modelChange.bind(this),\n        modelChangeWithRaw: this.modelChangeWithRaw.bind(this),\n        handleAddressChange: this.handleAddressChange.bind(this),\n        handleTyping: this.handleTyping.bind(this),\n        updateValidity: this.updateValidity.bind(this),\n        toggleActive: this.toggleActive.bind(this),\n        validateIntegerInput: this.validateIntegerInput.bind(this),\n        validateNumberOnBlur: this.validateNumberOnBlur.bind(this),\n      },\n      form: this.form,\n    };\n    this.templateContext.$implicit.tooltipPosition = this.tooltipPosition;\n    this.templateContext.$implicit.tooltip = this.tooltip;\n    this.templateContext.$implicit.tooltipSize = this.tooltipSize;\n    this.templateContext.$implicit.tooltipPreline = this.tooltipPreline;\n    this.templateContext.$implicit.removeTooltipArrow = this.removeTooltipArrow;\n    this.templateContext.$implicit.startupFocus = this.form.controls[this.control.key].startupFocus;\n    this.templateContext.$implicit.fileBrowserImageUploadUrl = this.form.controls[this.control.key].fileBrowserImageUploadUrl;\n    this.templateContext.$implicit.minimal = this.form.controls[this.control.key].minimal;\n    this.templateContext.$implicit.currencyFormat = this.form.controls[this.control.key].currencyFormat;\n    this.templateContext.$implicit.percentValue = this.form.controls[this.control.key].percentValue;\n    this.templateContext.$implicit.config = this.form.controls[this.control.key].config;\n\n    if (this.form.controls[this.control.key] && this.form.controls[this.control.key].subType === 'percentage') {\n      if (!Helpers.isEmpty(this.form.controls[this.control.key].value)) {\n        this.templateContext.$implicit.percentValue = Number(\n          (this.form.controls[this.control.key].value * 100).toFixed(6).replace(/\\.?0*$/, ''),\n        );\n      }\n      this.percentChangeSubscription = this.form.controls[this.control.key].displayValueChanges.subscribe((value) => {\n        if (!Helpers.isEmpty(value) && !isNaN(value)) {\n          this.templateContext.$implicit.percentValue = Number((value * 100).toFixed(6).replace(/\\.?0*$/, ''));\n        } else if (Helpers.isEmpty(value)) {\n          this.templateContext.$implicit.percentValue = undefined;\n        }\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    // Unsubscribe from control interactions\n    if (this.valueChangeSubscription) {\n      this.valueChangeSubscription.unsubscribe();\n    }\n    if (this.forceClearSubscription) {\n      // Un-listen for clear events\n      this.forceClearSubscription.unsubscribe();\n    }\n    if (this.percentChangeSubscription) {\n      // Un-listen for clear events\n      this.percentChangeSubscription.unsubscribe();\n    }\n    if (this.dateChangeSubscription) {\n      this.dateChangeSubscription.unsubscribe();\n    }\n    if (this.statusChangeSubscription) {\n      this.statusChangeSubscription.unsubscribe();\n    }\n    super.ngOnDestroy();\n  }\n\n  get errors() {\n    return this.form.controls[this.control.key].errors;\n  }\n\n  get isValid() {\n    return this.form.controls[this.control.key].valid;\n  }\n\n  get isDirty() {\n    return this.form.controls[this.control.key].dirty || this.control.dirty;\n  }\n\n  get hasValue() {\n    return !Helpers.isEmpty(this.form.getRawValue()[this.control.key]);\n  }\n\n  get focused() {\n    return this._focused;\n  }\n\n  get tooltip() {\n    return this.form.controls[this.control.key].tooltip;\n  }\n\n  get tooltipPosition() {\n    if (Helpers.isBlank(this.form.controls[this.control.key].tooltipPosition)) {\n      return 'right';\n    }\n    return this.form.controls[this.control.key].tooltipPosition;\n  }\n\n  get tooltipSize() {\n    if (Helpers.isBlank(this.form.controls[this.control.key].tooltipSize)) {\n      return '';\n    }\n    return this.form.controls[this.control.key].tooltipSize;\n  }\n\n  get tooltipPreline() {\n    if (Helpers.isBlank(this.form.controls[this.control.key].tooltipPreline)) {\n      return false;\n    }\n    return this.form.controls[this.control.key].tooltipPreline;\n  }\n\n  get removeTooltipArrow() {\n    if (Helpers.isBlank(this.form.controls[this.control.key].removeTooltipArrow)) {\n      return false;\n    }\n    return this.form.controls[this.control.key].removeTooltipArrow;\n  }\n\n  get alwaysActive() {\n    // Controls that have the label active if there is any user entered text in the field\n    if (this.form.controls[this.control.key].controlType === 'picker' && this._enteredText.length) {\n      return true;\n    }\n    if (this.form.controls[this.control.key].alwaysActive) {\n      return true;\n    }\n    // Controls that always have the label active\n    return (\n      [\n        'tiles',\n        'checklist',\n        'checkbox',\n        'date',\n        'time',\n        'date-time',\n        'address',\n        'file',\n        'editor',\n        'ace-editor',\n        'code-editor',\n        'radio',\n        'text-area',\n        'quick-note',\n        'date',\n        'custom',\n        'switch',\n        'native-select',\n        'native-input',\n      ].indexOf(this.form.controls[this.control.key].controlType) !== -1\n    );\n  }\n\n  get requiresExtraSpacing() {\n    // Chips\n    if (this.form.controls[this.control.key].controlType === 'picker' && this.form.controls[this.control.key].multiple && this.hasValue) {\n      return true;\n    }\n    return false;\n  }\n\n  executeInteraction(interaction, isInvokedOnInit = false) {\n    if (interaction.script && Helpers.isFunction(interaction.script)) {\n      setTimeout(() => {\n        this.fieldInteractionApi.form = this.form;\n        this.fieldInteractionApi.currentKey = this.control.key;\n        this.fieldInteractionApi.isInvokedOnInit = isInvokedOnInit;\n        try {\n          interaction.script(this.fieldInteractionApi, this.control.key);\n        } catch (err) {\n          console.info('Field Interaction Error!', this.control.key);\n          console.error(err);\n        }\n      });\n    }\n  }\n\n  handleTyping(event: any) {\n    this._focused = event && event.length;\n    this._enteredText = event;\n  }\n\n  // imask has accepted a change in value\n  handleAccept(value: string) {\n    this.emitChange(value);\n  }\n\n  handleFocus(event: FocusEvent, field?: any) {\n    this._focused = true;\n    this.focusedField = field;\n    if (!Helpers.isBlank(this.characterCountField) && this.characterCountField === field) {\n      this.showCount = true;\n    } else if (\n      this.form.controls[this.control.key].controlType === 'address' &&\n      field &&\n      !Helpers.isEmpty(this.form.getRawValue()[this.control.key]) &&\n      !Helpers.isBlank(this.form.getRawValue()[this.control.key][field])\n    ) {\n      this.handleAddressChange({ value: this.form.getRawValue()[this.control.key][field], field });\n    }\n    this._focusEmitter.emit(event);\n  }\n\n  handleBlur(event: FocusEvent) {\n    this._focused = false;\n    this.focusedField = '';\n    this.showCount = false;\n    this._blurEmitter.emit(event);\n  }\n\n  clearValue() {\n    this.form.controls[this.control.key].setValue(null);\n    this.formattedValue = null;\n  }\n\n  handleTextAreaInput(event: KeyboardEvent & { target: HTMLInputElement }) {\n    this.emitChange(event);\n    this.restrictKeys(event);\n  }\n\n  checkMaxLength(value: string) {\n    if (this.control && this.form.controls[this.control.key].maxlength) {\n      this.itemCount = value.length;\n      this.maxLengthMet = value.length >= this.form.controls[this.control.key].maxlength;\n    }\n  }\n\n  modelChangeWithRaw(event) {\n    if (Helpers.isEmpty(event.value)) {\n      this._focused = false;\n      this._enteredText = '';\n    }\n    if (this.form.controls[this.control.key].controlType === 'picker' && this.form.controls[this.control.key].maxlength) {\n      this.itemCount = event.value ? event.value.length : 0;\n      this.maxLengthMet = this.itemCount >= this.form.controls[this.control.key].maxlength ? true : false;\n    }\n    this.form.controls[this.control.key].rawValue = event.rawValue;\n    this.change.emit(event.value);\n  }\n\n  modelChange(value) {\n    if (Helpers.isEmpty(value)) {\n      this._focused = false;\n      this._enteredText = '';\n    }\n    this.change.emit(value);\n  }\n\n  validateNumberOnBlur(event: FocusEvent) {\n    this._focused = false;\n    this.focusedField = '';\n    this.showCount = false;\n    if (this.form.controls[this.control.key].subType === 'number') {\n      this.validateIntegerInput();\n    }\n    this._blurEmitter.emit(event);\n  }\n\n  validateIntegerInput() {\n    const NUMBERS_ONLY = /^[\\d\\-]\\d*$/;\n    if (this.form.controls[this.control.key].value && !NUMBERS_ONLY.test(this.form.controls[this.control.key].value)) {\n      this.form.controls[this.control.key].markAsInvalid(\n        `${this.labels.invalidIntegerInput} ${this.form.controls[this.control.key].label.toUpperCase()}`,\n      );\n    }\n  }\n\n  restrictKeys(event: KeyboardEvent) {\n    const NUMBERS_ONLY = /[0-9\\-]/;\n    const NUMBERS_WITH_DECIMAL_DOT = /[0-9\\.\\-]/;\n    const NUMBERS_WITH_DECIMAL_DOT_AND_COMMA = /[0-9\\.\\,\\-]/;\n    const UTILITY_KEYS = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab'];\n    const key = event.key;\n\n    // Numbers or numbers and decimal characters only\n    if (this.form.controls[this.control.key].subType === 'number' && !(NUMBERS_ONLY.test(key) || UTILITY_KEYS.includes(key))) {\n      event.preventDefault();\n    } else if (\n      ['currency', 'float', 'percentage'].includes(this.form.controls[this.control.key].subType) &&\n      !(\n        (this.decimalSeparator === '.' && NUMBERS_WITH_DECIMAL_DOT.test(key)) ||\n        (this.decimalSeparator === ',' && NUMBERS_WITH_DECIMAL_DOT_AND_COMMA.test(key)) ||\n        UTILITY_KEYS.includes(key)\n      )\n    ) {\n      event.preventDefault();\n    }\n    // Max Length\n    if (this.form.controls[this.control.key].maxlength && (event.target as HTMLInputElement).value.length >= this.form.controls[this.control.key].maxlength) {\n      event.preventDefault();\n    }\n  }\n\n  handlePercentChange(event: KeyboardEvent) {\n    const value = (event.target as HTMLInputElement).value || (event as any).data;\n    const percent = Helpers.isEmpty(value) || isNaN(value) ? value : Number((Number(value) / 100).toFixed(6).replace(/\\.?0*$/, ''));\n    if (!Helpers.isEmpty(percent)) {\n      this.change.emit(percent);\n      this.form.controls[this.control.key].setValue(percent);\n    } else {\n      this.change.emit(null);\n      this.form.controls[this.control.key].setValue(null);\n    }\n  }\n\n  handleTabForPickers(event: any): void {\n    if (this.active && event && event.key) {\n      if (event.key === Key.Escape || event.key === Key.Tab) {\n        this.toggleActive(event, false);\n      }\n    }\n  }\n\n  emitChange(event: Date | (Event & { target: HTMLInputElement }) | string) {\n    this.change.emit(event);\n    const stringValue = (event != null && typeof event === 'object' && 'target' in event) ? event?.target?.value : event;\n    if (typeof stringValue === 'string') {\n      this.checkMaxLength(stringValue);\n    }\n  }\n\n  handleEdit(value) {\n    this.edit.emit(value);\n  }\n\n  handleSave(value) {\n    this.save.emit(value);\n  }\n\n  handleDelete(value) {\n    this.delete.emit(value);\n  }\n\n  handleUpload(value) {\n    this.upload.emit(value);\n  }\n\n  handleAddressChange(data) {\n    if (\n      data &&\n      !Helpers.isBlank(data.value) &&\n      data.field &&\n      this.control.config[data.field] &&\n      !Helpers.isEmpty(this.control.config[data.field].maxlength)\n    ) {\n      this.itemCount = data.value.length;\n      this.characterCountField = data.field;\n      this.maxLength = this.control.config[data.field].maxlength;\n      this.showCount = true;\n      if (this.maxLength === this.itemCount) {\n        this.maxLengthMetErrorfields.push(data.field);\n      } else {\n        this.maxLengthMetErrorfields = this.maxLengthMetErrorfields.filter((field: string) => field !== data.field);\n      }\n    }\n  }\n\n  updateValidity(shouldEventBeEmitted): void {\n    const emitEvent: boolean = shouldEventBeEmitted ? true : false;\n    this.form.controls[this.control.key].updateValueAndValidity({ emitEvent });\n  }\n}\n","// NG\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormArray, FormBuilder } from '@angular/forms';\nimport { Helpers } from 'novo-elements/utils';\nimport { FormUtils } from './utils/FormUtils';\nimport { BaseControl } from './controls/BaseControl';\nimport { NovoFormGroup } from './NovoFormGroup';\n\nexport interface NovoControlGroupAddConfig {\n  label: string;\n}\n\nexport enum EditState {\n  EDITING = 'editing',\n  NOT_EDITING = 'notediting',\n}\n\nexport interface NovoControlGroupRowConfig {\n  edit: boolean;\n  remove: boolean;\n  state: EditState;\n}\n\n@Component({\n    selector: 'novo-control-group',\n    templateUrl: './ControlGroup.html',\n    styleUrls: ['./ControlGroup.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[class.novo-control-group-appearance-card]': \"appearance=='card'\",\n        '[class.novo-control-group-appearance-none]': \"appearance=='none'\",\n    },\n    standalone: false,\n})\nexport class NovoControlGroup implements AfterContentInit, OnChanges, OnDestroy {\n  @Input()\n  set appearance(value: 'none' | 'card') {\n    this._appearance = value;\n  }\n  get appearance() {\n    return this._appearance;\n  }\n  private _appearance: 'none' | 'card' = 'none';\n\n  // Sets the display of the group to either be row (default) or vertical via flex-box\n  @Input()\n  set vertical(v: boolean) {\n    this._vertical = coerceBooleanProperty(v);\n  }\n  get vertical() {\n    return this._vertical;\n  }\n  private _vertical = false;\n  @Input()\n  set stacked(v: boolean) {\n    this._stacked = coerceBooleanProperty(v);\n  }\n  get stacked() {\n    return this._stacked;\n  }\n  private _stacked = false;\n\n  // Hides/shows the add button for adding a new control\n  @Input() add: NovoControlGroupAddConfig;\n  // Hide/shows the remove button for removing a control\n  @Input()\n  set remove(v: boolean) {\n    this._remove = coerceBooleanProperty(v);\n  }\n  get remove() {\n    return this._remove;\n  }\n  private _remove = false;\n  // Hide/shows the edit button for editing a control\n  @Input()\n  set edit(v: boolean) {\n    this._edit = coerceBooleanProperty(v);\n  }\n  get edit() {\n    return this._edit;\n  }\n  private _edit = false;\n  // Allows the control to collapse or not\n  @Input()\n  set collapsible(v: boolean) {\n    this._collapsible = coerceBooleanProperty(v);\n  }\n  get collapsible() {\n    return this._collapsible;\n  }\n  private _collapsible = false;\n  // Main form group\n  @Input() form: NovoFormGroup;\n  // Controls for each item in the control group\n  @Input() controls: BaseControl[];\n  // Key of the control group (on the main form)\n  @Input() key: string;\n  // Label of the control group\n  @Input() label: string;\n  // Description of the control group (only use with position:bottom Add button!)\n  @Input() description: string;\n  // Message to display if there are no controls\n  @Input() emptyMessage: string;\n  // Icon of the control group (can have bhi prefix or not)\n  @Input()\n  set icon(v: string) {\n    this._icon = v && v.indexOf('bhi') !== -1 ? v : `bhi-${v}`;\n  }\n  get icon() {\n    return this._icon;\n  }\n  private _icon: string;\n  // Edit icon at the end of each row (no bhi- prefix)\n  @Input() editIcon = 'edit';\n  // Remove icon at the end of each row (no bhi- prefix)\n  @Input() removeIcon = 'delete-o';\n  // The initial value object, will create the form rows off of\n  @Input() initialValue: {}[];\n  // Callback to determine if the user can edit\n  @Input() canEdit: Function;\n  // Callback to determine if the user can delete\n  @Input() canRemove: Function;\n  // Optional callback for whether or not to remove the given row\n  @Input() shouldRemove: (number) => Promise<boolean>;\n  // Template for custom row rendering\n  @Input() rowTemplate: TemplateRef<any>;\n  // Template for custom column label rendering\n  @Input() columnLabelTemplate: TemplateRef<any>;\n\n  @Output() onRemove = new EventEmitter<{ value; index }>();\n  @Output() onEdit = new EventEmitter<{ value; index }>();\n  @Output() onAdd = new EventEmitter<any>();\n  @Output() change = new EventEmitter<any>();\n\n  controlLabels: { value: string; width: number; required: boolean; hidden?: boolean; key: string }[] = [];\n  toggled = false;\n  disabledArray: NovoControlGroupRowConfig[] = [];\n  editState: EditState = EditState.NOT_EDITING;\n  currentIndex = 0;\n\n  constructor(private formUtils: FormUtils, private fb: FormBuilder, private ref: ChangeDetectorRef) {}\n\n  ngAfterContentInit() {\n    if (!this.key) {\n      throw new Error('novo-control-group must have the [key] attribute provided!');\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const initialValueChange: SimpleChange = changes.initialValue;\n\n    // If initial value changes, clear the controls\n    if (initialValueChange && initialValueChange.currentValue !== initialValueChange.previousValue && !initialValueChange.firstChange) {\n      this.clearControls();\n    }\n\n    // Check for array, add a control for each value\n    if (this.initialValue && Array.isArray(this.initialValue)) {\n      if (this.initialValue.length !== 0) {\n        this.currentIndex = 0;\n        this.initialValue.forEach((value) => this.addNewControl(value));\n      }\n    } else if (this.initialValue) {\n      // If value is an object, just add one control\n      this.addNewControl(this.initialValue);\n    }\n    // If we are horizontal, grab the labels to help with layout\n    if (!this.vertical) {\n      this.controlLabels = (this.controls || []).map((control: BaseControl) => {\n        return {\n          value: control.label,\n          width: control.width,\n          required: control.required,\n          key: control.key,\n          hidden: control.hidden,\n        };\n      });\n      this.ref.markForCheck();\n    }\n  }\n\n  ngOnDestroy() {\n    this.clearControls();\n  }\n\n  onChange() {\n    this.change.emit(this);\n  }\n\n  onClickAdd() {\n    this.addNewControl();\n  }\n  onClickCancel() {\n    this.editState = EditState.NOT_EDITING;\n  }\n  onClickSave() {\n    this.disabledArray[this.currentIndex - 1].state = EditState.NOT_EDITING;\n    this.editState = EditState.NOT_EDITING;\n    const control: FormArray = this.form.controls[this.key] as FormArray;\n    if (control) {\n      const fg: NovoFormGroup = control.at(this.currentIndex - 1) as NovoFormGroup;\n      fg.disableAllControls();\n    }\n  }\n\n  resetAddRemove() {\n    this.disabledArray.forEach((item: NovoControlGroupRowConfig, idx: number) => {\n      item.edit = this.checkCanEdit(idx);\n      item.remove = this.checkCanRemove(idx);\n      if (!item.edit) {\n        item.state = EditState.NOT_EDITING;\n      }\n    });\n    this.ref.markForCheck();\n  }\n\n  addNewControl(value?: {}) {\n    const controlsArray: FormArray = this.form.controls[this.key] as FormArray;\n    const nestedFormGroup: NovoFormGroup = this.buildNestedFormGroup(value);\n    if (controlsArray) {\n      controlsArray.push(nestedFormGroup);\n    } else {\n      this.form.addControl(this.key, this.fb.array([nestedFormGroup]));\n    }\n    this.disabledArray.push({\n      state: EditState.EDITING,\n      edit: true,\n      remove: true,\n    });\n    this.resetAddRemove();\n    if (!value) {\n      this.onAdd.emit(nestedFormGroup);\n    }\n    this.currentIndex++;\n    this.assignIndexes();\n    // Ensure that field interaction changes for nested forms originating from outside the form will be reflected in the nested elements\n    nestedFormGroup.fieldInteractionEvents.subscribe(this.onFieldInteractionEvent.bind(this));\n    this.ref.markForCheck();\n  }\n\n  /**\n   * Will remove the control, and optionally, if the event is to be publicized (emitEvent = true) and there is a\n   * shouldRemove callback, then call the shouldRemove() callback to determine if the doRemoveControl should be called.\n   */\n  removeControl(index: number, emitEvent = true) {\n    if (emitEvent && Helpers.isFunction(this.shouldRemove)) {\n      this.shouldRemove(index).then((shouldRemove: boolean) => {\n        if (shouldRemove) {\n          this.doRemoveControl(index, emitEvent);\n        }\n      });\n    } else {\n      this.doRemoveControl(index, emitEvent);\n    }\n  }\n\n  private doRemoveControl(index: number, emitEvent: boolean) {\n    const controlsArray: FormArray = this.form.controls[this.key] as FormArray;\n    const nestedFormGroup = controlsArray.at(index) as NovoFormGroup;\n    nestedFormGroup.fieldInteractionEvents.unsubscribe();\n    if (emitEvent) {\n      this.onRemove.emit({ value: nestedFormGroup.getRawValue(), index });\n    }\n    controlsArray.removeAt(index);\n    this.disabledArray = this.disabledArray.filter((value: NovoControlGroupRowConfig, idx: number) => idx !== index);\n    this.resetAddRemove();\n    this.currentIndex--;\n    this.assignIndexes();\n    this.ref.markForCheck();\n  }\n\n  editControl(index: number) {\n    const controlsArray: FormArray = this.form.controls[this.key] as FormArray;\n    const fg = controlsArray.at(index) as NovoFormGroup;\n    fg.enableAllControls();\n    this.onEdit.emit({ value: controlsArray.at(index).value, index });\n  }\n\n  toggle(event: MouseEvent) {\n    Helpers.swallowEvent(event);\n    if (this.collapsible) {\n      this.toggled = !this.toggled;\n      this.ref.markForCheck();\n    }\n  }\n\n  private buildNestedFormGroup(value?: {}): NovoFormGroup {\n    const newControls = this.getNewControls();\n    if (value) {\n      this.formUtils.setInitialValues(newControls, value);\n    }\n    return this.formUtils.toFormGroup(newControls);\n  }\n\n  private clearControls() {\n    const controlsArray: FormArray = this.form.controls[this.key] as FormArray;\n    if (controlsArray) {\n      for (let i: number = controlsArray.length - 1; i >= 0; i--) {\n        this.removeControl(i, false);\n      }\n      this.currentIndex = 0;\n    }\n  }\n\n  private checkCanEdit(index: number): boolean {\n    if (this.canEdit) {\n      const controlsArray: FormArray = this.form.controls[this.key] as FormArray;\n      return this.canEdit(controlsArray.at(index).value, index);\n    }\n    return true;\n  }\n\n  private checkCanRemove(index: number): boolean {\n    if (this.canRemove) {\n      const controlsArray: FormArray = this.form.controls[this.key] as FormArray;\n      if (controlsArray.at(index)) {\n        return this.canRemove(controlsArray.at(index).value, index);\n      }\n      return true;\n    }\n    return true;\n  }\n\n  private getNewControls() {\n    const ret: BaseControl[] = [];\n    (this.controls || []).forEach((control: BaseControl) => {\n      ret.push(new BaseControl(control.__type, control));\n    });\n    return ret;\n  }\n\n  private assignIndexes() {\n    const controlsArray: FormArray = this.form.controls[this.key] as FormArray;\n    if (controlsArray) {\n      for (let i: number = 0; i < controlsArray.length; i++) {\n        const form = controlsArray.at(i) as NovoFormGroup;\n        form.associations = { ...form.associations, index: i };\n      }\n    }\n  }\n\n  private onFieldInteractionEvent() {\n    this.ref.markForCheck();\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_stacked: BooleanInput;\n  static ngAcceptInputType_vertical: BooleanInput;\n}\n","<h6 class=\"novo-section-header\" *ngIf=\"label\">\n  <span (click)=\"toggle($event)\" [class.clickable]=\"collapsible\">\n    <i *ngIf=\"icon && !collapsible\" [ngClass]=\"icon\" [attr.data-automation-id]=\"'novo-control-group-icon-' + key\"></i>\n    <i *ngIf=\"collapsible\" class=\"bhi-next\" [class.toggled]=\"toggled\"\n      [attr.data-automation-id]=\"'novo-control-group-collapse-' + key\"></i>\n    <span [attr.data-automation-id]=\"'novo-control-group-label-' + key\">{{ label }}</span>\n  </span>\n  <label class=\"novo-control-group-description\" *ngIf=\"description\"\n    [attr.data-automation-id]=\"'novo-control-group-description-' + key\">{{ description }}</label>\n</h6>\n<div class=\"novo-control-group-controls\" [class.vertical]=\"vertical\" [class.horizontal]=\"!vertical\"\n  [class.hidden]=\"collapsible && !toggled\">\n\n  <ng-template #defaultTemplate let-index=\"index\" let-form=\"form\" let-key=\"key\">\n    <div class=\"novo-control-group-control\">\n      <div *ngFor=\"let c of controls\" class=\"novo-control-container {{c.key}}\"\n        [class.is-label]=\"c.controlType === 'read-only'\" [style.max-width.px]=\"c.width\">\n        <novo-control (change)=\"onChange()\" [form]=\"(form?.controls)[key]['controls'][index]\" [control]=\"c\"\n          [condensed]=\"!vertical || c.controlType === 'read-only'\"></novo-control>\n      </div>\n      <div class=\"novo-control-container edit last\" *ngIf=\"edit && !vertical\">\n        <novo-button class=\"control-group-action\" [disabled]=\"!disabledArray[index].edit\" type=\"button\"\n          *ngIf=\"edit && !vertical\" theme=\"icon\" [icon]=\"editIcon\"\n          (click)=\"editControl(index)\" [attr.data-automation-id]=\"'novo-control-group-edit-' + key\" index=\"-1\">\n        </novo-button>\n      </div>\n      <div class=\"novo-control-container remove last\" *ngIf=\"remove && !vertical\">\n        <novo-button class=\"control-group-action\" [disabled]=\"!disabledArray[index].remove\" type=\"button\"\n          *ngIf=\"remove && !vertical\" theme=\"icon\"\n          [icon]=\"removeIcon\" (click)=\"removeControl(index)\"\n          [attr.data-automation-id]=\"'novo-control-group-delete-' + key\"\n          index=\"-1\">\n        </novo-button>\n      </div>\n    </div>\n    <novo-button class=\"control-group-action\" [disabled]=\"!disabledArray[index].edit\" type=\"button\"\n      *ngIf=\"edit && vertical\"\n      theme=\"icon\" [icon]=\"editIcon\"\n      (click)=\"editControl(index)\" [attr.data-automation-id]=\"'novo-control-group-edit-' + key\" index=\"-1\">\n    </novo-button>\n    <novo-button class=\"control-group-action\" [disabled]=\"!disabledArray[index].remove\" type=\"button\"\n      *ngIf=\"remove && vertical\" theme=\"icon\"\n      [icon]=\"removeIcon\" (click)=\"removeControl(index)\"\n      [attr.data-automation-id]=\"'novo-control-group-delete-' + key\"\n      index=\"-1\">\n    </novo-button>\n  </ng-template>\n\n  <ng-template #defaultColumnLabelTemplate let-form=\"form\" let-key=\"key\">\n    <div *ngFor=\"let label of controlLabels\"\n      class=\"novo-control-group-control-label {{ label.key }}\"\n      [class.novo-control-group-control-hidden]=\"label.hidden\"\n      [style.max-width.px]=\"label.width\" [class.column-required]=\"label.required\">\n      <span [attr.data-automation-id]=\"'novo-control-group-label-' + label.value\">{{ label.value }}</span>\n    </div>\n    <div class=\"novo-control-group-control-label edit last\" *ngIf=\"edit\"\n      [attr.data-automation-id]=\"'novo-control-group-edit-' + key\"></div>\n    <div class=\"novo-control-group-control-label remove last\" *ngIf=\"remove\"\n      [attr.data-automation-id]=\"'novo-control-group-delete-' + key\"></div>\n  </ng-template>\n\n  <ng-container *ngIf=\"!vertical && (form?.controls)[key] && (form?.controls)[key]['controls'].length !== 0\">\n    <div class=\"novo-control-group-labels\"\n      *ngIf=\"!vertical && (form?.controls)[key] && (form?.controls)[key]['controls'].length !== 0\">\n      <ng-template [ngTemplateOutlet]=\"columnLabelTemplate || defaultColumnLabelTemplate\"\n        [ngTemplateOutletContext]=\"{ form: form, key: key, controlLabels: controlLabels }\">\n      </ng-template>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"(form?.controls)[key]\">\n    <div class=\"novo-control-group-row\"\n      *ngFor=\"let control of (form?.controls)[key]['controls']; let index = index\">\n      <ng-template [ngTemplateOutlet]=\"rowTemplate || defaultTemplate\"\n        [ngTemplateOutletContext]=\"{ form: form, formGroup: control, index: index, key: key, controls: controls }\">\n      </ng-template>\n    </div>\n  </ng-container>\n\n  <div class=\"novo-control-group-empty\"\n    *ngIf=\"(form?.controls)[key] && (form?.controls)[key]['controls'].length === 0\"\n    [attr.data-automation-id]=\"'novo-control-group-empty-' + key\">\n    {{ emptyMessage }}\n  </div>\n\n  <div *ngIf=\"add\" class=\"novo-control-group-footer\">\n    <novo-button type=\"button\" theme=\"dialogue\" icon=\"add-thin\" side=\"left\" (click)=\"onClickAdd()\"\n      [attr.data-automation-id]=\"'novo-control-group-bottom-add-' + key\" index=\"-1\">\n      {{ add?.label }}\n    </novo-button>\n  </div>\n</div>\n","// NG2\nimport { Component, DoCheck, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { COUNTRIES, findByCountryId, getStates, Helpers } from 'novo-elements/utils';\n\n// Value accessor for the component (supports ngModel)\nconst ADDRESS_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => NovoAddressElement),\n  multi: true,\n};\n\nexport interface NovoAddressSubfieldConfig {\n  label: string;\n  required: boolean;\n  maxlength: number;\n  pickerConfig?: any;\n  hidden: boolean;\n  updated?: boolean;\n  readOnly?: boolean;\n}\n\nexport interface NovoAddressConfig {\n  required?: boolean;\n  readOnly?: boolean;\n  address1?: NovoAddressSubfieldConfig;\n  address2?: NovoAddressSubfieldConfig;\n  city?: NovoAddressSubfieldConfig;\n  state?: NovoAddressSubfieldConfig;\n  zip?: NovoAddressSubfieldConfig;\n  countryID?: NovoAddressSubfieldConfig;\n}\n\n@Component({\n    selector: 'novo-address',\n    providers: [ADDRESS_VALUE_ACCESSOR],\n    template: `\n    <span\n      *ngIf=\"!config?.address1?.hidden\"\n      class=\"street-address\"\n      [class.invalid]=\"invalid.address1\"\n      [class.focus]=\"focused.address1\"\n      [class.disabled]=\"disabled.address1\"\n    >\n      <i\n        *ngIf=\"config.address1.required\"\n        class=\"required-indicator address1\"\n        [ngClass]=\"{ 'bhi-circle': !valid.address1, 'bhi-check': valid.address1 }\"\n      >\n      </i>\n      <input\n        [class.maxlength-error]=\"invalidMaxlength.address1\"\n        type=\"text\"\n        id=\"address1\"\n        name=\"address1\"\n        [placeholder]=\"config.address1.label\"\n        [maxlength]=\"config?.address1?.maxlength\"\n        autocomplete=\"shipping street-address address-line-1\"\n        [(ngModel)]=\"model.address1\"\n        (ngModelChange)=\"updateControl()\"\n        (focus)=\"isFocused($event, 'address1')\"\n        (blur)=\"isBlurred($event, 'address1')\"\n        (input)=\"onInput($event, 'address1')\"\n        [disabled]=\"disabled.address1\"\n      />\n    </span>\n    <span\n      *ngIf=\"!config?.address2?.hidden\"\n      class=\"apt suite\"\n      [class.invalid]=\"invalid.address2\"\n      [class.focus]=\"focused.address2\"\n      [class.disabled]=\"disabled.address2\"\n    >\n      <i\n        *ngIf=\"config.address2.required\"\n        class=\"required-indicator address2\"\n        [ngClass]=\"{ 'bhi-circle': !valid.address2, 'bhi-check': valid.address2 }\"\n      >\n      </i>\n      <input\n        [class.maxlength-error]=\"invalidMaxlength.address2\"\n        type=\"text\"\n        id=\"address2\"\n        name=\"address2\"\n        [placeholder]=\"config.address2.label\"\n        [maxlength]=\"config?.address2?.maxlength\"\n        autocomplete=\"shipping address-line-2\"\n        [(ngModel)]=\"model.address2\"\n        (ngModelChange)=\"updateControl()\"\n        (focus)=\"isFocused($event, 'address2')\"\n        (blur)=\"isBlurred($event, 'address2')\"\n        (input)=\"onInput($event, 'address2')\"\n        [disabled]=\"disabled.address2\"\n      />\n    </span>\n    <span\n      *ngIf=\"!config?.city?.hidden\"\n      class=\"city locality\"\n      [class.invalid]=\"invalid.city\"\n      [class.focus]=\"focused.city\"\n      [class.disabled]=\"disabled.city\"\n    >\n      <i *ngIf=\"config.city.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.city, 'bhi-check': valid.city }\"> </i>\n      <input\n        [class.maxlength-error]=\"invalidMaxlength.city\"\n        type=\"text\"\n        id=\"city\"\n        name=\"city\"\n        [placeholder]=\"config.city.label\"\n        autocomplete=\"shipping city locality\"\n        [maxlength]=\"config?.city?.maxlength\"\n        [(ngModel)]=\"model.city\"\n        (ngModelChange)=\"updateControl()\"\n        (focus)=\"isFocused($event, 'city')\"\n        (blur)=\"isBlurred($event, 'city')\"\n        (input)=\"onInput($event, 'city')\"\n        [disabled]=\"disabled.city\"\n      />\n    </span>\n    <span\n      *ngIf=\"!config?.state?.hidden\"\n      class=\"state region\"\n      [class.invalid]=\"invalid.state\"\n      [class.focus]=\"focused.state\"\n      [class.disabled]=\"disabled.state\"\n      [tooltip]=\"tooltip.state\"\n    >\n      <i *ngIf=\"config.state.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.state, 'bhi-check': valid.state }\"> </i>\n      <novo-picker\n        [config]=\"config?.state?.pickerConfig\"\n        [placeholder]=\"config?.state?.label\"\n        (changed)=\"onStateChange($event)\"\n        autocomplete=\"shipping region\"\n        [(ngModel)]=\"model.state\"\n        [disablePickerInput]=\"disabled.state\"\n      ></novo-picker>\n    </span>\n    <span\n      *ngIf=\"!config?.zip?.hidden\"\n      class=\"zip postal-code\"\n      [class.invalid]=\"invalid.zip\"\n      [class.focus]=\"focused.zip\"\n      [class.disabled]=\"disabled.zip\"\n    >\n      <i *ngIf=\"config.zip.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.zip, 'bhi-check': valid.zip }\"> </i>\n      <input\n        [class.maxlength-error]=\"invalidMaxlength.zip\"\n        type=\"text\"\n        id=\"zip\"\n        name=\"zip\"\n        [placeholder]=\"config.zip.label\"\n        autocomplete=\"shipping postal-code\"\n        [maxlength]=\"config?.zip?.maxlength\"\n        [(ngModel)]=\"model.zip\"\n        (ngModelChange)=\"updateControl()\"\n        (focus)=\"isFocused($event, 'zip')\"\n        (blur)=\"isBlurred($event, 'zip')\"\n        (input)=\"onInput($event, 'zip')\"\n        [disabled]=\"disabled.zip\"\n      />\n    </span>\n    <span\n      *ngIf=\"!config?.countryID?.hidden\"\n      class=\"country-name\"\n      [class.invalid]=\"invalid.countryID\"\n      [class.focus]=\"focused.countryID\"\n      [class.disabled]=\"disabled.countryID\"\n    >\n      <i\n        *ngIf=\"config.countryID.required\"\n        class=\"required-indicator\"\n        [ngClass]=\"{ 'bhi-circle': !valid.countryID, 'bhi-check': valid.countryID }\"\n      >\n      </i>\n      <novo-picker\n        [config]=\"config?.countryID?.pickerConfig\"\n        [placeholder]=\"config.countryID.label\"\n        (changed)=\"onCountryChange($event)\"\n        autocomplete=\"shipping country\"\n        [(ngModel)]=\"model.countryID\"\n        [disablePickerInput]=\"disabled.countryID\"\n      ></novo-picker>\n    </span>\n  `,\n    styleUrls: ['./Address.scss'],\n    standalone: false,\n})\nexport class NovoAddressElement implements ControlValueAccessor, OnInit, DoCheck {\n  @Input()\n  config: NovoAddressConfig;\n  private _readOnly = false;\n  @Input()\n  set readOnly(readOnly: boolean) {\n    this._readOnly = readOnly;\n    this.fieldList.forEach((field: string) => {\n      this.disabled[field] = this._readOnly;\n    });\n    if (this.model) {\n      this.updateStates();\n    }\n  }\n  get readOnly(): boolean {\n    return this._readOnly;\n  }\n  private previousRequiredState: Record<string, boolean> = {};\n  states: Array<any> = [];\n  fieldList: Array<string> = ['address1', 'address2', 'city', 'state', 'zip', 'countryID'];\n  model: any;\n  onModelChange: Function = () => {};\n  onModelTouched: Function = () => {};\n  focused: any = {};\n  invalid: any = {};\n  disabled: any = {};\n  invalidMaxlength: any = {};\n  valid: any = {};\n  stateOptions: any;\n  tooltip: any = {};\n  initComplete = false;\n  @Output()\n  change: EventEmitter<any> = new EventEmitter();\n  @Output()\n  focus: EventEmitter<any> = new EventEmitter();\n  @Output()\n  blur: EventEmitter<any> = new EventEmitter();\n  @Output()\n  validityChange: EventEmitter<any> = new EventEmitter();\n\n  constructor(public labels: NovoLabelService) {}\n\n  ngOnInit() {\n    if (!this.config) {\n      this.config = {};\n    }\n    this.initConfig();\n    if (this.model) {\n      this.writeValue(this.model);\n      this.updateControl();\n    } else if (!this.model) {\n      this.model = {};\n    }\n    if (Helpers.isBlank(this.model.countryID)) {\n      this.updateStates();\n    }\n  }\n\n  initConfig(): void {\n    this.fieldList.forEach((field: string) => {\n      if (!this.config.hasOwnProperty(field)) {\n        this.config[field] = {\n          hidden: true,\n        };\n      }\n      if (!this.config[field].hasOwnProperty('label')) {\n        this.config[field].label = this.labels[field];\n      }\n      if (this.config.required) {\n        this.config[field].required = true;\n      }\n      if (this.config[field].readOnly || this.config.readOnly) {\n        this.config[field].readOnly = true;\n        this.disabled[field] = true;\n      }\n      if (field === 'countryID') {\n        if (!this.config[field].pickerConfig) {\n          this.config.countryID.pickerConfig = this.getDefaultCountryConfig();\n        }\n        this.config[field].pickerConfig.defaultOptions = this.config.countryID.pickerConfig.options;\n      }\n      if (field === 'state') {\n        if (!this.config[field].pickerConfig) {\n          this.config.state.pickerConfig = this.getDefaultStateConfig();\n          this.config[field].pickerConfig.defaultOptions = this.config[field].pickerConfig.options;\n        }\n        this.stateOptions = this.config[field].pickerConfig.options;\n        this.config[field].pickerConfig.options = (query = '') => {\n          return this.stateOptions(query, this.model.countryID);\n        };\n        this.config[field].pickerConfig.defaultOptions = this.stateOptions;\n      }\n    });\n\n    this.fieldList.forEach((field: string) => {\n      this.previousRequiredState[field] = this.config?.[field]?.required;\n    });\n\n    this.initComplete = true;\n  }\n\n  ngDoCheck(): void {\n    if (this.initComplete && this.config) {\n      this.fieldList.forEach((field: string) => {\n        const prevRequired = this.previousRequiredState[field];\n        const currRequired = this.config?.[field]?.required;\n\n        if (prevRequired !== currRequired) {\n          this.isValid(field);\n          this.isInvalid(field);\n          this.previousRequiredState[field] = currRequired;\n        }\n      });\n    }\n  }\n\n  isValid(field: string): void {\n    let valid = true;\n    if (\n      ((this.config[field].required && (Helpers.isBlank(this.model[field]) || Helpers.isEmpty(this.model[field]))) ||\n        !this.config[field].required) &&\n      !(field === 'countryID' && this.config[field].required && !Helpers.isBlank(this.model.countryID)) &&\n      !(\n        field === 'state' &&\n        this.config[field].required &&\n        (!Helpers.isEmpty(this.model.state) ||\n          ((Helpers.isBlank(this.model.state) || Helpers.isEmpty(this.model.state)) &&\n            !Helpers.isBlank(this.model.countryName) &&\n            this.config.state.pickerConfig &&\n            this.config.state.pickerConfig.defaultOptions &&\n            this.config.state.pickerConfig.defaultOptions.length === 0))\n      )\n    ) {\n      valid = false;\n    } else if (\n      !Helpers.isEmpty(this.model[field]) &&\n      !Helpers.isBlank(this.config[field].maxlength) &&\n      this.config[field].maxlength < this.model[field].length\n    ) {\n      valid = false;\n    }\n    this.valid[field] = valid;\n  }\n\n  isInvalid(field: string): void {\n    let invalid = false;\n    let invalidMaxlength = false;\n    if (\n      (field !== 'countryID' &&\n        field !== 'state' &&\n        this.config[field]?.required &&\n        Helpers.isEmpty(this.model[field]) &&\n        !Helpers.isBlank(this.model[field])) ||\n      (field === 'countryID' && this.config[field]?.required && Helpers.isBlank(this.model.countryName) && this.config[field]?.updated) ||\n      (field === 'state' &&\n        this.config[field]?.required &&\n        (Helpers.isBlank(this.model.state) || Helpers.isEmpty(this.model.state)) &&\n        !Helpers.isBlank(this.model.countryID) &&\n        this.config[field]?.updated &&\n        this.config.state.pickerConfig &&\n        this.config.state.pickerConfig.defaultOptions &&\n        this.config.state.pickerConfig.defaultOptions.length > 0)\n    ) {\n      invalid = true;\n    } else if (\n      !Helpers.isEmpty(this.model[field]) &&\n      !Helpers.isBlank(this.config[field]?.maxlength) &&\n      this.config[field]?.maxlength < this.model[field].length\n    ) {\n      invalid = true;\n      invalidMaxlength = true;\n    }\n    this.invalid[field] = invalid;\n    this.invalidMaxlength[field] = invalidMaxlength;\n  }\n\n  onInput(event: Event, field: string): void {\n    this.isInvalid(field);\n    this.isValid(field);\n    if (event) {\n      this.change.emit({ value: this.model[field], field });\n    }\n  }\n\n  isFocused(event: Event, field: string): void {\n    this.focused[field] = true;\n    this.focus.emit({ event, field });\n  }\n\n  isBlurred(event: Event, field: string): void {\n    this.focused[field] = false;\n    this.blur.emit({ event, field });\n  }\n\n  onCountryChange(evt) {\n    const country: any = evt && evt.rawValue ? evt.rawValue : null;\n    let field: any;\n    let statesUpdatable = false;\n    this.config.countryID.updated = true;\n    if (this.config.countryID.pickerConfig) {\n      field = this.config.countryID.pickerConfig.field;\n    }\n    if (country && field && !Helpers.isBlank(country[field]) && this.model.countryID !== country[field]) {\n      this.model.countryID = country[field];\n      this.model.countryName = Helpers.interpolate(this.config.countryID.pickerConfig.format, country);\n      this.disabled.state = false;\n      this.tooltip.state = undefined;\n      statesUpdatable = true;\n    } else if (Helpers.isBlank(country) || Helpers.isBlank(country[field])) {\n      this.model.countryID = undefined;\n      this.model.countryName = undefined;\n      this.disabled.state = true;\n      this.tooltip.state = this.labels.selectCountryFirst;\n      this.invalid.state = false;\n      statesUpdatable = true;\n    }\n\n    // Update state\n    if (statesUpdatable) {\n      this.model.state = undefined;\n      this.updateStates();\n    }\n    this.updateControl();\n    this.onInput(null, 'countryID');\n    this.onInput(null, 'state');\n  }\n\n  onStateChange(evt) {\n    const state: any = evt && evt.value ? evt.value : null;\n    this.config.state.updated = true;\n    this.model.state = state;\n    this.updateControl();\n    this.onInput(null, 'state');\n  }\n\n  setStateLabel(model: any) {\n    const state: string = model.state;\n    if (!Helpers.isBlank(state)) {\n      if (this.config.state.required) {\n        this.valid.state = true;\n      }\n      this.model.state = state;\n    } else {\n      this.model.state = undefined;\n      if (this.config.state.required) {\n        this.valid.state = false;\n      }\n    }\n  }\n\n  updateStates() {\n    if (this.config.state.pickerConfig.options && !Helpers.isBlank(this.model.countryID)) {\n      this.config.state.pickerConfig.options = (query = '') => {\n        return this.stateOptions(query, this.model.countryID);\n      };\n      this.stateOptions('', this.model.countryID).then((results) => {\n        this.config.state.pickerConfig.defaultOptions = results;\n        if (results.length) {\n          this.tooltip.state = undefined;\n          this.disabled.state = this._readOnly;\n          this.setStateLabel(this.model);\n        } else {\n          this.disabled.state = true;\n          this.tooltip.state = this.labels.noStatesForCountry;\n          if (this.config.state.required) {\n            this.valid.state = true;\n          }\n        }\n        this.validityChange.emit();\n        this.onInput(null, 'state');\n      });\n    } else {\n      this.config.state.pickerConfig.defaultOptions = [];\n      this.disabled.state = true;\n      this.tooltip.state = this.labels.selectCountryFirst;\n      if (this.config.state.required) {\n        this.valid.state = false;\n      }\n    }\n  }\n\n  getStateOptions(filter = '', countryID: number) {\n    if (countryID) {\n      const country = findByCountryId(countryID);\n      const states = getStates(country.name);\n      if (filter) {\n        return states.filter((name) => new RegExp(`${filter}`, 'gi').test(name));\n      }\n      return states;\n    } else {\n      return [];\n    }\n  }\n\n  updateControl() {\n    this.onModelChange(this.model);\n    this.onInput(null, 'countryID');\n    this.onInput(null, 'state');\n  }\n\n  writeValue(model) {\n    let loadingCountries = false;\n    if (model) {\n      let countryName;\n      if (model.countryName && model.countryID) {\n        countryName = model.countryName;\n      } else if (model.countryID) {\n        if (this.config.countryID.pickerConfig && this.config.countryID.pickerConfig.getLabels) {\n          if (Helpers.isFunction(this.config.countryID.pickerConfig.getLabels)) {\n            const promise = this.config.countryID.pickerConfig.getLabels(model.countryID);\n            loadingCountries = true;\n            if (promise.then) {\n              promise.then((result) => {\n                loadingCountries = false;\n                countryName = Helpers.interpolateWithFallback(this.config.countryID.pickerConfig.format, result);\n                this.model = Object.assign(model, { countryName });\n                this.updateStates();\n              });\n            }\n          }\n        }\n      }\n      if (countryName) {\n        countryName = countryName.trim();\n        model.state = model.state || '';\n        this.model = Object.assign(model, { countryName });\n      } else {\n        this.model = model;\n      }\n      if (!loadingCountries && !Helpers.isBlank(this.model.countryID)) {\n        this.updateStates();\n      }\n    }\n    this.fieldList.forEach((field: string) => {\n      this.onInput(null, field);\n    });\n  }\n\n  registerOnChange(fn: Function): void {\n    this.onModelChange = fn;\n  }\n\n  registerOnTouched(fn: Function): void {\n    this.onModelTouched = fn;\n  }\n\n  private getDefaultStateConfig() {\n    return {\n      field: 'value',\n      format: '$label',\n      options: (query = '', countryID) => {\n        return Promise.resolve(this.getStateOptions(query, countryID));\n      },\n      getLabels: (state: string) => {\n        return Promise.resolve(state);\n      },\n    };\n  }\n\n  private getDefaultCountryConfig() {\n    return {\n      field: 'value',\n      format: '$label',\n      options: (query = '') => {\n        return new Promise((resolve) => {\n          let countries = COUNTRIES;\n          if (query) {\n            countries = countries.filter((country) => new RegExp(`${query}`, 'gi').test(country.name));\n          }\n          return resolve(countries.map((country) => ({ value: country.id, label: country.name })));\n        });\n      },\n      getLabels: (countryID) => {\n        return new Promise((resolve: any) => {\n          const country: any = findByCountryId(countryID);\n          if (country) {\n            resolve({ value: country.id, label: country.name });\n          } else {\n            resolve('');\n          }\n        });\n      },\n    };\n  }\n}\n","export class NovoFile {\n  name: string = '';\n  file: any;\n  type: any;\n  contentType: string = '';\n  lastModified: number = 0;\n  size: number = 0;\n  loaded: boolean = false;\n  fileContents: string;\n  dataURL: string;\n  reader: FileReader = new FileReader();\n  readPromise: Function;\n\n  constructor(file) {\n    this.name = `${encodeURIComponent(file.name || '')}`;\n    this.contentType = file.type;\n    this.lastModified = file.lastModified;\n    this.size = file.size;\n    this.file = file;\n    this.reader.onload = (event: any) => {\n      this.fileContents = event.target.result.split(',')[1];\n      this.dataURL = event.target.result;\n      this.loaded = true;\n      if (this.readPromise) {\n        this.readPromise(this);\n      }\n    };\n  }\n\n  read() {\n    return new Promise((resolve) => {\n      this.readPromise = resolve;\n      // when the file is read it triggers the onload event above.\n      this.reader.readAsDataURL(this.file);\n    });\n  }\n\n  toJSON() {\n    return {\n      name: this.name,\n      contentType: this.type,\n      lastModified: this.lastModified,\n      size: this.size,\n      fileContents: this.fileContents,\n    };\n  }\n}\n","// NG2\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { CanUpdateErrorStateCtor, ErrorStateMatcher, mixinErrorState } from 'novo-elements/elements/common';\nimport { NovoFieldControl } from 'novo-elements/elements/field';\nimport { GlobalRef, NovoLabelService } from 'novo-elements/services';\nimport { NovoFile } from './extras/file/File';\n\nconst LAYOUT_DEFAULTS = { order: 'default', download: true, removable: true, labelStyle: 'default', draggable: false };\n// make file-input ids unique\nlet nextId = 0;\n\nclass NovoFileInputBase {\n  constructor(\n    public _defaultErrorStateMatcher: ErrorStateMatcher,\n    public _parentForm: NgForm,\n    public _parentFormGroup: FormGroupDirective,\n    public ngControl: NgControl,\n  ) {}\n}\nconst NovoFileInputMixins: CanUpdateErrorStateCtor & typeof NovoFileInputBase = mixinErrorState(NovoFileInputBase);\n\n@Component({\n    selector: 'novo-file-input',\n    providers: [{ provide: NovoFieldControl, useExisting: NovoFileInputElement }],\n    templateUrl: './FileInput.html',\n    styleUrls: ['./FileInput.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: false,\n})\nexport class NovoFileInputElement extends NovoFileInputMixins implements NovoFieldControl<any>, ControlValueAccessor, OnInit {\n  private _uniqueId: string = `novo-file-input-${++nextId}`;\n  /** The aria-describedby attribute on the chip list for improved a11y. */\n  _ariaDescribedby: string;\n  /** Tab index for the chip list. */\n  _tabIndex = 0;\n  /** User defined tab index. */\n  _userTabIndex: number | null = null;\n  /** The FocusKeyManager which handles focus. */\n  _keyManager: FocusKeyManager<NovoFileInputElement>;\n\n  readonly controlType: string = 'file-input';\n  /** @docs-private Implemented as part of NovoFieldControl. */\n  lastKeyValue: string = null;\n  /** @docs-private Implemented as part of NovoFieldControl.*/\n  lastCaretPosition: number | null;\n\n  @Input() id: string = this._uniqueId;\n  @Input() tabindex: number = 0;\n  /** An object used to control when error messages are shown. */\n  @Input() errorStateMatcher: ErrorStateMatcher;\n\n  // ----------\n  @ViewChild('fileInput', { static: true })\n  fileInput: TemplateRef<any>;\n  @ViewChild('fileOutput', { static: true })\n  fileOutput: TemplateRef<any>;\n  @ViewChild('container', { read: ViewContainerRef, static: true })\n  container: ViewContainerRef;\n  @ViewChild('inputElement') inputElement: ElementRef<HTMLInputElement>;\n\n  @Input()\n  multiple: boolean = false;\n\n  @Input()\n  layoutOptions: {\n    order?: string;\n    download?: boolean;\n    edit?: boolean;\n    labelStyle?: string;\n    draggable?: boolean;\n    customActions?: boolean;\n    removable?: boolean;\n    customValidation?: { action: string; fn: Function }[];\n    removableWhenNew?: boolean;\n  };\n  @Input()\n  value: Array<any> = [];\n  @Input()\n  dataFeatureId: string;\n\n  @Output()\n  edit: EventEmitter<any> = new EventEmitter();\n  @Output()\n  save: EventEmitter<any> = new EventEmitter();\n  @Output()\n  delete: EventEmitter<any> = new EventEmitter();\n  @Output()\n  upload: EventEmitter<any> = new EventEmitter();\n\n  files: NovoFile[] = [];\n  model: any;\n  active: boolean = false;\n  commands: any;\n  visible: boolean;\n  target: any;\n  fileOutputBag: string;\n\n  onModelChange: Function = () => {};\n  onModelTouched: Function = () => {};\n\n  @Input()\n  get name(): string {\n    return this._name;\n  }\n\n  set name(value: string) {\n    this._name = value;\n  }\n\n  @HostBinding('class.disabled')\n  @Input()\n  get disabled(): boolean {\n    return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n  }\n\n  /**\n   * Implemented as part of NovoFieldControl.\n   * @docs-private\n   */\n  @Input()\n  get required(): boolean {\n    return this._required;\n  }\n  set required(value: boolean) {\n    this._required = coerceBooleanProperty(value);\n    this.stateChanges.next();\n  }\n\n  /** Implemented as part of NovoFieldControl. */\n  @Input()\n  get placeholder(): string {\n    return this._placeholder;\n  }\n  set placeholder(value: string) {\n    this._placeholder = value;\n  }\n\n  protected _name: string = this._uniqueId;\n  protected _value: boolean = false;\n  protected _required: boolean = false;\n  protected _disabled: boolean = false;\n  protected _placeholder: string;\n\n  constructor(\n    public labels: NovoLabelService,\n    private globalRef: GlobalRef,\n    _defaultErrorStateMatcher: ErrorStateMatcher,\n    @Optional() _parentForm: NgForm,\n    @Optional() _parentFormGroup: FormGroupDirective,\n    @Optional() @Self() _ngControl: NgControl,\n  ) {\n    super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, _ngControl);\n    if (_ngControl) {\n      _ngControl.valueAccessor = this;\n    }\n  }\n\n  ngOnInit() {\n    this.updateLayout();\n    this.setInitialFileList();\n    this.dataFeatureId = this.dataFeatureId ? this.dataFeatureId : this.name;\n  }\n\n  updateLayout() {\n    this.layoutOptions = Object.assign({}, LAYOUT_DEFAULTS, this.layoutOptions);\n    this.insertTemplatesBasedOnLayout();\n  }\n\n  insertTemplatesBasedOnLayout() {\n    let order;\n    switch (this.layoutOptions.order) {\n      case 'displayFilesBelow':\n        order = ['fileInput', 'fileOutput'];\n        break;\n      default:\n        order = ['fileOutput', 'fileInput'];\n    }\n    order.forEach((template) => {\n      this.container.createEmbeddedView(this[template], 0);\n    });\n    return order;\n  }\n\n  get outputFileDraggingDisabled(): boolean {\n    const draggable = this.layoutOptions?.draggable;\n    return draggable != null && !draggable;\n  }\n\n  private setInitialFileList() {\n    if (this.value) {\n      this.files = this.value;\n    }\n  }\n\n  @HostListener('dragenter', ['$event'])\n  dragEnterHandler(event) {\n    event.preventDefault();\n    event.dataTransfer.dropEffect = 'copy';\n    this.target = event.target;\n    this.active = true;\n  }\n\n  @HostListener('dragleave', ['$event'])\n  dragLeaveHandler(event) {\n    event.preventDefault();\n    if (this.target === event.target) {\n      this.active = false;\n    }\n  }\n\n  @HostListener('dragover', ['$event'])\n  dragOverHandler(event) {\n    event.preventDefault();\n    // no-op\n  }\n\n  @HostListener('drop', ['$event'])\n  dropHandler(event) {\n    event.preventDefault();\n    this.visible = false;\n    if (event.dataTransfer.types[0] !== 'Files') {\n      return;\n    }\n    const options: any = this.layoutOptions;\n    const filelist = Array.from(event.dataTransfer.files);\n    if (options.customActions) {\n      this.upload.emit(this.multiple ? filelist : [filelist[0]]);\n    } else {\n      this.process(this.multiple ? filelist : [filelist[0]]);\n    }\n    this.active = false;\n  }\n\n  dropOutputItem(event: CdkDragDrop<NovoFile[]>) {\n    moveItemInArray(this.files, event.previousIndex, event.currentIndex);\n  }\n\n  writeValue(model: any): void {\n    this.model = model;\n    // If model is cleared programmatically (E.g. form.patchValue({file: undefined})), empty file list.\n    this.files = !model ? [] : this.files;\n  }\n\n  registerOnChange(fn: Function): void {\n    this.onModelChange = fn;\n  }\n\n  registerOnTouched(fn: Function): void {\n    this.onModelTouched = fn;\n  }\n\n  check(event) {\n    this.process(Array.from(event.target.files));\n    // After processing file upload, clear input element value. Allows for delete and upload of same file.\n    event.target.value = '';\n  }\n\n  validate(files): boolean {\n    let passedValidation = true;\n    if (this.layoutOptions.customValidation) {\n      this.layoutOptions.customValidation\n        .filter((validation) => validation.action === 'upload')\n        .forEach((uploadValidation) => {\n          passedValidation = uploadValidation.fn(files) && passedValidation;\n        });\n    }\n    return passedValidation;\n  }\n\n  private process(filelist) {\n    if (this.validate(filelist)) {\n      Promise.all(filelist.map((file) => this.readFile(file))).then((files) => {\n        if (this.multiple) {\n          this.files.push(...files);\n        } else {\n          this.files = files;\n        }\n        this.model = this.files;\n        this.onModelChange(this.model);\n      });\n    }\n  }\n\n  download(file) {\n    // Using an injected instance of window to make sure that unit tests do not open a new window, even accidentally\n    this.globalRef.nativeWindow.open(file.dataURL, '_blank');\n  }\n\n  remove(file) {\n    this.files.splice(\n      this.files.findIndex((f) => f.name === file.name && f.size === file.size),\n      1,\n    );\n    this.model = this.files;\n    this.onModelChange(this.model);\n  }\n\n  private readFile(file) {\n    return new NovoFile(file).read();\n  }\n\n  customEdit(file) {\n    this.edit.emit(file);\n  }\n\n  customSave(file) {\n    this.save.emit(file);\n  }\n\n  customDelete(file) {\n    this.delete.emit(file);\n  }\n\n  customCheck(event) {\n    this.upload.emit(event);\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  /** Whether any radio buttons has focus. */\n  get focused(): boolean {\n    // todo: implement this.\n    return false;\n  }\n\n  /** Implemented as part of NovoFieldControl. */\n  get empty(): boolean {\n    return this.value === null;\n  }\n\n  /** Implemented as part of NovoFieldControl. */\n  get shouldLabelFloat(): boolean {\n    return !this.empty || this.focused;\n  }\n\n  /** Implemented as part of NovoFieldControl. */\n  setDescribedByIds(ids: string[]) {\n    this._ariaDescribedby = ids.join(' ');\n  }\n\n  /** Implemented as part of NovoFieldControl. */\n  onContainerClick(event: MouseEvent) {\n    this.focus();\n  }\n\n  /**\n   * Focuses the first non-disabled chip in this chip list, or the associated input when there\n   * are no eligible chips.\n   */\n  focus(options?: FocusOptions): void {\n    if (this.disabled) {\n      return;\n    }\n    // TODO\n  }\n}\n","<div #container></div>\n<ng-template #fileInput>\n  <div class=\"file-input-group\" [class.disabled]=\"disabled\" [class.active]=\"active\">\n    <input\n      #inputElement\n      *ngIf=\"!layoutOptions.customActions\"\n      type=\"file\"\n      [name]=\"name\"\n      [attr.id]=\"name\"\n      (change)=\"check($event)\"\n      [attr.multiple]=\"multiple\"\n      tabindex=\"-1\"\n      [attr.data-feature-id]=\"dataFeatureId\"\n    />\n    <input\n      #inputElement\n      *ngIf=\"layoutOptions.customActions\"\n      type=\"file\"\n      [name]=\"name\"\n      [attr.id]=\"name\"\n      (change)=\"customCheck($event)\"\n      [attr.multiple]=\"multiple\"\n      tabindex=\"-1\"\n      [attr.data-feature-id]=\"dataFeatureId\"\n    />\n    <section [ngSwitch]=\"layoutOptions.labelStyle\">\n      <label *ngSwitchCase=\"'no-box'\" [attr.for]=\"name\" class=\"no-box\">\n        <div>\n          <i class=\"bhi-dropzone\"></i>{{ placeholder || labels.chooseAFile }} {{ labels.or }}\n          <strong class=\"link\">{{ labels.clickToBrowse }}</strong>\n        </div>\n      </label>\n      <label *ngSwitchDefault [attr.for]=\"name\" class=\"boxed\">\n        <span>{{ placeholder || labels.chooseAFile }}</span>\n        <small\n          >{{ labels.or }} <strong class=\"link\">{{ labels.clickToBrowse }}</strong></small\n        >\n      </label>\n    </section>\n  </div>\n</ng-template>\n<ng-template #fileOutput>\n  <div class=\"file-output-group\" cdkDropList [cdkDropListDisabled]=\"outputFileDraggingDisabled\" (cdkDropListDropped)=\"dropOutputItem($event)\">\n    <div class=\"file-item\" cdkDrag *ngFor=\"let file of files\" [class.disabled]=\"disabled\">\n      <i *ngIf=\"layoutOptions.draggable\" class=\"bhi-move\"></i>\n      <label *ngIf=\"file.link\"\n        ><span\n          ><a href=\"{{ file.link }}\" target=\"_blank\">{{ file.name | decodeURI }}</a></span\n        ><span *ngIf=\"file.description\">||</span><span>{{ file.description }}</span></label\n      >\n      <label *ngIf=\"!file.link\">{{ file.name | decodeURI }}</label>\n      <div class=\"actions\" [attr.data-automation-id]=\"'file-actions'\" *ngIf=\"file.loaded\">\n        <div *ngIf=\"!layoutOptions.customActions\">\n          <button\n            *ngIf=\"layoutOptions.download\"\n            type=\"button\"\n            theme=\"icon\"\n            icon=\"save\"\n            (click)=\"download(file)\"\n            [attr.data-automation-id]=\"'file-download'\"\n            tabindex=\"-1\"\n          ></button>\n          <button\n            *ngIf=\"!disabled && (layoutOptions.removable || (!layoutOptions.removable && layoutOptions.removableWhenNew && !file.link))\"\n            type=\"button\"\n            theme=\"icon\"\n            icon=\"close\"\n            (click)=\"remove(file)\"\n            [attr.data-automation-id]=\"'file-remove'\"\n            tabindex=\"-1\"\n          ></button>\n        </div>\n        <div *ngIf=\"layoutOptions.customActions\">\n          <button\n            *ngIf=\"layoutOptions.edit && !disabled\"\n            type=\"button\"\n            theme=\"icon\"\n            icon=\"edit\"\n            (click)=\"customEdit(file)\"\n            [attr.data-automation-id]=\"'file-edit'\"\n            tabindex=\"-1\"\n          ></button>\n          <button\n            *ngIf=\"layoutOptions.download\"\n            type=\"button\"\n            theme=\"icon\"\n            icon=\"save\"\n            (click)=\"customSave(file)\"\n            [attr.data-automation-id]=\"'file-download'\"\n            tabindex=\"-1\"\n          ></button>\n          <button\n            *ngIf=\"!disabled\"\n            type=\"button\"\n            theme=\"icon\"\n            icon=\"close\"\n            (click)=\"customDelete(file)\"\n            [attr.data-automation-id]=\"'file-remove'\"\n            tabindex=\"-1\"\n          ></button>\n        </div>\n      </div>\n      <novo-loading *ngIf=\"!file.loaded\"></novo-loading>\n    </div>\n  </div>\n</ng-template>","import { AfterViewInit, Component, QueryList, ViewChildren } from '@angular/core';\nimport { NovoTemplate } from 'novo-elements/elements/common';\nimport { NovoTemplateService } from 'novo-elements/services';\n@Component({\n    selector: 'novo-control-templates',\n    template: `\n    <!---Readonly--->\n    <ng-template novoTemplate=\"read-only\" let-form=\"form\" let-control>\n      <div>{{ form.getRawValue()[control.key] }}</div>\n    </ng-template>\n    <!--Textbox--->\n    <ng-template novoTemplate=\"textbox\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div\n        [formGroup]=\"form\"\n        class=\"novo-control-input-container novo-control-input-with-label\"\n        [tooltip]=\"control?.tooltip\"\n        [tooltipPosition]=\"control?.tooltipPosition\"\n        [tooltipSize]=\"control?.tooltipSize\"\n        [tooltipPreline]=\"control?.tooltipPreline\"\n        [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n        [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n        [novoPopover]=\"control.popoverContent\"\n        [popoverHtmlContent]=\"control.popoverHtmlContent\"\n        [popoverTitle]=\"control.popoverTitle\"\n        [popoverPlacement]=\"control.popoverPlacement\"\n        [popoverOnHover]=\"control.popoverOnHover\"\n        [popoverAlways]=\"control.popoverAlways\"\n        [popoverDisabled]=\"control.popoverDisabled\"\n        [popoverAnimation]=\"control.popoverAnimation\"\n        [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n      >\n        <input\n          *ngIf=\"control?.type !== 'number' && control?.textMaskEnabled\"\n          [imask]=\"control.maskOptions\"\n          [formControlName]=\"control.key\"\n          [id]=\"control.key\"\n          [type]=\"control?.type\"\n          [placeholder]=\"control?.placeholder\"\n          (accept)=\"methods.handleAccept($event)\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          autocomplete\n        />\n        <input\n          *ngIf=\"control?.type !== 'number' && !control?.textMaskEnabled\"\n          [class.maxlength-error]=\"errors?.maxlength\"\n          [formControlName]=\"control.key\"\n          [id]=\"control.key\"\n          [type]=\"control?.type\"\n          [placeholder]=\"control?.placeholder\"\n          (input)=\"methods.emitChange($event)\"\n          [maxlength]=\"control?.maxlength\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          autocomplete\n        />\n        <input\n          *ngIf=\"control?.type === 'number' && control?.subType !== 'percentage'\"\n          [class.maxlength-error]=\"errors?.maxlength\"\n          [formControlName]=\"control.key\"\n          [id]=\"control.key\"\n          [type]=\"control?.type\"\n          [placeholder]=\"control?.placeholder\"\n          (keydown)=\"methods.restrictKeys($event)\"\n          (input)=\"methods.emitChange($event)\"\n          [maxlength]=\"control?.maxlength\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          step=\"any\"\n          (mousewheel)=\"numberInput.blur()\"\n          #numberInput\n        />\n        <!-- the percentage input does not use formControlName like a normal reactive input because instead of\n          setting the floating point value directly, it is multiplied by 100 into a percentage value -->\n        <input\n          *ngIf=\"control?.type === 'number' && control?.subType === 'percentage'\"\n          [id]=\"control.key\"\n          [type]=\"control?.type\"\n          [placeholder]=\"control?.placeholder\"\n          (keydown)=\"methods.restrictKeys($event)\"\n          [value]=\"control?.percentValue\"\n          [disabled]=\"control?.readOnly\"\n          (input)=\"methods.handlePercentChange($event)\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          step=\"any\"\n          (mousewheel)=\"percentInput.blur()\"\n          #percentInput\n        />\n        <label class=\"input-label\" *ngIf=\"control?.subType === 'currency'\">{{ control.currencyFormat }}</label>\n        <label class=\"input-label\" *ngIf=\"control?.subType === 'percentage'\">%</label>\n      </div>\n    </ng-template>\n\n    <!--Textarea--->\n    <ng-template novoTemplate=\"text-area\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div\n        class=\"textarea-container\"\n        [formGroup]=\"form\"\n        [tooltip]=\"control?.tooltip\"\n        [tooltipPosition]=\"control?.tooltipPosition\"\n        [tooltipSize]=\"control?.tooltipSize\"\n        [tooltipPreline]=\"control?.tooltipPreline\"\n        [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n        [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n        [novoPopover]=\"control.popoverContent\"\n        [popoverHtmlContent]=\"control.popoverHtmlContent\"\n        [popoverTitle]=\"control.popoverTitle\"\n        [popoverPlacement]=\"control.popoverPlacement\"\n        [popoverOnHover]=\"control.popoverOnHover\"\n        [popoverAlways]=\"control.popoverAlways\"\n        [popoverDisabled]=\"control.popoverDisabled\"\n        [popoverAnimation]=\"control.popoverAnimation\"\n        [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n      >\n        <textarea\n          [class.maxlength-error]=\"errors?.maxlength\"\n          [name]=\"control.key\"\n          [attr.id]=\"control.key\"\n          [placeholder]=\"control.placeholder\"\n          [formControlName]=\"control.key\"\n          autosize\n          (input)=\"methods.handleTextAreaInput($event)\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          [maxlength]=\"control?.maxlength\"\n        ></textarea>\n      </div>\n    </ng-template>\n\n    <!--Editor-->\n    <ng-template novoTemplate=\"editor\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-editor\n          [name]=\"control.key\"\n          [formControlName]=\"control.key\"\n          [startupFocus]=\"control.startupFocus\"\n          [minimal]=\"control.minimal\"\n          [fileBrowserImageUploadUrl]=\"control.fileBrowserImageUploadUrl\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          [config]=\"control.config\"\n        ></novo-editor>\n      </div>\n    </ng-template>\n\n    <!--AceEditor-->\n    <ng-template novoTemplate=\"ace-editor\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-ace-editor\n          [name]=\"control.key\"\n          [formControlName]=\"control.key\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n        ></novo-ace-editor>\n      </div>\n    </ng-template>\n\n    <!--CodeEditor-->\n    <ng-template novoTemplate=\"code-editor\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-code-editor\n          [name]=\"control.key\"\n          [formControlName]=\"control.key\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n        ></novo-code-editor>\n      </div>\n    </ng-template>\n\n    <!--HTML5 Select-->\n    <ng-template novoTemplate=\"native-select\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <select\n          [id]=\"control.key\"\n          [formControlName]=\"control.key\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n        >\n          <option *ngIf=\"control.placeholder\" value=\"\" disabled selected hidden>{{ control.placeholder }}</option>\n          <option *ngFor=\"let opt of control.options\" [value]=\"opt.key\">{{ opt.value }}</option>\n        </select>\n      </div>\n    </ng-template>\n\n    <!--File-->\n    <ng-template novoTemplate=\"file\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-file-input\n          [formControlName]=\"control.key\"\n          [id]=\"control.key\"\n          [name]=\"control.key\"\n          [placeholder]=\"control.placeholder\"\n          [value]=\"control.value\"\n          [multiple]=\"control.multiple\"\n          [layoutOptions]=\"control.layoutOptions\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n          (edit)=\"methods.handleEdit($event)\"\n          (save)=\"methods.handleSave($event)\"\n          (delete)=\"methods.handleDelete($event)\"\n          (upload)=\"methods.handleUpload($event)\"\n        ></novo-file-input>\n      </div>\n    </ng-template>\n\n    <!--Tiles-->\n    <ng-template novoTemplate=\"tiles\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-tiles\n          [options]=\"control.options\"\n          [formControlName]=\"control.key\"\n          (onChange)=\"methods.modelChange($event)\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n          [controlDisabled]=\"control.disabled\"\n        ></novo-tiles>\n      </div>\n    </ng-template>\n\n    <!--Picker-->\n    <ng-template novoTemplate=\"picker\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\" class=\"novo-control-input-container\">\n        <novo-picker\n          [config]=\"control.config\"\n          [formControlName]=\"control.key\"\n          [placeholder]=\"control.placeholder\"\n          [parentScrollSelector]=\"control.parentScrollSelector\"\n          [allowCustomValues]=\"control.config.allowCustomValues\"\n          *ngIf=\"!control.multiple\"\n          (select)=\"methods.modelChange($event)\"\n          (changed)=\"methods.modelChangeWithRaw($event)\"\n          (typing)=\"methods.handleTyping($event)\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n        ></novo-picker>\n        <novo-chips\n          [source]=\"control.config\"\n          [type]=\"control.config.type\"\n          [formControlName]=\"control.key\"\n          [placeholder]=\"control.placeholder\"\n          [maxlength]=\"control?.maxlength\"\n          [allowCustomValues]=\"control.config.allowCustomValues\"\n          *ngIf=\"control.multiple && !control.config.columns\"\n          [closeOnSelect]=\"control.closeOnSelect\"\n          (changed)=\"methods.modelChangeWithRaw($event)\"\n          (typing)=\"methods.handleTyping($event)\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n        ></novo-chips>\n        <novo-row-chips\n          [source]=\"control.config\"\n          [type]=\"control.config.type\"\n          [formControlName]=\"control.key\"\n          [placeholder]=\"control.placeholder\"\n          [maxlength]=\"control?.maxlength\"\n          *ngIf=\"control.multiple && control.config.columns\"\n          [closeOnSelect]=\"control.closeOnSelect\"\n          (changed)=\"methods.modelChangeWithRaw($event)\"\n          (typing)=\"methods.handleTyping($event)\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n        ></novo-row-chips>\n      </div>\n    </ng-template>\n\n    <!--Novo Select-->\n    <ng-template novoTemplate=\"select\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-select\n          [options]=\"control.options\"\n          [headerConfig]=\"control.headerConfig\"\n          [placeholder]=\"control.placeholder\"\n          [formControlName]=\"control.key\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n          (onSelect)=\"methods.modelChange($event)\"\n        ></novo-select>\n      </div>\n    </ng-template>\n\n    <!--Timezone -->\n    <ng-template novoTemplate=\"timezone\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-select\n          [options]=\"control.options\"\n          [headerConfig]=\"control.headerConfig\"\n          [placeholder]=\"control.placeholder\"\n          [formControlName]=\"control.key\"\n          [tooltip]=\"control.tooltip\"\n          [tooltipPosition]=\"control.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n          position=\"bottom\"\n          (onSelect)=\"methods.modelChange($event)\"\n        ></novo-select>\n      </div>\n    </ng-template>\n\n    <!--Radio-->\n    <ng-template novoTemplate=\"radio\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\" class=\"novo-control-input-container\">\n        <novo-radio-group [name]=\"control.key\" [formControlName]=\"control.key\" [disabled]=\"control.disabled\">\n          <novo-radio\n            *ngFor=\"let option of control.options\"\n            [value]=\"option.value\"\n            [label]=\"option.label\"\n            [checked]=\"\n              option.value === form.getRawValue()[control.key] ||\n              (form.getRawValue()[control.key] && option.value === form.getRawValue()[control.key].id)\n            \"\n            [tooltip]=\"control.tooltip\"\n            [tooltipPosition]=\"control.tooltipPosition\"\n            [tooltipSize]=\"control?.tooltipSize\"\n            [tooltipPreline]=\"control?.tooltipPreline\"\n            [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n            [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n            [novoPopover]=\"control.popoverContent\"\n            [popoverHtmlContent]=\"control.popoverHtmlContent\"\n            [popoverTitle]=\"control.popoverTitle\"\n            [popoverPlacement]=\"control.popoverPlacement\"\n            [popoverOnHover]=\"control.popoverOnHover\"\n            [popoverAlways]=\"control.popoverAlways\"\n            [popoverDisabled]=\"control.popoverDisabled\"\n            [popoverAnimation]=\"control.popoverAnimation\"\n            [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n            [button]=\"!!option.icon\"\n            [icon]=\"option.icon\"\n            [color]=\"option.color\"\n            [theme]=\"!!option.icon && !option.label ? 'icon' : 'secondary'\"\n            [attr.data-automation-id]=\"control.key + '-' + (option?.label || option?.value)\"\n          ></novo-radio>\n        </novo-radio-group>\n      </div>\n    </ng-template>\n\n    <!--Time-->\n    <ng-template novoTemplate=\"time\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div\n        [formGroup]=\"form\"\n        class=\"novo-control-input-container\"\n        [tooltip]=\"control?.tooltip\"\n        [tooltipPosition]=\"control?.tooltipPosition\"\n        [tooltipSize]=\"control?.tooltipSize\"\n        [tooltipPreline]=\"control?.tooltipPreline\"\n        [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n        [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n        [novoPopover]=\"control.popoverContent\"\n        [popoverHtmlContent]=\"control.popoverHtmlContent\"\n        [popoverTitle]=\"control.popoverTitle\"\n        [popoverPlacement]=\"control.popoverPlacement\"\n        [popoverOnHover]=\"control.popoverOnHover\"\n        [popoverAlways]=\"control.popoverAlways\"\n        [popoverDisabled]=\"control.popoverDisabled\"\n        [popoverAnimation]=\"control.popoverAnimation\"\n        [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n      >\n        <novo-time-picker-input\n          [attr.id]=\"control.key\"\n          [name]=\"control.key\"\n          [formControlName]=\"control.key\"\n          [placeholder]=\"control.placeholder\"\n          [military]=\"control.military\"\n        ></novo-time-picker-input>\n      </div>\n    </ng-template>\n\n    <!--Native Input--->\n    <ng-template novoTemplate=\"native-input\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div\n        [formGroup]=\"form\"\n        class=\"novo-control-input-container novo-control-input-with-label\"\n        [tooltip]=\"control?.tooltip\"\n        [tooltipPosition]=\"control?.tooltipPosition\"\n        [tooltipSize]=\"control?.tooltipSize\"\n        [tooltipPreline]=\"control?.tooltipPreline\"\n        [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n        [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n        [novoPopover]=\"control.popoverContent\"\n        [popoverHtmlContent]=\"control.popoverHtmlContent\"\n        [popoverTitle]=\"control.popoverTitle\"\n        [popoverPlacement]=\"control.popoverPlacement\"\n        [popoverOnHover]=\"control.popoverOnHover\"\n        [popoverAlways]=\"control.popoverAlways\"\n        [popoverDisabled]=\"control.popoverDisabled\"\n        [popoverAnimation]=\"control.popoverAnimation\"\n        [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n      >\n        <input\n          [formControlName]=\"control.key\"\n          [id]=\"control.key\"\n          [type]=\"control.type\"\n          [placeholder]=\"control?.placeholder\"\n          (input)=\"methods.emitChange($event)\"\n          (focus)=\"methods.handleFocus($event)\"\n          (blur)=\"methods.handleBlur($event)\"\n        />\n      </div>\n    </ng-template>\n\n    <!--Date-->\n    <ng-template novoTemplate=\"date\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div\n        [formGroup]=\"form\"\n        class=\"novo-control-input-container\"\n        [tooltip]=\"control.tooltip\"\n        [tooltipPosition]=\"control.tooltipPosition\"\n        [tooltipSize]=\"control?.tooltipSize\"\n        [tooltipPreline]=\"control?.tooltipPreline\"\n        [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n        [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n        [novoPopover]=\"control.popoverContent\"\n        [popoverHtmlContent]=\"control.popoverHtmlContent\"\n        [popoverTitle]=\"control.popoverTitle\"\n        [popoverPlacement]=\"control.popoverPlacement\"\n        [popoverOnHover]=\"control.popoverOnHover\"\n        [popoverAlways]=\"control.popoverAlways\"\n        [popoverDisabled]=\"control.popoverDisabled\"\n        [popoverAnimation]=\"control.popoverAnimation\"\n        [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n      >\n        <novo-date-picker-input\n          [attr.id]=\"control.key\"\n          [name]=\"control.key\"\n          [formControlName]=\"control.key\"\n          [start]=\"control.startDate\"\n          [end]=\"control.endDate\"\n          [format]=\"control.dateFormat\"\n          [allowInvalidDate]=\"control.allowInvalidDate\"\n          [textMaskEnabled]=\"control.textMaskEnabled\"\n          [placeholder]=\"control.placeholder\"\n          [weekStart]=\"control.weekStart\"\n          [disabledDateMessage]=\"control.disabledDateMessage\"\n          (focusEvent)=\"methods.handleFocus($event)\"\n          (blurEvent)=\"methods.handleBlur($event)\"\n          (changeEvent)=\"methods.emitChange($event)\"\n        ></novo-date-picker-input>\n      </div>\n    </ng-template>\n\n    <!--Date and Time-->\n    <ng-template novoTemplate=\"date-time\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div\n        [formGroup]=\"form\"\n        class=\"novo-control-input-container\"\n        [tooltip]=\"control.tooltip\"\n        [tooltipPosition]=\"control.tooltipPosition\"\n        [tooltipSize]=\"control?.tooltipSize\"\n        [tooltipPreline]=\"control?.tooltipPreline\"\n        [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n        [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n        [novoPopover]=\"control.popoverContent\"\n        [popoverHtmlContent]=\"control.popoverHtmlContent\"\n        [popoverTitle]=\"control.popoverTitle\"\n        [popoverPlacement]=\"control.popoverPlacement\"\n        [popoverOnHover]=\"control.popoverOnHover\"\n        [popoverAlways]=\"control.popoverAlways\"\n        [popoverDisabled]=\"control.popoverDisabled\"\n        [popoverAnimation]=\"control.popoverAnimation\"\n        [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n      >\n        <novo-date-time-picker-input\n          [attr.id]=\"control.key\"\n          [name]=\"control.key\"\n          [formControlName]=\"control.key\"\n          [start]=\"control.startDate\"\n          [end]=\"control.endDate\"\n          [placeholder]=\"control.placeholder\"\n          [military]=\"control.military\"\n          [weekStart]=\"control.weekStart\"\n          (focusEvent)=\"methods.handleFocus($event)\"\n          (blurEvent)=\"methods.handleBlur($event)\"\n          (changeEvent)=\"methods.emitChange($event)\"\n        ></novo-date-time-picker-input>\n      </div>\n    </ng-template>\n\n    <!--Address-->\n    <ng-template novoTemplate=\"address\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-address\n          [formControlName]=\"control.key\"\n          [config]=\"control?.config\"\n          [readOnly]=\"control?.readOnly\"\n          (change)=\"methods.handleAddressChange($event)\"\n          (focus)=\"methods.handleFocus($event.event, $event.field)\"\n          (blur)=\"methods.handleBlur($event.event, $event.field)\"\n          (validityChange)=\"methods.updateValidity()\"\n        ></novo-address>\n      </div>\n    </ng-template>\n\n    <!--Checkbox-->\n    <ng-template novoTemplate=\"checkbox\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-checkbox\n          [formControlName]=\"control?.key\"\n          [name]=\"control?.key\"\n          [label]=\"control?.checkboxLabel\"\n          [tooltip]=\"control?.tooltip\"\n          [tooltipPosition]=\"control?.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n          [layoutOptions]=\"control?.layoutOptions\"\n        ></novo-checkbox>\n      </div>\n    </ng-template>\n\n    <!--Switch-->\n    <ng-template novoTemplate=\"switch\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-switch\n          [formControlName]=\"control?.key\"\n          [tooltip]=\"control?.tooltip\"\n          [tooltipPosition]=\"control?.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n          (onChange)=\"methods.modelChange($event)\"\n        ></novo-switch>\n      </div>\n    </ng-template>\n\n    <!--Checklist-->\n    <ng-template novoTemplate=\"checklist\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-check-list\n          [formControlName]=\"control.key\"\n          [name]=\"control.key\"\n          [options]=\"control?.options\"\n          [tooltip]=\"control?.tooltip\"\n          [tooltipPosition]=\"control?.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n          (onSelect)=\"methods.modelChange($event)\"\n        ></novo-check-list>\n      </div>\n    </ng-template>\n\n    <!--QuickNote-->\n    <ng-template novoTemplate=\"quick-note\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n      <div [formGroup]=\"form\">\n        <novo-quick-note\n          [formControlName]=\"control.key\"\n          [startupFocus]=\"control?.startupFocus\"\n          [placeholder]=\"control?.placeholder\"\n          [config]=\"control?.config\"\n          (change)=\"methods.modelChange($event)\"\n          [tooltip]=\"control?.tooltip\"\n          [tooltipPosition]=\"control?.tooltipPosition\"\n          [tooltipSize]=\"control?.tooltipSize\"\n          [tooltipPreline]=\"control?.tooltipPreline\"\n          [removeTooltipArrow]=\"control?.removeTooltipArrow\"\n          [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"\n          [novoPopover]=\"control.popoverContent\"\n          [popoverHtmlContent]=\"control.popoverHtmlContent\"\n          [popoverTitle]=\"control.popoverTitle\"\n          [popoverPlacement]=\"control.popoverPlacement\"\n          [popoverOnHover]=\"control.popoverOnHover\"\n          [popoverAlways]=\"control.popoverAlways\"\n          [popoverDisabled]=\"control.popoverDisabled\"\n          [popoverAnimation]=\"control.popoverAnimation\"\n          [popoverDismissTimeout]=\"control.popoverDismissTimeout\"\n        ></novo-quick-note>\n      </div>\n    </ng-template>\n  `,\n    standalone: false,\n})\nexport class NovoControlTemplates implements AfterViewInit {\n  @ViewChildren(NovoTemplate)\n  defaultTemplates: QueryList<NovoTemplate>;\n  constructor(private templates: NovoTemplateService) {}\n\n  ngAfterViewInit(): void {\n    if (this.defaultTemplates && this.defaultTemplates.length) {\n      this.defaultTemplates.forEach((template: any) => {\n        this.templates.addDefault(template.name, template.template);\n      });\n    }\n  }\n}\n","// NG\nimport {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnInit,\n  QueryList,\n  SimpleChanges,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NovoTemplateService } from 'novo-elements/services';\nimport { NovoTemplate } from 'novo-elements/elements/common';\n// App\nimport { Helpers } from 'novo-elements/utils';\nimport { NovoFieldset } from './FormInterfaces';\nimport { NovoFormGroup } from './NovoFormGroup';\n\n@Component({\n    selector: 'novo-fieldset-header',\n    template: `\n    <novo-title smaller>\n      <novo-icon>{{ icon?.replace('bhi-', '') }}</novo-icon\n      >{{ title }}\n    </novo-title>\n  `,\n    styleUrls: ['./fieldset-header.scss'],\n    host: {\n        class: 'novo-fieldset-header',\n    },\n    standalone: false,\n})\nexport class NovoFieldsetHeaderElement {\n  @Input()\n  title: string;\n  @Input()\n  icon: string = 'section';\n}\n\n@Component({\n    selector: 'novo-fieldset',\n    template: `\n    <div class=\"novo-fieldset-container\">\n      <novo-fieldset-header\n        [icon]=\"icon\"\n        [title]=\"title\"\n        *ngIf=\"title\"\n        [class.embedded]=\"isEmbedded\"\n        [class.inline-embedded]=\"isInlineEmbedded\"\n        [class.hidden]=\"hidden\"\n      ></novo-fieldset-header>\n      <ng-container *ngFor=\"let control of controls; let controlIndex = index\">\n        <div class=\"novo-form-row\" [class.disabled]=\"control.disabled\" *ngIf=\"control.__type !== 'GroupedControl'\">\n          <novo-control [autoFocus]=\"autoFocus && index === 0 && controlIndex === 0\" [control]=\"control\" [form]=\"form\"></novo-control>\n        </div>\n        <div *ngIf=\"control.__type === 'GroupedControl'\">TODO - GroupedControl</div>\n      </ng-container>\n    </div>\n  `,\n    standalone: false,\n})\nexport class NovoFieldsetElement {\n  @Input()\n  controls: Array<any> = [];\n  @Input()\n  form: any;\n  @Input()\n  title: string;\n  @Input()\n  icon: string;\n  @Input()\n  index: number;\n  @Input()\n  autoFocus: boolean;\n  @Input()\n  isEmbedded = false;\n  @Input()\n  isInlineEmbedded = false;\n  @Input()\n  hidden = false;\n}\n\n@Component({\n    selector: 'novo-dynamic-form',\n    template: `\n    <novo-control-templates></novo-control-templates>\n    <div class=\"novo-form-container\">\n      <header>\n        <ng-content select=\"form-title\"></ng-content>\n        <ng-content select=\"form-subtitle\"></ng-content>\n      </header>\n      <form class=\"novo-form\" [formGroup]=\"form\">\n        <ng-container *ngFor=\"let fieldset of form.fieldsets; let i = index\">\n          <novo-fieldset\n            *ngIf=\"fieldset.controls.length\"\n            [index]=\"i\"\n            [autoFocus]=\"autoFocusFirstField\"\n            [icon]=\"fieldset.icon\"\n            [controls]=\"fieldset.controls\"\n            [title]=\"fieldset.title\"\n            [form]=\"form\"\n            [isEmbedded]=\"fieldset.isEmbedded\"\n            [isInlineEmbedded]=\"fieldset.isInlineEmbedded\"\n            [hidden]=\"fieldset.hidden\"\n          ></novo-fieldset>\n        </ng-container>\n      </form>\n    </div>\n  `,\n    styleUrls: ['./Form.scss'],\n    encapsulation: ViewEncapsulation.None,\n    providers: [NovoTemplateService],\n    standalone: false,\n})\nexport class NovoDynamicFormElement implements OnChanges, OnInit, AfterContentInit {\n  @Input()\n  controls: Array<any> = [];\n  @Input()\n  fieldsets: Array<NovoFieldset> = [];\n  @Input()\n  form: NovoFormGroup;\n  @Input()\n  layout: string;\n  @Input()\n  hideNonRequiredFields: boolean = true;\n  @Input()\n  autoFocusFirstField: boolean = false;\n  @ContentChildren(NovoTemplate)\n  customTemplates: QueryList<NovoTemplate>;\n  private fieldsAlreadyHidden: string[];\n\n  allFieldsRequired = false;\n  allFieldsNotRequired = false;\n  showingAllFields = false;\n  showingRequiredFields = true;\n  numControls = 0;\n\n  constructor(private element: ElementRef, private templates: NovoTemplateService) {}\n\n  public ngOnInit(): void {\n    this.ngOnChanges();\n  }\n\n  public ngOnChanges(changes?: SimpleChanges): void {\n    this.form.layout = this.layout;\n\n    if (!(this.fieldsets && this.fieldsets.length) && this.controls && this.controls.length) {\n      this.fieldsets = [\n        {\n          controls: this.controls,\n        },\n      ];\n      this.numControls = this.controls.length;\n    } else if (this.fieldsets) {\n      this.fieldsets.forEach((fieldset) => {\n        this.numControls = this.numControls + fieldset.controls.length;\n      });\n    }\n\n    const requiredFields: Array<any> = [];\n    const nonRequiredFields: Array<any> = [];\n    this.fieldsets.forEach((fieldset) => {\n      fieldset.controls.forEach((control) => {\n        if (control.required) {\n          requiredFields.push(control);\n        } else {\n          nonRequiredFields.push(control);\n        }\n      });\n    });\n    this.allFieldsRequired = requiredFields.length === this.numControls;\n    this.allFieldsNotRequired = nonRequiredFields.length === this.numControls;\n    if (this.allFieldsNotRequired && this.hideNonRequiredFields) {\n      this.fieldsets.forEach((fieldset) => {\n        fieldset.controls.forEach((control) => {\n          this.form.controls[control.key].hidden = false;\n        });\n      });\n    }\n    this.form.fieldsets = [...this.fieldsets];\n  }\n\n  ngAfterContentInit() {\n    if (this.customTemplates && this.customTemplates.length) {\n      this.customTemplates.forEach((template: any) => {\n        this.templates.addCustom(template.name, template.template);\n      });\n    }\n  }\n\n  public showAllFields(): void {\n    this.form.fieldsets.forEach((fieldset) => {\n      fieldset.controls.forEach((control) => {\n        const ctl = this.form.controls[control.key];\n        if (!this.fieldsAlreadyHidden?.includes(control.key)) {\n          ctl.hidden = false;\n        }\n      });\n    });\n    this.showingAllFields = true;\n    this.showingRequiredFields = false;\n  }\n\n  public showOnlyRequired(hideRequiredWithValue): void {\n    this.fieldsAlreadyHidden = [];\n    this.form.fieldsets.forEach((fieldset) => {\n      fieldset.controls.forEach((control) => {\n        const ctl = this.form.controls[control.key];\n\n        if (ctl.hidden) {\n          this.fieldsAlreadyHidden.push(control.key);\n        }\n\n        // Hide any non-required fields\n        if (!control.required) {\n          ctl.hidden = true;\n        }\n\n        // Hide required fields that have been successfully filled out\n        if (\n          hideRequiredWithValue &&\n          !Helpers.isBlank(this.form.getRawValue()[control.key]) &&\n          (!control.isEmpty || (control.isEmpty && control.isEmpty(ctl)))\n        ) {\n          ctl.hidden = true;\n        }\n\n        // Don't hide fields with errors\n        if (ctl.errors) {\n          ctl.hidden = false;\n        }\n      });\n    });\n    this.showingAllFields = false;\n    this.showingRequiredFields = true;\n    this.forceValidation();\n  }\n\n  get values() {\n    return this.form ? this.form.getRawValue() : null;\n  }\n\n  get isValid() {\n    return this.form ? this.form.valid : false;\n  }\n\n  public updatedValues(): any {\n    let ret = null;\n    this.form.fieldsets.forEach((fieldset) => {\n      fieldset.controls.forEach((control) => {\n        if (this.form.controls[control.key].dirty || control.dirty) {\n          if (!ret) {\n            ret = {};\n          }\n          ret[control.key] = this.form.getRawValue()[control.key];\n        }\n      });\n    });\n    return ret;\n  }\n\n  public forceValidation(): void {\n    Object.keys(this.form.controls).forEach((key: string) => {\n      const control: any = this.form.controls[key];\n      if (control.required && Helpers.isBlank(this.form.getRawValue()[control.key])) {\n        control.markAsDirty();\n        control.markAsTouched();\n      }\n    });\n  }\n}\n","import { Component, forwardRef, OnDestroy, OnInit } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers } from 'novo-elements/utils';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\n@Component({\n    selector: 'novo-number-range',\n    template: `\n    <form [formGroup]=\"rangeForm\">\n      <novo-flex justify='space-between' align='end' gap=\"1rem\">\n        <novo-field mr=\"sm\">\n          <input formControlName=\"min\" novoInput type='number' [placeholder]=\"labels.minimumPlaceholder\"/>\n        </novo-field>\n        <novo-field ml=\"sm\">\n          <input formControlName=\"max\" novoInput type='number' [placeholder]=\"labels.maximumPlaceholder\"/>\n        </novo-field>\n      </novo-flex>\n      <novo-error *ngIf=\"rangeForm.hasError('minGreaterThanMax')\" style=\"position: absolute\">\n        {{ labels.minGreaterThanMax }}\n      </novo-error>\n    </form>\n  `,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => NumberRangeComponent),\n            multi: true,\n        },\n    ],\n    standalone: false,\n})\nexport class NumberRangeComponent implements OnInit, OnDestroy, ControlValueAccessor {\n  rangeForm: FormGroup;\n  _onChange: (value: any) => void = () => { };\n  _onTouched = () => { };\n  private _destroyed = new Subject<void>();\n\n  constructor(public labels: NovoLabelService, private formBuilder: FormBuilder) { }\n\n  ngOnInit() {\n    this.rangeForm = this.formBuilder.group({ min: null, max: null }, { validators: this.minLessThanMaxValidator });\n\n    // Notify parent form when the value changes (and it's valid)\n    this.rangeForm.valueChanges.pipe(\n      takeUntil(this._destroyed),\n      filter(() => this.rangeForm.valid),\n    ).subscribe(value => this._onChange(value));\n  }\n\n  ngOnDestroy() {\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  minLessThanMaxValidator(group: FormGroup): { [key: string]: boolean } | null {\n    const min = group.get('min').value;\n    const max = group.get('max').value;\n    const hasError = !Helpers.isBlank(min) && !Helpers.isBlank(max) && min > max;\n    const error = hasError ? { minGreaterThanMax: true } : null;\n    group.get('min').setErrors(error); // sets error styling\n    group.get('max').setErrors(error);\n    return error;\n  }\n\n  writeValue(value: { min: number, max: number }): void {\n    if (value) {\n      this.rangeForm.setValue(value, { emitEvent: false });\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    isDisabled ? this.rangeForm.disable() : this.rangeForm.enable();\n  }\n}\n","// NG2\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { NovoPickerModule } from 'novo-elements/elements/picker';\nimport { NovoSelectModule } from 'novo-elements/elements/select';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\nimport { NovoPipesModule } from 'novo-elements/pipes';\nimport { NovoAddressElement } from './address/Address';\nimport { NovoFileInputElement } from './file/FileInput';\nimport { NumberRangeComponent } from './number-range/number-range.component';\nimport { NovoFlexModule } from 'novo-elements/elements/flex';\nimport { NovoFieldModule } from 'novo-elements/elements/field';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    NovoPipesModule,\n    NovoButtonModule,\n    NovoSelectModule,\n    NovoPickerModule,\n    NovoLoadingModule,\n    NovoTooltipModule,\n    NovoCheckboxModule,\n    DragDropModule,\n    NovoFlexModule,\n    NovoFieldModule,\n    ReactiveFormsModule,\n  ],\n  declarations: [NovoAddressElement, NovoFileInputElement, NumberRangeComponent],\n  exports: [NovoAddressElement, NovoFileInputElement, NumberRangeComponent],\n})\nexport class NovoFormExtrasModule {}\n\n","// NG\nimport { AfterContentInit, Component, ContentChildren, Input, OnInit, QueryList, ViewEncapsulation } from '@angular/core';\n// App\nimport { NovoTemplateService } from 'novo-elements/services';\nimport { Helpers } from 'novo-elements/utils';\nimport { NovoTemplate } from 'novo-elements/elements/common';\nimport { NovoFormGroup } from './NovoFormGroup';\n\n@Component({\n    selector: 'novo-form',\n    template: `\n    <novo-control-templates></novo-control-templates>\n    <div class=\"novo-form-container\">\n      <header *ngIf=\"!hideHeader\">\n        <ng-content select=\"form-title\"></ng-content>\n        <ng-content select=\"form-subtitle\"></ng-content>\n      </header>\n      <form class=\"novo-form\" [formGroup]=\"form\">\n        <ng-content></ng-content>\n      </form>\n    </div>\n  `,\n    styleUrls: ['./Form.scss'],\n    encapsulation: ViewEncapsulation.None,\n    providers: [NovoTemplateService],\n    standalone: false,\n})\nexport class NovoFormElement implements AfterContentInit, OnInit {\n  @Input()\n  form: NovoFormGroup;\n  @Input()\n  layout: string;\n  @Input()\n  hideHeader: boolean = false;\n\n  @ContentChildren(NovoTemplate)\n  customTemplates: QueryList<NovoTemplate>;\n\n  public showingAllFields: boolean = false;\n  public showingRequiredFields: boolean = true;\n\n  constructor(private templates: NovoTemplateService) {}\n\n  get value() {\n    return this.form.getRawValue();\n  }\n\n  get isValid() {\n    return this.form.valid;\n  }\n\n  ngOnInit() {\n    this.form.layout = this.layout;\n  }\n\n  ngAfterContentInit() {\n    if (this.customTemplates && this.customTemplates.length) {\n      this.customTemplates.forEach((template: any) => {\n        this.templates.addCustom(template.name, template.template);\n      });\n    }\n  }\n\n  public showAllFields(): void {\n    Object.keys(this.form.controls).forEach((key: string) => {\n      this.form.controls[key].hidden = false;\n    });\n    this.showingAllFields = true;\n    this.showingRequiredFields = false;\n  }\n\n  public showOnlyRequired(hideRequiredWithValue): void {\n    Object.keys(this.form.controls).forEach((key: string) => {\n      // Hide any non-required fields\n      if (!this.form.controls[key].required) {\n        this.form.controls[key].hidden = true;\n      }\n\n      // Hide required fields that have been successfully filled out\n      if (hideRequiredWithValue && !Helpers.isBlank(this.form.getRawValue()[key])) {\n        this.form.controls[key].hidden = true;\n      }\n\n      // Don't hide fields with errors\n      if (this.form.controls[key].errors) {\n        this.form.controls[key].hidden = false;\n      }\n    });\n    this.showingAllFields = false;\n    this.showingRequiredFields = true;\n    this.forceValidation();\n  }\n\n  public forceValidation(): void {\n    Object.keys(this.form.controls).forEach((key: string) => {\n      const control: any = this.form.controls[key];\n      if (control.required && Helpers.isBlank(this.form.getRawValue()[control.key])) {\n        control.markAsDirty();\n        control.markAsTouched();\n      }\n    });\n  }\n}\n","// NG2\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IMaskModule } from 'angular-imask';\n// APP\nimport { NovoAceEditorModule } from 'novo-elements/addons/ace-editor';\nimport { NovoNovoCKEditorModule } from 'novo-elements/addons/ckeditor';\nimport { NovoCodeEditorModule } from 'novo-elements/addons/code-editor';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoChipsModule } from 'novo-elements/elements/chips';\nimport { NovoCommonModule } from 'novo-elements/elements/common';\nimport { NovoDatePickerModule } from 'novo-elements/elements/date-picker';\nimport { NovoDateTimePickerModule } from 'novo-elements/elements/date-time-picker';\nimport { NovoHeaderModule } from 'novo-elements/elements/header';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoModalModule } from 'novo-elements/elements/modal';\nimport { NovoPickerModule } from 'novo-elements/elements/picker';\nimport { NovoPopOverModule } from 'novo-elements/elements/popover';\nimport { NovoQuickNoteModule } from 'novo-elements/elements/quick-note';\nimport { NovoRadioModule } from 'novo-elements/elements/radio';\nimport { NovoSelectModule } from 'novo-elements/elements/select';\nimport { NovoSwitchModule } from 'novo-elements/elements/switch';\nimport { NovoTilesModule } from 'novo-elements/elements/tiles';\nimport { NovoTimePickerModule } from 'novo-elements/elements/time-picker';\nimport { NovoTipWellModule } from 'novo-elements/elements/tip-well';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\nimport { NovoTemplateService } from 'novo-elements/services';\nimport { NovoAutoSize, NovoControlElement } from './Control';\nimport { NovoControlGroup } from './ControlGroup';\nimport { NovoControlTemplates } from './ControlTemplates';\nimport { NovoDynamicFormElement, NovoFieldsetElement, NovoFieldsetHeaderElement } from './DynamicForm';\nimport { ControlConfirmModal, ControlPromptModal } from './FieldInteractionModals';\nimport { NovoFormElement } from './Form';\nimport { NovoFormExtrasModule } from './extras';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    OverlayModule,\n    ReactiveFormsModule,\n    NovoRadioModule,\n    NovoTilesModule,\n    NovoSelectModule,\n    NovoPickerModule,\n    NovoChipsModule,\n    NovoDatePickerModule,\n    NovoTimePickerModule,\n    NovoDateTimePickerModule,\n    NovoNovoCKEditorModule,\n    NovoFormExtrasModule,\n    NovoQuickNoteModule,\n    NovoDateTimePickerModule,\n    NovoHeaderModule,\n    NovoTooltipModule,\n    NovoPopOverModule,\n    IMaskModule,\n    NovoTipWellModule,\n    NovoModalModule,\n    NovoButtonModule,\n    NovoAceEditorModule,\n    NovoCodeEditorModule,\n    NovoCommonModule,\n    NovoCheckboxModule,\n    NovoIconModule,\n    NovoRadioModule,\n    NovoSwitchModule,\n  ],\n  declarations: [\n    NovoAutoSize,\n    NovoControlElement,\n    NovoDynamicFormElement,\n    NovoFormElement,\n    NovoFieldsetElement,\n    NovoFieldsetHeaderElement,\n    ControlConfirmModal,\n    ControlPromptModal,\n    NovoControlGroup,\n    NovoControlTemplates,\n  ],\n  exports: [\n    NovoAutoSize,\n    NovoDynamicFormElement,\n    NovoControlElement,\n    NovoFormElement,\n    NovoFieldsetHeaderElement,\n    NovoControlGroup,\n    NovoControlTemplates,\n  ],\n  providers: [NovoTemplateService],\n})\nexport class NovoFormModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3.FormUtils","i4","i5","i1.FormUtils","i6.NovoControlElement","i3","i6","i7","i8","i13.NovoAddressElement","i14.NovoFileInputElement","i16","i21","i24.NovoAutoSize","i4.NovoControlElement","i7.NovoControlTemplates","i4.NovoControlTemplates"],"mappings":"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"}