{"version":3,"file":"ngx-t-forms-required-inputs.component-CK7NIhbq.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/required-inputs/required-inputs.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/required-inputs/required-inputs.component.html"],"sourcesContent":["import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ViewEncapsulation,\r\n  computed,\r\n  input,\r\n  linkedSignal,\r\n  output,\r\n  signal,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n  ElementTypes,\r\n  FormColumnInputs,\r\n  InputDataTypes,\r\n  MinInputMapInput,\r\n  MinInputTypes,\r\n  MinimumInputRequiredInterface,\r\n} from 'ngx-t-forms-types';\r\nimport { getInputIcon } from '../../../../shared/functions/getInputIcon';\r\nimport type { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\r\n\r\n/** A required input decorated with the derived view-model fields the chip row renders. */\r\ninterface RequiredInputChip {\r\n  readonly name: string;\r\n  readonly linked: boolean;\r\n  readonly active: boolean;\r\n}\r\n\r\n/** A mappable form input decorated with the derived view-model fields the list renders. */\r\ninterface MapTarget {\r\n  readonly id: string;\r\n  readonly label: string;\r\n  readonly icon: string;\r\n  readonly formControlName: string;\r\n  readonly dataType: string;\r\n  readonly selected: boolean;\r\n  readonly mappable: boolean;\r\n  readonly ariaLabel: string;\r\n}\r\n\r\n/**\r\n * Internal editor element for configuring a form's required (minimum) inputs.\r\n * Child of `t-dynamic-data-edit`, which supplies the field label, hint, and\r\n * validation errors — so this component owns only the chip row + edit content.\r\n *\r\n * Each required input can be handled three ways: a literal default value, a\r\n * single-input map (`MapTo`), or a multi-input filter (`MapDocFilter`).\r\n * Re-selecting the active handling method, chip, or a mapped input toggles it\r\n * off again.\r\n */\r\n@Component({\r\n  selector: 'lib-required-inputs',\r\n  imports: [\r\n    FormsModule,\r\n    MatButtonModule,\r\n    MatFormFieldModule,\r\n    MatIconModule,\r\n    MatInputModule,\r\n    MatListModule,\r\n    MatRippleModule,\r\n    MatSelectModule,\r\n    EmptyStateComponent,\r\n  ],\r\n  templateUrl: './required-inputs.component.html',\r\n  styleUrl: './required-inputs.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.Emulated,\r\n  host: {\r\n    'class': 'lib-required-inputs',\r\n    '[attr.id]': 'id()',\r\n  },\r\n})\r\nexport class RequiredInputsComponent {\r\n  /** Handling-method enum, exposed to the template. */\r\n  protected readonly minInputTypes = MinInputTypes;\r\n\r\n  /**\r\n   * Required-input descriptors to render. Heterogeneous wrapper binding — the\r\n   * parent feeds whatever the editor config holds; narrowing here would force\r\n   * wrapper changes.\r\n   */\r\n  readonly value = input<readonly MinimumInputRequiredInterface[]>([]);\r\n\r\n  /** All available form inputs the user can map a required input to. */\r\n  readonly formInputs = input<readonly FormColumnInputs[]>([]);\r\n\r\n  /** Disable user interaction. */\r\n  readonly disabled = input<boolean>(false);\r\n\r\n  /**\r\n   * Validation errors passed down by the parent editor. Retained on the contract\r\n   * but not rendered here — `t-dynamic-data-edit` owns error display.\r\n   */\r\n  readonly errors = input<IConfigElementError[] | undefined>([]);\r\n\r\n  /** Optional id attribute supplied by the parent editor (used to disambiguate). */\r\n  readonly id = input<string | undefined>(undefined);\r\n\r\n  /** Emits the mutated required-input list whenever the user changes a mapping. */\r\n  readonly valueChanged = output<MinimumInputRequiredInterface[]>();\r\n\r\n  /**\r\n   * Local, immutable working copy of `value`. Tracks the bound value (the parent\r\n   * re-feeds it after each emit) but stays locally overridable; mutations always\r\n   * produce a new array, and entries are cloned so the parent's array is never\r\n   * mutated in place.\r\n   */\r\n  readonly #workingValue = linkedSignal<readonly MinimumInputRequiredInterface[]>(() =>\r\n    this.value().map((item) => ({ ...item })),\r\n  );\r\n\r\n  /** Name of the required input currently open in the edit panel; `''` when none. */\r\n  protected readonly activeInput = signal<string>('');\r\n\r\n  /** The chip row: one entry per required input, with derived link/active state. */\r\n  protected readonly chips = computed<readonly RequiredInputChip[]>(() => {\r\n    const active = this.activeInput();\r\n    return this.#workingValue().map((item) => ({\r\n      name: item.name,\r\n      linked: this.#isLinked(item),\r\n      active: item.name === active,\r\n    }));\r\n  });\r\n\r\n  /** The required input currently being edited, or `undefined` when none is active. */\r\n  protected readonly inEdit = computed<MinimumInputRequiredInterface | undefined>(() => {\r\n    const active = this.activeInput();\r\n    if (!active) {\r\n      return undefined;\r\n    }\r\n    return this.#workingValue().find((item) => item.name === active);\r\n  });\r\n\r\n  /** Handling method of the input in edit; `null` keeps the `mat-select` empty. */\r\n  protected readonly activeType = computed<MinInputTypes | null>(() => {\r\n    const type = this.inEdit()?.type;\r\n    return type === MinInputTypes.Default ||\r\n      type === MinInputTypes.MapTo ||\r\n      type === MinInputTypes.MapDocFilter\r\n      ? type\r\n      : null;\r\n  });\r\n\r\n  /** Whether the edit panel should show the mappable-input list. */\r\n  protected readonly showMapList = computed<boolean>(() => {\r\n    const type = this.activeType();\r\n    return type === MinInputTypes.MapTo || type === MinInputTypes.MapDocFilter;\r\n  });\r\n\r\n  /**\r\n   * The list of mappable form inputs for the input in edit. Single-select\r\n   * (`MapTo`) collapses to the chosen input once one is picked; multi-select\r\n   * (`MapDocFilter`) always shows the full list with each chosen input flagged.\r\n   */\r\n  protected readonly mapTargets = computed<readonly MapTarget[]>(() => {\r\n    const edit = this.inEdit();\r\n    if (!edit) {\r\n      return [];\r\n    }\r\n    const all = this.formInputs().map((item) => this.#toTarget(item, edit));\r\n    if (edit.type === MinInputTypes.MapTo) {\r\n      const selected = all.find((target) => target.selected);\r\n      return selected ? [selected] : all;\r\n    }\r\n    return all;\r\n  });\r\n\r\n  /** Toggle the edit panel for a required input. Re-selecting the active one closes it. */\r\n  protected toggleActive(name: string): void {\r\n    if (this.disabled()) {\r\n      return;\r\n    }\r\n    this.activeInput.update((current) => (current === name ? '' : name));\r\n  }\r\n\r\n  /** Close the edit panel without changing anything. */\r\n  protected close(): void {\r\n    this.activeInput.set('');\r\n  }\r\n\r\n  /** Choose (or, when re-selected, clear) the handling method for the input in edit. */\r\n  protected selectType(type: MinInputTypes): void {\r\n    this.#patchActive((current) => {\r\n      if (current.type === type) {\r\n        return { ...current, type: undefined, mapTo: undefined, defaultValue: undefined };\r\n      }\r\n      return {\r\n        ...current,\r\n        type,\r\n        mapTo: type === MinInputTypes.MapDocFilter ? [] : undefined,\r\n        defaultValue: type === MinInputTypes.Default ? current.defaultValue : undefined,\r\n      };\r\n    });\r\n  }\r\n\r\n  /** Update the literal default value of the input in edit. */\r\n  protected setDefaultValue(value: string): void {\r\n    this.#patchActive((current) => ({ ...current, defaultValue: value }));\r\n  }\r\n\r\n  /**\r\n   * Map (or, when re-selected, unmap) a form input to the input in edit. `MapTo`\r\n   * holds a single mapping; `MapDocFilter` accumulates a list.\r\n   */\r\n  protected toggleMap(target: MapTarget): void {\r\n    if (this.disabled() || !target.mappable) {\r\n      return;\r\n    }\r\n    const mapping = this.#toMapping(target);\r\n    this.#patchActive((current) => {\r\n      if (current.type === MinInputTypes.MapTo) {\r\n        const existing = this.#asSingle(current.mapTo);\r\n        const sameSelected = existing?.formControlName === mapping.formControlName;\r\n        return { ...current, mapTo: sameSelected ? undefined : mapping };\r\n      }\r\n      if (current.type === MinInputTypes.MapDocFilter) {\r\n        const list = this.#asList(current.mapTo);\r\n        const has = list.some((m) => m.formControlName === mapping.formControlName);\r\n        return {\r\n          ...current,\r\n          mapTo: has\r\n            ? list.filter((m) => m.formControlName !== mapping.formControlName)\r\n            : [...list, mapping],\r\n        };\r\n      }\r\n      return current;\r\n    });\r\n  }\r\n\r\n  /** Replace the active entry via `patch` and emit the new list. */\r\n  #patchActive(\r\n    patch: (current: MinimumInputRequiredInterface) => MinimumInputRequiredInterface,\r\n  ): void {\r\n    const active = this.activeInput();\r\n    let changed = false;\r\n    const next = this.#workingValue().map((item) => {\r\n      if (item.name !== active) {\r\n        return item;\r\n      }\r\n      changed = true;\r\n      return patch(item);\r\n    });\r\n    if (!changed) {\r\n      return;\r\n    }\r\n    this.#workingValue.set(next);\r\n    this.valueChanged.emit([...next]);\r\n  }\r\n\r\n  #isLinked(item: MinimumInputRequiredInterface): boolean {\r\n    if (item.type === MinInputTypes.Default) {\r\n      return !!item.defaultValue;\r\n    }\r\n    if (item.type === MinInputTypes.MapTo) {\r\n      return !!this.#asSingle(item.mapTo);\r\n    }\r\n    if (item.type === MinInputTypes.MapDocFilter) {\r\n      return this.#asList(item.mapTo).length > 0;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  #toTarget(item: FormColumnInputs, edit: MinimumInputRequiredInterface): MapTarget {\r\n    const mappable = item.element !== ElementTypes.SectionTitle;\r\n    const selected = this.#isMapped(edit, item.formControlName);\r\n    return {\r\n      id: item.id,\r\n      label: item.label,\r\n      icon: getInputIcon(item.element),\r\n      formControlName: item.formControlName,\r\n      dataType: item.dataType ?? '',\r\n      selected,\r\n      mappable,\r\n      ariaLabel: `${item.label}.${mappable ? '' : ' Not mappable.'}`,\r\n    };\r\n  }\r\n\r\n  #isMapped(edit: MinimumInputRequiredInterface, formControlName: string): boolean {\r\n    if (edit.type === MinInputTypes.MapTo) {\r\n      return this.#asSingle(edit.mapTo)?.formControlName === formControlName;\r\n    }\r\n    if (edit.type === MinInputTypes.MapDocFilter) {\r\n      return this.#asList(edit.mapTo).some((m) => m.formControlName === formControlName);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  #toMapping(target: MapTarget): MinInputMapInput {\r\n    const source = this.formInputs().find((item) => item.id === target.id);\r\n    return {\r\n      formControlName: target.formControlName,\r\n      dataType: source?.dataType ?? InputDataTypes.String,\r\n      element: source?.element ?? ElementTypes.Input,\r\n      inputId: target.id,\r\n    };\r\n  }\r\n\r\n  #asSingle(\r\n    mapTo: MinInputMapInput | readonly MinInputMapInput[] | undefined,\r\n  ): MinInputMapInput | undefined {\r\n    if (!mapTo || Array.isArray(mapTo)) {\r\n      return undefined;\r\n    }\r\n    // `Array.isArray` does not narrow a `readonly[]` out of the union, so assert\r\n    // the remaining single-mapping shape after the guard.\r\n    return mapTo as MinInputMapInput;\r\n  }\r\n\r\n  #asList(\r\n    mapTo: MinInputMapInput | readonly MinInputMapInput[] | undefined,\r\n  ): readonly MinInputMapInput[] {\r\n    return Array.isArray(mapTo) ? mapTo : [];\r\n  }\r\n}\r\n","@if (chips().length) {\r\n<div class=\"lib-required-inputs__chips\" role=\"list\" aria-label=\"Required inputs\">\r\n  @for (chip of chips(); track chip.name) {\r\n  <button\r\n    type=\"button\"\r\n    role=\"listitem\"\r\n    class=\"lib-required-inputs__chip\"\r\n    [class.lib-required-inputs__chip--linked]=\"chip.linked\"\r\n    [class.lib-required-inputs__chip--active]=\"chip.active\"\r\n    [disabled]=\"disabled()\"\r\n    [attr.aria-pressed]=\"chip.active\"\r\n    [attr.aria-label]=\"chip.name + (chip.linked ? ', linked' : ', not linked')\"\r\n    (click)=\"toggleActive(chip.name)\">\r\n    <span class=\"lib-required-inputs__chip-label\">{{ chip.name }}</span>\r\n    <mat-icon class=\"lib-required-inputs__chip-icon\" aria-hidden=\"true\">\r\n      {{ chip.linked ? 'link' : 'link_off' }}\r\n    </mat-icon>\r\n  </button>\r\n  }\r\n</div>\r\n} @else {\r\n<lib-empty-state icon=\"link_off\" message=\"No required inputs to configure.\" />\r\n}\r\n\r\n@if (inEdit(); as edit) {\r\n<div class=\"lib-required-inputs__panel\">\r\n  <mat-form-field\r\n    class=\"lib-required-inputs__field\"\r\n    appearance=\"outline\"\r\n    subscriptSizing=\"dynamic\">\r\n    <mat-label>Input handling method</mat-label>\r\n    <mat-select\r\n      [value]=\"activeType()\"\r\n      [disabled]=\"disabled()\"\r\n      (selectionChange)=\"selectType($event.value)\">\r\n      <mat-option [value]=\"minInputTypes.Default\">Default value</mat-option>\r\n      <mat-option [value]=\"minInputTypes.MapTo\">Map to a form input</mat-option>\r\n      <mat-option [value]=\"minInputTypes.MapDocFilter\">Filter by an input value</mat-option>\r\n    </mat-select>\r\n    <mat-hint>Choose how this required input is resolved</mat-hint>\r\n  </mat-form-field>\r\n\r\n  @if (activeType() === minInputTypes.Default) {\r\n  <mat-form-field\r\n    class=\"lib-required-inputs__field\"\r\n    appearance=\"outline\"\r\n    subscriptSizing=\"dynamic\">\r\n    <mat-label>Default value</mat-label>\r\n    <input\r\n      matInput\r\n      [ngModel]=\"edit.defaultValue\"\r\n      [disabled]=\"disabled()\"\r\n      (ngModelChange)=\"setDefaultValue($event)\"\r\n      placeholder=\"Enter a default value\" />\r\n    <mat-hint>Used when no value is supplied at runtime</mat-hint>\r\n  </mat-form-field>\r\n  }\r\n\r\n  @if (showMapList()) {\r\n  <p class=\"lib-required-inputs__list-label\">\r\n    Link <strong>{{ activeInput() }}</strong> to a form input\r\n  </p>\r\n\r\n  @if (mapTargets().length) {\r\n  <mat-nav-list class=\"lib-required-inputs__list\">\r\n    {{mapTargets().length}}\r\n    @for (target of mapTargets(); track target.id) {\r\n    <mat-list-item\r\n      class=\"lib-required-inputs__item\"\r\n      matRipple\r\n      role=\"button\"\r\n      [disabled]=\"disabled() || !target.mappable\"\r\n      [activated]=\"target.selected\"\r\n      [attr.aria-pressed]=\"target.selected\"\r\n      [attr.aria-label]=\"target.ariaLabel\"\r\n      (click)=\"toggleMap(target); $event.stopPropagation()\">\r\n      <mat-icon\r\n        matListItemAvatar\r\n        class=\"lib-required-inputs__avatar\"\r\n        aria-hidden=\"true\">\r\n        {{ target.icon }}\r\n      </mat-icon>\r\n      <span matListItemTitle class=\"lib-required-inputs__item-title\">{{ target.label }}</span>\r\n      <span matListItemLine class=\"lib-required-inputs__item-meta\">\r\n        <span>{{ target.formControlName }}</span>\r\n        @if (target.dataType) {\r\n        <span>{{ target.dataType }}</span>\r\n        }\r\n      </span>\r\n      <mat-icon\r\n        matListItemMeta\r\n        class=\"lib-required-inputs__indicator\"\r\n        [class.lib-required-inputs__indicator--on]=\"target.selected\"\r\n        aria-hidden=\"true\">\r\n        {{ target.selected ? 'check_circle' : 'radio_button_unchecked' }}\r\n      </mat-icon>\r\n    </mat-list-item>\r\n    }\r\n  </mat-nav-list>\r\n  } @else {\r\n  <lib-empty-state icon=\"add_link\" message=\"Add form inputs before mapping this input.\" />\r\n  }\r\n  }\r\n\r\n  <div class=\"lib-required-inputs__actions\">\r\n    <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">Done</button>\r\n  </div>\r\n</div>\r\n}\r\n"],"names":["i3","i4"],"mappings":"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"}