{"version":3,"file":"ngx-t-forms-multiple-input-input-element.component-BrPJPR2R.mjs","sources":["../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/colorCoding.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/configureCols.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-view/multiple-input-table-view.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-view/multiple-input-table-view.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-edit/multiple-input-table-edit.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-edit/multiple-input-table-edit.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/functions/getListCalculated.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table/multiple-input-table.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table/multiple-input-table.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/multiple-input-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/multiple-input-input-element.component.html"],"sourcesContent":["export class ColorScale {\r\n  private min: number;\r\n  private max: number;\r\n  private alpha: number;\r\n  private colorStops: Color[];\r\n\r\n  constructor(\r\n    min: number,\r\n    max: number,\r\n    colorStops: string[],\r\n    alpha: number = 1\r\n  ) {\r\n    validateMinMaxValues(min, max);\r\n    validateColorStops(colorStops);\r\n    validateAlphaValue(alpha);\r\n\r\n    this.min = min;\r\n    this.max = max;\r\n    this.alpha = alpha;\r\n    this.colorStops = colorStops.map((colorStop) =>\r\n      hexToColor(colorStop, alpha)\r\n    );\r\n  }\r\n\r\n  getColor(value: number) {\r\n    const numOfColorStops = this.colorStops.length;\r\n    if (value < this.min) return this.colorStops[0];\r\n    if (value > this.max) return this.colorStops[numOfColorStops - 1];\r\n\r\n    const range = this.max - this.min;\r\n\r\n    let weight = (value - this.min) / range;\r\n    const colorStopIndex = Math.max(\r\n      Math.ceil(weight * (numOfColorStops - 1)),\r\n      1\r\n    );\r\n\r\n    const minColor = this.colorStops[colorStopIndex - 1];\r\n    const maxColor = this.colorStops[colorStopIndex];\r\n    if(maxColor === undefined) return minColor;\r\n    if(minColor === undefined) return maxColor;\r\n\r\n    weight = weight * (numOfColorStops - 1) - (colorStopIndex - 1);\r\n\r\n    const r = Math.floor(weight * maxColor.r + (1 - weight) * minColor.r);\r\n    const g = Math.floor(weight * maxColor.g + (1 - weight) * minColor.g);\r\n    const b = Math.floor(weight * maxColor.b + (1 - weight) * minColor.b);\r\n\r\n    return new Color(r, g, b, this.alpha);\r\n  }\r\n}\r\n\r\nexport function validateMinMaxValues(min: number, max: number) {\r\n  if (min > max) {\r\n    throw new Error('The minimum value must be less than the maximum value.');\r\n  }\r\n}\r\n\r\nexport function validateColorStops(colorStops: string[]) {\r\n  if (colorStops.length < 2) {\r\n    throw new Error('At least two colors must be provided.');\r\n  }\r\n\r\n  colorStops.forEach((str) => {\r\n    if (!isValidHexColor(str)) {\r\n      throw new Error(`${str} is not a valid hex color.`);\r\n    }\r\n  });\r\n}\r\n\r\nexport function validateAlphaValue(alpha: number) {\r\n  if (alpha < 0 || alpha > 1) {\r\n    throw new Error('The alpha value must be between 0 and 1.');\r\n  }\r\n}\r\n\r\nexport function hexToColor(hex: string, alpha: number) {\r\n  if (isValid3DigitHexColor(hex)) {\r\n    hex = convertTo6DigitHexColor(hex);\r\n  }\r\n\r\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n  if (!!result?.[1] && !!result?.[2] && !!result?.[3]) {\r\n    return new Color(\r\n      parseInt(result[1], 16),\r\n      parseInt(result[2], 16),\r\n      parseInt(result[3], 16),\r\n      alpha\r\n    );\r\n  } else {\r\n    throw new Error(`${hex} is not a valid hex color.`);\r\n  }\r\n}\r\n\r\nexport function isValidHexColor(colorString: string) {\r\n  return (\r\n    isValid3DigitHexColor(colorString) || isValid6DigitHexColor(colorString)\r\n  );\r\n}\r\n\r\nfunction isValid3DigitHexColor(colorString: string) {\r\n  const hexColorRegex = /^#(?:[0-9a-fA-F]{3})$/;\r\n  return colorString.match(hexColorRegex);\r\n}\r\n\r\nfunction isValid6DigitHexColor(colorString: string) {\r\n  const hexColorRegex = /^#(?:[0-9a-fA-F]{6})$/;\r\n  return colorString.match(hexColorRegex);\r\n}\r\n\r\nfunction convertTo6DigitHexColor(threeDigitHex: string) {\r\n  return threeDigitHex\r\n    .substring(1)\r\n    .split('')\r\n    .map((char) => {\r\n      return char + char;\r\n    })\r\n    .join('');\r\n}\r\n\r\nfunction componentToHex(c: number) {\r\n  const hex = c.toString(16);\r\n  return hex.length === 1 ? '0' + hex : hex;\r\n}\r\n\r\nexport function rgbaToHex(color: Color) {\r\n  const r = Math.floor(color.r * color.a);\r\n  const g = Math.floor(color.g * color.a);\r\n  const b = Math.floor(color.b * color.a);\r\n  return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;\r\n}\r\n\r\nexport class Color {\r\n  public r: number;\r\n  public g: number;\r\n  public b: number;\r\n  public a: number;\r\n\r\n  constructor(r: number, g: number, b: number, a: number = 1) {\r\n    validateAlphaValue(a);\r\n\r\n    this.r = r;\r\n    this.g = g;\r\n    this.b = b;\r\n    this.a = a;\r\n  }\r\n\r\n  toRGBString() {\r\n    return `rgb(${Math.floor(this.r * this.a)},${Math.floor(\r\n      this.g * this.a\r\n    )},${Math.floor(this.b * this.a)})`;\r\n  }\r\n\r\n  toRGBAString() {\r\n    return `rgba(${this.r},${this.g},${this.b},${this.a})`;\r\n  }\r\n\r\n  toHexString() {\r\n    return rgbaToHex(this);\r\n  }\r\n}\r\n","\r\n\r\n\r\nimport { DocumentLitsLabelConfigInterfaceValueType, FormColumnInputs, InputDataTypes, InputPipeTypes } from \"ngx-t-forms-types\";\r\n\r\n/** Column metadata used by the multi-row table view. */\r\nexport interface ColumnConfigEntry {\r\n    property: string;\r\n    formControlName?: string;\r\n    label?: string;\r\n    dataType?: DocumentLitsLabelConfigInterfaceValueType | InputPipeTypes | InputDataTypes | string;\r\n    type?: string;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function configureCols(inputConfig:FormColumnInputs,tempLabels:string[]):{displayedColumnsInOrder:string[],columnsConfig:Record<string, any>}\r\n{\r\n    try {\r\n\r\n        const labelInputs = ((inputConfig?.formInputs || []) as  FormColumnInputs[]).filter(input=>input.showAsLabel || tempLabels.includes(input.formControlName) )\r\n        const cols = [];\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        const colConfigs: Record<string, any> = {};\r\n        for (\r\n          let index = 0;\r\n          index < ( labelInputs).length;\r\n          index++\r\n        ) {\r\n          const c = labelInputs [index]\r\n          const col = {...c} as FormColumnInputs;\r\n          cols.push(`${inputConfig.id}.${col.id}`);\r\n          if(!col.id){\r\n            continue\r\n          }\r\n          colConfigs[`${inputConfig.id}.${col.id}`]={\r\n           property :`${inputConfig.id}.${col.id}`,\r\n           formControlName: col.formControlName,\r\n           label: col.label,\r\n           dataType: getDataType(col)\r\n          }\r\n\r\n        }\r\n    \r\n        //add remove section config\r\n        cols.push('itemRemovalButton');\r\n        colConfigs['itemRemovalButton'] = {\r\n          property: 'itemRemovalButton',\r\n          label: '',\r\n          type: 'removal',\r\n        };\r\n        // end\r\n       return {\r\n        displayedColumnsInOrder : cols.filter((c) => !!c ) as string[],\r\n        columnsConfig : colConfigs}\r\n    } catch (error) {\r\n        const message = error instanceof Error ? error.message : 'Failed to configure columns';\r\n        throw new Error(message)\r\n        \r\n      }\r\n  \r\n}\r\n\r\nfunction getDataType(input:FormColumnInputs):DocumentLitsLabelConfigInterfaceValueType|InputPipeTypes | InputDataTypes{\r\n  try {\r\n    if(input.pipe?.pipeType){\r\n      return input.pipe.pipeType\r\n    }\r\n    const inputDataType = input.dataType;\r\n    switch (inputDataType) {\r\n\r\n\r\n      case  InputDataTypes.Number:\r\n\r\n        return DocumentLitsLabelConfigInterfaceValueType.number\r\n\r\n      case InputDataTypes.Date:\r\n        \r\n        return DocumentLitsLabelConfigInterfaceValueType.date\r\n      case InputDataTypes.Array:\r\n        return InputDataTypes.Array\r\n      case InputDataTypes.Boolean:\r\n        return InputDataTypes.Boolean\r\n      case InputDataTypes.Object:\r\n        return InputDataTypes.Object\r\n\r\n\r\n      \r\n      \r\n\r\n      default:\r\n        return DocumentLitsLabelConfigInterfaceValueType.string\r\n      \r\n      }\r\n    \r\n  } catch (error) {\r\n    const msg = error instanceof Error ? error.message : 'Failed to get data type'\r\n    throw new Error(msg)\r\n  }\r\n}","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ViewEncapsulation,\r\n  computed,\r\n  input,\r\n  output,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n  CalculationFunctions,\r\n  IMultiple,\r\n  ITowerStepColumn,\r\n  MultipleInputAvailableOperations,\r\n  TableColumnConfigInterface,\r\n} from 'ngx-t-forms-types';\r\n\r\nimport { ColorScale } from '../../../../../../services/core/t-input-controller/functions/colorCoding';\r\nimport { configureCols } from '../../../../../../services/core/t-input-controller/functions/configureCols';\r\nimport { FormatDataPipe } from '../../../../../../../lib/shared/pipes/format-Data.pipe';\r\nimport { TDynamicDataViewComponent } from '../../../../../t-dynamic-data-view/t-dynamic-data-view.component';\r\n\r\n/**\r\n * Row of a multiple-input data source. Each row is a heterogeneous record indexed by composite\r\n * column keys (`${parentId}.${inputId}`) plus the calculation-function system key. Cell values\r\n * are dynamic — narrowed at usage sites.\r\n */\r\ntype MultipleInputRow = Record<string, unknown> & { id?: string };\r\n\r\n/** Column config emitted by `configureCols`. */\r\ntype ColumnConfig = Partial<TableColumnConfigInterface> & {\r\n  key?: string;\r\n  dataType?: string;\r\n  type?: string;\r\n};\r\n\r\n@Component({\r\n  selector: 'lib-multiple-input-table-view',\r\n  templateUrl: './multiple-input-table-view.component.html',\r\n  styleUrl: './multiple-input-table-view.component.css',\r\n  imports: [\r\n    MatButtonModule,\r\n    MatChipsModule,\r\n    MatIconModule,\r\n    MatMenuModule,\r\n    MatProgressBarModule,\r\n    MatProgressSpinnerModule,\r\n    MatSortModule,\r\n    MatTableModule,\r\n    MatTooltipModule,\r\n    FormatDataPipe,\r\n    TDynamicDataViewComponent,\r\n  ],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class MultipleInputTableViewComponent {\r\n  readonly inputConfig = input<ITowerStepColumn | undefined>(undefined);\r\n  readonly dataSource = input<MatTableDataSource<MultipleInputRow> | undefined>(\r\n    new MatTableDataSource<MultipleInputRow>(),\r\n  );\r\n  readonly applyOptionsTo = input<MultipleInputRow | undefined>(undefined);\r\n  readonly formGroup = input<FormGroup | null>(null);\r\n\r\n  readonly onEditItem = output<string>();\r\n  readonly onDeleteItem = output<MultipleInputRow>();\r\n  readonly onCopy = output<string>();\r\n  readonly onApplyOptionsTo = output<MultipleInputRow>();\r\n  readonly showItemAsLabel = output<void>();\r\n\r\n  protected readonly colConfig = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    if (!cfg) {\r\n      return {\r\n        columnsConfig: {} as Record<string, ColumnConfig>,\r\n        displayedColumnsInOrder: [] as string[],\r\n      };\r\n    }\r\n    return configureCols(cfg, this.tempLabels);\r\n  });\r\n\r\n  protected readonly displayedColumnsInOrderSig = computed(\r\n    () => this.colConfig().displayedColumnsInOrder,\r\n  );\r\n\r\n  protected readonly allPossibleLabels = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    const displayed = this.displayedColumnsInOrderSig();\r\n    return (\r\n      cfg?.formInputs?.map((inp) => ({\r\n        label: inp.label,\r\n        selected: displayed.includes(`${cfg?.id}.${inp.id}`),\r\n        formControlName: inp.formControlName,\r\n      })) || []\r\n    );\r\n  });\r\n\r\n  protected readonly userCanEdit = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    if (!cfg) return false;\r\n    if (!cfg.multipleInputAvailableOperations) return true;\r\n    return cfg.multipleInputAvailableOperations.includes(MultipleInputAvailableOperations.Update);\r\n  });\r\n\r\n  protected readonly userCanRemove = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    if (!cfg) return false;\r\n    if (!cfg.multipleInputAvailableOperations) return true;\r\n    return cfg.multipleInputAvailableOperations.includes(MultipleInputAvailableOperations.Remove);\r\n  });\r\n\r\n  protected readonly userCanAdd = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    if (!cfg) return false;\r\n    if (!cfg.multipleInputAvailableOperations) return true;\r\n    return cfg.multipleInputAvailableOperations.includes(MultipleInputAvailableOperations.Add);\r\n  });\r\n\r\n  protected readonly userCanApplyOptionsTo = computed(() => {\r\n    return this.userCanEdit() || this.userCanRemove() || this.userCanAdd();\r\n  });\r\n\r\n  protected applyOptionsToFn(item: MultipleInputRow): void {\r\n    this.onApplyOptionsTo.emit(item);\r\n  }\r\n\r\n  protected editItem(row: MultipleInputRow): void {\r\n    const rowId = row[`${this.inputConfig()?.id}.id`] as string;\r\n    this.onEditItem.emit(rowId);\r\n  }\r\n\r\n  protected copy(row: MultipleInputRow): void {\r\n    const rowId = row[`${this.inputConfig()?.id}.id`] as string;\r\n    this.onCopy.emit(rowId);\r\n  }\r\n\r\n  protected areYouSureYouWantToDeleteRow: Record<string, boolean> = {};\r\n\r\n  protected isAboutToDeleteRow(row: MultipleInputRow): boolean {\r\n    return !!this.areYouSureYouWantToDeleteRow[row[`${this.inputConfig()?.id}.id`] as string];\r\n  }\r\n\r\n  protected countDownDate: Date = new Date();\r\n  protected deletionTimers: Record<string, ReturnType<typeof setTimeout>> = {};\r\n\r\n  protected getCountdownSeconds(): number {\r\n    const now = new Date();\r\n    const timeElapsed = (now.getTime() - this.countDownDate.getTime()) / 1000;\r\n    const percentage = Math.min(Math.round((timeElapsed / 3) * 100), 100);\r\n    return percentage;\r\n  }\r\n\r\n  protected secondsCountDown(): string {\r\n    return (3 - ((this.getCountdownSeconds() / 100) * 3)).toFixed(1);\r\n  }\r\n\r\n  protected multipleInputRemoveItem(event: Event, row: MultipleInputRow): void {\r\n    const rowId = row[`${this.inputConfig()?.id}.id`] as string;\r\n\r\n    if (this.areYouSureYouWantToDeleteRow[rowId]) {\r\n      if (this.deletionTimers[rowId]) {\r\n        clearTimeout(this.deletionTimers[rowId]);\r\n        delete this.deletionTimers[rowId];\r\n      }\r\n      delete this.areYouSureYouWantToDeleteRow[rowId];\r\n    } else {\r\n      this.areYouSureYouWantToDeleteRow[rowId] = true;\r\n      this.countDownDate = new Date();\r\n\r\n      this.deletionTimers[rowId] = setTimeout(() => {\r\n        if (this.areYouSureYouWantToDeleteRow[rowId]) {\r\n          this.onDeleteItem.emit(row);\r\n          delete this.areYouSureYouWantToDeleteRow[rowId];\r\n          delete this.deletionTimers[rowId];\r\n        }\r\n      }, 3000);\r\n    }\r\n\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  protected returnBackground(row: MultipleInputRow, columnsConfig?: ColumnConfig): string | undefined {\r\n    let background = '';\r\n    const ds = this.dataSource();\r\n    if (\r\n      ds\r\n        ? ds.data.length > 1\r\n          ? columnsConfig?.['colorScale']\r\n          : false\r\n        : false\r\n    ) {\r\n      const inputCfg = this.inputConfig() as IMultiple;\r\n      const colKey = columnsConfig?.['key'] ?? '';\r\n      const point = Number(row[colKey]);\r\n      const inputIsGrouped = inputCfg.groupBy;\r\n      const groupKey = inputCfg.groupBy?.[0] || '';\r\n      const dataSet = inputIsGrouped\r\n        ? ds?.data.filter(\r\n            (s) => (s as MultipleInputRow)[groupKey] === row[groupKey],\r\n          )\r\n        : new Array(ds?.data||[]);\r\n      const arrayValues: number[] = dataSet?.map((vr) => Number((vr as MultipleInputRow)[colKey]))||[];\r\n      const max = Math.max(...arrayValues);\r\n      const min = Math.min(...arrayValues);\r\n      const hasNun = isNaN(max) || isNaN(min);\r\n      if (!hasNun && Number(max) !== Number(min)) {\r\n        const colorScale = new ColorScale(\r\n          min,\r\n          max,\r\n          ['#2fdf75', '#FFA500', '#ff4961'],\r\n          0.8,\r\n        );\r\n\r\n        const color: string | undefined = colorScale.getColor(point)?.toRGBAString();\r\n        background = color ?? '';\r\n      }\r\n    }\r\n    return background;\r\n  }\r\n\r\n  protected hasTopBorder(row: MultipleInputRow): boolean {\r\n    const inputCfg = this.inputConfig() as IMultiple;\r\n    const inputIsGrouped = inputCfg?.groupBy;\r\n    const ds = this.dataSource();\r\n    if (inputIsGrouped && ds) {\r\n      const indexOfRow = ds.data.indexOf(row);\r\n      const rowIsFirstInTable = indexOfRow === 0;\r\n\r\n      if (!inputCfg.groupBy) {\r\n        return false;\r\n      }\r\n      const groupKey = inputCfg.groupBy?.[0] ?? '';\r\n      const isFirstInGroup = rowIsFirstInTable\r\n        ? true\r\n        : (ds.data[indexOfRow - 1] as MultipleInputRow)[groupKey] !==\r\n          row[groupKey];\r\n\r\n      return isFirstInGroup;\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  protected getCalculationFunction(row: MultipleInputRow): string {\r\n    const func = row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] as CalculationFunctions;\r\n\r\n    switch (func) {\r\n      case CalculationFunctions.Sum:\r\n        return 'TOTAL';\r\n      case CalculationFunctions.Avg:\r\n        return 'AVERAGE';\r\n      case CalculationFunctions.Max:\r\n        return 'MAX';\r\n      case CalculationFunctions.Min:\r\n        return 'MIN';\r\n      default:\r\n        return func;\r\n    }\r\n  }\r\n\r\n  protected tempLabels: string[] = [];\r\n  protected toggleTepLabel(event: Event, label: string): void {\r\n    if (this.tempLabels.includes(label)) {\r\n      this.tempLabels = this.tempLabels.filter((l) => l !== label);\r\n    } else {\r\n      this.tempLabels.push(label);\r\n    }\r\n\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n  }\r\n\r\n  get getColConfig() {\r\n    return this.colConfig();\r\n  }\r\n\r\n  get displayedColumnsInOrder(): string[] {\r\n    return this.displayedColumnsInOrderSig();\r\n  }\r\n\r\n  protected SYSTEM_KEY_IN_EDIT: string | null = null;\r\n  protected rowIsInEdit(row: MultipleInputRow): boolean {\r\n    const cfg = this.inputConfig();\r\n    const fg = this.formGroup();\r\n    return (\r\n      !!cfg?.formIsOpen &&\r\n      fg?.controls[`${cfg?.id}.id`]?.value === row[`${cfg?.id}.id`]\r\n    );\r\n  }\r\n\r\n  protected overlayOpen = false;\r\n  protected overlayData: unknown = null;\r\n  protected overlayPosition: { top: number; left: number } = { top: 0, left: 0 };\r\n\r\n  protected openDataOverlay(event: MouseEvent, data: unknown): void {\r\n    event.stopPropagation();\r\n    const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\r\n    this.overlayData = data;\r\n    this.overlayPosition = { top: rect.bottom + 4, left: rect.left };\r\n    this.overlayOpen = true;\r\n  }\r\n\r\n  protected closeDataOverlay(): void {\r\n    this.overlayOpen = false;\r\n    this.overlayData = null;\r\n  }\r\n\r\n  protected fullView = false;\r\n}\r\n","@defer (on viewport) {\r\n\r\n  @if (getColConfig.displayedColumnsInOrder.length === 0) {\r\n    <div class=\"mit-state mit-state--inline\">No columns</div>\r\n  }\r\n\r\n  <div class=\"table-container\">\r\n\r\n    <table mat-table [dataSource]=\"(dataSource() || [])\" class=\"mit-table\" matSort matSortActive=\"created\"\r\n      matSortDisableClear matSortDirection=\"desc\">\r\n      @for (col of (displayedColumnsInOrder || []); track col) {\r\n        <ng-container [matColumnDef]=\"col\">\r\n          <th mat-header-cell *matHeaderCellDef>\r\n            <span class=\"mit-th-label\">\r\n              {{ getColConfig.columnsConfig?.[col]?.[\"label\"] }}\r\n            </span>\r\n            @if ($last) {\r\n              <button matTooltip=\"Show other values\" [matMenuTriggerFor]=\"colOptions\" [matMenuTriggerData]=\"{}\"\r\n                class=\"mit-th-action\" mat-icon-button>\r\n                <mat-icon>label</mat-icon>\r\n              </button>\r\n            }\r\n          </th>\r\n          <td [class.functionClass]=\"row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION']\"\r\n            [style.background]=\"returnBackground(row, getColConfig.columnsConfig?.[col])\"\r\n            mat-cell *matCellDef=\"let row\">\r\n            @if (getColConfig.columnsConfig?.[col]?.['type'] === 'removal') {\r\n              <div class=\"cellClass\">\r\n\r\n                @if (!!row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] && !row['id'] && !inputConfig()?.multipleInputInEditId ||\r\n                !!row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] && inputConfig()?.multipleInputInEditId &&\r\n                inputConfig()?.multipleInputInEditId !== row['id']) {\r\n                  <div class=\"mit-fn-label\">\r\n                    <strong>{{ getCalculationFunction(row) }}</strong>\r\n                  </div>\r\n                }\r\n                @if (\r\n                  userCanApplyOptionsTo() &&\r\n                  !row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] &&\r\n                  row[''] !== 'true' && !inputConfig()?.readonly && !inputConfig()?.disabled\r\n                ) {\r\n                  <button mat-icon-button [color]=\"t.menuOpen ? 'primary' : 'basic'\" [matMenuTriggerFor]=\"rowOptions\" [matMenuTriggerData]=\"{row:row}\" #t=\"matMenuTrigger\"\r\n                    (click)=\"applyOptionsToFn(row)\"\r\n                    class=\"mit-row-trigger\">\r\n                    @if (rowIsInEdit(row)) {\r\n                      <mat-icon color=\"primary\">edit</mat-icon>\r\n                    } @else {\r\n                      <mat-icon>{{ t.menuOpen ? 'close' : 'more_horiz' }}</mat-icon>\r\n                    }\r\n                  </button>\r\n                }\r\n\r\n                @if (row['SYSTEM_KEY_IN_EDIT']) {\r\n                  <mat-chip>In {{ inputConfig()?.readonly ? 'View' : 'Edit' }}</mat-chip>\r\n                }\r\n\r\n              </div>\r\n            }\r\n            @if (getColConfig.columnsConfig && getColConfig.columnsConfig?.[col]?.type !== 'removal') {\r\n              <div class=\"cellClass\">\r\n                <span>\r\n                  @if (getColConfig.columnsConfig?.[col].dataType === 'array' || getColConfig.columnsConfig?.[col].dataType === 'object') {\r\n                    <button mat-icon-button class=\"mit-data-button\"\r\n                      matTooltip=\"View data\"\r\n                      (click)=\"openDataOverlay($event, row[col])\">\r\n                      <mat-icon class=\"mit-data-icon\">data_object</mat-icon>\r\n                    </button>\r\n                  } @else {\r\n                    {{ row[col] | formatData: getColConfig.columnsConfig?.[col].dataType }}\r\n                  }\r\n                </span>\r\n              </div>\r\n            }\r\n          </td>\r\n        </ng-container>\r\n      }\r\n\r\n\r\n      <tr mat-header-row *matHeaderRowDef=\"getColConfig.displayedColumnsInOrder\"></tr>\r\n      <tr [class.mit-group-start]=\"hasTopBorder(row)\" mat-row\r\n        *matRowDef=\"let row; columns: getColConfig.displayedColumnsInOrder\"></tr>\r\n    </table>\r\n\r\n    @if (!dataSource()?.data?.length) {\r\n      <div class=\"mit-empty\">\r\n        <mat-icon class=\"mit-empty-icon\">list</mat-icon>\r\n        <strong class=\"mit-empty-title\">No items yet</strong>\r\n        <p class=\"mit-empty-text\">\r\n          <strong>Click the add button</strong> to create a new row. You'll fill in details using a form, and each\r\n          saved entry appears as a row here.\r\n        </p>\r\n      </div>\r\n    }\r\n  </div>\r\n} @placeholder {\r\n  <div class=\"mit-placeholder\">\r\n    <mat-spinner diameter=\"32\" />\r\n  </div>\r\n}\r\n\r\n@if (overlayOpen) {\r\n  <div class=\"data-overlay-backdrop\" (click)=\"closeDataOverlay()\"></div>\r\n  <div class=\"data-overlay-panel\"\r\n    [style.top.px]=\"overlayPosition.top\"\r\n    [style.left.px]=\"overlayPosition.left\"\r\n    (click)=\"$event.stopPropagation()\">\r\n    <div class=\"data-overlay-header\">\r\n      <span class=\"data-overlay-title\">\r\n        <mat-icon class=\"data-overlay-title-icon\">data_object</mat-icon>\r\n        Data\r\n      </span>\r\n      <button mat-icon-button class=\"mit-data-button\" (click)=\"closeDataOverlay()\">\r\n        <mat-icon class=\"mit-data-icon\">close</mat-icon>\r\n      </button>\r\n    </div>\r\n    <div class=\"data-overlay-body\">\r\n      <lib-t-dynamic-data-view [data]=\"overlayData\" />\r\n    </div>\r\n  </div>\r\n}\r\n\r\n<mat-menu #colOptions=\"matMenu\">\r\n  <ng-template matMenuContent>\r\n    @for (label of allPossibleLabels(); track label.formControlName) {\r\n      <button mat-menu-item (click)=\"toggleTepLabel($event, label.formControlName);\">\r\n        <mat-icon>{{ label.selected ? 'check_circle' : 'radio_button_unchecked' }}</mat-icon>\r\n        {{ label.label }}\r\n      </button>\r\n    }\r\n  </ng-template>\r\n</mat-menu>\r\n\r\n<mat-menu #rowOptions=\"matMenu\">\r\n  <ng-template matMenuContent let-row=\"row\">\r\n    @if (!inputConfig()?.readonly && !inputConfig()?.disabled) {\r\n      @if (userCanEdit()) {\r\n        <button mat-menu-item (click)=\"editItem(row)\">\r\n          <mat-icon>edit</mat-icon>\r\n          <div class=\"option-text\">\r\n            <div class=\"option-main-text\">Edit</div>\r\n            <div class=\"option-sub-text\">\r\n              {{ inputConfig()?.readonly ? 'View item properties' : 'Modify item properties' }}\r\n            </div>\r\n          </div>\r\n        </button>\r\n      }\r\n      @if (userCanAdd()) {\r\n        <button mat-menu-item (click)=\"copy(row)\">\r\n          <mat-icon>content_copy</mat-icon>\r\n          <div class=\"option-text\">\r\n            <div class=\"option-main-text\">Duplicate</div>\r\n            <div class=\"option-sub-text\">Create a copy with same values</div>\r\n          </div>\r\n        </button>\r\n      }\r\n\r\n      @if (userCanRemove()) {\r\n        @if (isAboutToDeleteRow(row)) {\r\n          <button mat-menu-item (click)=\"multipleInputRemoveItem($event,row)\">\r\n            <mat-icon color=\"accent\">cancel</mat-icon>\r\n            <div class=\"option-text\">\r\n              <div class=\"option-main-text option-main-text--cancel\">Cancel Deletion</div>\r\n              <div class=\"option-sub-text\">Auto-deleting in {{ secondsCountDown() }} seconds...</div>\r\n            </div>\r\n          </button>\r\n          <div class=\"deletion-progress-container\">\r\n            <mat-progress-bar color=\"warn\" mode=\"determinate\" [value]=\"getCountdownSeconds()\"></mat-progress-bar>\r\n            @if (getCountdownSeconds() > 75) {\r\n              <div class=\"deletion-message\">Deleting soon...</div>\r\n            }\r\n          </div>\r\n        } @else {\r\n          <button mat-menu-item (click)=\"multipleInputRemoveItem($event,row)\">\r\n            <mat-icon color=\"warn\">delete_outline</mat-icon>\r\n            <div class=\"option-text\">\r\n              <div class=\"option-main-text\">Delete</div>\r\n              <div class=\"option-sub-text\">Will delete after 3 seconds (click to cancel)</div>\r\n            </div>\r\n          </button>\r\n        }\r\n      }\r\n    }\r\n  </ng-template>\r\n</mat-menu>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  DestroyRef,\r\n  OnDestroy,\r\n  ViewEncapsulation,\r\n  computed,\r\n  inject,\r\n  input,\r\n  output,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { TFormInputComponent } from '../../../../t-form-input.component';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\nimport { Subject, takeUntil, tap, timer } from 'rxjs';\r\nimport { CalculationFunctions, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { IMultipleInputCal } from 'ngx-t-forms-types';\r\nimport { FormBuilderFunctions } from 'ngx-t-forms-types';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n\r\n@Component({\r\n  selector: 'lib-multiple-input-table-edit',\r\n  imports: [\r\n    CommonModule,\r\n    DragDropModule,\r\n    MatButtonModule,\r\n    MatCardModule,\r\n    MatDividerModule,\r\n    MatIconModule,\r\n    MatMenuModule,\r\n    MatProgressSpinnerModule,\r\n    MatTooltipModule,\r\n  ],\r\n  templateUrl: './multiple-input-table-edit.component.html',\r\n  styleUrl: './multiple-input-table-edit.component.css',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class MultipleInputTableEditComponent implements OnDestroy {\r\n  protected readonly InputComponent = TFormInputComponent;\r\n\r\n  readonly inputConfig = input.required<ITowerStepColumn>();\r\n  readonly editorMode = input<boolean>(false);\r\n  readonly formGroup = input<FormGroup | null>(null);\r\n  readonly formBuilderFunctions = input<FormBuilderFunctions | undefined>(undefined);\r\n\r\n  readonly onSaveMultipleInputForm = output<void>();\r\n  readonly editMultipleInput = output<ITowerStepColumn>();\r\n  readonly deleteInput = output<ITowerStepColumn>();\r\n  readonly showItemAsLabel = output<ITowerStepColumn>();\r\n  readonly addFunction = output<IMultipleInputCal>();\r\n  readonly reorderItems = output<CdkDragDrop<ITowerStepColumn[], unknown, unknown>>();\r\n\r\n  protected readonly calculationFunctions = Object.values(CalculationFunctions);\r\n\r\n  protected activeInput: string = '';\r\n  protected dragging: boolean = false;\r\n  protected overId: string | null = null;\r\n  protected areYouSure: boolean = false;\r\n\r\n  protected countdownSeconds: {\r\n    [key: string]: {\r\n      count: number | null;\r\n      stop$: Subject<void>;\r\n    };\r\n  } = {};\r\n\r\n  protected readonly innerInputs = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    return (\r\n      cfg?.formInputs?.map(\r\n        (input) =>\r\n          ({\r\n            ...input,\r\n            originalId: input.id,\r\n            id: `${cfg?.id}.${input.id}`,\r\n          } as ITowerStepColumn),\r\n      ) || []\r\n    );\r\n  });\r\n\r\n  protected readonly rowInUpdate = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    const fg = this.formGroup();\r\n    return !!cfg?.formIsOpen && !!fg?.controls[`${cfg?.id}.id`]?.value;\r\n  });\r\n\r\n  protected readonly formInvalid = computed(() => {\r\n    const cfg = this.inputConfig();\r\n    const fg = this.formGroup();\r\n    const allControls: AbstractControl<unknown, unknown>[] = [];\r\n    cfg?.formInputs?.forEach((input) => {\r\n      const control = fg?.controls[`${cfg?.id}.${input.id}`];\r\n      if (control) {\r\n        allControls.push(control);\r\n      }\r\n    });\r\n    return allControls.some((control) => control?.invalid || !control);\r\n  });\r\n\r\n  readonly #destroyRef = inject(DestroyRef);\r\n\r\n  ngOnDestroy(): void {\r\n    Object.values(this.countdownSeconds).forEach(({ stop$ }) => stop$.complete());\r\n  }\r\n\r\n  protected saveMultipleInputForm(): void {\r\n    this.onSaveMultipleInputForm.emit();\r\n  }\r\n\r\n  protected inputWillBeRemovedIn(id: string): number | null | undefined {\r\n    return this.countdownSeconds[id]?.count;\r\n  }\r\n\r\n  protected removeInput(item: ITowerStepColumn): void {\r\n    if (this.countdownSeconds[item.id]) {\r\n      this.stopDeletion(item.id);\r\n      return;\r\n    }\r\n\r\n    this.countdownSeconds[item.id] = {\r\n      count: 5,\r\n      stop$: new Subject<void>(),\r\n    };\r\n\r\n    const countdown$ = timer(0, 1000).pipe(\r\n      tap((secondsElapsed) => {\r\n        const data = this.countdownSeconds[item.id];\r\n        if (!data) {\r\n          return;\r\n        }\r\n\r\n        const remainingTime = 5 - secondsElapsed;\r\n        if (remainingTime <= 0) {\r\n          this.formDeleteInput(item);\r\n          this.stopDeletion(item.id);\r\n        } else {\r\n          data.count = remainingTime;\r\n        }\r\n      }),\r\n      takeUntil(this.countdownSeconds[item.id]!.stop$),\r\n      takeUntilDestroyed(this.#destroyRef),\r\n    );\r\n\r\n    countdown$.subscribe({\r\n      complete: () => {},\r\n    });\r\n  }\r\n\r\n  protected stopDeletion(id: string): void {\r\n    if (this.countdownSeconds[id]) {\r\n      this.countdownSeconds[id]?.stop$.next();\r\n      delete this.countdownSeconds[id];\r\n    }\r\n  }\r\n\r\n  protected formDeleteInput(item: ITowerStepColumn): void {\r\n    this.deleteInput.emit(item);\r\n  }\r\n\r\n  protected dropItems(event: CdkDragDrop<ITowerStepColumn[], unknown, unknown>): void {\r\n    this.reorderItems.emit(event);\r\n  }\r\n\r\n  protected editInput(input: ITowerStepColumn): void {\r\n    this.editMultipleInput.emit(input);\r\n  }\r\n\r\n  protected toggleLabel(item: ITowerStepColumn): void {\r\n    this.showItemAsLabel.emit(item);\r\n  }\r\n\r\n  protected toggleFunction(func: CalculationFunctions, _inputId: string): void {\r\n    const addFunction: IMultipleInputCal = {\r\n      id: uuidv4(),\r\n      inputId: this.activeInput,\r\n      func,\r\n    } as IMultipleInputCal;\r\n    this.addFunction.emit(addFunction);\r\n  }\r\n\r\n  protected selectedFunction(func: CalculationFunctions): IMultipleInputCal | undefined {\r\n    return this.inputConfig()?.calculateListFunctions?.find(\r\n      (f) => f.inputId === this.activeInput && f.func === func,\r\n    );\r\n  }\r\n\r\n  protected closeMultipleInput(): void {\r\n    if (this.areYouSure) {\r\n      this.formBuilderFunctions()?.multipleInputToggleForm(this.inputConfig().id, false);\r\n      this.areYouSure = false;\r\n      return;\r\n    }\r\n    this.areYouSure = true;\r\n  }\r\n}\r\n","<mat-card appearance=\"outlined\" class=\"edit-card mat-elevation-z4\">\r\n  <mat-card-content>\r\n    <div class=\"list row\" (cdkDropListDropped)=\"dropItems($event)\"\r\n      [cdkDropListData]=\"innerInputs()\" cdkDropList #InputList=\"cdkDropList\">\r\n      @for (innerInput of innerInputs(); track innerInput.id) {\r\n        <ng-container>\r\n          @if (editorMode()) {\r\n            @if (!!formGroup()) {\r\n              <mat-card (mouseover)=\"activeInput = innerInput.id\" cdkDrag\r\n                (cdkDragStarted)=\"dragging = true\" (cdkDragReleased)=\"dragging = false\"\r\n                [class.inputCardElevated]=\"activeInput === innerInput.id\"\r\n                [class.inputCard]=\"activeInput !== innerInput.id\"\r\n                [class]=\"'col-md-' + (dragging ? '12' : innerInput.colSize)\" class=\"box\">\r\n                <ng-container *ngComponentOutlet=\"InputComponent;\r\n                  inputs: {\r\n                    inputConfig: innerInput,\r\n                    formGroup: formGroup(),\r\n                    formBuilderFunctions: formBuilderFunctions(),\r\n                  }\">\r\n                </ng-container>\r\n                @if (activeInput === innerInput.id) {\r\n                  <mat-card-actions class=\"input-actions\">\r\n                    <span class=\"spacer\"></span>\r\n                    <button [matTooltip]=\"'Edit Input: ' + innerInput.label\"\r\n                      (click)=\"editInput(innerInput)\" mat-icon-button>\r\n                      <mat-icon>edit</mat-icon>\r\n                    </button>\r\n                    @if (!!inputWillBeRemovedIn(innerInput.id)) {\r\n                      <button (mouseover)=\"overId = innerInput.id\" (mouseout)=\"overId = null\"\r\n                        (click)=\"removeInput(innerInput)\" color=\"warn\" mat-stroked-button>\r\n                        <div class=\"countdown-button\">\r\n                          <mat-progress-spinner class=\"cancelProgress\" color=\"primary\"\r\n                            [value]=\"((inputWillBeRemovedIn(innerInput.id) || 0) / 5) * 100\">\r\n                          </mat-progress-spinner>\r\n                          {{ overId === innerInput.id ? 'Click to cancel' : 'Deleting in' }}\r\n                          {{ inputWillBeRemovedIn(innerInput.id) }}\r\n                        </div>\r\n                      </button>\r\n                    } @else if (inputConfig().systemDefault !== true && innerInput.systemDefault !== true) {\r\n                      <button [matTooltip]=\"'Delete input ' + innerInput.label\"\r\n                        (click)=\"removeInput(innerInput)\" mat-icon-button>\r\n                        <mat-icon>delete</mat-icon>\r\n                      </button>\r\n                    }\r\n                    <span class=\"action-divider\"></span>\r\n                    @if (!!innerInput.showAsLabel && innerInput.dataType === 'number' || !!innerInput.showAsLabel && innerInput.type === 'number') {\r\n                      <button\r\n                        [matMenuTriggerFor]=\"calculationMenu\"\r\n                        [matMenuTriggerData]=\"{inputId:innerInput.originalId || innerInput.id}\"\r\n                        [matTooltip]=\"'calculate sum,avg,min,max'\"\r\n                        mat-icon-button>\r\n                        <mat-icon>calculate</mat-icon>\r\n                      </button>\r\n                    }\r\n                    <button [color]=\"innerInput.showAsLabel ? 'primary' : ''\"\r\n                      (click)=\"toggleLabel(innerInput)\"\r\n                      [matTooltip]=\"innerInput.showAsLabel ? 'Hide as label' : 'Show as label'\"\r\n                      mat-icon-button>\r\n                      <mat-icon>label</mat-icon>\r\n                    </button>\r\n                    <span class=\"spacer\"></span>\r\n                  </mat-card-actions>\r\n                }\r\n              </mat-card>\r\n            }\r\n          } @else {\r\n            <div [class]=\"'col-md-' + (dragging ? '12' : innerInput.colSize)\" class=\"box\">\r\n              <ng-container *ngComponentOutlet=\"InputComponent;\r\n                inputs: {\r\n                  inputConfig: innerInput,\r\n                  formGroup: formGroup(),\r\n                  formBuilderFunctions: formBuilderFunctions(),\r\n                }\">\r\n              </ng-container>\r\n            </div>\r\n          }\r\n        </ng-container>\r\n      }\r\n      @if (!!editorMode() && innerInputs().length === 0) {\r\n        <div class=\"tree-instructions\">\r\n          <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n          <span>\r\n            <strong>Add Form Input</strong>\r\n            <br>\r\n            Manage your list by adding, editing, or removing items. Each item is customizable through a form.\r\n          </span>\r\n        </div>\r\n      }\r\n    </div>\r\n  </mat-card-content>\r\n  @if (innerInputs().length !== 0) {\r\n    <mat-divider></mat-divider>\r\n    <mat-card-actions align=\"end\" class=\"edit-card-actions\">\r\n      <button [color]=\"areYouSure ? 'warn' : ''\"\r\n        [class.confirm-leave]=\"areYouSure\" mat-button\r\n        (click)=\"closeMultipleInput()\">\r\n        {{ areYouSure ? \"leave without saving\" : \"cancel\" }}\r\n      </button>\r\n      @if (!inputConfig().readonly) {\r\n        <button [disabled]=\"!!formInvalid()\" class=\"save-button\" color=\"primary\"\r\n          (click)=\"saveMultipleInputForm()\" mat-raised-button>\r\n          {{ rowInUpdate() ? \"Update\" : \"Save\" }}\r\n        </button>\r\n      }\r\n    </mat-card-actions>\r\n  }\r\n</mat-card>\r\n\r\n\r\n<mat-menu #calculationMenu=\"matMenu\">\r\n  <ng-template matMenuContent let-inputId=\"sectionId\">\r\n    @for (func of calculationFunctions; track func) {\r\n      <button (click)=\"toggleFunction(func, inputId)\" mat-menu-item>\r\n        {{ func }}\r\n        @if (selectedFunction(func)) {\r\n          <mat-icon color=\"primary\">check_circle</mat-icon>\r\n        }\r\n      </button>\r\n    }\r\n  </ng-template>\r\n</mat-menu>\r\n","\r\nimport { calculateListOveralFunctions } from \"../../../../../services/core/t-form-controller/function/calculateInputValue\";\r\nimport { CalculationFunctions, FormColumnInputs } from \"ngx-t-forms-types\";\r\n\r\ntype CalculatedRow = Record<string, unknown> & {\r\n  SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION?: CalculationFunctions;\r\n};\r\n\r\nexport function getCaluculatedTableData(\r\n  inputConfig: FormColumnInputs | undefined,\r\n  data: Record<string, unknown>[],\r\n): Record<string, unknown>[] {\r\n  try {\r\n    if (!Array.isArray(data) || !inputConfig) return data;\r\n    const input: FormColumnInputs = inputConfig;\r\n    const funcs = (input?.calculateListFunctions || []);\r\n    const allUniqueFunctionNames = [\r\n      ...new Set(funcs.map((f: { inputId: string; func: CalculationFunctions }) => f.func)),\r\n    ];\r\n    const calculatedData: CalculatedRow[] = allUniqueFunctionNames.map((func) => {\r\n      const newCalculatedData: CalculatedRow = {\r\n        SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION: func,\r\n      };\r\n      funcs.filter((f) => f.func === func).forEach((f) => {\r\n        const arrayValues = data.map((d) => Number(d[f.inputId]));\r\n        newCalculatedData[f.inputId] = calculateListOveralFunctions(func, arrayValues);\r\n      });\r\n      return newCalculatedData;\r\n    });\r\n    return [...data, ...calculatedData];\r\n  } catch (error) {\r\n    return data;\r\n  }\r\n}","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  DestroyRef,\r\n  ElementRef,\r\n  ViewEncapsulation,\r\n  inject,\r\n  input,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormGroup, NgControl } from '@angular/forms';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nimport { IMultiple, IMultipleInputCal, ITowerStepColumn, MultipleInputAvailableOperations } from 'ngx-t-forms-types';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\n\r\nimport { MultipleInputTableViewComponent } from '../multiple-input-table-view/multiple-input-table-view.component';\r\nimport { MultipleInputTableEditComponent } from '../multiple-input-table-edit/multiple-input-table-edit.component';\r\n\r\nimport { FormBuilderFunctions } from 'ngx-t-forms-types';\r\nimport { getCaluculatedTableData } from '../../functions/getListCalculated';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\r\n\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\n\r\n/**\r\n * A single row inside a multiple-input table. Keys are dynamic — composed from the input\r\n * config id plus child input ids — so values are typed as `unknown`. Narrow at access sites.\r\n */\r\ntype MultipleInputRow = Record<string, unknown> & { id?: string };\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n  controlType: 'app-multiple-input-table',\r\n  nextId: 0,\r\n};\r\n\r\n@Component({\r\n  selector: 'lib-multiple-input-table',\r\n  templateUrl: './multiple-input-table.component.html',\r\n  styleUrls: ['./multiple-input-table.component.css'],\r\n  imports: [\r\n    MatButtonModule,\r\n    MatIconModule,\r\n    MultipleInputTableEditComponent,\r\n    MultipleInputTableViewComponent,\r\n  ],\r\n  providers: [{ provide: MatFormFieldControl, useExisting: MultipleInputTableComponent }],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class MultipleInputTableComponent extends BaseCustomInput<MultipleInputRow[] | null> {\r\n  readonly editorMode = input<boolean>(false);\r\n  readonly formGroup = input.required<FormGroup>();\r\n  readonly inputConfig = input.required<ITowerStepColumn>();\r\n  readonly formBuilderFunctions = input<FormBuilderFunctions | undefined>(undefined);\r\n\r\n  readonly #destroyRef = inject(DestroyRef);\r\n\r\n  constructor() {\r\n    super(\r\n      inject(NgControl, { self: true, optional: true })!,\r\n      inject<ElementRef<HTMLElement>>(ElementRef),\r\n      customInputConfig,\r\n    );\r\n    this.listenToValueChanges();\r\n  }\r\n\r\n  /**\r\n   * Manages custom validation errors on the form control.\r\n   * Intended to be called from the ngDoCheck lifecycle hook.\r\n   * This function handles both the 'required' error and the new\r\n   * 'multipleInputListMissingSomeFields' custom error.\r\n   */\r\n  override checkValidationsAnErrors() {\r\n    const control = this.ngControl?.control;\r\n\r\n    // 1. Early exit if there's no form control to work with.\r\n    if (!control) {\r\n      return;\r\n    }\r\n\r\n    // --- DEFINE THE DESIRED ERROR STATE ---\r\n\r\n    // 2. Determine if the custom \"multiple fields\" error should exist.\r\n    let shouldHaveCustomError = false;\r\n    const formInputs = (this.inputConfig() as IMultiple)?.formInputs;\r\n\r\n    if (Array.isArray(formInputs) && Array.isArray(this.value)) {\r\n      const requiredFieldIds = formInputs\r\n        .filter(i => i.required)\r\n        .map(i => i.id);\r\n\r\n      if (requiredFieldIds.length > 0) {\r\n        const configId = this.inputConfig().id;\r\n        shouldHaveCustomError = this.value.some(item =>\r\n          requiredFieldIds.some(id => this._isNilOrEmpty(item?.[`${configId}.${id}`]))\r\n        );\r\n      }\r\n    }\r\n\r\n    // 3. Determine if the standard 'required' error should exist.\r\n    const shouldHaveRequiredError = this.required && this._isNilOrEmpty(this.value);\r\n\r\n\r\n    // --- APPLY THE ERROR STATE TO THE CONTROL ---\r\n\r\n    // 4. Preserve other errors that might be on the control (e.g., minlength, pattern).\r\n    const newErrors = { ...control.errors };\r\n    delete newErrors['required'];\r\n    delete newErrors['multipleInputListMissingSomeFields'];\r\n\r\n\r\n    // 5. Add our managed errors back if their conditions are met.\r\n    if (shouldHaveRequiredError) {\r\n      newErrors['required'] = true;\r\n    }\r\n    if (shouldHaveCustomError) {\r\n      newErrors['multipleInputListMissingSomeFields'] = { value: true }; // Or simply 'true'\r\n    }\r\n\r\n    // 6. Finalize the error object. If no errors, it must be null.\r\n    const finalErrors = Object.keys(newErrors).length > 0 ? newErrors : null;\r\n\r\n    // 7. IMPORTANT: Only update the control if the errors have actually changed.\r\n    // This prevents infinite loops within ngDoCheck. A simple stringify is a\r\n    // dependency-free way to compare the error objects.\r\n    if (JSON.stringify(control.errors) !== JSON.stringify(finalErrors)) {\r\n      control.setErrors(finalErrors);\r\n    }\r\n  }\r\n\r\n\r\n  override get empty() {\r\n    return !this.value;\r\n  }\r\n\r\n  override get shouldLabelFloat() {\r\n    return this.focused || !this.empty;\r\n  }\r\n\r\n  override get errorState(): boolean {\r\n    // 1. Check for standard validation errors from Angular's Forms API.\r\n    const hasStandardError = !!this.ngControl?.errors;\r\n\r\n    // 2. Check for custom validation errors specific to 'IMultiple' type.\r\n    let hasCustomError = false;\r\n    const formInputs = (this.inputConfig() as IMultiple)?.formInputs;\r\n\r\n    // This custom logic only runs if the config and value are the expected array types.\r\n    if (Array.isArray(formInputs) && Array.isArray(this.value)) {\r\n      const requiredFieldIds = formInputs\r\n        .filter(input => input.required)\r\n        .map(input => input.id);\r\n\r\n      // The custom error is true if any item in our value array is missing\r\n      // a value for any of its required sub-fields.\r\n      if (requiredFieldIds.length > 0) {\r\n        hasCustomError = this.value.some(item =>\r\n          requiredFieldIds.some(id => this._isNilOrEmpty(item?.[`${this.inputConfig().id}.${id}`]))\r\n        );\r\n      }\r\n    }\r\n\r\n    // 3. The final error state is true if *any* validation fails,\r\n    //    AND the control has been \"touched\" by the user.\r\n    return (hasStandardError || hasCustomError) && this.touched;\r\n  }\r\n\r\n  private _isNilOrEmpty(value: unknown): boolean {\r\n    return value === null || value === undefined || value === '';\r\n  }\r\n\r\n\r\n  /// En of implementations of MatFormFieldControl\r\n  applyOptionsTo: MultipleInputRow | undefined;\r\n  dataSource!: MatTableDataSource<MultipleInputRow>;\r\n\r\n  listenToValueChanges(): void {\r\n    this.stateChanges\r\n      .pipe(takeUntilDestroyed(this.#destroyRef))\r\n      .subscribe(() => {\r\n        this.checkItemList();\r\n      });\r\n  }\r\n\r\n  checkItemList(): boolean {\r\n    try {\r\n      if (this.value) {\r\n        const config = this.inputConfig();\r\n        const TableData: MultipleInputRow[] = ((config as IMultiple).groupBy?.length ?? 0) > 0\r\n          ? addGroups(\r\n              this.value,\r\n              (config as IMultiple).groupBy,\r\n            )\r\n          : this.value;\r\n        const data = getCaluculatedTableData(config, TableData) as MultipleInputRow[];\r\n\r\n        if (!this.dataSource) {\r\n          this.dataSource = new MatTableDataSource<MultipleInputRow>(data);\r\n          this.dataSource;\r\n        } else {\r\n          this.dataSource.data = data;\r\n        }\r\n      }\r\n      return true;\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  multipleInputRemoveItem(item: MultipleInputRow | undefined): void {\r\n    if (!item) return;\r\n    if (!this.value) return;\r\n    this.value = this.value.filter((i) => !_isEqual(i, item));\r\n\r\n    this.applyOptionsTo = undefined;\r\n    this.onChange(this.value);\r\n    this.stateChanges.next();\r\n  }\r\n\r\n\r\n  generateMultipleInputForm(): void {\r\n    const id = this.inputConfig()?.id;\r\n    if (!id) return;\r\n    this.formBuilderFunctions()?.multipleInputToggleForm(id, true);\r\n  }\r\n\r\n  rowInViewOnly: string | undefined = undefined;\r\n\r\n  editRow(rowId: string): void {\r\n    if (!rowId) {\r\n      throw new Error('Row id not provided');\r\n    }\r\n\r\n    const config = this.inputConfig();\r\n    const fbf = this.formBuilderFunctions();\r\n    if (!fbf || !config) return;\r\n\r\n    fbf.multipleInputEditRow(config.id, rowId);\r\n\r\n    // if( !this.inputConfig?.multipleInputController){\r\n    //     return\r\n    // }\r\n    //   this.inputConfig.multipleInputInEditId = this.applyOptionsTo.id;\r\n    // this.inputConfig.applyMultipleInputValuesToForm(\r\n    //   this.applyOptionsTo\r\n    // );\r\n  }\r\n\r\n  copy(rowId: string): void {\r\n    const config = this.inputConfig();\r\n    const fbf = this.formBuilderFunctions();\r\n    if (!fbf || !config) return;\r\n    fbf.multipleInputDuplicateRow(config.id, rowId);\r\n    // this.generateMultipleInputForm();\r\n    // this.inputConfig?.applyMultipleInputValuesToForm(\r\n    //   this.applyOptionsTo\r\n    // );\r\n    // this.applyOptionsTo = undefined;\r\n  }\r\n\r\n  protected get handleLabel(): string | undefined {\r\n    return (this.inputConfig() as IMultiple)?.handleLabel;\r\n  }\r\n\r\n  handleIcon(): string {\r\n    // NOTE(phase-4): `handleIcon` is declared on `IBasicFormInput` but not on `IMultiple` directly;\r\n    // narrow through `ITowerStepColumn` (which extends FormColumnInputs) and provide a string fallback.\r\n    const cfg = this.inputConfig() as ITowerStepColumn & { handleIcon?: string };\r\n    return cfg?.handleIcon || 'add';\r\n  }\r\n\r\n  saveMultipleInputForm(): void {\r\n    this.formBuilderFunctions()?.multipleInputSaveForm(this.inputConfig().id);\r\n\r\n    //  const value: any = this.inputConfig?.multipleInputFormValue();\r\n\r\n    // value['id'] = uuidv4();\r\n\r\n    // if (!this.inputConfig) {\r\n    //   return\r\n    // }\r\n\r\n    //   const previousValue = this.value\r\n    //   if (!previousValue) {\r\n    //     this.value = [value];\r\n    //     this.inputConfig.multipleInputController = undefined;\r\n\r\n    //   } else {\r\n    //     if (this.inputConfig?.multipleInputInEditId) {\r\n    //       let inEdit = previousValue.find(\r\n    //         (i: { id: any }) =>\r\n    //           i.id === this.inputConfig?.multipleInputInEditId\r\n    //       );\r\n    //       Object.keys(inEdit).every((s) => {\r\n    //         s;\r\n    //         inEdit[s] = value[s];\r\n    //         return !!inEdit[s];\r\n    //       });\r\n\r\n    //        this.value =  [...previousValue],\r\n    //       this.inputConfig.multipleInputController = undefined;\r\n\r\n    //     } else {\r\n\r\n\r\n    //       this.value = [...previousValue, value];\r\n    //       this.inputConfig.multipleInputController = undefined;\r\n\r\n    //     }\r\n    //   }\r\n    //   this.onChange(this.value);\r\n    //   this.stateChanges.next();\r\n    //   this.checkItemList(this.value || []);\r\n    //   return\r\n\r\n\r\n  }\r\n\r\n  editInput(input: ITowerStepColumn): void {\r\n    const fbf = this.formBuilderFunctions();\r\n    if (typeof fbf?.editInput !== 'function') {\r\n      throw new Error('editInput function not defined in formBuilderFunctions');\r\n    }\r\n    fbf.editInput(input);\r\n  }\r\n\r\n  deleteItemInput(input: ITowerStepColumn): void {\r\n    this.formBuilderFunctions()?.deleteInput(input);\r\n  }\r\n\r\n  showItemAsLabel(input: ITowerStepColumn): void {\r\n    this.formBuilderFunctions()?.multipleInputToggleLabel(input);\r\n  }\r\n\r\n  addFunction(func: IMultipleInputCal): void {\r\n    this.formBuilderFunctions()?.addFunction(func, this.inputConfig()?.id);\r\n  }\r\n\r\n  // `FormBuilderFunctions.reorderItems` is now generic over the row shape; the\r\n  // container/data slots stay `unknown` (opaque drag payload).\r\n  reorderItems(event: CdkDragDrop<ITowerStepColumn[], unknown, unknown>): void {\r\n    const config = this.inputConfig();\r\n    const fbf = this.formBuilderFunctions();\r\n    if (!fbf || !config) return;\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Phase-4 TODO: deduplicate @angular/cdk peer dep in typings package; CdkDragDrop types are nominally distinct across copies.\r\n    (fbf.reorderItems as any)(event, config.id);\r\n  }\r\n\r\n  protected get parentFormGroup(): FormGroup | null {\r\n    return this.ngControl?.control?.parent as FormGroup;\r\n  }\r\n\r\n  protected get canAddRecords() {\r\n    const config = this.inputConfig();\r\n    if (!config) return false;\r\n    //NOTE: Temporary backward compatibility for older versions of the config that might not have the new property\r\n    if (!config.multipleInputAvailableOperations) return true;\r\n    return config.multipleInputAvailableOperations?.includes(MultipleInputAvailableOperations.Add);\r\n  }\r\n}\r\n\r\n\r\n\r\nfunction addGroups(tableValue: MultipleInputRow[], groupBy: string[] | undefined): MultipleInputRow[] {\r\n  throw new Error('Function not implemented.');\r\n}\r\n","<lib-multiple-input-table-view\r\n  [inputConfig]=\"inputConfig()\"\r\n  [dataSource]=\"dataSource\"\r\n  [applyOptionsTo]=\"applyOptionsTo\"\r\n  [formGroup]=\"parentFormGroup\"\r\n  (onEditItem)=\"editRow($event)\"\r\n  (showItemAsLabel)=\"showItemAsLabel(inputConfig())\"\r\n  (onDeleteItem)=\"multipleInputRemoveItem(applyOptionsTo)\"\r\n  (onCopy)=\"copy($event)\"\r\n  (onApplyOptionsTo)=\"applyOptionsTo = $event\"\r\n></lib-multiple-input-table-view>\r\n\r\n@if (!!inputConfig().formIsOpen || !!rowInViewOnly) {\r\n  <lib-multiple-input-table-edit\r\n    [editorMode]=\"editorMode()\"\r\n    (editMultipleInput)=\"editInput($event)\"\r\n    (deleteInput)=\"deleteItemInput($event)\"\r\n    (addFunction)=\"addFunction($event)\"\r\n    (showItemAsLabel)=\"showItemAsLabel($event)\"\r\n    (onSaveMultipleInputForm)=\"saveMultipleInputForm()\"\r\n    (reorderItems)=\"reorderItems($event)\"\r\n    [formBuilderFunctions]=\"formBuilderFunctions()\"\r\n    [formGroup]=\"parentFormGroup\"\r\n    [inputConfig]=\"inputConfig()\"\r\n  ></lib-multiple-input-table-edit>\r\n}\r\n\r\n@if (!inputConfig().readonly && !inputConfig().disabled && !inputConfig().formIsOpen && canAddRecords) {\r\n  <section class=\"add-row-bar\">\r\n    <button class=\"add-row-button\" (click)=\"generateMultipleInputForm()\" mat-stroked-button>\r\n      <mat-icon class=\"add-row-icon\">{{ handleIcon() }}</mat-icon>\r\n      <span class=\"add-row-label\">{{ handleLabel }}</span>\r\n    </button>\r\n  </section>\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport type { FormBuilderFunctions, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { MultipleInputTableComponent } from './core/multiple-input-table/multiple-input-table.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n/** Wraps a multi-row input table inside a `mat-form-field`. */\r\n@Component({\r\n  selector: 'lib-multiple-input-input-element',\r\n  templateUrl: './multiple-input-input-element.component.html',\r\n  styleUrl: './multiple-input-input-element.component.css',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    MatFormFieldModule,\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    MatTooltipModule,\r\n    TFormInputStatusComponent,\r\n    MultipleInputTableComponent,\r\n  ],\r\n})\r\nexport class MultipleInputInputElementComponent {\r\n  readonly inputConfig = input.required<ITowerStepColumn>();\r\n  readonly formGroup = input.required<FormGroup>();\r\n  readonly editorMode = input<boolean>(false);\r\n  readonly formBuilderFunctions = input<FormBuilderFunctions | undefined>(undefined);\r\n  readonly reload = output<void>();\r\n\r\n  protected readonly errorMessage = computed(() =>\r\n    getInputErrorMessage(this.inputConfig(), this.formGroup()),\r\n  );\r\n}\r\n","<form [formGroup]=\"formGroup()\">\r\n  @if (inputConfig(); as inputConfig) {\r\n    <mat-form-field\r\n      class=\"multiple-input-field\"\r\n      [appearance]=\"inputConfig.appearance || 'fill'\"\r\n      subscriptSizing=\"dynamic\"\r\n      floatLabel=\"always\"\r\n    >\r\n      <mat-label>\r\n        {{ inputConfig.label }}\r\n        <lib-t-form-input-status [inputConfig]=\"inputConfig\"></lib-t-form-input-status>\r\n      </mat-label>\r\n\r\n      @if (inputConfig.id) {\r\n        <lib-multiple-input-table\r\n          [editorMode]=\"editorMode()\"\r\n          [required]=\"inputConfig.required\"\r\n          [formGroup]=\"formGroup()\"\r\n          [formBuilderFunctions]=\"formBuilderFunctions()\"\r\n          [formControlName]=\"inputConfig.id\"\r\n          [inputConfig]=\"inputConfig\"\r\n        ></lib-multiple-input-table>\r\n      }\r\n\r\n      @if (inputConfig.hintLabel || inputConfig.temporaryHint) {\r\n        <mat-hint class=\"inputHint\">\r\n          {{ inputConfig.temporaryHint || inputConfig.hintLabel }}\r\n        </mat-hint>\r\n      }\r\n\r\n      @if (!!errorMessage()) {\r\n        <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{ errorMessage() }}</mat-error>\r\n      }\r\n\r\n      @if (inputConfig.canReload?.canReload) {\r\n        <button\r\n          mat-icon-button\r\n          matTooltip=\"Click to refresh this field.\"\r\n          class=\"input-sync-button\"\r\n          (click)=\"inputConfig.canReload.emit()\"\r\n          matSuffix\r\n        >\r\n          <mat-icon>sync</mat-icon>\r\n        </button>\r\n      }\r\n\r\n      @if (inputConfig.prefixIcon) {\r\n        <mat-icon matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n      }\r\n\r\n      @if (inputConfig.suffixIcon && inputConfig.id !== 'password') {\r\n        <mat-icon matSuffix>{{ inputConfig.suffixIcon }}</mat-icon>\r\n      }\r\n\r\n      @if (inputConfig.prefixText) {\r\n        <span class=\"affix-text\" matPrefix>{{ inputConfig.prefixText }}</span>\r\n      }\r\n      @if (inputConfig.suffixText) {\r\n        <span class=\"affix-text affix-text--suffix\" matSuffix>{{ inputConfig.suffixText }}</span>\r\n      }\r\n\r\n      @if (inputConfig.maxLength && formGroup()) {\r\n        <mat-hint align=\"end\">\r\n          {{ (formGroup().controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength }}\r\n        </mat-hint>\r\n      }\r\n    </mat-form-field>\r\n  }\r\n</form>\r\n"],"names":["i2","i4","i5","i1","i6","i3","i7","i8","i9","uuidv4"],"mappings":"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"}