{"version":3,"file":"holocentric-angular-formly.mjs","sources":["../../../../packages/formly/src/components/datepicker/kendo-datepicker-clear-input.directive.ts","../../../../packages/formly/src/components/datepicker/datepicker.component.ts","../../../../packages/formly/src/components/datepicker/datepicker.module.ts","../../../../packages/formly/src/components/text-input.component.ts","../../../../packages/formly/src/components/text-input.component.html","../../../../packages/formly/src/directives/file-value-accessor.directive.ts","../../../../packages/formly/src/directives/formly-value-accessor.directive.ts","../../../../packages/formly/src/holo-validators.ts","../../../../packages/formly/src/formly.manager.ts","../../../../packages/formly/src/material.module.ts","../../../../packages/formly/src/formly.utilities.ts","../../../../packages/formly/src/pipes/formly-field-label.pipe.ts","../../../../packages/formly/src/types/holo-field-type.ts","../../../../packages/formly/src/types/holo-button.ts","../../../../packages/formly/src/types/holo-category.ts","../../../../packages/formly/src/types/holo-checkbox.ts","../../../../packages/formly/src/types/holo-checkbox.html","../../../../packages/formly/src/types/holo-combobox.ts","../../../../packages/formly/src/types/holo-combobox.html","../../../../packages/formly/src/types/holo-commands.ts","../../../../packages/formly/src/types/holo-datepicker-field.ts","../../../../packages/formly/src/types/holo-datepicker-field.html","../../../../packages/formly/src/types/holo-datetimepicker.ts","../../../../packages/formly/src/types/holo-datetimepicker.html","../../../../packages/formly/src/types/holo-header-text.ts","../../../../packages/formly/src/types/holo-html-text.ts","../../../../packages/formly/src/types/holo-input.ts","../../../../packages/formly/src/types/holo-input.html","../../../../packages/formly/src/types/holo-input-left-cross.ts","../../../../packages/formly/src/types/holo-input-left-cross.html","../../../../packages/formly/src/types/holo-radio-group.ts","../../../../packages/formly/src/types/holo-radio-group.html","../../../../packages/formly/src/types/holo-relationship.ts","../../../../packages/formly/src/tinymce-plugins/tinymce-holo-image-plugin.ts","../../../../packages/formly/src/tinymce.ts","../../../../packages/formly/src/tinymce-plugins/tinymce-holo-insert-dropdown-plugin.ts","../../../../packages/formly/src/tinymce-plugins/tinymce-holo-removeformat-plugin.ts","../../../../packages/formly/src/types/holo-richtext-dialog.component.ts","../../../../packages/formly/src/types/holo-richtext-dialog.component.html","../../../../packages/formly/src/types/holo-richtext.ts","../../../../packages/formly/src/types/holo-richtext.html","../../../../packages/formly/src/types/holo-text.ts","../../../../packages/formly/src/types/holo-textarea.ts","../../../../packages/formly/src/types/holo-textarea.html","../../../../packages/formly/src/types/holo-timepicker.ts","../../../../packages/formly/src/types/holo-timepicker.html","../../../../packages/formly/src/types/holo-uploader.ts","../../../../packages/formly/src/templates.ts","../../../../packages/formly/src/formly.module.ts","../../../../packages/formly/src/holocentric-angular-formly.ts"],"sourcesContent":["import { Directive, ElementRef, OnChanges, OnDestroy, SimpleChanges, input, inject } from '@angular/core';\r\nimport { FormControlDirective } from '@angular/forms';\r\n@Directive({ selector: '[holoClearInputButton]' })\r\nexport class KendoDatePickerClearInputDirective implements OnChanges, OnDestroy {\r\n    private element = inject(ElementRef);\r\n    private formControlDirective = inject(FormControlDirective);\r\n\r\n    // hack taken from here: https://www.telerik.com/forums/kendoui-datepicker-clear-button, modified to work with formControl\r\n    private button: HTMLElement | undefined;\r\n    private buttonWrapper: HTMLElement | undefined;\r\n\r\n    readonly visible = input<boolean>(undefined, { alias: 'holoClearInputButton' });\r\n\r\n    private clickHandler = (event: any) => {\r\n        this.formControlDirective.control.setValue(null);\r\n        this.formControlDirective.form.markAsDirty();\r\n        this.formControlDirective.form.markAsTouched();\r\n        // make sure clear click doesn't propagate and open date picker\r\n        event.stopPropagation();\r\n    };\r\n\r\n    private checkShowButton(): void {\r\n        if (this.button) {\r\n            if (this.visible()) {\r\n                this.button.className = 'clear-input-button';\r\n            } else {\r\n                this.button.className = 'clear-input-button-hidden';\r\n            }\r\n        }\r\n    }\r\n\r\n    public ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['visible']) {\r\n            if (this.visible() && !this.button) {\r\n                this.button = document.createElement('span');\r\n                this.button.className = 'clear-input-button';\r\n                this.button.addEventListener('click', this.clickHandler);\r\n                // add zero-width parent wrapper, otherwise the width ruins the layout\r\n                this.buttonWrapper = document.createElement('span');\r\n                this.buttonWrapper.className = 'clear-input-button-wrapper';\r\n                this.buttonWrapper.appendChild(this.button);\r\n                // modified this to add to the input.wrapper instead of the private component.element as suggested in hack\r\n                this.element.nativeElement?.appendChild(this.buttonWrapper);\r\n            }\r\n            this.checkShowButton();\r\n        }\r\n    }\r\n\r\n    public ngOnDestroy(): void {\r\n        if (this.button) {\r\n            this.button.removeEventListener('click', this.clickHandler);\r\n        }\r\n    }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n    AfterViewInit,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ElementRef,\r\n    HostListener,\r\n    OnDestroy,\r\n    input,\r\n    output,\r\n    viewChild,\r\n    inject,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { DatePickerComponent, PopupSettings } from '@progress/kendo-angular-dateinputs';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { KendoDatePickerClearInputDirective } from './kendo-datepicker-clear-input.directive';\r\n\r\n@Component({\r\n    selector: 'holo-datepicker-control',\r\n    template: `\r\n        <kendo-datepicker\r\n            #kendoDatepicker\r\n            [holoClearInputButton]=\"showClearButton\"\r\n            [placeholder]=\"placeholder()\"\r\n            [max]=\"max()\"\r\n            [min]=\"min()\"\r\n            [format]=\"format()\"\r\n            [formControl]=\"passedInFormControl()\"\r\n            [popupSettings]=\"popupSettings\"\r\n            class=\"holo-datepicker {{ className() }}\"\r\n            [disabled]=\"readOnly()\"\r\n            [readOnlyInput]=\"true\"\r\n            (open)=\"$event.preventDefault()\"\r\n            (close)=\"$event.preventDefault()\"\r\n            [ngClass]=\"{ 'read-only': readOnly(), 'datepicker-opened': kendoDatepicker.isOpen }\"\r\n        >\r\n        </kendo-datepicker>\r\n    `,\r\n    styles: [\r\n        `\r\n            .holo-datepicker {\r\n                cursor: pointer;\r\n                width: 100%;\r\n            }\r\n\r\n            .holo-datepicker ::ng-deep .k-input {\r\n                cursor: pointer;\r\n                -webkit-text-fill-color: unset;\r\n            }\r\n\r\n            .holo-datepicker ::ng-deep .k-input::placeholder {\r\n                color: rgb(205, 205, 205);\r\n            }\r\n\r\n            .holo-datepicker ::ng-deep .k-button {\r\n                pointer-events: none;\r\n            }\r\n        `,\r\n    ],\r\n    imports: [DatePickerComponent, KendoDatePickerClearInputDirective, ReactiveFormsModule, NgClass],\r\n})\r\nexport class HoloDatePickerControl implements OnDestroy, AfterViewInit {\r\n    private changeDetectorRef = inject(ChangeDetectorRef);\r\n    private element = inject(ElementRef);\r\n\r\n    readonly max = input<Date | null>(null);\r\n    readonly min = input<Date | null>(null);\r\n    readonly placeholder = input('');\r\n    readonly format = input<string>();\r\n    readonly passedInFormControl = input<FormControl>();\r\n    readonly field = input<any>();\r\n    readonly readOnly = input(true);\r\n    readonly showClearIcon = input(false);\r\n    readonly className = input('');\r\n    readonly isTextSelectable = input(false);\r\n    readonly valueChange = output<Date>();\r\n\r\n    readonly datepicker = viewChild<DatePickerComponent>('kendoDatepicker');\r\n    isDestroyed$ = new Subject<void>();\r\n    showClearButton = false;\r\n\r\n    popupSettings: PopupSettings = {\r\n        popupClass: 'holo-datepicker-popup',\r\n    };\r\n\r\n    ngAfterViewInit(): void {\r\n        //mmx-19952 add selectable to inner input for kendo-datepicker\r\n        const elements = document.getElementsByTagName('input');\r\n        for (const element of Array.from(elements)) {\r\n            if (this.isTextSelectable()) {\r\n                element.classList.add('selectable');\r\n            }\r\n        }\r\n\r\n        const passedInFormControl = this.passedInFormControl();\r\n        if (passedInFormControl) {\r\n            passedInFormControl.valueChanges.pipe(takeUntil(this.isDestroyed$)).subscribe((value) => {\r\n                this.valueChange.emit(value);\r\n                if (this.showClearIcon()) {\r\n                    this.showClearButton = value !== null;\r\n                }\r\n                const datepicker = this.datepicker();\r\n                if (datepicker) {\r\n                    datepicker.toggle(false);\r\n                    datepicker.blur();\r\n                }\r\n            });\r\n        }\r\n        // now that the datepicker value has been set check if we need to hide button on null\r\n        if (this.showClearIcon()) {\r\n            this.showClearButton = this.datepicker()?.value !== null;\r\n        }\r\n        this.changeDetectorRef.detectChanges(); // avoid ExpressionChangedAfterItHasBeenCheckedError\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        const datepicker = this.datepicker();\r\n        if (datepicker) {\r\n            datepicker.toggle(false);\r\n        }\r\n        this.isDestroyed$.next();\r\n        this.isDestroyed$.complete();\r\n    }\r\n\r\n    @HostListener('window:mouseup', ['$event'])\r\n    mouseUp(event: MouseEvent): void {\r\n        const datepicker = this.datepicker();\r\n        if (event.button !== 0 || !datepicker) {\r\n            return;\r\n        }\r\n        if (datepicker) {\r\n            if (datepicker.isOpen) {\r\n                const datepickerPopupRef = document.querySelector(`.holo-datepicker-popup`);\r\n                if (datepickerPopupRef && !datepickerPopupRef.contains(event.target as Node)) {\r\n                    datepicker.toggle(false);\r\n                    datepicker.blur();\r\n                }\r\n            } else {\r\n                const datepickerNativeElement = this.element.nativeElement?.querySelector('kendo-datepicker');\r\n                if (datepickerNativeElement?.contains(event.target as Node)) {\r\n                    datepicker.toggle(true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n","/* eslint @typescript-eslint/no-extraneous-class: \"off\" */\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\r\nimport { HoloDatePickerControl, KendoDatePickerClearInputDirective } from '.';\r\n\r\nconst componentsAndDirectives = [HoloDatePickerControl, KendoDatePickerClearInputDirective];\r\n\r\n@NgModule({\r\n    imports: [\r\n        BrowserModule,\r\n        BrowserAnimationsModule,\r\n        CommonModule,\r\n        ReactiveFormsModule,\r\n        DateInputsModule,\r\n        ...componentsAndDirectives,\r\n    ],\r\n    exports: [...componentsAndDirectives],\r\n    schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class DatepickerModule {}\r\n","import { Component, OnInit, input, output } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { PropsWithAdditionalProperties } from '../formly.model';\r\n\r\n/* Currently duplicates holo-input.ts.\r\n   Clean up would be for holo-input to use text-input (need re-testing all apps) */\r\n\r\n@Component({\r\n    selector: 'holo-text-input',\r\n    templateUrl: './text-input.component.html',\r\n    styleUrls: ['./text-input.component.css'],\r\n    imports: [ReactiveFormsModule, FormlyModule],\r\n})\r\nexport class TextInputComponent implements OnInit {\r\n    readonly control = input.required<FormControl>();\r\n    readonly props = input.required<PropsWithAdditionalProperties>();\r\n    readonly field = input<FormlyFieldConfig>();\r\n\r\n    readonly inputBlur = output<Event>();\r\n    readonly inputFocus = output<Event>();\r\n\r\n    type = 'text';\r\n    private _trim = 'all';\r\n    private trimOptions: string[] = ['all', 'trailing', 'leading', 'none'];\r\n    set trim(value: any) {\r\n        if (typeof value === 'string' && this.trimOptions.indexOf(value as string) !== -1) {\r\n            this._trim = value as string;\r\n        } else {\r\n            this._trim = 'all';\r\n        }\r\n    }\r\n    get trim(): any {\r\n        return this._trim;\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        const control = this.control();\r\n        const props = this.props();\r\n        if (control && (control.value === null || control?.value === undefined) && props.defaultValue) {\r\n            control.setValue(props.defaultValue);\r\n        }\r\n        this.type = props.type || 'text';\r\n        this.inputFocused = this.field()?.focus;\r\n    }\r\n\r\n    inputFocused: boolean | undefined;\r\n\r\n    onInput(event: Event): void {\r\n        const props = this.props();\r\n        if (props.onInput) {\r\n            props.onInput(event);\r\n        }\r\n    }\r\n\r\n    public onBlur($event: Event): void {\r\n        this.inputFocused = false;\r\n        this.inputBlur.emit($event);\r\n        if (this.type === 'text') {\r\n            this.control().setValue(this.trimValue(this.trim, this.control().value));\r\n        }\r\n    }\r\n\r\n    public onFocus($event: Event): void {\r\n        this.inputFocused = true;\r\n        this.inputFocus.emit($event);\r\n        const props = this.props();\r\n        if (typeof props.onFocus === 'function') {\r\n            props.onFocus($event);\r\n        }\r\n    }\r\n\r\n    public clearValue(): void {\r\n        this.control().markAsDirty();\r\n        this.control().setValue('');\r\n    }\r\n\r\n    public hasInputValue(): boolean {\r\n        const control = this.control();\r\n        return control && control.value !== null && control.value !== undefined && control.value !== '';\r\n    }\r\n\r\n    private trimValue(trim: string, value: string): string {\r\n        if (typeof value !== 'string') {\r\n            return '';\r\n        }\r\n        switch (trim) {\r\n            case 'trailing':\r\n                return value.trimEnd();\r\n            case 'leading':\r\n                return value.trimStart();\r\n            case 'none':\r\n                return value;\r\n            default:\r\n                return value.trim();\r\n        }\r\n    }\r\n}\r\n","<div\r\n    class=\"input-filter-clear-background input-with-clear-button-wrapper\"\r\n    [class.input-with-clear-button-wrapper-focused]=\"inputFocused\"\r\n>\r\n    <div class=\"grid-input-filter input-with-clear-button\" [class.input-with-clear-button-focused]=\"inputFocused\">\r\n        <div class=\"input-filter input-wrapper\">\r\n            @if (type !== 'number') {\r\n                <input\r\n                    [type]=\"type\"\r\n                    [formControl]=\"control()\"\r\n                    class=\"holo-input hide-text-overflow {{ props().className }}\"\r\n                    [formlyAttributes]=\"field()\"\r\n                    [autocomplete]=\"props().autocomplete || 'off'\"\r\n                    (input)=\"onInput($event)\"\r\n                    (blur)=\"onBlur($event)\"\r\n                    (focus)=\"onFocus($event)\"\r\n                    [disabled]=\"props().readOnly\"\r\n                    [maxlength]=\"props().maxLength || 1024\"\r\n                    [placeholder]=\"props().placeholder\"\r\n                    [class.selectable]=\"props().isTextSelectable\"\r\n                />\r\n            } @else {\r\n                <input\r\n                    type=\"number\"\r\n                    [formControl]=\"control()\"\r\n                    class=\"holo-input hide-text-overflow {{ props().className }}\"\r\n                    [formlyAttributes]=\"field()\"\r\n                    [autocomplete]=\"props().autocomplete\"\r\n                    (input)=\"onInput($event)\"\r\n                    (blur)=\"onBlur($event)\"\r\n                    (focus)=\"onFocus($event)\"\r\n                    [disabled]=\"props().readOnly\"\r\n                    [min]=\"props().min\"\r\n                    [max]=\"props().max\"\r\n                />\r\n            }\r\n        </div>\r\n        @if (!props().readOnly && props().showClearIcon !== false) {\r\n            <div class=\"clear-input-filter clear-button-wrapper\">\r\n                <button\r\n                    class=\"clear-button\"\r\n                    tabindex=\"-1\"\r\n                    [class.invisible]=\"!hasInputValue()\"\r\n                    (click)=\"clearValue()\"\r\n                    type=\"button\"\r\n                >\r\n                    <span class=\"clear-icon\"></span>\r\n                </button>\r\n            </div>\r\n        }\r\n    </div>\r\n</div>\r\n","import { Directive, HostListener } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Directive({\r\n    selector: '[holoInputFile]',\r\n    providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: FileValueAccessorDirective, multi: true }],\r\n})\r\n// https://github.com/angular/angular/issues/7341\r\nexport class FileValueAccessorDirective implements ControlValueAccessor {\r\n    @HostListener('change', ['$event.target.files'])\r\n    onChange: (file: FileList) => void = (_) => {};\r\n    @HostListener('blur')\r\n    onTouched: () => void = () => {};\r\n\r\n    writeValue(value: any): void {}\r\n    registerOnChange(fn: any): void {\r\n        this.onChange = fn;\r\n    }\r\n    registerOnTouched(fn: any): void {\r\n        this.onTouched = fn;\r\n    }\r\n}\r\n","import { Directive, HostListener, inject } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormlyForm } from '@ngx-formly/core';\r\n\r\n@Directive({\r\n    selector: '[holoFormlyFormValueAccessor]',\r\n    providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: FormlyValueAccessorDirective, multi: true }],\r\n})\r\nexport class FormlyValueAccessorDirective implements ControlValueAccessor {\r\n    private formlyForm = inject(FormlyForm);\r\n\r\n    @HostListener('modelChange', ['$event'])\r\n    onChange: (...args: any[]) => void = (_) => {};\r\n\r\n    onTouched: () => void = () => {};\r\n\r\n    writeValue(model: any): void {\r\n        this.formlyForm.model = model;\r\n    }\r\n\r\n    registerOnChange(fn: any): void {\r\n        this.onChange = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: any): void {\r\n        this.onTouched = fn;\r\n    }\r\n}\r\n","/* eslint @typescript-eslint/no-extraneous-class: \"off\" */\r\n\r\nimport { AbstractControl } from '@angular/forms';\r\n\r\nexport class HoloValidators {\r\n    static passwordValidator(control: AbstractControl): any {\r\n        // {6,100}           - Assert password is between 6 and 100 characters\r\n        // (?=.*[0-9])       - Assert a string has at least one number\r\n        // if (control.value.match(/^(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{6,100}$/)) {\r\n        if (\r\n            !control.value ||\r\n            control.value.match(/^(?=.*[0-9])(?=.*[A-Z])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&* ]{10,100}$/)\r\n        ) {\r\n            return null;\r\n        } else {\r\n            return { invalidPassword: true, invalid: true };\r\n        }\r\n    }\r\n\r\n    static notAllSpacesValidator(control: AbstractControl): any {\r\n        const value = control.value;\r\n        if (!value || typeof value !== 'string') {\r\n            return null;\r\n        } else if (value.match(/^[\\s]+$/)) {\r\n            return { allSpaces: true, invalid: true };\r\n        } else {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    static richTextEmptyValidator(control: AbstractControl): any {\r\n        const controlValue = control?.value;\r\n        if (controlValue && typeof controlValue === 'string') {\r\n            const document = new DOMParser().parseFromString(controlValue, 'text/html');\r\n            const value = document.body.innerText.trim();\r\n            if (control && controlValue && !value) {\r\n                return { richTextEmpty: true, invalid: true };\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    static emailValidator(control: AbstractControl): any {\r\n        if (\r\n            !control.value ||\r\n            control.value.match(\r\n                /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$/,\r\n            )\r\n        ) {\r\n            return null;\r\n        } else {\r\n            return { invalidEmail: true, invalid: true };\r\n        }\r\n    }\r\n\r\n    static alphanumericalValidator(control: AbstractControl): any {\r\n        if (!control.value || control.value.match(/^[A-Za-z0-9 ]+$/)) {\r\n            return null;\r\n        } else {\r\n            return { notAlphanumerical: true, invalid: true };\r\n        }\r\n    }\r\n\r\n    static noSpacesValidator(control: AbstractControl): any {\r\n        if (!control.value) {\r\n            return null;\r\n        } else if (control.value.match(/\\s/)) {\r\n            return { hasSpace: true, invalid: true };\r\n        } else {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n","import { Injectable, InjectionToken, inject } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { PropertyOption, getMemoizedParsedData } from '@holocentric/angular-app-config';\r\nimport { decycle, startCase } from '@holocentric/angular-common';\r\nimport {\r\n    FeatureBase,\r\n    ItemRoleEnd,\r\n    MetamodelManager,\r\n    Property,\r\n    isCardinalityAtMostOne,\r\n} from '@holocentric/angular-metamodel';\r\nimport { FormlyConfig, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport * as _ from 'lodash';\r\nimport { Observable, of } from 'rxjs';\r\nimport { first, map } from 'rxjs/operators';\r\nimport { HoloValidators } from './holo-validators';\r\nimport { TinyMceConfig } from './tinymce';\r\n\r\nexport const FORMLY_HOLO_CONFIG_TOKEN = new InjectionToken<any>('FORMLY_HOLO_CONFIG_TOKEN');\r\nexport const FORMLY_FIELD_CONFIG_FACTORIES_TOKEN = new InjectionToken<any>('FORMLY_FIELD_CONFIG_FACTORIES_TOKEN');\r\nexport const FORMLY_FIELD_RICHTEXT_CONFIG = new InjectionToken<any>('FORMLY_FIELD_RICHTEXT_CONFIG');\r\n\r\nexport type FormlyFieldConfigFactoryMap = Record<string, Function>;\r\nexport const defaultFormlyFieldConfigFactories: FormlyFieldConfigFactoryMap = {\r\n    Boolean: makeBooleanFormlyFieldConfig,\r\n    String: makeStringFormlyFieldConfig,\r\n    Text: makeTextFormlyFieldConfig,\r\n    TimeStamp: makeDateTimePickerFormlyFieldConfig,\r\n    Integer: makeStringFormlyFieldConfig,\r\n    Multiple: makeMultipleFormlyFieldConfig,\r\n};\r\n\r\nexport interface FormlyClassNameConfig {\r\n    rowClassName?: string;\r\n    fieldClassName?: string;\r\n}\r\n\r\nexport interface HoloFormlyConfig {\r\n    classNames?: FormlyClassNameConfig;\r\n    richtext?: TinyMceConfig;\r\n    richtextFunction?: () => TinyMceConfig;\r\n}\r\n\r\nexport type PropertyWithPropertyOption = Property & ItemRoleEnd & PropertyOption;\r\n\r\n@Injectable()\r\nexport class FormlyManager {\r\n    protected fc = inject(FormlyConfig);\r\n    protected config = inject<HoloFormlyConfig>(FORMLY_HOLO_CONFIG_TOKEN);\r\n    protected formlyFieldConfigFactories = inject<FormlyFieldConfigFactoryMap>(FORMLY_FIELD_CONFIG_FACTORIES_TOKEN);\r\n    protected metamodelManager = inject(MetamodelManager);\r\n\r\n    classNameConfig: FormlyClassNameConfig;\r\n\r\n    constructor() {\r\n        const config = this.config;\r\n\r\n        this.classNameConfig = config.classNames || {};\r\n    }\r\n\r\n    makeFormlyField({\r\n        property,\r\n        additionalProps,\r\n        hasFieldContentCopyRights,\r\n    }: {\r\n        property: PropertyWithPropertyOption;\r\n        additionalProps: Record<string, Record<string, any>>;\r\n        hasFieldContentCopyRights: boolean;\r\n    }): Observable<FormlyFieldConfig> {\r\n        let result: FormlyFieldConfig;\r\n        const parsedData = getMemoizedParsedData(property);\r\n        const type = property.type;\r\n        if (property.choices && !parsedData.isReadOnly) {\r\n            result = makeComboboxFormlyFieldConfig(property, this.classNameConfig, hasFieldContentCopyRights);\r\n        } else if (type && Object.keys(this.formlyFieldConfigFactories).find((key) => key === type)) {\r\n            result = this.formlyFieldConfigFactories[type](\r\n                property,\r\n                this.classNameConfig,\r\n                hasFieldContentCopyRights,\r\n                additionalProps,\r\n            );\r\n        } else if (!property.type) {\r\n            result = makeStringFormlyFieldConfig(\r\n                property,\r\n                this.classNameConfig,\r\n                hasFieldContentCopyRights,\r\n                additionalProps,\r\n            );\r\n        } else {\r\n            return makeRelationshipFormlyFieldConfig({\r\n                property,\r\n                config: this.classNameConfig,\r\n                additionalProps,\r\n                metamodelManager: this.metamodelManager,\r\n                hasFieldContentCopyRights: hasFieldContentCopyRights,\r\n            });\r\n        }\r\n        return of(result);\r\n    }\r\n\r\n    /**\r\n     * Return formly field for category heading. If no category is given, it will just be a separator.\r\n     * @param category category label\r\n     */\r\n    makeCategoryFormlyFieldConfig(category?: string): FormlyFieldConfig {\r\n        return makeCategoryFormlyFieldConfig(this.classNameConfig, category);\r\n    }\r\n}\r\n\r\nexport function makeBooleanFormlyFieldConfig(\r\n    property: PropertyWithPropertyOption,\r\n    config: FormlyClassNameConfig,\r\n): FormlyFieldConfig {\r\n    const parsedData = getMemoizedParsedData(property);\r\n    const validators = {\r\n        validation: [Validators.required],\r\n    };\r\n    const field: FormlyFieldConfig = {\r\n        className: `${config.rowClassName} ${config.fieldClassName}`,\r\n        key: property.name,\r\n        type: 'holo-checkbox',\r\n        props: {\r\n            label: getFieldLabel(property),\r\n            placeholder: property.promptText,\r\n            showValidationIcon: true,\r\n            buttonLabel: parsedData.buttonLabel,\r\n            hideLabel: false,\r\n            readOnly: parsedData.isReadOnly,\r\n            invertBooleanValue: parsedData.invertBooleanValue,\r\n        },\r\n    };\r\n    if (property.isMandatory) {\r\n        field.validators = validators;\r\n        if (field.props) {\r\n            field.props.required = true;\r\n        }\r\n    }\r\n    unfreezeProps(field);\r\n    return field;\r\n}\r\n\r\nexport function makeMultipleFormlyFieldConfig(): FormlyFieldConfig | null {\r\n    // Handles cases that combines inputs\r\n    return null;\r\n}\r\n\r\nexport function makeStringFormlyFieldConfig(\r\n    property: PropertyWithPropertyOption,\r\n    config: FormlyClassNameConfig,\r\n    hasFieldContentCopyRights: boolean,\r\n    additionalProps: Record<string, any>,\r\n): FormlyFieldConfig {\r\n    let fieldType = 'holo-input';\r\n\r\n    const inputType = 'text';\r\n    let maxLength = property.parsedData.maxLength || 1024;\r\n    if (property.isRichText === true) {\r\n        fieldType = 'holo-richtext';\r\n    } else if (property.numberOfLines && property.numberOfLines > 1) {\r\n        fieldType = 'holo-textarea';\r\n        maxLength = property.parsedData.maxLength || 4000;\r\n    }\r\n\r\n    const className = property.parsedData.expandVertical\r\n        ? `${config.rowClassName} ${config.fieldClassName} expand-vertical`\r\n        : `${config.rowClassName} ${config.fieldClassName}`;\r\n\r\n    const validators = {\r\n        validation: [Validators.required, HoloValidators.notAllSpacesValidator],\r\n    };\r\n    const field: FormlyFieldConfig = {\r\n        className,\r\n        key: property.name,\r\n        type: fieldType,\r\n        props: {\r\n            type: inputType,\r\n            label: getFieldLabel(property),\r\n            placeholder: property.promptText,\r\n            showValidationIcon: true,\r\n            hideLabel: false,\r\n            showClearIcon: property.parsedData.showClearIcon !== false,\r\n            readOnly: property.parsedData.isReadOnly,\r\n            disabled: property.parsedData.isReadOnly,\r\n            numberOfLines: property.numberOfLines,\r\n            maxLength: property.max || maxLength,\r\n            commands$: additionalProps.commands$,\r\n            autocomplete: 'off',\r\n            defaultValue: property.parsedData.defaultValue,\r\n            maxHeight: property.parsedData.maxHeight,\r\n            isLinkable: property.parsedData.isLinkable,\r\n            isTextSelectable: hasFieldContentCopyRights,\r\n        },\r\n    };\r\n    if (property.isMandatory || property.parsedData['isMandatory']) {\r\n        field.validators = validators;\r\n        if (field.props) {\r\n            field.props.required = true;\r\n        }\r\n    }\r\n    if (property.isRichText) {\r\n        const richTextOptions = additionalProps && additionalProps[fieldType];\r\n        if (richTextOptions && field.props) {\r\n            if (typeof richTextOptions.onLinkClick === 'function') {\r\n                field.props['onLinkClick'] = (event: any, context: any) => {\r\n                    richTextOptions.onLinkClick(event, context);\r\n                };\r\n            }\r\n            if (richTextOptions.item) {\r\n                field.props['context'] = richTextOptions.item;\r\n            }\r\n        }\r\n        if (property.parsedData.showContextLabel) {\r\n            const item = additionalProps.item;\r\n            if (item && field.props) {\r\n                field.props.contextLabel = additionalProps.getContextLabel(item);\r\n            }\r\n        }\r\n    }\r\n    unfreezeProps(field);\r\n    return field;\r\n}\r\n\r\nexport function makeComboboxFormlyFieldConfig(\r\n    property: PropertyWithPropertyOption,\r\n    config: FormlyClassNameConfig,\r\n    hasFieldContentCopyRights: boolean,\r\n): FormlyFieldConfig {\r\n    const parsedData = getMemoizedParsedData(property);\r\n    const propertyChoices = parsedData.choices || property.choices || [];\r\n    const listItems = propertyChoices.map((choice: any) => {\r\n        if (choice.value !== undefined && choice.key !== undefined) {\r\n            return choice;\r\n        } else {\r\n            return choice.value ? choice.value : choice.key;\r\n        }\r\n    });\r\n    const readOnly = parsedData.isReadOnly || property.isReadOnly;\r\n    const defaultValue = (parsedData && parsedData.defaultValue) || property.defaultValue;\r\n    let isPrimitive = true;\r\n    if (listItems.length > 0 && typeof listItems[0] === 'object') {\r\n        isPrimitive = false;\r\n    }\r\n    const field: FormlyFieldConfig = {\r\n        className: `${config.rowClassName} ${config.fieldClassName}`,\r\n        key: property.name,\r\n        type: 'holo-combobox',\r\n        props: {\r\n            label: getFieldLabel(property),\r\n            hideLabel: false,\r\n            placeholder: property.promptText,\r\n            showValidationIcon: true,\r\n            listItems,\r\n            choicesFixed: property.isChoicesFixed || false, // Stricter version of allowCustom, results in a dropdown list instead\r\n            defaultValue,\r\n            readOnly,\r\n            textField: 'value',\r\n            valueField: 'key',\r\n            isPrimitive,\r\n            valuePrimitive: true,\r\n            property: decycle(_.cloneDeep(property)),\r\n            parsedData,\r\n            isTextSelectable: hasFieldContentCopyRights,\r\n        },\r\n    };\r\n    if (property.isMandatory) {\r\n        field.validators = {\r\n            validation: [Validators.required],\r\n        };\r\n        if (field.props) {\r\n            field.props.required = true;\r\n        }\r\n    }\r\n    unfreezeProps(field);\r\n    return field;\r\n}\r\n\r\nexport function makeTextFormlyFieldConfig(\r\n    property: PropertyWithPropertyOption,\r\n    config: FormlyClassNameConfig,\r\n    hasFieldContentCopyRights: boolean,\r\n): FormlyFieldConfig {\r\n    const field = {\r\n        className: `${config.rowClassName} ${config.fieldClassName}`,\r\n        key: property.name,\r\n        type: 'text',\r\n        props: {\r\n            label: getFieldLabel(property),\r\n            hideLabel: false,\r\n            placeholder: property.promptText,\r\n            showValidationIcon: true,\r\n            isTextSelectable: hasFieldContentCopyRights,\r\n        },\r\n    };\r\n    unfreezeProps(field);\r\n    return field;\r\n}\r\n\r\nexport function makeDateTimePickerFormlyFieldConfig(\r\n    property: PropertyWithPropertyOption,\r\n    config: FormlyClassNameConfig,\r\n    hasFieldContentCopyRights: boolean,\r\n): FormlyFieldConfig {\r\n    const parsedData = getMemoizedParsedData(property);\r\n    const pickerControl = parsedData.pickerControl || 'dateTime'; // configured as \"date\" or \"time\", defaults to \"dateTime\"\r\n\r\n    let format = parsedData.format;\r\n    let type = 'holo-datetimepicker';\r\n\r\n    if (pickerControl === 'date') {\r\n        type = 'holo-datepicker';\r\n        if (!format) {\r\n            format = 'dd MMM yyyy';\r\n        }\r\n    } else if (pickerControl === 'time') {\r\n        type = 'holo-timepicker';\r\n        if (!format) {\r\n            format = 'hh:mm a';\r\n        }\r\n    } else {\r\n        if (!format) {\r\n            format = 'dd MMM yyyy hh:mm a';\r\n        }\r\n    }\r\n\r\n    const field = {\r\n        className: `${config.rowClassName} ${config.fieldClassName}`,\r\n        key: property.name,\r\n        type,\r\n        props: {\r\n            label: getFieldLabel(property),\r\n            hideLabel: false,\r\n            placeholder: property.promptText,\r\n            showValidationIcon: true,\r\n            format,\r\n            minDate: getMinDateTime(parsedData.minDate, parsedData.minTime),\r\n            maxDate: getMaxDateTime(parsedData.maxDate, parsedData.maxTime),\r\n            readOnly: property.parsedData.isReadOnly,\r\n            showClearIcon: parsedData.showClearIcon || false,\r\n            isTextSelectable: hasFieldContentCopyRights,\r\n        },\r\n    };\r\n    unfreezeProps(field);\r\n    return field;\r\n\r\n    // minDate configured as \"today\" or \"+X\"/\"-X\" where X is number of days to add or subtract from today\r\n    // minTime configured as 24hr time \"00:00:00\"\r\n    function getMinDateTime(minDate: string, minTime: string): number | undefined {\r\n        const timeString = minTime ? 'T' + minTime : 'T00:00:00';\r\n        let dateString = '1970-01-01'; // default\r\n        if (minDate === 'today') {\r\n            dateString = getCurrentLocalIsoDate();\r\n        }\r\n        return minDate || minTime ? new Date(dateString + timeString).valueOf() : undefined;\r\n    }\r\n\r\n    // maxDate configured as \"today\" or \"+X\"/\"-X\" where X is number of days to add or subtract from today\r\n    // maxTime configured as 24hr time \"00:00:00\"\r\n    function getMaxDateTime(maxDate: string, maxTime: string): number | undefined {\r\n        const timeString = maxTime ? 'T' + maxTime : 'T23:59:59';\r\n        let dateString = '4000-12-31'; // default\r\n        if (maxDate === 'today') {\r\n            dateString = getCurrentLocalIsoDate();\r\n        }\r\n        return maxDate || maxTime ? new Date(dateString + timeString).valueOf() : undefined;\r\n    }\r\n\r\n    // get local date ISO format string YYYY-MM-DD. Seems this is the best way without a third party.\r\n    // Note date.toISOString returns UTC date, which can be different to local date\r\n    function getCurrentLocalIsoDate(): string {\r\n        const date = new Date();\r\n        const day = date.getDate();\r\n        return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + (day < 10 ? '0' + day : day);\r\n    }\r\n}\r\n\r\n/**\r\n * Return formly field for category heading. If no category is given, it will just be a separator.\r\n * @param category category label\r\n */\r\nexport function makeCategoryFormlyFieldConfig(config: FormlyClassNameConfig, label?: string): FormlyFieldConfig {\r\n    const field = {\r\n        className: `${config.rowClassName} ${config.fieldClassName} category-separator`,\r\n        type: 'category',\r\n        props: {\r\n            label,\r\n            showValidationIcon: true,\r\n        },\r\n    };\r\n    unfreezeProps(field);\r\n    return field;\r\n}\r\n\r\nexport function attemptTemplateOptionFunction(\r\n    props: Record<string, any>,\r\n    formlyTypename: string,\r\n    functionName: string,\r\n    ...args: any[]\r\n): any {\r\n    if (props && props[formlyTypename] && typeof props[formlyTypename][functionName] === 'function') {\r\n        return props[formlyTypename][functionName](...args);\r\n    }\r\n}\r\n\r\nexport function makeRelationshipFormlyFieldConfig({\r\n    property,\r\n    config,\r\n    additionalProps,\r\n    metamodelManager,\r\n    hasFieldContentCopyRights,\r\n}: {\r\n    property: PropertyWithPropertyOption; // ItemRoleEnd,\r\n    config: FormlyClassNameConfig;\r\n    additionalProps: Record<string, any>;\r\n    metamodelManager: MetamodelManager;\r\n    hasFieldContentCopyRights: boolean;\r\n}): Observable<FormlyFieldConfig> {\r\n    const formlyTypename = 'holo-relationship';\r\n\r\n    const parsedData = getMemoizedParsedData(property);\r\n    const showInverseRoleEnd = parsedData.showInverseRoleEnd;\r\n    const inverseRoleEnd$ = showInverseRoleEnd ? metamodelManager.getInverseRoleEnd(property) : of(undefined); // No need to fetch inverse role end if not needed\r\n\r\n    return inverseRoleEnd$.pipe(\r\n        first(),\r\n        map((inverseRoleEnd) => {\r\n            const field = {\r\n                className: `${config.rowClassName} ${config.fieldClassName}`,\r\n                key: property.name,\r\n                type: formlyTypename,\r\n                props: {\r\n                    label: getFieldLabel(property),\r\n                    hideLabel: false,\r\n                    showValidationIcon: true,\r\n                    isMany: !isCardinalityAtMostOne(property),\r\n                    placeholder: property.promptText,\r\n                    readOnly: property.isReadOnly || parsedData.isReadOnly || false,\r\n                    showTypeLabel: parsedData.showTypeLabel,\r\n                    showClearIcon:\r\n                        additionalProps && additionalProps[formlyTypename]\r\n                            ? additionalProps[formlyTypename].showClearIcon\r\n                            : true,\r\n                    feature: decycle(_.cloneDeep(property)), // need to cloneDeep to remove the frozen state and decycle to remove the circular dependencies\r\n                    inverseRoleEnd,\r\n                    showInverseRoleEnd,\r\n                    isTextSelectable: hasFieldContentCopyRights,\r\n                    onOpen: (relatedItem: any) => {\r\n                        attemptTemplateOptionFunction(\r\n                            additionalProps,\r\n                            formlyTypename,\r\n                            'onOpen',\r\n                            property.name,\r\n                            relatedItem,\r\n                        );\r\n                    },\r\n                    onClickWhenEmpty: () => {\r\n                        attemptTemplateOptionFunction(additionalProps, formlyTypename, 'onClickWhenEmpty');\r\n                    },\r\n                    commands:\r\n                        additionalProps && additionalProps[formlyTypename]\r\n                            ? additionalProps[formlyTypename].commands\r\n                            : [],\r\n                    numberOfLines: property.numberOfLines || 50,\r\n                    additionalTextsFunction: additionalProps?.[formlyTypename]?.additionalTextsFunction\r\n                        ? (relatedItem: any) => {\r\n                              return attemptTemplateOptionFunction(\r\n                                  additionalProps,\r\n                                  formlyTypename,\r\n                                  'additionalTextsFunction',\r\n                                  relatedItem,\r\n                              );\r\n                          }\r\n                        : undefined,\r\n                    styledItemLabelsFunction: additionalProps?.[formlyTypename]?.styledItemLabelsFunction\r\n                        ? (relatedItem: any) => {\r\n                              return attemptTemplateOptionFunction(\r\n                                  additionalProps,\r\n                                  formlyTypename,\r\n                                  'styledItemLabelsFunction',\r\n                                  relatedItem,\r\n                              );\r\n                          }\r\n                        : undefined,\r\n                },\r\n            };\r\n\r\n            unfreezeProps(field);\r\n            return field;\r\n        }),\r\n    );\r\n}\r\n\r\nexport function getFieldLabel(feature: FeatureBase): string {\r\n    const name = feature.name ? startCase(feature.name) : '';\r\n    let label: string = feature.label || name;\r\n    label = label.endsWith(':') ? label : label + ':';\r\n    return label;\r\n}\r\n\r\nexport function unfreezeProps(field: FormlyFieldConfig): void {\r\n    if (field?.props) {\r\n        for (const propKey of Object.keys(field.props)) {\r\n            if (typeof field.props === 'object' && Object.isFrozen(field.props[propKey])) {\r\n                field.props[propKey] = _.cloneDeep(field.props[propKey]);\r\n            }\r\n        }\r\n    }\r\n}\r\n","/* eslint @typescript-eslint/no-extraneous-class: \"off\" */\r\n\r\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_RIPPLE_GLOBAL_OPTIONS, RippleGlobalOptions } from '@angular/material/core';\r\nimport {\r\n    MatDialogActions,\r\n    MatDialogClose,\r\n    MatDialogContent,\r\n    MatDialogModule,\r\n    MatDialogTitle,\r\n} from '@angular/material/dialog';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\n\r\nconst globalRippleConfig: RippleGlobalOptions = {\r\n    disabled: true,\r\n};\r\n\r\n@NgModule({\r\n    imports: [MatButtonModule, MatCheckboxModule, MatDialogModule, MatRadioModule],\r\n    exports: [\r\n        MatButtonModule,\r\n        MatCheckboxModule,\r\n        MatDialogModule,\r\n        MatRadioModule,\r\n        MatDialogTitle,\r\n        MatDialogContent,\r\n        MatDialogActions,\r\n        MatDialogClose,\r\n    ],\r\n    providers: [\r\n        {\r\n            provide: MAT_RIPPLE_GLOBAL_OPTIONS,\r\n            useValue: globalRippleConfig,\r\n        },\r\n    ],\r\n    schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class MaterialModule {}\r\n","import { PropsWithAdditionalProperties } from './formly.model';\r\n\r\nexport function getFormlyFieldLabel(props: PropsWithAdditionalProperties): string {\r\n    return props.label && !props.hideLabel ? props.label : '';\r\n}\r\n\r\n//#region ngx-formly's src\\core\\src\\lib\\utils.ts copied here since this is private\r\n// when we update to > v5.10.29, we can use:\r\nexport { ɵgetFieldValue as getFieldValue } from '@ngx-formly/core';\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { PropsWithAdditionalProperties } from '../formly.model';\r\nimport { getFormlyFieldLabel } from '../formly.utilities';\r\n\r\n@Pipe({ name: 'formlyFieldLabel' })\r\nexport class HoloFormlyFieldLabelPipe implements PipeTransform {\r\n    transform(props: PropsWithAdditionalProperties): string {\r\n        return getFormlyFieldLabel(props);\r\n    }\r\n}\r\n","import { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { getFieldValue } from '../formly.utilities';\r\n\r\nexport abstract class HoloFieldType<F extends FormlyFieldConfig = FormlyFieldConfig> extends FieldType<F> {\r\n    hasErrorMessage(): boolean {\r\n        let result = Boolean(this.formControl);\r\n        if (\r\n            this.formControl &&\r\n            (this.formControl.pristine || !this.formControl.errors || this.formControl.errors.required)\r\n        ) {\r\n            result = false;\r\n        }\r\n        return result;\r\n    }\r\n\r\n    getTextInputErrorMessage(name?: string): string | null {\r\n        if (!this.hasErrorMessage()) {\r\n            return null;\r\n        } else if (this.formControl.errors?.invalidPassword) {\r\n            return 'Requires ten or more characters with at least: one number, an uppercase character and one of these symbols !@#$%^&*';\r\n        } else if (this.formControl.errors?.invalid) {\r\n            const fieldName = name ? name : 'field';\r\n            return `This ${fieldName} contains invalid characters`;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    getGenericErrorMessage(name?: string): string | null {\r\n        if (!this.hasErrorMessage()) {\r\n            return null;\r\n        } else if (this.formControl.errors?.invalid) {\r\n            const fieldName = name ? name : 'input';\r\n            return `This ${fieldName} is invalid`;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    get fieldValue(): any {\r\n        return getFieldValue(this.field);\r\n    }\r\n\r\n    get keyAsString(): string {\r\n        return this.field.key as string;\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\nimport { MatButton } from '@angular/material/button';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-button',\r\n    template: `\r\n        <button\r\n            type=\"button\"\r\n            mat-button\r\n            disableRipple\r\n            [class]=\"props.class\"\r\n            [disabled]=\"props.disabled\"\r\n            (click)=\"props.onClick()\"\r\n        >\r\n            @if (props.icon) {\r\n                <div [innerHTML]=\"props.icon\" class=\"holo-button-icon\"></div>\r\n            }\r\n            @if (props.label) {\r\n                <div class=\"hide-text-overflow\">\r\n                    {{ props.label }}\r\n                </div>\r\n            }\r\n        </button>\r\n    `,\r\n    imports: [MatButton],\r\n})\r\nexport class HoloButtonField extends HoloFieldType {}\r\n","import { Component } from '@angular/core';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\nimport { MatButton } from '@angular/material/button';\r\n\r\n@Component({\r\n    selector: 'formly-field-category',\r\n    template: `\r\n        <div class=\"category-wrapper\">\r\n            <label class=\"formly-category-label hide-text-overflow\">{{ props.label || '' }}</label>\r\n            <div [class.icon]=\"props.showValidationIcon\"></div>\r\n            <hr class=\"horizontal-rule\" />\r\n            @if (props.buttons) {\r\n                <div class=\"button-area\">\r\n                    @for (button of props.buttons; track button) {\r\n                        <button\r\n                            type=\"button\"\r\n                            mat-button\r\n                            disableRipple\r\n                            [class]=\"button.class\"\r\n                            (click)=\"button.onClick()\"\r\n                        >\r\n                            @if (button.label) {\r\n                                <div class=\"button-label hide-text-overflow\">\r\n                                    {{ button.label }}\r\n                                </div>\r\n                            }\r\n                            @if (button.icon) {\r\n                                <div [innerHTML]=\"button.icon\" class=\"button-icon\"></div>\r\n                            }\r\n                        </button>\r\n                    }\r\n                </div>\r\n            }\r\n        </div>\r\n    `,\r\n    styles: [\r\n        `\r\n            .category-wrapper {\r\n                display: flex;\r\n                flex: 1 0 auto;\r\n                align-items: center;\r\n                padding: 0rem;\r\n                margin-bottom: 0.1rem;\r\n            }\r\n\r\n            .formly-category-label {\r\n                font-weight: 500;\r\n            }\r\n\r\n            .horizontal-rule {\r\n                display: flex;\r\n                flex: 1 0 auto;\r\n                border-color: rgb(192, 192, 192);\r\n                border-style: solid;\r\n                border-width: 1.5px;\r\n                background-color: rgb(192, 192, 192);\r\n            }\r\n\r\n            .button-area {\r\n                padding-left: 1rem;\r\n            }\r\n\r\n            .button-area button {\r\n                margin-top: 0;\r\n                margin-bottom: 0;\r\n            }\r\n\r\n            /* TODO(mdc-migration): The following rule targets internal classes of button that may no longer apply for the MDC version. */\r\n            /* button ::ng-deep .mat-button-wrapper {\r\n                         display: flex;\r\n                         justify-content: center;\r\n                         align-items: center;\r\n                     } */\r\n\r\n            .button-label + .button-icon {\r\n                margin-left: 1rem;\r\n            }\r\n        `,\r\n    ],\r\n    imports: [MatButton],\r\n})\r\nexport class HoloCategoryField extends HoloFieldType {}\r\n","import { Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-checkbox',\r\n    templateUrl: 'holo-checkbox.html',\r\n    styleUrls: ['holo-checkbox.css'],\r\n    imports: [ReactiveFormsModule, MatCheckbox],\r\n})\r\nexport class HoloCheckboxField extends HoloFieldType {\r\n    static transformToFormProperties({\r\n        data,\r\n        key,\r\n        field,\r\n    }: {\r\n        data: any;\r\n        key: string;\r\n        field: FormlyFieldConfig;\r\n    }): boolean {\r\n        const value = data[key];\r\n        return field?.props?.invertBooleanValue ? !value : value;\r\n    }\r\n\r\n    static transformToItemProperties({\r\n        controlValue,\r\n        key,\r\n        field,\r\n    }: {\r\n        controlValue: boolean;\r\n        key: string;\r\n        field: FormlyFieldConfig;\r\n    }): Record<string, boolean> {\r\n        const result = field?.props?.invertBooleanValue ? !controlValue : controlValue;\r\n        return {\r\n            [key]: result,\r\n        };\r\n    }\r\n\r\n    onChange(event: MatCheckboxChange): void {\r\n        if (this.props.onChange) {\r\n            this.props.onChange(event);\r\n        }\r\n    }\r\n}\r\n","<div [formGroup]=\"form\" class=\"holo-checkbox-wrapper\">\r\n    <label class=\"formly-checkbox-label hide-text-overflow\">{{\r\n        props.label && !props.hideLabel ? props.label : ''\r\n    }}</label>\r\n    <div class=\"holo-checkbox-validation-wrapper\">\r\n        <div\r\n            [class.icon]=\"props.showValidationIcon\"\r\n            [class.icon-invalid-arrow]=\"\r\n                props.showValidationIcon && formControl && formControl.errors && formControl.errors.required\r\n            \"\r\n        ></div>\r\n        <label class=\"display-flex align-items-center hide-text-overflow\">\r\n            <mat-checkbox\r\n                disableRipple\r\n                class=\"holo-checkbox\"\r\n                [checked]=\"props.checked\"\r\n                [disabled]=\"props.disabled || props.readOnly\"\r\n                [formControl]=\"formControl\"\r\n                (change)=\"onChange($event)\"\r\n                #inputElement\r\n            >\r\n                <span class=\"checkbox-text white-space-normal break-word line-height-24-px no-disabled-text\">{{\r\n                    props.buttonLabel\r\n                }}</span>\r\n                @if (props?.hint) {\r\n                    <span class=\"hint white-space-normal break-word line-height-24-px\">{{ props.hint }}</span>\r\n                }\r\n            </mat-checkbox>\r\n        </label>\r\n    </div>\r\n</div>\r\n<small class=\"text-muted\">{{ props.description }}</small>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, OnDestroy, OnInit, viewChild } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\r\nimport {\r\n    ComboBoxComponent,\r\n    DropDownListComponent,\r\n    ItemTemplateDirective,\r\n    PopupSettings,\r\n    ValueTemplateDirective,\r\n} from '@progress/kendo-angular-dropdowns';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-combobox',\r\n    templateUrl: 'holo-combobox.html',\r\n    styleUrls: ['holo-combobox.css'],\r\n    imports: [\r\n        ComboBoxComponent,\r\n        ReactiveFormsModule,\r\n        FormlyModule,\r\n        NgClass,\r\n        DropDownListComponent,\r\n        ValueTemplateDirective,\r\n        ItemTemplateDirective,\r\n    ],\r\n})\r\nexport class HoloComboboxField extends HoloFieldType<FieldTypeConfig> implements OnInit, OnDestroy {\r\n    public readonly kendoDropdownList = viewChild<DropDownListComponent>('kendoDropdownList');\r\n    kendoPopupSettings: PopupSettings = { animate: false, popupClass: 'formly-dropdownlist-popup' };\r\n    optionChanged = false;\r\n    allowCustom = false;\r\n    dropdownGuide = '';\r\n\r\n    isDestroyed$ = new Subject<void>();\r\n\r\n    inputFocused: boolean | undefined;\r\n    getErrorMessage: (name?: string) => string | null = this.getTextInputErrorMessage;\r\n\r\n    ngOnInit(): void {\r\n        const property = this.props.property;\r\n        const parsedData = this.props.parsedData;\r\n        this.allowCustom = property ? !property.isChoicesFixed : false;\r\n        this.dropdownGuide = parsedData?.dropdownGuide || '';\r\n\r\n        this.checkValueAndReplaceWithDefault(this.formControl.value);\r\n        this.formControl.valueChanges.pipe(takeUntil(this.isDestroyed$)).subscribe((value) => {\r\n            const newValue = this.checkValueAndReplaceWithDefault(value);\r\n            if (typeof this.props.onChange === 'function') {\r\n                this.props.onChange(newValue);\r\n            }\r\n        });\r\n        this.inputFocused = this.field?.focus;\r\n        //mmx-19952 add selectable to inner input for kendo-datepicker\r\n        const elements = document.getElementsByTagName('kendo-searchbar input');\r\n        for (const element of Array.from(elements)) {\r\n            if (this.props.isTextSelectable) {\r\n                element.classList.add('selectable');\r\n            }\r\n        }\r\n    }\r\n\r\n    private checkValueAndReplaceWithDefault(value: any): any {\r\n        if (value === null || value === undefined) {\r\n            if (this.props.defaultValue) {\r\n                this.formControl.setValue(this.props.defaultValue);\r\n                return this.props.defaultValue;\r\n            } else if (this.formControl.defaultValue) {\r\n                this.formControl.setValue(this.formControl.defaultValue);\r\n                return this.formControl.defaultValue;\r\n            }\r\n        }\r\n        return value;\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.isDestroyed$.next();\r\n        this.isDestroyed$.complete();\r\n    }\r\n\r\n    focus(): void {\r\n        this.inputFocused = true;\r\n    }\r\n\r\n    blur(): void {\r\n        this.inputFocused = false;\r\n    }\r\n\r\n    onOptionClick(): void {\r\n        this.optionChanged = true;\r\n    }\r\n\r\n    onClose(event: any): void {\r\n        if (this.optionChanged) {\r\n            this.addBlockedPopupClass(); // prevent clicking/selecting a different option while trying to close\r\n\r\n            event.preventDefault();\r\n            setTimeout(() => {\r\n                const kendoDropdownList = this.kendoDropdownList();\r\n                if (kendoDropdownList) {\r\n                    kendoDropdownList.toggle(false);\r\n                }\r\n                this.optionChanged = false;\r\n            }, 500); // 0.5sec delay in closing as required by UX\r\n        }\r\n    }\r\n\r\n    addBlockedPopupClass(): void {\r\n        const kendoDropdownList = this.kendoDropdownList();\r\n        if (kendoDropdownList) {\r\n            kendoDropdownList.popupRef.popup.instance.popupClass = ['formly-dropdownlist-popup', 'blocked-popup'];\r\n        }\r\n    }\r\n}\r\n","<div class=\"holo-combobox-wrapper holo-dropdownlist-wrapper\">\r\n    <label class=\"formly-combobox-label formly-field-label hide-text-overflow\">{{\r\n        props.label && !props.hideLabel ? props.label : ''\r\n    }}</label>\r\n    <div\r\n        [class.icon]=\"props.showValidationIcon\"\r\n        [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n        [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && !formControl.errors.required\"\r\n    ></div>\r\n    @if (dropdownGuide) {\r\n        <label class=\"dropdown-guide\">{{ dropdownGuide }}</label>\r\n    }\r\n    <div class=\"formly-field-error-container hide-text-overflow\" [class.selectable]=\"props.isTextSelectable\">\r\n        @if (!props.choicesFixed) {\r\n            <div>\r\n                @if (props.isPrimitive) {\r\n                    <kendo-combobox\r\n                        [disabled]=\"props.readOnly\"\r\n                        [data]=\"props.listItems || []\"\r\n                        [allowCustom]=\"allowCustom\"\r\n                        [formControl]=\"formControl\"\r\n                        class=\"holo-combobox {{ props.className }}\"\r\n                        [formlyAttributes]=\"field\"\r\n                        [ngClass]=\"{ 'holo-combobox-focused': inputFocused }\"\r\n                        (focus)=\"focus()\"\r\n                        (blur)=\"blur()\"\r\n                    >\r\n                    </kendo-combobox>\r\n                } @else {\r\n                    <kendo-combobox\r\n                        [disabled]=\"props.readOnly\"\r\n                        [data]=\"props.listItems || []\"\r\n                        [allowCustom]=\"allowCustom\"\r\n                        [textField]=\"props.textField\"\r\n                        [valueField]=\"props.valueField\"\r\n                        [formControl]=\"formControl\"\r\n                        class=\"holo-combobox {{ props.className }}\"\r\n                        [formlyAttributes]=\"field\"\r\n                        (focus)=\"focus()\"\r\n                        (blur)=\"blur()\"\r\n                    >\r\n                    </kendo-combobox>\r\n                }\r\n            </div>\r\n        } @else {\r\n            @if (props.isPrimitive) {\r\n                <kendo-dropdownlist\r\n                    #primitiveKendoDropdownList\r\n                    [disabled]=\"props.readOnly\"\r\n                    [data]=\"props.listItems || []\"\r\n                    [formControl]=\"formControl\"\r\n                    class=\"holo-dropdownlist {{ props.className }}\"\r\n                    [formlyAttributes]=\"field\"\r\n                    [ngClass]=\"{ 'holo-dropdownlist-focused': inputFocused }\"\r\n                    (focus)=\"focus()\"\r\n                    (blur)=\"blur()\"\r\n                >\r\n                    <ng-template kendoDropDownListValueTemplate let-dataItem>\r\n                        <span\r\n                            class=\"dropdownlist-value formly-dropdownlist-value hide-text-overflow\"\r\n                            [ngClass]=\"{ 'holo-dropdownlist-placeholder': !dataItem && props.placeholder }\"\r\n                            >{{ dataItem || props.placeholder || '' }}\r\n                        </span>\r\n                    </ng-template>\r\n                    <ng-template kendoDropDownListItemTemplate let-dataItem>\r\n                        <div class=\"dropdownlist-item-wrapper\" (click)=\"onOptionClick()\">\r\n                            <div class=\"dropdownlist-item formly-dropdownlist-item\">\r\n                                <div\r\n                                    class=\"dropdownlist-icon\"\r\n                                    [class.tick-icon]=\"dataItem === primitiveKendoDropdownList.value\"\r\n                                ></div>\r\n                                <span class=\"dropdownlist-text hide-text-overflow\"> {{ dataItem }} </span>\r\n                            </div>\r\n                        </div>\r\n                    </ng-template>\r\n                </kendo-dropdownlist>\r\n            } @else {\r\n                <kendo-dropdownlist\r\n                    #kendoDropdownList\r\n                    [disabled]=\"props.readOnly\"\r\n                    [data]=\"props.listItems || []\"\r\n                    [textField]=\"props.textField\"\r\n                    [valueField]=\"props.valueField\"\r\n                    [valuePrimitive]=\"props.valuePrimitive || false\"\r\n                    [formControl]=\"formControl\"\r\n                    class=\"holo-dropdownlist {{ props.className }}\"\r\n                    [formlyAttributes]=\"field\"\r\n                    [popupSettings]=\"kendoPopupSettings\"\r\n                    (focus)=\"focus()\"\r\n                    (blur)=\"blur()\"\r\n                    (close)=\"onClose($event)\"\r\n                >\r\n                    <ng-template kendoDropDownListValueTemplate let-dataItem>\r\n                        <span class=\"dropdownlist-value formly-dropdownlist-value hide-text-overflow\"\r\n                            >{{ dataItem ? dataItem[props.textField] : '' }}\r\n                            @if (dataItem && props.hintField && dataItem[props.hintField]; as hint) {\r\n                                <span class=\"dropdownlist-hint\"> ({{ hint }}) </span>\r\n                            }\r\n                        </span>\r\n                    </ng-template>\r\n                    <ng-template kendoDropDownListItemTemplate let-dataItem>\r\n                        <div class=\"dropdownlist-item-wrapper\" (click)=\"onOptionClick()\">\r\n                            <div class=\"dropdownlist-item formly-dropdownlist-item\">\r\n                                <div\r\n                                    class=\"dropdownlist-icon\"\r\n                                    [class.tick-icon]=\"\r\n                                        dataItem[props.valueField] === kendoDropdownList.value ||\r\n                                        (!props.valuePrimitive &&\r\n                                            dataItem[props.valueField] === kendoDropdownList.value[props.valueField])\r\n                                    \"\r\n                                ></div>\r\n                                <span class=\"dropdownlist-text hide-text-overflow\">\r\n                                    {{ dataItem[props.textField] }}\r\n                                    @if (dataItem && props.hintField && dataItem[props.hintField]; as hint) {\r\n                                        <span class=\"dropdownlist-hint\"> ({{ hint }}) </span>\r\n                                    }\r\n                                </span>\r\n                            </div>\r\n                        </div>\r\n                    </ng-template>\r\n                </kendo-dropdownlist>\r\n            }\r\n        }\r\n        @if (showError) {\r\n            <formly-validation-message [field]=\"field\" class=\"formly-field-error-message\"></formly-validation-message>\r\n        }\r\n    </div>\r\n</div>\r\n","import { Component, input } from '@angular/core';\r\n\r\nimport { MatButton } from '@angular/material/button';\r\n\r\n@Component({\r\n    selector: 'formly-commands',\r\n    template: `\r\n        @for (command of commands(); track command) {\r\n            <div class=\"command-wrapper\">\r\n                <button\r\n                    type=\"button\"\r\n                    mat-button\r\n                    disableRipple\r\n                    [class]=\"getCommandStyle(command)\"\r\n                    (click)=\"performCommand(command)\"\r\n                >\r\n                    {{ command.commandConfig.label }}\r\n                </button>\r\n            </div>\r\n        }\r\n    `,\r\n    imports: [MatButton],\r\n})\r\nexport class HoloCommandsComponent {\r\n    readonly commands = input.required<any[]>();\r\n    readonly data = input<any>();\r\n\r\n    getCommandStyle(command: any): string {\r\n        return 'mat-mdc-button rounded-form-command-button hide-text-overflow ' + command.getStyleClass();\r\n    }\r\n\r\n    performCommand(command: any): any {\r\n        return command.perform({ items: [this.data()] });\r\n    }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { isDate } from '@holocentric/angular-common';\r\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { Subject } from 'rxjs';\r\nimport { HoloDatePickerControl } from '../components/datepicker/datepicker.component';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-datepicker',\r\n    templateUrl: 'holo-datepicker-field.html',\r\n    styleUrls: ['formly-field-error.css'],\r\n    imports: [HoloDatePickerControl, FormlyModule],\r\n})\r\nexport class HoloDatePickerField extends HoloFieldType implements OnInit {\r\n    min: Date | undefined;\r\n    max: Date | undefined;\r\n    placeholder = '';\r\n    isDestroyed$ = new Subject<void>();\r\n\r\n    getErrorMessage: (name?: string) => string | null = this.getGenericErrorMessage;\r\n\r\n    static transformToFormProperties({ data, key, field }: { data: any; key: string; field: FormlyFieldConfig }): Date {\r\n        let result = data[key];\r\n        const dataType = typeof result;\r\n        if (dataType === 'string' || dataType === 'number') {\r\n            result = new Date(result);\r\n        }\r\n        return result;\r\n    }\r\n\r\n    static transformToItemProperties({\r\n        controlValue,\r\n        key,\r\n    }: {\r\n        controlValue: string | Date;\r\n        key: string;\r\n    }): Record<string, string> {\r\n        let resultValue = controlValue as string;\r\n        // set time component 12pm so it's not AS affected by UTC\r\n        if (isDate(controlValue)) {\r\n            (controlValue as Date).setHours(12, 0, 0, 0);\r\n            resultValue = (controlValue as Date).toISOString();\r\n        }\r\n        return {\r\n            [key]: resultValue,\r\n        };\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.min = this.props.minDate ? new Date(this.props.minDate) : undefined;\r\n        this.max = this.props.maxDate ? new Date(this.props.maxDate) : undefined;\r\n        this.placeholder = this.props.placeholder ? this.props.placeholder : ' '; // default to blank\r\n    }\r\n}\r\n","<div class=\"holo-datepicker-wrapper\">\r\n    <label class=\"formly-datepicker-label hide-text-overflow\">{{\r\n        props.label && !props.hideLabel ? props.label : ''\r\n    }}</label>\r\n    <div class=\"holo-datepicker-validation-wrapper\">\r\n        <div\r\n            [class.icon]=\"props.showValidationIcon\"\r\n            [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n            [class.icon-invalid-cross]=\"\r\n                props.showValidationIcon && formControl.errors && (formControl.invalid || formControl.errors.invalid)\r\n            \"\r\n        ></div>\r\n        <div class=\"formly-field-error-container\">\r\n            <holo-datepicker-control\r\n                [showClearIcon]=\"props.showClearIcon\"\r\n                [isTextSelectable]=\"props.isTextSelectable\"\r\n                [placeholder]=\"placeholder\"\r\n                [max]=\"max\"\r\n                [min]=\"min\"\r\n                [format]=\"props.format\"\r\n                class=\"holo-datepicker-control\"\r\n                [className]=\"props.className\"\r\n                [passedInFormControl]=\"formControl\"\r\n                [field]=\"field\"\r\n                [readOnly]=\"props.readOnly\"\r\n            >\r\n            </holo-datepicker-control>\r\n            @if (showError) {\r\n                <formly-validation-message\r\n                    [field]=\"field\"\r\n                    class=\"formly-field-error-message\"\r\n                ></formly-validation-message>\r\n            }\r\n            @if (props.errorMessage) {\r\n                <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n            }\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, Renderer2, inject } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { isDate } from '@holocentric/angular-common';\r\nimport { FieldType, FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { DateTimePickerComponent } from '@progress/kendo-angular-dateinputs';\r\n\r\n// TODO: update this component. Refer to holo-datepicker. We are handling toggle ourselves so that the dateinput cannot be changed by typing\r\n// while the outside of the popup can be clicked to close it.\r\n// Also, some props properties have been changed.\r\n// Need more work to make an editable datetimepicker\r\n\r\n@Component({\r\n    selector: 'formly-field-datetimepicker',\r\n    templateUrl: 'holo-datetimepicker.html',\r\n    styleUrls: ['formly-field-error.css', 'holo-datetimepicker.css'],\r\n    imports: [DateTimePickerComponent, ReactiveFormsModule, NgClass, FormlyModule],\r\n})\r\nexport class HoloDateTimePickerField extends FieldType<FieldTypeConfig> implements AfterViewInit {\r\n    private renderer = inject(Renderer2);\r\n    private element = inject(ElementRef);\r\n\r\n    ngAfterViewInit() {\r\n        this.updateInputClass();\r\n    }\r\n\r\n    private updateInputClass() {\r\n        const inputElement = this.element.nativeElement?.querySelector('input');\r\n        if (inputElement) {\r\n            if (this.props.isTextSelectable) {\r\n                this.renderer.addClass(inputElement, 'selectable');\r\n            }\r\n        }\r\n    }\r\n\r\n    static transformToFormProperties({ data, key }: { data: any; key: string }): Date {\r\n        let result = data[key];\r\n        const dataType = typeof result;\r\n        if (dataType === 'string' || dataType === 'number') {\r\n            result = new Date(result);\r\n        }\r\n        return result;\r\n    }\r\n\r\n    static transformToItemProperties({\r\n        controlValue,\r\n        key,\r\n    }: {\r\n        controlValue: string | Date;\r\n        key: string;\r\n    }): Record<string, string> {\r\n        let resultValue = controlValue as string;\r\n        if (isDate(controlValue)) {\r\n            resultValue = (controlValue as Date).toISOString();\r\n        }\r\n        return {\r\n            [key]: resultValue,\r\n        };\r\n    }\r\n}\r\n","<div class=\"holo-datetimepicker-wrapper\">\r\n    @if (!props.hideLabel) {\r\n        <label class=\"formly-datetimepicker-label formly-field-label hide-text-overflow\">{{\r\n            props.label && !props.hideLabel ? props.label : ''\r\n        }}</label>\r\n    }\r\n    <div class=\"holo-datetimepicker-validation-wrapper\">\r\n        <div\r\n            [class.icon]=\"props.showValidationIcon\"\r\n            [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n            [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && !formControl.errors.required\"\r\n        ></div>\r\n        <div class=\"formly-field-error-container\">\r\n            <kendo-datetimepicker\r\n                #dateTimePicker\r\n                [formControl]=\"formControl\"\r\n                [max]=\"props.max\"\r\n                [min]=\"props.min\"\r\n                [format]=\"props.format\"\r\n                class=\"holo-datetimepicker holo-datepicker holo-timepicker {{ props?.className }}\"\r\n                [disabled]=\"props.readOnly\"\r\n                [ngClass]=\"{ 'read-only': props.readOnly }\"\r\n            ></kendo-datetimepicker>\r\n            @if (showError) {\r\n                <formly-validation-message\r\n                    [field]=\"field\"\r\n                    class=\"formly-field-error-message\"\r\n                ></formly-validation-message>\r\n            }\r\n            @if (props.errorMessage) {\r\n                <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n            }\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'holo-header-text',\r\n    template: `<div class=\"header-text\">{{ headerText }}</div>`,\r\n    styles: [\r\n        `\r\n            .header-text {\r\n                padding-top: 2rem;\r\n                font-size: 20px;\r\n                font-weight: 500;\r\n            }\r\n        `,\r\n    ],\r\n})\r\nexport class HoloHeaderTextField extends HoloFieldType implements OnInit {\r\n    headerText = '';\r\n\r\n    ngOnInit(): void {\r\n        this.headerText = this.props.label?.replace(':', '') || '';\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-html-text',\r\n    template: `\r\n        <div class=\"formly-html-text-wrapper\">\r\n            <label class=\"formly-html-text-label hide-text-overflow\">{{\r\n                props.label && !props.hideLabel ? props.label : ''\r\n            }}</label>\r\n            <div [class.icon]=\"props.showValidationIcon\"></div>\r\n            <span\r\n                [class]=\"'formly-html-text hide-text-overflow ' + props.className\"\r\n                [innerHTML]=\"modelValue || props.value\"\r\n            ></span>\r\n        </div>\r\n    `,\r\n    styles: [\r\n        `\r\n            .formly-html-text-label {\r\n                display: block;\r\n            }\r\n\r\n            .formly-html-text-wrapper {\r\n                display: flex;\r\n                max-width: 100%;\r\n            }\r\n\r\n            .formly-html-text {\r\n                display: flex;\r\n                align-items: center;\r\n            }\r\n        `,\r\n    ],\r\n})\r\nexport class HoloHtmlTextField extends HoloFieldType {\r\n    get modelValue(): string {\r\n        return this.fieldValue;\r\n    }\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { Component, OnInit, output } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { isValidHttpUrl } from '@holocentric/angular-common';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { HoloCommandsComponent } from './holo-commands';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n/* Currently duplicated by text-input.component\r\n   Clean up would be for holo-input to use text-input (need re-testing all apps) */\r\n\r\n@Component({\r\n    selector: 'formly-field-input',\r\n    templateUrl: 'holo-input.html',\r\n    styleUrls: ['formly-field-error.css', 'holo-input.css'],\r\n    imports: [ReactiveFormsModule, FormlyModule, HoloCommandsComponent, AsyncPipe],\r\n})\r\nexport class HoloInputField extends HoloFieldType implements OnInit {\r\n    private _trim = 'all';\r\n    private trimOptions: string[] = ['all', 'trailing', 'leading', 'none'];\r\n    isUrlClickable = false;\r\n\r\n    set trim(value: string) {\r\n        if (typeof value === 'string' && this.trimOptions.indexOf(value as string) !== -1) {\r\n            this._trim = value as string;\r\n        } else {\r\n            this._trim = 'all';\r\n        }\r\n    }\r\n    get trim(): string {\r\n        return this._trim;\r\n    }\r\n\r\n    readonly inputBlur = output<Event>();\r\n    readonly inputFocus = output<Event>();\r\n\r\n    inputFocused: boolean | undefined;\r\n    getErrorMessage: (name?: string) => string | null = this.getTextInputErrorMessage;\r\n\r\n    ngOnInit(): void {\r\n        if ((this.formControl.value === null || this.formControl.value === undefined) && this.props.defaultValue) {\r\n            this.formControl.setValue(this.props.defaultValue);\r\n        }\r\n        this.inputFocused = this.field?.focus;\r\n\r\n        const isUrlValid = isValidHttpUrl(this.formControl.value);\r\n        this.isUrlClickable = this.props.isLinkable && isUrlValid && this.props.readOnly;\r\n    }\r\n\r\n    get type(): string {\r\n        return this.props.type || 'text';\r\n    }\r\n\r\n    onInput(event: InputEvent): void {\r\n        if (this.props.onInput) {\r\n            this.props.onInput(event);\r\n        }\r\n\r\n        if (this.props.isStepNumber) {\r\n            const inputElement = event.target as HTMLInputElement;\r\n            //Will not work for Multilevel\r\n            const filteredInput = inputElement.value?.replace(/[^0-9]/g, '');\r\n            inputElement.value = filteredInput;\r\n            this.formControl.setValue(filteredInput);\r\n        }\r\n    }\r\n\r\n    public onBlur($event: Event): void {\r\n        this.inputFocused = false;\r\n        this.inputBlur.emit($event);\r\n        if (this.type === 'text') {\r\n            this.formControl.setValue(this.trimValue(this.trim, this.formControl.value));\r\n        }\r\n    }\r\n\r\n    public onClick(): void {\r\n        if (this.isUrlClickable) {\r\n            window.open(this.formControl.value, '_blank');\r\n        }\r\n    }\r\n\r\n    public onFocus($event: Event): void {\r\n        this.inputFocused = true;\r\n        this.inputFocus.emit($event);\r\n        if (typeof this.props.onFocus === 'function') {\r\n            this.props.onFocus($event);\r\n        }\r\n    }\r\n\r\n    public clearValue(): void {\r\n        this.formControl.markAsDirty();\r\n        this.formControl.setValue('');\r\n    }\r\n\r\n    public hasInputValue(): boolean {\r\n        return (\r\n            this.formControl &&\r\n            this.formControl.value !== null &&\r\n            this.formControl.value !== undefined &&\r\n            this.formControl.value !== ''\r\n        );\r\n    }\r\n\r\n    private trimValue(trim: string, value: string): string {\r\n        if (typeof value !== 'string') {\r\n            return '';\r\n        }\r\n        switch (trim) {\r\n            case 'trailing':\r\n                return value.trimRight();\r\n            case 'leading':\r\n                return value.trimLeft();\r\n            case 'none':\r\n                return value;\r\n            default:\r\n                return value.trim();\r\n        }\r\n    }\r\n}\r\n","<div class=\"holo-input-wrapper\" [class.read-only]=\"props.readOnly\">\r\n    <label class=\"formly-input-label formly-field-label hide-text-overflow\">{{\r\n        props.label && !props.hideLabel ? props.label : ''\r\n    }}</label>\r\n    <div class=\"formly-input-message\">{{ props.message }}</div>\r\n    <div class=\"holo-input-validation-wrapper\">\r\n        <div\r\n            [class.icon]=\"props.showValidationIcon\"\r\n            [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n            [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && !formControl.errors.required\"\r\n        ></div>\r\n        <div class=\"formly-field-error-container\">\r\n            <div\r\n                class=\"input-filter-clear-background input-with-clear-button-wrapper\"\r\n                [class.grid-input-filter-focused]=\"inputFocused\"\r\n                [class.input-with-clear-button-wrapper-focused]=\"inputFocused\"\r\n            >\r\n                <div\r\n                    class=\"grid-input-filter input-with-clear-button\"\r\n                    [class.grid-input-filter-focused]=\"inputFocused\"\r\n                    [class.input-with-clear-button-focused]=\"inputFocused\"\r\n                >\r\n                    <div\r\n                        class=\"input-filter input-wrapper\"\r\n                        (click)=\"onClick()\"\r\n                        [class.selectable]=\"isUrlClickable && props.isTextSelectable\"\r\n                        [class.cursor-pointer]=\"isUrlClickable\"\r\n                    >\r\n                        @if (type !== 'number') {\r\n                            <input\r\n                                [type]=\"type\"\r\n                                [formControl]=\"formControl\"\r\n                                class=\"holo-input hide-text-overflow {{ props.className }}\"\r\n                                [formlyAttributes]=\"field\"\r\n                                [autocomplete]=\"props.autocomplete || 'off'\"\r\n                                (input)=\"onInput($event)\"\r\n                                (blur)=\"onBlur($event)\"\r\n                                (focus)=\"onFocus($event)\"\r\n                                [disabled]=\"props.readOnly\"\r\n                                [maxlength]=\"props.maxLength || 1024\"\r\n                                [class.link-decoration]=\"isUrlClickable\"\r\n                                [class.selectable]=\"props.isTextSelectable\"\r\n                            />\r\n                        } @else {\r\n                            <input\r\n                                type=\"number\"\r\n                                [formControl]=\"formControl\"\r\n                                class=\"holo-input hide-text-overflow {{ props.className }}\"\r\n                                [formlyAttributes]=\"field\"\r\n                                [autocomplete]=\"props.autocomplete\"\r\n                                (input)=\"onInput($event)\"\r\n                                (blur)=\"onBlur($event)\"\r\n                                (focus)=\"onFocus($event)\"\r\n                                [disabled]=\"props.readOnly\"\r\n                                [min]=\"props.min\"\r\n                                [max]=\"props.max\"\r\n                                [class.selectable]=\"props.isTextSelectable\"\r\n                            />\r\n                        }\r\n                    </div>\r\n                    @if (!props.readOnly && props.showClearIcon !== false) {\r\n                        <div class=\"clear-input-filter clear-button-wrapper\">\r\n                            <button\r\n                                class=\"clear-button\"\r\n                                tabindex=\"-1\"\r\n                                [class.invisible]=\"!hasInputValue()\"\r\n                                (click)=\"clearValue()\"\r\n                                type=\"button\"\r\n                            >\r\n                                <span class=\"clear-icon\"></span>\r\n                            </button>\r\n                        </div>\r\n                    }\r\n                </div>\r\n            </div>\r\n            @if (showError) {\r\n                <formly-validation-message\r\n                    [field]=\"field\"\r\n                    class=\"formly-field-error-message\"\r\n                ></formly-validation-message>\r\n            }\r\n            @if (props.errorMessage) {\r\n                <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n            }\r\n        </div>\r\n    </div>\r\n</div>\r\n@if (props.commands$) {\r\n    <formly-commands [commands]=\"props.commands$ | async\" [data]=\"props.data$ | async\"> </formly-commands>\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { Component, OnInit, output } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { HoloCommandsComponent } from './holo-commands';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-input-left-cross',\r\n    templateUrl: 'holo-input-left-cross.html',\r\n    styleUrls: ['formly-field-error.css', 'holo-input-left-cross.css'],\r\n    imports: [ReactiveFormsModule, FormlyModule, HoloCommandsComponent, AsyncPipe],\r\n})\r\nexport class HoloInputLeftCrossField extends HoloFieldType implements OnInit {\r\n    readonly inputBlur = output<Event>();\r\n    readonly inputFocus = output<Event>();\r\n\r\n    inputFocused: boolean | undefined;\r\n    getErrorMessage: (name?: string) => string | null = this.getTextInputErrorMessage;\r\n\r\n    ngOnInit() {\r\n        this.inputFocused = this.field?.focus;\r\n    }\r\n\r\n    get type(): string {\r\n        return this.props.type || 'text';\r\n    }\r\n\r\n    onInput(event: Event): void {\r\n        if (this.props.onInput) {\r\n            this.props.onInput(event);\r\n        }\r\n    }\r\n\r\n    public onBlur($event: Event): void {\r\n        this.inputFocused = false;\r\n        this.inputBlur.emit($event);\r\n    }\r\n\r\n    public onFocus($event: Event): void {\r\n        this.inputFocused = true;\r\n        this.inputFocus.emit($event);\r\n        if (typeof this.props.onFocus === 'function') {\r\n            this.props.onFocus($event);\r\n        }\r\n    }\r\n\r\n    public clearValue(): void {\r\n        this.formControl.markAsDirty();\r\n        this.formControl.setValue('');\r\n    }\r\n\r\n    public hasInputValue(): boolean {\r\n        return (\r\n            this.formControl &&\r\n            this.formControl.value !== null &&\r\n            this.formControl.value !== undefined &&\r\n            this.formControl.value !== ''\r\n        );\r\n    }\r\n}\r\n","<div class=\"holo-input-wrapper\" [class.read-only]=\"props.readOnly\">\r\n    <label class=\"formly-input-label hide-text-overflow\">{{\r\n        props.label && !props.hideLabel ? props.label : ''\r\n    }}</label>\r\n    <div class=\"holo-input-validation-wrapper\">\r\n        <div\r\n            [class.icon]=\"props.showValidationIcon\"\r\n            [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n            [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && !formControl.errors.required\"\r\n        ></div>\r\n        <div class=\"formly-field-error-container\">\r\n            <div\r\n                class=\"input-filter-clear-background input-with-clear-button-wrapper\"\r\n                [class.grid-input-filter-focused]=\"inputFocused\"\r\n                [class.input-with-clear-button-wrapper-focused]=\"inputFocused\"\r\n            >\r\n                <div\r\n                    class=\"grid-input-filter input-with-clear-button\"\r\n                    [class.grid-input-filter-focused]=\"inputFocused\"\r\n                    [class.input-with-clear-button-focused]=\"inputFocused\"\r\n                >\r\n                    @if (!props.readOnly) {\r\n                        <div class=\"clear-input-filter clear-button-wrapper\">\r\n                            <button\r\n                                class=\"clear-button\"\r\n                                tabindex=\"-1\"\r\n                                [class.invisible]=\"!hasInputValue()\"\r\n                                (click)=\"clearValue()\"\r\n                                type=\"button\"\r\n                            >\r\n                                <span class=\"clear-icon\"></span>\r\n                            </button>\r\n                        </div>\r\n                    }\r\n                    <div class=\"input-filter input-wrapper\">\r\n                        @if (type !== 'number') {\r\n                            <input\r\n                                [type]=\"type\"\r\n                                [formControl]=\"formControl\"\r\n                                class=\"holo-input {{ props.className }}\"\r\n                                [formlyAttributes]=\"field\"\r\n                                [autocomplete]=\"props.autocomplete\"\r\n                                (input)=\"onInput($event)\"\r\n                                (blur)=\"onBlur($event)\"\r\n                                (focus)=\"onFocus($event)\"\r\n                                [disabled]=\"props.readOnly\"\r\n                                [maxlength]=\"props.maxLength\"\r\n                            />\r\n                        } @else {\r\n                            <input\r\n                                type=\"number\"\r\n                                [formControl]=\"formControl\"\r\n                                class=\"holo-input {{ props.className }}\"\r\n                                [formlyAttributes]=\"field\"\r\n                                autocomplete=\"new-password\"\r\n                                (input)=\"onInput($event)\"\r\n                                (blur)=\"onBlur($event)\"\r\n                                (focus)=\"onFocus($event)\"\r\n                                [disabled]=\"props.readOnly\"\r\n                                [min]=\"props.min\"\r\n                                [max]=\"props.max\"\r\n                            />\r\n                        }\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            @if (showError) {\r\n                <formly-validation-message\r\n                    [field]=\"field\"\r\n                    class=\"formly-field-error-message\"\r\n                ></formly-validation-message>\r\n            }\r\n            @if (props.errorMessage) {\r\n                <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n            }\r\n        </div>\r\n    </div>\r\n</div>\r\n@if (props.commands$) {\r\n    <formly-commands [commands]=\"props.commands$ | async\" [data]=\"props.data$ | async\"> </formly-commands>\r\n}\r\n","// Not complete yet. No functionality.\r\nimport { NgClass } from '@angular/common';\r\nimport { Component, output } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatRadioButton, MatRadioGroup } from '@angular/material/radio';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { DatePickerComponent } from '@progress/kendo-angular-dateinputs';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-radio-group',\r\n    templateUrl: 'holo-radio-group.html',\r\n    styleUrls: ['formly-field-error.css', 'holo-radio-group.css'],\r\n    imports: [MatRadioGroup, ReactiveFormsModule, MatRadioButton, DatePickerComponent, NgClass, FormlyModule],\r\n})\r\nexport class HoloRadioGroupField extends HoloFieldType {\r\n    readonly inputBlur = output<any>();\r\n\r\n    datePickerFocused = false;\r\n    getErrorMessage: (name?: string) => string | null = this.getGenericErrorMessage;\r\n\r\n    onDatePickerChange(event: any): void {\r\n        if (this.props.datePicker.onChange) {\r\n            this.props.datePicker.onChange(event);\r\n        }\r\n    }\r\n    onInput(event: any): void {\r\n        if (this.props.onInput) {\r\n            this.props.onInput(event);\r\n        }\r\n    }\r\n\r\n    public clearValue(): void {\r\n        this.formControl.markAsDirty();\r\n        this.formControl.setValue('');\r\n    }\r\n\r\n    focus(): void {\r\n        this.datePickerFocused = true;\r\n    }\r\n\r\n    blur(): void {\r\n        this.datePickerFocused = false;\r\n    }\r\n}\r\n","<label class=\"formly-radio-group-label hide-text-overflow\">{{\r\n    props.label && !props.hideLabel ? props.label : ''\r\n}}</label>\r\n<div\r\n    [class.icon]=\"props.showValidationIcon\"\r\n    [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n    [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && !formControl.errors.required\"\r\n></div>\r\n<mat-radio-group class=\"formly-radio-group\" role=\"radiogroup\" [formControl]=\"formControl\">\r\n    @if (props.datePicker) {\r\n        <span style=\"margin-right: 1.4rem\">\r\n            <mat-radio-button\r\n                class=\"holo-radio mat-radio-button mat-accent\"\r\n                [value]=\"props.datePicker.value\"\r\n                [checked]=\"props.datePicker.checked\"\r\n                [name]=\"props.name\"\r\n                (change)=\"props.datePicker.onRadioChange ? props.datePicker.onRadioChange($event) : ''\"\r\n            >\r\n            </mat-radio-button>\r\n            <div class=\"holo-datepicker-wrapper\">\r\n                <div class=\"datepicker-error-container\">\r\n                    <kendo-datepicker\r\n                        #datePicker\r\n                        [value]=\"props.datePicker.initialValue\"\r\n                        [max]=\"props.datePicker.max\"\r\n                        [min]=\"props.datePicker.min\"\r\n                        [format]=\"props.datePicker.format\"\r\n                        class=\"holo-datepicker {{ props.datePicker.className }}\"\r\n                        [ngClass]=\"{ 'holo-datepicker-focused': datePickerFocused }\"\r\n                        (valueChange)=\"onDatePickerChange($event)\"\r\n                    >\r\n                    </kendo-datepicker>\r\n                </div>\r\n            </div>\r\n        </span>\r\n    }\r\n    @for (item of props.items; track item) {\r\n        <mat-radio-button\r\n            class=\"holo-radio mat-radio-button mat-accent hide-text-overflow\"\r\n            [disabled]=\"props.readOnly || item.disabled\"\r\n            [value]=\"item.value\"\r\n            [checked]=\"item.checked\"\r\n            [name]=\"props.name\"\r\n            (change)=\"item.onRadioChange ? item.onRadioChange($event) : ''\"\r\n        >\r\n            {{ item.text }}\r\n            <span class=\"hint hide-text-overflow\">&nbsp;&nbsp;{{ item.hint }}</span>\r\n        </mat-radio-button>\r\n    }\r\n    @if (showError) {\r\n        <formly-validation-message [field]=\"field\" class=\"formly-field-error-message\"></formly-validation-message>\r\n    }\r\n    @if (props.errorMessage) {\r\n        <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n    }\r\n</mat-radio-group>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n    ChangeDetectorRef,\r\n    Component,\r\n    forwardRef,\r\n    inject,\r\n    input,\r\n    OnChanges,\r\n    output,\r\n    SimpleChanges,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { getItemLabel, isFunction } from '@holocentric/angular-common';\r\nimport { MetamodelManager } from '@holocentric/angular-metamodel';\r\nimport { FieldType, FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { NgScrollbar } from 'ngx-scrollbar';\r\n\r\nexport interface TextWithIcon {\r\n    showIcon?: boolean;\r\n    iconClass?: string;\r\n    overlayClass?: string;\r\n    overlay?: string;\r\n    textClass?: string;\r\n    text?: string;\r\n    hintClass?: string;\r\n    hint?: string;\r\n}\r\n\r\nexport interface TextWithClass {\r\n    text?: string;\r\n    class?: string;\r\n}\r\n\r\nexport type StyledItemLabels = { tag?: string; class?: string; label: string }[];\r\nexport type StyledItemLabelsFunction = (item: any) => StyledItemLabels;\r\n\r\n@Component({\r\n    selector: 'holo-relationship',\r\n    template: `\r\n        <div class=\"holo-relationship-wrapper\" [formGroup]=\"form\" [class.read-only]=\"props.readOnly\">\r\n            <label class=\"formly-relationship-label hide-text-overflow\">{{ props.label || '' }}</label>\r\n            <div class=\"holo-relationship-validation-wrapper\">\r\n                <div\r\n                    [class.icon]=\"props.showValidationIcon\"\r\n                    [class.icon-invalid-arrow]=\"\r\n                        props.showValidationIcon && formControl.errors && formControl.errors.required && !props.readOnly\r\n                    \"\r\n                    [class.icon-invalid-cross]=\"\r\n                        props.showValidationIcon && formControl.errors && formControl.errors.invalid && !props.readOnly\r\n                    \"\r\n                ></div>\r\n                @if (props.isMany) {\r\n                    <holo-relationship-list\r\n                        [formControl]=\"formControl\"\r\n                        [numLines]=\"props.numberOfLines\"\r\n                        [linesToBeShown]=\"props.linesToBeShown\"\r\n                        [readOnly]=\"props.readOnly\"\r\n                        [placeholder]=\"props.placeholder || 'no items'\"\r\n                        [itemPlaceholder]=\"props.itemPlaceholder\"\r\n                        [commands]=\"props.commands\"\r\n                        [styledItemLabelsFunction]=\"props.styledItemLabelsFunction\"\r\n                        [itemLabelFunction]=\"props.itemLabelFunction\"\r\n                        [additionalTextsFunction]=\"props.additionalTextsFunction\"\r\n                        [endAdditionalTextsFunction]=\"props.endAdditionalTextsFunction\"\r\n                        [sort]=\"props.sort\"\r\n                        [showTypeLabel]=\"props.showTypeLabel\"\r\n                        [showClearIcon]=\"props.showClearIcon !== false\"\r\n                        [selectedItemKey]=\"props.selectedItemKey || 'uuid'\"\r\n                        [selectionType]=\"props.selectionType || 'multiple'\"\r\n                        [textWithIcon]=\"props.textWithIconConfig || {}\"\r\n                        [errorMessage]=\"props.errorMessage\"\r\n                        [isLinkable]=\"props.isLinkable\"\r\n                        [filterTypes]=\"props.filterTypes\"\r\n                        [alwaysShowCommands]=\"props.alwaysShowCommands\"\r\n                        [isTextSelectable]=\"props.isTextSelectable\"\r\n                        (open)=\"onOpen($event)\"\r\n                        (remove)=\"onRemove($event)\"\r\n                        (clickWhenEmpty)=\"onClickWhenEmpty($event)\"\r\n                        (performCommand)=\"onPerformCommand($event)\"\r\n                        (selectedItemsEvent)=\"onSelectionChange($event)\"\r\n                    >\r\n                    </holo-relationship-list>\r\n                } @else {\r\n                    <holo-relationship-single\r\n                        [formControl]=\"formControl\"\r\n                        [readOnly]=\"props.readOnly\"\r\n                        [placeholder]=\"props.placeholder\"\r\n                        [commands]=\"props.commands\"\r\n                        [styledItemLabelsFunction]=\"props.styledItemLabelsFunction\"\r\n                        [itemLabelFunction]=\"props.itemLabelFunction\"\r\n                        [additionalTextsFunction]=\"props.additionalTextsFunction\"\r\n                        [endAdditionalTextsFunction]=\"props.endAdditionalTextsFunction\"\r\n                        [showTypeLabel]=\"props.showTypeLabel\"\r\n                        [showClearIcon]=\"props.showClearIcon !== false\"\r\n                        [textWithIcon]=\"props.textWithIconConfig || {}\"\r\n                        [hideElementUids]=\"props.additionalProperties?.hideElementUids\"\r\n                        [errorMessage]=\"props.errorMessage\"\r\n                        [isLinkable]=\"props.isLinkable\"\r\n                        [filterTypes]=\"props.filterTypes\"\r\n                        [alwaysShowCommands]=\"props.alwaysShowCommands\"\r\n                        [isTextSelectable]=\"props.isTextSelectable\"\r\n                        (open)=\"onOpen($event)\"\r\n                        (remove)=\"onRemove($event)\"\r\n                        (clickWhenEmpty)=\"onClickWhenEmpty($event)\"\r\n                        (performCommand)=\"onPerformCommand($event)\"\r\n                    >\r\n                    </holo-relationship-single>\r\n                }\r\n            </div>\r\n        </div>\r\n    `,\r\n    styles: [\r\n        `\r\n            holo-relationship {\r\n                display: flex;\r\n                flex: 1 1 0rem;\r\n                max-width: 100%;\r\n            }\r\n\r\n            .holo-relationship-validation-wrapper {\r\n                display: flex;\r\n                flex: 1 1 auto;\r\n                min-width: 0rem;\r\n            }\r\n\r\n            .holo-relationship-wrapper {\r\n                display: flex;\r\n                flex: 1 1 auto;\r\n                min-width: 0rem;\r\n            }\r\n        `,\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    imports: [\r\n        ReactiveFormsModule,\r\n        forwardRef(() => HoloRelationshipListComponent),\r\n        forwardRef(() => HoloRelationshipSingleComponent),\r\n    ],\r\n})\r\nexport class HoloRelationshipField extends FieldType<FieldTypeConfig> {\r\n    control: AbstractControl | undefined;\r\n\r\n    onOpen(item: any): void {\r\n        if (this.canOpen()) {\r\n            this.props.onOpen(item);\r\n        }\r\n    }\r\n\r\n    canOpen(): boolean {\r\n        return typeof this.props.onOpen === 'function';\r\n    }\r\n\r\n    onRemove(toRemoveItem: any): void {\r\n        const currentValue = this.formControl.value;\r\n        let newValue = null;\r\n        if (Array.isArray(currentValue)) {\r\n            newValue = currentValue.filter((item) => item !== toRemoveItem);\r\n        } else if (Array.isArray(currentValue.items)) {\r\n            newValue = { ...currentValue, items: currentValue.items.filter((item: any) => item !== toRemoveItem) };\r\n        }\r\n        this.formControl.setValue(newValue);\r\n        this.form.markAsDirty();\r\n\r\n        if (typeof this.props.onRemove === 'function') {\r\n            this.props.onRemove({ item: toRemoveItem, form: this.form });\r\n        }\r\n    }\r\n\r\n    onClickWhenEmpty(event: Event): void {\r\n        if (typeof this.props.onClickWhenEmpty === 'function') {\r\n            this.props.onClickWhenEmpty({ form: this.form });\r\n        }\r\n    }\r\n\r\n    onPerformCommand(params: { command: any; selectedItems: any[] }): void {\r\n        const { command, selectedItems } = params;\r\n        command.onClick({ selectedItems, form: this.form });\r\n    }\r\n\r\n    onSelectionChange(items: any[]): void {\r\n        if (typeof this.props.onSelectionChange === 'function') {\r\n            this.props.onSelectionChange(items, this.form);\r\n        }\r\n    }\r\n}\r\n\r\n@Component({\r\n    selector: 'holo-relationship-base',\r\n    template: '',\r\n})\r\nexport class HoloRelationshipComponentBase {\r\n    readonly fieldType: FieldType<FieldTypeConfig> | undefined;\r\n    readonly open = output<any>();\r\n    readonly remove = output<any>();\r\n\r\n    readonly clickWhenEmpty = output<Event>();\r\n\r\n    get props(): any {\r\n        return this.fieldType?.props;\r\n    }\r\n    get hideExternalIcon(): boolean {\r\n        return this.props?.hideExternalIcon;\r\n    }\r\n\r\n    onChange: ((value: any) => void) | undefined;\r\n    onTouched: (() => void) | undefined;\r\n\r\n    registerOnChange(fn: any): void {\r\n        this.onChange = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: any): void {\r\n        this.onTouched = fn;\r\n    }\r\n\r\n    onOpen(item: any): void {\r\n        this.open.emit(item);\r\n    }\r\n\r\n    onRemove(item: any): void {\r\n        this.remove.emit(item);\r\n    }\r\n\r\n    onClickWhenEmpty(event: Event): void {\r\n        if (this.clickWhenEmpty) {\r\n            this.clickWhenEmpty.emit(event);\r\n        }\r\n    }\r\n}\r\n\r\n@Component({\r\n    selector: 'holo-relationship-single',\r\n    template: `\r\n        @if (!item) {\r\n            <div class=\"display-flex flex-column width-100-pc\">\r\n                <div class=\"display-flex flex-row align-items-center\">\r\n                    <div class=\"empty-content\">\r\n                        <holo-relationship-no-item\r\n                            [placeholder]=\"derivedPlaceholder\"\r\n                            [readOnly]=\"readOnly()\"\r\n                            (clickWhenEmpty)=\"onClickWhenEmpty($event)\"\r\n                            (open)=\"onOpen($event)\"\r\n                        >\r\n                        </holo-relationship-no-item>\r\n                    </div>\r\n                    <ng-container *ngTemplateOutlet=\"commands\"></ng-container>\r\n                </div>\r\n                @if (fieldType?.showError) {\r\n                    <formly-validation-message\r\n                        [field]=\"fieldType?.field\"\r\n                        class=\"formly-field-error-message\"\r\n                    ></formly-validation-message>\r\n                }\r\n                @if (errorMessage()) {\r\n                    <div class=\"formly-field-error-message\" [innerHTML]=\"errorMessage()\"></div>\r\n                }\r\n            </div>\r\n        } @else {\r\n            <div class=\"holo-relationship-error-container\">\r\n                <div class=\"content-wrapper\">\r\n                    <div class=\"content\">\r\n                        <holo-relationship-list-item\r\n                            [item]=\"item\"\r\n                            [styledItemLabelsFunction]=\"styledItemLabelsFunction()\"\r\n                            [itemLabelFunction]=\"itemLabelFunction()\"\r\n                            [additionalTextsFunction]=\"additionalTextsFunction()\"\r\n                            [endAdditionalTextsFunction]=\"endAdditionalTextsFunction()\"\r\n                            [readOnly]=\"readOnly()\"\r\n                            [showTypeLabel]=\"showTypeLabel()\"\r\n                            [showClearIcon]=\"showClearIcon()\"\r\n                            [hideExternalIcon]=\"hideExternalIcon\"\r\n                            [textWithIcon]=\"textWithIcon()\"\r\n                            [isLinkable]=\"isLinkable()\"\r\n                            [isTextSelectable]=\"isTextSelectable()\"\r\n                            (remove)=\"onRemove(item)\"\r\n                            (open)=\"onOpen($event)\"\r\n                        >\r\n                        </holo-relationship-list-item>\r\n                    </div>\r\n                    <ng-container *ngTemplateOutlet=\"commands\"></ng-container>\r\n                </div>\r\n                @if (fieldType?.showError) {\r\n                    <formly-validation-message\r\n                        [field]=\"fieldType?.field\"\r\n                        class=\"formly-field-error-message\"\r\n                    ></formly-validation-message>\r\n                }\r\n                @if (errorMessage()) {\r\n                    <div class=\"formly-field-error-message\" [innerHTML]=\"errorMessage()\"></div>\r\n                }\r\n            </div>\r\n        }\r\n        <ng-template #commands>\r\n            @if (!readOnly() || alwaysShowCommands()) {\r\n                <div class=\"holo-relationship-list-commands\">\r\n                    @for (commandGroup of commandGroupKeys; track commandGroup) {\r\n                        <div class=\"command-group\">\r\n                            @for (command of commandGroups[commandGroup].commands; track command) {\r\n                                <div class=\"command-wrapper\">\r\n                                    @if (command.pretext) {\r\n                                        <div>\r\n                                            {{ command.pretext }}\r\n                                        </div>\r\n                                    }\r\n                                    <button\r\n                                        type=\"button\"\r\n                                        mat-button\r\n                                        disableRipple\r\n                                        [class]=\"command.class\"\r\n                                        [disabled]=\"\r\n                                            command.isCommandDisabled\r\n                                                ? command.isCommandDisabled({\r\n                                                      selectedItemIndex: [],\r\n                                                      selectedItems: getSelectedItems(),\r\n                                                  })\r\n                                                : false\r\n                                        \"\r\n                                        (click)=\"\r\n                                            performCommand.emit({ command: command, selectedItems: getSelectedItems() })\r\n                                        \"\r\n                                    >\r\n                                        @if (command.icon) {\r\n                                            <div [innerHTML]=\"command.icon\" class=\"command-icon\"></div>\r\n                                        }\r\n                                        @if (command.label) {\r\n                                            <div>\r\n                                                {{ command.label }}\r\n                                            </div>\r\n                                        }\r\n                                    </button>\r\n                                </div>\r\n                            }\r\n                        </div>\r\n                    }\r\n                </div>\r\n            }\r\n        </ng-template>\r\n    `,\r\n    styles: [\r\n        `\r\n            holo-relationship-single {\r\n                display: flex;\r\n                width: 100%;\r\n                flex: 1 1 0rem;\r\n                min-width: 0.1rem;\r\n            }\r\n\r\n            holo-relationship-single .empty-content {\r\n                border: 0.1rem solid rgb(128, 128, 128);\r\n                background-color: rgb(255, 255, 255);\r\n                overflow: auto;\r\n                display: flex;\r\n                flex: 1 1 0rem;\r\n            }\r\n\r\n            holo-relationship-single .content {\r\n                border: 0.1rem solid rgb(128, 128, 128);\r\n                background-color: rgb(255, 255, 255);\r\n                overflow: auto;\r\n                display: flex;\r\n                flex: 1 1 0rem;\r\n            }\r\n\r\n            holo-relationship-single .holo-relationship-list-commands {\r\n                display: flex;\r\n                flex-direction: row;\r\n                flex-wrap: nowrap;\r\n                justify-content: space-between;\r\n            }\r\n\r\n            holo-relationship-single .command-group {\r\n                display: flex;\r\n                flex-direction: row;\r\n                flex-wrap: nowrap;\r\n            }\r\n\r\n            holo-relationship-single .holo-relationship-list-commands .command-group .command-wrapper .command {\r\n                margin-top: 0rem;\r\n                margin-bottom: 0rem;\r\n            }\r\n\r\n            holo-relationship-single\r\n                .holo-relationship-list-commands\r\n                .command-group\r\n                .command-wrapper\r\n                .command:first-child {\r\n                margin-left: 1rem;\r\n            }\r\n\r\n            holo-relationship-single\r\n                .holo-relationship-list-commands\r\n                .command-group:last-child\r\n                .command-wrapper:last-child\r\n                button {\r\n                margin-right: 0rem;\r\n            }\r\n\r\n            holo-relationship-single holo-relationship-no-item ::ng-deep .holo-relationship-no-item {\r\n                color: rgb(201, 201, 201);\r\n            }\r\n\r\n            .holo-relationship-error-container {\r\n                display: flex;\r\n                flex-direction: column;\r\n                flex: 1 1 auto;\r\n                min-height: 0.1rem;\r\n                max-width: 100%;\r\n                min-width: 0.1rem;\r\n            }\r\n\r\n            .content-wrapper {\r\n                display: flex;\r\n                flex: 1 1 0rem;\r\n            }\r\n\r\n            .formly-field-error-message {\r\n                display: block;\r\n                margin-top: 0.8rem;\r\n                color: rgb(255, 58, 47);\r\n                color: var(--red-text);\r\n                padding-left: 1.3rem;\r\n                font-size: 1.3rem;\r\n            }\r\n\r\n            .formly-field-error-message:empty {\r\n                margin-top: 0rem;\r\n            }\r\n        `,\r\n    ],\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => HoloRelationshipSingleComponent),\r\n            multi: true,\r\n        },\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    imports: [\r\n        forwardRef(() => HoloRelationshipNoItemComponent),\r\n        NgTemplateOutlet,\r\n        FormlyModule,\r\n        forwardRef(() => HoloRelationshipListItemComponent),\r\n        MatButton,\r\n    ],\r\n})\r\nexport class HoloRelationshipSingleComponent\r\n    extends HoloRelationshipComponentBase\r\n    implements ControlValueAccessor, OnChanges\r\n{\r\n    private cdr = inject(ChangeDetectorRef);\r\n\r\n    readonly readOnly = input(true);\r\n    readonly placeholder = input('');\r\n    readonly commands = input<any[]>([]);\r\n    readonly styledItemLabelsFunction = input<StyledItemLabelsFunction>();\r\n    readonly itemLabelFunction = input<Function>();\r\n    readonly additionalTextsFunction = input<Function>();\r\n    readonly endAdditionalTextsFunction = input<Function>();\r\n    readonly showTypeLabel = input(false);\r\n    readonly showClearIcon = input(false);\r\n    readonly textWithIcon = input<TextWithIcon>();\r\n    readonly hideElementUids = input<string[]>([]);\r\n    readonly errorMessage = input('');\r\n    readonly isLinkable = input<Function>();\r\n    readonly filterTypes = input<string[]>([]);\r\n    readonly alwaysShowCommands = input(false);\r\n    readonly isTextSelectable = input(false);\r\n    readonly performCommand = output<any>();\r\n\r\n    item: any;\r\n    hiddenItem: any;\r\n    commandGroups: any;\r\n    commandGroupKeys: string[] | undefined;\r\n    derivedPlaceholder = '';\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        const commands = this.commands();\r\n        if ('commands' in changes && commands) {\r\n            this.commandGroups = {};\r\n            for (const command of commands) {\r\n                const commandGroup = command.group ? command.group : 'no-group';\r\n                if (!this.commandGroups[commandGroup]) {\r\n                    this.commandGroups[commandGroup] = { commands: [] };\r\n                }\r\n                this.commandGroups[commandGroup].commands.push(command);\r\n            }\r\n            this.commandGroupKeys = Object.keys(this.commandGroups);\r\n        }\r\n        if ('placeholder' in changes) {\r\n            this.setPlaceHolder();\r\n        }\r\n    }\r\n\r\n    writeValue(value: any): void {\r\n        const hideElementUids = this.hideElementUids();\r\n        if (hideElementUids && value && hideElementUids.indexOf(value.uid) > -1) {\r\n            this.hiddenItem = value;\r\n            this.item = null;\r\n        } else {\r\n            const filterTypes = this.filterTypes();\r\n            if (Array.isArray(filterTypes) && filterTypes.length > 0 && value) {\r\n                this.item = filterTypes.some((type) => type === value.__typename) ? value : null;\r\n            } else {\r\n                this.item = value;\r\n            }\r\n            this.hiddenItem = undefined;\r\n        }\r\n        this.setPlaceHolder();\r\n        // TODO: investigate why this is needed since angular 16 upgrade\r\n        this.cdr.markForCheck();\r\n    }\r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n        // TODO\r\n    }\r\n\r\n    getSelectedItems(): any {\r\n        return this.item ? [this.item] : [];\r\n    }\r\n\r\n    setPlaceHolder(): void {\r\n        // For read-only form, if there's hiddenItem and placeholder is undefined, show empty string.\r\n        if (this.readOnly() && this.hiddenItem) {\r\n            this.derivedPlaceholder = this.placeholder() || '';\r\n        } else {\r\n            this.derivedPlaceholder = this.placeholder() || 'no item';\r\n        }\r\n    }\r\n}\r\n\r\n@Component({\r\n    selector: 'holo-relationship-list',\r\n    template: `\r\n        @if (!itemsToDisplay || itemsToDisplay.length === 0) {\r\n            <div class=\"empty-content\">\r\n                <holo-relationship-no-item\r\n                    [placeholder]=\"placeholder()\"\r\n                    [readOnly]=\"readOnly()\"\r\n                    (clickWhenEmpty)=\"onClickWhenEmpty($event)\"\r\n                    (open)=\"onOpen($event)\"\r\n                >\r\n                </holo-relationship-no-item>\r\n            </div>\r\n        } @else {\r\n            <div class=\"holo-relationship-error-container\">\r\n                <ng-scrollbar class=\"content\" [style.height]=\"totalHeight\" [orientation]=\"'vertical'\">\r\n                    @for (item of itemsToDisplay; track item; let i = $index) {\r\n                        <holo-relationship-list-item\r\n                            [class.selected]=\"selectedItemIndexFlags ? selectedItemIndexFlags[i] : false\"\r\n                            [item]=\"item\"\r\n                            [styledItemLabelsFunction]=\"styledItemLabelsFunction()\"\r\n                            [itemLabelFunction]=\"itemLabelFunction()\"\r\n                            [itemPlaceholder]=\"itemPlaceholder()\"\r\n                            [additionalTextsFunction]=\"additionalTextsFunction()\"\r\n                            [endAdditionalTextsFunction]=\"endAdditionalTextsFunction()\"\r\n                            [isTextSelectable]=\"isTextSelectable()\"\r\n                            [readOnly]=\"readOnly()\"\r\n                            [showTypeLabel]=\"showTypeLabel()\"\r\n                            [showClearIcon]=\"showClearIcon()\"\r\n                            [hideExternalIcon]=\"hideExternalIcon\"\r\n                            [textWithIcon]=\"textWithIcon()\"\r\n                            [isLinkable]=\"isLinkable()\"\r\n                            (remove)=\"onRemove(item)\"\r\n                            (click)=\"onClick($event, i)\"\r\n                            (open)=\"onOpen($event)\"\r\n                        >\r\n                        </holo-relationship-list-item>\r\n                    }\r\n                    @for (freeLine of freeLinesCounter; track freeLine) {\r\n                        <div class=\"holo-relationship-list-item\"></div>\r\n                    }\r\n                </ng-scrollbar>\r\n                @if (fieldType?.showError) {\r\n                    <formly-validation-message\r\n                        [field]=\"fieldType!.field\"\r\n                        class=\"formly-field-error-message\"\r\n                    ></formly-validation-message>\r\n                }\r\n                @if (errorMessage()) {\r\n                    <div class=\"formly-field-error-message\" [innerHTML]=\"errorMessage()\"></div>\r\n                }\r\n            </div>\r\n        }\r\n        @if (!readOnly() || alwaysShowCommands()) {\r\n            <div class=\"holo-relationship-list-commands\">\r\n                @for (commandGroup of commandGroupKeys; track commandGroup) {\r\n                    <div class=\"command-group\">\r\n                        @for (command of commandGroups[commandGroup].commands; track command) {\r\n                            <div class=\"command-wrapper\">\r\n                                @if (command.pretext) {\r\n                                    <div class=\"pretext\">\r\n                                        {{ command.pretext }}\r\n                                    </div>\r\n                                }\r\n                                <button\r\n                                    type=\"button\"\r\n                                    mat-button\r\n                                    disableRipple\r\n                                    [class]=\"command.class\"\r\n                                    [disabled]=\"\r\n                                        command.isCommandDisabled\r\n                                            ? command.isCommandDisabled({\r\n                                                  selectedItemIndex: getSelectedItemIndex(),\r\n                                                  selectedItems: selectedItems,\r\n                                                  items: itemsToDisplay,\r\n                                              })\r\n                                            : false\r\n                                    \"\r\n                                    (click)=\"onCommandClick(command)\"\r\n                                >\r\n                                    @if (command.icon) {\r\n                                        <div [innerHTML]=\"command.icon\" class=\"command-icon\"></div>\r\n                                    }\r\n                                    @if (command.label) {\r\n                                        <div>\r\n                                            {{ command.label }}\r\n                                        </div>\r\n                                    }\r\n                                </button>\r\n                            </div>\r\n                        }\r\n                    </div>\r\n                }\r\n            </div>\r\n        }\r\n    `,\r\n    styles: [\r\n        `\r\n            holo-relationship-list {\r\n                display: flex;\r\n                flex-direction: column;\r\n                width: 100%;\r\n                padding-left: 0;\r\n                margin-bottom: 0;\r\n                flex-basis: 0px;\r\n                flex-grow: 1;\r\n                min-width: 0.1rem;\r\n            }\r\n\r\n            holo-relationship-list .empty-content {\r\n                border: 0.1rem solid rgb(128, 128, 128);\r\n                background-color: rgb(255, 255, 255);\r\n                overflow: auto;\r\n            }\r\n\r\n            holo-relationship-list .content {\r\n                border: 0.1rem solid rgb(128, 128, 128);\r\n                background-color: rgb(255, 255, 255);\r\n                overflow: auto;\r\n            }\r\n\r\n            holo-relationship-list .holo-relationship-list-commands {\r\n                display: flex;\r\n                flex-direction: row;\r\n                flex-wrap: nowrap;\r\n                justify-content: space-between;\r\n                margin-top: 0.6rem;\r\n            }\r\n\r\n            .command-group {\r\n                display: flex;\r\n                flex-direction: row;\r\n                flex-wrap: nowrap;\r\n            }\r\n\r\n            .command-wrapper {\r\n                display: flex;\r\n                align-items: center;\r\n            }\r\n\r\n            .pretext {\r\n                margin-right: 0.6rem;\r\n            }\r\n\r\n            holo-relationship-list\r\n                .holo-relationship-list-commands\r\n                .command-group:first-child\r\n                .command-wrapper:first-child\r\n                button {\r\n                margin-left: 0rem;\r\n            }\r\n\r\n            holo-relationship-list\r\n                .holo-relationship-list-commands\r\n                .command-group:last-child\r\n                .command-wrapper:last-child\r\n                button {\r\n                margin-right: 0rem;\r\n            }\r\n\r\n            holo-relationship-list-item.selected {\r\n                background-color: rgb(205, 205, 205);\r\n            }\r\n\r\n            .holo-relationship-error-container {\r\n                display: flex;\r\n                flex-direction: column;\r\n                flex: 1 1 auto;\r\n                min-height: 0.1rem;\r\n                max-width: 100%;\r\n                min-width: 0.1rem;\r\n            }\r\n\r\n            .formly-field-error-message {\r\n                display: block;\r\n                margin-top: 0.8rem;\r\n                color: rgb(255, 58, 47);\r\n                color: var(--red-text);\r\n                padding-left: 1.3rem;\r\n                font-size: 1.3rem;\r\n            }\r\n\r\n            .formly-field-error-message:empty {\r\n                margin-top: 0rem;\r\n            }\r\n        `,\r\n    ],\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => HoloRelationshipListComponent),\r\n            multi: true,\r\n        },\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    imports: [\r\n        forwardRef(() => HoloRelationshipNoItemComponent),\r\n        NgScrollbar,\r\n        forwardRef(() => HoloRelationshipListItemComponent),\r\n        FormlyModule,\r\n        MatButton,\r\n    ],\r\n})\r\nexport class HoloRelationshipListComponent\r\n    extends HoloRelationshipComponentBase\r\n    implements ControlValueAccessor, OnChanges\r\n{\r\n    private cdr = inject(ChangeDetectorRef);\r\n\r\n    readonly numLines = input<number>();\r\n    readonly linesToBeShown = input<number>();\r\n    readonly readOnly = input(true);\r\n    readonly placeholder = input('');\r\n    readonly itemPlaceholder = input('');\r\n    readonly commands = input<any[]>([]);\r\n    readonly styledItemLabelsFunction = input<StyledItemLabelsFunction>();\r\n    readonly itemLabelFunction = input<Function>();\r\n    readonly additionalTextsFunction = input<Function>();\r\n    readonly endAdditionalTextsFunction = input<Function>();\r\n    readonly sort = input<Function>();\r\n    readonly showTypeLabel = input(false);\r\n    readonly showClearIcon = input(false);\r\n    readonly selectedItemKey = input<string>();\r\n    readonly selectionType = input<string>();\r\n    readonly textWithIcon = input<TextWithIcon>();\r\n    readonly errorMessage = input<string>();\r\n    readonly isLinkable = input<Function>();\r\n    readonly filterTypes = input<string[]>([]);\r\n    readonly alwaysShowCommands = input(false);\r\n    readonly isTextSelectable = input(false);\r\n    readonly performCommand = output<any>();\r\n    readonly selectedItemsEvent = output<any[]>();\r\n\r\n    isModelArray: boolean | undefined;\r\n    itemsToDisplay: any[] = [];\r\n    selectedItemIndexFlags: boolean[] = [];\r\n    selectedItems: any[] = [];\r\n    allItems: any[] = [];\r\n\r\n    commandGroups: any;\r\n    commandGroupKeys: string[] | undefined;\r\n    singleItemSelected = false;\r\n    lastIndexClicked = 0;\r\n    freeLinesCounter: number[] | undefined;\r\n    itemsLength: number | undefined;\r\n    totalHeight: string | undefined;\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        const commands = this.commands();\r\n        if ('commands' in changes && commands) {\r\n            this.commandGroups = {};\r\n            for (const command of commands) {\r\n                const commandGroup = command.group ? command.group : 'no-group';\r\n                if (!this.commandGroups[commandGroup]) {\r\n                    this.commandGroups[commandGroup] = { commands: [] };\r\n                }\r\n                this.commandGroups[commandGroup].commands.push(command);\r\n            }\r\n            this.commandGroupKeys = Object.keys(this.commandGroups);\r\n        }\r\n\r\n        const linesToBeShown = this.linesToBeShown();\r\n        if ((changes['linesToBeShown'] || changes['items']) && this.itemsToDisplay && linesToBeShown) {\r\n            this.totalHeight = linesToBeShown * 3.2 + 'rem';\r\n        } else if ((changes['numLines'] || changes['items']) && this.itemsToDisplay) {\r\n            const numLines = this.numLines();\r\n            this.totalHeight =\r\n                0.2 +\r\n                (numLines && numLines < this.itemsToDisplay.length ? numLines : this.itemsToDisplay.length * 3.2) +\r\n                'rem';\r\n            // TODO: Remove the hardcoded 3.2rem per line\r\n        }\r\n    }\r\n\r\n    writeValue(value: any): void {\r\n        let items;\r\n        let isModelArray = false;\r\n        let selectedItems: any[] = [];\r\n\r\n        if (!value) {\r\n            isModelArray = true;\r\n            items = [];\r\n        } else if (Array.isArray(value)) {\r\n            isModelArray = true;\r\n            items = value;\r\n        } else {\r\n            isModelArray = false;\r\n            items = value.items;\r\n            selectedItems = value.selectedItems;\r\n        }\r\n\r\n        items = items ? items.slice() : [];\r\n        const sort = this.sort();\r\n        if (isFunction(sort)) {\r\n            items.sort(sort);\r\n        }\r\n        selectedItems = selectedItems ? selectedItems.slice() : [];\r\n\r\n        this.allItems = items;\r\n        const filterTypes = this.filterTypes();\r\n        if (Array.isArray(filterTypes) && filterTypes.length > 0) {\r\n            items = items.filter((item: any) => this.filterTypes().some((type) => type === item.__typename));\r\n        }\r\n\r\n        const selectedItemIndexFlags = items.map((item: any) =>\r\n            selectedItems.some((selectedItem: any) => selectedItem === item),\r\n        );\r\n\r\n        this.isModelArray = isModelArray;\r\n        this.itemsToDisplay = items;\r\n        this.selectedItems = selectedItems;\r\n        this.selectedItemIndexFlags = selectedItemIndexFlags;\r\n\r\n        if (!this.linesToBeShown()) {\r\n            const numLines = this.numLines();\r\n            this.totalHeight =\r\n                0.2 +\r\n                (numLines && numLines < this.itemsToDisplay.length ? numLines : this.itemsToDisplay.length * 3.2) +\r\n                'rem';\r\n        }\r\n        // TODO: investigate why this is needed since angular 16 upgrade\r\n        this.cdr.markForCheck();\r\n    }\r\n\r\n    registerOnChange(fn: any): void {\r\n        this.onChange = fn;\r\n    }\r\n    registerOnTouched(fn: any): void {\r\n        this.onTouched = fn;\r\n    }\r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n        // TODO\r\n    }\r\n\r\n    onCommandClick(command: any): void {\r\n        // this.onChange(this.items);\r\n        this.performCommand.emit({ command: command, selectedItems: this.selectedItems });\r\n    }\r\n\r\n    onClick(event: MouseEvent, index: number): void {\r\n        if (this.readOnly()) {\r\n            return;\r\n        }\r\n        if (this.onTouched) {\r\n            this.onTouched();\r\n        }\r\n        this.singleItemSelected = false;\r\n        const selectionType = this.selectionType();\r\n        if (event.shiftKey && selectionType === 'multiple') {\r\n            let lowerIndex: number;\r\n            let upperIndex: number;\r\n            if (this.lastIndexClicked <= index) {\r\n                lowerIndex = this.lastIndexClicked;\r\n                upperIndex = index;\r\n            } else {\r\n                lowerIndex = index;\r\n                upperIndex = this.lastIndexClicked;\r\n            }\r\n            this.selectedItemIndexFlags = this.selectedItemIndexFlags.map((_, flagIndex) =>\r\n                flagIndex >= lowerIndex && flagIndex <= upperIndex ? true : false,\r\n            );\r\n\r\n            this.selectedItems = this.getSelectedItems(this.itemsToDisplay, this.selectedItemIndexFlags);\r\n        } else if (event.ctrlKey && selectionType === 'multiple') {\r\n            this.selectedItemIndexFlags[index] = !this.selectedItemIndexFlags[index];\r\n            this.selectedItems = this.getSelectedItems(this.itemsToDisplay, this.selectedItemIndexFlags);\r\n\r\n            this.lastIndexClicked = index;\r\n        } else {\r\n            this.selectedItemIndexFlags = this.selectedItemIndexFlags.map((_, flagIndex) => flagIndex === index);\r\n            this.selectedItems = this.getSelectedItems(this.itemsToDisplay, this.selectedItemIndexFlags);\r\n\r\n            this.lastIndexClicked = index;\r\n            this.singleItemSelected = true;\r\n        }\r\n\r\n        this.selectedItemsEvent.emit(this.selectedItems);\r\n    }\r\n\r\n    emitChange(): void {\r\n        if (this.onChange) {\r\n            if (this.isModelArray) {\r\n                this.onChange(this.allItems);\r\n            } else {\r\n                this.onChange({ items: this.allItems, selectedItems: this.selectedItems });\r\n            }\r\n        }\r\n    }\r\n\r\n    onRemove(toRemoveItem: any): void {\r\n        super.onRemove(toRemoveItem);\r\n        this.allItems = this.allItems.filter((item) => item !== toRemoveItem);\r\n        this.itemsToDisplay = this.itemsToDisplay.filter((item) => item !== toRemoveItem);\r\n        this.selectedItems = this.selectedItems.filter((selectedItem) => selectedItem !== toRemoveItem);\r\n        this.selectedItemIndexFlags = this.itemsToDisplay.map((item) =>\r\n            this.selectedItems.some((selectedItem) => selectedItem === item),\r\n        );\r\n\r\n        if (!this.linesToBeShown()) {\r\n            const numLines = this.numLines();\r\n            this.totalHeight =\r\n                0.2 +\r\n                (numLines && numLines < this.itemsToDisplay.length ? numLines : this.itemsToDisplay.length * 3.2) +\r\n                'rem';\r\n        }\r\n\r\n        this.emitChange();\r\n    }\r\n\r\n    private getSelectedItems(items: any[], selectedItemIndexFlags: boolean[]): any[] {\r\n        const result = [];\r\n\r\n        for (let i = 0; i < items.length; ++i) {\r\n            if (selectedItemIndexFlags[i]) {\r\n                result.push(items[i]);\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    getSelectedItemIndex(): any[] {\r\n        const result = [];\r\n        for (let index = 0; index < this.itemsToDisplay.length; index++) {\r\n            const selected = this.selectedItemIndexFlags[index];\r\n            if (selected) {\r\n                result.push(index);\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n\r\n    openSelectedItem(): void {\r\n        this.onOpen(this.itemsToDisplay[this.lastIndexClicked]);\r\n    }\r\n}\r\n\r\n@Component({\r\n    selector: 'holo-relationship-list-item',\r\n    template: `\r\n        <div\r\n            class=\"holo-relationship-list-item\"\r\n            [class.read-only]=\"readOnly()\"\r\n            [class.selectable]=\"isTextSelectable()\"\r\n            [class.holo-relationship-list-item-link]=\"shouldLinkToItem()\"\r\n            [class.cursor-pointer]=\"shouldLinkToItem()\"\r\n            (click)=\"onClick($event, item())\"\r\n            (dblclick)=\"onDoubleClick($event, item())\"\r\n        >\r\n            <div class=\"text-with-icon\" [attr.data-type]=\"item().__typename\" [attr.data-link]=\"linkType\">\r\n                <div class=\"{{ textWithIcon()?.iconClass }}\">\r\n                    @if (textWithIcon()?.overlay) {\r\n                        <div [class]=\"textWithIcon()?.overlayClass\">\r\n                            {{ textWithIcon()?.overlay }}\r\n                        </div>\r\n                    }\r\n                </div>\r\n                <div class=\"item-label {{ textWithIcon()?.textClass }}\">\r\n                    @if (shouldDisplayPlaceholder()) {\r\n                        <span class=\"item-label-text item-placeholder-text hide-text-overflow\">\r\n                            {{ itemPlaceholder() }}</span\r\n                        >\r\n                    } @else {\r\n                        <span class=\"item-label-text hide-text-overflow\">\r\n                            @for (labelElement of itemLabels; track labelElement) {\r\n                                @switch (labelElement.tag) {\r\n                                    @case ('div') {\r\n                                        <div [class]=\"labelElement.class\">\r\n                                            {{ labelElement.label }}\r\n                                        </div>\r\n                                    }\r\n                                    @case ('span') {\r\n                                        <span [class]=\"labelElement.class\">{{ labelElement.label }}</span>\r\n                                    }\r\n                                    @default {\r\n                                        {{ labelElement.label }}\r\n                                    }\r\n                                }\r\n                            }\r\n                        </span>\r\n                    }\r\n                    @if (additionalTexts) {\r\n                        @for (additionalText of additionalTexts; track additionalText) {\r\n                            <span [class]=\"additionalText.class\">{{ additionalText.text }}</span>\r\n                        }\r\n                    }\r\n                    @if (textWithIcon()?.hint) {\r\n                        <span [class]=\"textWithIcon()?.hintClass\">{{ textWithIcon()?.hint }}</span>\r\n                    }\r\n                </div>\r\n            </div>\r\n            <div class=\"end-additional-text-wrapper\">\r\n                <div class=\"end-additional-text\">\r\n                    @if (showTypeLabel()) {\r\n                        <div class=\"type-label hide-text-overflow\">\r\n                            {{ getTypeLabel() }}\r\n                        </div>\r\n                    }\r\n                    @if (endAdditionalTexts) {\r\n                        @for (endAdditionalText of endAdditionalTexts; track endAdditionalText) {\r\n                            <span [class]=\"endAdditionalText.class\">{{ endAdditionalText.text }}</span>\r\n                        }\r\n                    }\r\n                </div>\r\n                @if (!readOnly() && showClearIcon()) {\r\n                    <div class=\"item-clear-icon\" (click)=\"removeItem(item())\"></div>\r\n                }\r\n            </div>\r\n        </div>\r\n    `,\r\n    styles: [\r\n        `\r\n            holo-relationship-list-item {\r\n                display: flex;\r\n                flex: 1 1 auto;\r\n            }\r\n\r\n            .item-label {\r\n                display: flex;\r\n                align-items: center;\r\n                max-width: 100%;\r\n            }\r\n\r\n            .item-label-text {\r\n                overflow: hidden;\r\n                text-overflow: ellipsis;\r\n            }\r\n\r\n            .type-label {\r\n                text-align: right;\r\n                padding-left: 0.8rem;\r\n            }\r\n\r\n            .item-clear-icon {\r\n                background-color: transparent;\r\n                margin-left: 0.5rem;\r\n                margin-right: -1rem;\r\n                cursor: pointer;\r\n                width: 2.6rem;\r\n                height: 2.6rem;\r\n                min-width: 2.6rem;\r\n                background-size: 2.6rem 2.6rem;\r\n                background-repeat: no-repeat;\r\n                background-position: center;\r\n                background-image: url(data:image/svg+xml;base64,PHN2ZyBpZD0iU2VhcmNoX0NsZWFyX0xpZ2h0X0JHIiBkYXRhLW5hbWU9IlNlYXJjaCBDbGVhciBMaWdodCBCRyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTQwIDE0MCI+PHRpdGxlPjI2Mi1TZWFyY2hDbGVhci1EYXJrQkc8L3RpdGxlPjxjaXJjbGUgaWQ9IlN0YW5kYXJkIiBjeD0iNzAiIGN5PSI3MCIgcj0iMzEuNyIgZmlsbD0iI2NjYyIgb3BhY2l0eT0iMC41Ii8+PGxpbmUgeDE9IjU1LjczOSIgeTE9IjU1LjczOSIgeDI9Ijg0LjI2MSIgeTI9Ijg0LjI2MSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSI1Ii8+PGxpbmUgeDE9IjU1LjczOSIgeTE9Ijg0LjI2MSIgeDI9Ijg0LjI2MSIgeTI9IjU1LjczOSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSI1Ii8+PC9zdmc+);\r\n            }\r\n\r\n            .text-with-icon {\r\n                height: 100%;\r\n                display: flex;\r\n                flex: 0 1 auto;\r\n                align-items: center;\r\n                min-width: 0rem;\r\n            }\r\n\r\n            .end-additional-text-wrapper {\r\n                display: flex;\r\n                align-items: center;\r\n            }\r\n\r\n            .end-additional-text {\r\n                height: 100%;\r\n                display: flex;\r\n                align-items: center;\r\n                justify-content: flex-end;\r\n                color: rgb(172, 172, 172);\r\n                color: var(--grey-text);\r\n            }\r\n        `,\r\n        /* This is taken from material list */\r\n        `\r\n            .holo-relationship-list-item {\r\n                position: relative;\r\n                display: flex;\r\n                flex: 1 1 0rem;\r\n                flex-flow: row;\r\n                align-items: center;\r\n                padding: 0rem 1.3rem 0rem 1.3rem;\r\n                width: 100%;\r\n                box-sizing: border-box;\r\n                justify-content: space-between;\r\n            }\r\n        `,\r\n        '.holo-relationship-list-item-link, .cursor-pointer { cursor: pointer; }',\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    imports: [],\r\n})\r\nexport class HoloRelationshipListItemComponent implements OnChanges {\r\n    private metamodelManager = inject(MetamodelManager);\r\n\r\n    readonly item = input<any>();\r\n    readonly itemPlaceholder = input('');\r\n    readonly styledItemLabelsFunction = input<StyledItemLabelsFunction>();\r\n    readonly itemLabelFunction = input<Function>();\r\n    readonly additionalTextsFunction = input<Function>();\r\n    readonly endAdditionalTextsFunction = input<Function>();\r\n    readonly textWithIcon = input<TextWithIcon>();\r\n    readonly readOnly = input(true);\r\n    readonly showTypeLabel = input(false);\r\n    readonly showClearIcon = input(false);\r\n    readonly hideExternalIcon = input(false);\r\n    readonly isLinkable = input<Function>();\r\n    readonly isTextSelectable = input(false);\r\n    readonly open = output<any>();\r\n    readonly remove = output<any>();\r\n\r\n    additionalTexts: TextWithClass[] | null = null;\r\n    endAdditionalTexts: TextWithClass[] | null = null;\r\n    itemLabels: StyledItemLabels = [];\r\n    linkType = '';\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['item']) {\r\n            this.additionalTexts = this.getAdditionalTexts();\r\n            this.endAdditionalTexts = this.getEndAdditionalTexts();\r\n            this.itemLabels = this.getItemLabels();\r\n            this.linkType = this.getLinkType();\r\n        } else if (changes['textWithIcon']) {\r\n            this.itemLabels = this.getItemLabels();\r\n        }\r\n    }\r\n\r\n    onClick(event: MouseEvent, item: any): void {\r\n        if (this.shouldLinkToItem() && !event.shiftKey && !event.ctrlKey) {\r\n            this.open.emit(item);\r\n        }\r\n    }\r\n\r\n    removeItem(item: any): void {\r\n        this.remove.emit(item);\r\n    }\r\n\r\n    onDoubleClick(event: MouseEvent, item: any): void {\r\n        if (this.shouldLinkToItem() && !event.shiftKey && !event.ctrlKey) {\r\n            this.open.emit(item);\r\n        }\r\n    }\r\n\r\n    shouldLinkToItem(): boolean {\r\n        const item = this.item();\r\n        const isLinkable = this.isLinkable();\r\n        return this.readOnly() && item && item.uuid && isLinkable && isFunction(isLinkable) && isLinkable(item);\r\n    }\r\n\r\n    getLinkType(): string {\r\n        const item = this.item();\r\n        return item && !this.hideExternalIcon() && (item.sourceLocation || item.dataId) ? 'external' : 'internal';\r\n    }\r\n\r\n    getItemLabels(): StyledItemLabels {\r\n        let result: StyledItemLabels;\r\n\r\n        const styledItemLabelsFunction = this.styledItemLabelsFunction();\r\n        const itemLabelFunction = this.itemLabelFunction();\r\n        if (styledItemLabelsFunction && isFunction(styledItemLabelsFunction)) {\r\n            result = styledItemLabelsFunction.apply(null, [this.item()]) || [];\r\n        } else if (itemLabelFunction && isFunction(itemLabelFunction)) {\r\n            result = [\r\n                {\r\n                    label: itemLabelFunction.apply(null, [this.item()]),\r\n                },\r\n            ];\r\n        } else {\r\n            result = [\r\n                {\r\n                    label: this.textWithIcon()?.text || getItemLabel(this.item()) || '',\r\n                },\r\n            ];\r\n        }\r\n        return result;\r\n    }\r\n\r\n    shouldDisplayPlaceholder(): boolean {\r\n        if (!this.itemPlaceholder()) {\r\n            return false; // nothing props display anyway\r\n        }\r\n\r\n        if (Array.isArray(this.itemLabels) && this.itemLabels.length > 0) {\r\n            if (this.itemLabels.length > 1) {\r\n                return false;\r\n            } else {\r\n                return !this.itemLabels[0].label;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    getAdditionalTexts(): TextWithClass[] | null {\r\n        const additionalTextsFunction = this.additionalTextsFunction();\r\n        return additionalTextsFunction && isFunction(additionalTextsFunction)\r\n            ? additionalTextsFunction.apply(null, [this.item()])\r\n            : null;\r\n    }\r\n\r\n    getEndAdditionalTexts(): TextWithClass[] | null {\r\n        const endAdditionalTextsFunction = this.endAdditionalTextsFunction();\r\n        return endAdditionalTextsFunction && isFunction(endAdditionalTextsFunction)\r\n            ? endAdditionalTextsFunction.apply(null, [this.item()])\r\n            : null;\r\n    }\r\n\r\n    getTypeLabel(): string {\r\n        return this.metamodelManager.getTypeLabel(this.item().__typename);\r\n    }\r\n}\r\n\r\n@Component({\r\n    selector: 'holo-relationship-no-item',\r\n    template: `\r\n        <div\r\n            class=\"holo-relationship-no-item hide-text-overflow\"\r\n            [class.read-only]=\"readOnly()\"\r\n            (click)=\"onClick($event)\"\r\n        >\r\n            <div class=\"hide-text-overflow\">{{ placeholder() }}</div>\r\n        </div>\r\n    `,\r\n    styles: [\r\n        `\r\n            holo-relationship-no-item {\r\n                display: flex;\r\n                flex: 1 1 auto;\r\n                max-width: 100%;\r\n            }\r\n        `,\r\n        /* This is taken from material list */\r\n        `\r\n            .holo-relationship-no-item {\r\n                position: relative;\r\n                display: flex;\r\n                flex-flow: row wrap;\r\n                align-items: center;\r\n                padding: 0.1rem 0.1rem 0.1rem 1.3rem;\r\n                height: 3.2rem;\r\n                width: 100%;\r\n                color: rgb(206, 206, 206);\r\n                box-sizing: border-box;\r\n            }\r\n        `,\r\n        '.holo-relationship-list-item-link { cursor: pointer; }',\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HoloRelationshipNoItemComponent extends HoloRelationshipComponentBase {\r\n    readonly readOnly = input(true);\r\n    readonly placeholder = input('');\r\n    readonly isTextSelectable = input(false);\r\n    readonly clickWhenEmpty = output<Event>();\r\n\r\n    onClick(event: MouseEvent): void {\r\n        if (!event.shiftKey && !event.ctrlKey) {\r\n            this.clickWhenEmpty.emit(event);\r\n        }\r\n    }\r\n}\r\n","import { insertImageToEditor, isFileExceedSize, resizeImageToLimitedSize } from '@holocentric/angular-common';\r\nimport { Editor } from 'tinymce';\r\n\r\ndeclare const tinymce: any;\r\n\r\n/**\r\n * Default dimensions for image formats that preserve their original properties.\r\n * Used for GIF, SVG, BMP files when actual dimensions cannot be determined.\r\n * These values are intentionally modest to avoid exceeding size limits while providing\r\n * reasonable display dimensions for typical use cases.\r\n */\r\nconst DEFAULT_PRESERVE_FORMAT_DIMENSIONS = {\r\n    WIDTH: 200, // Reasonable width for small to medium images\r\n    HEIGHT: 150, // 4:3 aspect ratio, commonly used for web images\r\n} as const;\r\n\r\n/**\r\n * Helper function to get default dimensions for formats that preserve their original properties.\r\n * Returns dimensions that are safe for all image formats and won't exceed typical size limits.\r\n */\r\nconst getDefaultPreserveDimensions = () => {\r\n    return resizeImageToLimitedSize(\r\n        DEFAULT_PRESERVE_FORMAT_DIMENSIONS.WIDTH,\r\n        DEFAULT_PRESERVE_FORMAT_DIMENSIONS.HEIGHT,\r\n    );\r\n};\r\n\r\nconst setup = (editor: any, url: any) => {\r\n    editor.ui.registry.addButton('holo-image', {\r\n        icon: 'image',\r\n        tooltip: 'Insert image',\r\n        classes: 'holo-richtext-button holo-image-button',\r\n        onAction: () => {\r\n            editor.execCommand('holoShowUploadImage');\r\n        },\r\n        stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image',\r\n    });\r\n\r\n    editor.addCommand('holoShowUploadImage', () => {\r\n        const imageDialog: ImageDialog = new ImageDialog(editor);\r\n        imageDialog.show();\r\n    });\r\n\r\n    // This command handles the actual upload process\r\n    editor.addCommand('holoUploadImage', () => {});\r\n};\r\n\r\nexport class ImageDialog {\r\n    private fileInput: HTMLInputElement | undefined;\r\n    private window: any;\r\n    private height: number | undefined;\r\n    private width: number | undefined;\r\n\r\n    private windowItems: any = {\r\n        type: 'panel',\r\n        items: [\r\n            {\r\n                type: 'urlinput',\r\n                name: 'fileName',\r\n                filetype: 'image',\r\n                label: 'Source',\r\n            },\r\n            {\r\n                type: 'button',\r\n                name: 'uploadFileButton',\r\n                buttonType: 'primary',\r\n                text: 'Select',\r\n            },\r\n            // Size input kept for backwards compatibility and manual adjustment if needed\r\n            { type: 'sizeinput', name: 'size', label: 'Dimensions', constrain: true },\r\n        ],\r\n    };\r\n\r\n    constructor(private editor: Editor) {}\r\n\r\n    public show(): void {\r\n        // Simple default dialog\r\n        const window = this.editor.windowManager.open({\r\n            title: 'Insert image',\r\n            body: this.windowItems,\r\n            buttons: [\r\n                {\r\n                    type: 'submit',\r\n                    name: 'submitButton',\r\n                    text: 'Ok',\r\n                    buttonType: 'primary',\r\n                },\r\n                {\r\n                    type: 'cancel',\r\n                    name: 'closeButton',\r\n                    text: 'Cancel',\r\n                },\r\n            ],\r\n            onChange: () => this.onChange(),\r\n            onSubmit: (event: any) => this.onSubmit(event),\r\n            onAction: (event, detail) => this.onAction(event, detail),\r\n        });\r\n\r\n        const fileInput = document.createElement('input');\r\n\r\n        fileInput.setAttribute('type', 'file');\r\n        fileInput.setAttribute('accept', '.jpg, .jpeg, .png, .svg, .gif, .bmp, .tiff, .tif');\r\n        fileInput.style.visibility = 'hidden';\r\n\r\n        fileInput.onchange = () => {\r\n            const file = fileInput.files ? fileInput.files[0] : null;\r\n\r\n            if (file) {\r\n                window.setData({ fileName: { value: file.name, meta: { file: file } } });\r\n                this.calcSize(file);\r\n            }\r\n        };\r\n\r\n        // window.$el.append(fileInput);\r\n\r\n        this.fileInput = fileInput;\r\n\r\n        this.window = window;\r\n    }\r\n\r\n    private onChange(): void {\r\n        this.recalcSize();\r\n    }\r\n\r\n    private onSubmit(event: any): void {\r\n        const data = event.getData();\r\n\r\n        if (data) {\r\n            const file: File = data?.fileName?.meta?.file;\r\n\r\n            if (!isFileExceedSize(file)) {\r\n                const width = parseInt(data.size?.width, 10);\r\n                const height = parseInt(data.size?.height, 10);\r\n\r\n                // Pass dimensions if available, insertImageToEditor will handle format-specific logic\r\n                const size = width && height ? { width, height } : undefined;\r\n\r\n                insertImageToEditor(this.editor, file, size);\r\n                this.window.close();\r\n            } else {\r\n                this.editor.notificationManager.open({\r\n                    text: 'The inserted image cannot be larger than 25mb.',\r\n                    type: 'error',\r\n                });\r\n                this.window.close();\r\n            }\r\n        }\r\n    }\r\n\r\n    private onAction(event: any, detail: any): void {\r\n        if (detail.name === 'uploadFileButton' && this.fileInput) {\r\n            this.fileInput.click();\r\n        }\r\n    }\r\n\r\n    private calcSize(file: File): void {\r\n        // Always try to read actual dimensions first, regardless of format\r\n        const fileReader = new FileReader();\r\n\r\n        fileReader.onload = () => {\r\n            const image = new Image();\r\n\r\n            image.onload = () => {\r\n                // Successfully read dimensions - use actual size\r\n                const { resizedWidth, resizedHeight } = resizeImageToLimitedSize(image.width, image.height);\r\n                this.window.setData({ size: { width: resizedWidth.toString(), height: resizedHeight.toString() } });\r\n                this.width = resizedWidth;\r\n                this.height = resizedHeight;\r\n            };\r\n\r\n            image.onerror = () => {\r\n                // Failed to read dimensions (likely GIF, SVG, or corrupted file) - use safe defaults\r\n                const { resizedWidth, resizedHeight } = getDefaultPreserveDimensions();\r\n                this.window.setData({ size: { width: resizedWidth.toString(), height: resizedHeight.toString() } });\r\n                this.width = resizedWidth;\r\n                this.height = resizedHeight;\r\n            };\r\n\r\n            image.src = fileReader.result as string;\r\n        };\r\n\r\n        fileReader.onerror = () => {\r\n            // FileReader failed - use safe default dimensions\r\n            const { resizedWidth, resizedHeight } = getDefaultPreserveDimensions();\r\n            this.window.setData({ size: { width: resizedWidth.toString(), height: resizedHeight.toString() } });\r\n            this.width = resizedWidth;\r\n            this.height = resizedHeight;\r\n        };\r\n\r\n        fileReader.readAsDataURL(file);\r\n    }\r\n\r\n    // Recalculate dimensions based on constraint settings - mainly for resizable formats\r\n    private recalcSize(): void {\r\n        const data = this.window.getData();\r\n\r\n        let width = parseInt(data['size']['width'], 10);\r\n        let height = parseInt(data['size']['height'], 10);\r\n        const shouldConstrain: boolean = data['constrain'];\r\n\r\n        // Only recalculate if we have original dimensions and constraint is enabled\r\n        if (shouldConstrain && this.width && this.height && width && height) {\r\n            if (this.width !== width) {\r\n                height = Math.round((width / this.width) * this.height);\r\n                if (isNaN(height)) {\r\n                    height = this.height;\r\n                }\r\n            } else {\r\n                width = Math.round((height / this.height) * this.width);\r\n                if (isNaN(width)) {\r\n                    width = this.width;\r\n                }\r\n            }\r\n\r\n            // Apply size limits and update\r\n            const { resizedWidth, resizedHeight } = resizeImageToLimitedSize(width, height);\r\n            this.window.setData({ size: { width: resizedWidth.toString(), height: resizedHeight.toString() } });\r\n            this.width = resizedWidth;\r\n            this.height = resizedHeight;\r\n        }\r\n    }\r\n}\r\n\r\ntinymce.PluginManager.add('holo-image', setup);\r\n\r\nexport default () => {};\r\n","import { Editor, TinyMCE } from 'tinymce';\r\n\r\nexport const insertMenuButtonName = 'holo-insert';\r\n\r\n// https://github.com/tinymce/tinymce-angular/blob/main/tinymce-angular-component/src/main/ts/editor/editor.component.ts\r\n// type EditorOptions = Parameters<TinyMCE['init']>[0];\r\nexport type TinyMceConfig = Parameters<TinyMCE['init']>[0];\r\n\r\nexport const defaultRichtextConfig: TinyMceConfig = {\r\n    statusbar: false,\r\n    branding: false,\r\n    inline: true,\r\n    menubar: false,\r\n    table_appearance_options: false,\r\n    table_sizing_mode: 'responsive',\r\n    // paste_enable_default_filters: false,\r\n    paste_postprocess: (editor, args) => postprocessTinyMcePaste(editor, args),\r\n    table_default_attributes: {\r\n        border: '1',\r\n        width: '100%',\r\n        'max-width': '100%',\r\n        class: '',\r\n    },\r\n    table_default_styles: {\r\n        'border-collapsed': 'collapse',\r\n        width: '100%',\r\n        'max-width': '100%',\r\n        'border-style': 'solid',\r\n    },\r\n    table_advtab: false,\r\n    table_cell_advtab: false,\r\n    table_row_advtab: false,\r\n    contextmenu: false,\r\n    plugins: `advlist autoresize autolink lists link charmap preview anchor\r\n            searchreplace visualblocks code\r\n            insertdatetime media table help wordcount placeholder\r\n            holo-insert holo-removeformat holo-image`,\r\n    toolbar: `bold italic underline \r\n            alignleft aligncenter alignright alignjustify \r\n            superscript subscript \r\n            bullist numlist outdent indent \r\n            table ${insertMenuButtonName} \r\n            holo-removeformat`, // Table has broken add column function\r\n    toolbar_persist: true,\r\n    table_toolbar: `tabledelete | tableinsertrowbefore tableinsertrowafter \r\n        tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol`,\r\n    advlist_number_styles: 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman',\r\n    advlist_bullet_styles: 'default,circle,disc,square',\r\n    link_target_list: false,\r\n    link_title: false,\r\n    link_assume_external_targets: 'https',\r\n};\r\n\r\nexport function postprocessTinyMcePaste(plugin: Editor, args: any): void {\r\n    const htmlWrapper = args.node as HTMLElement;\r\n    if (plugin.options.get('holoEditorType') === 'text-discussion-viewer') {\r\n        removeAllFormatting(htmlWrapper);\r\n    }\r\n    postprocessContentInElement(htmlWrapper);\r\n}\r\n\r\nfunction removeAllFormatting(element: HTMLElement): void {\r\n    if (element && element.children) {\r\n        Array.from(element.children).forEach((child: Element) => {\r\n            removeAllFormatting(child as HTMLElement);\r\n        });\r\n    }\r\n\r\n    switch (element.tagName) {\r\n        case 'B':\r\n        case 'STRONG':\r\n        case 'I':\r\n        case 'EM':\r\n        case 'U':\r\n        case 'SUB':\r\n        case 'SUP': {\r\n            const textNode = document.createTextNode(element.textContent || '');\r\n            element.parentNode?.replaceChild(textNode, element);\r\n            break;\r\n        }\r\n        case 'A': {\r\n            const textNode = document.createTextNode(element.textContent || '');\r\n            element.parentNode?.replaceChild(textNode, element);\r\n            break;\r\n        }\r\n        case 'LI': {\r\n            const textNode = document.createTextNode(element.textContent || '');\r\n            const newLi = document.createElement('li');\r\n            newLi.appendChild(textNode);\r\n            element.parentNode?.replaceChild(newLi, element);\r\n            break;\r\n        }\r\n        case 'UL': {\r\n            const newUl = document.createElement('ul');\r\n            Array.from(element.children).forEach((value: Element) => {\r\n                newUl.appendChild(value.cloneNode(true));\r\n            });\r\n            element.parentNode?.replaceChild(newUl, element);\r\n            break;\r\n        }\r\n        case 'OL': {\r\n            const newOl = document.createElement('ol');\r\n            Array.from(element.children).forEach((value: Element) => {\r\n                newOl.appendChild(value.cloneNode(true));\r\n            });\r\n            element.parentNode?.replaceChild(newOl, element);\r\n            break;\r\n        }\r\n        case 'SPAN': {\r\n            const textNode = document.createTextNode(element.textContent || '');\r\n            element.parentNode?.replaceChild(textNode, element);\r\n            break;\r\n        }\r\n        default: {\r\n            element.removeAttribute('style');\r\n            element.removeAttribute('class');\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\nexport function postprocessContentInElement(element: HTMLElement): void {\r\n    element.removeAttribute('class');\r\n\r\n    if (element && element.children) {\r\n        Array.from(element.children).forEach((child: Element) => {\r\n            postprocessContentInElement(child as HTMLElement);\r\n        });\r\n    }\r\n\r\n    removeUnsupportedStyles(element);\r\n    if (element.tagName === 'OL' || element.tagName === 'UL' || element.tagName === 'LI') {\r\n        return;\r\n    }\r\n    switch (element.tagName) {\r\n        case 'TABLE': {\r\n            const tableElement = element as HTMLTableElement;\r\n            tableElement.removeAttribute('width');\r\n            tableElement.removeAttribute('height');\r\n            tableElement.style.setProperty('width', '100%');\r\n            tableElement.style.setProperty('max-width', '100%');\r\n            tableElement.setAttribute('border', '1'); // Prevent the mce-item-table class from being added\r\n            break;\r\n        }\r\n        case 'TBODY':\r\n        case 'TD':\r\n        case 'TH':\r\n        case 'TR': {\r\n            element.removeAttribute('width');\r\n            element.removeAttribute('height');\r\n            element.style.removeProperty('height');\r\n            element.style.removeProperty('width');\r\n            break;\r\n        }\r\n        case 'H1':\r\n        case 'H2':\r\n        case 'H3':\r\n        case 'H4':\r\n        case 'H5':\r\n        case 'H6': {\r\n            const newElement = document.createElement('p');\r\n            // newElement.style.fontWeight = 'bold'; // This sets the tiny-mce-style instead when saved\r\n            newElement.innerHTML = `<strong>${element.innerHTML}</strong>`;\r\n            if (element.parentNode) {\r\n                element.parentNode.replaceChild(newElement, element);\r\n            }\r\n            break;\r\n        }\r\n        case 'B':\r\n        case 'STRONG':\r\n        case 'I':\r\n        case 'EM':\r\n        case 'U':\r\n        case 'LI':\r\n        case 'UL':\r\n        case 'OL':\r\n        case 'SUB':\r\n        case 'SUP':\r\n        case 'P':\r\n        case 'SPAN':\r\n        case 'DIV':\r\n        case 'A': {\r\n            // preserve these tags\r\n            break;\r\n        }\r\n        default: {\r\n            const newElement = document.createElement('p');\r\n            newElement.innerHTML = `${element.innerHTML}`;\r\n            if (element.parentNode) {\r\n                element.parentNode.replaceChild(newElement, element);\r\n            }\r\n\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\nexport function removeUnsupportedStyles(element: HTMLElement): void {\r\n    const styles = getComputedStyle(element);\r\n\r\n    if (element.style.textIndent && element.style.textIndent.startsWith('-')) {\r\n        element.style.removeProperty('text-indent');\r\n    }\r\n\r\n    if (element.className.includes('MsoListParagraph')) {\r\n        if (element.lastChild) element.replaceChildren(element.lastChild);\r\n    }\r\n\r\n    for (const style in styles) {\r\n        if (style) {\r\n            switch (style) {\r\n                case 'text-decoration': {\r\n                    // only keep underline\r\n                    if (element.style.getPropertyValue(style) !== 'underline') {\r\n                        element.style.removeProperty(style);\r\n                    }\r\n                    break;\r\n                }\r\n                case 'text-align': {\r\n                    // preserve these styles\r\n                    break;\r\n                }\r\n                default: {\r\n                    element.style.removeProperty(style);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport function stripHtml(html: string): string {\r\n    if (html) {\r\n        const doc = new DOMParser().parseFromString(html, 'text/html');\r\n        return doc.body.textContent || '';\r\n    }\r\n    return '';\r\n}\r\n","import { insertMenuButtonName } from '../tinymce';\r\n\r\ndeclare const tinymce: any;\r\n\r\nconst setup = (editor: any, url: any) => {\r\n    editor.ui.registry.addButton(insertMenuButtonName, {\r\n        type: 'menubutton',\r\n        text: 'Insert',\r\n        classes: 'holo-richtext-button holo-insertmenu-button',\r\n        menu: [\r\n            {\r\n                text: 'Insert Image',\r\n                onAction: () => {\r\n                    editor.execCommand('holoShowUploadImage');\r\n                },\r\n            },\r\n            {\r\n                text: 'Special Character',\r\n                onAction: () => {\r\n                    editor.execCommand('mceShowCharmap');\r\n                },\r\n            },\r\n            {\r\n                text: 'External Link',\r\n                onAction: () => {\r\n                    editor.execCommand('mceLink');\r\n                },\r\n            },\r\n        ],\r\n    });\r\n};\r\n\r\ntinymce.PluginManager.add('holo-insert', setup);\r\n\r\nexport default () => {};\r\n","declare const tinymce: any;\r\n\r\nconst setup = (editor: any, url: any) => {\r\n    editor.ui.registry.addButton('holo-removeformat', {\r\n        classes: 'holo-richtext-button holo-removeformat-button',\r\n        text: 'Clear Styles',\r\n        onAction: () => {\r\n            editor.execCommand('RemoveFormat');\r\n            editor.execCommand('RemoveList');\r\n        },\r\n    });\r\n};\r\n\r\ntinymce.PluginManager.add('holo-removeformat', setup);\r\n\r\nexport default () => {};\r\n","import { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { Component, DestroyRef, inject, OnInit } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { AbstractControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { BehaviorSubject, first } from 'rxjs';\r\nimport tinymce, { RawEditorOptions } from 'tinymce';\r\n\r\nimport { MatButton } from '@angular/material/button';\r\nimport { EditorComponent } from '@tinymce/tinymce-angular';\r\nimport { PropsWithAdditionalProperties } from '../formly.model';\r\nimport { stripHtml } from '../tinymce';\r\n\r\nexport interface HoloRichtextDialogData {\r\n    modalTitle: string;\r\n    richtextConfig: RawEditorOptions;\r\n    props: PropsWithAdditionalProperties;\r\n    formControl: AbstractControl;\r\n    componentToolbarId: string;\r\n    editorId: string;\r\n    charLimit?: number;\r\n    errorMessage?: string;\r\n}\r\n\r\ninterface Command {\r\n    name: string;\r\n    label: string;\r\n    isVisible: Function;\r\n    styles: string;\r\n}\r\n\r\n@Component({\r\n    templateUrl: 'holo-richtext-dialog.component.html',\r\n    styleUrls: ['formly-field-error.css', 'shared-richtext.css', 'holo-richtext-dialog.component.css'],\r\n    imports: [CdkScrollable, MatDialogContent, EditorComponent, ReactiveFormsModule, MatDialogActions, MatButton],\r\n})\r\nexport class HoloRichtextDialogComponent implements OnInit {\r\n    private dialogRef = inject<MatDialogRef<HoloRichtextDialogComponent>>(MatDialogRef);\r\n\r\n    charCount = 0;\r\n    commands: Command[] = [];\r\n    data: HoloRichtextDialogData = inject(MAT_DIALOG_DATA);\r\n    isRichTextLoading$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n    private destroyRef = inject(DestroyRef);\r\n\r\n    ngOnInit(): void {\r\n        this.commands = [\r\n            {\r\n                name: 'cancel',\r\n                label: 'Cancel',\r\n                isVisible: () => !this.data.props.readOnly,\r\n                styles: 'rounded-action-button delete-button',\r\n            },\r\n            {\r\n                name: 'close',\r\n                label: this.data.props.readOnly ? 'Close' : 'OK',\r\n                isVisible: () => true,\r\n                styles: 'rounded-action-button',\r\n            },\r\n        ];\r\n        if (this.data?.charLimit) {\r\n            this.data.formControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\r\n                this.charCount = this.getRichtextCharCount(value);\r\n            });\r\n        }\r\n        this.isRichTextLoading$ = this.data.props.isRichTextLoading$ ?? new BehaviorSubject<boolean>(false);\r\n    }\r\n\r\n    onPerformCommand(command: any) {\r\n        this.isRichTextLoading$.pipe(first((isLoading) => !isLoading)).subscribe(() => {\r\n            const editorContent = tinymce.activeEditor ? tinymce.activeEditor.getContent() : null;\r\n            this.dialogRef.close({ value: editorContent, isCancelled: command.name === 'cancel' });\r\n        });\r\n    }\r\n\r\n    getRichtextCharCount(value: string): number {\r\n        let trimmedValue = '';\r\n        //get text from editor innerHtml if the editor contains only space or empty\r\n        if (value === '' && tinymce.activeEditor) {\r\n            trimmedValue = tinymce.activeEditor.getElement().innerText;\r\n        } else {\r\n            // TODO: requires es2022\r\n            // trimmedValue = value.replaceAll('<p>&nbsp;</p>', '<p></p>');\r\n        }\r\n\r\n        const charCount = stripHtml(trimmedValue).length;\r\n\r\n        return charCount;\r\n    }\r\n}\r\n","<h2 mat-dialog-title>\r\n    <div class=\"title-container\">\r\n        {{ data.modalTitle }}\r\n    </div>\r\n</h2>\r\n<mat-dialog-content class=\"holo-dialog-content display-flex flex-grow bg-white\">\r\n    @if (data) {\r\n        <div class=\"holo-richtext-wrapper display-flex flex-column overflow-hidden\">\r\n            @if (data.props.contextLabel) {\r\n                <div class=\"context-label\" [innerHTML]=\"data.props.contextLabel\"></div>\r\n            }\r\n            <div [id]=\"data.componentToolbarId\" class=\"tinymce-toolbar display-flex align-items-center\"></div>\r\n            <editor\r\n                [id]=\"data.editorId\"\r\n                [formControl]=\"data.formControl\"\r\n                [init]=\"data.richtextConfig\"\r\n                [toolbar]=\"data.props.toolbar\"\r\n            ></editor>\r\n            @if (data.errorMessage) {\r\n                <div class=\"modal-error-message\">\r\n                    <div class=\"text\">{{ data.errorMessage }}</div>\r\n                </div>\r\n            }\r\n        </div>\r\n    }\r\n</mat-dialog-content>\r\n<mat-dialog-actions class=\"holo-dialog-actions\">\r\n    @if (data.charLimit) {\r\n        <div\r\n            class=\"character-limit\"\r\n            [class.color-red]=\"charCount > (data.charLimit || 0)\"\r\n            [class.character-limit-text-color]=\"charCount <= (data.charLimit || 0)\"\r\n        >\r\n            Used {{ charCount }} of {{ data.charLimit }} character limit\r\n        </div>\r\n    }\r\n    <div class=\"fill-remaining\"></div>\r\n    <div class=\"button-area\">\r\n        @for (command of commands; track command) {\r\n            @if (command.isVisible()) {\r\n                <button mat-button disableRipple [class]=\"command.styles\" (click)=\"onPerformCommand(command)\">\r\n                    {{ command.label }}\r\n                </button>\r\n            }\r\n        }\r\n    </div>\r\n</mat-dialog-actions>\r\n","import { Component, DestroyRef, OnDestroy, OnInit, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { RichTextDirective, RichTextImageService, getImageFormat } from '@holocentric/angular-core';\r\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { BehaviorSubject, EMPTY, Observable, forkJoin, of } from 'rxjs';\r\nimport { first, map, tap } from 'rxjs/operators';\r\nimport { FORMLY_FIELD_RICHTEXT_CONFIG } from '../formly.manager';\r\nimport { PropsWithAdditionalProperties } from '../formly.model';\r\nimport { TinyMceConfig } from '../tinymce';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n/* Import TinyMCE */\r\nimport 'tinymce';\r\n\r\n/* Default icons are required. After that, import custom icons if applicable */\r\nimport 'tinymce/icons/default/index.js';\r\n\r\n/* Required TinyMCE components */\r\nimport 'tinymce/models/dom/index.js';\r\nimport 'tinymce/themes/silver/index.js';\r\n\r\n/* Import plugins */\r\nimport 'tinymce/plugins/advlist/index.js';\r\nimport 'tinymce/plugins/code/index.js';\r\nimport 'tinymce/plugins/emoticons/index.js';\r\nimport 'tinymce/plugins/emoticons/js/emojis.js';\r\nimport 'tinymce/plugins/link/index.js';\r\nimport 'tinymce/plugins/lists/index.js';\r\nimport 'tinymce/plugins/table/index.js';\r\n\r\n/* Our TinyMCE plugins */\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport {\r\n    insertImageToEditor,\r\n    isFileExceedSize,\r\n    resizeImageToLimitedSize,\r\n    resizeOverLargeImage,\r\n} from '@holocentric/angular-common';\r\nimport { EditorComponent } from '@tinymce/tinymce-angular';\r\nimport { Bookmark, Editor, RawEditorOptions } from 'tinymce';\r\nimport '../tinymce-plugins/tinymce-holo-image-plugin';\r\nimport '../tinymce-plugins/tinymce-holo-insert-dropdown-plugin';\r\nimport '../tinymce-plugins/tinymce-holo-removeformat-plugin';\r\nimport { HoloCommandsComponent } from './holo-commands';\r\nimport { HoloRichtextDialogComponent, HoloRichtextDialogData } from './holo-richtext-dialog.component';\r\n\r\nexport interface RichTextProps extends PropsWithAdditionalProperties {\r\n    imageService: RichTextImageService;\r\n    onFetchImageError?: (error: any) => void;\r\n    isLoading?: (bool: boolean) => void;\r\n    onUploadImage: (file: File) => Observable<string>;\r\n    isRichTextLoading$: BehaviorSubject<boolean>;\r\n    init_instance_callback?: (editor: any) => void;\r\n}\r\n\r\ndeclare const tinymce: any;\r\n@Component({\r\n    selector: 'formly-field-richtext',\r\n    templateUrl: 'holo-richtext.html',\r\n    styleUrls: ['formly-field-error.css', 'shared-richtext.css', 'holo-richtext.css'],\r\n    imports: [RichTextDirective, EditorComponent, ReactiveFormsModule, FormlyModule, HoloCommandsComponent, AsyncPipe],\r\n})\r\nexport class HoloRichtextAreaField extends HoloFieldType implements OnInit, OnDestroy {\r\n    formlyRichtextConfig = inject<TinyMceConfig>(FORMLY_FIELD_RICHTEXT_CONFIG);\r\n    private dialog = inject(MatDialog);\r\n\r\n    fullScreen = false;\r\n    editor: Editor | null = null;\r\n    richtextConfig: TinyMceConfig = {};\r\n    isFullScreenIconVisible$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n    bookmark: Bookmark | undefined;\r\n\r\n    private destroyRef = inject(DestroyRef);\r\n\r\n    getErrorMessage: (name?: string) => string | null = this.getTextInputErrorMessage;\r\n\r\n    static transformToFormProperties({\r\n        data,\r\n        key,\r\n        field,\r\n    }: {\r\n        data: any;\r\n        key: string;\r\n        field: FormlyFieldConfig;\r\n    }): Observable<string> {\r\n        const content = cleanHtmlForForm(data[key]);\r\n\r\n        if (field.props && content) {\r\n            const imageService = field.props.imageService;\r\n            const isLoading = field.props.isLoading;\r\n            const onFetchImageError = field.props.onFetchImageError;\r\n\r\n            return fetchImages({\r\n                content,\r\n                imageService,\r\n                isLoading,\r\n                onFetchImageError,\r\n            });\r\n        }\r\n        return EMPTY;\r\n    }\r\n\r\n    static transformToItemProperties({\r\n        controlValue,\r\n        key,\r\n    }: {\r\n        controlValue: string;\r\n        key: string;\r\n    }): Record<string, string> {\r\n        const result = {\r\n            [key]: controlValue,\r\n        };\r\n        if (controlValue) {\r\n            const parser = new DOMParser();\r\n\r\n            const html = parser.parseFromString(controlValue, 'text/html');\r\n            const elements = html.getElementsByTagName('img');\r\n\r\n            if (elements.length > 0) {\r\n                let hasModifiedElement = false;\r\n                for (let i = 0; i < elements.length; ++i) {\r\n                    const element = elements.item(i);\r\n                    if (element?.dataset.uuid) {\r\n                        element.removeAttribute('src');\r\n                        element.removeAttribute('data-src');\r\n                        hasModifiedElement = true;\r\n                    }\r\n                }\r\n                if (hasModifiedElement) {\r\n                    result[key] = html.body.innerHTML;\r\n                }\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.richtextConfig = this.initRichtextConfig(this.componentToolbarId, this.props?.hideToolbar);\r\n        this.evaluateFullScreenIconVisibility();\r\n        this.formControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n            this.evaluateFullScreenIconVisibility();\r\n        });\r\n    }\r\n\r\n    get componentToolbarId(): string {\r\n        if (!this.field) {\r\n            return 'toolbar-loading';\r\n        }\r\n        return `toolbar-${this.field.id}`;\r\n    }\r\n\r\n    get editorId(): string {\r\n        if (!this.field) {\r\n            return 'editor-loading';\r\n        }\r\n        return `editor-${this.field.id}`;\r\n    }\r\n\r\n    get dialogHeading(): string {\r\n        const props = this.props;\r\n        return props.headingLabel\r\n            ? props.headingLabel\r\n            : props.readOnly && props.label\r\n              ? this.getHeadingLabel(props.label)\r\n              : 'Edit ' + this.getHeadingLabel(props.label);\r\n    }\r\n\r\n    private initRichtextConfig(componentToolbarId: string, hideToolbar?: boolean): TinyMceConfig {\r\n        // https://stackoverflow.com/questions/23105694/how-to-make-tinymce-4-toolbar-external-and-always-visible\r\n        const toolbarSettings = {\r\n            inline: true,\r\n            fixed_toolbar_container: `#${componentToolbarId}`,\r\n        };\r\n\r\n        const init_instance_callback = this.init_instance_callback;\r\n        let config: RawEditorOptions = { ...this.formlyRichtextConfig, init_instance_callback };\r\n        if (this.props) {\r\n            config = {\r\n                ...config,\r\n                ...this.props.settings,\r\n                placeholder: this.props.placeholder,\r\n            };\r\n        }\r\n        if (hideToolbar) {\r\n            config = { ...config, toolbar: false, toolbar_persist: false };\r\n        } else {\r\n            config = { ...config, ...toolbarSettings };\r\n        }\r\n\r\n        return config;\r\n    }\r\n\r\n    get init_instance_callback(): (editor: Editor) => void {\r\n        const defaultInitInstanceCallback = (editor: Editor) => {\r\n            this.editor = editor;\r\n\r\n            if (editor && editor.bodyElement) {\r\n                (editor.bodyElement as HTMLElement).setAttribute('spellcheck', 'true');\r\n                // This will trick the editor into thinking it was focused so toolbar appears\r\n                // without actually keeping focus\r\n                if (this.props.showToolbarOnInit) {\r\n                    editor.dispatch('focus');\r\n                    editor.dispatch('blur');\r\n                }\r\n            }\r\n\r\n            editor.on('focusin', () => {\r\n                this.checkToExpand();\r\n                if (this.bookmark) {\r\n                    editor.selection.moveToBookmark(this.bookmark);\r\n                }\r\n            });\r\n\r\n            editor.on('blur', () => {\r\n                //set timeout to make sure toolbar is hidden\r\n                setTimeout(() => {\r\n                    if (editor.selection) {\r\n                        this.blurActiveElement();\r\n                        if (!this.bookmark) {\r\n                            this.bookmark = editor.selection.getBookmark();\r\n                        }\r\n                    }\r\n                }, 200);\r\n            });\r\n\r\n            editor.on('ExecCommand', (event: any) => {\r\n                if (event.command === 'holoUploadImage') {\r\n                    this.onUploadImage(event.value);\r\n                }\r\n            });\r\n\r\n            editor.on('paste', async (event: any) => {\r\n                const editorType = editor.options.get('holoEditorType');\r\n                //enum from model-apt-dt/rich-text-support.service.ts, TODO: refactor the enum into angular project\r\n                const editorTypesDisablingImagePasting = [\r\n                    'text-glossary',\r\n                    'text-changeSummary',\r\n                    'text-discussion-editor',\r\n                    'text-discussion-viewer',\r\n                ];\r\n\r\n                if (editorTypesDisablingImagePasting.includes(editorType)) {\r\n                    return;\r\n                }\r\n\r\n                const files = event?.clipboardData?.files ?? [];\r\n                if (files.length > 0) {\r\n                    const file = files[0];\r\n\r\n                    if (isFileExceedSize(file)) {\r\n                        editor.notificationManager.open({\r\n                            text: 'The pasted image cannot be larger than 25mb.',\r\n                            type: 'error',\r\n                        });\r\n\r\n                        return;\r\n                    }\r\n\r\n                    const { resizedWidth, resizedHeight } = await resizeOverLargeImage(file);\r\n\r\n                    insertImageToEditor(editor, file, {\r\n                        width: resizedWidth,\r\n                        height: resizedHeight,\r\n                    });\r\n                }\r\n            });\r\n\r\n            editor.on('ObjectResized', (event: any) => {\r\n                if (event.target?.clientWidth && event.target?.clientHeight) {\r\n                    const { resizedWidth, resizedHeight } = resizeImageToLimitedSize(\r\n                        event.target.clientWidth ?? 0,\r\n                        event.target.clientHeight ?? 0,\r\n                    );\r\n\r\n                    event.target.width = resizedWidth;\r\n                    event.target.height = resizedHeight;\r\n                }\r\n            });\r\n        };\r\n\r\n        let result = defaultInitInstanceCallback;\r\n        const moduleConfigInitCallback = this.formlyRichtextConfig.init_instance_callback;\r\n        const propsInitCallback = this.props?.settings?.init_instance_callback;\r\n\r\n        if (moduleConfigInitCallback || propsInitCallback) {\r\n            result = (editor: Editor) => {\r\n                defaultInitInstanceCallback(editor);\r\n                if (typeof moduleConfigInitCallback === 'function') {\r\n                    moduleConfigInitCallback(editor);\r\n                }\r\n                if (typeof propsInitCallback === 'function') {\r\n                    propsInitCallback(editor);\r\n                }\r\n            };\r\n        }\r\n        return result;\r\n    }\r\n\r\n    blurActiveElement(): void {\r\n        const activeElement = document.activeElement as HTMLElement;\r\n        if (activeElement) {\r\n            activeElement.blur();\r\n        }\r\n    }\r\n\r\n    checkToExpand(): void {\r\n        if (!this.fullScreen && this.props.expandOnClick) {\r\n            this.toggleFullScreen(true);\r\n        }\r\n    }\r\n\r\n    toggleFullScreen(isFullScreen?: boolean): void {\r\n        this.fullScreen = isFullScreen ?? !this.fullScreen;\r\n\r\n        if (this.fullScreen) {\r\n            this.onEnterFullScreen();\r\n        }\r\n    }\r\n\r\n    onEnterFullScreen(): void {\r\n        const componentToolbarId = this.componentToolbarId + '-fullscreen';\r\n        const editorId = this.editorId + '-fullscreen';\r\n        const dialogConfig: MatDialogConfig<HoloRichtextDialogData> = {\r\n            data: {\r\n                modalTitle: this.dialogHeading,\r\n                richtextConfig: this.initRichtextConfig(componentToolbarId),\r\n                props: { ...this.props, isDialogRichText: true },\r\n                formControl: new FormControl(this.formControl.value),\r\n                componentToolbarId,\r\n                editorId,\r\n            },\r\n            width: '90%',\r\n            height: '90%',\r\n            position: {\r\n                top: '3vh',\r\n            },\r\n            panelClass: ['holo-dialog', 'full-screen-dialog'],\r\n            disableClose: true,\r\n        };\r\n        this.blurActiveElement();\r\n        const dialogRef = this.dialog.open(HoloRichtextDialogComponent, dialogConfig);\r\n        dialogRef.afterClosed().subscribe((dialogResult) => {\r\n            this.fullScreen = false;\r\n            this.blurActiveElement();\r\n            if (dialogResult && !dialogResult?.isCancelled) {\r\n                this.formControl.setValue(dialogResult.value);\r\n                this.formControl.markAsDirty();\r\n            }\r\n        });\r\n    }\r\n\r\n    evaluateFullScreenIconVisibility(): void {\r\n        let visibility = !this.props.readOnly && !this.props.hideFullScreenIcon;\r\n        if (visibility && this.props.maxHeight) {\r\n            // if maxHeight defined then have to check whether content exists, otherwise icon may show over scroll bar\r\n            visibility = !this.formControl.value;\r\n        }\r\n        this.isFullScreenIconVisible$.next(visibility);\r\n    }\r\n\r\n    getHeadingLabel(label: string | undefined): string {\r\n        return label && label.endsWith(':') ? label.slice(0, -1) : label || ''; // Removes the colon in the tag\r\n    }\r\n\r\n    onLinkClick(item: PointerEvent): void {\r\n        if (typeof this.props.onLinkClick === 'function') {\r\n            this.props.onLinkClick(item, this.props.context);\r\n        }\r\n    }\r\n\r\n    onUploadImage({ srcUrl, file }: { srcUrl: string; file: File }): void {\r\n        const onUploadImage: (file: File) => Observable<string> = this.props.onUploadImage;\r\n        if (onUploadImage && this.editor) {\r\n            const isLoading = this.props.isLoading;\r\n            if (typeof isLoading === 'function') {\r\n                isLoading(true);\r\n            }\r\n            onUploadImage(file)\r\n                .pipe(first(Boolean))\r\n                .subscribe((imageKey: string) => {\r\n                    const filenameParts: string[] = file.name.split('.');\r\n                    const extension: string = filenameParts[filenameParts.length - 1];\r\n\r\n                    //using setContent after modifying the image will reset the editor content, hence moving the cursor to the start\r\n                    if (this.editor) {\r\n                        const contentDocument = this.editor.getDoc();\r\n                        const imgElement = contentDocument.querySelector(`img[data-src=\"${srcUrl}\"]`);\r\n                        if (imgElement) {\r\n                            imgElement.setAttribute('data-uuid', imageKey);\r\n                            imgElement.setAttribute('data-format', extension);\r\n                        }\r\n                    }\r\n\r\n                    if (typeof isLoading === 'function') {\r\n                        isLoading(false);\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    // Called after EditorComponent.initEditor\r\n    onEditorInit(editor: any): void {\r\n        /* First reported in MMX-4356. Tinymce form control is marked as dirty when loading images\r\n        Turns out in https://github.com/tinymce/tinymce-angular/blob/0d345d6832ca613609020432fd5bdfa2cb5eb406/tinymce-angular-component/src/main/ts/editor/editor.component.ts\r\n        There's code:\r\n            editor.setContent(this.initialValue);\r\n            if (editor.getContent() !== this.initialValue) {\r\n                this.onChangeCallback(editor.getContent({ format: this.outputFormat }));\r\n            }\r\n        In our case, setContent would have '<img width=\"xx\" height=\"yy\" src=\"blob:...\" ...\r\n        getContent would return '<img src=\"blob:...\" width=\"xx\" height=\"yy\" ...\r\n        This caused the form control to be dirty. Hence we want to set it as pristine here\r\n        */\r\n        if (this.formControl.dirty) {\r\n            this.formControl.markAsPristine();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        if (this.editor) {\r\n            tinymce.remove(this.editor);\r\n        }\r\n    }\r\n}\r\n\r\nexport function cleanHtmlForForm(content: string): string | null {\r\n    if (content) {\r\n        const parser = new DOMParser();\r\n        const html = parser.parseFromString(content, 'text/html');\r\n        const elements = html.getElementsByTagName('li');\r\n        for (let i = 0; i < elements.length; ++i) {\r\n            const element = elements.item(i);\r\n            if (element) {\r\n                element.removeAttribute('value');\r\n            }\r\n        }\r\n        return html.body.innerHTML;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport function fetchImages({\r\n    content,\r\n    imageService,\r\n    isLoading,\r\n    onFetchImageError,\r\n}: {\r\n    content: string;\r\n    imageService: RichTextImageService;\r\n    isLoading: (bool: boolean) => void;\r\n    onFetchImageError?: (error: any) => void;\r\n}): Observable<string> {\r\n    if (imageService) {\r\n        const parser = new DOMParser();\r\n        const html = parser.parseFromString(content, 'text/html');\r\n        const elements = html.getElementsByTagName('img');\r\n        const imageResults$: Observable<{ element: HTMLImageElement; src: string }>[] = [];\r\n        for (let i = 0; i < elements.length; ++i) {\r\n            const element = elements.item(i);\r\n            if (element) {\r\n                const imageKey = element.dataset.uuid;\r\n                if (imageKey && !element.hasAttribute('src')) {\r\n                    const imageFormat = getImageFormat(element.dataset.format);\r\n                    imageResults$.push(\r\n                        imageService\r\n                            .getImageUrl({\r\n                                imageKey,\r\n                                imageFormat,\r\n                            })\r\n                            .pipe(\r\n                                first(),\r\n                                map((src) => ({ element, src })),\r\n                            ),\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        if (imageResults$.length > 0) {\r\n            isLoading(true);\r\n            return forkJoin(imageResults$).pipe(\r\n                map((results) => {\r\n                    results.forEach(({ element, src }) => {\r\n                        element.src = src;\r\n                    });\r\n                    return html.body.innerHTML;\r\n                }),\r\n                tap({\r\n                    next: () => null,\r\n                    error: (error) => {\r\n                        isLoading(false);\r\n                        if (typeof onFetchImageError === 'function') {\r\n                            onFetchImageError(error);\r\n                        }\r\n                    },\r\n                    complete: () => {\r\n                        isLoading(false);\r\n                    },\r\n                }),\r\n            );\r\n        }\r\n    }\r\n    return of(content);\r\n}\r\n","<div\r\n    class=\"holo-richtext-wrapper\"\r\n    [class.no-toolbar]=\"props.hideToolbar\"\r\n    [class.read-only]=\"props.readOnly\"\r\n    [class.expand-on-click]=\"props.expandOnClick\"\r\n>\r\n    @if (props.label && !props.hideLabel) {\r\n        <label class=\"formly-richtext-label formly-field-label hide-text-overflow\">{{ props.label }}</label>\r\n    }\r\n    <div class=\"formly-richtext-validation-wrapper\">\r\n        <div\r\n            [class.icon]=\"props.showValidationIcon\"\r\n            [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n            [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && formControl.errors.invalid\"\r\n        ></div>\r\n        <div class=\"formly-field-error-container richtext-error-container\">\r\n            <div class=\"tinymce-container overflow-hidden\">\r\n                @if (props.readOnly) {\r\n                    <div class=\"richtext-mock-padding\" [class.borderless]=\"props.hideBorder\">\r\n                        <div\r\n                            class=\"richtext-mock\"\r\n                            [style.maxHeight]=\"props.maxHeight\"\r\n                            [holoRichText]=\"formControl.value\"\r\n                            (linkClick)=\"onLinkClick($event)\"\r\n                            [class.selectable]=\"props.isTextSelectable\"\r\n                        ></div>\r\n                    </div>\r\n                } @else {\r\n                    <div [id]=\"componentToolbarId\" class=\"tinymce-toolbar display-flex align-items-center\"></div>\r\n                    <editor\r\n                        [id]=\"editorId\"\r\n                        [formControl]=\"formControl\"\r\n                        [disabled]=\"props.readOnly\"\r\n                        [init]=\"richtextConfig\"\r\n                        [toolbar]=\"props.toolbar\"\r\n                        [style.maxHeight]=\"props.maxHeight\"\r\n                        (onInitNgModel)=\"onEditorInit($event)\"\r\n                    ></editor>\r\n                }\r\n                @if (isFullScreenIconVisible$ | async) {\r\n                    <button class=\"custom-ql float-top-right\" type=\"button\" (click)=\"toggleFullScreen()\">\r\n                        <div class=\"full-screen-icon\"></div>\r\n                    </button>\r\n                }\r\n            </div>\r\n            @if (showError) {\r\n                <formly-validation-message\r\n                    [field]=\"field\"\r\n                    class=\"formly-field-error-message\"\r\n                ></formly-validation-message>\r\n            }\r\n            @if (props.errorMessage) {\r\n                <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n            }\r\n        </div>\r\n    </div>\r\n</div>\r\n@if (props.commands$) {\r\n    <formly-commands [commands]=\"props.commands$ | async\" [data]=\"props.data$ | async\"> </formly-commands>\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-text',\r\n    template: `\r\n        <div class=\"formly-text-wrapper\" [class.display-none]=\"props.hideText\">\r\n            <label class=\"formly-text-label hide-text-overflow\">{{\r\n                props.label && !props.hideLabel ? props.label : ''\r\n            }}</label>\r\n            <div [class.icon]=\"props.showValidationIcon\"></div>\r\n            <div class=\"text-wrapper display-flex\">\r\n                @if (icon) {\r\n                    <div class=\"text-icon {{ icon }}\"></div>\r\n                }\r\n                @if (text) {\r\n                    <span class=\"formly-text {{ props.className }}\" [class.hide-text-overflow]=\"hideTextOverflow\">{{\r\n                        text\r\n                    }}</span>\r\n                }\r\n            </div>\r\n        </div>\r\n    `,\r\n    styles: [\r\n        `\r\n            .formly-text,\r\n            .formly-text-label {\r\n                display: block;\r\n            }\r\n\r\n            .text-wrapper {\r\n                display: flex;\r\n                margin-top: 0.6rem;\r\n            }\r\n\r\n            .text-icon {\r\n                margin-right: 0.4rem;\r\n            }\r\n\r\n            .info {\r\n                width: 2.2rem;\r\n                height: 2.2rem;\r\n                min-width: 2.2rem;\r\n                background-repeat: no-repeat;\r\n                background-image: url(data:image/svg+xml;base64,PHN2ZyBpZD0iSW5mb19CdXR0b25fb3V0bGluZSIgZGF0YS1uYW1lPSJJbmZvIEJ1dHRvbiBvdXRsaW5lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyOTIuODU3IDMyNC4wMzkiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDpub25lO3N0cm9rZTojMDA3YWZmO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDoxOXB4O30uY2xzLTJ7Zm9udC1zaXplOjI3NS40MTZweDtmaWxsOiMwMDdhZmY7Zm9udC1mYW1pbHk6VGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCwgVGltZXMgTmV3IFJvbWFuO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXN0eWxlOml0YWxpYzt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmluZm88L3RpdGxlPjxjaXJjbGUgaWQ9Il9QYXRoXyIgZGF0YS1uYW1lPSImbHQ7UGF0aCZndDsiIGNsYXNzPSJjbHMtMSIgY3g9IjE0Ni40MjgiIGN5PSIxNDYuNDI4IiByPSIxMzYuOTI4Ii8+PHRleHQgY2xhc3M9ImNscy0yIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDEuMTY1IDIzOS41ODUpIj5pPC90ZXh0Pjwvc3ZnPg==);\r\n            }\r\n\r\n            /* hide text used for managing element control when it the holo-relationship is blank. See select-item-role-ends.component.ts */\r\n            .display-none {\r\n                display: none;\r\n            }\r\n        `,\r\n    ],\r\n    imports: [],\r\n})\r\nexport class HoloTextField extends HoloFieldType implements OnInit {\r\n    hideTextOverflow = true;\r\n    icon: string | undefined;\r\n\r\n    ngOnInit(): void {\r\n        const wrapTextOverflow = this.props.controlConfigItem?.optionValuesMap?.wrapTextOverflow;\r\n        this.hideTextOverflow = !wrapTextOverflow && this.props.hideTextOverflow !== false;\r\n        this.icon = this.props.controlConfigItem?.optionValuesMap?.icon;\r\n    }\r\n\r\n    /**\r\n     * Go through a chain of places props get the value for this control\r\n     */\r\n    get text(): string | undefined {\r\n        let result: string | undefined;\r\n        if (this.keyAsString in this.model) {\r\n            if (this.props.controlConfigItem?.optionValuesMap?.valueTextMapping) {\r\n                try {\r\n                    const valueTextMapping = JSON.parse(this.props.controlConfigItem.optionValuesMap.valueTextMapping);\r\n                    if (this.fieldValue) {\r\n                        result = valueTextMapping[this.fieldValue];\r\n                    } else {\r\n                        result = this.props.controlConfigItem.optionValuesMap.text;\r\n                    }\r\n                } catch (exception) {}\r\n            } else {\r\n                result = this.fieldValue;\r\n            }\r\n        } else if ('value' in this.props) {\r\n            result = this.props.value; // Explicitly set in formly templateOptions\r\n        } else {\r\n            result = this.props.controlConfigItem?.optionValuesMap?.text;\r\n        }\r\n        return result;\r\n    }\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { HoloCommandsComponent } from './holo-commands';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'formly-field-textarea',\r\n    templateUrl: 'holo-textarea.html',\r\n    styleUrls: ['formly-field-error.css', 'holo-textarea.css'],\r\n    imports: [ReactiveFormsModule, FormlyModule, HoloCommandsComponent, AsyncPipe],\r\n})\r\nexport class HoloTextAreaField extends HoloFieldType implements OnInit {\r\n    ngOnInit(): void {\r\n        const value = this.formControl.value;\r\n        const maxLength = this.props.maxLength || 4000;\r\n        if (value?.length > maxLength) {\r\n            this.formControl.setValue(value.substring(0, maxLength - 1));\r\n        }\r\n    }\r\n}\r\n","<div class=\"holo-textarea-wrapper\" [class.read-only]=\"props.readOnly\">\r\n    @if (props.label && !props.hideLabel) {\r\n        <label class=\"formly-textarea-label hide-text-overflow\">{{ props.label }}</label>\r\n    }\r\n    <div\r\n        [class.icon]=\"props.showValidationIcon\"\r\n        [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n        [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && !formControl.errors.required\"\r\n    ></div>\r\n    <div class=\"formly-field-error-container\">\r\n        @if (props.readOnly) {\r\n            <div class=\"textarea-data\">\r\n                <div [class.selectable]=\"props.isTextSelectable\">{{ formControl.value }}</div>\r\n            </div>\r\n        } @else {\r\n            <textarea\r\n                #textarea\r\n                [placeholder]=\"props.placeholder\"\r\n                [formControl]=\"formControl\"\r\n                [rows]=\"props.numberOfLines || 1\"\r\n                [cols]=\"1\"\r\n                [maxlength]=\"props.maxLength || 4000\"\r\n            ></textarea>\r\n        }\r\n        @if (showError) {\r\n            <formly-validation-message [field]=\"field\" class=\"formly-field-error-message\"></formly-validation-message>\r\n        }\r\n        @if (props.errorMessage) {\r\n            <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n        }\r\n    </div>\r\n</div>\r\n@if (props.commands$) {\r\n    <formly-commands [commands]=\"props.commands$ | async\" [data]=\"props.data$ | async\"> </formly-commands>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, viewChild } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { isDate } from '@holocentric/angular-common';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { PopupSettings, TimePickerComponent } from '@progress/kendo-angular-dateinputs';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n// TODO: update this component. Refer to holo-datepicker. We are handling toggle ourselves so that the dateinput cannot be changed by typing\r\n// while the outside of the popup can be clicked to close it.\r\n// Also, some props properties have been changed.\r\n@Component({\r\n    selector: 'formly-field-timepicker',\r\n    templateUrl: 'holo-timepicker.html',\r\n    styleUrls: ['formly-field-error.css'],\r\n    imports: [TimePickerComponent, ReactiveFormsModule, FormlyModule, NgClass],\r\n})\r\nexport class HoloTimePickerField extends HoloFieldType {\r\n    readonly timePicker = viewChild(TimePickerComponent);\r\n\r\n    getErrorMessage: (name?: string) => string | null = this.getGenericErrorMessage;\r\n    popupSettings: PopupSettings = {\r\n        popupClass: 'holo-timepicker-popup',\r\n    };\r\n\r\n    static transformToFormProperties({ data, key }: { data: any; key: string }): Date {\r\n        let result = data[key];\r\n        const dataType = typeof result;\r\n        if (dataType === 'string' || dataType === 'number') {\r\n            result = new Date(result);\r\n        }\r\n        return result;\r\n    }\r\n\r\n    static transformToItemProperties({\r\n        controlValue,\r\n        key,\r\n    }: {\r\n        controlValue: string | Date;\r\n        key: string;\r\n    }): Record<string, string> {\r\n        const resultValue = isDate(controlValue) ? (controlValue as Date).toISOString() : (controlValue as string);\r\n        return {\r\n            [key]: resultValue,\r\n        };\r\n    }\r\n\r\n    toggleTimepicker(): void {\r\n        const timePicker = this.timePicker();\r\n        if (timePicker) {\r\n            timePicker.toggle();\r\n        }\r\n    }\r\n}\r\n","<div class=\"holo-timepicker-wrapper\">\r\n    <label class=\"formly-timepicker-label hide-text-overflow\">{{\r\n        props.label && !props.hideLabel ? props.label : ''\r\n    }}</label>\r\n    <div class=\"holo-timepicker-validation-wrapper\">\r\n        <div\r\n            [class.icon]=\"props.showValidationIcon\"\r\n            [class.icon-invalid-arrow]=\"props.showValidationIcon && formControl.errors && formControl.errors.required\"\r\n            [class.icon-invalid-cross]=\"props.showValidationIcon && formControl.errors && formControl.errors.invalid\"\r\n        ></div>\r\n        <div class=\"formly-field-error-container\">\r\n            <kendo-timepicker\r\n                [max]=\"props.max\"\r\n                [min]=\"props.min\"\r\n                [format]=\"props.format\"\r\n                [formControl]=\"formControl\"\r\n                [popupSettings]=\"popupSettings\"\r\n                class=\"holo-timepicker {{ props.className }}\"\r\n                [formlyAttributes]=\"field\"\r\n                [disabled]=\"props.readOnly\"\r\n                (click)=\"toggleTimepicker()\"\r\n                [ngClass]=\"{ 'read-only': props.readOnly }\"\r\n            >\r\n            </kendo-timepicker>\r\n            @if (showError) {\r\n                <formly-validation-message\r\n                    [field]=\"field\"\r\n                    class=\"formly-field-error-message\"\r\n                ></formly-validation-message>\r\n            }\r\n            @if (props.errorMessage) {\r\n                <div class=\"formly-field-error-message\" [innerHTML]=\"props.errorMessage\"></div>\r\n            }\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { Component, ViewEncapsulation, input } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FileValueAccessorDirective } from '../directives/file-value-accessor.directive';\r\nimport { HoloFieldType } from './holo-field-type';\r\n\r\n@Component({\r\n    selector: 'holo-uploader',\r\n    template: `\r\n        <div class=\"holo-uploader-wrapper\" [formGroup]=\"form\" [class.read-only]=\"props.readOnly\">\r\n            <label class=\"formly-uploader-label hide-text-overflow\">{{ props.label || '' }}</label>\r\n            <div\r\n                [class.icon]=\"props.showValidationIcon\"\r\n                [class.icon-invalid-cross]=\"\r\n                    props.showValidationIcon && formControl.errors && formControl.errors.invalid\r\n                \"\r\n                [class.icon-invalid-arrow]=\"\r\n                    props.showValidationIcon && formControl.errors && formControl.errors.required\r\n                \"\r\n            ></div>\r\n            <div class=\"content\">\r\n                <input\r\n                    #fileInput\r\n                    name=\"myFile\"\r\n                    class=\"holo-file-input\"\r\n                    type=\"file\"\r\n                    [accept]=\"props.inputAccept\"\r\n                    [formControl]=\"formControl\"\r\n                    [formlyAttributes]=\"field\"\r\n                    [placeholder]=\"props.placeholder\"\r\n                    holoInputFile\r\n                />\r\n                <div\r\n                    class=\"file-name hide-text-overflow\"\r\n                    [class.placeholder]=\"!formControl.value || formControl.value.length === 0\"\r\n                >\r\n                    {{\r\n                        formControl.value && formControl.value.length > 0\r\n                            ? formControl.value[0].name\r\n                            : props.placeholder\r\n                    }}\r\n                </div>\r\n            </div>\r\n            <div class=\"holo-uploader-commands\">\r\n                <button\r\n                    type=\"button\"\r\n                    mat-button\r\n                    disableRipple\r\n                    class=\"command\"\r\n                    [disabled]=\"props.isLoading$ | async\"\r\n                    (click)=\"fileInput.click()\"\r\n                >\r\n                    Select\r\n                </button>\r\n            </div>\r\n        </div>\r\n    `,\r\n    styles: [\r\n        `\r\n            holo-uploader {\r\n                display: flex;\r\n                flex: 1 1 0rem;\r\n            }\r\n\r\n            .holo-uploader-wrapper {\r\n                display: flex;\r\n                width: 100%;\r\n            }\r\n\r\n            holo-uploader {\r\n                display: flex;\r\n                width: 100%;\r\n                align-items: center;\r\n            }\r\n\r\n            holo-uploader .content {\r\n                border: 0.1rem solid rgb(128, 128, 128);\r\n                background-color: rgb(255, 255, 255);\r\n                overflow: auto;\r\n                display: flex;\r\n                flex-grow: 1;\r\n                align-items: center;\r\n            }\r\n\r\n            .holo-file-input {\r\n                display: none;\r\n            }\r\n\r\n            holo-uploader .file-name {\r\n                position: relative;\r\n                align-items: center;\r\n                padding: 0rem 1.3rem 0rem 1.3rem;\r\n                width: 100%;\r\n            }\r\n\r\n            holo-uploader .placeholder {\r\n                color: rgb(192, 192, 192);\r\n            }\r\n\r\n            holo-uploader .holo-uploader-commands {\r\n                display: flex;\r\n                flex-direction: row;\r\n                flex-wrap: nowrap;\r\n                justify-content: space-between;\r\n                align-items: center;\r\n            }\r\n\r\n            holo-uploader .holo-uploader-wrapper .holo-uploader-commands .command {\r\n                margin-top: 0rem;\r\n                margin-bottom: 0rem;\r\n            }\r\n\r\n            holo-uploader .holo-uploader-wrapper .holo-uploader-commands .command:last-child {\r\n                margin-right: 0rem;\r\n            }\r\n        `,\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: HoloUploaderField,\r\n            multi: true,\r\n        },\r\n    ],\r\n    imports: [ReactiveFormsModule, FileValueAccessorDirective, FormlyModule, MatButton, AsyncPipe],\r\n})\r\nexport class HoloUploaderField extends HoloFieldType {\r\n    readonly readOnly = input(true);\r\n    readonly placeholder = input('');\r\n    readonly commands = input<any[]>([]);\r\n    readonly itemLabelFunction = input<Function>();\r\n\r\n    item: any | undefined;\r\n\r\n    getErrorMessage: (name?: string) => string | null = this.getTextInputErrorMessage;\r\n\r\n    commandGroups: any;\r\n    commandGroupKeys: string[] | undefined;\r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n        // TODO\r\n    }\r\n\r\n    getSelectedItems(): any {\r\n        return this.item ? [this.item] : [];\r\n    }\r\n}\r\n","import { ConfigOption } from '@ngx-formly/core';\r\nimport {\r\n    HoloButtonField,\r\n    HoloCategoryField,\r\n    HoloCheckboxField,\r\n    HoloComboboxField,\r\n    HoloDatePickerField,\r\n    HoloDateTimePickerField,\r\n    HoloHeaderTextField,\r\n    HoloHtmlTextField,\r\n    HoloInputField,\r\n    HoloInputLeftCrossField,\r\n    HoloRadioGroupField,\r\n    HoloRelationshipField,\r\n    HoloRichtextAreaField,\r\n    HoloTextAreaField,\r\n    HoloTextField,\r\n    HoloTimePickerField,\r\n    HoloUploaderField,\r\n} from './types/types';\r\n\r\nexport const TemplateDirectives: ConfigOption = {\r\n    types: [\r\n        {\r\n            name: 'holo-combobox',\r\n            component: HoloComboboxField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-checkbox',\r\n            component: HoloCheckboxField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-datepicker',\r\n            component: HoloDatePickerField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-datetimepicker',\r\n            component: HoloDateTimePickerField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-input',\r\n            component: HoloInputField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-input-left-cross',\r\n            component: HoloInputLeftCrossField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-textarea',\r\n            component: HoloTextAreaField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-richtext',\r\n            component: HoloRichtextAreaField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-button',\r\n            component: HoloButtonField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-relationship',\r\n            component: HoloRelationshipField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-uploader',\r\n            component: HoloUploaderField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-radio-group',\r\n            component: HoloRadioGroupField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-text',\r\n            component: HoloTextField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-html-text',\r\n            component: HoloHtmlTextField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-category',\r\n            component: HoloCategoryField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-timepicker',\r\n            component: HoloTimePickerField,\r\n            wrappers: [],\r\n        },\r\n        // TODO: Remove the following. Crutch for the apps that still use the type: 'text' and type: 'category'\r\n        {\r\n            name: 'text',\r\n            component: HoloTextField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'category',\r\n            component: HoloCategoryField,\r\n            wrappers: [],\r\n        },\r\n        {\r\n            name: 'holo-header-text',\r\n            component: HoloHeaderTextField,\r\n            wrappers: [],\r\n        },\r\n    ],\r\n};\r\n","/* eslint @typescript-eslint/no-extraneous-class: \"off\" */\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { CUSTOM_ELEMENTS_SCHEMA, ModuleWithProviders, NO_ERRORS_SCHEMA, NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { isFunction } from '@holocentric/angular-common';\r\nimport { FeatureToggleManager, RichTextModule } from '@holocentric/angular-core';\r\nimport { MetamodelModule } from '@holocentric/angular-metamodel';\r\nimport { FormlyModule as NgxFormlyModule } from '@ngx-formly/core';\r\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\r\nimport { ComboBoxModule, DropDownListModule } from '@progress/kendo-angular-dropdowns';\r\nimport { TINYMCE_SCRIPT_SRC, EditorModule as TinyMceModule } from '@tinymce/tinymce-angular';\r\nimport { NgScrollbarModule } from 'ngx-scrollbar';\r\nimport { DatepickerModule } from './components/datepicker/datepicker.module';\r\nimport { TextInputComponent } from './components/text-input.component';\r\nimport { FileValueAccessorDirective } from './directives/file-value-accessor.directive';\r\nimport { FormlyValueAccessorDirective } from './directives/formly-value-accessor.directive';\r\nimport {\r\n    FORMLY_FIELD_CONFIG_FACTORIES_TOKEN,\r\n    FORMLY_FIELD_RICHTEXT_CONFIG,\r\n    FORMLY_HOLO_CONFIG_TOKEN,\r\n    FormlyFieldConfigFactoryMap,\r\n    FormlyManager,\r\n    HoloFormlyConfig,\r\n    defaultFormlyFieldConfigFactories,\r\n} from './formly.manager';\r\nimport { MaterialModule } from './material.module';\r\nimport { HoloFormlyFieldLabelPipe } from './pipes/formly-field-label.pipe';\r\nimport { TemplateDirectives } from './templates';\r\nimport { TinyMceConfig, defaultRichtextConfig } from './tinymce';\r\nimport { HoloButtonField } from './types/holo-button';\r\nimport { HoloCategoryField } from './types/holo-category';\r\nimport { HoloCheckboxField } from './types/holo-checkbox';\r\nimport { HoloComboboxField } from './types/holo-combobox';\r\nimport { HoloCommandsComponent } from './types/holo-commands';\r\nimport { HoloDatePickerField } from './types/holo-datepicker-field';\r\nimport { HoloDateTimePickerField } from './types/holo-datetimepicker';\r\nimport { HoloHeaderTextField } from './types/holo-header-text';\r\nimport { HoloHtmlTextField } from './types/holo-html-text';\r\nimport { HoloInputField } from './types/holo-input';\r\nimport { HoloInputLeftCrossField } from './types/holo-input-left-cross';\r\nimport { HoloRadioGroupField } from './types/holo-radio-group';\r\nimport {\r\n    HoloRelationshipField,\r\n    HoloRelationshipListComponent,\r\n    HoloRelationshipListItemComponent,\r\n    HoloRelationshipNoItemComponent,\r\n    HoloRelationshipSingleComponent,\r\n} from './types/holo-relationship';\r\nimport { HoloRichtextAreaField } from './types/holo-richtext';\r\nimport { HoloRichtextDialogComponent } from './types/holo-richtext-dialog.component';\r\nimport { HoloTextField } from './types/holo-text';\r\nimport { HoloTextAreaField } from './types/holo-textarea';\r\nimport { HoloTimePickerField } from './types/holo-timepicker';\r\nimport { HoloUploaderField } from './types/holo-uploader';\r\n\r\nexport const showRichTextSourceButtonFeature = 'showRichTextSourceButton';\r\n\r\nexport function mergeRichtextConfig(\r\n    providedConfig: HoloFormlyConfig,\r\n    featureToggleManager: FeatureToggleManager,\r\n): TinyMceConfig {\r\n    let providedRichtextConfig = providedConfig.richtext;\r\n    if (providedConfig?.richtextFunction && isFunction(providedConfig.richtextFunction)) {\r\n        const richTextConfig = providedConfig.richtextFunction();\r\n        if (richTextConfig) {\r\n            providedRichtextConfig = { ...providedRichtextConfig, ...richTextConfig };\r\n        }\r\n    }\r\n    const result = { ...defaultRichtextConfig, ...providedRichtextConfig };\r\n    if (featureToggleManager.isFeatureEnabled(showRichTextSourceButtonFeature)) {\r\n        result.toolbar = `${result.toolbar} \r\n            code`;\r\n    }\r\n    return result;\r\n}\r\n\r\nconst componentsAndDirectives = [\r\n    FileValueAccessorDirective,\r\n    HoloRelationshipField,\r\n    HoloUploaderField,\r\n    HoloFormlyFieldLabelPipe,\r\n    FormlyValueAccessorDirective,\r\n    HoloButtonField,\r\n    HoloCategoryField,\r\n    HoloCheckboxField,\r\n    HoloComboboxField,\r\n    HoloCommandsComponent,\r\n    HoloDatePickerField,\r\n    HoloDateTimePickerField,\r\n    HoloHtmlTextField,\r\n    HoloInputField,\r\n    HoloInputLeftCrossField,\r\n    HoloRadioGroupField,\r\n    HoloRelationshipListComponent,\r\n    HoloRelationshipListItemComponent,\r\n    HoloRelationshipNoItemComponent,\r\n    HoloRelationshipSingleComponent,\r\n    HoloRichtextAreaField,\r\n    HoloRichtextDialogComponent,\r\n    HoloTextAreaField,\r\n    HoloTextField,\r\n    HoloTimePickerField,\r\n    TextInputComponent,\r\n    HoloHeaderTextField,\r\n];\r\n\r\n@NgModule({\r\n    providers: [FormlyManager],\r\n    imports: [\r\n        BrowserModule,\r\n        BrowserAnimationsModule,\r\n        CommonModule,\r\n        MaterialModule,\r\n        NgxFormlyModule.forRoot(TemplateDirectives),\r\n        ReactiveFormsModule,\r\n        ComboBoxModule,\r\n        DropDownListModule,\r\n        DateInputsModule,\r\n        TinyMceModule,\r\n        RichTextModule,\r\n        MetamodelModule,\r\n        NgScrollbarModule,\r\n        DatepickerModule,\r\n        ...componentsAndDirectives,\r\n    ],\r\n    exports: [...componentsAndDirectives],\r\n    schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class FormlyModule {\r\n    static forConfig(\r\n        config: HoloFormlyConfig = {},\r\n        fields: FormlyFieldConfigFactoryMap = defaultFormlyFieldConfigFactories,\r\n    ): ModuleWithProviders<FormlyModule> {\r\n        return {\r\n            ngModule: FormlyModule,\r\n            providers: [\r\n                FormlyManager,\r\n                // TODO: Not sure how to pass on ConfigOption as FORMLY_CONFIG_TOKEN not exported\r\n                { provide: FORMLY_HOLO_CONFIG_TOKEN, useValue: config },\r\n                { provide: FORMLY_FIELD_CONFIG_FACTORIES_TOKEN, useValue: fields },\r\n                {\r\n                    provide: FORMLY_FIELD_RICHTEXT_CONFIG,\r\n                    useFactory: mergeRichtextConfig,\r\n                    deps: [FORMLY_HOLO_CONFIG_TOKEN, FeatureToggleManager],\r\n                },\r\n                { provide: TINYMCE_SCRIPT_SRC, useValue: 'tinymce/tinymce.min.js' },\r\n            ],\r\n        };\r\n    }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './formly';\n"],"names":["componentsAndDirectives","FormlyModule","getFieldValue","i1","setup","first","tinymce","TinyMceModule","NgxFormlyModule"],"mappings":"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"}