{"version":3,"file":"tft-crispr-forms-tft-crispr-forms-C0bqWzUB.mjs","sources":["../../../../libs/crispr-forms/src/lib/utils/operators/form.operators.ts","../../../../libs/crispr-forms/src/lib/utils/models/select-field.config.ts","../../../../libs/crispr-forms/src/lib/utils/models/crispr-field.config.ts","../../../../libs/crispr-forms/src/lib/utils/functions/createControlForType.ts","../../../../libs/crispr-forms/src/lib/utils/functions/isControlConfig.ts","../../../../libs/crispr-forms/src/lib/utils/functions/buildFormGroupFromConfig.ts","../../../../libs/crispr-forms/src/lib/utils/functions/callOptionsIfFunction.ts","../../../../libs/crispr-forms/src/lib/utils/functions/filterOptionsByLabel.ts","../../../../libs/crispr-forms/src/lib/utils/functions/observablifyOptions.ts","../../../../libs/crispr-forms/src/lib/utils/functions/image-compression.helpers.ts","../../../../libs/crispr-forms/src/lib/utils/abstracts/crispr-field.abstract.ts","../../../../libs/crispr-forms/src/lib/utils/abstracts/crispr-control.abstract.ts","../../../../libs/crispr-forms/src/lib/utils/abstracts/autocomplete-field.abstract.ts","../../../../libs/crispr-forms/src/lib/utils/abstracts/crispr-display-field.abstract.ts","../../../../libs/crispr-forms/src/lib/field-component-map.const.ts","../../../../libs/crispr-forms/src/lib/field.directive.ts","../../../../libs/crispr-forms/src/lib/pipes/initial-control-value.pipe.ts","../../../../libs/crispr-forms/src/lib/pipes/crispr-pipes.module.ts","../../../../libs/crispr-forms/src/lib/form/form.component.ts","../../../../libs/crispr-forms/src/lib/form/form.component.html","../../../../libs/crispr-forms/src/lib/ui/file-dropzone/file-dropzone.directive.ts","../../../../libs/crispr-forms/src/lib/ui/info/info.component.ts","../../../../libs/crispr-forms/src/lib/ui/info/info.component.html","../../../../libs/crispr-forms/src/lib/ui/heading/heading.component.ts","../../../../libs/crispr-forms/src/lib/ui/heading/heading.component.html","../../../../libs/crispr-forms/src/lib/ui/field-container/field-container.component.ts","../../../../libs/crispr-forms/src/lib/ui/field-container/field-container.component.html","../../../../libs/crispr-forms/src/lib/ui/selected-file/selected-file.component.ts","../../../../libs/crispr-forms/src/lib/ui/selected-file/selected-file.component.html","../../../../libs/crispr-forms/src/lib/ui/file-upload-field/file-upload-field.component.ts","../../../../libs/crispr-forms/src/lib/ui/file-upload-field/file-upload-field.component.html","../../../../libs/crispr-forms/src/lib/display-field.directive.ts","../../../../libs/crispr-forms/src/lib/form-group-list/form-group-list.component.ts","../../../../libs/crispr-forms/src/lib/form-group-list/form-group-list.component.html","../../../../libs/crispr-forms/src/lib/sub-group/sub-group.component.ts","../../../../libs/crispr-forms/src/lib/sub-group/sub-group.component.html","../../../../libs/crispr-forms/src/lib/sub-group/sub-group.module.ts","../../../../libs/crispr-forms/src/lib/crispr-forms.module.ts","../../../../libs/crispr-forms/tft-crispr-forms.ts"],"sourcesContent":["import { map } from 'rxjs/operators';\n\nexport function valueIn (values: string[]) {\n  return map( (value: string) => {\n    if (value) {\n      return values.some(v => {\n        if (isRegex(v)) {\n          const trimmedStringForRegex = v.substr(1, v.length - 2);\n          const regex = new RegExp(trimmedStringForRegex);\n          return regex.test(value);\n        } else {\n          return v === value;\n        }\n      });\n    } else {\n      return false;\n    }\n  });\n}\n\nfunction isRegex(string: string) {\n  return string.startsWith('/') && string.endsWith('/');\n}\n","import { Observable } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { ControlType, FieldDescriptors, Info, MatFieldProperties, CrisprControlConfig } from './crispr-field.config';\n\nexport interface SelectFieldConfig extends Omit<CrisprControlConfig, 'placeholder'>,\n  FieldDescriptors,\n  MatFieldProperties {\n  controlType: ControlType.SELECT,\n  emptyOptionsMessage?: string;\n  multiple?: boolean;\n  enableToggleAll?: boolean;\n  options: OptionsType;\n}\n\nexport type OptionsType = SelectOption[] | Observable<SelectOption[]> | OptionsCallback | Promise<SelectOption[]>;\n\nexport type OptionsCallback = (group?: FormGroup) => OptionsType;\nexport type ReactiveOptionsCallback =  (group?: FormGroup) => Observable<SelectOption[]>;\n// tslint:disable-next-line: max-line-length\nexport type AutocompleteOptionsCallback = (group?: FormGroup, searchTerm?: string) => OptionsType;\nexport interface SelectOption {\n  label: string;\n  value: any;\n  imageUrl?: string;\n  info?: Info;\n}\n\nexport const DEFAULT_EMPTY_OPTIONS_MESSAGE = 'No Items';\n","import { FormGroup, ValidatorFn } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { TooltipPosition } from '@angular/material/tooltip';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { ErrorDictionary } from '@tft/form-validation-handler';\n\nimport type {\n  SelectFieldConfig,\n  HeadingConfig,\n  ButtonConfig,\n  DatepickerFieldConfig,\n  InputFieldConfig,\n  CheckboxFieldConfig,\n  TextareaFieldConfig,\n  AutocompleteFieldConfig,\n  FormGroupListConfig,\n  AutocompleteChiplistFieldConfig,\n  SliderFieldConfig,\n  DividerConfig,\n  SelectOption,\n  RadioFieldConfig,\n  ImageUploadFieldConfig,\n  FileUploadFieldConfig,\n  UnitConversionFieldConfig,\n  MapFieldConfig\n} from '../models';\n\nimport { ThemePalette } from '@angular/material/core';\n\n// export type ControlType = keyof typeof FIELD_COMPONENTS;\nexport enum ControlType {\n  AUTOCOMPLETE = 'autocomplete',\n  AUTOCOMPLETE_CHIPLIST = 'autocompleteChiplist',\n  BUTTON = 'button',\n  CHECKBOX = 'checkbox',\n  CUSTOM = 'custom',\n  DATEPICKER = 'datepicker',\n  DIVIDER = 'divider',\n  FILE_UPLOAD = 'fileUpload',\n  GROUP_LIST = 'groupList',\n  HEADING = 'heading',\n  IMAGE_UPLOAD = 'imageUpload',\n  INPUT = 'input',\n  MAP = 'map',\n  RADIO = 'radio',\n  SELECT = 'select',\n  SLIDER = 'slider',\n  SUB_GROUP = 'subGroup',\n  TEXTAREA = 'textarea',\n  UNIT_CONVERSION = 'unitConversion',\n}\n\n/**\n * The base interface for all the fields in the form's config\n */\nexport interface CrisprFieldConfig {\n  controlType?: ControlType;\n  classes?: string[];\n  component?: any; // TODO: Define this better\n}\n\n/**\n * A utility type that returns the keys of a type if one is passed otherwise return string type\n */\ntype RestrictedControlName<M> = M extends null ? string : keyof M;\n/**\n * The base interface for all control configs\n */\nexport interface CrisprControlConfig<M = null> extends CrisprFieldConfig {\n  controlName: RestrictedControlName<M>\n  controlType: ControlType;\n  validators?: ValidatorFn[];\n  computeValue?: (group: FormGroup) => Observable<unknown>;\n  disabledCallback?: (group: FormGroup) => Observable<boolean>;\n  /**\n   * Hide the control when disabled\n   * @default false\n   */\n  hideDisabled?: boolean;\n  heading?: HeadingConfig;\n  hint?: string;\n}\n\n/**\n * Holds properties for control fields that describe field behavior to users\n */\nexport interface FieldDescriptors {\n  label: string;\n  info?: Info;\n  fieldSuffix?: string;\n  placeholder?: string;\n}\n\nexport interface MatFieldProperties {\n  appearance?: MatFormFieldAppearance;\n  color?: ThemePalette;\n}\n\nexport interface Info {\n  content: string;\n  tooltipPosition?: TooltipPosition;\n  iconName?: string;\n}\n\n// TODO: having AnyFieldConfig as the default for C seems redundant and silly\nexport interface AbstractGroupConfig<C extends CrisprFieldConfig = AnyFieldConfig>  {\n  // this union is needed, it joins any custom config provided by users to our default config options\n  fields?: (AnyFieldConfig | C)[];\n}\nexport interface FormConfig<C = AnyFieldConfig> extends AbstractGroupConfig<C> {\n  classes?: string[];\n  errorDictionary?: ErrorDictionary;\n  autoComplete?: string;\n  /** @deprecated use autoComplete */\n  autocomplete?: string;\n  validators?: ValidatorFn[];\n  /**\n   * Angular Material density scale applied to all form fields.\n   * 0 = default size, -5 = most compact.\n   */\n  density?: 0 | -1 | -2 | -3 | -4 | -5;\n}\n/**\n * Configuration for SubGroup components\n */\nexport interface SubGroupConfig extends CrisprControlConfig, AbstractGroupConfig<any> {\n  controlType: ControlType.SUB_GROUP;\n}\n\nexport type AnyFieldConfig = InputFieldConfig\n  | SelectFieldConfig\n  | RadioFieldConfig\n  | FormGroupListConfig\n  | SubGroupConfig\n  | AutocompleteFieldConfig\n  | AutocompleteChiplistFieldConfig\n  | TextareaFieldConfig\n  | CheckboxFieldConfig\n  | DatepickerFieldConfig\n  | MapFieldConfig\n  | SliderFieldConfig\n  | FileUploadFieldConfig\n  | ImageUploadFieldConfig\n  | HeadingConfig\n  | ButtonConfig\n  | DividerConfig\n  | UnitConversionFieldConfig;\n  // | CustomFieldConfig;\n\n\nexport type ControlValue<T = any> = boolean | string | number | Date | SelectOption | SelectOption[] | ControlGroupValue | T;\n\nexport type ControlGroupValue = {[key: string]: ControlValue};\n","import { FormArray, FormControl } from \"@angular/forms\";\nimport { AnyFieldConfig, ControlType, ControlValue, CrisprControlConfig, FormConfig, FormGroupListConfig } from \"../models\";\nimport { buildFormGroupFromConfig } from \"./\";\n\n/**\n * Analyze the config and build a form control to spec. Notice we don't use FormBuilder here\n * as we want to keep this function pure.\n * @param controlConfig the configuration object for the control to build\n * @param value an initial value to use if passed in\n */\n export function createControlForType(controlConfig: AnyFieldConfig, value: ControlValue = null)  {\n  // build form control out based on the control type\n  const control = controlConfig.controlType === ControlType.SUB_GROUP\n    ? buildFormGroupFromConfig(controlConfig as FormConfig, value)\n    : controlConfig.controlType === ControlType.GROUP_LIST\n    ? new FormArray([], (controlConfig as FormGroupListConfig).validators)\n    : new FormControl(\n      value || null,\n      (controlConfig as CrisprControlConfig).validators\n    );\n\n  return control;\n}\n","import { CrisprControlConfig, CrisprFieldConfig } from \"../models\";\n\n/**\n * Determines if the field config is for a form control (not a divider, heading or other non-control field)\n */\n export function isControlConfig(fieldConfig: CrisprFieldConfig): fieldConfig is CrisprControlConfig {\n  return 'controlName' in fieldConfig;\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { AnyFieldConfig, FormConfig } from \"../models\";\nimport { createControlForType } from \"./createControlForType\";\nimport { isControlConfig } from \"./isControlConfig\";\n\n/**\n * builds out form group based on config\n * @param config a configuration for a form group\n * @param value an object of initial values to pass in\n * @param group the form group to modify and build out\n */\n export function buildFormGroupFromConfig(config: FormConfig, value = null, group: FormGroup = new FormGroup({}) ) {\n  config.fields.forEach( (controlConfig: AnyFieldConfig) => {\n    if (isControlConfig(controlConfig)) {\n      // then add a control to the group using the controlName from configuration\n      const {controlName} = controlConfig;\n      if (group.get(controlName)) {\n        group.removeControl(controlName);\n      }\n      // if there's a value object and it has a non-null/undefined value for this field use it.\n      // Otherwise, default to null\n      const controlValue = (value && value[controlName]) ?? null;\n      const control = createControlForType(controlConfig, controlValue)\n      group.addControl(controlName, control);\n    }\n  });\n  group.setValidators(config.validators);\n  return group;\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { AutocompleteOptionsCallback, OptionsType } from \"../models\";\n\nexport function callOptionsIfFunction(\n  options: OptionsType | AutocompleteOptionsCallback,\n  parentGroup?: FormGroup,\n  searchString?: string\n): OptionsType {\n  return options instanceof Function ? options(parentGroup, searchString) : options;\n}\n","import { SelectOption } from \"../models\";\n\n/**\n * A basic filter function that filters the search string against the label of the options object\n * @param options the array of options to filter\n * @param searchString the string from the input\n */\n export function filterOptionsByLabel(options: SelectOption[], searchString: string)  {\n  return options.filter(option => {\n    return option.label && option.label.toLowerCase().includes(searchString.toLowerCase());\n  });\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { from, isObservable, Observable, of } from \"rxjs\";\nimport { OptionsType, SelectOption } from \"../models\";\nimport { callOptionsIfFunction } from \"./callOptionsIfFunction\";\n\n/**\n * The user can give us select options as an array, a function that resolves to a promise,\n * or an observable. This functions consumes any of those and returns an observable that\n * resolves an array of options\n *\n * @param options the options passed in from the config\n * @param emptyMessageOption the message to display when the array is empty\n */\n export function observablifyOptions(\n  options: OptionsType,\n  parentGroup: FormGroup,\n  searchString?: string,\n): Observable<SelectOption[]> {\n  const calledOptions = callOptionsIfFunction(options, parentGroup, searchString);\n  // if options are a promise\n  const observableOptions = calledOptions instanceof Promise\n  // convert to observable\n  ? from(calledOptions)\n  // if array that isn't empty\n  : Array.isArray(calledOptions) && calledOptions.length\n  // convert to observable\n  ? of(calledOptions)\n  // if observable\n  : isObservable(calledOptions)\n  // return it\n  ? calledOptions\n  // else an empty array\n  : of([]);\n  return observableOptions;\n}\n","import { FormControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\n\nexport function convertBytesToMb( bytes: number): number {\n  return bytes/1048576;\n}\n\nexport function maxFileSizeValidator(maxFileSize: number): ValidatorFn {\n  return (control: FormControl): ValidationErrors | null => {\n    const controlValue = control.value;\n    if (!(controlValue instanceof File)) {\n      return null;\n    }\n    const actualFileSize = +convertBytesToMb(controlValue.size).toPrecision(3);\n    if (maxFileSize > actualFileSize) return null;\n    return {maxFileSize: { maxFileSize, actualFileSize }};\n  }\n}\n\nexport function allowedFileExtValidator(allowedFileExtensions: string[], onlyAllowFiles = true): ValidatorFn {\n  return (control: FormControl): ValidationErrors | null => {\n    const controlValue = control.value;\n    const isFile = controlValue instanceof File;\n    if (!onlyAllowFiles && !isFile) return null;\n    const actualExtension = isFile ? controlValue.name.split('.').pop().toLocaleLowerCase() : 'Not a file';\n    const isAllowedExtension = allowedFileExtensions.includes(actualExtension);\n    if(isAllowedExtension) {\n      return null;\n    }\n    return {allowedExtension: { allowedFileExtensions, actualExtension }};\n  }\n}\n\nexport function allowedFileType(matchExp: string | RegExp): ValidatorFn {\n  return (formControl) => {\n    const value = (formControl as FormControl).value;\n    if (!(value instanceof File)) return null\n    const type = value.type;\n    const matches = type.match(matchExp)\n    if (!type || !matches?.length) {\n      return {\n        allowedFileType: {\n          actualType: type,\n          allowedTypeExp: matchExp\n        }\n      }\n    } else {\n      return null\n    }\n  };\n}\n","import type {\n  CrisprFieldConfig,\n  CrisprControlConfig,\n} from '../models';\nimport { computed, Directive, input } from '@angular/core';\n\n@Directive({\n  standalone: true\n})\nexport abstract class CrisprFieldComponent<C extends CrisprFieldConfig> {\n\n  defaultConfig?: Partial<C>;\n\n  inputConfig = input<C | null>(null, { alias: 'config' });\n\n  config = computed<C | null>(() => {\n    const c = this.inputConfig();\n    return c && this.defaultConfig ? { ...this.defaultConfig, ...c } : c;\n  });\n\n  testIdPrefix = input<string | undefined>(undefined);\n\n  testId = computed(() => {\n    const controlName = (this.config() as unknown as CrisprControlConfig)?.controlName;\n    if (!controlName) return undefined;\n    const prefix = this.testIdPrefix();\n    return prefix ? `${prefix}.${controlName}` : controlName;\n  });\n\n}\n\n\n","\nimport { FormGroup, AbstractControl } from '@angular/forms';\nimport { CrisprControlConfig, ControlValue, ControlType } from '../models/crispr-field.config';\nimport { computed, DestroyRef, Directive, effect, EventEmitter, inject, input, OnInit, Output } from '@angular/core';\nimport { CrisprFieldComponent } from './crispr-field.abstract';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n  standalone: true\n})\nexport class CrisprControlComponent<C extends CrisprControlConfig> extends CrisprFieldComponent<C> implements OnInit {\n  destroyRef = inject(DestroyRef);\n\n  group = input<FormGroup>(null);\n\n  control = computed<AbstractControl>(() => this.group()?.get(this.config().controlName))\n\n  @Output() valueChanges: EventEmitter<ControlValue> = new EventEmitter<ControlValue>();\n\n  value = input<ControlValue>(null);\n\n  constructor() {\n    super();\n    effect(() => {\n      this.setControlValue(this.value())\n    })\n  }\n  \n  ngOnInit() {\n    this.control().valueChanges.pipe(\n      takeUntilDestroyed(this.destroyRef),\n    ).subscribe((value: ControlValue) => {\n      this.valueChanges.emit(value);\n    });\n    // setTimeouts are ugly but this seems to be the only way to get the computed field to compute initial values\n    setTimeout(()=> {\n      this.control().updateValueAndValidity();\n    })\n  }\n\n  setControlValue(value: ControlValue) {\n    if(value && this.control() && this.config().controlType !== ControlType.SUB_GROUP) {\n      this.control().setValue(value)\n    }\n  }\n}\n\n","import { computed, Directive, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap } from 'rxjs/operators';\n\nimport type { AutocompleteFieldConfig, AutocompleteChiplistFieldConfig, SelectOption } from '../models';\nimport { observablifyOptions } from '../functions';\nimport { CrisprControlComponent } from './crispr-control.abstract';\n\ntype AutocompleteConfigTypes = AutocompleteFieldConfig | AutocompleteChiplistFieldConfig;\n\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class AbstractAutocompleteComponent<C>\n  extends CrisprControlComponent<AutocompleteConfigTypes> implements OnInit {\n  // we need a separate control for the UI because of the way the material autocomplete chiplist works\n  autocompleteInputControl = new FormControl('');\n  options$: Observable<SelectOption[]>\n  // Narrows the parent's computed config type to include C-specific properties (e.g. chiplist-only fields)\n  // Must re-implement the defaultConfig merge from CrisprFieldComponent because this override replaces it.\n  config = computed(() => {\n    const c = this.inputConfig() as (AutocompleteConfigTypes & C) | null;\n    return (c && this.defaultConfig)\n      ? { ...this.defaultConfig, ...c } as (AutocompleteConfigTypes & C)\n      : c;\n  });\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.group().addControl(this.config().controlName, new FormControl());\n    // filter options by the search string using either the default filter function or one passed in through config()\n    this.options$ = this.autocompleteInputControl.valueChanges.pipe(\n      // this is needed to have the options panel to open on focus\n      startWith(''),\n      debounceTime(this.config().typeDebounceTime),\n      map((searchText: string) => typeof searchText === 'string' ? searchText?.trim() : ''),\n      distinctUntilChanged(),\n      switchMap((searchText: string) => observablifyOptions(this.config().options, this.group(), searchText)),\n      shareReplay(1),\n    );\n  }\n}\n","import type {\n  CrisprControlConfig,\n} from '../models';\nimport { OnInit, Directive } from '@angular/core';\nimport { CrisprControlComponent } from './crispr-control.abstract';\n\n\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class CrisprDisplayFieldComponent extends CrisprControlComponent<CrisprControlConfig> implements OnInit {\n  index?: number;\n}\n\n\n","import type { FormGroupListComponent } from './form-group-list/form-group-list.component';\nimport type { SubGroupComponent } from './sub-group/sub-group.component';\nimport type { HeadingComponent } from './ui';\nimport type { ImageUploadFieldComponent } from './ui/image-upload-field';\nimport type { DatepickerFieldComponent } from './ui/datepicker-field';\nimport type { CheckboxFieldComponent } from './ui/checkbox-field';\nimport type { TextareaFieldComponent } from './ui/textarea-field';\nimport type { AutocompleteFieldComponent } from './ui/autocomplete-field';\nimport type { SelectFieldComponent } from './ui/select-field';\nimport type { InputFieldComponent } from './ui/input-field';\nimport type { RadioFieldComponent } from './ui/radio-field';\nimport type { FileUploadFieldComponent } from './ui/file-upload-field';\nimport type { SliderFieldComponent } from './ui/slider-field';\nimport type { DividerComponent } from './ui/divider';\nimport type { ButtonComponent } from './ui/button';\nimport type { UnitConversionFieldComponent } from './ui/unit-conversion-field';\n\nimport type { AutocompleteChiplistFieldComponent } from './ui/autocomplete-chiplist-field';\n\nimport { isControlConfig, ControlType } from './utils';\nimport { MapFieldComponent } from './ui/map';\n\nexport const FIELD_COMPONENTS = {\n  groupList: () =>\n    import('./form-group-list').then(\n      ({ FormGroupListComponent }) => FormGroupListComponent\n    ),\n  subGroup: () =>\n    import('./sub-group').then(({ SubGroupComponent }) => SubGroupComponent),\n  button: () =>\n    import('./ui/button').then(\n      ({ ButtonComponent }) => ButtonComponent\n    ),\n  input: () =>\n    import('./ui/input-field').then(\n      ({ InputFieldComponent }) => InputFieldComponent\n    ),\n  select: () =>\n    import('./ui/select-field').then(\n      ({ SelectFieldComponent }) => SelectFieldComponent\n    ),\n  radio: () =>\n    import('./ui/radio-field').then(\n      ({ RadioFieldComponent }) => RadioFieldComponent\n    ),\n  autocomplete: () =>\n    import('./ui/autocomplete-field').then(\n      ({ AutocompleteFieldComponent }) => AutocompleteFieldComponent\n    ),\n  autocompleteChiplist: () =>\n    import('./ui/autocomplete-chiplist-field').then(\n      ({ AutocompleteChiplistFieldComponent }) => AutocompleteChiplistFieldComponent\n    ),\n  map: () =>\n    import('./ui/map').then(\n      ({ MapFieldComponent }) => MapFieldComponent\n    ),\n  textarea: () =>\n    import('./ui/textarea-field').then(\n      ({ TextareaFieldComponent }) => TextareaFieldComponent\n    ),\n  checkbox: () =>\n    import('./ui/checkbox-field').then(\n      ({ CheckboxFieldComponent }) => CheckboxFieldComponent\n    ),\n  slider: () =>\n    import('./ui/slider-field').then(\n      ({ SliderFieldComponent }) => SliderFieldComponent\n    ),\n  datepicker: () =>\n    import('./ui/datepicker-field').then(\n      ({ DatepickerFieldComponent }) => DatepickerFieldComponent\n    ),\n  fileUpload: () =>\n    import('./ui/file-upload-field').then(\n      ({ FileUploadFieldComponent }) => FileUploadFieldComponent\n    ),\n  imageUpload: () =>\n    import('./ui/image-upload-field').then(\n      ({ ImageUploadFieldComponent }) => ImageUploadFieldComponent\n    ),\n  heading: () =>\n    import('./ui').then(\n      ({ HeadingComponent }) => HeadingComponent\n    ),\n  divider: () =>\n    import('./ui/divider').then(\n      ({ DividerComponent }) => DividerComponent\n    ),\n  unitConversion: () =>\n    import('./ui/unit-conversion-field').then(\n      ({ UnitConversionFieldComponent }) => UnitConversionFieldComponent\n    ),\n};\n\nexport function isControlComponent(\n  component: CrisprFieldComponentType\n): component is CrisprControlComponentType {\n  return component && isControlConfig(component.config()) && 'value' in component;\n}\n\nexport function isControlOrButtonComponent(\n  component: CrisprFieldComponentType\n): component is CrisprControlOrButton {\n  return (\n    isControlComponent(component) ||\n    component.config().controlType === ControlType.BUTTON\n  );\n}\n\nexport type CrisprControlOrButton =\n  | CrisprControlComponentType\n  | ButtonComponent;\n\nexport type CrisprControlComponentType =\n  | InputFieldComponent\n  | SelectFieldComponent\n  | RadioFieldComponent\n  | SubGroupComponent\n  | FormGroupListComponent\n  | AutocompleteFieldComponent\n  | AutocompleteChiplistFieldComponent\n  | TextareaFieldComponent\n  | CheckboxFieldComponent\n  | SliderFieldComponent\n  | FileUploadFieldComponent\n  | ImageUploadFieldComponent\n  | DatepickerFieldComponent\n  | UnitConversionFieldComponent\n  | MapFieldComponent;\n\nexport type ComponentKeys = keyof typeof FIELD_COMPONENTS;\n// export type CrisprFieldComponent = FIELD_COMPONENTS[ComponentKeys];\n\nexport type CrisprFieldComponentType =\n  | CrisprControlComponentType\n  | HeadingComponent\n  | DividerComponent\n  | ButtonComponent;\n","import {\n  ComponentRef,\n  Directive,\n  effect,\n  inject,\n  input,\n  OnInit,\n  Renderer2,\n  ViewContainerRef,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n  CrisprFieldComponentType,\n  FIELD_COMPONENTS,\n  isControlComponent,\n  isControlOrButtonComponent,\n} from './field-component-map.const';\nimport { AnyFieldConfig, ControlValue } from './utils';\n\n@Directive({\n  selector: '[crisprField]',\n  standalone: true,\n})\nexport class CrisprFieldDirective implements OnInit {\n\n  config = input<AnyFieldConfig>();\n  group = input<FormGroup>();\n  testIdPrefix = input<string | undefined>(undefined);\n  value = input<ControlValue | any[]>();\n\n  private componentRef: ComponentRef<CrisprFieldComponentType>;\n  component: CrisprFieldComponentType;\n\n  container = inject(ViewContainerRef);\n  renderer  = inject(Renderer2);\n\n  constructor() {\n    effect(() => {\n      this.updateComponentValue(this.value());\n    });\n  }\n\n  async ngOnInit() {\n    const component =\n      this.config().component ||\n      (await FIELD_COMPONENTS[this.config().controlType]());\n\n    this.componentRef =\n      this.container.createComponent<CrisprFieldComponentType>(component);\n\n    this.component = this.componentRef.instance;\n    this.componentRef.setInput('config', this.config());\n    if (isControlOrButtonComponent(this.component)) {\n      this.componentRef.setInput('group', this.group());\n    }\n    this.componentRef.setInput('testIdPrefix', this.testIdPrefix());\n    this.updateComponentValue(this.value());\n\n    if (!this.config().classes) return;\n    this.config().classes.forEach((klass) => {\n      if (klass.includes(' ')) {\n        throw Error(\n          `Improperly formatted class. '${klass}' cannot contain spaces.`\n        );\n      } else {\n        this.renderer.addClass(this.componentRef.location.nativeElement, klass);\n      }\n    });\n  }\n\n  updateComponentValue(value: ControlValue) {\n    if (this.componentRef && isControlComponent(this.component)) {\n      this.componentRef.setInput('value', value);\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n  ControlValue,\n  AnyFieldConfig,\n  isControlConfig,\n} from '../utils';\n\n@Pipe({\n    name: 'initialControlValue',\n    standalone: false\n})\nexport class InitialControlValuePipe implements PipeTransform {\n  // TODO: does changing any to unknown break anything?\n  transform(\n    initialFormValue: { [key: string]: ControlValue | any },\n    fieldConfig: AnyFieldConfig\n  ): unknown {\n    return initialFormValue && isControlConfig(fieldConfig)\n      ? initialFormValue[fieldConfig.controlName] || null\n      : null;\n  }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { InitialControlValuePipe } from \"./initial-control-value.pipe\";\n\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  exports: [\n    InitialControlValuePipe\n  ],\n  declarations: [\n    InitialControlValuePipe\n  ]\n})\n\nexport class CrisprPipesModule {\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  effect,\n  input,\n  OnInit,\n  output,\n  untracked,\n  ViewChild,\n  ElementRef,\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule, FormGroup } from '@angular/forms';\nimport { switchMap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { CrisprFieldDirective } from '../field.directive';\nimport { FormValidationHandlerModule } from '@tft/form-validation-handler';\nimport { CrisprPipesModule } from '../pipes/crispr-pipes.module';\nimport {\n  ControlGroupValue,\n  FormConfig,\n  buildFormGroupFromConfig,\n} from '../utils';\n@Component({\n  selector: 'crispr-form',\n  styleUrls: ['form.component.scss'],\n  templateUrl: 'form.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  host: {\n    '[attr.data-density]': 'config().density ?? null',\n  },\n  imports: [\n    CommonModule,\n    CrisprFieldDirective,\n    ReactiveFormsModule,\n    FormValidationHandlerModule,\n    CrisprPipesModule,\n  ]\n})\nexport class CrisprFormComponent implements OnInit {\n  config = input.required<FormConfig>();\n  form = input<FormGroup>(new FormGroup({}));\n  value = input<ControlGroupValue>(null);\n\n  submitted = output<FormGroup>();\n\n  /** Patch form values whenever the [value] input changes without firing valueChanges. */\n  private patchValueEffect = effect(() => {\n    const value = this.value();\n    untracked(() => {\n      if (value) {\n        this.form().patchValue(value, { emitEvent: false });\n      }\n    });\n  });\n\n  // proxy value and status change events through to consuming component\n  valueChanges = outputFromObservable(\n    toObservable(this.form).pipe(switchMap((f) => f.valueChanges))\n  );\n  statusChanges = outputFromObservable(\n    toObservable(this.form).pipe(switchMap((f) => f.statusChanges))\n  );\n\n  @ViewChild('submitTrigger') submitTrigger: ElementRef<HTMLButtonElement>;\n\n  ngOnInit() {\n    // build out the form, note that we pass in the form as the third argument and the function modifies it\n    buildFormGroupFromConfig(this.config(), this.value(), this.form());\n  }\n\n  handleSubmit() {\n    this.form().markAllAsTouched();\n    this.submitted.emit(this.form());\n  }\n\n  triggerSubmit() {\n    this.submitTrigger.nativeElement.click();\n  }\n}\n","<form\n  class=\"crispr-form\"\n  [ngClass]=\"config().classes\"\n  [formGroup]=\"form()\"\n  (ngSubmit)=\"handleSubmit()\"\n  [autocomplete]=\"config().autocomplete || 'off'\"\n  [errorDictionary]=\"config().errorDictionary\"\n  #ngFormElement=\"ngForm\">\n\n  @for (field of config().fields; track field) {\n    <ng-container\n      crisprField\n      [value]=\"value() | initialControlValue : field\"\n      [config]=\"field\"\n      [group]=\"form()\">\n    </ng-container>\n  }\n  <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n  Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n  (which the error handler has to listen for) and ngSubmit event  -->\n  <button #submitTrigger class=\"submit-trigger\" data-testid=\"submit-trigger\" type=\"submit\">\n  </button>\n</form>\n","import { Directive, HostListener, Output, EventEmitter, Input } from '@angular/core';\n\n@Directive({\n  selector: '[crisprFileDropzone]',\n  standalone: true,\n})\nexport class FileDropzoneDirective {\n\n  @Output() fileDrop =  new EventEmitter<FileList>();\n\n  @Input() crisprFileDropzone = true;\n\n  @HostListener('drop', ['$event'])\n  onDrop($event: DragEvent) {\n    if(this.crisprFileDropzone) {\n      $event.preventDefault();\n      this.fileDrop.emit($event.dataTransfer.files);\n    }\n  }\n\n  // Prevents DOM from trying to open file in browser\n  @HostListener('dragover', ['$event'])\n  onDragOver($event: DragEvent) {\n    if(this.crisprFileDropzone) {\n      $event.preventDefault();\n    }\n  }\n}\n","\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport type { Info } from '../../utils';\n\n@Component({\n    selector: 'crispr-info',\n    templateUrl: './info.component.html',\n    styleUrls: ['./info.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [\n        MatIconModule,\n        MatTooltipModule\n    ]\n})\nexport class InfoComponent {\n\n  info = input.required<Info>();\n\n}\n","@if (info()) {\n  <mat-icon\n    [matTooltip]=\"info().content\"\n    [matTooltipPosition]=\"info().tooltipPosition || 'below'\">\n    {{info().iconName || 'info'}}\n  </mat-icon>\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { CrisprFieldComponent, HeadingConfig } from '../../utils';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { InfoComponent } from '../info';\n\nconst defaultConfig: Partial<HeadingConfig> = {\n  typographyClass: 'mat-h3',\n};\n@Component({\n    selector: 'crispr-heading',\n    templateUrl: './heading.component.html',\n    styleUrls: ['./heading.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [CommonModule, MatFormFieldModule, InfoComponent],\n    standalone: true\n})\nexport class HeadingComponent extends CrisprFieldComponent<HeadingConfig> {\n  defaultConfig = defaultConfig;\n}\n","@if (!!config()?.label) {\n  <label\n    [ngClass]=\"config().typographyClass\">\n    {{ config().label }}\n    @if (config().info) {\n      <crispr-info\n        matSuffix\n        [info]=\"config().info\">\n      </crispr-info>\n    }\n  </label>\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  OnDestroy,\n  OnInit,\n  signal,\n} from '@angular/core';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { tap, distinctUntilChanged } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { HeadingComponent } from '../heading';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport type { CrisprControlConfig } from '../../utils';\n\n@Component({\n    selector: 'crispr-field-container',\n    templateUrl: './field-container.component.html',\n    styleUrls: ['./field-container.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [CommonModule, HeadingComponent],\n    host: {\n      '[style.display]': 'isHidden() ? \"none\" : \"\"',\n    },\n})\nexport class FieldContainerComponent implements OnInit, OnDestroy {\n  // the configuration object for the field\n  config = input.required<CrisprControlConfig>();\n  // the parent formGroup\n  group = input.required<FormGroup>();\n  // boolean whether field-container is inline\n  inlineField = input(false);\n  // used to determine whether or not field should be shown\n  disabled$: Observable<boolean>;\n\n  private readonly isDisabled = signal(false);\n  readonly isHidden = computed(() => this.isDisabled() && !!this.config().hideDisabled);\n\n  subs: Subscription[] = [];\n\n  ngOnInit() {\n    this.disabled$ = this.connectDisabledCallback(this.group(), this.config());\n    this.subs.push(\n      this.disabled$.subscribe(disabled => this.isDisabled.set(disabled))\n    );\n    // we tried moving this into afterViewChecked and afterContentChecked lifecycle hooks without any luck\n    if (this.config().computeValue) {\n      this.subs.push(\n        this.config()\n          .computeValue(this.group())\n          .pipe(\n            distinctUntilChanged(),\n            tap((computedValue) =>\n              this.group().get(this.config().controlName).setValue(computedValue)\n            )\n          )\n          .subscribe()\n      );\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subs.forEach((sub) => sub.unsubscribe);\n  }\n  /**\n   * Connects user defined disabledCallback function to the the view, so that the control is enabled/disabled\n   * appropriately. It also will hide disabled fields in the UI unless `hideDisabled` is set to\n   * false in the controls config\n   * @param group used to get valueChanges from control\n   * @param config configuration object used to\n   */\n  connectDisabledCallback(\n    group: FormGroup,\n    config: CrisprControlConfig = null\n  ) {\n    const control = group.get(config.controlName);\n    // If the disabled$ function exists on the field config then call it with the disabledCallbackConfig\n    // as a parameter otherwise return an observable of true.\n    return config?.disabledCallback &&\n      config.disabledCallback instanceof Function\n      ? config.disabledCallback(group as FormGroup).pipe(\n          // This enables/disables when callback conditions are met\n          tap((shouldDisable) =>\n            shouldDisable\n              ? control.disable({ emitEvent: false })\n              : control.enable({ emitEvent: false })\n          )\n        )\n      : of(false);\n  }\n}\n","@if (!isHidden()) {\n  <div\n    [ngClass]=\"config().classes\"\n    [class.inline-field]=\"inlineField()\"\n    class=\"field-container\">\n    @if (config().heading) {\n      <crispr-heading\n        [config]=\"config().heading\">\n      </crispr-heading>\n    }\n    <ng-content>\n    </ng-content>\n  </div>\n}\n","\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\n@Component({\n    selector: 'crispr-selected-file',\n    templateUrl: './selected-file.component.html',\n    styleUrls: ['./selected-file.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [\n        MatProgressBarModule\n    ]\n})\nexport class SelectedFileComponent {\n\n  fileName = input.required<string>();\n  progress = input<number>();\n  showProgress = input<boolean>();\n  color = input<ThemePalette>();\n\n}\n","<h3 class=\"mat-h3\">{{ fileName() }}</h3>\n@if (showProgress()) {\n  <mat-progress-bar\n    mode=\"determinate\"\n    [color]=\"color()\"\n    [value]=\"progress()\">\n  </mat-progress-bar>\n}\n","/* eslint-disable @nx/enforce-module-boundaries */\nimport { CommonModule } from '@angular/common';\nimport { Component, ElementRef, ViewChild, OnInit, ChangeDetectionStrategy, signal, computed, inject } from '@angular/core';\nimport {\n  ControlValueAccessor,\n  NgControl,\n  ReactiveFormsModule,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { Observable, of } from 'rxjs';\nimport { FileDropzoneDirective } from '../file-dropzone';\nimport { FormValidationHandlerModule } from '@tft/form-validation-handler';\n\nimport {\n  CrisprFieldComponent,\n  FileUploadFieldConfig,\n} from '../../utils';\nimport { FieldContainerComponent } from '../field-container';\nimport { SelectedFileComponent } from '../selected-file';\nimport { CrisprControlComponent } from '../../utils/abstracts/crispr-control.abstract';\n\n@Component({\n    selector: 'crispr-file-upload-field',\n    templateUrl: './file-upload-field.component.html',\n    styleUrls: ['./file-upload-field.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        CommonModule,\n        FieldContainerComponent,\n        ReactiveFormsModule,\n        MatIconModule,\n        MatButtonModule,\n        MatFormFieldModule,\n        MatInputModule,\n        SelectedFileComponent,\n        FormValidationHandlerModule,\n        FileDropzoneDirective,\n    ],\n    standalone: true\n})\nexport class FileUploadFieldComponent\n  extends CrisprControlComponent<FileUploadFieldConfig>\n  implements OnInit, ControlValueAccessor\n{\n  ngControl = inject(NgControl, { optional: true, self: true });\n\n  onChange: () => void;\n\n  defaultConfig: Partial<FileUploadFieldConfig> = {\n    allowMultipleFiles: false,\n    acceptedTypes: '*.*',\n    dropZoneText: 'DROP FILE HERE',\n    selectFilesButtonType: 'button',\n    selectButtonText: 'SELECT',\n    showClearFilesButton: true,\n    clearFilesButtonText: 'CLEAR',\n    uploadButtonText: 'UPLOAD',\n    uploadButtonType: 'button',\n    showUploadProgress: false,\n    disableOnUpload: true,\n  };\n\n  @ViewChild('fileInput') fileInputRef: ElementRef;\n\n  selectedFiles = signal<FileList | null>(null);\n  selectedFilesArray = computed(() => this.selectedFiles() ? Array.from(this.selectedFiles()) : []);\n\n  isUploaded = false;\n\n  fileProgress: Observable<number>[] = [];\n  disabled$: Observable<boolean>;\n\n  // ngControl: NgControl = null;\n  constructor() {\n    super();\n    const ngControl = this.ngControl;\n\n    if (this.ngControl != null) {\n      // Setting the value accessor directly (instead of using\n      // the providers) to avoid running into a circular import.\n      ngControl.valueAccessor = this;\n    }\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n    this.disabled$ = this.config().disabledCallback\n      ? this.config().disabledCallback(this.group())\n      : of(false);\n  }\n\n  filesChanged(files: FileList): void {\n    if (files && files.length > 0) {\n      this.selectedFiles.set(files);\n      this.control().patchValue(files);\n    }\n  }\n\n  uploadFiles() {\n    if (this.selectedFiles() && this.config().uploadFiles) {\n      this.isUploaded = true;\n      this.config().uploadFiles(this.group(), this.selectedFiles(), this);\n    }\n  }\n\n  resetFileInput(): void {\n    this.fileInputRef.nativeElement.value = '';\n    this.control().patchValue(null);\n    this.isUploaded = false;\n  }\n\n  writeValue(value: null) {\n    // clear file input\n    // this.host.nativeElement.value = '';\n    // this.file = null;\n  }\n\n  registerOnChange(fn: () => void) {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void) {}\n}\n","<crispr-field-container\n  [config]=\"config()\"\n  [group]=\"group()\">\n  <mat-form-field floatLabel=\"always\"\n    [attr.data-testid]=\"testId()\"\n    [color]=\"config().color\"\n    appearance=\"outline\"\n    [crisprFileDropzone]=\"!(disabled$ | async) && !(config().disableOnUpload && isUploaded)\"\n    [formGroup]=\"group()\"\n    (fileDrop)=\"filesChanged($event)\">\n\n    <input [formControlName]=\"config().controlName\" matInput type=\"text\"/>\n    <input\n      #fileInput\n      type=\"file\"\n      style=\"display: none\"\n      [accept]=\"config().acceptedTypes\"\n      [multiple]=\"config().allowMultipleFiles\"\n      (change)=\"filesChanged($event.target.files)\"/>\n    <mat-label>{{config().label}}</mat-label>\n\n    @if (!selectedFiles() || selectedFiles().length === 0) {\n      <div  class=\"drop-info\">\n        <mat-icon class=\"drop-icon\" inline=\"true\">cloud_upload</mat-icon>\n        <h2 class=\"mat-h2\">{{config().dropZoneText}}</h2>\n        or\n        <button\n          mat-raised-button\n          type=\"button\"\n          color=\"primary\"\n          [disabled]=\"(disabled$ | async) || config().disableOnUpload && isUploaded\"\n          (click)=\"fileInput.click()\"\n          [attr.aria-label]=\"config().controlName\">\n          {{config().selectButtonText}}\n        </button>\n      </div>\n    } @else {\n      <div class=\"selected-files-container\">\n        <div class=\"selected-files-list\">\n          @for (file of selectedFilesArray(); track file; let i = $index) {\n            <crispr-selected-file\n              [color]=\"config().color === 'primary' ? 'accent' : 'primary'\"\n              [fileName]=\"file.name\"\n              [showProgress]=\"config().showUploadProgress\"\n              [progress]=\"fileProgress && (fileProgress[i] | async)\">\n            </crispr-selected-file>\n          }\n        </div>\n      </div>\n    }\n    @if (config().hint && (control().valid || !control().touched)) {<mat-hint>{{config().hint}}</mat-hint>}\n  </mat-form-field>\n  @if ((selectedFiles())?.length > 0) {\n    <div class=\"button-container\">\n      <button\n        mat-button\n        (click)=\"resetFileInput()\"\n        type=\"button\"\n        [disabled]=\"(disabled$ | async) || (config().disableOnUpload && isUploaded)\"\n        aria-label=\"Remove Selected File(s)\">\n        {{config().clearFilesButtonText}}\n        <mat-icon>delete</mat-icon>\n      </button>\n      @if (!!config().uploadFiles) {\n        <button\n          mat-raised-button\n          type=\"button\"\n          color=\"accent\"\n          class=\"file-input-button\"\n          [disabled]=\"(disabled$ | async) || (config().disableOnUpload && isUploaded)\"\n          (click)=\"uploadFiles()\"\n          [attr.aria-label]=\"config().uploadButtonText\">\n          {{ config().uploadButtonText }}\n        </button>\n      }\n    </div>\n  }\n</crispr-field-container>\n","import { ComponentRef, Directive, effect, inject, input, OnInit, Type, ViewContainerRef } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n  ControlValue,\n  CrisprDisplayFieldComponent,\n} from './utils';\n\n@Directive({\n  selector: '[crisprDisplayField]',\n  standalone: true,\n})\nexport class CrisprDisplayFieldDirective implements OnInit {\n  private container = inject(ViewContainerRef);\n\n  group = input<FormGroup>();\n  value = input<ControlValue | any[]>();\n  component = input<Type<CrisprDisplayFieldComponent>>();\n  index = input<number>();\n\n  private componentRef: ComponentRef<CrisprDisplayFieldComponent>;\n  private componentInstance: CrisprDisplayFieldComponent;\n\n  constructor() {\n    effect(() => {\n      this.updateComponentValue(this.value());\n    });\n  }\n\n  async ngOnInit() {\n    if (this.component()) {\n      const componentRef = this.container.createComponent(this.component());\n\n      this.componentRef = componentRef;\n      this.componentInstance = componentRef.instance;\n      this.componentInstance.index = this.index();\n      this.updateComponentValue(this.value());\n    }\n  }\n\n  updateComponentValue(value: ControlValue | any[]) {\n    if (!this.componentRef) return;\n    this.componentRef.setInput('value', value);\n  }\n}\n","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { FormArray } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CrisprFieldDirective } from '../field.directive';\nimport { CrisprPipesModule } from '../pipes/crispr-pipes.module';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { FormValidationHandlerModule } from '@tft/form-validation-handler';\nimport {\n  createControlForType,\n  FormGroupListConfig,\n} from '../utils';\nimport { FieldContainerComponent } from '../ui';\nimport { CrisprDisplayFieldDirective } from '../display-field.directive';\nimport { CrisprControlComponent } from '../utils/abstracts/crispr-control.abstract';\n\nconst defaultConfig: Partial<FormGroupListConfig> = {\n  addButtonLabel: 'ADD ITEM',\n  minListLength: 1,\n};\n\n@Component({\n    selector: 'crispr-form-group-list',\n    templateUrl: './form-group-list.component.html',\n    styleUrls: ['./form-group-list.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        MatButtonModule,\n        MatIconModule,\n        FieldContainerComponent,\n        ReactiveFormsModule,\n        CrisprFieldDirective,\n        CrisprDisplayFieldDirective,\n        CrisprPipesModule,\n        FormValidationHandlerModule\n    ],\n    standalone: true\n})\nexport class FormGroupListComponent\n  extends CrisprControlComponent<FormGroupListConfig>\n  implements OnInit\n{\n  defaultConfig = defaultConfig;\n  /**\n   * By setting this to true when adding/removing items from array,\n   * we can block original values from overwriting form values\n   * */\n  blockValue = false;\n\n  selectedIndex: number = null;\n\n  ngOnInit() {\n    super.ngOnInit();\n    // TODO: this is required to ngFor of controls in template, must be a better way\n  }\n\n  setControlValue(values: any[]) {\n    const formArray = this.control() as FormArray;\n    if (formArray) {\n      if (values?.length > 0) {\n        // clear any existing values so that new values don't concatenate onto the old\n        const currentValues: [] = formArray.value;\n        if (currentValues.length) {\n          formArray.clear();\n        }\n        values.forEach((value) => this.addGroup(value));\n      } else if (this.config().displayInitialItem) {\n        this.addGroup();\n      }\n    }\n  }\n\n  clickDelete(index: number) {\n    this.blockValue = true;\n    this.deleteGroup(index);\n  }\n\n  clickAdd() {\n    this.blockValue = true;\n    this.addGroup();\n  }\n\n  addGroup(value = null) {\n    const formArray = this.control() as FormArray;\n    formArray.push(createControlForType(this.config().itemConfig, value));\n  }\n\n  deleteGroup(index: number) {\n    const formArray = this.control() as FormArray;\n    formArray.removeAt(index);\n  }\n\n  clickEditItem(index: number) {\n    this.selectedIndex = index;\n  }\n}\n","<crispr-field-container [config]=\"config()\" [group]=\"group()\" [formGroup]=\"group()\">\n\n  <div [formArrayName]=\"config().controlName\">\n\n    <!-- Don't add trackBy function, it confuses the state of the array -->\n    @for (itemControl of control()?.controls; track itemControl; let i = $index; let last = $last) {\n    @if (!config().displayItemComponent || i === selectedIndex || (last && selectedIndex ?? true)) {\n    <!-- TODO: use content projection to allow custom item label component -->\n    <div class=\"item-header\">\n      <span class=\"mat-h2\"> {{ config().itemLabelBuilder ? config().itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n      @if (i + 1 > config().minListLength) {\n      <button mat-icon-button type=\"button\">\n        <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n      </button>\n      }\n    </div>\n    <div [formGroup]=\"itemControl\">\n      <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n      @for (field of config().itemConfig.fields; track field) {\n      <ng-container crisprField [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n        [config]=\"field\" [group]=\"itemControl\" [testIdPrefix]=\"testId() + '[' + i + ']'\">\n      </ng-container>\n      }\n    </div>\n    } @else {\n    <div class=\"display-field-container\" crisprDisplayField [component]=\"config().displayItemComponent\"\n      [value]=\"itemControl.value\" [index]=\"i\">\n      <button mat-icon-button (click)=\"clickEditItem(i)\">\n        <mat-icon>edit</mat-icon>\n      </button>\n    </div>\n    }\n    <ng-template #display>\n      <div class=\"display-field-container\" crisprDisplayField [component]=\"config().displayItemComponent\"\n        [value]=\"itemControl.value\" [index]=\"i\">\n        <button mat-icon-button (click)=\"clickEditItem(i)\">\n          <mat-icon>edit</mat-icon>\n        </button>\n      </div>\n    </ng-template>\n    }\n  </div>\n  <div class=\"group-footer\">\n    <button type=\"button\" class=\"add\" mat-raised-button [color]=\"config().addButtonColor\" (click)=\"clickAdd()\">\n      {{config().addItemLabel || config().addButtonLabel}}\n    </button>\n  </div>\n\n</crispr-field-container>","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { SubGroupConfig } from '../utils';\nimport { CrisprControlComponent } from '../utils/abstracts/crispr-control.abstract';\nimport { CrisprFieldDirective } from '../field.directive';\nimport { CrisprPipesModule } from '../pipes/crispr-pipes.module';\nimport { FieldContainerComponent } from '../ui/field-container';\nimport { FormValidationHandlerModule } from '@tft/form-validation-handler';\n\n@Component({\n    selector: 'crispr-sub-group',\n    templateUrl: './sub-group.component.html',\n    styleUrls: ['./sub-group.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [\n      CommonModule,\n      ReactiveFormsModule,\n      CrisprFieldDirective,\n      FieldContainerComponent,\n      CrisprPipesModule,\n      FormValidationHandlerModule,\n    ],\n})\nexport class SubGroupComponent extends CrisprControlComponent<SubGroupConfig> implements OnInit {\n  \n  ngOnInit() {\n    super.ngOnInit();\n  }\n}\n","<crispr-field-container [config]=\"config()\" [group]=\"group()\">\n  @for (fieldConfig of config().fields; track fieldConfig) {\n  <ng-container crisprField [value]=\"value() | initialControlValue : fieldConfig\" [config]=\"fieldConfig\"\n    [group]=\"control()\" [testIdPrefix]=\"testId()\">\n  </ng-container>\n  }\n</crispr-field-container>","import { NgModule } from '@angular/core';\nimport { SubGroupComponent } from './sub-group.component';\n\n/**\n * @deprecated SubGroupComponent is now standalone. Import SubGroupComponent directly.\n * This module will be removed in the next major version.\n */\n@NgModule({\n  imports: [SubGroupComponent],\n  exports: [SubGroupComponent],\n})\nexport class SubGroupModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n// custom modules\nimport { FormValidationHandlerModule } from '@tft/form-validation-handler';\n\n// components\nimport { CrisprFormComponent } from './form/form.component';\nimport { FormGroupListComponent } from './form-group-list';\n// directives\nimport { CrisprFieldDirective } from './field.directive';\nimport { SubGroupModule } from './sub-group';\nimport { CrisprPipesModule } from './pipes/crispr-pipes.module';\nimport { FieldContainerComponent } from './ui';\nimport { CrisprDisplayFieldDirective } from './display-field.directive';\n\n/**\n * @deprecated Use stanadlone CripsrFormComponent\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormValidationHandlerModule,\n    FormGroupListComponent,\n    FieldContainerComponent,\n    CrisprFieldDirective,\n    CrisprDisplayFieldDirective,\n    SubGroupModule,\n    CrisprPipesModule,\n    CrisprFormComponent,\n  ],\n  exports: [CrisprFormComponent, FieldContainerComponent],\n})\nexport class CrisprFormsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4.InitialControlValuePipe","defaultConfig","i1","i4","i7","i5.InitialControlValuePipe","i1.InitialControlValuePipe"],"mappings":"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"}