{"version":3,"file":"ngx-t-forms-input-editor.component-oIzCTmbx.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/default-element/default-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/default-element/default-element.component.html","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-element-editor/input-element-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-element-editor/input-element-editor.component.html","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-editor/input-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-editor/input-editor.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, DestroyRef, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\nimport { DefaultInputConfig, ElementTypes } from 'ngx-t-forms-types';\r\nimport { take } from 'rxjs';\r\nimport { getInputIcon } from '../../../../shared/functions/getInputIcon';\r\n\r\n@Component({\r\n  selector: 'lib-default-element',\r\n  imports: [MatListModule, MatIconModule, MatDividerModule],\r\n  templateUrl: './default-element.component.html',\r\n  styleUrl: './default-element.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DefaultElementComponent {\r\n  protected readonly inputs = DefaultInputConfig;\r\n  readonly #store = inject(FormsStoreService);\r\n  readonly #destroyRef = inject(DestroyRef);\r\n\r\n  protected getDefaultInputs(): ElementTypes[] {\r\n    const i = JSON.parse(JSON.stringify(DefaultInputConfig)) as Record<string, unknown>;\r\n    return Object.keys(i) as ElementTypes[];\r\n  }\r\n\r\n  protected getInputIcon(element: ElementTypes): string {\r\n    return getInputIcon(element);\r\n  }\r\n\r\n  protected selectInputTemplate(input: ElementTypes): void {\r\n    this.#store.selectors.selectInputInEditId$\r\n      .pipe(take(1), takeUntilDestroyed(this.#destroyRef))\r\n      .subscribe((id) => {\r\n        if (!id) return;\r\n        this.#store.actionsFormBuilder.selectInputTemplate(id, input);\r\n      });\r\n  }\r\n}\r\n","<br>\r\n<mat-nav-list style=\"margin: 5px;\">\r\n\r\n\r\n  @defer () {\r\n    @for (input of getDefaultInputs(); track input) {\r\n      @if (inputs[input]?.disabled === false) {\r\n      <mat-list-item style=\"background: var(--mdc-elevated-card-container-color, var(--mat-app-surface-container-low));\"\r\n        (click)=\"selectInputTemplate(input)\">\r\n        <mat-icon matListItemAvatar>{{ getInputIcon(input) }}</mat-icon>\r\n        <span matListItemTitle href=\"...\">{{ inputs[input]?.label}}</span>\r\n      </mat-list-item>\r\n      <mat-divider></mat-divider>\r\n      }\r\n      }\r\n    \r\n  }\r\n\r\n\r\n</mat-nav-list>","// TODO(unify): see ngx-t-forms/docs/migration/element-editor-unification.md\r\nimport { ChangeDetectionStrategy, Component, DOCUMENT, PLATFORM_ID, computed, inject } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\n\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\n\r\nimport { TDynamicDataEditComponent, TDynamicDataViewComponent } from '../../..';\r\n\r\nimport type { ElementEditorInnerSectionElementInterface, ElementTypes, FormColumnInputs, ScoaInnerInput } from 'ngx-t-forms-types';\r\nimport { getInputIcon } from '../../../../shared/functions/getInputIcon';\r\n\r\n@Component({\r\n  selector: 'lib-input-element-editor',\r\n  imports: [\r\n    MatExpansionModule,\r\n    MatIconModule,\r\n    MatListModule,\r\n    MatTooltipModule,\r\n    MatProgressSpinnerModule,\r\n    MatButtonModule,\r\n    MatCardModule,\r\n    MatFormFieldModule,\r\n    TDynamicDataEditComponent,\r\n    TDynamicDataViewComponent,\r\n  ],\r\n  templateUrl: './input-element-editor.component.html',\r\n  styleUrl: './input-element-editor.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class InputElementEditorComponent {\r\n  readonly #store = inject(FormsStoreService);\r\n  readonly #platformId = inject(PLATFORM_ID);\r\n  readonly #document = inject(DOCUMENT);\r\n\r\n  readonly #signals = this.#store.formBuilderSignalSelectors;\r\n\r\n  protected readonly vm = computed(() => ({\r\n    defaultInputInEdit: this.#signals.defaultInputInEdit(),\r\n    inputInEdit: this.#signals.inputInEdit(),\r\n    inputElementEditorConfigs: this.#signals.inputElementEditorConfigs(),\r\n    inputInEditValidationErrors: this.#signals.inputInEditValidationErrors(),\r\n    formInputs: this.#signals.getAllFormInputs(),\r\n  }));\r\n\r\n  protected readonly elementConfigurationChanged = (\r\n    value: unknown,\r\n    ele: ElementEditorInnerSectionElementInterface,\r\n  ): void => {\r\n    const inputVal = this.#signals.inputInEdit();\r\n    if (!inputVal) return;\r\n    this.#store.actionsFormBuilder.elementConfigurationChanged(inputVal.id, value, ele);\r\n  };\r\n\r\n  protected readonly clearInputInEdit = (): void => {\r\n    const inputVal = this.#signals.inputInEdit();\r\n    if (!inputVal) return;\r\n    this.#store.actionsFormBuilder.clearInputInEdit(inputVal.id);\r\n  };\r\n\r\n  protected readonly elementBlur = (\r\n    event: unknown,\r\n    element: ElementEditorInnerSectionElementInterface,\r\n  ): void => {\r\n    const inputVal = this.#signals.inputInEdit();\r\n    if (!inputVal) return;\r\n    this.#store.actionsFormBuilder.elementBlur(inputVal.id, event, element);\r\n  };\r\n\r\n  /** Creates or updates an account-level custom input from the segment-config quick editor. */\r\n  protected readonly saveMscoaCustomInput = (\r\n    sectionId: string,\r\n    scoaInputId: string,\r\n    config: Pick<ScoaInnerInput, 'element' | 'label' | 'formControlName' | 'singleSelect' | 'readonly'> & { id?: string },\r\n  ): void => {\r\n    this.#store.actionsFormBuilder.saveScoaCustomInput(sectionId, scoaInputId, config);\r\n  };\r\n\r\n  /** Opens an MSCOA custom input in this editor for advanced configuration. */\r\n  protected readonly editMscoaInput = (input: FormColumnInputs): void => {\r\n    this.#store.actionsFormBuilder.editInput(input);\r\n  };\r\n\r\n  /** Removes an MSCOA custom input from the config. */\r\n  protected readonly deleteMscoaInput = (input: FormColumnInputs): void => {\r\n    this.#store.actionsFormBuilder.formDeleteInput(input);\r\n  };\r\n\r\n  protected getInputIcon(element: ElementTypes | undefined | null): string {\r\n    return getInputIcon(element);\r\n  }\r\n\r\n  protected showDebugData(): void {\r\n    if (!isPlatformBrowser(this.#platformId)) return;\r\n    const win = this.#document.defaultView;\r\n    if (!win) return;\r\n    const jsonData = JSON.stringify(this.vm(), null, 2);\r\n    const blob = new Blob([jsonData], { type: 'application/json' });\r\n    const url = win.URL.createObjectURL(blob);\r\n    const link = this.#document.createElement('a');\r\n    link.href = url;\r\n    link.download = 'debug-data.json';\r\n    link.click();\r\n    win.URL.revokeObjectURL(url);\r\n  }\r\n}\r\n","@if (vm(); as vm) {\r\n<div class=\"ee-section-bar\">\r\n    <span class=\"ee-section-eyebrow\">Element configuration</span>\r\n    <span class=\"spacer\"></span>\r\n    @if ((vm.inputElementEditorConfigs.editorSections || []).length) {\r\n    <span class=\"ee-section-count\">{{ (vm.inputElementEditorConfigs.editorSections || []).length }} sections</span>\r\n    }\r\n</div>\r\n\r\n@defer (on viewport) {\r\n<mat-accordion class=\"ee-accordion\" togglePosition=\"before\" multi>\r\n    @for(section of (vm.inputElementEditorConfigs.editorSections || []); track section.id; let i = $index) {\r\n    <mat-expansion-panel class=\"ee-panel mat-elevation-z0\">\r\n        <mat-expansion-panel-header class=\"ee-panel-header\" collapsedHeight=\"48px\" expandedHeight=\"48px\">\r\n            <mat-panel-title class=\"ee-panel-title\">\r\n                <span class=\"ee-panel-label\">{{ section.label }}</span>\r\n                <span class=\"spacer\"></span>\r\n                @if (section.hasErrors) {\r\n                <mat-icon class=\"ee-panel-error\" color=\"warn\">error</mat-icon>\r\n                }\r\n                @if (section.showItemValue && !!(vm.inputInEdit)) {\r\n                <span class=\"ee-item-value\">{{ vm.inputInEdit[section.showItemValue] }}</span>\r\n                }\r\n            </mat-panel-title>\r\n        </mat-expansion-panel-header>\r\n\r\n        <div class=\"ee-panel-body\">\r\n            <!-- Input-type switcher (first section only) -->\r\n            @if(i === 0) {\r\n            <mat-nav-list class=\"ee-input-switcher\">\r\n                <mat-list-item [disabled]=\"vm.inputInEdit?.systemDefault\" matTooltip=\"Change input element\"\r\n                    (click)=\"vm.inputInEdit?.systemDefault ? '' : clearInputInEdit()\">\r\n                    <mat-icon matListItemAvatar [attr.aria-label]=\"(vm.defaultInputInEdit)?.label\">\r\n                        {{ getInputIcon(vm.inputInEdit?.element) }}\r\n                    </mat-icon>\r\n                    <span matListItemTitle>{{ (vm.defaultInputInEdit)?.label }}</span>\r\n                    <span matListItemMeta>\r\n                        <mat-icon>arrow_forward_ios</mat-icon>\r\n                    </span>\r\n                </mat-list-item>\r\n            </mat-nav-list>\r\n            }\r\n\r\n            <!-- Section elements -->\r\n            @for(element of section.elements; track element.id) {\r\n            <div class=\"ee-element\">\r\n                @defer (on viewport) {\r\n                <lib-t-dynamic-data-edit [editorConfig]=\"element\" [data]=\"(vm.inputInEdit)\"\r\n                    [validationErrors]=\"element.computedErrors ?? null\" [mscoaSaveCustomInput]=\"saveMscoaCustomInput\"\r\n                    [mscoaEditInput]=\"editMscoaInput\" [mscoaDeleteInput]=\"deleteMscoaInput\"\r\n                    (valueChange)=\"elementConfigurationChanged($event, element)\" [formInputs]=\"(vm.formInputs) || []\"\r\n                    (blur)=\"elementBlur($event, element)\">\r\n                </lib-t-dynamic-data-edit>\r\n                } @placeholder {\r\n                <div class=\"ee-element-loading\">\r\n                    <mat-spinner diameter=\"18\"></mat-spinner>\r\n                </div>\r\n                }\r\n            </div>\r\n            }\r\n        </div>\r\n    </mat-expansion-panel>\r\n    }\r\n</mat-accordion>\r\n} @placeholder {\r\n<div class=\"ee-loading\">\r\n    <mat-spinner diameter=\"44\" />\r\n</div>\r\n} @error {\r\n<div class=\"ee-error\">\r\n    <mat-icon class=\"ee-error-icon\" aria-hidden=\"false\">error_outline</mat-icon>\r\n    <h3 class=\"ee-error-title\">Error loading element editor</h3>\r\n    <p class=\"ee-error-text\">An error occurred while loading the element editor. Please try again later.</p>\r\n</div>\r\n}\r\n\r\n<!-- Diagnostic section -->\r\n<div class=\"ee-section-bar ee-section-bar--diagnostic\">\r\n    <span class=\"ee-section-eyebrow\">Diagnostic data</span>\r\n    <span class=\"spacer\"></span>\r\n</div>\r\n\r\n<mat-accordion class=\"ee-accordion\" togglePosition=\"before\" multi>\r\n    @if(((vm.inputInEditValidationErrors) || []).length > 0) {\r\n    <mat-expansion-panel class=\"ee-panel mat-elevation-z0\">\r\n        <mat-expansion-panel-header class=\"ee-panel-header\" collapsedHeight=\"48px\" expandedHeight=\"48px\">\r\n            <mat-panel-title class=\"ee-panel-title\">\r\n                <span class=\"ee-panel-label\">Validation Errors</span>\r\n                <span class=\"spacer\"></span>\r\n                <span class=\"ee-item-value ee-item-value--error\">{{ (vm.inputInEditValidationErrors).length }}</span>\r\n            </mat-panel-title>\r\n        </mat-expansion-panel-header>\r\n        <div class=\"ee-panel-body\">\r\n            <div class=\"ee-error-summary\">\r\n                <h3 class=\"ee-error-summary-title\">All configuration errors</h3>\r\n                <p class=\"ee-error-summary-text\">\r\n                    {{ (vm.inputInEditValidationErrors).length }} errors found. When an error is found, the input will\r\n                    not be saved.\r\n                </p>\r\n                <ul class=\"ee-error-list\">\r\n                    @for(error of (vm.inputInEditValidationErrors); track $index) {\r\n                    <li><strong>{{ error.key }}</strong> {{ error.message }}</li>\r\n                    }\r\n                </ul>\r\n            </div>\r\n        </div>\r\n    </mat-expansion-panel>\r\n    }\r\n    <mat-expansion-panel class=\"ee-panel mat-elevation-z0\">\r\n        <mat-expansion-panel-header class=\"ee-panel-header\" collapsedHeight=\"48px\" expandedHeight=\"48px\">\r\n            <mat-panel-title class=\"ee-panel-title\">\r\n                <span class=\"ee-panel-label\">Complete Virtual Model</span>\r\n                <span class=\"spacer\"></span>\r\n                <button mat-icon-button class=\"ee-diagnostic-btn\" matTooltip=\"Download debug data\"\r\n                    (click)=\"showDebugData(); $event.stopPropagation()\">\r\n                    <mat-icon>troubleshoot</mat-icon>\r\n                </button>\r\n            </mat-panel-title>\r\n        </mat-expansion-panel-header>\r\n        <div class=\"ee-panel-body\">\r\n            <lib-t-dynamic-data-view [data]=\"({\r\n                'Default Input Template InEdit': vm.defaultInputInEdit,\r\n                'Input In Edit': vm.inputInEdit,\r\n                'Input Editor Sections': vm.inputElementEditorConfigs?.editorSections\r\n            })\"></lib-t-dynamic-data-view>\r\n        </div>\r\n    </mat-expansion-panel>\r\n</mat-accordion>\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\nimport { DefaultElementComponent } from '../default-element/default-element.component';\r\nimport { InputElementEditorComponent } from '../input-element-editor/input-element-editor.component';\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\n\r\nimport { Observable, take, tap } from 'rxjs';\r\nimport { DefaultInputConfig } from 'ngx-t-forms-types';\r\n\r\n@Component({\r\n  selector: 'lib-input-editor',\r\n  imports: [\r\n    AsyncPipe,\r\n    MatCardModule,\r\n    MatButtonModule,\r\n    MatIconModule,\r\n    MatDividerModule,\r\n    MatToolbarModule,\r\n    DragDropModule,\r\n    DefaultElementComponent,\r\n    InputElementEditorComponent,\r\n  ],\r\n  templateUrl: './input-editor.component.html',\r\n  styleUrl: './input-editor.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class InputEditorComponent {\r\n  readonly #store = inject(FormsStoreService);\r\n\r\n  protected readonly defaultInputs = DefaultInputConfig;\r\n  protected readonly inputInEdit$ = this.#store.formBuilderSelectors.inputInEdit$;\r\n  protected readonly defaultInputInEdit$ = this.#store.formBuilderSelectors.defaultInputInEdit$;\r\n\r\n  protected readonly saveInput = (): void => {\r\n    this.inputInEdit$\r\n      .pipe(\r\n        take(1),\r\n        tap((inputVal) => {\r\n          if (!inputVal) return;\r\n          this.#store.actionsFormBuilder.saveInput(inputVal.id);\r\n        }),\r\n      )\r\n      .subscribe();\r\n  };\r\n\r\n  protected readonly closeEditor = (): void => {\r\n    this.#store.actions.setInputInEditId({ inputInEdit: null });\r\n  };\r\n\r\n  protected get validationErrors$(): Observable<{ key: string; message: string }[] | null> {\r\n    return this.#store.formBuilderSelectors.inputInEditValidationErrors$;\r\n  }\r\n}\r\n","<mat-card class=\"element-editor\" appearance=\"outlined\">\r\n    <header class=\"ee-header\">\r\n        <div class=\"ee-header-icon\" aria-hidden=\"true\">\r\n            <mat-icon>tune</mat-icon>\r\n        </div>\r\n        <div class=\"ee-header-text\">\r\n            <h2 class=\"ee-title\">\r\n                {{\r\n                !!(inputInEdit$|async)?.element\r\n                ? \"Edit \" + (inputInEdit$|async)?.label + \" element\"\r\n                : \"Setup Form Element\"\r\n                }}\r\n            </h2>\r\n            <p class=\"ee-subtitle\">\r\n                {{\r\n                !!(inputInEdit$|async)?.element\r\n                ? \"Configure the element below\"\r\n                : \"Form elements are the components making up a form section. Their type is defined by behaviour and use case — for example, a date range picker is well suited to determining duration.\"\r\n                }}\r\n            </p>\r\n        </div>\r\n        <button mat-icon-button cdkDragHandle class=\"ee-drag\" aria-label=\"Drag to reposition\">\r\n            <mat-icon>drag_indicator</mat-icon>\r\n        </button>\r\n    </header>\r\n\r\n    <div class=\"ee-content\">\r\n        @if(!!((inputInEdit$|async))?.element){\r\n        <lib-input-element-editor></lib-input-element-editor>\r\n        }@else{\r\n        <lib-default-element></lib-default-element>\r\n        }\r\n    </div>\r\n\r\n    <footer class=\"ee-actions\">\r\n        <button (click)=\"closeEditor()\" mat-button class=\"ee-close\">Close</button>\r\n        <span class=\"spacer\"></span>\r\n        @if (!((inputInEdit$|async))?.id) {\r\n        <button mat-flat-button (click)=\"saveInput()\" [disabled]=\"((validationErrors$|async)||[]).length>0\"\r\n            color=\"primary\" class=\"ee-save\">Save new input</button>\r\n        }\r\n    </footer>\r\n</mat-card>\r\n"],"names":["i1","i2","i5","i3","i4"],"mappings":"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"}