{"version":3,"file":"ngx-t-forms-editor-input-element.component-DlIfYjsU.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/form-input-rich-text-editor/config.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/editor-js-input/editor-js-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/editor-js-input/editor-js-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/editor-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/editor-input-element.component.html"],"sourcesContent":["/// <reference path=\"../../../../../../../types/editorjs.d.ts\" />\r\nimport type { EditorConfig, LogLevels, OutputData, ToolConstructable } from \"@editorjs/editorjs\";\r\n// `@editorjs/editorjs` is CJS — runtime named imports fail under Node ESM (SSR / smoke harness).\r\n// `LogLevels` is a runtime enum with string values; use the string literal cast at the single use site below.\r\n//\r\n// Wave 2 / Trap 16: every Editor.js plugin package below is a browser-only UMD bundle that crashes\r\n// under bare Node SSR (`self`/`document` not defined at module-eval). They are now loaded via\r\n// dynamic `import()` inside `loadEditorConfig()`, which is only invoked from an SSR-gated\r\n// `ngAfterViewInit` (see `editor-js-input.component.ts`). Static top-level imports here are\r\n// type-only and emit zero runtime code.\r\n\r\nexport interface EditorJsPayload {\r\n    holderId: string,\r\n    imageFetchEndpoint:string,\r\n    imageUploadEndpoint: string,\r\n    readOnly:boolean,\r\n    onChangeFn: () => void,\r\n    data:OutputData|undefined\r\n}\r\n\r\n// Third-party Editor.js tool packages ship without typings that line up with\r\n// the host editor's `ToolConstructable`. We narrow at the registration boundary\r\n// via `unknown` rather than leaking `any` through this module.\r\nconst asToolConstructable = (tool: unknown): ToolConstructable =>\r\n    tool as ToolConstructable;\r\n\r\n/**\r\n * Dynamically loads every Editor.js plugin bundle and returns a ready-to-use `EditorConfig`.\r\n *\r\n * Browser-only: callers MUST gate this behind `isPlatformBrowser(...)` because each plugin\r\n * package touches `self` / `document` at module-eval time and crashes under bare-Node SSR.\r\n */\r\nexport const loadEditorConfig = async (\r\n    payload: EditorJsPayload\r\n): Promise<EditorConfig> => {\r\n    const [\r\n        { default: Header },\r\n        { default: List },\r\n        { default: Paragraph },\r\n        { default: Quote },\r\n        { default: Table },\r\n        { default: ImageTool },\r\n        { default: Delimiter },\r\n        { default: CodeTool },\r\n        { default: Embed },\r\n    ] = await Promise.all([\r\n        import('@editorjs/header'),\r\n        import('@editorjs/list'),\r\n        import('@editorjs/paragraph'),\r\n        import('@editorjs/quote'),\r\n        import('@editorjs/table'),\r\n        import('@editorjs/image'),\r\n        import('@editorjs/delimiter'),\r\n        import('@editorjs/code'),\r\n        import('@editorjs/embed'),\r\n    ]);\r\n\r\n    return ({\r\n        holder: payload.holderId,\r\n        autofocus: true,\r\n        placeholder: 'Let\\'s write something amazing...',\r\n        inlineToolbar: true,\r\n        tools: {\r\n            header: {\r\n                class: asToolConstructable(Header),\r\n                config: {\r\n                    levels: [1, 2, 3, 4, 5, 6],\r\n                    defaultLevel: 1,\r\n                     placeholder: 'Type your heading here...'\r\n                },\r\n                inlineToolbar: ['link', 'bold', 'italic', 'marker']\r\n            },\r\n            list: {\r\n                class: asToolConstructable(List),\r\n                inlineToolbar: true,\r\n                config: {\r\n                    defaultStyle: 'unordered',\r\n                    placeholder: 'Enter a list item here...'\r\n                }\r\n            },\r\n            paragraph: {\r\n                class: asToolConstructable(Paragraph),\r\n                inlineToolbar: true,\r\n                config: {\r\n                    preserveBlank: true,\r\n                    placeholder: 'Type your  paragraph here...'\r\n                }\r\n            },\r\n            quote: {\r\n                class: asToolConstructable(Quote),\r\n                inlineToolbar: true,\r\n                shortcut: 'CMD+SHIFT+Q',\r\n                config: {\r\n                    quotePlaceholder: 'Enter a quote',\r\n                    captionPlaceholder: 'Quote\\'s author',\r\n                    alignmentEnabled: true\r\n                }\r\n            },\r\n            delimiter: {\r\n                class: asToolConstructable(Delimiter)\r\n            },\r\n            image: {\r\n                class: asToolConstructable(ImageTool),\r\n                config: {\r\n                    endpoints: {\r\n                        byFile: payload.imageUploadEndpoint,\r\n                        byUrl: payload.imageFetchEndpoint\r\n                    },\r\n                    uploader: {\r\n                        uploadByFile(file: File) {\r\n                            // Custom upload logic\r\n                        }\r\n                    }\r\n                }\r\n            },\r\n            table: {\r\n                class: asToolConstructable(Table),\r\n                inlineToolbar: true,\r\n                config: {\r\n                    rows: 2,\r\n                    cols: 3\r\n                }\r\n            },\r\n            code: {\r\n                class: asToolConstructable(CodeTool),\r\n                config: {\r\n                    placeholder: 'Enter code here...'\r\n                }\r\n            },\r\n\r\n            embed: {\r\n                class: asToolConstructable(Embed),\r\n                config: {\r\n                    services: {\r\n                        youtube: true,\r\n                        codesandbox: true,\r\n                        codepen: true\r\n                    }\r\n                }\r\n            },\r\n\r\n        },\r\n        defaultBlock: 'paragraph',\r\n        hideToolbar: false,\r\n        data: payload.data,\r\n        readOnly:payload.readOnly,\r\n        logLevel: 'ERROR' as LogLevels,\r\n        minHeight: 300,\r\n        onChange: (api, event) => {\r\n            payload.onChangeFn()\r\n        },\r\n        onReady: () => {},\r\n        sanitizer: {\r\n            p: true,\r\n            b: true,\r\n            a: {\r\n                href: true,\r\n                target: '_blank',\r\n                rel: 'nofollow'\r\n            }\r\n        },\r\n        i18n: {\r\n            messages: {\r\n                ui: {\r\n                    blockTunes: {\r\n                        toggler: {\r\n                            'Click to tune': 'Click to tune',\r\n                            'or drag to move': 'or drag to move'\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    });\r\n}\r\n\r\n\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnDestroy,\r\n  PLATFORM_ID,\r\n  inject,\r\n  input,\r\n  output,\r\n  signal,\r\n  viewChild\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { NgControl } from '@angular/forms';\r\n\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\n// Wave 2 / Trap 16: `@editorjs/editorjs` is a browser-only UMD bundle that crashes under\r\n// bare-Node SSR at module-eval time. Type-only import at the top keeps the surface intact\r\n// with zero runtime emission; the runtime load happens inside the SSR-gated `ngAfterViewInit`.\r\nimport type EditorJSType from '@editorjs/editorjs';\r\nimport type { OutputData } from '@editorjs/editorjs';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\n\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { loadEditorConfig, EditorJsPayload } from '../form-input-rich-text-editor/config';\r\nimport { EditorFullScreenHost } from '../editor-full-screen';\r\nimport { EditorFullScreenToggleComponent } from '../editor-full-screen-toggle/editor-full-screen-toggle.component';\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n  controlType: 'lib-editor-js-input',\r\n  nextId: 0\r\n};\r\n\r\n/**\r\n * Rich-text input backed by the Editor.js block editor, wired into Angular\r\n * Material's form-field via {@link MatFormFieldControl}.\r\n *\r\n * The Editor.js bundle is browser-only, so it is dynamically imported and\r\n * instantiated inside `ngAfterViewInit` behind an `isPlatformBrowser` guard\r\n * to stay SSR-safe. The editor instance is destroyed on `ngOnDestroy`.\r\n *\r\n * @deprecated Scheduled for removal. Do not use in new code; migrate existing\r\n * usages to the supported rich-text input element. Retained only for backward\r\n * compatibility with forms that still reference `lib-editor-js-input`.\r\n *\r\n * @example\r\n *   <lib-editor-js-input [inputConfig]=\"column()\" (valueChanged)=\"onChange($event)\" />\r\n */\r\n@Component({\r\n  selector: 'lib-editor-js-input',\r\n  templateUrl: './editor-js-input.component.html',\r\n  styleUrl: './editor-js-input.component.css',\r\n  imports: [EditorFullScreenToggleComponent],\r\n  host: {\r\n    '[class.floating]': 'shouldLabelFloat',\r\n    '[id]': 'id',\r\n    '(keydown.escape)': 'onEscape($event)'\r\n  },\r\n  providers: [{ provide: MatFormFieldControl, useExisting: EditorJsInputComponent }],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EditorJsInputComponent\r\n  extends BaseCustomInput<OutputData | undefined>\r\n  implements AfterViewInit, OnDestroy {\r\n\r\n  /** Column definition describing the field's id, read-only state and metadata. */\r\n  readonly inputConfig = input.required<ITowerStepColumn>();\r\n\r\n  /** Emits the editor's saved {@link OutputData} whenever its content changes. */\r\n  readonly valueChanged = output<OutputData | undefined>();\r\n\r\n  /** Live Editor.js instance; `undefined` until initialised (or on the server). */\r\n  protected editor: EditorJSType | undefined;\r\n\r\n  /** Whether the editor is currently popped out to fill the screen. */\r\n  protected readonly fullScreen = signal(false);\r\n\r\n  /**\r\n   * Height the in-flow wrapper holds onto while the editor is popped out. Set from the editor's\r\n   * measured height on the way in, cleared on the way out.\r\n   */\r\n  protected readonly reservedHeight = signal<number | null>(null);\r\n\r\n  /**\r\n   * The bordered surface carrying the editor — this is what gets promoted to the browser's top\r\n   * layer. (`viewChild` cannot sit on an ES-private field — NG1053.)\r\n   */\r\n  private readonly editorContainer = viewChild.required<ElementRef<HTMLElement>>('editorContainer');\r\n\r\n  readonly #platformId = inject(PLATFORM_ID);\r\n\r\n  readonly #document = inject(DOCUMENT);\r\n\r\n  #fullScreenHost: EditorFullScreenHost | undefined;\r\n\r\n  /** Guards against overlapping pop-out transitions (see `#toggleFullScreen`). */\r\n  #toggling = false;\r\n\r\n  constructor() {\r\n    super(\r\n      inject(NgControl, { optional: true, self: true }) as NgControl,\r\n      inject<ElementRef<HTMLElement>>(ElementRef),\r\n      customInputConfig\r\n    );\r\n  }\r\n\r\n  override get empty(): boolean {\r\n    const n = this.value;\r\n    // Check for null, undefined, or empty string, but allow 0\r\n    return n === null || n === undefined || (n as unknown) === '';\r\n  }\r\n\r\n  override get shouldLabelFloat(): boolean {\r\n    return true;\r\n  }\r\n\r\n  override _value: OutputData | undefined = undefined;\r\n\r\n  @Input() override set value(value: OutputData | undefined) {\r\n    if (!_isEqual(this._value, value)) {\r\n      this._value = value;\r\n      this.onChange(value);\r\n      this.stateChanges.next();\r\n    }\r\n  }\r\n\r\n  override get value(): OutputData | undefined {\r\n    return this._value;\r\n  }\r\n\r\n  async ngAfterViewInit(): Promise<void> {\r\n    if (!isPlatformBrowser(this.#platformId)) return;\r\n\r\n    this.#destroyEditor();\r\n\r\n    this.#fullScreenHost ??= new EditorFullScreenHost(this.#document, () => this.#setFullScreen(false));\r\n\r\n    const payload: EditorJsPayload = {\r\n      holderId: this.inputConfig().id,\r\n      imageFetchEndpoint: '',\r\n      imageUploadEndpoint: '',\r\n      readOnly: this.inputConfig().readonly || this.inputConfig().disabled || false,\r\n      data: this.value || undefined,\r\n      onChangeFn: this.contentChangedSaveValue.bind(this)\r\n    };\r\n\r\n    // Browser-only dynamic load — see Trap 16 comment at the top of this file and in config.ts.\r\n    const [{ default: EditorJS }, config] = await Promise.all([\r\n      import('@editorjs/editorjs'),\r\n      loadEditorConfig(payload),\r\n    ]);\r\n    this.editor = new EditorJS(config);\r\n    // A `setDisabledState` that arrived before the editor existed is applied here.\r\n    void this.#applyReadOnly();\r\n  }\r\n\r\n  /**\r\n   * Keeps Editor.js's own read-only state in step with the control's. The pop-out re-enables\r\n   * pointer events on the popped-out surface (Material kills them field-wide when the control is\r\n   * disabled), so this is what actually keeps a disabled field uneditable — the CSS no longer\r\n   * does it.\r\n   */\r\n  override setDisabledState(isDisabled: boolean): void {\r\n    super.setDisabledState(isDisabled);\r\n    void this.#applyReadOnly();\r\n  }\r\n\r\n  /** Read-only when either the column config or the reactive-form control says so. */\r\n  async #applyReadOnly(): Promise<void> {\r\n    const editor = this.editor;\r\n    if (!editor) return;\r\n    const config = this.inputConfig();\r\n    const readOnly = this.disabled || config.readonly || config.disabled || false;\r\n    try {\r\n      await editor.isReady;\r\n      if (editor.readOnly.isEnabled !== readOnly) await editor.readOnly.toggle(readOnly);\r\n    } catch {\r\n      // Editor.js rejects when the configured tool set has no read-only support. The field then\r\n      // keeps the state it was constructed with rather than the whole editor failing to load.\r\n    }\r\n  }\r\n\r\n  async contentChangedSaveValue(): Promise<void> {\r\n    const value: OutputData | undefined = await this.editor?.save();\r\n    this.value = value;\r\n    this.onChange(value);\r\n    this.valueChanged.emit(value);\r\n  }\r\n\r\n  /** Toggles the pop-out from the corner button. */\r\n  protected toggleFullScreen(): void {\r\n    void this.#toggleFullScreen();\r\n  }\r\n\r\n  /**\r\n   * Escape leaves the pop-out. Native full screen is torn down by the browser itself (picked up\r\n   * through `fullscreenchange`); this covers the popover and fixed fallbacks. The event is\r\n   * stopped so Escape closes the editor rather than an enclosing dialog.\r\n   */\r\n  protected onEscape(event: Event): void {\r\n    if (!this.fullScreen()) return;\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    void this.#toggleFullScreen();\r\n  }\r\n\r\n  /**\r\n   * Pops the editor out to fill the screen, or restores it. Runs inside the button's click\r\n   * gesture, which the Fullscreen API requires — everything up to the promotion is synchronous\r\n   * for that reason.\r\n   *\r\n   * Unlike the Quill sibling there is no caret to restore: the element is promoted in place, so\r\n   * the native selection inside Editor.js's contenteditable blocks survives untouched.\r\n   */\r\n  async #toggleFullScreen(): Promise<void> {\r\n    const fullScreenHost = this.#fullScreenHost;\r\n    // Both transitions settle asynchronously; ignore clicks that land mid-flight rather than\r\n    // letting a second `requestFullscreen()` race the first.\r\n    if (!fullScreenHost || this.#toggling) return;\r\n    this.#toggling = true;\r\n\r\n    try {\r\n      if (this.fullScreen()) {\r\n        await fullScreenHost.exit();\r\n      } else {\r\n        const element = this.editorContainer().nativeElement;\r\n        this.reservedHeight.set(element.offsetHeight);\r\n        await fullScreenHost.enter(element);\r\n      }\r\n    } finally {\r\n      // `enter()` degrades rather than throwing, but `exit()` can reject if the browser refuses\r\n      // to leave full screen. Either way the controller has already settled its own state, so\r\n      // read it back instead of assuming the toggle succeeded.\r\n      this.#setFullScreen(fullScreenHost.active);\r\n      this.#toggling = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Single funnel for pop-out state, so the signal and the reserved space always agree —\r\n   * including when the browser closed full screen on its own.\r\n   */\r\n  #setFullScreen(active: boolean): void {\r\n    this.fullScreen.set(active);\r\n    if (!active) this.reservedHeight.set(null);\r\n  }\r\n\r\n  /**\r\n   * Tears the live editor down, if there is one that can be torn down.\r\n   *\r\n   * Editor.js attaches its public API — `destroy` included — inside `exportAPI`, which runs\r\n   * from `isReady.then(...)`. An editor whose initialisation FAILED (the classic case: the\r\n   * holder element left the document before the dynamic `import()` settled, which is routine\r\n   * when a dialog or step closes early) is therefore a live instance carrying nothing but a\r\n   * rejected `isReady`. `this.editor?.destroy()` guards that the instance exists, not that it\r\n   * initialised, so that case threw `destroy is not a function` straight out of `ngOnDestroy`.\r\n   * Check the method, not just the instance.\r\n   */\r\n  #destroyEditor(): void {\r\n    const editor = this.editor;\r\n    this.editor = undefined;\r\n    if (typeof editor?.destroy === 'function') editor.destroy();\r\n  }\r\n\r\n  override ngOnDestroy(): void {\r\n    this.#fullScreenHost?.destroy();\r\n    this.#fullScreenHost = undefined;\r\n    this.#destroyEditor();\r\n    // Tear the editor down first, then let the base complete `stateChanges` / `destroy$` and\r\n    // clear the temporary-error timer — none of which happened while this override skipped it.\r\n    super.ngOnDestroy();\r\n  }\r\n}\r\n","\r\n<!-- `.editor-shell` stays in the document flow and holds the editor's footprint while\r\n     `.editor-container` is promoted to the browser's top layer for full screen. Without it the\r\n     surrounding form-field collapses by the editor's height, and the page scroll position jumps\r\n     when full screen is left. -->\r\n<div class=\"editor-shell\" [style.height.px]=\"reservedHeight()\">\r\n  <div class=\"editor-container\" #editorContainer>\r\n    <div class=\"editor-holder\" #editorJs [id]=\"inputConfig().id\"></div>\r\n\r\n    <!-- Floats over the content; Editor.js has no toolbar of its own to host it. -->\r\n    <lib-editor-full-screen-toggle\r\n      [active]=\"fullScreen()\"\r\n      (toggled)=\"toggleFullScreen()\"\r\n    ></lib-editor-full-screen-toggle>\r\n  </div>\r\n</div>\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 { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { RichTextEditorType } from 'ngx-t-forms-types';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { EditorJsInputComponent } from './core/editor-js-input/editor-js-input.component';\r\nimport { QuillInputComponent } from './core/quill-input/quill-input.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n/**\r\n * Wraps a configurable rich-text editor inside a `mat-form-field`, selecting the concrete\r\n * editor (EditorJS or Quill) from the column's `richTextEditorLibrary`, with shared\r\n * label / hint / error / suffix / prefix metadata from the column.\r\n */\r\n@Component({\r\n  selector: 'lib-editor-input-element',\r\n  templateUrl: './editor-input-element.component.html',\r\n  styleUrl: './editor-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    EditorJsInputComponent,\r\n    QuillInputComponent,\r\n  ],\r\n})\r\nexport class EditorInputElementComponent {\r\n  readonly inputConfig = input.required<ITowerStepColumn>();\r\n  readonly formGroup = input.required<FormGroup>();\r\n  readonly reload = output<void>();\r\n\r\n  /** Editor-library enum exposed for `@switch` in the template. */\r\n  protected readonly editorType = RichTextEditorType;\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 [appearance]=\"inputConfig.appearance || 'fill'\" subscriptSizing=\"dynamic\">\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      @switch (inputConfig.richTextEditorLibrary) {\r\n        @case (editorType.Quill) {\r\n          <lib-quill-input\r\n            [inputConfig]=\"inputConfig\"\r\n            [formControlName]=\"inputConfig.id\"\r\n            [required]=\"inputConfig.required\"\r\n          ></lib-quill-input>\r\n        }\r\n        @case (editorType.EditorJS) {\r\n          <lib-editor-js-input\r\n            [inputConfig]=\"inputConfig\"\r\n            [formControlName]=\"inputConfig.id\"\r\n            [required]=\"inputConfig.required\"\r\n          ></lib-editor-js-input>\r\n        }\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.prefixIcon) {\r\n        <mat-icon matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n      }\r\n\r\n      @if (inputConfig.canReload?.canReload) {\r\n        <button\r\n          mat-icon-button\r\n          style=\"margin-right: 4px;\"\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 style=\"color: var(--mat-sys-primary)\">sync</mat-icon>\r\n        </button>\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 matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n      }\r\n      @if (inputConfig.suffixText) {\r\n        <span matSuffix style=\"padding-left: 5px\">{{ 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":[],"mappings":"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"}