{"version":3,"file":"codefoxui.mjs","sources":["../../../projects/codefoxui/src/lib/shared/classes/destroyref.class.ts","../../../projects/codefoxui/src/lib/shared/classes/dialogconfig.class.ts","../../../projects/codefoxui/src/lib/shared/classes/dialogref.class.ts","../../../projects/codefoxui/src/lib/shared/classes/dialog.class.ts","../../../projects/codefoxui/src/lib/shared/classes/dialoginjector.class.ts","../../../projects/codefoxui/src/lib/enums.ts","../../../projects/codefoxui/src/lib/interfaces.ts","../../../projects/codefoxui/src/lib/shared/services/config.service.ts","../../../projects/codefoxui/src/lib/shared/classes/form/formerrors.class.ts","../../../projects/codefoxui/src/lib/shared/classes/form/formcontrol.ts","../../../projects/codefoxui/src/lib/shared/helpers/helpers.ts","../../../projects/codefoxui/src/lib/shared/helpers/tooltip.helper.ts","../../../projects/codefoxui/src/lib/shared/classes/form/formarray.ts","../../../projects/codefoxui/src/lib/shared/classes/form/formgroup.ts","../../../projects/codefoxui/src/lib/shared/helpers/form.helper.ts","../../../projects/codefoxui/src/lib/shared/helpers/tree.helpers.ts","../../../projects/codefoxui/src/lib/shared/helpers/permissions.helper.ts","../../../projects/codefoxui/src/lib/shared/helpers/filesize.helper.ts","../../../projects/codefoxui/src/lib/shared/helpers/languages.helper.ts","../../../projects/codefoxui/src/lib/shared/helpers/dialog.helper.ts","../../../projects/codefoxui/src/lib/shared/services/logger.service.ts","../../../projects/codefoxui/src/lib/shared/services/cookie.service.ts","../../../projects/codefoxui/src/lib/shared/directives/readonly.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/button.directive.ts","../../../projects/codefoxui/src/lib/shared/pipes/currency.pipe.ts","../../../projects/codefoxui/src/lib/shared/pipes/safe.pipe.ts","../../../projects/codefoxui/src/lib/shared/pipes/currencydigits.pipe.ts","../../../projects/codefoxui/src/lib/shared/pipes/filesize.pipe.ts","../../../projects/codefoxui/src/lib/shared/pipes/duration.pipe.ts","../../../projects/codefoxui/src/lib/shared/pipes/translation.pipe.ts","../../../projects/codefoxui/src/lib/shared/tokens/alert.token.ts","../../../projects/codefoxui/src/lib/shared/translations/alert.translations.ts","../../../projects/codefoxui/src/lib/shared/components/alert.component.ts","../../../projects/codefoxui/src/lib/shared/services/global.event.listener.service.ts","../../../projects/codefoxui/src/lib/shared/tokens/lockhelper.tokens.ts","../../../projects/codefoxui/src/lib/shared/tokens/message.tokens.ts","../../../projects/codefoxui/src/lib/shared/tokens/date.tokens.ts","../../../projects/codefoxui/src/lib/shared/tokens/confirm.tokens.ts","../../../projects/codefoxui/src/lib/shared/tokens/forms.tokens.ts","../../../projects/codefoxui/src/lib/shared/tokens/dialog.tokens.ts","../../../projects/codefoxui/src/lib/shared/tokens/formerrors.tokens.ts","../../../projects/codefoxui/src/lib/shared/tokens/interceptors.tokens.ts","../../../projects/codefoxui/src/lib/shared/classes/formitem.class.ts","../../../projects/codefoxui/src/lib/features/inputtext/inputtext.component.ts","../../../projects/codefoxui/src/lib/shared/components/confirm.component.ts","../../../projects/codefoxui/src/lib/shared/components/loading.component.ts","../../../projects/codefoxui/src/lib/shared/components/modalwithbuttons.component.ts","../../../projects/codefoxui/src/lib/shared/services/message.service.ts","../../../projects/codefoxui/src/lib/shared/services/dialog.service.ts","../../../projects/codefoxui/src/lib/shared/services/dragdrop.service.ts","../../../projects/codefoxui/src/lib/shared/services/lock.service.ts","../../../projects/codefoxui/src/lib/shared/services/radio.service.ts","../../../projects/codefoxui/src/lib/shared/services/token.service.ts","../../../projects/codefoxui/src/lib/shared/services/interceptors.service.ts","../../../projects/codefoxui/src/lib/shared/services/api.service.ts","../../../projects/codefoxui/src/lib/shared/services/permissions.service.ts","../../../projects/codefoxui/src/lib/shared/services/store.service.ts","../../../projects/codefoxui/src/lib/shared/services/title.service.ts","../../../projects/codefoxui/src/lib/shared/services/websocket.service.ts","../../../projects/codefoxui/src/lib/shared/consts.ts","../../../projects/codefoxui/src/lib/shared/helpers/contextmenu.helper.ts","../../../projects/codefoxui/src/lib/shared/services/contextmenu.service.ts","../../../projects/codefoxui/src/lib/shared/services/translation.service.ts","../../../projects/codefoxui/src/lib/shared/services/loader.interceptor.service.ts","../../../projects/codefoxui/src/lib/shared/services/languages.service.ts","../../../projects/codefoxui/src/lib/shared/classes/lockhelper.class.ts","../../../projects/codefoxui/src/lib/shared/classes/form/formbuilder.ts","../../../projects/codefoxui/src/lib/shared/classes/cfobservable.class.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Base.interceptor.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Error.interceptor.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Loader.interceptor.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Lock.interceptor.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Mock.interceptor.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Precheck.interceptor.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Token.interceptor.ts","../../../projects/codefoxui/src/lib/shared/interceptors/Requestid.interceptor.ts","../../../projects/codefoxui/src/lib/shared/directives/drag.handle.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/drag.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/drop.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/inputmask.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/template.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/tooltip.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/permission.directive.ts","../../../projects/codefoxui/src/lib/features/autocomplete/autocomplete.const.ts","../../../projects/codefoxui/src/lib/features/autocomplete/autocomplete.component.ts","../../../projects/codefoxui/src/lib/features/breadcrumb/breadcrumb.service.ts","../../../projects/codefoxui/src/lib/features/breadcrumb/breadcrumb.component.ts","../../../projects/codefoxui/src/lib/features/chart/chart.const.ts","../../../projects/codefoxui/src/lib/features/chart/chart.interfaces.ts","../../../projects/codefoxui/src/lib/features/chart/chart.helpers.ts","../../../projects/codefoxui/src/lib/features/chart/chart.translations.ts","../../../projects/codefoxui/src/lib/features/chart/chart.tokens.ts","../../../projects/codefoxui/src/lib/features/dropdown/dropdown.helpers.ts","../../../projects/codefoxui/src/lib/features/checkbox/checkbox.component.ts","../../../projects/codefoxui/src/lib/features/dropdown/dropdown.component.ts","../../../projects/codefoxui/src/lib/features/inputnumber/inputnumber.component.ts","../../../projects/codefoxui/src/lib/features/chart/chart.component.ts","../../../projects/codefoxui/src/lib/features/colorpicker/colorpicker.interfaces.ts","../../../projects/codefoxui/src/lib/features/colorpicker/colorpicker.helpers.ts","../../../projects/codefoxui/src/lib/features/colorpicker/colorpicker.component.ts","../../../projects/codefoxui/src/lib/features/editor/editor.component.ts","../../../projects/codefoxui/src/lib/features/elements/footer/footer.component.ts","../../../projects/codefoxui/src/lib/features/elements/header/header.component.ts","../../../projects/codefoxui/src/lib/shared/helpers/menu.helper.ts","../../../projects/codefoxui/src/lib/features/elements/menu/menu.component.ts","../../../projects/codefoxui/src/lib/features/elements/sidebar/sidebar.component.ts","../../../projects/codefoxui/src/lib/features/elements/lock/lock.component.ts","../../../projects/codefoxui/src/lib/features/elements/fullpage/fullpage.component.ts","../../../projects/codefoxui/src/lib/features/fieldset/fieldset.component.ts","../../../projects/codefoxui/src/lib/features/inputtextarea/inputtextarea.component.ts","../../../projects/codefoxui/src/lib/features/listbox/listbox.const.ts","../../../projects/codefoxui/src/lib/features/listbox/listbox.component.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanager.interfaces.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanager.const.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanager.helpers.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanager.service.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanager.translations.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanagereditor/mediamanagereditor.component.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanagerpreview/mediamanagerpreview.component.ts","../../../projects/codefoxui/src/lib/features/mediamanager/mediamanager.component.ts","../../../projects/codefoxui/src/lib/features/progressbar/progressbar.component.ts","../../../projects/codefoxui/src/lib/features/radio/radio.component.ts","../../../projects/codefoxui/src/lib/features/switch/switch.component.ts","../../../projects/codefoxui/src/lib/features/tabview/tabpanel.component.ts","../../../projects/codefoxui/src/lib/features/tabview/tabview.component.ts","../../../projects/codefoxui/src/lib/features/tags/tags.component.ts","../../../projects/codefoxui/src/lib/features/tree/tree.component.ts","../../../projects/codefoxui/src/lib/features/dragdroplist/dragdroplist.component.ts","../../../projects/codefoxui/src/lib/features/datetimepicker/datetimepicker.tokens.ts","../../../projects/codefoxui/src/lib/features/datetimepicker/datetimepicker.component.ts","../../../projects/codefoxui/src/lib/shared/directives/enterastab.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/formerrors.tooltip.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/dragdroplist.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/loader.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/dialog.directive.ts","../../../projects/codefoxui/src/lib/shared/directives/confirm.dialog.directive.ts","../../../projects/codefoxui/src/lib/shared/guards/permission.guards.ts","../../../projects/codefoxui/src/lib/shared/components/header.component.ts","../../../projects/codefoxui/src/lib/shared/components/dialog.component.ts","../../../projects/codefoxui/src/lib/shared/consts/formerrors.ts","../../../projects/codefoxui/src/lib/shared/components/formerrorsmodal/formerrorsmodal.component.ts","../../../projects/codefoxui/src/lib/shared/components/formerrorsmodal/formerrorsmodal.component.html","../../../projects/codefoxui/src/lib/shared/providers/interceptors.providers.ts","../../../projects/codefoxui/src/lib/shared/providers/general.providers.ts","../../../projects/codefoxui/src/public-api.ts","../../../projects/codefoxui/src/codefoxui.ts"],"sourcesContent":["import {DestroyRef, inject} from \"@angular/core\";\r\n\r\nexport class CfDestroyRef {\r\n\tdestroyRef: DestroyRef = inject(DestroyRef);\r\n}\r\n","import { ResolveData } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { CfDialogConfiguration } from \"../../interfaces\";\r\n\r\nexport class CfDialogConfig implements CfDialogConfiguration {\r\n    showCloseIcon: boolean = true;\r\n\tbeforeClose: null | (() => boolean | Observable<boolean> | Promise<boolean>) | Observable<boolean> | Promise<boolean> = null;\r\n\tignoreKeyUp: boolean = false;\r\n    data: {[key: (string | number)]: any} = {};\r\n    noPadding: boolean = false;\r\n\tkeepActiveElement: boolean = false;\r\n\tcontainerClasses: string[] = [];\r\n\tdialogClasses: string[] = [];\r\n    resolve: ResolveData = {};\r\n\ttitle: string | null = null;\r\n    contentElement: Element | null = null;\r\n    single: boolean = false;\r\n    width: string | null = null;\r\n\theight: string | null = null;\r\n    getData(key: string | number, defaultOnUndefined: any = null): any {\r\n        return this.data[key] !== undefined ? this.data[key] : defaultOnUndefined;\r\n    }\r\n}\r\n","import { filter, Observable, Subject, takeUntil } from \"rxjs\";\r\nimport { CfDialogCloseParams } from \"../../interfaces\";\r\nimport { CfMessageService } from \"../services\";\r\nimport { CfDialogConfig } from \"./dialogconfig.class\";\r\n\r\nexport class CfDialogRef<T = any> {\r\n\tmessageService: CfMessageService | null = null;\r\n    dialogConfig: CfDialogConfig | null = null;\r\n\tprivate readonly _onClose: Subject<any> = new Subject<any>();\r\n    onClose: Observable<T | undefined> = this._onClose.asObservable();\r\n    onCloseValue: Observable<T> = this._onClose.pipe(filter(result => result !== undefined && result !== null));\r\n    onCloseOnValue: (value: any) => Observable<any> = (value: any) => this._onClose.pipe(filter(result => result === value));\r\n    private readonly _onMessage: Subject<any> = new Subject<any>();\r\n\tonMessage: Observable<any> = this._onMessage.asObservable();\r\n    private readonly _onDestroy = new Subject<any>();\r\n    onDestroy: Observable<any> = this._onDestroy.asObservable();\r\n\tsavedTitle: string = '';\r\n\ttitle: string | null = null;\r\n\topened: Date = new Date();\r\n\tprivate doClose(result?: any, params: CfDialogCloseParams = {}): void {\r\n\t\tif (params.message !== undefined && this.messageService !== null) {\r\n\t\t\tthis.messageService.show(params.message.title, params.message.message, params.message);\r\n\t\t}\r\n\t\tthis._onClose.next(result); \r\n\t}\r\n    close(result?: any, params: CfDialogCloseParams = {}): void { \r\n\t\tif (this.dialogConfig === null || this.dialogConfig.beforeClose === null) {\r\n\t\t\tthis.doClose(result, params);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tif (this.dialogConfig.beforeClose instanceof Promise) {\r\n\t\t\tthis.dialogConfig.beforeClose.then((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t}).catch(() => {});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.dialogConfig.beforeClose instanceof Observable) {\r\n\t\t\tthis.dialogConfig.beforeClose.pipe(takeUntil(this._onClose)).subscribe((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tconst beforeCloseResult: boolean | Observable<boolean> | Promise<boolean> = this.dialogConfig.beforeClose();\r\n\r\n\t\tif (beforeCloseResult instanceof Promise) {\r\n\t\t\tbeforeCloseResult.then((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t}).catch(() => {});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (beforeCloseResult instanceof Observable) {\r\n\t\t\tbeforeCloseResult.pipe(takeUntil(this._onClose)).subscribe((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (beforeCloseResult) {\r\n\t\t\tthis.doClose(result, params);\r\n\t\t}\r\n\t}\r\n    forceClose(result?: any): void {\r\n        this.doClose(result);\r\n    }\r\n\tmessage(message: any): void { this._onMessage.next(message); }\r\n    destroy(): void { this._onDestroy.next(undefined); }\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { CfDialogCloseParams } from \"../../interfaces\";\r\nimport { CfDestroyRef } from \"./destroyref.class\";\r\nimport { CfDialogConfig } from \"./dialogconfig.class\";\r\nimport { CfDialogRef } from \"./dialogref.class\";\r\n\r\nexport class CfDialog extends CfDestroyRef {\r\n\tref: CfDialogRef = inject(CfDialogRef);\r\n\tconfig: CfDialogConfig = inject(CfDialogConfig);\r\n\tclose(result?: any, params: CfDialogCloseParams = {}): void {\r\n\t\tthis.ref.close(result, params);\r\n\t}\r\n    forceClose(result?: any): void {\r\n        this.ref.forceClose(result);\r\n    }\r\n}\r\n","import { InjectionToken, Injector, Type } from \"@angular/core\";\r\n\r\nexport class CfDialogInjector implements Injector {\r\n    constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap<any, any>) { }\r\n    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: {}): T;\r\n    get(token: any, notFoundValue?: any): any;\r\n    get(token: any, notFoundValue?: any, _?: any): any {\r\n        const value = this._additionalTokens.get(token);\r\n        if (value) { return value; }\r\n        return this._parentInjector.get<any>(token, notFoundValue);\r\n    }\r\n}","export enum MessagePosition {\r\n    TOP = 'top',\r\n    BOTTOM = 'bottom'\r\n}\r\n\r\nexport enum MessageSeverity {\r\n    SUCCESS = 'success',\r\n    WARNING = 'warning',\r\n    DANGER = 'danger',\r\n    INFO = 'info'\r\n}\r\n\r\nexport enum LogLevel {\r\n    All = 0,\r\n    Debug = 1,\r\n    Info = 2,\r\n    Warn = 3,\r\n    Error = 4,\r\n    Fatal = 5,\r\n    Off = 6\r\n}\r\n\r\nexport enum InterceptorType {\r\n    ALL = 'ALL',\r\n    ERROR = 'ERROR',\r\n    LOADER = 'LOADER',\r\n    MOCK = 'MOCK',\r\n    TOKEN = 'TOKEN',\r\n    PRECHECK = 'PRECHECK',\r\n    LOCK = 'LOCK',\r\n\tREQUESTID = 'REQUESTID'\r\n}\r\n\r\nexport enum TokenServiceMode {\r\n    LOCALSTORAGE = 0,\r\n    SESSIONSTORAGE = 1,\r\n    COOKIE = 2\r\n}\r\n","import { InterceptorType, MessagePosition, MessageSeverity } from './enums';\r\nimport { DestroyRef, QueryList, Type } from '@angular/core';\r\nimport { FormItem } from './shared/classes/formitem.class';\r\nimport { CfDragDirective, CfFormArray, CfFormControl, CfFormErrors, CfFormGroup, CfWebSocket, TranslationsService } from './shared';\r\nimport { Observable } from 'rxjs';\r\nimport { IsActiveMatchOptions } from '@angular/router';\r\nimport { CfDialogRef } from './shared/classes/dialogref.class';\r\nimport { AbstractControl, FormControl } from '@angular/forms';\r\n\r\nexport type DropdownQueryMode = 'contains' | 'startwith';\r\n\r\nexport interface MessageConfiguration {\r\n    closeable: boolean;\r\n    position: MessagePosition;\r\n    lifetime: number | null;\r\n    severity: MessageSeverity;\r\n\tkeepOnHover: boolean;\r\n}\r\n\r\nexport interface Message extends MessageConfiguration {\r\n    title: string;\r\n    message: string;\r\n}\r\n\r\nexport interface MessagePartial extends Partial<MessageConfiguration> {\r\n    title: string;\r\n    message: string;\r\n}\r\n\r\nexport interface LabelValue<T = any> {\r\n    label: string;\r\n    value: T;\r\n}\r\n\r\nexport interface LabelValueDisabled<T = any> {\r\n    label: string;\r\n    value: T;\r\n    disabled?: boolean;\r\n}\r\n\r\nexport interface BreadcrumbMenuItem {\r\n    label?: string;\r\n    icon?: string;\r\n    routerLink?: string;\r\n}\r\n\r\nexport type TreeLike<T = any> = T & {\r\n    children: TreeLike<T>[];\r\n}\r\n\r\nexport interface TreeNode<T = any> {\r\n    data: T;\r\n    children: TreeNode<T>[];\r\n    selected: boolean;\r\n    partialSelected: boolean;\r\n    parent: TreeNode<T> | null;\r\n    opened: boolean;\r\n    level: number;\r\n\tvisible: boolean;\r\n}\r\n\r\nexport interface TreeNodeOrderParams<T> {\r\n\tnode: TreeNode<T>;\r\n\tway: 'up' | 'down';\r\n\tparent: TreeNode<T> | null;\r\n\tsiblingsValues: any[];\r\n\tsiblingsValuesAfter: any[];\r\n\toldPosition: number;\r\n\tnewPosition: number;\r\n}\r\n\r\nexport type TreeNodesQueryFilterFunction<T> = ((node: TreeNode<T>, query: string) => boolean);\r\n\r\nexport enum CfDragDropEventType {\r\n    DRAG_START,\r\n    DRAG_END,\r\n    DROP_END\r\n}\r\n\r\nexport interface CfDragDropEvent {\r\n    type: CfDragDropEventType;\r\n    tag: string | null;\r\n    data: any;\r\n\tdragDropListGroup: string | null;\r\n\tdragDirective: CfDragDirective;\r\n}\r\n\r\nexport enum MaskPartType {\r\n    NUMERIC = 'NUMERIC',\r\n    ALPHABETICAL = 'ALPHABETICAL',\r\n    ALPHANUMERIC = 'ALPHANUMERIC',\r\n    SKIP = 'SKIP'\r\n}\r\n\r\nexport interface MaskPart {\r\n    type: MaskPartType;\r\n    displayChar: string;\r\n    originalMaskPart: string;\r\n\tenteredChar: string | null;\r\n}\r\n\r\nexport interface RadioServiceCheckEvent {\r\n    group: string;\r\n    value: any;\r\n}\r\n\r\nexport enum LockAction {\r\n    LOCK = 'LOCK',\r\n    KEEP = 'KEEP',\r\n    RELEASE = 'RELEASE'\r\n}\r\n\r\nexport interface Lock {\r\n    action: LockAction;\r\n    module: string;\r\n    id: string;\r\n}\r\n\r\nexport type LockHeaders = {[name: string]: string};\r\n\r\nexport interface LockResponse {\r\n    action: LockAction;\r\n    module: string;\r\n    id: string;\r\n    fullname: string;\r\n    userid: number;\r\n}\r\n\r\nexport enum StoreServiceMode {\r\n    LOCAL = 'LOCAL',\r\n    SESSION = 'SESSION'\r\n}\r\n\r\nexport enum AcceptValidationMode {\r\n    PATTERN = 'PATTERN',\r\n    TEXT = 'TEXT'\r\n}\r\n\r\nexport type CfDialogConfigurationBeforeClose = null | (() => boolean | Observable<boolean> | Promise<boolean>) | Observable<boolean> | Promise<boolean>;\r\n\r\nexport interface CfDialogConfiguration {\r\n    showCloseIcon?: boolean;\r\n\tbeforeClose?: CfDialogConfigurationBeforeClose;\r\n\tignoreKeyUp?: boolean;\r\n    data?: any;\r\n    noPadding?: boolean;\r\n\tkeepActiveElement?: boolean;\r\n\tcontainerClasses?: string[];\r\n\tdialogClasses?: string[];\r\n\ttitle?: string | null;\r\n    contentElement?: Element | null;\r\n    single?: boolean;\r\n    width?: string | null;\r\n\theight?: string | null;\r\n}\r\n\r\nexport interface CfDialogCloseParams {\r\n    message?: MessagePartial;\r\n}\r\n\r\nexport interface ConfirmConfiguration {\r\n    title: string;\r\n    text: string;\r\n    acceptText: string;\r\n    declineText: string;\r\n\thideDeclineButton?: boolean;\r\n    switchButtonColors?: boolean;\r\n    acceptTimeout?: number;\r\n    acceptValidationText?: string;\r\n    acceptValidationMode?: AcceptValidationMode;\r\n    acceptValidationLabel?: string;\r\n}\r\n\r\nexport interface AlertConfiguration {\r\n    title: string;\r\n    text: string;\r\n\tshowCloseIcon?: boolean;\r\n\tbutton?: Partial<AlertButtonConfiguration>;\r\n}\r\n\r\nexport interface LoadingConfiguration {\r\n    title: string;\r\n    text: string;\r\n\tloadingIcon?: string;\r\n    iconSize?: number;\r\n}\r\n\r\nexport interface AlertButtonConfiguration {\r\n\tlabel: string;\r\n\tseverity: string;\r\n\tcallback: (params: {dialogRef: CfDialogRef}) => void;\r\n\ttranslateLabel: boolean;\r\n\tfocus: boolean;\r\n}\r\n\r\nexport interface ButtonConfiguration {\r\n\tlabel: string;\r\n\tseverity: string;\r\n\tcallback?: (params: {dialogRef: CfDialogRef}) => void;\r\n\trouterLink?: any;\r\n\tfocus?: boolean;\r\n\tpermission?: string | string[];\r\n\ttranslateLabel?: boolean;\r\n}\r\n\r\nexport interface ModalWithButtonsConfiguration {\r\n    title: string;\r\n    text: string;\r\n\tshowCloseIcon?: boolean;\r\n\tbuttons: ButtonConfiguration[];\r\n}\r\n\r\nexport interface MenuItem {\r\n    title: string;\r\n    routerLink?: any[];\r\n    routerLinkActiveOptions?: { exact: boolean; } | IsActiveMatchOptions;\r\n    callback?: () => any;\r\n    permissions?: string[];\r\n    icon?: string;\r\n    iconUrl?: string;\r\n\tchildren?: MenuItem[];\r\n}\r\n\r\nexport interface FormatNumberOptions {\r\n    minDecimalCount: number;\r\n    maxDecimalCount: number;\r\n    enableThousandSeparator: boolean;\r\n    decimalSign: string;\r\n    thousandSeparator: string;\r\n}\r\n\r\nexport interface CfWebSocketConfiguration {\r\n    url: string | null;\r\n    autoReconnectOnClose: boolean;\r\n    onCloseCallback: ((params: {cfWebSocket: CfWebSocket, closeEvent: CloseEvent}) => void) | null;\r\n}\r\n\r\nexport interface CfContextMenuItem {\r\n\ttitle?: string;\r\n\ticon?: string | null;\r\n\thandler?: (() => void) | null;\r\n\tcloseAfterHandlerClick?: boolean;\r\n\thide?: boolean;\r\n\tseparator?: boolean;\r\n\tchildren?: CfContextMenuItem[];\r\n}\r\n\r\nexport interface CfContextMenuItemFull {\r\n\ttitle: string;\r\n\ticon: string | null;\r\n\thandler: (() => void) | null;\r\n\tcloseAfterHandlerClick: boolean;\r\n\thide: boolean;\r\n\tseparator: boolean;\r\n\tchildren: CfContextMenuItemFull[];\r\n}\r\n\r\nexport type EnterAsTabCallbackFunction = (params: EnterAsTabCallbackFunctionParams) => boolean;\r\n\r\nexport interface EnterAsTabCallbackFunctionParams {\r\n\tactualIndex: number | null;\r\n\tnextTargetIndex: number;\r\n\tavailableIndexes: number[];\r\n\tlastAvailableIndex: number | null;\r\n\tfirstAvailableIndex: number | null;\r\n\titems: QueryList<FormItem>;\r\n}\r\n\r\nexport interface DragDropListSortEvent {\r\n\toldPosition: number | null;\r\n\tnewPosition: number | null;\r\n\tdragDirective: CfDragDirective;\r\n\tdragData: any;\r\n}\r\n\r\nexport type TranslationType = {[key: string]: TranslationType | string}; \r\n\r\nexport type MultiLangData<T = string> = {[key: string]: T};\r\n\r\nexport interface FileSource {\r\n\tfile?: File,\r\n\tdataUri?: string,\r\n\tfileUrl?: string,\r\n\tfileName?: string\r\n}\r\n\r\nexport type CfFormErrorsMap = Map<AbstractControl, CfFormError>;\r\n\r\nexport type CfFormError = {\r\n    label: string | null;\r\n    tags: string[];\r\n    labelPath: string[];\r\n    value: any;\r\n    errors: CfFormErrorItem[];\r\n};\r\n\r\nexport interface CfFormErrorItem {\r\n    key: string;\r\n    value: any;\r\n}\r\n\r\nexport enum Precheck {\r\n    ERROR = \"ERROR\",\r\n    WARNING = \"WARNING\"\r\n}\r\n\r\nexport type PrecheckNullable = Precheck | null;\r\n\r\nexport interface CfObservableSubscribeWithOptions {\r\n    skipInterceptors?: InterceptorType[];\r\n    precheck?: Precheck;\r\n    confirmAccept?: ConfirmConfiguration | string;\r\n    confirmAcceptDialogConfiguration?: CfDialogConfiguration;\r\n    messageAfterSuccess?: MessagePartial;\r\n    showLoading?: LoadingConfiguration;\r\n    showLoadingDialogConfiguration?: CfDialogConfiguration;\r\n    destroyRef?: DestroyRef;\r\n}\r\n\r\nexport type PredefinedDialogs = {[key: string]: (() => Promise<Type<any>>) | {component: () => Promise<Type<any>>, configuration: CfDialogConfiguration}};\r\n\r\nexport interface InputTextDialogConfiguration {\r\n    title: string;\r\n    inputLabel: string;\r\n    description?: string;\r\n    formControl?: FormControl<string>;\r\n    saveButtonLabel?: string;\r\n    closeButtonLabel?: string;\r\n}\r\n\r\nexport interface InputTextareaDialogConfiguration {\r\n    title: string;\r\n    inputLabel: string;\r\n\ttextareaHeight?: string;\r\n    description?: string;\r\n    formControl?: FormControl<string>;\r\n    saveButtonLabel?: string;\r\n    closeButtonLabel?: string;\r\n}\r\n\r\nexport interface ErrorTranslateHandlerFunctionParams {\r\n    key: string;\r\n    value: any;\r\n    translationsService: TranslationsService;\r\n    localeId: string;\r\n}\r\n\r\nexport type ErrorTranslateHandlerFunction = (params: ErrorTranslateHandlerFunctionParams) => string;\r\nexport type ErrorTranslateHandlers = Map<string, ErrorTranslateHandlerFunction>;\r\n\r\nexport interface ShowFormErrorsModalParams {\r\n    title: string;\r\n    dialogConfiguration?: CfDialogConfiguration;\r\n    cfFormErrors?: CfFormErrors;\r\n    cfFormGroup?: CfFormGroup<any>;\r\n    cfFormControl?: CfFormControl<any, any>;\r\n    cfFormArray?: CfFormArray;\r\n}\r\n\r\nexport interface ShowFormErrorsModalFormGroupParams extends ShowFormErrorsModalParams {\r\n    labelPath?: string[];\r\n}\r\n\r\nexport interface MockResponses {\r\n\tpathname?: {[key: string]: any};\r\n\turl?: {[key: string]: any};\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ValidationErrors } from \"@angular/forms\";\r\nimport { Subject } from \"rxjs\";\r\nimport { LogLevel } from \"../../enums\";\r\nimport { CfWebSocketConfiguration, StoreServiceMode } from \"../../interfaces\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfConfigService {\r\n\ttableDefaultCurrency: string = 'USD';\r\n\tcurrencyPipeDefaultCurrency: string = 'USD';\r\n\tloggerServiceLogLevel: LogLevel = LogLevel.Off;\r\n\thttpLoading: Subject<boolean> = new Subject();\r\n\tdefaultCookieExpire: number | null = null;\r\n\tdefaultCookiePath: string = '/';\r\n\tdefaultStoreServiceMode: StoreServiceMode = StoreServiceMode.LOCAL;\r\n\tdefaultStoreServiceStoreKey: string = 'store';\r\n\tpermissionGuardNoPermissionCommands: any[] = ['/'];\r\n\tdefaultCurrencyDigitsInfo: string = '1.0-0';\r\n\tdefaultWebSocketConfiguration: CfWebSocketConfiguration = { autoReconnectOnClose: true, url: null, onCloseCallback: null };\r\n\tformErrorsTooltipDirectiveCallback: ((input: ValidationErrors | null) => string) | null = null;\r\n}\r\n","import { CfFormErrorsMap } from \"../../../interfaces\";\r\n\r\nexport class CfFormErrors {\r\n\r\n    errors: CfFormErrorsMap = new Map();\r\n\r\n    hasErrorByTag(tag: string): boolean {\r\n        for (let { tags } of this.errors.values()) {\r\n            if (tags.includes(tag)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n}\r\n","import { AsyncValidatorFn, FormControl, FormControlOptions, FormControlState, ValidatorFn } from \"@angular/forms\";\r\nimport { AutocompleteComponent, CheckboxComponent, ColorPickerComponent, DateTimePickerComponent, DropdownComponent, InputNumberComponent, InputTextareaComponent, InputTextComponent, ListboxComponent, MediaFiles, MediaManagerComponent, MediaManagerConfiguration, RadioComponent, SwitchComponent, TagsComponent, TreeComponent } from \"../../../features\";\r\nimport { TreeLike } from \"../../../interfaces\";\r\nimport { CfFormErrors } from \"./formerrors.class\";\r\nimport { collectErrors } from \"../../helpers\";\r\n\r\nexport enum CfFormControlType {\r\n    GENERAL = 'GENERAL',\r\n    AUTOCOMPLETE = 'AUTOCOMPLETE',\r\n    CHECKBOX = 'CHECKBOX',\r\n    COLORPICKER = 'COLORPICKER',\r\n    DATETIMEPICKER = 'DATETIMEPICKER',\r\n    DROPDOWN = 'DROPDOWN',\r\n    INPUTTEXT = 'INPUTTEXT',\r\n    INPUTTEXTAREA = 'INPUTTEXTAREA',\r\n    INPUTNUMBER = 'INPUTNUMBER',\r\n    LISTBOX = 'LISTBOX',\r\n    MEDIAMANAGER = 'MEDIAMANAGER',\r\n    SWITCH = 'SWITCH',\r\n    RADIO = 'RADIO',\r\n    TAGS = 'TAGS',\r\n    TREE = 'TREE',\r\n}\r\n\r\nexport interface CfFormControlOptions {\r\n    label?: string;\r\n    tags?: string[];\r\n    permanentTags?: string[];\r\n}\r\n\r\nexport interface CfFormControlOptionsAutocomplete extends CfFormControlOptions {\r\n    labelId?: string;\r\n    valueId?: string;\r\n    selectMode?: 'label' | 'value' | 'object';\r\n}\r\n\r\nexport interface CfFormControlOptionsDateTimePicker extends CfFormControlOptions {\r\n    mode?: 'date' | 'time' | 'datetime';\r\n    local?: boolean;\r\n}\r\n\r\nexport interface CfFormControlOptionsDrodown extends CfFormControlOptions {\r\n    values?: any[];\r\n    labelId?: string;\r\n    valueId?: string;\r\n}\r\n\r\nexport interface CfFormControlOptionsCheckbox extends CfFormControlOptions {\r\n    triState?: boolean;\r\n}\r\n\r\nexport interface CfFormControlOptionsListbox extends CfFormControlOptions {\r\n    labelId?: string;\r\n    valueId?: string;\r\n    multiple?: boolean;\r\n    values?: any[];\r\n    checkbox?: boolean;\r\n}\r\n\r\nexport interface CfFormControlOptionsMediaManager extends CfFormControlOptions {\r\n    configuration?: MediaManagerConfiguration;\r\n    modalMode?: boolean;\r\n}\r\n\r\nexport interface CfFormControlOptionsRadio extends CfFormControlOptions {\r\n    group?: string;\r\n}\r\n\r\nexport interface CfFormControlOptionsTags extends CfFormControlOptions {\r\n    values?: string[];\r\n}\r\n\r\nexport interface CfFormControlOptionsTree extends CfFormControlOptions {\r\n    values?: TreeLike<any>;\r\n    labelId?: string;\r\n    valueId?: string;\r\n}\r\n\r\nexport interface CfFormControlTypeComponentMap {\r\n    [CfFormControlType.GENERAL]: null;\r\n    [CfFormControlType.AUTOCOMPLETE]: AutocompleteComponent;\r\n    [CfFormControlType.CHECKBOX]: CheckboxComponent;\r\n    [CfFormControlType.COLORPICKER]: ColorPickerComponent;\r\n    [CfFormControlType.DATETIMEPICKER]: DateTimePickerComponent;\r\n    [CfFormControlType.DROPDOWN]: DropdownComponent;\r\n    [CfFormControlType.INPUTTEXT]: InputTextComponent;\r\n    [CfFormControlType.INPUTTEXTAREA]: InputTextareaComponent;\r\n    [CfFormControlType.INPUTNUMBER]: InputNumberComponent;\r\n    [CfFormControlType.LISTBOX]: ListboxComponent;\r\n    [CfFormControlType.MEDIAMANAGER]: MediaManagerComponent;\r\n    [CfFormControlType.RADIO]: RadioComponent;\r\n    [CfFormControlType.SWITCH]: SwitchComponent;\r\n    [CfFormControlType.TAGS]: TagsComponent;\r\n    [CfFormControlType.TREE]: TreeComponent;\r\n}\r\n\r\nexport interface CfFormControlTypeValueMap {\r\n    [CfFormControlType.GENERAL]: any;\r\n    [CfFormControlType.AUTOCOMPLETE]: string;\r\n    [CfFormControlType.CHECKBOX]: boolean;\r\n    [CfFormControlType.COLORPICKER]: string;\r\n    [CfFormControlType.DATETIMEPICKER]: string | Date | null;\r\n    [CfFormControlType.DROPDOWN]: string | null;\r\n    [CfFormControlType.INPUTTEXT]: string;\r\n    [CfFormControlType.INPUTTEXTAREA]: string;\r\n    [CfFormControlType.INPUTNUMBER]: number | null;\r\n    [CfFormControlType.LISTBOX]: any[];\r\n    [CfFormControlType.MEDIAMANAGER]: MediaFiles;\r\n    [CfFormControlType.RADIO]: any;\r\n    [CfFormControlType.SWITCH]: boolean;\r\n    [CfFormControlType.TAGS]: string[];\r\n    [CfFormControlType.TREE]: any[];\r\n}\r\n\r\nexport interface CfFormControlTypeOptionsMap {\r\n    [CfFormControlType.GENERAL]: CfFormControlOptions;\r\n    [CfFormControlType.AUTOCOMPLETE]: CfFormControlOptionsAutocomplete;\r\n    [CfFormControlType.CHECKBOX]: CfFormControlOptionsCheckbox;\r\n    [CfFormControlType.COLORPICKER]: CfFormControlOptions;\r\n    [CfFormControlType.DATETIMEPICKER]: CfFormControlOptionsDateTimePicker;\r\n    [CfFormControlType.DROPDOWN]: CfFormControlOptionsDrodown;\r\n    [CfFormControlType.INPUTTEXT]: CfFormControlOptions;\r\n    [CfFormControlType.INPUTTEXTAREA]: CfFormControlOptions;\r\n    [CfFormControlType.INPUTNUMBER]: CfFormControlOptions;\r\n    [CfFormControlType.LISTBOX]: CfFormControlOptionsListbox;\r\n    [CfFormControlType.MEDIAMANAGER]: CfFormControlOptionsMediaManager;\r\n    [CfFormControlType.RADIO]: CfFormControlOptionsRadio;\r\n    [CfFormControlType.SWITCH]: CfFormControlOptions;\r\n    [CfFormControlType.TAGS]: CfFormControlOptionsTags;\r\n    [CfFormControlType.TREE]: CfFormControlOptionsTree;\r\n}\r\n\r\nexport interface CfFormControl<TType extends keyof CfFormControlTypeComponentMap, T> extends FormControl<T> {\r\n    type: TType | null;\r\n    tags: string[];\r\n    component: CfFormControlTypeComponentMap[TType] | null;\r\n    cfOptions: CfFormControlTypeOptionsMap[TType];\r\n    setCfOptions(cfOptions: Partial<CfFormControlTypeOptionsMap[TType]>): CfFormControl<TType, T>;\r\n    applyCfOptions(): void;\r\n    setComponent(component: CfFormControlTypeComponentMap[TType]): void;\r\n    clearComponent(): void;\r\n    collectErrors(errors?: CfFormErrors, labelPath?: string[]): CfFormErrors;\r\n    setType(type: TType): void;\r\n}\r\ntype CfFormControlInterface<TType extends keyof CfFormControlTypeComponentMap, T> = CfFormControl<TType, T>;\r\n\r\nexport type CfFormControlInputNumber = CfFormControl<CfFormControlType.INPUTNUMBER, number | null>;\r\n\r\n// Internal class, rip-off ɵFormControlCtor with enhanced typings\r\ninterface ɵCfFormControlCtor {\r\n    new<TType extends keyof CfFormControlTypeComponentMap, T>(): CfFormControl<TType, T>;\r\n\r\n    new<TType extends keyof CfFormControlTypeComponentMap, T>(value: FormControlState<T> | T, opts: FormControlOptions & { nonNullable: true }): CfFormControl<TType, T>;\r\n\r\n    new<TType extends keyof CfFormControlTypeComponentMap, T>(\r\n        value: FormControlState<T> | T,\r\n        validatorOrOpts?: ValidatorFn | ValidatorFn[] | FormControlOptions | null,\r\n        asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\r\n    ): CfFormControl<TType, T>;\r\n\r\n    prototype: CfFormControl<any, any>;\r\n}\r\n\r\nexport let cfFormControlPermanentTagsOptions: {tags: string[] | null} = {\r\n    tags: null\r\n};\r\n\r\nexport const CfFormControl: ɵCfFormControlCtor = class CfFormControl<TType extends keyof CfFormControlTypeComponentMap, T> extends FormControl<T> implements CfFormControlInterface<TType, T> {\r\n\r\n    type: TType | null = null;\r\n\r\n    tags: string[] = [];\r\n\r\n    component: CfFormControlTypeComponentMap[TType] | null = null;\r\n\r\n    cfOptions: CfFormControlTypeOptionsMap[TType] = {};\r\n\r\n    public setType(type: TType): void {\r\n        this.type = type;\r\n    }\r\n\r\n    public setComponent(component: CfFormControlTypeComponentMap[TType]): void {\r\n        this.component = component;\r\n        this.component.destroyRef.onDestroy(() => {\r\n            this.component = null;\r\n        });\r\n        this.applyCfOptions();\r\n    }\r\n\r\n    public clearComponent(): void {\r\n        this.component = null;\r\n    }\r\n\r\n    setCfOptions(cfOptions: Partial<CfFormControlTypeOptionsMap[TType]>): CfFormControl<TType, T> {\r\n        this.cfOptions = cfOptions;\r\n        if (this.cfOptions.tags !== undefined) {\r\n            this.tags = this.cfOptions.tags;\r\n        } else {\r\n            if (this.cfOptions.permanentTags !== undefined) {\r\n                cfFormControlPermanentTagsOptions.tags = this.cfOptions.permanentTags;\r\n                this.tags = cfFormControlPermanentTagsOptions.tags;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    applyCfOptions(): void {\r\n        if (this.component === null) {\r\n            return;\r\n        }\r\n\r\n        this.cfOptions.label === undefined || (this.component.label = this.cfOptions.label);\r\n\r\n        switch(this.type) {\r\n            case CfFormControlType.AUTOCOMPLETE:\r\n                (this.cfOptions as CfFormControlOptionsAutocomplete).labelId === undefined || ((this.component as AutocompleteComponent).labelId = (this.cfOptions as CfFormControlOptionsAutocomplete).labelId);\r\n                (this.cfOptions as CfFormControlOptionsAutocomplete).valueId === undefined || ((this.component as AutocompleteComponent).valueId = (this.cfOptions as CfFormControlOptionsAutocomplete).valueId);\r\n                (this.cfOptions as CfFormControlOptionsAutocomplete).selectMode === undefined || ((this.component as AutocompleteComponent).selectMode = (this.cfOptions as CfFormControlOptionsAutocomplete).selectMode);\r\n                break;\r\n            case CfFormControlType.CHECKBOX:\r\n                (this.cfOptions as CfFormControlOptionsCheckbox).triState === undefined || ((this.component as CheckboxComponent).triState = (this.cfOptions as CfFormControlOptionsCheckbox).triState);\r\n                break;\r\n            case CfFormControlType.DATETIMEPICKER:\r\n                (this.cfOptions as CfFormControlOptionsDateTimePicker).local === undefined || ((this.component as DateTimePickerComponent).local = (this.cfOptions as CfFormControlOptionsDateTimePicker).local);\r\n                (this.cfOptions as CfFormControlOptionsDateTimePicker).mode === undefined || ((this.component as DateTimePickerComponent).mode = (this.cfOptions as CfFormControlOptionsDateTimePicker).mode);\r\n                break;\r\n            case CfFormControlType.DROPDOWN:\r\n                (this.cfOptions as CfFormControlOptionsDrodown).labelId === undefined || ((this.component as DropdownComponent).labelId = (this.cfOptions as CfFormControlOptionsDrodown).labelId);\r\n                (this.cfOptions as CfFormControlOptionsDrodown).valueId === undefined || ((this.component as DropdownComponent).valueId = (this.cfOptions as CfFormControlOptionsDrodown).valueId);\r\n                (this.cfOptions as CfFormControlOptionsDrodown).values === undefined || ((this.component as DropdownComponent).values = (this.cfOptions as CfFormControlOptionsDrodown).values);\r\n                break;\r\n            case CfFormControlType.LISTBOX:\r\n                (this.cfOptions as CfFormControlOptionsListbox).labelId === undefined || ((this.component as ListboxComponent).labelId = (this.cfOptions as CfFormControlOptionsListbox).labelId);\r\n                (this.cfOptions as CfFormControlOptionsListbox).valueId === undefined || ((this.component as ListboxComponent).valueId = (this.cfOptions as CfFormControlOptionsListbox).valueId);\r\n                (this.cfOptions as CfFormControlOptionsListbox).values === undefined || ((this.component as ListboxComponent).values = (this.cfOptions as CfFormControlOptionsListbox).values);\r\n                (this.cfOptions as CfFormControlOptionsListbox).multiple === undefined || ((this.component as ListboxComponent).multiple = (this.cfOptions as CfFormControlOptionsListbox).multiple);\r\n                (this.cfOptions as CfFormControlOptionsListbox).checkbox === undefined || ((this.component as ListboxComponent).checkbox = (this.cfOptions as CfFormControlOptionsListbox).checkbox);\r\n                break;\r\n            case CfFormControlType.MEDIAMANAGER:\r\n                (this.cfOptions as CfFormControlOptionsMediaManager).modalMode === undefined || ((this.component as MediaManagerComponent).modalMode = (this.cfOptions as CfFormControlOptionsMediaManager).modalMode);\r\n                (this.cfOptions as CfFormControlOptionsMediaManager).configuration === undefined || ((this.component as MediaManagerComponent).configuration = (this.cfOptions as CfFormControlOptionsMediaManager).configuration);\r\n                break;\r\n            case CfFormControlType.RADIO:\r\n                (this.cfOptions as CfFormControlOptionsRadio).group === undefined || ((this.component as RadioComponent).group = (this.cfOptions as CfFormControlOptionsRadio).group);\r\n                break;\r\n            case CfFormControlType.TREE:\r\n                (this.cfOptions as CfFormControlOptionsTree).labelId === undefined || ((this.component as TreeComponent).labelId = (this.cfOptions as CfFormControlOptionsTree).labelId);\r\n                (this.cfOptions as CfFormControlOptionsTree).valueId === undefined || ((this.component as TreeComponent).valueId = (this.cfOptions as CfFormControlOptionsTree).valueId);\r\n                (this.cfOptions as CfFormControlOptionsTree).values === undefined || ((this.component as TreeComponent).values = (this.cfOptions as CfFormControlOptionsTree).values);\r\n                break;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Collect errors\r\n     */\r\n    public collectErrors(errors: CfFormErrors = new CfFormErrors(), labelPath: string[] = []): CfFormErrors {\r\n        return collectErrors(this, errors, labelPath);\r\n    }\r\n\r\n    constructor(\r\n        // formState and defaultValue will only be null if T is nullable\r\n        formState: FormControlState<T> | T = null as unknown as T,\r\n        validatorOrOpts?: ValidatorFn | ValidatorFn[] | FormControlOptions | null,\r\n        asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\r\n    ) {\r\n        super(formState, validatorOrOpts, asyncValidator);\r\n        if (cfFormControlPermanentTagsOptions.tags !== null) {\r\n            this.tags = [...cfFormControlPermanentTagsOptions.tags];\r\n        }\r\n    }\r\n};\r\n","import { DOCUMENT, isPlatformBrowser } from \"@angular/common\";\r\nimport { ElementRef, inject, PLATFORM_ID } from \"@angular/core\";\r\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup } from \"@angular/forms\";\r\nimport { DomSanitizer, SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl } from \"@angular/platform-browser\";\r\nimport { DateItem } from \"../../features\";\r\nimport { MediaFiles, MediaUploadErros } from \"../../features/mediamanager/mediamanager.interfaces\";\r\nimport { FileSource, LabelValue, MultiLangData } from \"../../interfaces\";\r\nimport { CfFormBuilder, CfFormControl, CfFormGroup, createCfFormControl } from \"../classes\";\r\nimport { CfFormControlType, CfFormControlTypeValueMap } from \"../classes/form/formcontrol\";\r\n\r\nexport function isStringArray(values: any[]): boolean {\r\n    return values instanceof Array && values.every(item => typeof item === \"string\");\r\n}\r\n\r\nexport function isNumberArray(values: any[]): boolean {\r\n    return values instanceof Array && values.every(item => typeof item === \"number\");\r\n}\r\n\r\n/**\r\n * Convert any array to LabelValue if it contains only `strings` or `numbers`\r\n * @param values any[]\r\n * @returns `LabelValue<string | number>[]`\r\n */\r\nexport function convertValues(values: any[]): LabelValue<string | number>[] {\r\n    if (isStringArray(values)) {\r\n        return (values as string[]).map((value: string) => ({\r\n            label: value,\r\n            value\r\n        }));\r\n    }\r\n    if (isNumberArray(values)) {\r\n        return (values as number[]).map((value: number) => ({\r\n            label: value.toString(),\r\n            value\r\n        }));\r\n    }\r\n    return values;\r\n}\r\n\r\nexport function getPath(element: Element): Element[] {\r\n\tconst elements: Element[] = [element];\r\n\twhile (elements[elements.length - 1].parentElement !== null) {\r\n        const parentElement: HTMLElement | null = elements[elements.length - 1].parentElement;\r\n        if (parentElement !== null) {\r\n            elements.push(parentElement);\r\n        }\r\n\t}\r\n    return elements;\r\n}\r\n\r\nexport function isOuter(elements: (Element | ElementRef<Element> | undefined)[], event: PointerEvent | MouseEvent | FocusEvent): boolean {\r\n\tconst processedElements: Element[] = [];\r\n\tfor (let element of elements) {\r\n\t\tif (element !== undefined) {\r\n\t\t\tif (element instanceof ElementRef) {\r\n\t\t\t\tprocessedElements.push(element.nativeElement);\r\n\t\t\t} else {\r\n\t\t\t\tprocessedElements.push(element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn processedElements.every((processedElement) => !getPath(event.target as Element).includes(processedElement));\r\n}\r\n\r\nexport function inPath(element: Element, event: PointerEvent | MouseEvent | WheelEvent): boolean {\r\n    return getPath(event.target as Element).includes(element);\r\n}\r\n\r\nexport function dateIsValid(date: Date): boolean {\r\n    return date instanceof Date && !isNaN(date.getTime());\r\n}\r\n\r\nexport function dateSame(a: Date | null, b: Date | null): boolean {\r\n\tif (a === null || b === null) {\r\n\t\treturn false;\r\n\t}\r\n\treturn a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\r\n}\r\n\r\nexport function inDate(a: Date, b: Date[]): boolean {\r\n\treturn b.some((e: Date) => dateSame(a, e));\r\n}\r\n\r\nexport function dateGt(a: Date, minDate: Date | null): boolean {\r\n\tif (minDate === null) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (new Date(a.getFullYear(), a.getMonth(), a.getDate())) > (new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()));\r\n}\r\n\r\nexport function dateLt(a: Date, minDate: Date | null): boolean {\r\n\tif (minDate === null) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (new Date(a.getFullYear(), a.getMonth(), a.getDate())) < (new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()));\r\n}\r\n\r\nexport function dateBetween(a: Date, minDate: Date, maxDate: Date): boolean {\r\n    return dateGt(a, minDate) && dateLt(a, maxDate);\r\n}\r\n\r\nexport function getCalendarDrawDates(date: Date, selectedDate: Date | null, today: Date | null, minDate: Date | null, maxDate: Date | null, disabledDates: Date[]): DateItem[] {\r\n    const year: number = date.getFullYear();\r\n\tconst month: number = date.getMonth();\r\n\tconst firstWeekDayOfMonth: number = new Date(year, month, 1).getDay();\r\n\tconst daysFromPreviousMonth: number = firstWeekDayOfMonth === 0 ? 6 : firstWeekDayOfMonth - 1;\r\n\tconst firstDay: Date = new Date(year, month, -daysFromPreviousMonth);\r\n\tconst dates: DateItem[] = [];\r\n\tfor (let i = 0; i < 42; i++) {\r\n\t\tfirstDay.setDate(firstDay.getDate() + 1);\r\n\t\tdates.push({\r\n\t\t\tdate: new Date(firstDay),\r\n\t\t\tdisabled: inDate(firstDay, disabledDates) || dateGt(firstDay, maxDate) || dateLt(firstDay, minDate),\r\n\t\t\tselected: selectedDate !== null && dateSame(firstDay, selectedDate),\r\n\t\t\ttoday: dateSame(firstDay, today),\r\n            otherMonth: firstDay.getMonth() !== date.getMonth()\r\n\t\t});\r\n\t}\r\n\treturn dates;\r\n}\r\n\r\nexport function replaceAll(input: string, find: string, replace: string): string {\r\n    return input.replace(new RegExp(find, 'g'), replace);\r\n}\r\n\r\nexport function convertToThousandSeparator(input: number | string, thousandSeparator: string = ' ', decimalSign: string = '.'): string {\r\n        if (typeof input === 'number') {\r\n            input = input.toString();\r\n        }\r\n        if (typeof input === 'string') {\r\n            const isNegative: boolean = input[0] === '-';\r\n            if (isNegative) {\r\n                input = input.slice(1);\r\n            }\r\n            input = input.replace(',', '.');\r\n            const inputParts: string[] = input.split('.');\r\n            inputParts[0] = inputParts[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, thousandSeparator);\r\n            return (isNegative ? '-' : '') + inputParts.join(decimalSign);\r\n        }\r\n        return 'NaN';\r\n}\r\n\r\nexport function convertToCurrency(input: number | string, currency: string): string {\r\n    if (currency === 'USD') {\r\n        return convertToThousandSeparator(input, '.', ',') + '$';\r\n    }\r\n    if (currency === 'EUR') {\r\n        return '€' + convertToThousandSeparator(input, '.', ',');\r\n    }\r\n    if (currency === 'HUF') {\r\n        return convertToThousandSeparator(input, ' ', '.') + ' Ft';\r\n    }\r\n    return convertToThousandSeparator(input) + ' ' + currency;\r\n}\r\n\r\nexport function selectIndexMinMax(actualIndex: number, mode: 'up' | 'down', max: number, min: number = 0): number | null {\r\n    if (mode === 'down') {\r\n        if (actualIndex === null) {\r\n            return min;\r\n        } else {\r\n            let selectedIndex: number = actualIndex + 1;\r\n            if (selectedIndex > max) {\r\n                selectedIndex = min;\r\n            }\r\n            return selectedIndex;\r\n        }\r\n    }\r\n    if (mode === 'up') {\r\n        if (actualIndex === null) {\r\n            return max;\r\n        } else {\r\n            let selectedIndex: number = actualIndex - 1;\r\n            if (selectedIndex < min) {\r\n                selectedIndex = max;\r\n            }\r\n            return selectedIndex;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nexport function randomIntFromInterval(min: number, max: number): number { // min and max included \r\n    return Math.floor(Math.random() * (max - min + 1) + min);\r\n}\r\n\r\nexport function safeHtml(domSanitizer: DomSanitizer, input: string): SafeHtml {\r\n    return domSanitizer.bypassSecurityTrustHtml(input);\r\n}\r\n\r\nexport function safeStyle(domSanitizer: DomSanitizer, input: string): SafeStyle {\r\n    return domSanitizer.bypassSecurityTrustStyle(input);\r\n}\r\n\r\nexport function safeScript(domSanitizer: DomSanitizer, input: string): SafeScript {\r\n    return domSanitizer.bypassSecurityTrustScript(input);\r\n}\r\n\r\nexport function safeUrl(domSanitizer: DomSanitizer, input: string): SafeUrl {\r\n    return domSanitizer.bypassSecurityTrustUrl(input);\r\n}\r\n\r\nexport function safeResourceUrl(domSanitizer: DomSanitizer, input: string): SafeResourceUrl {\r\n    return domSanitizer.bypassSecurityTrustResourceUrl(input);\r\n}\r\n\r\nexport function classes(classes: {[key: string]: boolean}): string {\r\n    return Object.keys(classes).filter((classesKey: string) => classes[classesKey] === true).join(' ');\r\n}\r\n\r\n/**\r\n * Escape characters that have a special meaning in Regular Expressions\r\n**/\r\nexport function escapeRegExp(s: string): string {\r\n\treturn s.replace(/([.+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\r\n}\r\n\r\n/**\r\n * Transforms a string into a number (if needed).\r\n */\r\nexport function strToNumber(value: number | string | null): number | null {\r\n    if (typeof value === 'number') {\r\n        return value;\r\n    }\r\n    if (typeof value === 'string') {\r\n        value = value.replace(/\\,/g, '.').replace(/\\s+/g, '');\r\n        if (!isNaN(Number(value) - parseFloat(value))) {\r\n            return Number(value);\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * Append to body\r\n */\r\nexport function appendToBody(element: HTMLElement): void {\r\n    document.body.appendChild(element);\r\n}\r\n\r\nexport function setElementRect(\r\n\tinputElement: HTMLElement,\r\n    element: HTMLElement,\r\n    width: string | null,\r\n    height: string | null,\r\n): void {\r\n\tif (width !== null) {\r\n\t\telement.style.width = width;\r\n\t}\r\n\tif (height !== null) {\r\n\t\telement.style.height = height;\r\n\t}\r\n\tconst inputRect: DOMRect = inputElement.getBoundingClientRect();\r\n\tconst containerRect: DOMRect = element.getBoundingClientRect();\r\n\r\n\tconst viewportHeight: number = window.innerHeight;\r\n\r\n\tconst scrollY: number = window.scrollY;\r\n\tconst scrollX: number = window.scrollX;\r\n\r\n\tconst spaceBelow: number = viewportHeight - inputRect.bottom;\r\n\r\n\tlet top: number = inputRect.bottom + scrollY;\r\n\tlet left: number = inputRect.left + scrollX;\r\n\tlet extraClass: string = \"cf-position-bottom\";\r\n\r\n\tif (spaceBelow < containerRect.height) {\r\n\t\ttop = inputRect.top + scrollY - containerRect.height;\r\n\t\textraClass = \"cf-position-top\";\r\n\t}\r\n\r\n\telement.classList.add(extraClass);\r\n\telement.style.top = top.toString() + 'px';\r\n\telement.style.left = left.toString() + 'px';\r\n}\r\n\r\nexport function generateUuid(): string {\r\n    return ('10000000-1000-4000-8000-100000000000').replace(/[018]/g, (c: any) => (\r\n        c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\r\n    );\r\n}\r\n\r\nexport function arraySwitch<T>(inputArray: T[], oldPosition: number, newPosition: number): T[] {\r\n\tif (inputArray[oldPosition] === undefined || inputArray[newPosition] === undefined) {\r\n\t\treturn inputArray;\r\n\t}\r\n\tconst outputArray: T[] = [...inputArray];\r\n\t[outputArray[oldPosition], outputArray[newPosition]] = [outputArray[newPosition], outputArray[oldPosition]];\r\n\treturn outputArray;\r\n}\r\n\r\nexport function arrayMove<T>(inputArray: T[], oldPostition: number | null, newPosition: number | null, data: T | undefined = undefined): T[] {\r\n\tconst clonedArray: T[] = [...inputArray];\r\n\tif (oldPostition !== null || newPosition !== null) {\r\n\t\tif (oldPostition !== null && newPosition === null) {\r\n\t\t\tclonedArray.splice(oldPostition, 1);\r\n\t\t}\r\n\t\tif (oldPostition === null && newPosition !== null && data !== undefined) {\r\n\t\t\tclonedArray.splice(newPosition, 0, data);\r\n\t\t}\r\n\t\tif (oldPostition !== null && newPosition !== null) {\r\n\t\t\tif (inputArray[oldPostition] !== undefined && inputArray[newPosition] !== undefined) {\r\n\t\t\t\tconst element: T = clonedArray[oldPostition];\r\n\t\t\t\tclonedArray.splice(oldPostition, 1);\r\n\t\t\t\tclonedArray.splice(newPosition, 0, element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn clonedArray;\r\n}\r\n\r\nexport function localStorage(): Storage | null {\r\n\tconst document: Document = inject(DOCUMENT);\r\n\tif (document.defaultView !== null) {\r\n\t\treturn document.defaultView.window.localStorage;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function webSocket(url: string, protocols?: string | string[]): WebSocket | null {\r\n\tconst document: Document = inject(DOCUMENT);\r\n\tif (document.defaultView !== null) {\r\n\t\treturn new document.defaultView.window.WebSocket(url, protocols);\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function sessionStorage(): Storage | null {\r\n\tconst document: Document = inject(DOCUMENT);\r\n\tif (document.defaultView !== null) {\r\n\t\treturn document.defaultView.window.sessionStorage;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function isBrowser(): boolean {\r\n\tconst platformId: Object = inject(PLATFORM_ID);\r\n\treturn isPlatformBrowser(platformId);\r\n}\r\n\r\nexport function createMultilangFormGroup<T>(languages: string[] | LabelValue<string>[], fb: FormBuilder, value: T | MultiLangData<T>, multilangDataPassed: boolean = false): FormGroup<{[key: string]: FormControl<T>}> {\r\n\tconst formGroup = fb.group({});\r\n\tfor (let language of languages) {\r\n        const langId: string = typeof language === 'string' ? language : language.value;\r\n        if (multilangDataPassed) {\r\n            formGroup.addControl(langId, fb.control(value[langId]));\r\n        } else {\r\n            formGroup.addControl(langId, fb.control(value));\r\n        }\r\n\t}\r\n\treturn formGroup;\r\n}\r\n\r\nexport function createMultilangCfFormGroup<TType extends keyof CfFormControlTypeValueMap>(\r\n    cffb: CfFormBuilder,\r\n    type: TType,\r\n    languages: string[] | LabelValue<string>[],\r\n    value: CfFormControlTypeValueMap[TType] | MultiLangData<CfFormControlTypeValueMap[TType]>,\r\n    multilangDataPassed: boolean = false,\r\n    resetCfFormControlPermanentTags: boolean = false\r\n): CfFormGroup<{[key: string]: CfFormControl<TType, CfFormControlTypeValueMap[TType]>}> {\r\n\tconst formGroup = cffb.cfGroup({}, null, null, resetCfFormControlPermanentTags);\r\n\tfor (let language of languages) {\r\n        const langId: string = typeof language === 'string' ? language : language.value;\r\n        const langName: string = typeof language === 'string' ? language : language.label;\r\n        if (multilangDataPassed) {\r\n            formGroup.addControl(langId, createCfFormControl(type, value[langId]).setCfOptions({label: langName}));\r\n        } else {\r\n            formGroup.addControl(langId, createCfFormControl(type, value).setCfOptions({label: langName}));\r\n        }\r\n\t}\r\n\treturn formGroup;\r\n}\r\n\r\nexport function createMultilangCfFormGroupTyped<T>(\r\n    cffb: CfFormBuilder,\r\n    languages: string[] | LabelValue<string>[],\r\n    value: T | MultiLangData<T>,\r\n    multilangDataPassed: boolean = false,\r\n    resetCfFormControlPermanentTags: boolean = false\r\n): CfFormGroup<{[key: string]: CfFormControl<CfFormControlType.GENERAL, T>}> {\r\n\tconst formGroup = cffb.cfGroup({}, null, null, resetCfFormControlPermanentTags);\r\n\tfor (let language of languages) {\r\n        const langId: string = typeof language === 'string' ? language : language.value;\r\n        const langName: string = typeof language === 'string' ? language : language.label;\r\n        if (multilangDataPassed) {\r\n            formGroup.addControl(langId, createCfFormControl(CfFormControlType.GENERAL, value[langId]).setCfOptions({label: langName}));\r\n        } else {\r\n            formGroup.addControl(langId, createCfFormControl(CfFormControlType.GENERAL, value).setCfOptions({label: langName}));\r\n        }\r\n\t}\r\n\treturn formGroup;\r\n}\r\n\r\nexport async function getFileUri(source: FileSource): Promise<string | null> {\r\n\r\n\tif (source.file === undefined && source.dataUri === undefined && source.fileUrl === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (source.file !== undefined) {\r\n\t\treturn URL.createObjectURL(source.file);\r\n\t}\r\n\r\n\tif (source.dataUri !== undefined) {\r\n\t\treturn source.dataUri;\r\n\t}\r\n\r\n\tif (source.fileUrl !== undefined) {\r\n\t\tconst blob: Blob = await fetch(source.fileUrl).then((response: Response) => response.blob());\r\n\t\treturn URL.createObjectURL(blob);\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nexport async function downloadFile(source: FileSource): Promise<void> {\r\n\r\n\tconst fileUri: string | null = await getFileUri(source);\r\n\r\n\tif (fileUri === null) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst a: HTMLAnchorElement = document.createElement('a');\r\n\ta.href = fileUri;\r\n\r\n\tlet fileName: string | null = null;\r\n\r\n\tif (source.file !== undefined) {\r\n\t\tfileName = source.file.name;\r\n\t}\r\n\r\n\tif (source.fileName !== undefined) {\r\n\t\tfileName = source.fileName;\r\n\t}\r\n\r\n\tif (fileName !== null) {\r\n\t\ta.download = fileName;\r\n\t\ta.target = '_blank';\r\n\t\ta.click();\r\n\t}\r\n\r\n}\r\n\r\nexport function processMediaManagerFormData(abstractControl: AbstractControl, formData: FormData): void {\r\n\tif (abstractControl instanceof CfFormControl && abstractControl.type === CfFormControlType.MEDIAMANAGER) {\r\n\t\tif (abstractControl.value instanceof Array) {\r\n\t\t\tconst mediaFiles: MediaFiles = abstractControl.value;\r\n\t\t\tfor (let mediaFile of mediaFiles) {\r\n\t\t\t\tif (mediaFile.file instanceof File) {\r\n\t\t\t\t\tformData.append(mediaFile.guid, mediaFile.file);\r\n\t\t\t\t\tdelete mediaFile.file;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (abstractControl instanceof FormGroup) {\r\n\t\tconst controlKeys: string[] = Object.keys(abstractControl.controls);\r\n\t\tcontrolKeys.forEach((key: string) => {\r\n\t\t\tprocessMediaManagerFormData(abstractControl.controls[key], formData);\r\n\t\t});\r\n\t}\r\n\tif (abstractControl instanceof FormArray) {\r\n\t\tconst items: AbstractControl[] = abstractControl.controls;\r\n\t\tfor (let item of items) {\r\n\t\t\tprocessMediaManagerFormData(item, formData);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function createMediaManagerFormData(formGroup: FormGroup, formData: FormData | null = null): FormData {\r\n\tif (formData === null) {\r\n\t\tformData = new FormData();\r\n\t}\r\n\tprocessMediaManagerFormData(formGroup, formData);\r\n\tformData.append('body', JSON.stringify(formGroup.value));\r\n\treturn formData;\r\n}\r\n\r\nexport function distanceNumbers(a: number, b: number): number {\r\n    if (a > b) {\r\n\t\treturn a - b;\r\n    } else {\r\n        return b - a;\r\n    }\r\n}\r\n\r\nexport function onlyUnique<T>(value: T, index: number, array: T[]) {\r\n\treturn array.indexOf(value) === index;\r\n}\r\n\r\nexport function min(input: number[]): number {\r\n\tif (input.length === 0) {\r\n\t\treturn 0;\r\n\t}\r\n\treturn input.reduce((min: number, cur: number) => min > cur ? cur : min, input[0]);\r\n}\r\n\r\nexport function max(input: number[]): number {\r\n\tif (input.length === 0) {\r\n\t\treturn 0;\r\n\t}\r\n\treturn input.reduce((max: number, cur: number) => max < cur ? cur : max, input[0]);\r\n}\r\n\r\nexport function sum(input: number[]): number {\r\n\tlet sum: number = 0;\r\n\tfor (let i of input) {\r\n\t\tsum += i;\r\n\t}\r\n\treturn sum;\r\n}\r\n\r\nexport function findMediaUploadResultErrorControls(startControl: AbstractControl, mediaUploadErros: MediaUploadErros, controls: AbstractControl[] = []): AbstractControl[] {\r\n\tif (startControl instanceof CfFormControl && startControl.type === CfFormControlType.MEDIAMANAGER) {\r\n\t\tconst mediaFiles: MediaFiles = startControl.value;\r\n\t\tfor (let mediaFile of mediaFiles) {\r\n\t\t\tif (mediaUploadErros[mediaFile.guid] !== undefined) {\r\n\t\t\t\tcontrols.push(startControl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (startControl instanceof FormGroup) {\r\n\t\tfor (let control of Object.entries(startControl.controls)) {\r\n\t\t\tfindMediaUploadResultErrorControls(control[1], mediaUploadErros, controls);\r\n\t\t}\r\n\t}\r\n\tif (startControl instanceof FormArray) {\r\n\t\tfor (let control of startControl.controls) {\r\n\t\t\tfindMediaUploadResultErrorControls(control, mediaUploadErros, controls);\r\n\t\t}\r\n\t}\r\n\treturn controls;\r\n}\r\n\r\nexport function minMax(input: number, min: number, max: number): number {\r\n\treturn Math.max(min, Math.min(max, input));\r\n}\r\n","export function showTooltip(\r\n\tcontent: string,\r\n\telement: Element,\r\n\tposition: 'top' | 'right' | 'bottom' | 'left' = 'bottom',\r\n\twidth: string,\r\n\tdistance: number\r\n): HTMLDivElement {\r\n\r\n\t// CREATE AND APPEND TOOLTIP\r\n\tconst tooltip: HTMLDivElement = document.createElement('div');\r\n\ttooltip.innerHTML = content;\r\n\ttooltip.classList.add('cf-tooltip');\r\n\ttooltip.style.width = width;\r\n\ttooltip.style.top = '0px';\r\n\ttooltip.style.left = '0px';\r\n\ttooltip.style.opacity = '0';\r\n\tdocument.body.appendChild(tooltip);\r\n\r\n\tconst tooltipRect: DOMRect = tooltip.getBoundingClientRect();\r\n\tconst elementRect: DOMRect = element.getBoundingClientRect();\r\n\r\n\tconst fallbackPositions: string[] = ['top', 'right', 'bottom', 'left'].filter((fallbackPosition: string) => fallbackPosition !== position);\r\n\tconst postitions: string[] = [position, ...fallbackPositions, position];\r\n\r\n\tlet elementTop: number = elementRect.top + window.scrollY;\r\n\tlet elementLeft: number = elementRect.left + window.scrollX;\r\n\tlet tooltipTop: number = 0;\r\n\tlet tooltipLeft: number = 0;\r\n\r\n\tfor (let position of postitions) {\r\n\t\tif (position === 'top') {\r\n\t\t\ttooltipTop = elementTop - tooltipRect.height - distance;\r\n\t\t\ttooltipLeft = elementLeft - ((tooltipRect.width - elementRect.width) / 2);\r\n\t\t}\r\n\t\tif (position === 'right') {\r\n\t\t\ttooltipTop = elementTop + ((tooltipRect.height - elementRect.height) / 2);\r\n\t\t\ttooltipLeft = elementLeft + elementRect.width + distance;\r\n\t\t}\r\n\t\tif (position === 'bottom') {\r\n\t\t\ttooltipTop = elementTop + tooltipRect.height + distance;\r\n\t\t\ttooltipLeft = elementLeft - ((tooltipRect.width - elementRect.width) / 2);\r\n\t\t}\r\n\t\tif (position === 'left') {\r\n\t\t\ttooltipTop = elementTop + ((tooltipRect.height - elementRect.height) / 2);\r\n\t\t\ttooltipLeft = elementLeft - tooltipRect.width - distance;\r\n\t\t}\r\n\t\tif (isTooltipVisible(tooltipTop, tooltipLeft, tooltipRect.width, tooltipRect.height)) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\ttooltip.style.top = tooltipTop + 'px';\r\n\ttooltip.style.left = tooltipLeft + 'px';\r\n\ttooltip.style.opacity = '1';\r\n\r\n\treturn tooltip;\r\n}\r\n\r\nexport function isTooltipVisible(top: number, left: number, width: number, height: number): boolean {\r\n\treturn !(top < 0 || left < 0 || (left + width) > window.innerWidth || (top + height) > window.innerHeight);\r\n}\r\n","import { AbstractControl, FormArray } from \"@angular/forms\";\r\nimport { CfFormErrors } from \"./formerrors.class\";\r\nimport { collectErrors } from \"../../helpers\";\r\n\r\nexport interface CfFormArrayOptions {\r\n    label?: string;\r\n    errorLabelPathMode?: 'notincluded' | 'index';\r\n}\r\n\r\nexport interface CfFormArrayOptionsExtended extends CfFormArrayOptions {\r\n    errorLabelPathMode: 'notincluded' | 'index';\r\n}\r\n\r\nexport class CfFormArray<TControl extends AbstractControl<any> = any> extends FormArray<TControl> {\r\n\r\n    cfOptions: CfFormArrayOptionsExtended = {\r\n        errorLabelPathMode: 'index'\r\n    };\r\n\r\n    /**\r\n     * Collect errors\r\n     */\r\n    public collectErrors(errors: CfFormErrors = new CfFormErrors(), labelPath: string[] = []): CfFormErrors {\r\n        return collectErrors(this, errors, labelPath);\r\n    }\r\n\r\n    /**\r\n     * Set options, normally it is overwritten in a subclass\r\n     * \r\n     * @param options `CfFormArrayOptions`\r\n     * @returns `CfFormArray`\r\n     */\r\n    public setCfOptions(options: CfFormArrayOptions): CfFormArray<TControl> {\r\n        if (options.label !== undefined) {\r\n            this.cfOptions.label = options.label;\r\n        }\r\n        if (options.errorLabelPathMode !== undefined) {\r\n            this.cfOptions.errorLabelPathMode = options.errorLabelPathMode;\r\n        }\r\n        return this;\r\n    }\r\n\r\n}","import { AbstractControl, AbstractControlOptions, AsyncValidatorFn, FormGroup, ValidatorFn, ɵTypedOrUntyped } from \"@angular/forms\";\r\nimport { collectErrors, showFormErrorsModal } from \"../../helpers\";\r\nimport { CfFormControl, cfFormControlPermanentTagsOptions } from \"./formcontrol\";\r\nimport { CfFormErrors } from \"./formerrors.class\";\r\nimport { CfDialogRef } from \"../dialogref.class\";\r\nimport { CfDialogService } from \"../../services\";\r\nimport { ShowFormErrorsModalFormGroupParams } from \"../../../interfaces\";\r\n\r\nexport interface CfFormGroupOptions {\r\n    label?: string;\r\n}\r\n\r\nexport class CfFormGroup<TControl extends { [K in keyof TControl]: AbstractControl<any> | CfFormControl<any, any>;}> extends FormGroup<TControl> {\r\n\r\n    cfOptions: CfFormGroupOptions = {};\r\n\r\n    override controls: ɵTypedOrUntyped<TControl, TControl, {\r\n        [key: string]: AbstractControl<any>;\r\n    }>;\r\n\r\n    /**\r\n     * Set options, normally it is overwritten in a subclass\r\n     * \r\n     * @param options `CfFormGroupOptions`\r\n     * @returns `CfFormGroup`\r\n     */\r\n    public setCfOptions(options: CfFormGroupOptions): CfFormGroup<TControl> {\r\n        this.cfOptions = options;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Collect errors\r\n     */\r\n    public collectErrors(errors: CfFormErrors = new CfFormErrors(), labelPath: string[] = []): CfFormErrors {\r\n        return collectErrors(this, errors, labelPath);\r\n    }\r\n\r\n\t/**\r\n\t * Add validators to all controls\r\n\t * \r\n\t * @param validators `ValidatorFn | ValidatorFn[]`\r\n\t */\r\n\taddValidatorsToAllControls(validators: ValidatorFn | ValidatorFn[]): CfFormGroup<TControl> {\r\n\t\tfor (let c in this.controls) {\r\n\t\t\tthis.controls[c].addValidators(validators);\r\n\t\t}\r\n        return this;\r\n\t}\r\n\r\n    /**\r\n     * Show form errors modal\r\n     * \r\n     * @param dialogService `CfDialogService`\r\n     * @param params `ShowFormErrorsModalFormGroupParams`\r\n     * @returns `Promise<CfDialogRef>`\r\n     */\r\n    public showFormErrorsModal(dialogService: CfDialogService, params: ShowFormErrorsModalFormGroupParams): Promise<CfDialogRef> {\r\n        return showFormErrorsModal(dialogService, {\r\n            title: params.title,\r\n            cfFormErrors: collectErrors(this, params.cfFormErrors || new CfFormErrors(), params.labelPath || [])\r\n        });\r\n    }\r\n\r\n    constructor(controls: TControl, validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, resetCfFormControlPermanentTags: boolean = true) {\r\n        super(controls, validatorOrOpts, asyncValidator);\r\n        if (resetCfFormControlPermanentTags) {\r\n            cfFormControlPermanentTagsOptions.tags = null;\r\n        }\r\n    }\r\n}\r\n","import { AbstractControl, FormArray, FormControl, FormGroup } from \"@angular/forms\";\r\nimport { CfFormError } from \"../../interfaces\";\r\nimport { CfFormControl } from \"../classes\";\r\nimport { CfFormArray } from \"../classes/form/formarray\";\r\nimport { CfFormGroup } from \"../classes/form/formgroup\";\r\nimport { CfFormErrors } from \"../classes/form/formerrors.class\";\r\n\r\nexport function isCfFormControl(abstractControl: AbstractControl): abstractControl is CfFormControl<any, any> {\r\n    return abstractControl instanceof CfFormControl;\r\n}\r\n\r\nexport function isCfFormGroup(abstractControl: AbstractControl): abstractControl is CfFormGroup<any> {\r\n    return abstractControl instanceof CfFormGroup;\r\n}\r\n\r\nexport function isCfFormArray(abstractControl: AbstractControl): abstractControl is CfFormArray<any> {\r\n    return abstractControl instanceof CfFormArray;\r\n}\r\n\r\nexport function collectErrors(abstractControl: AbstractControl, cfFormErrors: CfFormErrors = new CfFormErrors(), labelPath: string[] = [], key: string | null = null): CfFormErrors {\r\n\r\n    if (abstractControl instanceof FormControl) {\r\n        if (abstractControl.errors !== null) {\r\n            Object.keys(abstractControl.errors).forEach((errorKey: string) => {\r\n                const existingAbstractControl: CfFormError | undefined = cfFormErrors.errors.get(abstractControl);\r\n                if (existingAbstractControl === undefined) {\r\n                    const label: string = isCfFormControl(abstractControl) ? abstractControl.cfOptions.label || key : key;\r\n                    cfFormErrors.errors.set(abstractControl, {\r\n                        errors: [{\r\n                            key: errorKey,\r\n                            value: abstractControl.errors[errorKey]\r\n                        }],\r\n                        tags: isCfFormControl(abstractControl) ? abstractControl.tags : [],\r\n                        label,\r\n                        labelPath: [...labelPath, label],\r\n                        value: abstractControl.value\r\n                    });\r\n                } else {\r\n                    existingAbstractControl.errors.push({\r\n                        key: errorKey,\r\n                        value: abstractControl.errors[errorKey]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    if (abstractControl instanceof FormGroup) {\r\n        if (abstractControl instanceof CfFormGroup && abstractControl.cfOptions.label) {\r\n            labelPath = [...labelPath, abstractControl.cfOptions.label || key];\r\n        } else {\r\n            if (key !== null) {\r\n                labelPath = [...labelPath, key];\r\n            }\r\n        }\r\n        Object.keys(abstractControl.controls).forEach((formGroupAbstractControlName: string) => {\r\n            collectErrors(abstractControl.controls[formGroupAbstractControlName], cfFormErrors, labelPath, formGroupAbstractControlName);\r\n        });\r\n    }\r\n\r\n    if (abstractControl instanceof FormArray) {\r\n        abstractControl.controls.forEach((formArrayAbstractControl: AbstractControl, index: number) => {\r\n            const label: string = isCfFormArray(abstractControl) ? abstractControl.cfOptions.label || key : key;\r\n            const errorLabelPathMode = isCfFormArray(abstractControl) ? abstractControl.cfOptions.errorLabelPathMode : 'index';\r\n            if (errorLabelPathMode === 'notincluded') {\r\n                collectErrors(formArrayAbstractControl, cfFormErrors, [...labelPath, label]);\r\n            }\r\n            if (errorLabelPathMode === 'index') {\r\n                collectErrors(formArrayAbstractControl, cfFormErrors, [...labelPath, label], index.toString());\r\n            }\r\n        });\r\n    }\r\n\r\n    return cfFormErrors;\r\n}\r\n","import { TreeLike, TreeNode, TreeNodesQueryFilterFunction } from \"../../interfaces\";\r\n\r\nexport function convertToTreeNodes(treeLike: TreeLike[], parent: TreeNode | null = null, level: number = 0): TreeNode[] {\r\n\tif (treeLike.length === 0) {\r\n\t\treturn [];\r\n\t}\r\n\tconst treeNodes: TreeNode[] = [];\r\n\ttreeLike.forEach((data: TreeLike) => {\r\n\t\tconst treeNode: TreeNode = {\r\n\t\t\tdata,\r\n\t\t\tpartialSelected: false,\r\n\t\t\tselected: false,\r\n\t\t\tchildren: [],\r\n\t\t\tparent,\r\n\t\t\topened: true,\r\n\t\t\tlevel,\r\n\t\t\tvisible: true\r\n\t\t};\r\n\t\ttreeNode.children = convertToTreeNodes(data.children, treeNode, level + 1);\r\n\t\ttreeNodes.push(treeNode);\r\n\t});\r\n\treturn treeNodes;\r\n}\r\n\r\nexport function setNodesVisibilityVisibleAll<T>(treeNodes: TreeNode<T>[]): void {\r\n\tfor (let treeNode of treeNodes) {\r\n\t\ttreeNode.visible = true;\r\n\t\tsetNodesVisibilityVisibleAll(treeNode.children);\r\n\t}\r\n}\r\n\r\nexport function setNodesVisibilityByQueryFunction<T>(treeNodes: TreeNode<T>[], queryFilterFunction: TreeNodesQueryFilterFunction<T>, query: string): void {\r\n\tfor (let treeNode of treeNodes) {\r\n\t\ttreeNode.visible = queryFilterFunction(treeNode, query);\r\n\t\tif (treeNode.visible && treeNode.parent !== null) {\r\n\t\t\tconst parentNodes: TreeNode<T>[] = searchNodeParents(treeNode);\r\n\t\t\tfor (let parentNode of parentNodes) {\r\n\t\t\t\tparentNode.visible = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetNodesVisibilityByQueryFunction(treeNode.children, queryFilterFunction, query);\r\n\t}\r\n}\r\n\r\nexport function selectAllNodes(treeNodes: TreeNode[]): void {\r\n\ttreeNodes.forEach((treeNode: TreeNode) => {\r\n\t\ttreeNode.partialSelected = false;\r\n\t\ttreeNode.selected = true;\r\n\t\tselectAllNodes(treeNode.children);\r\n\t});\r\n}\r\n\r\nexport function deselectAllNodes(treeNodes: TreeNode[]): void {\r\n\ttreeNodes.forEach((treeNode: TreeNode) => {\r\n\t\ttreeNode.partialSelected = false;\r\n\t\ttreeNode.selected = false;\r\n\t\tdeselectAllNodes(treeNode.children);\r\n\t});\r\n}\r\n\r\nexport function flattenNodes<T>(treeNodes: TreeNode<T>[]): TreeNode<T>[] {\r\n\tconst flattenedTreeNodes: TreeNode<T>[] = [];\r\n\ttreeNodes.forEach((treeNode: TreeNode<T>) => {\r\n\t\tflattenedTreeNodes.push(treeNode, ...flattenNodes(treeNode.children));\r\n\t});\r\n\treturn flattenedTreeNodes;\r\n}\r\n\r\nexport function getSelectedNodes<T>(treeNodes: TreeNode<T>[], topLevelOnly: boolean = false): TreeNode<T>[] {\r\n\tconst selectedTreeNodes: TreeNode<T>[] = [];\r\n\ttreeNodes.forEach((treeNode: TreeNode<T>) => {\r\n\t\tlet skip: boolean = false;\r\n\t\tif (treeNode.selected) {\r\n\t\t\tselectedTreeNodes.push(treeNode);\r\n\t\t\tif (topLevelOnly) {\r\n\t\t\t\tskip = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (treeNode.children.length > 0 && !skip) {\r\n\t\t\tselectedTreeNodes.push(...getSelectedNodes(treeNode.children, topLevelOnly));\r\n\t\t}\r\n\t});\r\n\treturn selectedTreeNodes;\r\n}\r\n\r\nexport function setAllParentStatus(treeNode: TreeNode): void {\r\n\ttreeNode.partialSelected = false;\r\n\ttreeNode.selected = false;\r\n\tif (treeNode.children.length > 0) {\r\n\t\tconst allChildSelected: boolean = isAllChildSelected(treeNode);\r\n\t\tif (allChildSelected) {\r\n\t\t\ttreeNode.selected = true;\r\n\t\t} else {\r\n\t\t\ttreeNode.partialSelected = isAnyChildSelected(treeNode);\r\n\t\t}\r\n\t}\r\n\tif (treeNode.parent !== null) {\r\n\t\tsetAllParentStatus(treeNode.parent);\r\n\t}\r\n}\r\n\r\nexport function isAllChildSelected(treeNode: TreeNode): boolean {\r\n\treturn treeNode.children.every((treeNodeItem: TreeNode) => treeNodeItem.selected && isAllChildSelected(treeNodeItem));\r\n}\r\n\r\nexport function isAnyChildSelected(treeNode: TreeNode): boolean {\r\n\treturn treeNode.children.some((treeNodeItem: TreeNode) => treeNodeItem.selected || isAnyChildSelected(treeNodeItem));\r\n}\r\n\r\nexport function isAnyChildSelectedPartially(treeNode: TreeNode): boolean {\r\n\treturn treeNode.children.some((treeNodeItem: TreeNode) => treeNodeItem.partialSelected || isAnyChildSelectedPartially(treeNodeItem));\r\n}\r\n\r\nexport function closeAllNodes(treeNodes: TreeNode[]): void {\r\n\ttreeNodes.forEach((treeNode: TreeNode) => {\r\n\t\ttreeNode.opened = false;\r\n\t\tif (treeNode.children.length > 0) {\r\n\t\t\tcloseAllNodes(treeNode.children);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nexport function openAllNodes(treeNodes: TreeNode[]): void {\r\n\ttreeNodes.forEach((treeNode: TreeNode) => {\r\n\t\ttreeNode.opened = true;\r\n\t\tif (treeNode.children.length > 0) {\r\n\t\t\topenAllNodes(treeNode.children);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nexport function selectNodeValues<T>(treeNodes: TreeNode<T>[], valueId: keyof T, value: any[]): void {\r\n\ttreeNodes.forEach((treeNode: TreeNode<T>) => {\r\n\t\tselectNodeValues(treeNode.children, valueId, value);\r\n\r\n\t\tif (value instanceof Array && treeNode.data[valueId] !== undefined && value.includes(treeNode.data[valueId])) {\r\n\t\t\ttreeNode.selected = true;\r\n\t\t\ttreeNode.partialSelected = false;\r\n\t\t\tselectAllNodes(treeNode.children);\r\n\t\t} else {\r\n\r\n\t\t\tif (treeNode.children.length > 0) {\r\n\t\t\t\tconst allChildSelected: boolean = isAllChildSelected(treeNode);\r\n\t\t\t\tif (allChildSelected) {\r\n\t\t\t\t\ttreeNode.selected = true;\r\n\t\t\t\t\ttreeNode.partialSelected = false;\r\n\t\t\t\t} else {\r\n\t\r\n\t\t\t\t\tconst anyChildSelected: boolean = isAnyChildSelected(treeNode);\r\n\t\t\t\t\tif (anyChildSelected) {\r\n\t\t\t\t\t\ttreeNode.selected = false;\r\n\t\t\t\t\t\ttreeNode.partialSelected = true;\r\n\t\t\t\t\t} else {\r\n\t\r\n\t\t\t\t\t\tconst anyChildSelectedPartially: boolean = isAnyChildSelectedPartially(treeNode);\r\n\t\t\t\t\t\tif (anyChildSelectedPartially) {\r\n\t\t\t\t\t\t\ttreeNode.selected = false;\r\n\t\t\t\t\t\t\ttreeNode.partialSelected = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nexport function openPartialAndSelectedNodes(treeNodes: TreeNode[]): void {\r\n\ttreeNodes.forEach((treeNode: TreeNode) => {\r\n\t\tif (treeNode.partialSelected || treeNode.selected) {\r\n\t\t\ttreeNode.opened = true;\r\n\t\t}\r\n\t\topenPartialAndSelectedNodes(treeNode.children);\r\n\t});\r\n}\r\n\r\nexport function searchNodeParents(node: TreeNode): TreeNode[] {\r\n\tconst parentNodes: TreeNode[] = [];\r\n\t\r\n\tif (node.parent !== null) {\r\n\t\tparentNodes.push(node.parent, ...searchNodeParents(node.parent));\r\n\t}\r\n\r\n\treturn parentNodes;\r\n}\r\n\r\nexport function searchNodeChildren(node: TreeNode): TreeNode[] {\r\n\tconst childNodes: TreeNode[] = [];\r\n\t\r\n\tif (node.children.length > 0) {\r\n\t\tnode.children.forEach(child => {\r\n\t\t\tchildNodes.push(child, ...searchNodeChildren(child));\r\n\t\t});\r\n\t}\r\n\r\n\treturn childNodes;\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { CfPermissionsService } from \"../services\";\r\n\r\nexport function hasPermissionGuard(permission: string, skipGodmode: boolean = false, skipOnPermissions: string[] = []) {\r\n    return () => inject(CfPermissionsService).hasPermission(permission, skipGodmode, skipOnPermissions);\r\n}\r\n","import { formatNumber } from \"@angular/common\";\r\n\r\nexport function fileSize(input: number | null, params?: {\r\n    digitsInfo?: string,\r\n    localeId?: string,\r\n    maxBase?: 'b' | 'kb' | 'mb' | 'gb' | 'tb' | 'pb' | 'eb' | 'zb' | 'yb',\r\n    full?: boolean\r\n}): string {\r\n    if (input === null) {\r\n        return '';\r\n    }\r\n    const digitsInfo: string = params?.digitsInfo ?? '0.2-2';\r\n    const localeId: string = params?.localeId ?? 'en-US';\r\n    const full: boolean = params?.full ?? false;\r\n    const baseUnits: string[] = ['b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb'];\r\n    const baseUnitsFull: string[] = ['Byte', 'Kilo Byte', 'MegaByte', 'Giga Byte', 'Tera Byte', 'Peta Byte', 'Exa Byte', 'Zetta Byte', 'Yotta Byte'];\r\n\r\n    const baseUnitsMaxIndex: number = params?.maxBase !== undefined ? baseUnits.indexOf(params.maxBase) + 1 : baseUnits.length - 1;\r\n\r\n    let index: number = 0;\r\n    while (input >= 1024 && index < baseUnitsMaxIndex - 1) {\r\n        index++;\r\n        input = input / 1024;\r\n    }\r\n    return formatNumber(input, localeId, digitsInfo) + (full ? ' ' + baseUnitsFull[index] : baseUnits[index]);\r\n}","export function expandJsonTree(data: any, base: string, baseMap: {[key: string]: string} = {}): {[key: string]: string} {\r\n    if (typeof data === 'object') {\r\n        for (const key of Object.keys(data)) {\r\n            expandJsonTree(data[key], base + '.' + key, baseMap);\r\n        }\r\n    }\r\n    if (typeof data === 'string') {\r\n        baseMap[base.slice(1)] = data;\r\n    }\r\n    return baseMap;\r\n}\r\n","import { CfDialogConfiguration, ShowFormErrorsModalParams } from \"../../interfaces\";\r\nimport { CfDialogRef, CfFormErrors } from \"../classes\";\r\nimport { CfDialogService } from \"../services\";\r\n\r\nexport async function showFormErrorsModal(dialogService: CfDialogService, params: ShowFormErrorsModalParams): Promise<CfDialogRef> {\r\n\r\n    let cfFormErrors: CfFormErrors | null = null;\r\n\r\n    if (params.cfFormErrors !== undefined) {\r\n        cfFormErrors = params.cfFormErrors;\r\n    }\r\n\r\n    if (params.cfFormArray !== undefined) {\r\n        cfFormErrors = params.cfFormArray.collectErrors();\r\n    }\r\n\r\n    if (params.cfFormGroup !== undefined) {\r\n        cfFormErrors = params.cfFormGroup.collectErrors();\r\n    }\r\n\r\n    if (params.cfFormControl !== undefined) {\r\n        cfFormErrors = params.cfFormControl.collectErrors();\r\n    }\r\n\r\n    if (cfFormErrors === null) {\r\n        throw Error('showFormErrorsModal: cfFormErrors is null!');\r\n    }\r\n\r\n    const dialogConfiguration: CfDialogConfiguration = params.dialogConfiguration || {};\r\n\r\n    dialogConfiguration.data = {\r\n        title: params.title,\r\n        cfFormErrors\r\n    }\r\n\r\n    return dialogService.openImport(() => import('../components/formerrorsmodal/formerrorsmodal.component').then(c => c.FormErrorsModalComponent), dialogConfiguration)\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { LogLevel } from '../../enums';\r\nimport { CfConfigService } from './config.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfLoggerService {\r\n\r\n\tconfigSerivce: CfConfigService = inject(CfConfigService);\r\n\r\n\tprivate _logLevel: LogLevel | null = null;\r\n\r\n\tprivate logLevelColors: string[] = [\r\n\t\t'',\r\n\t\t'background-color: #D2BDF3; padding: 5px 10px;',\r\n\t\t'background-color: #A2DDFF; padding: 5px 10px;',\r\n\t\t'background-color: #FFD5C5; padding: 5px 10px;',\r\n\t\t'background-color: #EA4331; color: #FFFFFF; padding: 5px 10px;',\r\n\t\t'background-color: #F71900; color: #FFFFFF; padding: 5px 10px;',\r\n\t\t''\r\n\t];\r\n\r\n\tpublic debug(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Debug, group });\r\n\t}\r\n\r\n\tpublic info(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Info, group });\r\n\t}\r\n\r\n\tpublic warn(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Warn, group });\r\n\t}\r\n\r\n\tpublic error(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Error, group });\r\n\t}\r\n\r\n\tpublic fatal(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Fatal, group });\r\n\t}\r\n\r\n\tpublic groupEnd(): void {\r\n\t\tconsole.groupEnd();\r\n\t}\r\n\r\n\tprivate log(configuration: {\r\n\t\tlog: any,\r\n\t\tlogLevel: LogLevel,\r\n\t\tgroup: boolean\r\n\t}): void {\r\n\t\tif (this._logLevel === null || this._logLevel === LogLevel.Off || this._logLevel > configuration.logLevel) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (configuration.group) {\r\n\t\t\tconsole.group(configuration.log);\r\n\t\t} else {\r\n\t\t\tconsole.log('%c' + configuration.log, this.logLevelColors[configuration.logLevel]);\r\n\t\t}\r\n\t}\r\n\r\n\tset logLevel(logLevel: LogLevel | null) {\r\n\t\tthis._logLevel = logLevel;\r\n\t}\r\n\r\n\tget logLevel(): LogLevel | null {\r\n\t\treturn this._logLevel;\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tthis.logLevel = this.configSerivce.loggerServiceLogLevel;\r\n\t}\r\n}\r\n","import { DOCUMENT } from \"@angular/common\";\r\nimport { Injectable, inject } from \"@angular/core\";\r\nimport { isBrowser } from \"../helpers\";\r\nimport { CfConfigService } from \"./config.service\";\r\nimport { CfLoggerService } from \"./logger.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfCookieService {\r\n\r\n\tbrowser: boolean = isBrowser();\r\n\tdocument: Document = inject(DOCUMENT);\r\n\r\n\tconfigService: CfConfigService = inject(CfConfigService);\r\n\tloggerService: CfLoggerService = inject(CfLoggerService);\r\n\r\n\t/**\r\n\t * Get the value of a cookie by name, returns `null` if the cookie is not set\r\n\t * \r\n\t * @param name name of the cookie\r\n\t * @returns value of the cookie\r\n\t */\r\n\tget(name: string): string | null {\r\n\t\tif (!this.browser) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cookies: {[key: string]: string} = this.cookies;\r\n\t\treturn cookies[name] || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Set the value of a cookie with the given name\r\n\t * \r\n\t * @param name name of the cookie\r\n\t * @param value value of the cookie\r\n\t * @param config optional configuration values (expire in seconds, path of cookie)\r\n\t */\r\n\tset(name: string, value: string, config: {expire?: number, path?: string | null} = {}): void {\r\n\r\n\t\tif (!this.browser) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Default cookie informations\r\n\t\tlet cookie: string = `${name}=${value};`;\r\n\r\n\t\t// Set default cookie expire if its not set and we have a `defaultCookieExpire` set\r\n\t\tif (config.expire === undefined && this.configService.defaultCookieExpire !== null) {\r\n\t\t\tconfig.expire = this.configService.defaultCookieExpire;\r\n\t\t}\r\n\r\n\t\t// If we have an expire date, we need to set\r\n\t\tif (config.expire !== undefined) {\r\n\t\t\tlet d: Date = new Date();\r\n\t\t\td.setTime(d.getTime() + (config.expire * 1000));\r\n\t\t\tcookie += `expires=${d.toUTCString()};`;\r\n\t\t}\r\n\r\n\t\t// Set default cookie path if its not set and we have a `defaultCookiePath` set\r\n\t\tif (config.path === undefined && this.configService.defaultCookiePath !== null) {\r\n\t\t\tconfig.path = this.configService.defaultCookiePath;\r\n\t\t}\r\n\r\n\t\t// Set path\r\n\t\tcookie += `path=${config.path};`;\r\n\r\n\t\t// Log\r\n\t\tthis.loggerService.info('Cookie data to set: ' + cookie);\r\n\r\n\t\t// Set the cookie\r\n\t\tthis.document.cookie = cookie;\r\n\t}\r\n\r\n\t/**\r\n\t * Delete a cookie by its name\r\n\t * \r\n\t * @param name name of the cookie\r\n\t */\r\n\tdelete(name: string): void {\r\n\t\tif (!this.browser) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.set(name, '', {\r\n\t\t\texpire: -1\r\n\t\t});\r\n\t}\r\n\r\n\tget cookies(): {[key: string]: string} {\r\n\r\n\t\tif (!this.browser) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\r\n\t\tconst cookies: string = this.document.cookie;\r\n\t\tif (cookies.length === 0) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\t\tconst cookiesArray: string[] = cookies.split(';');\r\n\t\tconst cookiesObject: {[key: string]: string} = {};\r\n\t\tcookiesArray.forEach((cookiesArrayItem: string) => {\r\n\t\t\tconst cookiesArrayItemSplit: string[] = cookiesArrayItem.split('=');\r\n\t\t\tcookiesObject[cookiesArrayItemSplit[0].trim()] = cookiesArrayItemSplit[1];\r\n\t\t})\r\n\t\treturn cookiesObject;\r\n\t}\r\n}\r\n","import { Directive, Input } from \"@angular/core\";\r\n\r\n@Directive({\r\n    selector: '[cfReadonly]',\r\n\tstandalone: true\r\n})\r\nexport class ReadonlyDirective {\r\n\r\n    readonly: boolean = false;\r\n\r\n    @Input()\r\n    set cfReadonly(readonly: boolean) {\r\n        this.readonly = readonly;\r\n    }\r\n\r\n}","import { AfterViewInit, Directive, ElementRef, HostBinding, HostListener, inject, Input, OnChanges, SimpleChanges } from \"@angular/core\";\r\nimport { ReadonlyDirective } from \"./readonly.directive\";\r\n\r\n@Directive({\r\n\tselector: 'button[cfButton]',\r\n\tstandalone: true\r\n})\r\nexport class ButtonDirective implements OnChanges, AfterViewInit {\r\n\r\n\tel: ElementRef<HTMLButtonElement> = inject(ElementRef);\r\n    readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\t@Input() label: string | null = null;\r\n\t@Input() icon: string | null = null;\r\n\t@Input() severity: string = 'primary';\r\n\t@Input() raised: boolean = true;\r\n\t@Input() rounded: boolean = false;\r\n\t@Input() outlined: boolean = false;\r\n\t@Input() loading: boolean = false;\r\n\t@Input() fitWidth: boolean = false;\r\n\t@Input() text: boolean = false;\r\n\t@Input() whiteSpaceNoWrap: boolean = true;\r\n\t@HostBinding('style.background-color') @Input() backgroundColor: string | null = null;\r\n\t@HostBinding('style.height.px') @HostBinding('style.line-height.px') @Input() height: number | null = null; \r\n\t@HostBinding('style.font-size.px') @Input() fontSize: number | null = null;\r\n\t@Input() textColor: string | null = null;\r\n\t@Input() iconColor: string | null = null;\r\n    @Input() skipReadonlyDirective: boolean = false;\r\n\r\n\ticonElement: HTMLSpanElement | null = null;\r\n\r\n\tlabelElement: HTMLSpanElement | null = null;\r\n\r\n\tcreateLabel(): void {\r\n\t\tif (this.labelElement === null) {\r\n\t\t\tthis.labelElement = document.createElement('span');\r\n\t\t\tthis.labelElement.classList.add('cf-button-label');\r\n\t\t\tthis.el.nativeElement.appendChild(this.labelElement);\r\n\t\t}\r\n\t\tif (this.label !== null) {\r\n\t\t\tthis.labelElement.innerHTML = this.label;\r\n\t\t}\r\n\t\tif (this.textColor !== null) {\r\n\t\t\tthis.labelElement.style.color = this.textColor;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateIcon(): void {\r\n\t\tif (this.iconElement === null) {\r\n\t\t\tthis.iconElement = document.createElement('span');\r\n\t\t\tthis.el.nativeElement.appendChild(this.iconElement);\r\n\t\t}\r\n\t\twhile (this.iconElement.classList.length > 0) {\r\n\t\t\tthis.iconElement.classList.remove(this.iconElement.classList.item(0)!);\r\n\t\t}\r\n\t\tthis.iconElement.classList.add(...['cf-button-icon', 'remixicon', this.icon || '']);\r\n\t\tif (this.label !== null) {\r\n\t\t\tthis.iconElement.classList.add('cf-mr-1');\r\n\t\t}\r\n\t\tconst iconColor: string | null = this.iconColor || this.textColor;\r\n\t\tif (iconColor !== null) {\r\n\t\t\tthis.iconElement.style.color = iconColor;\r\n\t\t}\r\n\t}\r\n\r\n\t@HostBinding('style.border-color') get borderColor(): string {\r\n\t\treturn this.backgroundColor !== null ? this.backgroundColor : 'auto';\r\n\t}\r\n\r\n\t@HostBinding('class') get hostClasses(): string {\r\n\t\tif (this.icon !== null && this.iconElement !== null) {\r\n\t\t\tif (this.loading) {\r\n\t\t\t\tthis.iconElement.classList.add('loader-line');\r\n\t\t\t} else {\r\n\t\t\t\tthis.iconElement.classList.remove('loader-line');\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn [\r\n\t\t\t'cf-button',\r\n\t\t\t'cf-button-' + this.severity,\r\n\t\t\tthis.raised ? 'cf-button-raised' : '',\r\n\t\t\tthis.rounded ? 'cf-button-rounded' : '',\r\n\t\t\tthis.outlined ? 'cf-button-outlined' : '',\r\n\t\t\tthis.loading ? 'cf-button-loading' : '',\r\n\t\t\tthis.fitWidth ? 'cf-button-fitwidth' : '',\r\n\t\t\tthis.text ? 'cf-button-text' : '',\r\n\t\t\tthis.whiteSpaceNoWrap ? 'cf-white-space-nowrap' : ''\r\n\t\t].join(' ');\r\n\t}\r\n\r\n\touterFocus(): void {\r\n\t\t(this.el.nativeElement as HTMLElement).focus();\r\n\t}\r\n\r\n\t@HostListener('focus', ['$event.target'])\r\n\tfocus(): void {\r\n\t\tif (this.backgroundColor !== null) {\r\n\t\t\t(this.el.nativeElement as HTMLElement).style.boxShadow = '0 0 0 2px #ffffff, 0 0 0 4px ' + this.backgroundColor + ', 0 1px 2px 0 #00000000';\r\n\t\t}\r\n\t}\r\n\r\n\t@HostListener('blur', ['$event.target'])\r\n\tblur(): void {\r\n\t\tif (this.backgroundColor !== null) {\r\n\t\t\t(this.el.nativeElement as HTMLElement).style.boxShadow = 'none';\r\n\t\t}\r\n\t}\r\n\r\n    ngAfterViewInit(): void {\r\n        if (!this.skipReadonlyDirective && this.el !== undefined && this.readonlyDirective !== null) {\r\n            this.el.nativeElement.disabled = this.readonlyDirective.readonly;\r\n        }    \r\n    }\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tif (changes['icon'] !== undefined && changes['icon'].currentValue !== null) {\r\n\t\t\tthis.createIcon();\r\n\t\t}\r\n\t\tif (changes['label'] !== undefined && changes['label'].currentValue !== null) {\r\n\t\t\tthis.createLabel();\r\n\t\t}\r\n\t}\r\n}\r\n","import { inject, Pipe, PipeTransform } from \"@angular/core\";\r\nimport { convertToCurrency } from \"../helpers/helpers\";\r\nimport { CfConfigService } from \"../services/config.service\";\r\n\r\n@Pipe({\r\n\tname: 'cfcurrency',\r\n\tstandalone: true\r\n})\r\nexport class CfCurrencyPipe implements PipeTransform {\r\n\tprivate configService: CfConfigService = inject(CfConfigService);\r\n\ttransform(input: number | string, currency: string | null = null) {\r\n\t\treturn convertToCurrency(input, currency !== null ? currency : this.configService.currencyPipeDefaultCurrency);\r\n\t}\r\n}","import { inject, Pipe, PipeTransform } from \"@angular/core\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { safeHtml, safeResourceUrl, safeScript, safeStyle, safeUrl } from \"../helpers/helpers\";\r\n\r\n@Pipe({\r\n\tname: 'cfsafehtml',\r\n\tstandalone: true\r\n})\r\nexport class CfSafeHtmlPipe implements PipeTransform {\r\n\r\n\tdomSanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n\ttransform(input: any) {\r\n\t\tif (typeof input === 'string') {\r\n\t\t\treturn safeHtml(this.domSanitizer, input);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n@Pipe({\r\n\tname: 'cfsafestyle',\r\n\tstandalone: true\r\n})\r\nexport class CfSafeStylePipe implements PipeTransform {\r\n\r\n\tdomSanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n\ttransform(input: any) {\r\n\t\tif (typeof input === 'string') {\r\n\t\t\treturn safeStyle(this.domSanitizer, input);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n@Pipe({\r\n\tname: 'cfsafescript',\r\n\tstandalone: true\r\n})\r\nexport class CfSafeScriptPipe implements PipeTransform {\r\n\r\n\tdomSanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n\ttransform(input: any) {\r\n\t\tif (typeof input === 'string') {\r\n\t\t\treturn safeScript(this.domSanitizer, input);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n@Pipe({\r\n\tname: 'cfsafeurl',\r\n\tstandalone: true\r\n})\r\nexport class CfSafeUrlPipe implements PipeTransform {\r\n\r\n\tdomSanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n\ttransform(input: any) {\r\n\t\tif (typeof input === 'string') {\r\n\t\t\treturn safeUrl(this.domSanitizer, input);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n@Pipe({\r\n\tname: 'cfsaferesourceurl',\r\n\tstandalone: true\r\n})\r\nexport class CfSafeResourceUrlPipe implements PipeTransform {\r\n\r\n\tdomSanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n\ttransform(input: any) {\r\n\t\tif (typeof input === 'string') {\r\n\t\t\treturn safeResourceUrl(this.domSanitizer, input);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n","import { formatCurrency, getCurrencySymbol } from \"@angular/common\";\r\nimport { DEFAULT_CURRENCY_CODE, inject, LOCALE_ID, Pipe, PipeTransform } from \"@angular/core\";\r\nimport { strToNumber } from \"../helpers/helpers\";\r\nimport { CfConfigService } from \"../services\";\r\n\r\n@Pipe({\r\n\tname: 'cfcurrencydigits',\r\n\tstandalone: true\r\n})\r\nexport class CfCurrencyDigitsPipe implements PipeTransform {\r\n\t\r\n\tprivate configService: CfConfigService = inject(CfConfigService);\r\n\tprivate locale: string = inject(LOCALE_ID);\r\n\tprivate currencyCode: string = inject(DEFAULT_CURRENCY_CODE);\r\n\r\n\ttransform(\r\n\t\tvalue: number|string,\r\n\t\tdigistInfo: string | null = null,\r\n\t\tdisplay: 'code'|'symbol'|'symbol-narrow' = 'symbol'\r\n\t) {\r\n\t\tif (digistInfo === null) {\r\n\t\t\tdigistInfo = this.configService.defaultCurrencyDigitsInfo;\r\n\t\t}\r\n\t\tlet currency: string = this.currencyCode;\r\n    if (display !== 'code') {\r\n      if (display === 'symbol' || display === 'symbol-narrow') {\r\n        currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', this.locale);\r\n      } else {\r\n        currency = display;\r\n      }\r\n    }\r\n\r\n    try {\r\n      const num = strToNumber(value);\r\n\t\t\tif (num !== null) {\r\n\t\t\t\treturn formatCurrency(num, this.locale, currency, this.currencyCode, digistInfo);\r\n\t\t\t}\r\n    } catch (error) { }\r\n\t\treturn null;\r\n\t}\r\n}","import { inject, LOCALE_ID, Pipe, PipeTransform } from \"@angular/core\";\r\nimport { fileSize } from \"../helpers\";\r\n\r\n@Pipe({\r\n\tname: 'filesize',\r\n\tstandalone: true\r\n})\r\nexport class FileSizePipe implements PipeTransform {\r\n\r\n\tlocaleId: string = inject(LOCALE_ID);\r\n\r\n\ttransform(input: number | null, digitsInfo: string = '0.2-2') {\r\n        return fileSize(input, {digitsInfo, localeId: this.localeId});\r\n\t}\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n\tname: 'duration',\r\n\tstandalone: true\r\n})\r\nexport class DurationPipe implements PipeTransform {\r\n\r\n\ttransform(seconds: number | null): string {\r\n\r\n\t\tif (seconds === null) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tseconds = Math.ceil(seconds);\r\n\r\n\t\tlet hours: number | null = null;\r\n\t\tlet minutes: number | null = null;\r\n\r\n\t\tif (seconds > 3599) {\r\n\t\t\thours = Math.floor(seconds / 3600);\r\n\t\t\tseconds = seconds - (hours * 3600);\r\n\t\t}\r\n\r\n\t\tif (seconds > 59) {\r\n\t\t\tminutes = Math.floor(seconds / 60);\r\n\t\t\tseconds = seconds - (minutes * 60);\r\n\t\t}\r\n\r\n\t\tconst parts: number[] = [];\r\n\t\tif (hours !== null) {\r\n\t\t\tparts.push(hours);\r\n\t\t}\r\n\t\tif (minutes !== null) {\r\n\t\t\tparts.push(minutes);\r\n\t\t} else {\r\n\t\t\tparts.push(0);\r\n\t\t}\r\n\t\tparts.push(seconds);\r\n\r\n\t\treturn parts.map((value: number) => value.toString().padStart(2, '0')).join(':');\r\n\t}\r\n}","import { inject, Pipe, PipeTransform } from \"@angular/core\";\r\nimport { TranslationsService } from \"../services\";\r\n\r\n@Pipe({\r\n\tname: 'translation',\r\n\tstandalone: true\r\n})\r\nexport class TranslationPipe implements PipeTransform {\r\n\ttranslationsService: TranslationsService = inject(TranslationsService);\r\n\tregex: RegExp = new RegExp(/\\{\\{\\$\\d+\\}\\}/g);\r\n\ttransform(resource: string, ...args: string[]): string {\r\n\t\tif (args.length > 0) {\r\n\t\t\tconst translation: string = this.translationsService.getTranslation(resource);\r\n\t\t\treturn translation.replaceAll(/\\{\\{\\$(\\d+)\\}\\}/g, (s: string) => {\r\n\t\t\t\tconst index: number = parseInt(s.substring(3, s.length - 2));\r\n\t\t\t\tif (args[index - 1] !== undefined) {\r\n\t\t\t\t\treturn args[index - 1];\r\n\t\t\t\t}\r\n\t\t\t\treturn '';\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn this.translationsService.getTranslation(resource);\r\n\t}\r\n}","import { InjectionToken } from \"@angular/core\";\r\nimport { AlertButtonConfiguration, AlertConfiguration } from \"../../interfaces\";\r\n\r\nexport const ALERT_DEFAULT_BUTTON_CONFIGURATION: InjectionToken<AlertButtonConfiguration> = new InjectionToken('Alert default button', {\r\n\tfactory: (): AlertButtonConfiguration => {\r\n\t\treturn {\r\n\t\t\tlabel: 'alert.ok',\r\n\t\t\tseverity: 'success',\r\n\t\t\tcallback: ({ dialogRef }) => {\r\n\t\t\t\tdialogRef.close();\r\n\t\t\t},\r\n\t\t\tfocus: true,\r\n\t\t\ttranslateLabel: true\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport const ALERT_CONFIGURATIONS: InjectionToken<{[key: string]: AlertConfiguration}> = new InjectionToken('Alert configurations predefined', {\r\n    factory: (): {[key: string]: AlertConfiguration} => {\r\n        return {};\r\n    }\r\n});\r\n","import { TranslationType } from \"../../interfaces\";\r\n\r\nexport const ALERT_TRANSLATIONS_HU: TranslationType = {\r\n\tok: 'Rendben'\r\n};\r\n\r\nexport const ALERT_TRANSLATIONS_EN: TranslationType = {\r\n\tok: 'Ok'\r\n};\r\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, inject, Input, OnChanges, ViewChild } from '@angular/core';\r\nimport { AlertButtonConfiguration, AlertConfiguration } from '../../interfaces';\r\nimport { CfDialog } from '../classes';\r\nimport { ButtonDirective } from '../directives/button.directive';\r\nimport { CfSafeHtmlPipe, TranslationPipe } from '../pipes';\r\nimport { TranslationsService } from '../services';\r\nimport { ALERT_DEFAULT_BUTTON_CONFIGURATION } from '../tokens/alert.token';\r\nimport { ALERT_TRANSLATIONS_EN, ALERT_TRANSLATIONS_HU } from '../translations/alert.translations';\r\n\r\n@Component({\r\n    selector: 'cf-alert',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tButtonDirective,\r\n\t\tCfSafeHtmlPipe,\r\n\t\tTranslationPipe\r\n\t],\r\n    template: `\r\n        <div class=\"cf-dialog-title\">{{configuration.title}}</div>\r\n\t\t<div class=\"cf-dialog-content\" [innerHTML]=\"configuration.text|cfsafehtml\"></div>\r\n\t\t<div class=\"cf-dialog-buttons cf-flex-right\">\r\n\t\t\t<button #closeButton cfButton [severity]=\"buttonConfiguration.severity\" [label]=\"buttonConfiguration.translateLabel ? (buttonConfiguration.label|translation) : buttonConfiguration.label\" (click)=\"callCallback()\" class=\"cf-ml-auto\"></button>\r\n\t\t</div>\r\n    `\r\n})\r\nexport class AlertComponent extends CfDialog implements OnChanges, AfterViewInit {\r\n\t\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\ttranslationsService: TranslationsService = inject(TranslationsService);\r\n\talertDefaultButtonConfiguration: AlertButtonConfiguration = inject(ALERT_DEFAULT_BUTTON_CONFIGURATION);\r\n\r\n    @Input() configuration: AlertConfiguration = this.config.getData('configuration');\r\n\r\n\t@ViewChild('closeButton') closeButton: ElementRef<HTMLButtonElement> | undefined = undefined;\r\n\r\n\tget customButton(): boolean {\r\n\t\treturn this.configuration.button !== undefined;\r\n\t}\r\n\r\n\tget buttonConfiguration(): AlertButtonConfiguration {\r\n\t\treturn {\r\n\t\t\t...this.alertDefaultButtonConfiguration,\r\n\t\t\t...this.configuration.button\r\n\t\t}\r\n\t}\r\n\r\n\tcallCallback(): void {\r\n\t\tif (this.buttonConfiguration.callback === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.buttonConfiguration.callback({\r\n\t\t\tdialogRef: this.ref\r\n\t\t});\r\n\t}\r\n\r\n\t@HostListener('document:keyup', ['$event'])\r\n\tdocumentKeyup(event: KeyboardEvent): void {\r\n\t\tconst key: string = event.key.toLowerCase();\r\n\t\tif (key === 'enter' || key === 'escape') {\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t}\r\n\r\n    ngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tif (this.buttonConfiguration.focus) {\r\n\t\t\tif (this.closeButton !== undefined) {\r\n\t\t\t\tthis.closeButton.nativeElement.focus();\r\n\t\t\t}\r\n\t\t}\r\n    }\r\n\r\n    constructor() {\r\n\t\tsuper();\r\n\t\tif (this.configuration.showCloseIcon === false) {\r\n\t\t\tthis.config.showCloseIcon = false;\r\n\t\t}\r\n\t\tthis.translationsService.initModuleTranslation('alert', 'hu', ALERT_TRANSLATIONS_HU);\r\n\t\tthis.translationsService.initModuleTranslation('alert', 'en', ALERT_TRANSLATIONS_EN);\r\n\t\tthis.cdr.detach();\r\n    }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { fromEvent, Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class GlobalEventListenerService {\r\n\r\n    clicked: Subject<MouseEvent> = new Subject();\r\n    mousedown: Subject<MouseEvent> = new Subject();\r\n    mouseup: Subject<MouseEvent> = new Subject();\r\n    focusin: Subject<FocusEvent> = new Subject();\r\n    dragenter: Subject<DragEvent> = new Subject();\r\n    dragover: Subject<DragEvent> = new Subject();\r\n    drop: Subject<DragEvent> = new Subject();\r\n\r\n    constructor() {\r\n        fromEvent(document, 'click').subscribe((event: Event) => {\r\n            this.clicked.next(event as MouseEvent)\r\n        });\r\n        fromEvent(document, 'mousedown').subscribe((event: Event) => {\r\n            this.mousedown.next(event as MouseEvent);\r\n        });\r\n        fromEvent(document, 'mouseup').subscribe((event: Event) => {\r\n            this.mouseup.next(event as MouseEvent);\r\n        });\r\n        fromEvent(document, 'focusin').subscribe((event: Event) => {\r\n            this.focusin.next(event as FocusEvent);\r\n        });\r\n        fromEvent(document, 'dragenter').subscribe((event: Event) => {\r\n            this.dragenter.next(event as DragEvent);\r\n        });\r\n        fromEvent(document, 'dragover').subscribe((event: Event) => {\r\n            this.dragover.next(event as DragEvent);\r\n        });\r\n        fromEvent(document, 'drop').subscribe((event: Event) => {\r\n            this.drop.next(event as DragEvent);\r\n        });\r\n    }\r\n\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const LOCK_HELPER_DEFAULT_URL: InjectionToken<string[]> = new InjectionToken('Lock helper default url', {\r\n\tfactory: (): string[] => {\r\n\t\treturn ['lock'];\r\n\t}\r\n});","import { InjectionToken } from \"@angular/core\";\r\nimport { MessagePosition, MessageSeverity } from \"../../enums\";\r\nimport { MessageConfiguration } from \"../../interfaces\";\r\n\r\nexport const MESSAGE_DEFAULT_CONFIGURATION: InjectionToken<MessageConfiguration> = new InjectionToken('Message default configuration', {\r\n\tfactory: (): MessageConfiguration => {\r\n\t\treturn {\r\n\t\t\tcloseable: true,\r\n\t\t\tlifetime: 3000,\r\n\t\t\tposition: MessagePosition.TOP,\r\n\t\t\tseverity: MessageSeverity.SUCCESS,\r\n\t\t\tkeepOnHover: false\r\n\t\t};\r\n\t}\r\n});\r\n","import { formatDate } from \"@angular/common\";\r\nimport { inject, InjectionToken, LOCALE_ID } from \"@angular/core\";\r\n\r\nexport const LOCAL_DATE_NOW: InjectionToken<string> = new InjectionToken('Locale date now', {\r\n\tfactory: (): string => {\r\n\t\treturn formatDate(new Date(), 'yyyy-MM-dd', inject(LOCALE_ID));\r\n\t}\r\n});\r\n\r\nexport const LOCAL_DATETIME_NOW: InjectionToken<string> = new InjectionToken('Locale datetime now', {\r\n\tfactory: (): string => {\r\n\t\treturn formatDate(new Date(), 'yyyy-MM-ddTHH:mm:ss', inject(LOCALE_ID));\r\n\t}\r\n});\r\n\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { ConfirmConfiguration } from \"../../interfaces\";\r\n\r\nexport const CONFIRM_CONFIGURATIONS: InjectionToken<{[key: string]: ConfirmConfiguration}> = new InjectionToken('Confirm configurations predefined', {\r\n    factory: (): {[key: string]: ConfirmConfiguration} => {\r\n        return {};\r\n    }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const FORM_ITEM_CLEARABLE: InjectionToken<boolean> = new InjectionToken('FormItem default clearable', {\r\n    factory(): boolean {\r\n        return false;\r\n    }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { PredefinedDialogs } from \"../../interfaces\";\r\n\r\nexport const CF_PREDEFINED_DIALOGS: InjectionToken<PredefinedDialogs> = new InjectionToken('Predefined dialogs', {\r\n    factory: () => {\r\n        return {};\r\n    }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { ErrorTranslateHandlers } from \"../../interfaces\";\r\n\r\nexport const ERROR_TRANSLATE_HANDLERS: InjectionToken<ErrorTranslateHandlers> = new InjectionToken('Error Translate Handlers', {\r\n    factory: () => {\r\n        return new Map();\r\n    }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { MockResponses } from \"../../interfaces\";\r\n\r\nexport const CF_MOCK: InjectionToken<MockResponses> = new InjectionToken<MockResponses>('Cf Mocks', {\r\n\tfactory: () => {\r\n\t\treturn {};\r\n\t}\r\n});\r\n","import { EventEmitter, ElementRef, inject, DestroyRef, ChangeDetectorRef, LOCALE_ID, Input, Component, Output } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { GlobalEventListenerService } from '../services/global.event.listener.service';\r\nimport { CfFormControl } from './form/formcontrol';\r\nimport { Observable } from 'rxjs';\r\nimport { generateUuid } from '../helpers';\r\nimport { FORM_ITEM_CLEARABLE } from '../tokens';\r\nimport { ReadonlyDirective } from '../directives';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\ttemplate: ``\r\n})\r\nexport class FormItem implements ControlValueAccessor {\r\n\r\n\t// Injects\r\n    public element: ElementRef<HTMLElement> = inject(ElementRef);\r\n    public control: NgControl | null = inject(NgControl, {\r\n        optional: true\r\n    });\r\n    public destroyRef: DestroyRef = inject(DestroyRef);\r\n    public cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n    public locale: string = inject(LOCALE_ID);\r\n\tpublic globalEventListenerService: GlobalEventListenerService = inject(GlobalEventListenerService);\r\n\r\n\t// Inputs\r\n\t@Input() disabled = false;\r\n    @Input() readonly = false;\r\n\t@Input() skipEnterAsTab: boolean = false;\r\n\t@Input() preventDefaultOnKeyup: boolean = false;\r\n    @Input() label: string | null = null;\r\n\t@Input() clearable: boolean = inject(FORM_ITEM_CLEARABLE);\r\n\t@Input() clearCallback: (() => boolean | Promise<boolean> | Observable<boolean>) | null = null;\r\n\t@Input() clearValue: any = null;\r\n    @Input() skipReadonlyDirective: boolean = false;\r\n\r\n\t// Outputs\r\n    @Output() onKeyup: EventEmitter<KeyboardEvent> = new EventEmitter();\r\n\t@Output() onCleared: EventEmitter<void> = new EventEmitter();\r\n\r\n\t// Vars\r\n\tuuid: string = generateUuid();\r\n    onChangeFn: any = null;\r\n    onTouchedFn: any = null;\r\n\t#focused = false;\r\n\r\n    readonlyDirective: ReadonlyDirective | null = null;\r\n    \r\n\tformControlDisabled: boolean = false;\r\n\r\n\tenterAsTabType: string | null = null;\r\n\r\n\t// Control value accessor\r\n\twriteValue(_: any): void {};\r\n\r\n\tregisterOnChange(onChangeFn: any): void {\r\n\t\tthis.onChangeFn = onChangeFn;\r\n\t};\r\n\r\n\tregisterOnTouched(onTouchedFn: any): void {\r\n\t\tthis.onTouchedFn = onTouchedFn;\r\n\t};\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n        this.formControlDisabled = isDisabled;\r\n        this.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t};\r\n\r\n\tsetHostClasses(): void {\r\n\t\tif (this.element === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.element.nativeElement.classList.remove(\"cf-disabled\", \"cf-readonly\", \"cf-focused\");\r\n\r\n\t\tif (this.isDisabled) {\r\n\t\t\tthis.element.nativeElement.classList.add(\"cf-disabled\");\r\n\t\t}\r\n\r\n\t\tif (this.isReadonly) {\r\n\t\t\tthis.element.nativeElement.classList.add(\"cf-readonly\");\r\n\t\t}\r\n\r\n\t\tif (this.focused) {\r\n\t\t\tthis.element.nativeElement.classList.add(\"cf-focused\");\r\n\t\t}\r\n\t}\r\n\r\n\tget isReadonly(): boolean {\r\n\t\treturn this.readonly || this.isDisabled || (!this.skipReadonlyDirective && this.readonlyDirective !== null && this.readonlyDirective.readonly);\r\n\t}\r\n\r\n\tget isDisabled(): boolean {\r\n\t\treturn this.disabled || this.formControlDisabled;\r\n\t}\r\n\r\n\tsetControlComponent(): void {\r\n\t\tif (this.control === null || !(this.control.control instanceof CfFormControl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.control.control.setComponent(this);\r\n\t}\r\n\t\r\n\tset focused(focused: boolean) {\r\n\t\tthis.#focused = focused;\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n\tget focused(): boolean {\r\n\t\treturn this.#focused;\r\n\t}\r\n\r\n\tfocus():void {};\r\n\r\n\tdefaultClear(cb: () => void, detectChanges: boolean = true): void {\r\n\r\n\t\tif (!this.clearable) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.clearCallback !== null) {\r\n\r\n\t\t\tconst clearCallbackResult: boolean | Promise<boolean> | Observable<boolean> = this.clearCallback();\r\n\r\n\t\t\tif (clearCallbackResult instanceof Promise) {\r\n\t\t\t\tclearCallbackResult.then((value: boolean) => {\r\n\t\t\t\t\tif (value) {\r\n\t\t\t\t\t\tthis.defaultClearAfter(cb, detectChanges);\r\n\t\t\t\t\t}\r\n\t\t\t\t}).catch(() => {});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\r\n\t\t\tif (clearCallbackResult instanceof Observable) {\r\n\t\t\t\tclearCallbackResult.subscribe((value: boolean) => {\r\n\t\t\t\t\tif (value) {\r\n\t\t\t\t\t\tthis.defaultClearAfter(cb, detectChanges);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (clearCallbackResult) {\r\n\t\t\t\tthis.defaultClearAfter(cb, detectChanges);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.defaultClearAfter(cb, detectChanges);\r\n\t}\r\n\r\n\tdefaultClearAfter(cb: () => void, detectChanges: boolean = true): void {\r\n\t\tcb();\r\n\t\tthis.onCleared.emit();\r\n\t\tif (detectChanges) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tif (this.control !== null) {\r\n\t\t\tthis.control.valueAccessor = this;\r\n\t\t}\r\n\t\tthis.cdr.detach();\r\n\t}\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, HostBinding, inject, Input, OnChanges, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormItem } from '../../shared/classes/formitem.class';\r\nimport { ReadonlyDirective } from '../../shared';\r\n\r\n@Component({\r\n    selector: 'cf-inputtext',\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => InputTextComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n    template: `\r\n        <div class=\"cf-floating-label-container\">\r\n            <input #input\r\n                [type]=\"type\"\r\n                [disabled]=\"isDisabled\"\r\n                [readonly]=\"isReadonly\"\r\n                [value]=\"value\"\r\n                [ngClass]=\"{'readonly': readonly}\"\r\n                (focus)=\"focusFromInput($event)\"\r\n                (blur)=\"blur($event)\"\r\n                (keydown)=\"keydown($event)\"\r\n                (keypress)=\"keypress($event)\"\r\n                (keyup)=\"keyup($event)\"\r\n                (change)=\"change()\"\r\n                class=\"cf-input-container-default-input\"\r\n            />\r\n            <label class=\"cf-floating-label\" [ngClass]=\"{'float': focused || filled}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n        </div>\r\n        <span *ngIf=\"clearable && filled && !isDisabled && !isReadonly\" class=\"cf-input-clear remixicon close-circle-fill\" (click)=\"clearClicked()\"></span>\r\n    `,\r\n    host: {\r\n        class: 'cf-input-container cf-inputtext'\r\n    }\r\n})\r\nexport class InputTextComponent extends FormItem implements AfterViewInit, OnChanges, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n    @Input() value: string = '';\r\n    @Input() type: string = 'text';\r\n    @Input() changeOnKeyup: boolean = true;\r\n\t@Input() selectOnFocus: boolean = true;\r\n    @HostBinding('style.width') @Input() width: string = 'auto';\r\n\r\n    @Output() onChanged: EventEmitter<string | null> = new EventEmitter();\r\n    @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter();\r\n    @Output() onBlur: EventEmitter<FocusEvent> = new EventEmitter();\r\n\t@Output() onKeydown: EventEmitter<KeyboardEvent> = new EventEmitter();\r\n    @Output() onKeypress: EventEmitter<KeyboardEvent> = new EventEmitter();\r\n    @Output() initialized: EventEmitter<void> = new EventEmitter();\r\n\r\n    @ViewChild('input') input: ElementRef<HTMLInputElement> | null = null;\r\n\r\n\toverride enterAsTabType: string = 'inputtext';\r\n\r\n    get filled(): boolean {\r\n        return this.value !== '';\r\n    }\r\n\r\n    override writeValue(value: string | null): void {\r\n\t\tif (value === null) {\r\n\t\t\tvalue = '';\r\n\t\t}\r\n        this.value = value;\r\n\t\tif (this.input !== null) {\r\n\t\t\tthis.input.nativeElement.value = value;\r\n\t\t}\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    focusFromInput(event: FocusEvent): void {\r\n        if (this.isReadonly || this.isDisabled) {\r\n            return;\r\n        }\r\n        this.focused = true;\r\n\t\tif (this.selectOnFocus) {\r\n\t\t\tthis.select();\r\n\t\t}\r\n        this.onFocus.emit(event);\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n\tselect(): void {\r\n\t\tif (this.input !== null) {\r\n\t\t\tthis.input.nativeElement.select();\r\n\t\t}\r\n\t}\r\n\r\n\tclearClicked(): void {\r\n\t\tthis.defaultClear(() => {\r\n\t\t\tthis.value = '';\r\n\t\t});\r\n\t}\r\n\r\n    override focus(): void {\r\n        if (this.input !== null) {\r\n            this.input.nativeElement.focus();\r\n\t\t\tif (this.selectOnFocus) {\r\n\t\t\t\tthis.select();\r\n\t\t\t}\r\n        }\r\n    }\r\n\r\n    blur(event: FocusEvent): void {\r\n        this.focused = false;\r\n        this.onBlur.emit(event);\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    change(): void {\r\n        if (this.input !== null) {\r\n            if (this.value === this.input.nativeElement.value) {\r\n                return;\r\n            }\r\n            this.value = this.input.nativeElement.value;\r\n        }\r\n        if (this.onChangeFn !== null) {\r\n            this.onChangeFn(this.value);\r\n        }\r\n        if (this.onTouchedFn !== null) {\r\n            this.onTouchedFn(this.value);\r\n        }\r\n        this.onChanged.emit(this.value);\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n\tkeydown(event: KeyboardEvent): void {\r\n\t\tthis.onKeydown.emit(event);\r\n\t}\r\n\r\n    keyup(event: KeyboardEvent): void {\r\n        this.onKeyup.emit(event);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n        if (\r\n            this.changeOnKeyup &&\r\n            this.input !== null &&\r\n            this.value !== this.input.nativeElement.value\r\n        ) {\r\n            this.change();\r\n        }\r\n    }\r\n\r\n    keypress(event: KeyboardEvent): void {\r\n        this.onKeypress.emit(event);\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.initialized.emit();\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n    ngOnInit(): void {\r\n        this.setControlComponent();\r\n    }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, HostListener, inject, Input, OnChanges, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { InputTextComponent } from '../../features/inputtext/inputtext.component';\r\nimport { AcceptValidationMode, ConfirmConfiguration } from '../../interfaces';\r\nimport { randomIntFromInterval } from '../../shared';\r\nimport { CfDestroyRef } from '../../shared/classes';\r\nimport { CfDialogConfig, CfDialogRef } from '../classes';\r\nimport { ButtonDirective } from '../directives/button.directive';\r\nimport { CfSafeHtmlPipe } from '../pipes';\r\n\r\n@Component({\r\n    selector: 'cf-confirm',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tCfSafeHtmlPipe,\r\n\t\tButtonDirective,\r\n\t\tInputTextComponent\r\n\t],\r\n    template: `\r\n        <div class=\"cf-confirm-component\">\r\n            <div class=\"cf-dialog-title\">{{title}}</div>\r\n            <div class=\"cf-mt-4\" [innerHTML]=\"text|cfsafehtml\"></div>\r\n            <div class=\"cf-mt-4\" *ngIf=\"validationText !== null\">\r\n                <div class=\"cf-mb-2\" *ngIf=\"acceptValidationLabelDisplay !== null\">{{acceptValidationLabelDisplay}}</div>\r\n                <cf-inputtext #validationInput [(ngModel)]=\"validationInputValue\" (ngModelChange)=\"checkValidationInputValue()\" (onKeyup)=\"onKeyup($event)\"></cf-inputtext>\r\n            </div>\r\n            <div class=\"cf-flex cf-flex-spacer cf-mt-4\">\r\n                <button cfButton [severity]=\"switchButtonColors ? 'danger' : 'success'\" [label]=\"acceptButtonText\" [disabled]=\"invalid\" (click)=\"close(true)\" class=\"cf-ml-auto\"></button>\r\n\t\t\t\t<button cfButton [severity]=\"switchButtonColors ? 'success' : 'danger'\" [label]=\"declineText\" *ngIf=\"!hideDeclineButton\" (click)=\"close(false)\"></button>\r\n            </div>\r\n        </div>\r\n    `\r\n})\r\nexport class ConfirmComponent extends CfDestroyRef implements OnChanges, AfterViewInit {\r\n    \r\n    private config: CfDialogConfig = inject(CfDialogConfig);\r\n    private ref: CfDialogRef = inject(CfDialogRef);\r\n    private cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    @ViewChild('validationInput') validationInput: InputTextComponent | null = null;\r\n\r\n    @Input() configuration: ConfirmConfiguration | null = null;\r\n\r\n    acceptButtonAllowedTimer: boolean = true;\r\n    acceptButtonAllowedValidationText: boolean = true;\r\n    \r\n    title: string = '';\r\n    text: string = '';\r\n    acceptText: string = '';\r\n    declineText: string = '';\r\n\thideDeclineButton: boolean = false;\r\n    acceptTimeout: number | null = null;\r\n    acceptValidationText: string | null = null;\r\n    acceptValidationMode: AcceptValidationMode | null = null;\r\n    acceptValidationLabel: string | null = null;\r\n    switchButtonColors: boolean = false;\r\n\r\n    acceptTimeoutTimer: Subscription | null = null;\r\n    acceptTimeoutTimerLeft: number | null = null;\r\n    validationText: string | null = null;\r\n    validationInputValue: string | null = null;\r\n    acceptValidationLabelDisplay: string | null = null;\r\n\r\n    chars: string[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];\r\n    numbers: string[] = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\r\n\r\n\tget invalid(): boolean {\r\n\t\treturn !this.acceptButtonAllowedTimer || !this.acceptButtonAllowedValidationText;\r\n\t}\r\n\r\n    get acceptButtonText(): string {\r\n        if (this.acceptTimeoutTimer !== null && this.acceptTimeoutTimerLeft !== null && this.acceptTimeoutTimerLeft !== 0) {\r\n            return this.acceptText + ' (' + this.acceptTimeoutTimerLeft.toString()  + ')';\r\n        }\r\n        return this.acceptText;\r\n    }\r\n\r\n\t@HostListener('document:keyup', ['$event'])\r\n\tdocumentKeyup(event: KeyboardEvent): void {\r\n\t\tif (event.key.toLowerCase() === 'enter') {\r\n\t\t\tif (!this.invalid) {\r\n\t\t\t\tthis.close(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (event.key.toLowerCase() === 'escape') {\r\n\t\t\tthis.close(false);\r\n\t\t}\r\n\t}\r\n\r\n    close(accept: boolean): void {\r\n        this.ref.close(accept);\r\n    }\r\n\r\n    setConfig(configuration: ConfirmConfiguration): void {\r\n        this.title = configuration.title;\r\n        this.text = configuration.text;\r\n        this.acceptText = configuration.acceptText;\r\n        this.declineText = configuration.declineText;\r\n\t\tthis.hideDeclineButton = configuration.hideDeclineButton || false;\r\n        this.acceptTimeout = configuration.acceptTimeout || null;\r\n        this.acceptValidationText = configuration.acceptValidationText || null;\r\n        this.acceptValidationMode = configuration.acceptValidationMode || AcceptValidationMode.TEXT;\r\n        this.acceptValidationLabel = configuration.acceptValidationLabel || null;\r\n        this.switchButtonColors = configuration.switchButtonColors || false;\r\n\r\n        if (this.acceptTimeout !== null) {\r\n            this.startAcceptTimeoutTimer();\r\n        }\r\n\r\n        if (this.acceptValidationText !== null) {\r\n            this.setValidationText();\r\n        }\r\n    }\r\n\r\n    startAcceptTimeoutTimer(): void {\r\n\t\tif (this.acceptTimeout === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n        this.acceptButtonAllowedTimer = false;\r\n        this.stopAcceptTimeoutTimer();\r\n        this.acceptTimeoutTimerLeft = this.acceptTimeout;\r\n        this.acceptTimeoutTimer = interval(1000).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n\t\t\tif (this.acceptTimeoutTimerLeft === null) {\r\n                this.acceptButtonAllowedTimer = true;\r\n                this.stopAcceptTimeoutTimer();\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n            this.acceptTimeoutTimerLeft = this.acceptTimeoutTimerLeft - 1;\r\n            if (this.acceptTimeoutTimerLeft === 0) {\r\n                this.acceptButtonAllowedTimer = true;\r\n                this.stopAcceptTimeoutTimer();\r\n            }\r\n\t\t\tthis.cdr.detectChanges();\r\n        });\r\n    }\r\n\r\n    stopAcceptTimeoutTimer(): void {\r\n        if (this.acceptTimeoutTimer !== null) {\r\n            this.acceptTimeoutTimer.unsubscribe();\r\n            this.acceptTimeoutTimer = null;\r\n        }\r\n    }\r\n\r\n    setValidationText(): void {\r\n        this.validationText = null;\r\n        this.validationInputValue = '';\r\n        this.acceptButtonAllowedValidationText = false;\r\n        this.acceptValidationLabelDisplay = null;\r\n        if (this.acceptValidationMode === AcceptValidationMode.TEXT) {\r\n            this.validationText = this.acceptValidationText;\r\n        }\r\n        if (this.acceptValidationMode === AcceptValidationMode.PATTERN && this.acceptValidationText !== null) {\r\n            let validationText = this.acceptValidationText.toLowerCase();\r\n            validationText = validationText.replace(/a/g, () => this.chars[randomIntFromInterval(0, this.chars.length - 1)]);\r\n            validationText = validationText.replace(/d/g, () => this.numbers[randomIntFromInterval(0, this.numbers.length - 1)]);\r\n            validationText = validationText.toUpperCase();\r\n            this.validationText = validationText;\r\n        }\r\n        if (this.acceptValidationLabel !== null && this.validationText !== null) {\r\n            this.acceptValidationLabelDisplay = this.acceptValidationLabel.replace('%TEXT%', this.validationText);\r\n        }\r\n    }\r\n\r\n    checkValidationInputValue(): void {\r\n        this.acceptButtonAllowedValidationText = this.validationInputValue === this.validationText;\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n\tonKeyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tkeyboardEvent.preventDefault();\r\n\t\tkeyboardEvent.stopPropagation();\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'enter') {\r\n\t\t\tif (!this.invalid) {\r\n\t\t\t\tthis.close(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    ngOnChanges(): void {\r\n        if (this.configuration !== null) {\r\n            this.setConfig(this.configuration);\r\n        }\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        if (this.validationText !== null && this.validationInput !== null) {\r\n            this.validationInput.focus();\r\n        }\r\n\t\tthis.cdr.detectChanges(); \r\n    }\r\n\r\n    constructor() {\r\n        super();\r\n        this.setConfig(this.config.getData('configuration'));\r\n\t\tthis.cdr.detach();\r\n    }\r\n}\r\n","import { NgClass, NgStyle } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject, Input, OnInit } from '@angular/core';\r\nimport { LoadingConfiguration } from '../../interfaces';\r\nimport { CfDialog } from '../classes';\r\nimport { CfSafeHtmlPipe } from '../pipes';\r\nimport { TranslationsService } from '../services';\r\n\r\n@Component({\r\n    selector: 'cf-loading',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCfSafeHtmlPipe,\r\n        NgClass,\r\n        NgStyle\r\n\t],\r\n    template: `\r\n        <div class=\"cf-loading-component\">\r\n            <div class=\"cf-dialog-title\">{{configuration.title}}</div>\r\n            <div class=\"cf-mt-4 cf-mb-4\" [innerHTML]=\"configuration.text|cfsafehtml\"></div>\r\n            <div class=\"cf-text-center\">\r\n                <div class=\"remixicon spin-slow\" [ngClass]=\"configuration.loadingIcon || 'loader-2-fill'\" [ngStyle]=\"{'font-size.px': configuration.iconSize || 45}\"></div>\r\n            </div>\r\n        </div>\r\n    `\r\n})\r\nexport class LoadingComponent extends CfDialog implements OnInit {\r\n\t\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\ttranslationsService: TranslationsService = inject(TranslationsService);\r\n\r\n    @Input() configuration: LoadingConfiguration = this.config.getData('configuration');\r\n\r\n    ngOnInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    constructor() {\r\n\t\tsuper();\r\n\t\tthis.cdr.detach();\r\n    }\r\n}\r\n","import { NgFor, NgIf } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, Input, OnChanges, QueryList, ViewChildren } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { ButtonConfiguration, ModalWithButtonsConfiguration } from '../../interfaces';\r\nimport { CfDialog } from '../classes';\r\nimport { ButtonDirective } from '../directives/button.directive';\r\nimport { CfSafeHtmlPipe } from '../pipes';\r\nimport { CfPermissionsService } from '../services';\r\n\r\n@Component({\r\n    selector: 'cf-alert',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tButtonDirective,\r\n\t\tCfSafeHtmlPipe,\r\n\t\tNgFor,\r\n\t\tNgIf,\r\n\t\tRouterLink\r\n\t],\r\n    template: `\r\n\t\t<div class=\"cf-dialog-title\">{{configuration.title}}</div>\r\n\t\t<div class=\"cf-mt-4\" [innerHTML]=\"configuration.text|cfsafehtml\"></div>\r\n\t\t<div class=\"cf-flex cf-flex-spacer cf-mt-4\">\r\n\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t<ng-container *ngFor=\"let button of filteredButtons\">\r\n\t\t\t\t<button cfButton [severity]=\"button.severity\" [label]=\"button.label\" (click)=\"callCallback(button)\" *ngIf=\"button.callback !== undefined\"></button>\r\n\t\t\t\t<button cfButton [severity]=\"button.severity\" [label]=\"button.label\" [routerLink]=\"button.routerLink\" *ngIf=\"button.routerLink !== undefined\"></button>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n    `,\r\n\tstyles: [`\r\n\t\t:host {\r\n\t\t\tdisplay: block;\r\n\t\t}\r\n\t`]\r\n})\r\nexport class ModalWithButtonsComponent extends CfDialog implements OnChanges, AfterViewInit {\r\n\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\tpermissionsService: CfPermissionsService = inject(CfPermissionsService);\r\n\r\n    @Input() configuration: ModalWithButtonsConfiguration = this.config.getData('configuration');\r\n\r\n\t@ViewChildren(ButtonDirective) buttons: QueryList<ButtonDirective> | undefined = undefined;\r\n\r\n\tget filteredButtons(): ButtonConfiguration[] {\r\n\t\treturn this.configuration.buttons.filter((buttonConfiguration: ButtonConfiguration) => {\r\n\t\t\tif (buttonConfiguration.permission !== undefined) {\r\n\t\t\t\tif (buttonConfiguration.permission instanceof Array) {\r\n\t\t\t\t\treturn this.permissionsService.hasPermissions(buttonConfiguration.permission);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn this.permissionsService.hasPermission(buttonConfiguration.permission);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tcallCallback(button: ButtonConfiguration): void {\r\n\t\tif (button.callback === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tbutton.callback({\r\n\t\t\tdialogRef: this.ref\r\n\t\t});\r\n\t}\r\n\r\n\tfocus(): void {\r\n\t\tif (this.buttons === undefined || this.buttons.length !== this.configuration.buttons.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tfor (let i = 0; i < this.configuration.buttons.length; i++) {\r\n\t\t\tif (this.configuration.buttons[i].focus !== undefined) {\r\n\t\t\t\tconst button: ButtonDirective | undefined = this.buttons.get(i);\r\n\t\t\t\tif (button !== undefined) {\r\n\t\t\t\t\tbutton.outerFocus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n    ngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.focus();\r\n    }\r\n\r\n    constructor() {\r\n\t\tsuper();\r\n\t\tif (this.configuration.showCloseIcon === false) {\r\n\t\t\tthis.config.showCloseIcon = false;\r\n\t\t}\r\n\t\tthis.cdr.detach();\r\n    }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Subject, Subscription, timer } from 'rxjs';\r\nimport { MessageSeverity } from '../../enums';\r\nimport { Message, MessageConfiguration } from '../../interfaces';\r\nimport { MESSAGE_DEFAULT_CONFIGURATION } from '../tokens/message.tokens';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class CfMessageService {\r\n\r\n    /**\r\n     * Default configuration\r\n     * \r\n     * Can be changed if you overwrite it or use the `MESSAGE_DEFAULT_CONFIGURATION` InjectionToken\r\n     */\r\n    public defaultConfiguration: MessageConfiguration = inject(MESSAGE_DEFAULT_CONFIGURATION);\r\n    \r\n    /**\r\n     * Message subject\r\n     */\r\n    private messageSubject: Subject<Message> = new Subject();\r\n\r\n    /**\r\n     * Show\r\n     * \r\n     * Displays message with the given configuration\r\n     * \r\n     * @param messageConfiguration `Partial<MessageConfiguration>`\r\n     */\r\n    public show(title: string, message: string, configuration?: Partial<MessageConfiguration>): void {\r\n        this.messageSubject.next({\r\n\t\t\t...this.defaultConfiguration,\r\n            ...configuration,\r\n\t\t\ttitle,\r\n\t\t\tmessage\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Show success message\r\n     * \r\n     * Display a message with default success severity\r\n     * \r\n     * @param title `string`, required\r\n     * @param message `string`, required\r\n     * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n     * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n     * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n     */\r\n\tpublic showSuccessMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.SUCCESS\r\n\t\t});\r\n\t}\r\n\r\n    /**\r\n     * Show danger message\r\n     * \r\n     * Display a message with default danger severity\r\n     * \r\n     * @param title `string`, required\r\n     * @param message `string`, required\r\n     * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n     * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n     * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n     */\r\n\tpublic showDangerMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.DANGER,\r\n\t\t\tkeepOnHover: true\r\n\t\t});\r\n\t}\r\n\r\n    /**\r\n     * Show warning message\r\n     * \r\n     * Display a message with default warning severity\r\n     * \r\n     * @param title `string`, required\r\n     * @param message `string`, required\r\n     * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n     * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n     * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n     */\r\n\tpublic showWarningMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.WARNING\r\n\t\t});\r\n\t}\r\n\r\n    /**\r\n     * Show info message\r\n     * \r\n     * Display a message with default info severity\r\n     * \r\n     * @param title `string`, required\r\n     * @param message `string`, required\r\n     * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n     * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n     * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n     */\r\n\tpublic showInfoMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.INFO\r\n\t\t});\r\n\t}\r\n\r\n    private showMessage(message: Message): void {\r\n        let container: HTMLElement | null = document.getElementById('cf-toasts-' + message.position + '-container');\r\n        if (container === null) {\r\n            container = document.createElement('div');\r\n            container.id = 'cf-toasts-' + message.position + '-container';\r\n            document.body.appendChild(container);\r\n        }\r\n\r\n        const div: HTMLElement = this.createMessageHtmlElement(message);\r\n\r\n        container.appendChild(div);\r\n\r\n        if (message.lifetime !== null) {\r\n\r\n\t\t\tlet disposeTimerSubscription: Subscription | null = timer(message.lifetime + 500).subscribe(() => {\r\n\t\t\t\tthis.hideMessage(div);\r\n\t\t\t});\r\n\r\n\t\t\tif (message.keepOnHover) {\r\n\t\t\t\tdiv.addEventListener('mouseenter', () => {\r\n\t\t\t\t\tif (disposeTimerSubscription !== null) {\r\n\t\t\t\t\t\tdisposeTimerSubscription.unsubscribe();\r\n\t\t\t\t\t\tdisposeTimerSubscription = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n        }\r\n    }\r\n\r\n    private createMessageHtmlElement(message: Message): HTMLElement {\r\n        const div: HTMLElement = document.createElement('div');\r\n        div.classList.add('cf-toast', 'cf-' + message.severity + '-toast');\r\n        const titleDiv: HTMLElement = document.createElement('div');\r\n        titleDiv.classList.add('cf-toast-title');\r\n        titleDiv.innerText = message.title;\r\n        const messageDiv: HTMLElement = document.createElement('div');\r\n        messageDiv.classList.add('cf-toast-message');\r\n        messageDiv.innerText = message.message;\r\n        div.appendChild(titleDiv);\r\n        div.appendChild(messageDiv);\r\n        if (message.closeable) {\r\n            const closeIcon: HTMLElement = document.createElement('i');\r\n            closeIcon.classList.add('close-icon', 'remixicon', 'close-line');\r\n            closeIcon.onclick = () => {\r\n                this.hideMessage(div, true);\r\n            };\r\n            div.appendChild(closeIcon);\r\n        }\r\n        return div;\r\n    }\r\n\r\n    private hideMessage(messageElement: HTMLElement, forceClose: boolean = false): void {\r\n        messageElement.classList.add('hidden-toast');\r\n\r\n        let remainOpen = false;\r\n        messageElement.addEventListener('mouseenter', (() => {\r\n            remainOpen = true;\r\n        }));\r\n\r\n        timer(500).subscribe(() => {\r\n            if (remainOpen && !forceClose) {\r\n                messageElement.classList.remove('hidden-toast');\r\n                return;\r\n            }\r\n            messageElement.removeEventListener('mouseenter', (() => {}));\r\n            messageElement.remove();\r\n        });\r\n    }\r\n\r\n    constructor() {\r\n        this.messageSubject.subscribe((message: Message) => {\r\n            this.showMessage(message);\r\n        });\r\n    }\r\n\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n    ApplicationRef,\r\n    ComponentRef,\r\n    createComponent,\r\n    EmbeddedViewRef,\r\n    inject,\r\n    Injectable,\r\n    Injector,\r\n    PLATFORM_ID,\r\n    Type\r\n} from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { AlertConfiguration, CfDialogConfiguration, ConfirmConfiguration, InputTextareaDialogConfiguration, InputTextDialogConfiguration, LoadingConfiguration, ModalWithButtonsConfiguration, PredefinedDialogs } from '../../interfaces';\r\nimport { CfDialogConfig, CfDialogInjector, CfDialogRef } from '../classes';\r\nimport { AlertComponent } from '../components/alert.component';\r\nimport { ConfirmComponent } from '../components/confirm.component';\r\nimport { LoadingComponent } from '../components/loading.component';\r\nimport { ModalWithButtonsComponent } from '../components/modalwithbuttons.component';\r\nimport { ALERT_CONFIGURATIONS, CF_PREDEFINED_DIALOGS, CONFIRM_CONFIGURATIONS } from '../tokens';\r\nimport { CfMessageService } from './message.service';\r\n\r\ninterface CfDialogComponentRefContainer {\r\n    componentRef: ComponentRef<any>;\r\n    container: HTMLDivElement;\r\n\topenIndex: number;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CfDialogService {\r\n\r\n\tprivate injector: Injector = inject(Injector);\r\n\tprivate predefinedConfirmConfigurations: {[key: string]: ConfirmConfiguration} = inject(CONFIRM_CONFIGURATIONS);\r\n\tprivate predefinedAlertConfigurations: {[key: string]: AlertConfiguration} = inject(ALERT_CONFIGURATIONS);\r\n\tprivate predefinedDialogs: PredefinedDialogs = inject(CF_PREDEFINED_DIALOGS);\r\n\r\n\ttitle: Title = inject(Title);\r\n\tmessageService: CfMessageService = inject(CfMessageService);\r\n\r\n\tdialogs: Map<CfDialogRef, CfDialogComponentRefContainer> = new Map();\r\n\topenIndex: number = 1;\r\n\tplatformId: Object = inject(PLATFORM_ID);\r\n\r\n    constructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tdocument.addEventListener(\"keyup\", (keyboardEvent: KeyboardEvent) => {\r\n\t\t\t\tif (keyboardEvent.key.toLowerCase() === 'escape') {\r\n\t\t\t\t\tlet lastOpenIndex: number = 0;\r\n\t\t\t\t\tlet lastOpenedDialogRef: CfDialogRef | null = null;\r\n\t\t\t\t\tfor (const [dialogRef, cfDialogComponentRefContainer] of this.dialogs.entries()) {\r\n\t\t\t\t\t\tif (cfDialogComponentRefContainer.openIndex > lastOpenIndex) {\r\n\t\t\t\t\t\t\tlastOpenIndex = cfDialogComponentRefContainer.openIndex;\r\n\t\t\t\t\t\t\tlastOpenedDialogRef = dialogRef;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tif (lastOpenedDialogRef !== null && lastOpenedDialogRef.dialogConfig !== null) {\r\n\t\t\t\t\t\tif (lastOpenedDialogRef.dialogConfig.ignoreKeyUp || document.activeElement instanceof HTMLInputElement || document.activeElement instanceof HTMLTextAreaElement) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t\tlastOpenedDialogRef.close();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tasync openPredefined<T = any>(name: string, dialogConfiguration: CfDialogConfiguration = {}): Promise<CfDialogRef<T>> {\r\n\t\tif (this.predefinedDialogs[name] !== undefined) {\r\n\t\t\tconst predefinedDialog = this.predefinedDialogs[name];\r\n\t\t\tif (typeof predefinedDialog === 'function') {\r\n\t\t\t\treturn this.openImport(predefinedDialog, dialogConfiguration);\r\n\t\t\t} else {\r\n\t\t\t\treturn this.openImport(predefinedDialog.component, {...predefinedDialog.configuration, ...dialogConfiguration});\r\n\t\t\t}\r\n\t\t}\r\n\t\tthrow Error(\"Predefined dialgo not found: \" + name);\r\n\t}\r\n\r\n\tasync openImport<T = any>(component: () => Promise<Type<any>>, dialogConfiguration: CfDialogConfiguration = {}): Promise<CfDialogRef<T>> {\r\n\t\treturn new Promise(async (resolve) => {\r\n\t\t\tresolve(this.open<T>(await component(), dialogConfiguration));\r\n\t\t});\r\n\t}\r\n\r\n    open<T = any>(component: Type<any>, dialogConfiguration: CfDialogConfiguration = {}): CfDialogRef<T> {\r\n\r\n\t\tfor (let dialog of this.dialogs.entries()) {\r\n\t\t\tif (\r\n\t\t\t\t(dialogConfiguration.single && dialog[1].componentRef.componentType.name === component.name) ||\r\n\t\t\t\t(dialog[0].dialogConfig !== null && dialog[0].dialogConfig.single && dialog[1].componentRef.componentType.name === component.name)\r\n\t\t\t) {\r\n\t\t\t\treturn dialog[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n        const dialogConfig: CfDialogConfig = this.createDialogConfig(dialogConfiguration);\r\n\r\n\t\tif (!dialogConfig.keepActiveElement) {\r\n\t\t\tif (document.activeElement instanceof HTMLElement) {\r\n\t\t\t\tdocument.activeElement.blur();\r\n\t\t\t}\r\n\t\t}\r\n\r\n        const dialogRef: CfDialogRef<T> = this.appendToBody(component, dialogConfig);\r\n\t\tdialogRef.messageService = this.messageService;\r\n\t\tdialogRef.dialogConfig = dialogConfig;\r\n\r\n\t\tthis.changeAndStoreTitle(dialogRef);\r\n\r\n        return dialogRef;\r\n    }\r\n\r\n\tchangeAndStoreTitle(dialogRef: CfDialogRef): void {\r\n\t\tdialogRef.savedTitle = this.title.getTitle();\r\n\t\tif (dialogRef.dialogConfig !== null && dialogRef.dialogConfig.title !== null) {\r\n\t\t\tthis.title.setTitle(dialogRef.dialogConfig.title);\r\n\t\t}\r\n\t}\r\n\r\n    createDialogConfig(dialogConfiguration: CfDialogConfiguration): CfDialogConfig {\r\n        const dialogConfig: CfDialogConfig = new CfDialogConfig();\r\n        if (dialogConfiguration.showCloseIcon !== undefined) {\r\n            dialogConfig.showCloseIcon = dialogConfiguration.showCloseIcon;\r\n        }\r\n\t\tif (dialogConfiguration.beforeClose !== undefined) {\r\n            dialogConfig.beforeClose = dialogConfiguration.beforeClose;\r\n        }\r\n\t\tif (dialogConfiguration.ignoreKeyUp !== undefined) {\r\n            dialogConfig.ignoreKeyUp = dialogConfiguration.ignoreKeyUp;\r\n        }\r\n        if (dialogConfiguration.data !== undefined) {\r\n            dialogConfig.data = dialogConfiguration.data;\r\n        }\r\n        if (dialogConfiguration.noPadding !== undefined) {\r\n            dialogConfig.noPadding = dialogConfiguration.noPadding;\r\n        }\r\n\t\tif (dialogConfiguration.keepActiveElement !== undefined) {\r\n\t\t\tdialogConfig.keepActiveElement = dialogConfiguration.keepActiveElement;\r\n\t\t}\r\n\t\tif (dialogConfiguration.containerClasses !== undefined) {\r\n\t\t\tdialogConfig.containerClasses = dialogConfiguration.containerClasses;\r\n\t\t}\r\n\t\tif (dialogConfiguration.dialogClasses !== undefined) {\r\n\t\t\tdialogConfig.dialogClasses = dialogConfiguration.dialogClasses;\r\n\t\t}\r\n\t\tif (dialogConfiguration.title !== undefined) {\r\n\t\t\tdialogConfig.title = dialogConfiguration.title;\r\n\t\t}\r\n\t\tif (dialogConfiguration.contentElement !== undefined) {\r\n\t\t\tdialogConfig.contentElement = dialogConfiguration.contentElement;\r\n\t\t}\r\n\t\tif (dialogConfiguration.single !== undefined) {\r\n\t\t\tdialogConfig.single = dialogConfiguration.single;\r\n\t\t}\r\n\t\tif (dialogConfiguration.width !== undefined) {\r\n\t\t\tdialogConfig.width = dialogConfiguration.width;\r\n\t\t}\r\n\t\tif (dialogConfiguration.height !== undefined) {\r\n\t\t\tdialogConfig.height = dialogConfiguration.height;\r\n\t\t}\r\n        return dialogConfig;\r\n    }\r\n\r\n    appendToBody(component: Type<any>, dialogConfig: CfDialogConfig): CfDialogRef {\r\n\r\n\t\tconst appRef: ApplicationRef = this.injector.get(ApplicationRef);\r\n\r\n        // CREATE INJECTION TOKENS\r\n        const tokens: WeakMap<any, any> = new WeakMap();\r\n\r\n        // CREATE DIALOG CONFIGURATION CLASS\r\n        tokens.set(CfDialogConfig, dialogConfig);\r\n\r\n        // CREATE DIALOG REFERENCE CLASS\r\n        const dialogRef: CfDialogRef = new CfDialogRef();\r\n        tokens.set(CfDialogRef, dialogRef);\r\n\r\n        // LISTEN ON DIALOG CLOSE\r\n        const closeSub: Subscription = dialogRef.onClose.subscribe(() => {\r\n            this.removeFromBody(dialogRef);\r\n            closeSub.unsubscribe();\r\n        });\r\n\r\n        // CREATE COMPONENT REF\r\n        const componentRef: ComponentRef<any> = createComponent(component, {\r\n\t\t\tenvironmentInjector: appRef.injector,\r\n\t\t\telementInjector: new CfDialogInjector(this.injector, tokens)\r\n\t\t});\r\n\r\n        // ATTACH VIEW TO ANGULAR\r\n        appRef.attachView(componentRef.hostView);\r\n\r\n        // CREATE DIALOG CONTAINER ELEMENT\r\n        const dialogContainer: HTMLDivElement = document.createElement('div');\r\n        dialogContainer.classList.add('cf-dialog-container');\r\n\t\tif (dialogConfig.containerClasses.length > 0) {\r\n\t\t\tdialogContainer.classList.add(...dialogConfig.containerClasses);\r\n\t\t}\r\n\r\n\t\t// APPEND DOM ELEMENT TO DIALOG\r\n\t\tconst childDomElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n\t\tchildDomElem.classList.add('cf-dialog');\r\n\t\t\r\n\t\tif (dialogConfig.width !== null) {\r\n\t\t\tchildDomElem.style.width = dialogConfig.width;\r\n\t\t}\r\n\t\tif (dialogConfig.height !== null) {\r\n\t\t\tchildDomElem.style.height = dialogConfig.height;\r\n\t\t}\r\n\t\tif (dialogConfig.noPadding) {\r\n            childDomElem.classList.add('no-padding');\r\n        }\r\n\t\tif (dialogConfig.dialogClasses.length > 0) {\r\n\t\t\tchildDomElem.classList.add(...dialogConfig.dialogClasses);\r\n\t\t}\r\n\r\n\t\tif (dialogConfig.contentElement !== null) {\r\n\t\t\tchildDomElem.appendChild(dialogConfig.contentElement);\r\n\t\t}\r\n\r\n\t\tdialogContainer.appendChild(childDomElem);\r\n\r\n        // CLOSEABLE? APPEND BUTTON\r\n        if (dialogConfig.showCloseIcon) {\r\n            const closeElement: HTMLDivElement = document.createElement('div');\r\n            closeElement.classList.add(...['cf-dialog-close', 'remixicon', 'close-line']);\r\n            closeElement.onclick = () => {\r\n                dialogRef.close();\r\n            };\r\n            childDomElem.appendChild(closeElement);\r\n        }\r\n\r\n        // APPEND DIALOG CONTAINER TO BODY\r\n        document.body.appendChild(dialogContainer);\r\n\r\n        this.dialogs.set(dialogRef, {\r\n            componentRef,\r\n            container: dialogContainer,\r\n\t\t\topenIndex: this.openIndex \r\n        });\r\n\r\n\t\tthis.openIndex++;\r\n\r\n        return dialogRef;\r\n    }\r\n\r\n    removeFromBody(dialogRef: CfDialogRef): void {\r\n\r\n\t\tconst appRef: ApplicationRef = this.injector.get(ApplicationRef);\r\n\r\n        if (!dialogRef || !this.dialogs.has(dialogRef)) {\r\n            return;\r\n        }\r\n        const dialogComponentRefContainer: CfDialogComponentRefContainer | undefined = this.dialogs.get(dialogRef);\r\n        if (dialogComponentRefContainer == undefined) {\r\n            return;\r\n        }\r\n\t\t\r\n        appRef.detachView(dialogComponentRefContainer.componentRef.hostView);\r\n\r\n        if (dialogComponentRefContainer.container !== null) {\r\n            dialogComponentRefContainer.container.remove();\r\n        }\r\n        dialogComponentRefContainer.componentRef.destroy();\r\n        this.dialogs.delete(dialogRef);\r\n\r\n\t\tif (this.dialogs.size === 0) {\r\n\t\t\tthis.openIndex = 1;\r\n\t\t}\r\n\r\n\t\t// Restore title\r\n\t\tif (this.dialogs.size === 0) {\r\n\t\t\tthis.title.setTitle(dialogRef.savedTitle);\r\n\t\t} else {\r\n\t\t\tlet latestOpenedDialogRef: CfDialogRef | null = null;\r\n\t\t\tthis.dialogs.forEach((_, dialogRef: CfDialogRef) => {\r\n\t\t\t\tif (latestOpenedDialogRef === null) {\r\n\t\t\t\t\tlatestOpenedDialogRef = dialogRef;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (latestOpenedDialogRef.opened < dialogRef.opened) {\r\n\t\t\t\t\t\tlatestOpenedDialogRef = dialogRef;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (latestOpenedDialogRef !== null) {\r\n\t\t\t\tthis.title.setTitle(latestOpenedDialogRef.savedTitle);\r\n\t\t\t} else {\r\n\t\t\t\tthis.title.setTitle(dialogRef.savedTitle);\r\n\t\t\t}\r\n\t\t}\r\n    }\r\n\r\n\tconfirm(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: CfDialogConfiguration = {}\r\n\t): Promise<boolean> {\r\n\t\tif (typeof configuration === 'string') {\r\n\t\t\tconst predefinedConfirmConfiguration: ConfirmConfiguration | undefined = this.predefinedConfirmConfigurations[configuration];\r\n\t\t\tif (predefinedConfirmConfiguration === undefined) {\r\n\t\t\t\tthrow new Error('Predefined confirm configuration not found for: ' + configuration);\r\n\t\t\t}\r\n\t\t\tconfiguration = predefinedConfirmConfiguration;\r\n\t\t}\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.open(ConfirmComponent, {\r\n\t\t\t\t...dialogConfiguration,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tconfiguration\r\n\t\t\t\t},\r\n\t\t\t\tignoreKeyUp: true,\r\n\t\t\t\tshowCloseIcon: false\r\n\t\t\t}).onClose.pipe(filter(value => value !== undefined)).subscribe((accepted: boolean) => {\r\n\t\t\t\tif (accepted) {\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n    async confirmAsync(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: CfDialogConfiguration = {}\r\n\t): Promise<boolean> {\r\n        return await new Promise((resolve) => {\r\n            this.confirm(configuration, dialogConfiguration).then(() => {\r\n                resolve(true);\r\n            }).catch(() => {\r\n                resolve(false);\r\n            });\r\n        });\r\n    }\r\n\t\r\n\tconfirmAccept(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: CfDialogConfiguration = {}\r\n\t): Promise<boolean> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.confirm(configuration, dialogConfiguration).then(() => resolve(true)).catch(() => {});\r\n\t\t});\r\n\t}\r\n\t\r\n\tconfirmDecline(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: CfDialogConfiguration = {}\r\n\t): Promise<boolean> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.confirm(configuration, dialogConfiguration).then(() => {}).catch(() => resolve(true));\r\n\t\t});\r\n\t}\r\n\r\n\tshowLoading(\r\n\t\tconfiguration: LoadingConfiguration,\r\n\t\tdialogConfiguration: CfDialogConfiguration = {}\r\n\t): CfDialogRef {\r\n\t\treturn this.open(LoadingComponent, {\r\n\t\t\t...dialogConfiguration,\r\n\t\t\tshowCloseIcon: false,\r\n\t\t\tignoreKeyUp: true,\r\n\t\t\tdata: {\r\n\t\t\t\tconfiguration\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tshowAlert(\r\n\t\tconfiguration: AlertConfiguration | string,\r\n\t\tdialogConfiguration: CfDialogConfiguration = {}\r\n\t): Promise<void> {\r\n\t\tif (typeof configuration === 'string') {\r\n\t\t\tconst predefinedAlertConfiguration: AlertConfiguration | undefined = this.predefinedAlertConfigurations[configuration];\r\n\t\t\tif (predefinedAlertConfiguration === undefined) {\r\n\t\t\t\tthrow new Error('Predefined alert configuration not found for: ' + configuration);\r\n\t\t\t}\r\n\t\t\tconfiguration = predefinedAlertConfiguration;\r\n\t\t}\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\treturn this.open(AlertComponent, {\r\n\t\t\t\t...dialogConfiguration,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tconfiguration\r\n\t\t\t\t},\r\n\t\t\t\tignoreKeyUp: true,\r\n\t\t\t\tshowCloseIcon: false\r\n\t\t\t}).onClose.subscribe(() => {\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tshowModalWithButtons(\r\n\t\tconfiguration: ModalWithButtonsConfiguration,\r\n\t\tdialogConfiguration: CfDialogConfiguration = {}\r\n\t): CfDialogRef {\r\n\t\treturn this.open(ModalWithButtonsComponent, {\r\n\t\t\t...dialogConfiguration,\r\n\t\t\tdata: {\r\n\t\t\t\tconfiguration\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n    showInputTextDialog(configuration: InputTextDialogConfiguration, dialogConfiguration: CfDialogConfiguration = {}): Promise<CfDialogRef<string>> {\r\n        return this.openImport<string>(() => import('../components/inputtext.dialog.component').then(c => c.InputTextDialogComponent), {\r\n            width: '400px',\r\n            ...dialogConfiguration,\r\n            data: configuration\r\n        });\r\n    }\r\n\r\n    showInputTextareaDialog(configuration: InputTextareaDialogConfiguration, dialogConfiguration: CfDialogConfiguration = {}): Promise<CfDialogRef<string>> {\r\n        return this.openImport<string>(() => import('../components/inputtextarea.dialog.component').then(c => c.InputTextareaDialogComponent), {\r\n            width: '400px',\r\n            ...dialogConfiguration,\r\n            data: configuration\r\n        });\r\n    }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { CfDragDropEvent, CfDragDropEventType } from \"../../interfaces\";\r\nimport { CfDragDirective } from \"../directives\";\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CfDragDropService {\r\n    dragEvent: Subject<CfDragDropEvent> = new Subject();\r\n\tactiveDragDirective: CfDragDirective | null = null;\r\n\tconstructor() {\r\n\t\tthis.dragEvent.subscribe(({ dragDirective, type }) => {\r\n\t\t\tif (type === CfDragDropEventType.DRAG_START) {\r\n\t\t\t\tthis.activeDragDirective = dragDirective;\r\n\t\t\t}\r\n\t\t\tif (type === CfDragDropEventType.DRAG_END) {\r\n\t\t\t\tthis.activeDragDirective = null;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import { Injectable, inject } from '@angular/core';\r\nimport { LockAction, LockHeaders, LockResponse, Lock } from '../../interfaces';\r\nimport { CfLoggerService } from './logger.service';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CfLockService {\r\n\r\n    loggerService: CfLoggerService = inject(CfLoggerService);\r\n\r\n    private _lock: Lock | null = null;\r\n\r\n    private _lockResponse: LockResponse | null = null;\r\n\r\n    public setLockResponse(lockResponse: LockResponse | null): void {\r\n        this.loggerService.info(`[LOCK] SETLOCKRESPONSE; RESPONSE: ${JSON.stringify(lockResponse)}`);\r\n        if (lockResponse === null) {\r\n            this._lockResponse = null;\r\n        } else {\r\n            this._lockResponse = {...lockResponse};\r\n        }\r\n    }\r\n\r\n    public getLockResponse(): LockResponse | null {\r\n        let lockResponse: LockResponse | null = null;\r\n        if (this._lockResponse !== null) {\r\n            lockResponse = {...this._lockResponse};\r\n            this.setLockResponse(null);\r\n        }\r\n        return lockResponse;\r\n    }\r\n\r\n    public getLock(): Lock | null {\r\n        return this._lock;\r\n    }\r\n\r\n    public lock(module: string, id: string): void {\r\n        this.loggerService.info(`[LOCK] ACTION: LOCK; MODULE: ${module}; ID: ${id}`);\r\n        this._lock = {\r\n            action: LockAction.LOCK,\r\n            module,\r\n            id\r\n        }\r\n    }\r\n\r\n    public keep(module: string, id: string): void {\r\n        this.loggerService.info(`[LOCK] ACTION: KEEP; MODULE: ${module}; ID: ${id}`);\r\n        this._lock = {\r\n            action: LockAction.KEEP,\r\n            module,\r\n            id\r\n        }\r\n    }\r\n\r\n    public release(module: string, id: string): void {\r\n        this.loggerService.info(`[LOCK] ACTION: RELEASE; MODULE: ${module}; ID: ${id}`);\r\n        this._lock = {\r\n            action: LockAction.RELEASE,\r\n            module,\r\n            id\r\n        }\r\n    }\r\n\r\n    public clear(): void {\r\n        this.loggerService.info(`[LOCK] CLEAR`);\r\n        this._lock = null;\r\n    }\r\n\r\n    public convertLockToHeaders(lock: Lock | null = null): LockHeaders | null {\r\n        if (lock === null) {\r\n            return null;\r\n        }\r\n        return {\r\n            'Lock-Action': `${lock.action}`,\r\n            'Lock-Module': `${lock.module}`,\r\n            'Lock-Id': `${lock.id}`\r\n        };\r\n    }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { RadioServiceCheckEvent } from \"../../interfaces\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfRadioService {\r\n\tchecked: Subject<RadioServiceCheckEvent> = new Subject();\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TokenServiceMode } from '../../enums';\r\nimport { isBrowser, localStorage, sessionStorage } from '../helpers';\r\nimport { CfCookieService } from './cookie.service';\r\nimport { CfLoggerService } from './logger.service';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CfTokenService {\r\n\r\n\tcookieService: CfCookieService = inject(CfCookieService);\r\n\tloggerService: CfLoggerService = inject(CfLoggerService);\r\n\tlocalStorage: Storage | null = localStorage();\r\n\tsessionStorage: Storage | null = sessionStorage();\r\n\tisBrowser: boolean = isBrowser();\r\n\r\n\tcookiePath: string | null = null;\r\n\taccessToken: string | null = null;\r\n\taccessTokenKey = 'acccessToken';\r\n\taccessTokenCookieExpireDays = 30;\r\n\r\n\tpublic write(mode: TokenServiceMode | null): void {\r\n\t\tif (this.accessToken === null) {\r\n\t\t\tthis.loggerService.error('No accessToken set to write!');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (mode === null) {\r\n\t\t\tthis.loggerService.error('Invalid mode for token write!');\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.localStorage !== null) {\r\n\t\t\t\t\tthis.localStorage.setItem(this.accessTokenKey, this.accessToken);\r\n\t\t\t\t\tthis.loggerService.debug('Token set to local storage: ' + this.accessToken);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to set localStorage on not a browser platform!');\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.sessionStorage.setItem(this.accessTokenKey, this.accessToken);\r\n\t\t\t\t\tthis.loggerService.debug('Token set to session storage: ' + this.accessToken);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to set sessionStorage on not a browser platform!');\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.COOKIE:\r\n\t\t\t\tthis.cookieService.set(this.accessTokenKey, this.accessToken, {\r\n\t\t\t\t\texpire: this.accessTokenCookieExpireDays * 24 * 60 * 60,\r\n\t\t\t\t\tpath: this.cookiePath\r\n\t\t\t\t});\r\n\t\t\t\tthis.loggerService.debug('Token set to cookie: ' + this.accessToken);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t}\r\n\r\n\tpublic read(mode: TokenServiceMode | null): string | null {\r\n\t\tif (mode === null) {\r\n\t\t\tthis.loggerService.error('Invalid mode for token read!');\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tthis.loggerService.debug('Trying to read token from local storage');\r\n\t\t\t\tif (this.isBrowser && this.localStorage !== null) {\r\n\t\t\t\t\tconst tokenLocalStorage: string | null = this.localStorage.getItem(this.accessTokenKey);\r\n\t\t\t\t\tif (tokenLocalStorage !== null) {\r\n\t\t\t\t\t\tthis.loggerService.debug('Token read from local storage: ' + tokenLocalStorage);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn tokenLocalStorage;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to read from localStorage on not a browser platform!');\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Trying to read token from session storage');\r\n\t\t\t\t\tconst tokenSessionStorage: string | null = this.sessionStorage.getItem(this.accessTokenKey);\r\n\t\t\t\t\tif (tokenSessionStorage !== null) {\r\n\t\t\t\t\t\tthis.loggerService.debug('Token read from session storage: ' + tokenSessionStorage);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn tokenSessionStorage;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to read from sessionStorage on not a browser platform!');\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase TokenServiceMode.COOKIE: {\r\n\t\t\t\tthis.loggerService.debug('Trying to read token from session cookie');\r\n\t\t\t\tconst cookieAccessToken: string | null = this.cookieService.get(this.accessTokenKey);\r\n\t\t\t\tif (cookieAccessToken !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token read from cookie: ' + cookieAccessToken);\r\n\t\t\t\t}\r\n\t\t\t\treturn cookieAccessToken;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic delete(mode: TokenServiceMode | null): void {\r\n\t\tif (mode === null) {\r\n\t\t\tthis.loggerService.error('Invalid mode for token delete!');\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tif (this.localStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token deleted from local storage');\r\n\t\t\t\t\tthis.localStorage.removeItem(this.accessTokenKey);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token deleted from session storage');\r\n\t\t\t\t\tthis.sessionStorage.removeItem(this.accessTokenKey);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.COOKIE: {\r\n\t\t\t\tthis.loggerService.debug('Token deleted from cookie');\r\n\t\t\t\tthis.cookieService.delete(this.accessTokenKey);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.accessToken = null;\r\n\t}\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { InterceptorType } from \"../../enums\";\r\nimport { PrecheckNullable } from \"../../interfaces\";\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class InterceptorsService {\r\n\r\n    /**\r\n     * Skip\r\n     * \r\n     * Skip interceptors from next http requests\r\n     */\r\n\tskip: InterceptorType[] = [];\r\n\r\n    /**\r\n     * ResetSkip\r\n     * \r\n     * Resets to `skip` to empty array after first http request\r\n     */\r\n    resetSkip: boolean = true;\r\n\r\n\r\n    /**\r\n     * Precheck\r\n     * \r\n     * Tells the `PrecheckInterceptor` to set a header with the given value\r\n     */\r\n    precheck: PrecheckNullable = null;\r\n\r\n    /**\r\n     * ResetPrecheck\r\n     * \r\n     * Clear `precheck` after first http request \r\n     */\r\n    resetPrecheck: boolean = true;\r\n\r\n    /**\r\n     * Error callback function\r\n     * \r\n     * Function to call after every http error\r\n     */\r\n\terrorCallbackfunction: ((httpErrorResponse: HttpErrorResponse) => void) | null = null;\r\n\r\n    /**\r\n     * Error skip status codes\r\n     * \r\n     * Skips the given status codes from `errorCallbackfunction`\r\n     */\r\n\terrorSkipStatusCodes: number[] = [];\r\n\r\n    /**\r\n     * Mock callback function\r\n     * \r\n     * Function to call to mock an http request\r\n     */\r\n\tmockCallbackFunction: ((request: HttpRequest<any>, requestUrl: URL, next: HttpHandler) => Observable<HttpEvent<any>>) | null = null;\r\n\r\n    /**\r\n     * RequestId HTTP Header name\r\n     */\r\n\trequestIdHttpHeaderName: string = 'Request-Id';\r\n\r\n    /**\r\n     * RequestId repeat\r\n     */\r\n\trequestIdRepeat: boolean = false;\r\n\r\n    /**\r\n     * RequestId repeat delay\r\n     */\r\n\trequestIdRepeatDelay: number = 0;\r\n\r\n    /**\r\n     * RequestId repeat statuscodes\r\n     */\r\n\trequestIdRepeatStatusCodes: number[] = [];\r\n}","import { HttpClient, HttpParams } from \"@angular/common/http\";\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { CfObservable } from \"../classes\";\r\nimport { CfDialogService } from \"./dialog.service\";\r\nimport { InterceptorsService } from \"./interceptors.service\";\r\nimport { CfLoggerService } from \"./logger.service\";\r\nimport { CfMessageService } from \"./message.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ApiService {\r\n\r\n\thttpClient: HttpClient = inject(HttpClient);\r\n\tloggerService: CfLoggerService = inject(CfLoggerService);\r\n\r\n\tpublic cf: CfApiService = new CfApiService();\r\n\r\n\tprivate _apiBaseUrl: string | null = null;\r\n\r\n\tpublic post<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.post<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic get<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.get<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic getFileArrayBuffer(endPoint: (string|number)[]): Observable<ArrayBuffer> {\r\n\t\treturn this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'arraybuffer'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getFileText(endPoint: (string|number)[]): Observable<string> {\r\n\t\treturn this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'text'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getWithHttpParams<T>(endPoint: (string|number)[], params: HttpParams | null = null): Observable<any> {\r\n\t\tif (params === null) {\r\n\t\t\treturn this.get(endPoint);\r\n\t\t} else {\r\n\t\t\treturn this.httpClient.get<T>(this.generateUrl(endPoint), {\r\n\t\t\t\tparams\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic delete<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.delete<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic patch<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.patch<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic head<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.head<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic options<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.options<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic put<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.put<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic generateUrl(endPoint: (string|number)[]): string {\r\n        if (endPoint.length === 0) {\r\n            return this._apiBaseUrl;\r\n        }\r\n\t\tif (typeof endPoint[0] === 'string' && endPoint[0].startsWith('#')) {\r\n            endPoint[0] = endPoint[0].slice(1);\r\n\t\t\treturn endPoint.map((v, i) => i === 0 ? v : encodeURIComponent(v)).join('/');\r\n\t\t}\r\n        let apiBaseUrl: string = this._apiBaseUrl;\r\n        if (apiBaseUrl.endsWith('/')) {\r\n            apiBaseUrl = apiBaseUrl.slice(0, -1);\r\n        }\r\n\t\treturn [apiBaseUrl, ...endPoint.map((v) => encodeURIComponent(v))].join('/');\r\n\t}\r\n\r\n\tset apiBaseUrl(apiBaseUrl: string | null) {\r\n\t\tif (apiBaseUrl === null) {\r\n\t\t\tthis.loggerService.error('Api Service base url set to: NULL');\r\n\t\t} else {\r\n\t\t\tthis.loggerService.info('Api Service base url set to: ' + apiBaseUrl);\r\n\t\t\tif (apiBaseUrl[apiBaseUrl.length - 1] === '/') {\r\n\t\t\t\tapiBaseUrl = apiBaseUrl.slice(0, apiBaseUrl.length - 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._apiBaseUrl = apiBaseUrl;\r\n\t\tthis.cf.setApiBaseUrl(apiBaseUrl);\r\n\t}\r\n\r\n\tget apiBaseUrl(): string | null {\r\n\t\treturn this._apiBaseUrl;\r\n\t}\r\n}\r\n\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfApiService {\r\n\t\r\n\thttpClient: HttpClient = inject(HttpClient);\r\n\tloggerService: CfLoggerService = inject(CfLoggerService);\r\n\tdialogService: CfDialogService = inject(CfDialogService);\r\n\tinterceptorsService: InterceptorsService = inject(InterceptorsService);\r\n\tmessageService: CfMessageService = inject(CfMessageService);\r\n\r\n\tprivate _apiBaseUrl: string | null = null;\r\n\r\n\tpublic post<T>(endPoint: (string|number)[], body: any): CfObservable<any> {\r\n\t\treturn new CfObservable(this.httpClient.post<T>(this.generateUrl(endPoint), body), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic get<T>(endPoint: (string|number)[]): CfObservable<any> {\r\n\t\treturn new CfObservable(this.httpClient.get<T>(this.generateUrl(endPoint)), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic getFileArrayBuffer(endPoint: (string|number)[]): CfObservable<ArrayBuffer> {\r\n\t\treturn new CfObservable(this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'arraybuffer'\r\n\t\t}), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic getFileText(endPoint: (string|number)[]): CfObservable<string> {\r\n\t\treturn new CfObservable(this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'text'\r\n\t\t}), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic getWithHttpParams<T>(endPoint: (string|number)[], params: HttpParams | null = null): CfObservable<any> {\r\n\t\tif (params === null) {\r\n\t\t\treturn this.get(endPoint);\r\n\t\t} else {\r\n\t\t\treturn new CfObservable(this.httpClient.get<T>(this.generateUrl(endPoint), {\r\n\t\t\t\tparams\r\n\t\t\t}), this.interceptorsService, this.dialogService, this.messageService);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic delete<T>(endPoint: (string|number)[]): CfObservable<any> {\r\n\t\treturn new CfObservable(this.httpClient.delete<T>(this.generateUrl(endPoint)), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic patch<T>(endPoint: (string|number)[], body: any): CfObservable<any> {\r\n\t\treturn new CfObservable(this.httpClient.patch<T>(this.generateUrl(endPoint), body), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic head<T>(endPoint: (string|number)[]): CfObservable<any> {\r\n\t\treturn new CfObservable(this.httpClient.head<T>(this.generateUrl(endPoint)), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic options<T>(endPoint: (string|number)[]): CfObservable<any> {\r\n\t\treturn new CfObservable(this.httpClient.options<T>(this.generateUrl(endPoint)), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic put<T>(endPoint: (string|number)[], body: any): CfObservable<any> {\r\n\t\treturn new CfObservable(this.httpClient.put<T>(this.generateUrl(endPoint), body), this.interceptorsService, this.dialogService, this.messageService);\r\n\t}\r\n\r\n\tpublic generateUrl(endPoint: (string|number)[]): string {\r\n        if (endPoint.length === 0) {\r\n            return this._apiBaseUrl;\r\n        }\r\n\t\tif (typeof endPoint[0] === 'string' && endPoint[0].startsWith('#')) {\r\n            endPoint[0] = endPoint[0].slice(1);\r\n\t\t\treturn endPoint.map((v, i) => i === 0 ? v : encodeURIComponent(v)).join('/');\r\n\t\t}\r\n        let apiBaseUrl: string = this._apiBaseUrl;\r\n        if (apiBaseUrl.endsWith('/')) {\r\n            apiBaseUrl = apiBaseUrl.slice(0, -1);\r\n        }\r\n\t\treturn [apiBaseUrl, ...endPoint.map((v) => encodeURIComponent(v))].join('/');\r\n\t}\r\n\r\n\tpublic setApiBaseUrl(apiBaseUrl: string) {\r\n\t\tthis._apiBaseUrl = apiBaseUrl;\r\n\t}\r\n\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport { CfLoggerService } from \"./logger.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfPermissionsService {\r\n\r\n\tloggerService: CfLoggerService = inject(CfLoggerService);\r\n\r\n\tprivate _godmodePermission: string = 'godmode';\r\n\tprivate _permissions: string[] = [];\r\n\r\n\thasPermission(permission: string, skipGodmode: boolean = false, skipOnPermissions: string[] = []): boolean {\r\n\t\tif (skipOnPermissions.length > 0) {\r\n\t\t\tif (skipOnPermissions.every((permission: string) => this.permissions.includes(permission))) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!skipGodmode && this.permissions.includes(this.godmodePermission)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn this.permissions.includes(permission);\r\n\t}\r\n\r\n\thasPermissions(permissions: string[], skipGodmode: boolean = false, skipOnPermissions: string[] = [], mode: 'and' | 'or' = 'and'): boolean {\r\n\t\tif (permissions.length === 0) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif (skipOnPermissions.length > 0) {\r\n\t\t\tif (skipOnPermissions.every((permission: string) => this.permissions.includes(permission))) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!skipGodmode && this.permissions.includes(this.godmodePermission)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif (mode === 'and') {\r\n\t\t\treturn permissions.every((permission: string) => this.permissions.includes(permission));\r\n\t\t} else {\r\n\t\t\treturn permissions.some((permission: string) => this.permissions.includes(permission));\r\n\t\t}\r\n\t}\r\n\r\n\tset permissions(permissions: string[]) {\r\n\t\tthis.loggerService.info('Permissions set to: ' +  permissions.join(', '));\r\n\t\tthis._permissions = permissions;\r\n\t}\r\n\r\n\tget permissions(): string[] {\r\n\t\treturn this._permissions;\r\n\t}\r\n\r\n\tset godmodePermission(permission: string) {\r\n\t\tthis._godmodePermission = permission;\r\n\t}\r\n\r\n\tget godmodePermission(): string {\r\n\t\treturn this._godmodePermission;\r\n\t}\r\n\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport { StoreServiceMode } from \"../../interfaces\";\r\nimport { isBrowser, localStorage, sessionStorage } from \"../helpers\";\r\nimport { CfConfigService } from \"./config.service\";\r\nimport { CfLoggerService } from \"./logger.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfStoreService {\r\n\r\n\tconfigService: CfConfigService = inject(CfConfigService);\r\n\tloggerService: CfLoggerService = inject(CfLoggerService);\r\n\tlocalStorage: Storage | null = localStorage();\r\n\tsessionStorage: Storage | null = sessionStorage();\r\n\tisBrowser: boolean = isBrowser();\r\n\r\n\tprivate _mode: StoreServiceMode | null = null;\r\n\tprivate _store: any = {};\r\n\tprivate _storeKey: string | null = null;\r\n\tprivate _initialized: boolean = false;\r\n\r\n\tpublic set mode(mode: StoreServiceMode | null) {\r\n\t\tthis._mode = mode;\r\n\t\tthis.loggerService.info('Store service mode set to: ' + mode);\r\n\t\tif (this._initialized) {\r\n\t\t\tthis.readValue();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic get mode(): StoreServiceMode | null {\r\n\t\treturn this._mode;\r\n\t}\r\n\r\n\tpublic set storeKey(storeKey: string) {\r\n\t\tthis._storeKey = storeKey;\r\n\t\tthis.loggerService.info('Store key set to: ' + storeKey);\r\n\t\tif (this._initialized) {\r\n\t\t\tthis.readValue();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate readValue(): void {\r\n\t\tif (this._storeKey === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet value: string | null = null;\r\n\t\tif (this.isBrowser && this._mode === StoreServiceMode.LOCAL && this.localStorage !== null) {\r\n\t\t\tvalue = this.localStorage.getItem(this._storeKey);\r\n\t\t}\r\n\t\tif (this.isBrowser && this._mode === StoreServiceMode.SESSION && this.sessionStorage !== null) {\r\n\t\t\tvalue = this.sessionStorage.getItem(this._storeKey);\r\n\t\t}\r\n\t\tlet parsedValue: any = {};\r\n\t\tif (value !== null) {\r\n\t\t\ttry {\r\n\t\t\t\tparsedValue = JSON.parse(value);\r\n\t\t\t} catch(e) {\r\n\t\t\t\tthis.loggerService.error('Unable to JSON parse store value!');\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._store = parsedValue;\r\n\t\tthis.loggerService.info('Store value set [' + this._storeKey + ']: ' + JSON.stringify(parsedValue));\r\n\t}\r\n\r\n\tprivate writeValue(): void {\r\n\t\tif (this._storeKey === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.isBrowser && this.mode === StoreServiceMode.LOCAL && this.localStorage !== null) {\r\n\t\t\tthis.localStorage.setItem(this._storeKey, JSON.stringify(this._store));\r\n\t\t}\r\n\t\tif (this.isBrowser && this.mode === StoreServiceMode.SESSION && this.sessionStorage !== null) {\r\n\t\t\tthis.sessionStorage.setItem(this._storeKey, JSON.stringify(this._store));\r\n\t\t}\r\n\t\tthis.loggerService.info('Store value write [' + this._storeKey + ']: ' + JSON.stringify(this._store));\r\n\t}\r\n\r\n\tpublic setValue(key: string, value: any): void {\r\n\t\tthis._store[key] = value;\r\n\t\tthis.writeValue();\r\n\t}\r\n\r\n\tpublic getValue(key: string, defaultValue: any = null): any {\r\n\t\treturn this._store[key] || defaultValue;\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tthis.mode = this.configService.defaultStoreServiceMode;\r\n\t\tthis.storeKey = this.configService.defaultStoreServiceStoreKey;\r\n\t\tthis.readValue();\r\n\t\tthis._initialized = true;\r\n\t}\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport { Title } from \"@angular/platform-browser\";\r\nimport { ActivatedRouteSnapshot, ActivationEnd, Data, Event, NavigationEnd, NavigationStart, Router } from \"@angular/router\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfTitleService {\r\n\r\n\trouter: Router = inject(Router);\r\n\ttitle: Title = inject(Title);\r\n\r\n\trouterPageTitleKey: string = 'pageTitle';\r\n\r\n\tbaseTitle: string | null = null;\r\n\r\n\tlistenToRouter(): void {\r\n\t\tlet routeSnapshot: ActivatedRouteSnapshot | null = null;\r\n\t\tthis.router.events.subscribe((event: Event) => {\r\n\t\t\tif (event instanceof NavigationStart) {\r\n\t\t\t\trouteSnapshot = null;\r\n\t\t\t}\r\n\t\t\tif (event instanceof ActivationEnd) {\r\n\t\t\t\tif (routeSnapshot === null) {\r\n\t\t\t\t\trouteSnapshot = event.snapshot;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (event instanceof NavigationEnd) {\r\n\t\t\t\tif (routeSnapshot !== null) {\r\n\t\t\t\t\tconst pageTitleParts: string[] = routeSnapshot.pathFromRoot.map((activatedRouteSnapshot: ActivatedRouteSnapshot) => {\r\n\t\t\t\t\t\treturn activatedRouteSnapshot.data;\r\n\t\t\t\t\t}).filter((data: Data) => {\r\n\t\t\t\t\t\treturn data !== null && data['routerPageTitleKey'] !== undefined;\r\n\t\t\t\t\t}).map((data: Data) => {\r\n\t\t\t\t\t\treturn data['routerPageTitleKey'];\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.setTitle(pageTitleParts);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetTitle(title: string | string[], glue: string = ' - '): void {\r\n\t\tif (typeof title === 'string') {\r\n\t\t\ttitle = [title];\r\n\t\t}\r\n\t\tif (this.baseTitle !== null) {\r\n\t\t\ttitle.unshift(this.baseTitle);\r\n\t\t}\r\n\t\tthis.title.setTitle(title.join(glue));\r\n\t}\r\n\r\n}\r\n","import { DOCUMENT } from \"@angular/common\";\r\nimport { Injectable, inject } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { CfWebSocketConfiguration } from \"../../interfaces\";\r\nimport { isBrowser } from \"../helpers\";\r\nimport { CfConfigService } from \"./config.service\";\r\n\r\nexport class CfWebSocket {\r\n\r\n\tisBrowser: boolean = false;\r\n\r\n\tconfiguration: CfWebSocketConfiguration = this.configService.defaultWebSocketConfiguration;\r\n\r\n\twebSocket: WebSocket | null = null;\r\n\r\n\tonConnected: Subject<Event> = new Subject();\r\n\tonClosed: Subject<CloseEvent | null> = new Subject();\r\n\tonMessage: Subject<any> = new Subject();\r\n\r\n\topened: boolean = false;\r\n\r\n\tdocument: Document | null = null;\r\n\r\n\topen(): void {\r\n\t\tif (!this.isBrowser || this.document === null || this.configuration.url === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst defaultView = this.document.defaultView;\r\n\t\tif (defaultView === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.webSocket = new defaultView.WebSocket(this.configuration.url);\r\n\t\tthis.attachEvents();\r\n\t}\r\n\r\n\tattachEvents(): void {\r\n\t\tif (this.webSocket === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.webSocket.onmessage = (message: any) => {\r\n\t\t\tthis.onMessage.next(message);\r\n\t\t}\r\n\r\n\t\tthis.webSocket.onclose = (closeEvent: CloseEvent) => {\r\n\t\t\tthis.onClosed.next(closeEvent);\r\n            if (this.configuration.onCloseCallback !== null) {\r\n                this.configuration.onCloseCallback({\r\n                    cfWebSocket: this,\r\n                    closeEvent\r\n                });\r\n            } else {\r\n                if (this.configuration.autoReconnectOnClose) {\r\n                    this.open();\r\n                }\r\n            }\r\n\t\t}\r\n\r\n\t\tthis.webSocket.onopen = (ev: Event) => {\r\n\t\t\tthis.onConnected.next(ev);\r\n\t\t}\r\n\t}\r\n\r\n\tclose(code: number | undefined = undefined, reason: string | undefined = undefined): void {\r\n\t\tif (this.webSocket instanceof WebSocket && this.webSocket.readyState === this.webSocket.OPEN) {\r\n\t\t\tthis.webSocket.close(code, reason);\r\n\t\t\tthis.webSocket = null;\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate configService: CfConfigService,\r\n\t\tconfiguration: Partial<CfWebSocketConfiguration>\r\n\t) {\r\n\t\tthis.configuration = {\r\n\t\t\t...this.configService.defaultWebSocketConfiguration,\r\n\t\t\t...configuration\r\n\t\t};\r\n\t}\r\n}\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfWebSocketService {\r\n\t\r\n\tconfigService: CfConfigService = inject(CfConfigService);\r\n\r\n\tsockets: Map<string, CfWebSocket> = new Map();\r\n\r\n\tmessages: Subject<any> = new Subject();\r\n\r\n\tdocument: Document = inject(DOCUMENT);\r\n\r\n\tisBrowser: boolean = isBrowser();\r\n\r\n\tcreate(name: string, configuration: Partial<CfWebSocketConfiguration> = {}): CfWebSocket | null {\r\n\r\n\t\tif (this.sockets.has(name)) {\r\n\t\t\tconsole.warn('A socket with this name is already existing!');\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst ws: CfWebSocket = new CfWebSocket(this.configService, configuration);\r\n\t\tws.document = this.document;\r\n\t\tws.isBrowser = this.isBrowser;\r\n\t\tthis.sockets.set(name, ws);\r\n\t\treturn ws;\r\n\t}\r\n\r\n\tclose(name: string, code: number | undefined = undefined, reason: string | undefined = undefined): void {\r\n\t\tif (this.sockets.has(name)) {\r\n\t\t\tthis.sockets.get(name)!.close(code, reason);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","import { ButtonConfiguration, CfContextMenuItemFull, TranslationType } from \"../interfaces\";\r\n\r\nexport const CF_CONTEXTMENU_ITEM_FULL_DEFAULT: CfContextMenuItemFull = {\r\n\ttitle: '',\r\n\ticon: null,\r\n\thandler: null,\r\n\tcloseAfterHandlerClick: true,\r\n\thide: false,\r\n\tseparator: false,\r\n\tchildren: []\r\n}\r\n\r\nexport const DIALOG_TRANSLATIONS_HU: TranslationType = {\r\n\t'yes': 'Rendben',\r\n\t'no': 'Bezárás',\r\n\t'cancel': 'Mégsem'\r\n}\r\n\r\nexport const DIALOG_TRANSLATIONS_EN: TranslationType = {\r\n\t'yes': 'Rendben',\r\n\t'no': 'Bezárás',\r\n\t'cancel': 'Mégsem'\r\n}\r\n\r\nexport const BUTTON_CONFIGURATION_YES: ButtonConfiguration = {\r\n\tlabel: 'dialog.yes',\r\n\tseverity: 'success',\r\n\tcallback: ({ dialogRef }) => {\r\n\t\tdialogRef.close(true);\r\n\t},\r\n\ttranslateLabel: true\r\n}\r\n\r\nexport const BUTTON_CONFIGURATION_NO: ButtonConfiguration = {\r\n\tlabel: 'dialog.no',\r\n\tseverity: 'danger',\r\n\tcallback: ({ dialogRef }) => {\r\n\t\tdialogRef.close(false);\r\n\t},\r\n\ttranslateLabel: true\r\n}\r\n\r\nexport const BUTTON_CONFIGURATION_CANCEL: ButtonConfiguration = {\r\n\tlabel: 'dialog.cancel',\r\n\tseverity: 'info',\r\n\tcallback: ({ dialogRef }) => {\r\n\t\tdialogRef.close();\r\n\t},\r\n\ttranslateLabel: true\r\n}\r\n","import { CfContextMenuItem, CfContextMenuItemFull } from \"../../interfaces\";\r\nimport { CF_CONTEXTMENU_ITEM_FULL_DEFAULT } from \"../consts\";\r\n\r\nexport function generateContextMenuFullItems(items: CfContextMenuItem[]): CfContextMenuItemFull[] {\r\n\treturn items.map((item: CfContextMenuItem) => ({\r\n\t\t...CF_CONTEXTMENU_ITEM_FULL_DEFAULT,\r\n\t\t...{\r\n\t\t\t...item,\r\n\t\t\tchildren: item.children instanceof Array ? generateContextMenuFullItems(item.children) : []\r\n\t\t}\r\n\t}));\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { CfContextMenuItem, CfContextMenuItemFull } from \"../../interfaces\";\r\nimport { isOuter } from \"../helpers\";\r\nimport { generateContextMenuFullItems } from \"../helpers/contextmenu.helper\";\r\nimport { GlobalEventListenerService } from \"./global.event.listener.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfContextmenuService {\r\n\r\n\tglobalEventListenerService: GlobalEventListenerService = inject(GlobalEventListenerService);\r\n\r\n\tcontainer: HTMLDivElement | null = null;\r\n\r\n\topen(items: CfContextMenuItem[], top: number, left: number): void {\r\n\t\tif (this.container !== null) {\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t\tthis.container = document.body.appendChild(this.createMenuItemsDom(generateContextMenuFullItems(items), top, left));\r\n\t}\r\n\r\n\topenFromMouseEvent(items: CfContextMenuItem[], event: MouseEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tthis.open(items, event.clientY, event.clientX);\r\n\t}\r\n\r\n\tcreateMenuItemsDom(items: CfContextMenuItemFull[], top: number, left: number): HTMLDivElement {\r\n\t\tconst container: HTMLDivElement = document.createElement('div');\r\n\t\tcontainer.classList.add('cf-context-menu-items');\r\n\t\tcontainer.style.top = top + 'px';\r\n\t\tcontainer.style.left = left + 'px';\r\n\r\n\t\tthis.createMenuItems(items, container);\r\n\r\n\t\treturn container;\r\n\t}\r\n\r\n\tcreateMenuItems(items: CfContextMenuItemFull[], container: Element): void {\r\n\r\n\t\titems.forEach((item: CfContextMenuItemFull) => {\r\n\t\t\tconst itemElement: HTMLDivElement = document.createElement('div');\r\n\t\t\titemElement.classList.add(...['context-menu-item']);\r\n\r\n\t\t\t// SEPARATOR\r\n\t\t\tif (item.separator) {\r\n\t\t\t\tconst separatorElement: HTMLDivElement = document.createElement('div');\r\n\t\t\t\tseparatorElement.classList.add(...['context-menu-separator']);\r\n\t\t\t\titemElement.appendChild(separatorElement);\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// ICON\r\n\t\t\t\tif (item.icon !== null) {\r\n\t\t\t\t\tconst iconElement: HTMLDivElement = document.createElement('div');\r\n\t\t\t\t\ticonElement.classList.add(...['context-menu-icon', 'remixicon', item.icon]);\r\n\t\t\t\t\titemElement.appendChild(iconElement);\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\t// TITLE\r\n\t\t\t\tif (item.title !== undefined) {\r\n\t\t\t\t\tconst titleElement: HTMLDivElement = document.createElement('div');\r\n\t\t\t\t\ttitleElement.classList.add(...['context-menu-title']);\r\n\t\t\t\t\ttitleElement.innerHTML = item.title;\r\n\t\t\t\t\titemElement.appendChild(titleElement);\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\t// HANDLER\r\n\t\t\t\tif (item.handler !== undefined && item.handler !== null) {\r\n\t\t\t\t\titemElement.onclick = () => {\r\n\t\t\t\t\t\tif (item.handler === undefined || item.handler === null) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\titem.handler();\r\n\t\t\t\t\t\tif (item.closeAfterHandlerClick) {\r\n\t\t\t\t\t\t\tthis.close();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// SUBMENU ICON\r\n\t\t\t\tif (item.children.length > 0) {\r\n\t\t\t\t\tconst submenuIconElement: HTMLDivElement = document.createElement('div');\r\n\t\t\t\t\tsubmenuIconElement.classList.add(...['context-menu-submenu-icon', 'remixicon', 'arrow-right-s-line']);\r\n\t\t\t\t\titemElement.appendChild(submenuIconElement);\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\t// SUBMENU\r\n\t\t\t\tif (item.children.length > 0) {\r\n\t\t\t\t\tconst submenuContainer: HTMLDivElement = document.createElement('div');\r\n\t\t\t\t\tsubmenuContainer.classList.add('cf-context-submenu-items');\r\n\t\r\n\t\t\t\t\tthis.createMenuItems(item.children, submenuContainer);\r\n\t\r\n\t\t\t\t\titemElement.appendChild(submenuContainer);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcontainer.appendChild(itemElement);\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tclose(): void {\r\n\t\tif (this.container !== null) {\r\n\t\t\tthis.container.remove();\r\n\t\t\tthis.container = null;\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tthis.globalEventListenerService.mousedown.subscribe((event: MouseEvent) => {\r\n\t\t\tif (this.container !== null && isOuter([this.container], event)) {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n}\r\n","import { inject, Injectable, LOCALE_ID } from \"@angular/core\";\r\nimport { TranslationType } from \"../../interfaces\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class TranslationsService {\r\n\r\n\tlocaleId: string = inject(LOCALE_ID).toLowerCase();\r\n\r\n\ttranslations: {[key: string]: {[key: string]: any}} = {};\r\n\ttranslationsCache: {[key: string]: string} = {};\r\n\r\n\tinitModuleTranslation(module: string, localeId: string, translations: TranslationType): void {\r\n\t\tlocaleId = localeId.toLowerCase();\r\n\t\tif (this.translations[localeId] === undefined) {\r\n\t\t\tthis.translations[localeId] = {};\r\n\t\t}\r\n\t\tthis.translations[localeId][module] = translations;\r\n\t\tthis.updateTranslationsCache(localeId, module);\r\n\t}\r\n\r\n\tupdateTranslationsCache(localeId: string, module: string): void {\r\n\t\tconst self = this;\r\n\t\tfunction deepExplore(translationType: TranslationType, root: string): void {\r\n\t\t\tObject.keys(translationType).forEach((key: string) => {\r\n\t\t\t\tconst value: TranslationType | string = translationType[key];\r\n\t\t\t\tif (typeof value === 'object') {\r\n\t\t\t\t\tdeepExplore(value, root + '.' + key);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself.translationsCache[root + '.' + key] = value;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t\tdeepExplore(this.translations[localeId][module], localeId + '.' + module)\r\n\t}\r\n\r\n\tgetTranslation(resource: string, localeId: string | null = null, replaceData: any = null): string {\r\n\t\tif (localeId === null) {\r\n\t\t\tlocaleId = this.localeId;\r\n\t\t}\r\n\t\tlocaleId = localeId.toLowerCase();\r\n        let translationText: string | undefined = this.translationsCache[localeId + '.' + resource];\r\n        if (translationText === undefined) {\r\n            return '';\r\n        }\r\n        if (replaceData !== null && typeof replaceData === 'object') {\r\n            Object.keys(replaceData).forEach((replaceDataKey: string) => {\r\n                translationText = translationText.replaceAll('{{' + replaceDataKey + '}}', replaceData[replaceDataKey]);\r\n            });\r\n        }\r\n\t\treturn translationText;\r\n\t}\r\n}","import { HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { filter, Observable, Subject } from \"rxjs\";\r\n\r\nexport interface LoaderInterceptorFilterParams {\r\n    pathNameStartsWith?: string;\r\n    pathNameEndsWith?: string;\r\n    pathNameRegex?: string | RegExp;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class LoaderInterceptorService {\r\n\r\n    /**\r\n     * Requests\r\n     * \r\n     * Collection of all the active requests\r\n     */\r\n    requests: HttpRequest<any>[] = [];\r\n\r\n    /**\r\n     * Loading state\r\n     * \r\n     * It shows if there are any active request, fired when `requests.length` is changed\r\n     */\r\n    loading: Subject<boolean> = new Subject();\r\n\r\n    /**\r\n     * Loading with filters\r\n     * \r\n     * @param filterParams `LoaderInterceptorFilterParams`\r\n     * @returns `Observable<boolean>`\r\n     */\r\n    loadingFilter(filterParams: LoaderInterceptorFilterParams): Observable<boolean> {\r\n        return this.loading.pipe(\r\n            filter(() => {\r\n                if (Object.keys(filterParams).length === 0) {\r\n                    return true;\r\n                }\r\n                return this.requests.filter((request: HttpRequest<any>) => {\r\n                    const url: URL = new URL(request.url);\r\n                    if (filterParams.pathNameStartsWith !== undefined && url.pathname.startsWith(filterParams.pathNameStartsWith)) {\r\n                        return true;\r\n                    }\r\n                    if (filterParams.pathNameEndsWith !== undefined && url.pathname.endsWith(filterParams.pathNameEndsWith)) {\r\n                        return true;\r\n                    }\r\n                    if (filterParams.pathNameRegex !== undefined && new RegExp(filterParams.pathNameRegex).test(url.pathname)) {\r\n                        return true;\r\n                    }\r\n                    return false;\r\n                }).length > 0;\r\n            })\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Push\r\n     * \r\n     * Push a `HttpRequest<any>` to `requests`, fire `loading` state\r\n     * \r\n     * @param httpRequest `HttpRequest<any>`\r\n     */\r\n    push(httpRequest: HttpRequest<any>): void {\r\n        this.requests.push(httpRequest);\r\n        this.loading.next(true);\r\n    }\r\n\r\n    /**\r\n     * Remove\r\n     * \r\n     * Removes a `HttpRequest<any>` from `requests` if found, fire `loading` state\r\n     * \r\n     * @param httpRequest `HttpRequest<any>`\r\n     */\r\n    remove(httpRequest: HttpRequest<any>): void {\r\n        const requestIndex: number = this.requests.indexOf(httpRequest);\r\n        if (requestIndex !== -1) {\r\n            this.requests.splice(requestIndex, 1);\r\n        }\r\n        this.loading.next(this.requests.length !== 0);\r\n    }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { expandJsonTree } from \"../helpers/languages.helper\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class LanguagesService {\r\n\r\n    languageId: string = 'hu';\r\n    languageIds: string[] = [];\r\n\r\n    notFoundText: string = '---%key%---';\r\n\r\n    #languageData: {[key: string]: string} = {};\r\n\r\n    public set languageData(data: any) {\r\n        this.#languageData = expandJsonTree(data, '', {});\r\n    }\r\n\r\n    public get languageData(): {[key: string]: string} {\r\n        return this.#languageData;\r\n    }\r\n\r\n    public getData(key: string, data: {[key: string]: any} | any[] | any = undefined): any {\r\n\r\n        let foundTranslation: string | undefined = this.#languageData[key];\r\n\r\n        if (foundTranslation !== undefined && foundTranslation.indexOf('%') !== -1 && data !== undefined) {\r\n            const matches: string[] = Array.from(foundTranslation.matchAll(/\\%([^\\%]*)\\%/g)).map((value) => value[1]);\r\n            if (matches.length > 0) {\r\n                if (data instanceof Array) {\r\n                    for (let i = 0; i < data.length; i++) {\r\n                        if (matches.includes(i.toString())) {\r\n                            foundTranslation = foundTranslation.replace('%' + i.toString() + '%', data[i] || 'NO_DATA_TO_REPLACE');\r\n                        }\r\n                    }\r\n                } else if (typeof data === 'object') {\r\n                    for (let match of matches) {\r\n                        foundTranslation = foundTranslation.replace('%' + match + '%', data[match] || 'NO_DATA_TO_REPLACE');\r\n                    }\r\n                } else {\r\n    \r\n                }\r\n                for (let i = 0; i < matches.length; i++) {\r\n                    foundTranslation = foundTranslation.replace('%' + matches[0] + '%', 'NO_DATA_TO_REPLACE');\r\n                }\r\n            }\r\n        }\r\n\r\n        return foundTranslation || this.notFoundText.replace('%key%', key);\r\n    }\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { interval, Subscription } from \"rxjs\";\r\nimport { LockResponse } from \"../../interfaces\";\r\nimport { ApiService, CfLockService } from \"../services\";\r\nimport { LOCK_HELPER_DEFAULT_URL } from \"../tokens/lockhelper.tokens\";\r\n\r\nexport class LockHelper {\r\n\r\n    public lockService: CfLockService = inject(CfLockService);\r\n    public apiService: ApiService = inject(ApiService);\r\n\r\n    public module: string | null = null;\r\n    public id: string | null = null;\r\n    public keepIntervalTime: number = 3000;\r\n    private keepInterval: Subscription | null = null;\r\n    public url: string[] = inject(LOCK_HELPER_DEFAULT_URL);\r\n    public lockResponse: LockResponse | null = null;\r\n\r\n    public setModuleAndId(module: string, id: string, lock: boolean = true): void {\r\n        this.module = module;\r\n        this.id = id;\r\n        if (lock) {\r\n            this.lock();\r\n        }\r\n    }\r\n\r\n    public clearModuleAndId(): void {\r\n        this.module = null;\r\n        this.id = null;\r\n        this.lockService.clear();\r\n    }\r\n\r\n    public lock(): void {\r\n        if (this.module === null || this.id === null) {\r\n            return;\r\n        }\r\n        this.lockService.lock(this.module, this.id);\r\n    }\r\n\r\n    public keep(): void {\r\n        this.stopKeepInterval();\r\n        this.startKeepInterval();\r\n    }\r\n\r\n    public stopKeepInterval(): void {\r\n        if (this.keepInterval === null) {\r\n            return;\r\n        }\r\n        this.keepInterval.unsubscribe();\r\n        this.keepInterval = null;\r\n    }\r\n\r\n    public startKeepInterval(): void {\r\n        if (this.keepInterval !== null) {\r\n            return;\r\n        }\r\n        this.keepInterval = interval(this.keepIntervalTime).subscribe(() => {\r\n            if (this.module === null || this.id === null) {\r\n                return;\r\n            }\r\n            this.lockService.keep(this.module, this.id);\r\n            this.apiService.get(this.url).subscribe(() => {});\r\n        });\r\n    }\r\n\r\n    public release(): void {\r\n        if (this.module === null || this.id === null) {\r\n            return;\r\n        }\r\n        this.stopKeepInterval();\r\n        this.lockService.release(this.module, this.id);\r\n        this.apiService.get(this.url).subscribe(() => {});\r\n    }\r\n\r\n    public getLockResponse(): LockResponse | null {\r\n        this.lockResponse = this.lockService.getLockResponse();\r\n        return this.lockResponse;\r\n    }\r\n\r\n    public get isLocked(): boolean {\r\n        return this.lockResponse !== null;\r\n    }\r\n\r\n    public isLockedBy(userId: number | null): boolean {\r\n        return this.lockResponse !== null && this.lockResponse.userid === userId;\r\n    }\r\n\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { AbstractControl, AbstractControlOptions, AsyncValidatorFn, FormBuilder, ValidatorFn } from \"@angular/forms\";\r\nimport { MediaFiles } from \"../../../features\";\r\nimport { LabelValue, MultiLangData } from \"../../../interfaces\";\r\nimport { collectErrors } from \"../../helpers/form.helper\";\r\nimport { CfFormArray } from \"./formarray\";\r\nimport { CfFormControl, CfFormControlType, CfFormControlTypeComponentMap, CfFormControlTypeValueMap } from \"./formcontrol\";\r\nimport { CfFormGroup } from \"./formgroup\";\r\nimport { createMultilangCfFormGroup, createMultilangCfFormGroupTyped } from \"../../helpers\";\r\nimport { CfFormErrors } from \"./formerrors.class\";\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CfFormBuilder extends FormBuilder {\r\n\r\n    cfNonNullable: CfFormBuilderNonNullable = new CfFormBuilderNonNullable();\r\n\r\n    multilangCfFormGroup<TType extends keyof CfFormControlTypeValueMap>(\r\n        languages: string[] | LabelValue<string>[],\r\n        type: TType,\r\n        value: CfFormControlTypeValueMap[TType] | MultiLangData<CfFormControlTypeValueMap[TType]>,\r\n        multilangDataPassed: boolean = false,\r\n        resetCfFormControlPermanentTags: boolean = false\r\n    ): CfFormGroup<{[key: string]: CfFormControl<TType, CfFormControlTypeValueMap[TType]>}> {\r\n        return createMultilangCfFormGroup(this, type, languages, value, multilangDataPassed, resetCfFormControlPermanentTags);\r\n    }\r\n\r\n    multilangCfFormGroupTyped<T>(\r\n        languages: string[] | LabelValue<string>[],\r\n        value: T | MultiLangData<T>,\r\n        multilangDataPassed: boolean = false,\r\n        resetCfFormControlPermanentTags: boolean = false\r\n    ): CfFormGroup<{[key: string]: CfFormControl<CfFormControlType.GENERAL, T>}> {\r\n        return createMultilangCfFormGroupTyped(this, languages, value, multilangDataPassed, resetCfFormControlPermanentTags);\r\n    }\r\n\r\n    general<T>(\r\n        formState: T,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.GENERAL, T> {\r\n        return cfFormBuilderGeneral(formState, validator, asyncValidator);\r\n    }\r\n\r\n    autocomplete(\r\n        formState: any = '',\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.AUTOCOMPLETE, string> {\r\n        return cfFormBuilderAutocomplete(formState, validator, asyncValidator);\r\n    }\r\n\r\n    checkbox(\r\n        formState: boolean = false,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.CHECKBOX, boolean> {\r\n        return cfFormBuilderCheckbox(formState, validator, asyncValidator);\r\n    }\r\n\r\n    inputText(\r\n        formState: string = '',\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.INPUTTEXT, string> {\r\n        return cfFormBuilderInputText(formState, validator, asyncValidator);\r\n    }\r\n\r\n    inputTextArea(\r\n        formState: string = '',\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.INPUTTEXTAREA, string> {\r\n        return cfFormBuilderInputTextArea(formState, validator, asyncValidator);\r\n    }\r\n\r\n    inputNumber(\r\n        formState: number | null = null,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.INPUTNUMBER, number | null> {\r\n        return cfFormBuilderInputNumber(formState, validator, asyncValidator);\r\n    }\r\n\r\n    colorPicker(\r\n        formState: string | null = null,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.COLORPICKER, string | null> {\r\n        return cfFormBuilderColorPicker(formState, validator, asyncValidator);\r\n    }\r\n\r\n    dropdown<T>(\r\n        formState: T = null,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.DROPDOWN, T> {\r\n        return cfFormBuilderDropdown(formState, validator, asyncValidator);\r\n    }\r\n\r\n    mediaManager(\r\n        formState: MediaFiles = [],\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.MEDIAMANAGER, MediaFiles> {\r\n        return cfFormBuilderMediaManager(formState, validator, asyncValidator);\r\n    }\r\n\r\n    dateTimePicker(\r\n        formState: string | Date | null = null,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.DATETIMEPICKER, string | Date | null> {\r\n        return cfFormBuilderDateTimePicker(formState, validator, asyncValidator);\r\n    }\r\n\r\n    switch(\r\n        formState: boolean = false,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.SWITCH, boolean> {\r\n        return cfFormBuilderSwitch(formState, validator, asyncValidator);\r\n    }\r\n\r\n    radio<T>(\r\n        formState: T = null,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.RADIO, T> {\r\n        return cfFormBuilderRadio(formState, validator, asyncValidator);\r\n    }\r\n\r\n    tree<T>(\r\n        formState: T[] = [],\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.TREE, T[]> {\r\n        return cfFormBuilderTree(formState, validator, asyncValidator);\r\n    }\r\n\r\n    tags(\r\n        formState: string[] = [],\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.TAGS, string[]> {\r\n        return cfFormBuilderTags(formState, validator, asyncValidator);\r\n    }\r\n\r\n    listbox<T>(\r\n        formState: T[] = [],\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.LISTBOX, T[]> {\r\n        return cfFormBuilderListbox(formState, validator, asyncValidator);\r\n    }\r\n\r\n    cfGroup<TControl extends {[key: string]: AbstractControl<any, any>;}>(controls: TControl, validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null, resetCfFormControlPermanentTags: boolean = true): CfFormGroup<TControl> {\r\n        return new CfFormGroup(controls, validatorOrOpts, asyncValidator, resetCfFormControlPermanentTags);\r\n    }\r\n\r\n    cfArray<TControl extends AbstractControl<any> = any>(controls: TControl[], validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[]): CfFormArray<TControl> {\r\n        return new CfFormArray(controls, validatorOrOpts, asyncValidator)\r\n    }\r\n\r\n    collectErrors(abstractControl: AbstractControl, errors: CfFormErrors = new CfFormErrors(), labelPath: string[] = []): CfFormErrors {\r\n        return collectErrors(abstractControl, errors, labelPath);\r\n    }\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CfFormBuilderNonNullable {\r\n\r\n    inputNumber(\r\n        formState: number = 0,\r\n        validator?: ValidatorFn | Array<ValidatorFn>,\r\n        asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n    ): CfFormControl<CfFormControlType.INPUTNUMBER, number> {\r\n        return cfFormBuilderInputNumber(formState, validator, asyncValidator);\r\n    }\r\n\r\n}\r\n\r\nexport function cfFormBuilderGeneral<T>(\r\n    formState: T,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.GENERAL, T> {\r\n    return createCfFormControl<CfFormControlType.GENERAL, T>(CfFormControlType.GENERAL, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderAutocomplete(\r\n    formState: string = '',\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.AUTOCOMPLETE, string> {\r\n    return createCfFormControl(CfFormControlType.AUTOCOMPLETE, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderCheckbox(\r\n    formState: boolean = false,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.CHECKBOX, boolean> {\r\n    return createCfFormControl(CfFormControlType.CHECKBOX, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderInputText(\r\n    formState: string = '',\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.INPUTTEXT, string> {\r\n    return createCfFormControl(CfFormControlType.INPUTTEXT, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderInputTextArea(\r\n    formState: string = '',\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.INPUTTEXTAREA, string> {\r\n    return createCfFormControl(CfFormControlType.INPUTTEXTAREA, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderInputNumber(\r\n    formState: number | null = null,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.INPUTNUMBER, number | null> {\r\n    return createCfFormControl(CfFormControlType.INPUTNUMBER, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderColorPicker(\r\n    formState: string | null = null,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.COLORPICKER, string | null> {\r\n    return createCfFormControl(CfFormControlType.COLORPICKER, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderDropdown<T>(\r\n    formState: T = null,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.DROPDOWN, T> {\r\n    return createCfFormControl(CfFormControlType.DROPDOWN, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderMediaManager(\r\n    formState: MediaFiles = [],\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.MEDIAMANAGER, MediaFiles> {\r\n    return createCfFormControl(CfFormControlType.MEDIAMANAGER, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderDateTimePicker(\r\n    formState: string | Date | null = null,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.DATETIMEPICKER, string | Date | null> {\r\n    return createCfFormControl(CfFormControlType.DATETIMEPICKER, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderSwitch(\r\n    formState: boolean = false,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.SWITCH, boolean> {\r\n    return createCfFormControl(CfFormControlType.SWITCH, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderRadio<T>(\r\n    formState: any = null,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.RADIO, any> {\r\n    return createCfFormControl(CfFormControlType.RADIO, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderTree<T>(\r\n    formState: T[] = [],\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.TREE, T[]> {\r\n    return createCfFormControl(CfFormControlType.TREE, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderTags(\r\n    formState: string[] = [],\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.TAGS, string[]> {\r\n    return createCfFormControl(CfFormControlType.TAGS, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function cfFormBuilderListbox<T>(\r\n    formState: T[] = [],\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<CfFormControlType.LISTBOX, T[]> {\r\n    return createCfFormControl(CfFormControlType.LISTBOX, formState, validator, asyncValidator);\r\n}\r\n\r\nexport function createCfFormControl<TType extends keyof CfFormControlTypeComponentMap, T>(\r\n    type: CfFormControlType,\r\n    formState: T,\r\n    validator?: ValidatorFn | Array<ValidatorFn>,\r\n    asyncValidator?: AsyncValidatorFn | Array<AsyncValidatorFn>\r\n): CfFormControl<TType, T> {\r\n    const cfFormControl = new CfFormControl<TType, T>(formState, validator, asyncValidator);\r\n    cfFormControl.setType(type as any);\r\n    return cfFormControl;\r\n}\r\n","import { DestroyRef } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { catchError, Observable, of, switchMap, tap } from \"rxjs\";\r\nimport { CfDialogConfiguration, CfObservableSubscribeWithOptions, ConfirmConfiguration, LoadingConfiguration, MessagePartial, Precheck } from \"../../interfaces\";\r\nimport { CfDialogService, CfMessageService, InterceptorsService } from \"../services\";\r\nimport { CfDialogRef } from \"./dialogref.class\";\r\n\r\nexport class CfObservable<T> {\r\n\r\n\tobservable: Observable<T> = new Observable();\r\n\r\n\tprivate dialogService: CfDialogService | null = null;\r\n\tprivate interceptorsService: InterceptorsService | null = null;\r\n\tprivate messageService: CfMessageService | null = null;\r\n\r\n\tprivate loadingDialogRef: CfDialogRef | null = null;\r\n\r\n\tpublic withDestroyRef(destroyRef: DestroyRef): Observable<T> {\r\n\t\treturn this.with({destroyRef});\r\n\t}\r\n\r\n\tpublic withPrecheck(precheck: Precheck): Observable<T> {\r\n\t\treturn this.with({precheck});\r\n\t}\r\n\r\n\tpublic withConfirmAccept(confirmConfiguration: ConfirmConfiguration, dialogConfiguration?: CfDialogConfiguration): Observable<T> {\r\n\t\treturn this.with({\r\n\t\t\tconfirmAccept: confirmConfiguration,\r\n\t\t\tconfirmAcceptDialogConfiguration: dialogConfiguration\r\n\t\t});\r\n\t}\r\n\r\n\tpublic withMessageAfterSuccess(configuration: MessagePartial): Observable<T> {\r\n\t\treturn this.with({\r\n\t\t\tmessageAfterSuccess: configuration\r\n\t\t});\r\n\t}\r\n\r\n\tpublic withShowLoading(loadingConfiguration: LoadingConfiguration, dialogConfiguration?: CfDialogConfiguration): Observable<T> {\r\n\t\treturn this.with({\r\n\t\t\tshowLoading: loadingConfiguration,\r\n\t\t\tshowLoadingDialogConfiguration: dialogConfiguration\r\n\t\t});\r\n\t}\r\n\r\n\tpublic stopLoading(): void {\r\n\t\tif (this.loadingDialogRef === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.loadingDialogRef.close();\r\n\t}\r\n\r\n\tpublic with(options: CfObservableSubscribeWithOptions): Observable<T> {\r\n\r\n\t\tconst takeUntilDestroyedPipe = tap<T>(() => {\r\n\t\t\tif (options.destroyRef !== undefined) {\r\n\t\t\t\treturn takeUntilDestroyed(options.destroyRef);\r\n\t\t\t}\r\n\t\t\treturn tap();\r\n\t\t});\r\n\r\n\t\tconst messageAfterSuccessTap = tap<T>(() => {\r\n\t\t\tif (options.messageAfterSuccess !== undefined) {\r\n\t\t\t\tthis.messageService.showSuccessMessage(options.messageAfterSuccess.title, options.messageAfterSuccess.message, options.messageAfterSuccess);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tconst skipInterceptorsTap = tap<T>(() => {\r\n\t\t\tif (options.skipInterceptors !== undefined) {\r\n\t\t\t\tthis.interceptorsService.skip = options.skipInterceptors;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tconst stopLoadingCatchError = catchError((err) => {\r\n\t\t\tthis.stopLoading();\r\n\t\t\tthrow err;\r\n\t\t})\r\n\r\n\t\tconst stopLoadingTap = tap(() => {\r\n\t\t\tthis.stopLoading();\r\n\t\t});\r\n\r\n\t\tconst precheckTap = tap<T>(() => {\r\n\t\t\tthis.interceptorsService.precheck = options.precheck;\r\n\t\t});\r\n\r\n\t\tconst confirmAcceptSwitchMap = switchMap(() => {\r\n\t\t\tthis.stopLoading();\r\n\t\t\treturn this.dialogService.confirmAccept(options.confirmAccept, options.confirmAcceptDialogConfiguration)\r\n\t\t});\r\n\t\t\r\n\t\tconst observableSwitchMap = switchMap(() => this.observable);\r\n\t\t\r\n\t\tconst loadingDialogTap = tap<T | boolean>(() => {\r\n\t\t\tif (options.showLoading !== undefined) {\r\n\t\t\t\tthis.loadingDialogRef = this.dialogService.showLoading(options.showLoading, options.showLoadingDialogConfiguration);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Confirmaccept\r\n\t\tif (options.confirmAccept !== undefined) {\r\n\r\n\t\t\tif (options.precheck !== undefined) {\r\n\r\n\t\t\t\t// Confirm and precheck\r\n\t\t\t\treturn of(null).pipe(\r\n\t\t\t\t\ttakeUntilDestroyedPipe,\r\n\t\t\t\t\tloadingDialogTap,\r\n\t\t\t\t\tprecheckTap,\r\n\t\t\t\t\tskipInterceptorsTap,\r\n\t\t\t\t\tobservableSwitchMap,\r\n\t\t\t\t\tstopLoadingCatchError,\r\n\t\t\t\t\tconfirmAcceptSwitchMap,\r\n\t\t\t\t\tloadingDialogTap,\r\n\t\t\t\t\tskipInterceptorsTap,\r\n\t\t\t\t\tobservableSwitchMap,\r\n\t\t\t\t\tstopLoadingCatchError,\r\n\t\t\t\t\tstopLoadingTap,\r\n\t\t\t\t\tmessageAfterSuccessTap\r\n\t\t\t\t) as Observable<T>;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// Confirm no precheck\r\n\t\t\t\treturn of(null).pipe(\r\n\t\t\t\t\ttakeUntilDestroyedPipe,\r\n\t\t\t\t\tloadingDialogTap,\r\n\t\t\t\t\tconfirmAcceptSwitchMap,\r\n\t\t\t\t\tloadingDialogTap,\r\n\t\t\t\t\tskipInterceptorsTap,\r\n\t\t\t\t\tobservableSwitchMap,\r\n\t\t\t\t\tstopLoadingCatchError,\r\n\t\t\t\t\tstopLoadingTap,\r\n\t\t\t\t\tmessageAfterSuccessTap\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tif (options.precheck !== undefined) {\r\n\r\n\t\t\t\t// No confirm, precheck\r\n\t\t\t\treturn of(null).pipe(\r\n\t\t\t\t\ttakeUntilDestroyedPipe,\r\n\t\t\t\t\tloadingDialogTap,\r\n\t\t\t\t\tprecheckTap,\r\n\t\t\t\t\tskipInterceptorsTap,\r\n\t\t\t\t\tobservableSwitchMap,\r\n\t\t\t\t\tstopLoadingCatchError,\r\n\t\t\t\t\tskipInterceptorsTap,\r\n\t\t\t\t\tobservableSwitchMap,\r\n\t\t\t\t\tstopLoadingCatchError,\r\n\t\t\t\t\tstopLoadingTap,\r\n\t\t\t\t\tmessageAfterSuccessTap\r\n\t\t\t\t) as Observable<T>;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// No confirm, no precheck\r\n\t\t\t\treturn of(null).pipe(\r\n\t\t\t\t\ttakeUntilDestroyedPipe,\r\n\t\t\t\t\tloadingDialogTap,\r\n\t\t\t\t\tskipInterceptorsTap,\r\n\t\t\t\t\tobservableSwitchMap,\r\n\t\t\t\t\tstopLoadingCatchError,\r\n\t\t\t\t\tstopLoadingTap,\r\n\t\t\t\t\tmessageAfterSuccessTap\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor(observable: Observable<T>, interceptorsService: InterceptorsService, dialogService: CfDialogService, messageService: CfMessageService) {\r\n\t\tthis.observable = observable;\r\n\t\tthis.interceptorsService = interceptorsService;\r\n\t\tthis.dialogService = dialogService;\r\n\t\tthis.messageService = messageService;\r\n\t}\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { InterceptorType } from \"../../enums\";\r\nimport { CfLoggerService } from \"../services\";\r\nimport { InterceptorsService } from \"../services/interceptors.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class BaseInterceptor {\r\n\r\n\ttype: InterceptorType | null = null;\r\n\r\n\tinterceptorsService: InterceptorsService = inject(InterceptorsService);\r\n\tloggerService: CfLoggerService = inject(CfLoggerService);\r\n\r\n\tskipInterceptor(): boolean {\r\n\t\tif (this.type !== null && this.interceptorsService.skip.indexOf(InterceptorType.ALL) !== -1) {\r\n\t\t\tthis.loggerService.warn('Interceptor skipped, reason is ALL skipped: ' + this.type);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst skip: boolean = this.type !== null && this.interceptorsService.skip.indexOf(this.type) !== -1;\r\n\t\tif (skip) {\r\n\t\t\tthis.loggerService.warn('Interceptor skipped, reason is [' + this.interceptorsService.skip.join(', ') + '] skipped');\r\n\t\t}\r\n\t\treturn skip;\r\n\t}\r\n\r\n\tconstructor(\r\n\t\ttype: InterceptorType\r\n\t) {\r\n\t\tthis.type = type;\r\n\t\tthis.loggerService.info('Interceptor initialized: ' + this.type);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { BaseInterceptor } from './Base.interceptor';\r\nimport { InterceptorType } from '../../enums';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class ErrorInterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\tintercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n        if (this.skipInterceptor()) {\r\n            return next.handle(request);\r\n        }\r\n        return next.handle(request).pipe(\r\n            catchError((httpErrorResponse: HttpErrorResponse) => {\r\n                if (this.interceptorsService.errorCallbackfunction !== null && !this.interceptorsService.errorSkipStatusCodes.includes(httpErrorResponse.status)) {\r\n                    this.loggerService.info('Error Interceptor Callback Function Called');\r\n                    this.interceptorsService.errorCallbackfunction(httpErrorResponse);\r\n                }\r\n                return throwError(() => httpErrorResponse);\r\n            })\r\n        );\r\n    }\r\n\r\n    constructor() {\r\n    \tsuper(InterceptorType.ERROR);\r\n    }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpEventType, HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { BaseInterceptor } from './Base.interceptor';\nimport { InterceptorType } from '../../enums';\nimport { LoaderInterceptorService } from '../services';\n\n/**\n * Loader interceptor\n * \n * Collectiong all the `HttpRequest` using `LoaderInterceptorService`.\n * \n * When a request is made, `LoaderInterceptorService.push` is called.\n * When the request is finished, `LoaderInterceptorService.remove` is called.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class LoaderInterceptor extends BaseInterceptor implements HttpInterceptor {\n\n    loaderInterceptorService: LoaderInterceptorService = inject(LoaderInterceptorService);\n\n    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n        if (this.skipInterceptor()) {\n            return next.handle(request);\n        }\n        this.loaderInterceptorService.push(request);\n        return next.handle(request).pipe(\n            catchError((httpErrorResponse: HttpErrorResponse) => {\n                this.loaderInterceptorService.remove(request);\n                return throwError(() => httpErrorResponse);\n            }),\n            tap((httpEvent: HttpEvent<any>) => {\n                if (httpEvent.type === HttpEventType.Response) {\n                    this.loaderInterceptorService.remove(request);\n                }\n            })\n        );\n    }\n\n    constructor() {\n      super(InterceptorType.LOADER);\n    }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpEventType } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { InterceptorType } from '../../enums';\r\nimport { BaseInterceptor } from './Base.interceptor';\r\nimport { CfLockService } from '../services';\r\nimport { Lock, LockAction, LockHeaders } from '../../interfaces';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class LockInterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\t\r\n\tprivate lockService: CfLockService = inject(CfLockService);\r\n\r\n\tintercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\t\tif (this.skipInterceptor()) {\r\n\t\t\treturn next.handle(request);\r\n\t\t}\r\n\t\tconst lock: Lock | null = this.lockService.getLock();\r\n\t\tif (lock !== null) {\r\n\t\t\tconst lockHeaders: LockHeaders | null = this.lockService.convertLockToHeaders(lock);\r\n\t\t\tif (lockHeaders !== null) {\r\n\t\t\t\trequest = request.clone({\r\n\t\t\t\t\tsetHeaders: lockHeaders\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn next.handle(request).pipe(map((httpEvent: HttpEvent<any>) => {\r\n\t\t\tif (lock !== null) {\r\n\t\t\t\tthis.lockService.clear();\r\n\t\t\t}\r\n\t\t\tif (httpEvent.type === HttpEventType.Response && httpEvent.status === 200) {\r\n\t\t\t\tconst action: string | null = httpEvent.headers.get('Lock-Action');\r\n\t\t\t\tconst module: string | null = httpEvent.headers.get('Lock-Module');\r\n\t\t\t\tconst id: string | null = httpEvent.headers.get('Lock-Id');\r\n\t\t\t\tconst fullname: string | null = httpEvent.headers.get('Lock-Fullname');\r\n\t\t\t\tconst useridString: string | null = httpEvent.headers.get('Lock-Userid');\r\n\t\t\t\tconst userid: number = Number(useridString);\r\n\t\t\t\tif (action !== null && (action === LockAction.KEEP || action === LockAction.LOCK || action === LockAction.RELEASE) && module !== null && id !== null && fullname !== null && userid !== null && isFinite(userid)) {\r\n\t\t\t\t\tthis.lockService.setLockResponse({\r\n\t\t\t\t\t\taction,\r\n\t\t\t\t\t\tmodule,\r\n\t\t\t\t\t\tid,\r\n\t\t\t\t\t\tfullname: decodeURIComponent(escape(atob(fullname))),\r\n\t\t\t\t\t\tuserid\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn httpEvent;\r\n\t\t}));\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper(InterceptorType.LOCK);\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport { BaseInterceptor } from './Base.interceptor';\r\nimport { InterceptorType } from '../../enums';\r\nimport { CF_MOCK } from '../tokens';\r\nimport { MockResponses } from '../../interfaces';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class Mockinterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\r\n\tmockResponses: MockResponses = inject(CF_MOCK);\r\n\r\n    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n        if (this.skipInterceptor()) {\r\n            return next.handle(request);\r\n        }\r\n\r\n\t\tlet url: URL | null = null;\r\n\t\ttry {\r\n\t\t\turl = new URL(request.url)\r\n\t\t} catch(e) {}\r\n\r\n\t\tif (url !== null) {\r\n\r\n\t\t\tif (this.mockResponses.url !== undefined && this.mockResponses.url[request.url] !== undefined) {\r\n\t\t\t\treturn of(new HttpResponse({\r\n\t\t\t\t\tbody: this.mockResponses.url[request.url]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (this.mockResponses.pathname !== undefined && this.mockResponses.pathname[url.pathname] !== undefined) {\r\n\t\t\t\treturn of(new HttpResponse({\r\n\t\t\t\t\tbody: this.mockResponses.pathname[url.pathname]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\r\n\t\t\tif (this.interceptorsService.mockCallbackFunction !== null) {\r\n\t\t\t\tthis.loggerService.info('Mock Interceptor Callback Function Called [' + request.url + ']');\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn this.interceptorsService.mockCallbackFunction(request, url, next);\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\tthis.loggerService.error('Mock Interceptor Callback Invalid Callback [' + e + ']')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n        return next.handle(request);\r\n    }\r\n\r\n    constructor() {\r\n      super(InterceptorType.MOCK);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { InterceptorType } from '../../enums';\r\nimport { BaseInterceptor } from './Base.interceptor';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class PrecheckInterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\r\n\tintercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\t\tif (this.skipInterceptor()) {\r\n\t\t\treturn next.handle(request);\r\n\t\t}\r\n\t\tif (this.interceptorsService.precheck !== null) {\r\n\t\t\trequest = request.clone({\r\n\t\t\t\tsetHeaders: {\r\n\t\t\t\t\tPrecheck: this.interceptorsService.precheck\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (this.interceptorsService.resetPrecheck) {\r\n\t\t\t\tthis.interceptorsService.precheck = null;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn next.handle(request);\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper(InterceptorType.PRECHECK);\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseInterceptor } from './Base.interceptor';\r\nimport { InterceptorType } from '../../enums';\r\nimport { CfTokenService } from '../services/token.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TokenInterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\r\n  private tokenService: CfTokenService = inject(CfTokenService);\r\n\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    if (this.skipInterceptor()) {\r\n        return next.handle(request);\r\n    }\r\n    const accessToken: string | null = this.tokenService.accessToken;\r\n    if (accessToken !== null) {\r\n      request = request.clone({\r\n        setHeaders: {\r\n          Token: accessToken\r\n        }\r\n      });\r\n    }\r\n    return next.handle(request);\r\n  }\r\n\r\n  constructor() {\r\n    super(InterceptorType.TOKEN);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, catchError, repeat, throwError } from 'rxjs';\r\nimport { BaseInterceptor } from './Base.interceptor';\r\nimport { InterceptorType } from '../../enums';\r\nimport { generateUuid } from '../helpers';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class RequestIdInterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\r\n\tintercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\t\tif (this.skipInterceptor()) {\r\n\t\t\treturn next.handle(request);\r\n\t\t}\r\n\t\tconst uuid: string = generateUuid();\r\n\t\trequest = request.clone({\r\n\t\t\tsetHeaders: {\r\n\t\t\t\t[this.interceptorsService.requestIdHttpHeaderName]: uuid\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (!this.interceptorsService.requestIdRepeat) {\r\n\t\t\treturn next.handle(request);\r\n\t\t}\r\n\t\treturn next.handle(request).pipe(\r\n            catchError((error, caught) => {\r\n\t\t\t\tif ((error instanceof HttpErrorResponse) && this.interceptorsService.requestIdRepeatStatusCodes.includes(error.status)) {\r\n\t\t\t\t\treturn caught.pipe(\r\n\t\t\t\t\t\trepeat({ count: 1, delay: this.interceptorsService.requestIdRepeatDelay })\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\treturn throwError(() => error);\r\n\t\t\t})\r\n        );\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper(InterceptorType.REQUESTID);\r\n\t}\r\n}\r\n","import { Directive, ElementRef, inject } from \"@angular/core\";\r\n\r\n@Directive({\r\n\tselector: \"[cfDragHandle]\",\r\n\tstandalone: true,\r\n\thost: {\r\n\t\tclass: 'cf-cursor-move'\r\n\t}\r\n})\r\nexport class CfDragHandleDirective {\r\n\r\n\tpublic elementRef: ElementRef = inject(ElementRef);\r\n\r\n}\r\n","import { AfterViewInit, ContentChild, Directive, ElementRef, EventEmitter, inject, Input, Output } from \"@angular/core\";\r\nimport { CfDragDropEventType } from \"../../interfaces\";\r\nimport { CfDragDropService } from \"../services/dragdrop.service\";\r\nimport { CfDragHandleDirective } from \"./drag.handle.directive\";\r\nimport { CfDragDropListDirective } from \"./dragdroplist.directive\";\r\n\r\n@Directive({\r\n    selector: \"[cfDrag]\",\r\n\tstandalone: true\r\n})\r\nexport class CfDragDirective implements AfterViewInit {\r\n    \r\n    public elementRef: ElementRef = inject(ElementRef);\r\n    private cfDragDropService: CfDragDropService = inject(CfDragDropService);\r\n\r\n    @Input() cfDragData: any = null;\r\n    @Input() cfDragTag: string | null = null;\r\n    @Input() dragStartX: number = 10;\r\n    @Input() dragStartY: number = 10;\r\n\t@Input() direction: 'vertical' | 'horizontal' | null = null;\r\n\r\n    @ContentChild(CfDragHandleDirective) cfDragHandleDirective: CfDragHandleDirective | undefined = undefined;\r\n\r\n    mouseDownEvent: MouseEvent | null = null;\r\n    mouseMoveEvent: ((originalEvent: MouseEvent) => any) | null = null;\r\n    mouseUpEvent: ((originalEvent: MouseEvent) => any) | null = null;\r\n\r\n    clonedElement: HTMLElement | null = null;\r\n    originalElementRect: DOMRect | null = null;\r\n\r\n    dragAndDropActive: boolean = false;\r\n\r\n\tdragDropListGroup: string | null = null;\r\n\tdragDropListDirective: CfDragDropListDirective | null = null;\r\n\toriginalDragDropListDirective: CfDragDropListDirective | null = null;\r\n\toriginalDragDropListDirectiveOldPosition: number | null = null;\r\n\tpreventClick: boolean = true;\r\n\r\n\t@Output('dragStart') dragStart: EventEmitter<{data: any}> = new EventEmitter();\r\n\t@Output('dragMove') dragMove: EventEmitter<{data: any}> = new EventEmitter();\r\n\t@Output('dragEnd') dragEnd: EventEmitter<{data: any}> = new EventEmitter();\r\n\r\n\tget element(): HTMLElement {\r\n\t\treturn this.elementRef.nativeElement;\r\n\t}\r\n\r\n\tget elementRect(): DOMRect {\r\n\t\treturn this.element.getBoundingClientRect();\r\n\t}\r\n\r\n    startDragAndDrop(): void {\r\n\t\tthis.originalElementRect = this.element.getBoundingClientRect();\r\n        this.cloneElement();\r\n        this.element.classList.add('drag');\r\n\t\tif (this.preventClick) {\r\n\t\t\tthis.element.style.pointerEvents = 'none';\r\n\t\t}\r\n        document.body.style.userSelect = 'none';\r\n\t\tthis.dragStart.emit({\r\n\t\t\tdata: this.cfDragData\r\n\t\t});\r\n        this.cfDragDropService.dragEvent.next({\r\n            type: CfDragDropEventType.DRAG_START,\r\n            tag: this.cfDragTag,\r\n            data: this.cfDragData,\r\n\t\t\tdragDropListGroup: this.dragDropListGroup,\r\n\t\t\tdragDirective: this\r\n        });\r\n    }\r\n\r\n    cloneElement(): void {\r\n        if (this.originalElementRect !== null) {\r\n            this.clonedElement = (this.element.cloneNode(true) as HTMLElement);\r\n\t\t\tconst styles: CSSStyleDeclaration = window.getComputedStyle(this.element);\r\n\t\t\tconst cssText = Object.values(styles).reduce(\r\n\t\t\t\t(css, propertyName) => {\r\n\t\t\t\t\treturn `${css}${propertyName}:${styles.getPropertyValue(propertyName)};`\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t\tthis.clonedElement.style.cssText = cssText\r\n            this.clonedElement.style.position = 'absolute';\r\n            this.clonedElement.style.left = this.originalElementRect.left + 'px';\r\n            this.clonedElement.style.top = this.originalElementRect.top + 'px';\r\n\t\t\tthis.clonedElement.style.pointerEvents = 'none';\r\n            document.body.append(this.clonedElement);\r\n        }\r\n    }\r\n\r\n    registerEvents(): void {\r\n        if (this.mouseUpEvent !== null) {\r\n            document.addEventListener('mouseup', this.mouseUpEvent);\r\n            document.addEventListener('mouseleave', this.mouseUpEvent);\r\n        }\r\n        if (this.mouseMoveEvent !== null) {\r\n            document.addEventListener('mousemove', this.mouseMoveEvent);\r\n        }\r\n    }\r\n\r\n    unregisterEvents(): void {\r\n        if (this.mouseUpEvent !== null) {\r\n            document.removeEventListener('mouseup', this.mouseUpEvent);\r\n            document.removeEventListener('mouseleave', this.mouseUpEvent);\r\n        }\r\n        if (this.mouseMoveEvent !== null) {\r\n            document.removeEventListener('mousemove', this.mouseMoveEvent);\r\n        }\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        const self = this;\r\n        const elementRef: ElementRef = this.cfDragHandleDirective !== undefined ? this.cfDragHandleDirective.elementRef : this.elementRef;\r\n        const nativeElement: HTMLElement = (elementRef.nativeElement as HTMLElement);\r\n        nativeElement.onmousedown = (event: MouseEvent) => {\r\n            self.mouseDownEvent = event;\r\n            self.registerEvents();\r\n        };\r\n    }\r\n\r\n    constructor() {\r\n        this.mouseUpEvent = () => {\r\n\t\t\tif (this.preventClick) {\r\n\t\t\t\tthis.element.style.pointerEvents = 'auto';\r\n\t\t\t}\r\n            this.unregisterEvents();\r\n\t\t\tthis.dragEnd.emit({\r\n\t\t\t\tdata: this.cfDragData\r\n\t\t\t});\r\n            this.cfDragDropService.dragEvent.next({\r\n                type: CfDragDropEventType.DRAG_END,\r\n                tag: this.cfDragTag,\r\n                data: this.cfDragData,\r\n\t\t\t\tdragDropListGroup: this.dragDropListGroup,\r\n\t\t\t\tdragDirective: this\r\n            });\r\n            if (this.clonedElement !== null) {\r\n\t\t\t\tthis.clonedElement.remove();\r\n            }\r\n            this.clonedElement = null;\r\n            this.dragAndDropActive = false;\r\n            this.originalElementRect = null;\r\n            (this.elementRef.nativeElement as HTMLElement).classList.remove('drag');\r\n            document.body.style.userSelect = 'auto';\r\n        };\r\n\r\n        this.mouseMoveEvent = (originalEvent: MouseEvent) => {\r\n            if (this.mouseDownEvent !== null) {\r\n                const diffX: number = originalEvent.clientX - this.mouseDownEvent.clientX;\r\n                const diffY: number = originalEvent.clientY - this.mouseDownEvent.clientY;\r\n                if (this.dragStartX <= Math.abs(diffX) || this.dragStartY <= Math.abs(diffY)) {\r\n                    if (!this.dragAndDropActive) {\r\n                        this.dragAndDropActive = true;\r\n                        this.startDragAndDrop();\r\n                    }\r\n                }\r\n                if (this.clonedElement !== null && this.originalElementRect !== null) {\r\n\t\t\t\t\tthis.dragMove.emit({\r\n\t\t\t\t\t\tdata: this.cfDragData\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (this.direction === null || this.direction === 'horizontal') {\r\n\t\t\t\t\t\tthis.clonedElement.style.left = (this.originalElementRect.left + diffX) + 'px';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.direction === null || this.direction === 'vertical') {\r\n\t\t\t\t\t\tthis.clonedElement.style.top = (this.originalElementRect.top + diffY) + 'px';\r\n\t\t\t\t\t}\r\n                }\r\n            }\r\n        };\r\n    }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { filter, takeUntil } from \"rxjs/operators\";\r\nimport { CfDragDropEvent, CfDragDropEventType } from \"../../interfaces\";\r\nimport { CfDragDropService } from \"../services/dragdrop.service\";\r\n\r\n@Directive({\r\n    selector: \"[cfDrop]\",\r\n\tstandalone: true\r\n})\r\nexport class CfDropDirective implements OnInit, OnDestroy {\r\n    \r\n    private el: ElementRef = inject(ElementRef);\r\n    private cfDragDropService: CfDragDropService = inject(CfDragDropService);\r\n\r\n    @Input() cfAllowedDragTags: string[] = [];\r\n\r\n    destroyed: Subject<void> = new Subject();\r\n\r\n    @Output() cfDropped: EventEmitter<CfDragDropEvent> = new EventEmitter();\r\n\r\n    dropEvent: ((originalEvent: MouseEvent) => any) | null = null;\r\n\r\n    actualCfDragDropEvent: CfDragDropEvent | null = null;\r\n    \r\n    constructor() {\r\n        const self = this;\r\n        this.dropEvent = (originalEvent: MouseEvent) => {\r\n            const dropElementRect: DOMRect = (self.el.nativeElement as HTMLElement).getBoundingClientRect();\r\n            const isInDropZone: boolean = self.isInDropZone(dropElementRect, originalEvent);\r\n            if (isInDropZone && this.actualCfDragDropEvent !== null) {\r\n                this.cfDropped.emit({\r\n                    data: this.actualCfDragDropEvent.data,\r\n                    tag: this.actualCfDragDropEvent.tag,\r\n                    type: CfDragDropEventType.DROP_END,\r\n\t\t\t\t\tdragDropListGroup: this.actualCfDragDropEvent.dragDropListGroup,\r\n\t\t\t\t\tdragDirective: this.actualCfDragDropEvent.dragDirective\r\n                });\r\n            }\r\n            self.actualCfDragDropEvent = null;\r\n            self.unregisterDropEvent();\r\n            (self.el.nativeElement as HTMLElement).classList.remove('active');\r\n        }\r\n    }\r\n\r\n    isInDropZone(domRect: DOMRect, originalEvent: MouseEvent): boolean {\r\n        return (\r\n            (originalEvent.clientX >= domRect.x) &&\r\n            (originalEvent.clientX <= domRect.x + domRect.width) &&\r\n            (originalEvent.clientY >= domRect.y) &&\r\n            (originalEvent.clientY <= domRect.y + domRect.height)\r\n        );\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        const allowedDragTags: string[] = this.cfAllowedDragTags.map((allowedDragTag: string) => allowedDragTag.toLowerCase());\r\n        this.cfDragDropService.dragEvent.pipe(\r\n            takeUntil(this.destroyed),\r\n            filter((cfDragDropEvent: CfDragDropEvent) => {\r\n                if (cfDragDropEvent.tag !== null) {\r\n                    return allowedDragTags.includes(cfDragDropEvent.tag.toLowerCase());\r\n                }\r\n                return false;\r\n            })\r\n        ).subscribe((cfDragDropEvent: CfDragDropEvent) => {\r\n            if (cfDragDropEvent.type === CfDragDropEventType.DRAG_START) {\r\n                this.actualCfDragDropEvent = cfDragDropEvent;\r\n                this.registerDropEvent();\r\n                (this.el.nativeElement as HTMLElement).classList.add('active');\r\n            }\r\n        });\r\n    }\r\n\r\n    registerDropEvent(): void {\r\n        if (this.dropEvent !== null) {\r\n            document.addEventListener('mouseup', this.dropEvent);\r\n        }\r\n    }\r\n\r\n    unregisterDropEvent(): void {\r\n        if (this.dropEvent !== null) {\r\n            document.removeEventListener('mouseup', this.dropEvent);\r\n        }\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.destroyed.complete();\r\n    }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, inject, Input, OnInit, Output } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { fromEvent } from \"rxjs\";\r\nimport { MaskPart, MaskPartType } from \"../../interfaces\";\r\nimport { CfDestroyRef } from \"../classes\";\r\n\r\n@Directive({\r\n\tselector: \"input[cfInputMask],cf-calendar[cfInputMask]\",\r\n\tstandalone: true\r\n})\r\nexport class CfInputMaskDirective extends CfDestroyRef implements OnInit {\r\n\r\n    @Input() set cfInputMask(mask: string) { this.#mask = mask; }\r\n\t@Input() pasteFromSelection: boolean = false;\r\n\t@Input() pasteOnlyFullMatch: boolean = false;\r\n\t@Input() maskNumericChar: string = '0';\r\n\t@Input() maskAlphabeticChar: string = 'a';\r\n\t@Input() maskAlphanumericChar: string = '*';\r\n\r\n\t@Output() maskFilled: EventEmitter<string> = new EventEmitter();\r\n\r\n\telementRef: ElementRef<Element> = inject(ElementRef<Element>);\r\n\r\n\telement: HTMLInputElement | null = null;\r\n\r\n\tletterRegex: RegExp = new RegExp(/^\\p{L}{1}$/ug);\r\n\r\n\tmaskParts: MaskPart[] = [];\r\n\t\r\n\t#mask: string | null = null;\r\n\r\n\tget mask(): string | null {\r\n\t\treturn this.#mask;\r\n\t}\r\n\r\n\tget maskPartsDisplay(): string {\r\n\t\treturn this.maskParts.map((maskPart: MaskPart) => {\r\n\t\t\tif (maskPart.enteredChar !== null) {\r\n\t\t\t\treturn maskPart.enteredChar;\r\n\t\t\t}\r\n\t\t\treturn maskPart.displayChar;\r\n\t\t}).join('');\r\n\t}\r\n\r\n\tget selectionStart(): number | null {\r\n\t\tif (this.element === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.element.selectionStart;\r\n\t}\r\n\r\n\tprocessMask(): void {\r\n\t\tif (this.mask === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst maskParts: MaskPart[] = [];\r\n\t\tfor (let i = 0; i < this.mask.split('').length; i++) {\r\n\t\t\tlet maskPart: string = this.mask[i];\r\n\t\t\tif (maskPart === this.maskNumericChar) {\r\n\t\t\t\tmaskParts.push({\r\n\t\t\t\t\ttype: MaskPartType.NUMERIC,\r\n\t\t\t\t\toriginalMaskPart: maskPart,\r\n\t\t\t\t\tdisplayChar: '_',\r\n\t\t\t\t\tenteredChar: null\r\n\t\t\t\t});\r\n\t\t\t} else if (maskPart.toLowerCase() === this.maskAlphabeticChar) {\r\n\t\t\t\tmaskParts.push({\r\n\t\t\t\t\ttype: MaskPartType.ALPHABETICAL,\r\n\t\t\t\t\toriginalMaskPart: maskPart,\r\n\t\t\t\t\tdisplayChar: '_',\r\n\t\t\t\t\tenteredChar: null\r\n\t\t\t\t});\r\n\t\t\t} else if (maskPart === this.maskAlphanumericChar) {\r\n\t\t\t\tmaskParts.push({\r\n\t\t\t\t\ttype: MaskPartType.ALPHANUMERIC,\r\n\t\t\t\t\toriginalMaskPart: maskPart,\r\n\t\t\t\t\tdisplayChar: '_',\r\n\t\t\t\t\tenteredChar: null\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tmaskParts.push({\r\n\t\t\t\t\ttype: MaskPartType.SKIP,\r\n\t\t\t\t\toriginalMaskPart: maskPart,\r\n\t\t\t\t\tdisplayChar: maskPart,\r\n\t\t\t\t\tenteredChar: null\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.maskParts = maskParts;\r\n\t}\r\n\r\n\tchangeInputValue(): void {\r\n\t\tif (this.element === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.element.value = this.maskPartsDisplay;\r\n\t}\r\n\r\n\tpaste(text: string): void {\r\n\t\tif (text.length === 0 || this.element === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.pasteOnlyFullMatch) {\r\n\t\t\tif (text.length !== this.maskParts.length) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tfor (let i = 0; i < text.length; i++) {\r\n\t\t\t\tif (!this.maskPartMatch(this.maskParts[i], text[i])) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet selectionStart: number = 0;\r\n\r\n\t\tif (this.pasteFromSelection) {\r\n\t\t\tlet actualSelection: number | null = this.element.selectionStart;\r\n\t\t\tif (actualSelection !== null) {\r\n\t\t\t\tselectionStart = actualSelection;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet textIndex: number = 0;\r\n\t\tfor (let s = selectionStart; s < this.maskParts.length; s++) {\r\n\t\t\tif (this.maskPartMatch(this.maskParts[s], text[textIndex])) {\r\n\t\t\t\tthis.maskParts[s].enteredChar = text[textIndex];\r\n\t\t\t}\r\n\t\t\ttextIndex++;\r\n\t\t\tif (textIndex > text.length - 1) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.changeInputValue();\r\n\t}\r\n\r\n\tmaskPartMatch(maskPart: MaskPart, char: string): boolean {\r\n\t\tif (maskPart.type === MaskPartType.NUMERIC || maskPart.type === MaskPartType.ALPHANUMERIC) {\r\n\t\t\tif (['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(char)) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (maskPart.type === MaskPartType.ALPHABETICAL || maskPart.type === MaskPartType.ALPHANUMERIC && char.length === 1) {\r\n\t\t\tif (this.letterRegex.test(char)) {\r\n\t\t\t\tthis.letterRegex.lastIndex = 0;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (maskPart.type === MaskPartType.SKIP && maskPart.displayChar === char) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tattachEvents(): void {\r\n\t\tif (this.element === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfromEvent(this.element, 'paste').pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event: Event) => {\r\n\t\t\tif (!(event instanceof ClipboardEvent) || event.clipboardData === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.paste(event.clipboardData.getData('text'));\r\n\t\t\tevent.preventDefault();\r\n\t\t});\r\n\r\n\t\tfromEvent(this.element, 'keydown').pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event: Event) => {\r\n\r\n\t\t\tif (!(event instanceof KeyboardEvent)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.element === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst eventKey: string = event.key;\r\n\r\n\t\t\tif (event.ctrlKey && eventKey.toLowerCase() === 'v') {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\tconst selectionStart: number | null = this.element.selectionStart;\r\n\r\n\t\t\tif (selectionStart === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (eventKey.toLowerCase() === 'arrowleft' || eventKey.toLowerCase() === 'arrowup') {\r\n\t\t\t\tthis.selectPrevMaskPart(selectionStart);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (eventKey.toLowerCase() === 'arrowright' || eventKey.toLowerCase() === 'arrowdown') {\r\n\t\t\t\tthis.selectNextMaskPart(selectionStart);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (eventKey.toLowerCase() === 'backspace') {\r\n\r\n\t\t\t\tlet prevMaskPart: MaskPart | null = null;\r\n\t\t\t\tlet prevMaskPartIndex: number | null = null;\r\n\t\t\t\tfor (let i = selectionStart - 1; i >= 0; i--) {\r\n\t\t\t\t\tif (this.maskParts[i] !== undefined && this.maskParts[i].type !== MaskPartType.SKIP) {\r\n\t\t\t\t\t\tprevMaskPart = this.maskParts[i];\r\n\t\t\t\t\t\tprevMaskPartIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (prevMaskPart !== null && prevMaskPartIndex !== null) {\r\n\t\t\t\t\tthis.maskParts[prevMaskPartIndex].enteredChar = null;\r\n\t\t\t\t\tthis.changeInputValue();\r\n\t\t\t\t\tthis.selectMaskPart(prevMaskPartIndex);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet maskPart: MaskPart | null = null;\r\n\t\t\tif (this.maskParts[selectionStart] !== undefined) {\r\n\t\t\t\tmaskPart = this.maskParts[selectionStart];\r\n\t\t\t}\r\n\r\n\t\t\tif (maskPart === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (maskPart.type === MaskPartType.SKIP) {\r\n\t\t\t\tthis.selectNextMaskPart(selectionStart);\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tif (this.maskPartMatch(maskPart, eventKey)) {\r\n\t\t\t\t\tmaskPart.enteredChar = eventKey;\r\n\t\t\t\t\tthis.changeInputValue();\r\n\t\t\t\t\tthis.selectNextMaskPart(selectionStart);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tselectMaskPart(index: number): void {\r\n\t\tif (this.element === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.maskParts[index] !== undefined) {\r\n\t\t\tthis.element.setSelectionRange(index, index);\r\n\t\t}\r\n\t}\r\n\r\n\tselectPrevMaskPart(from: number | null = null): void {\r\n\t\tif (this.element === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (from === null) {\r\n\t\t\tfrom = this.maskParts.length;\r\n\t\t}\r\n\t\tfrom -= 1;\r\n\t\tfor (let i = from; i >= 0; i--) {\r\n\t\t\tif (this.maskParts[i].type !== MaskPartType.SKIP) {\r\n\t\t\t\tthis.element.setSelectionRange(i, i);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tselectNextMaskPart(from: number | null = null): void {\r\n\t\tif (this.element === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (from === null) {\r\n\t\t\tfrom = -1;\r\n\t\t}\r\n\t\tfrom += 1;\r\n\t\tfor (let i = from; i < this.maskParts.length; i++) {\r\n\t\t\tif (this.maskParts[i].type !== MaskPartType.SKIP) {\r\n\t\t\t\tthis.element.setSelectionRange(i, i);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextSelectionStart(start: number): number | null {\r\n\t\tif (start >= this.maskParts.length) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tsetElement(element: HTMLInputElement): void {\r\n\t\tthis.element = element;\r\n\t\tthis.processMask();\r\n\t\tthis.attachEvents();\r\n\t\tthis.changeInputValue();\r\n\t}\r\n\r\n\tsetMask(mask: string): void {\r\n\t\tthis.#mask = mask;\r\n\t\tthis.processMask();\r\n\t\tthis.changeInputValue();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tif (this.elementRef.nativeElement.nodeName.toLowerCase() === 'input') {\r\n\t\t\tthis.setElement(this.elementRef.nativeElement as HTMLInputElement);\r\n\t\t}\r\n\t}\r\n}\r\n","import { Directive, inject, Input, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n    selector: '[cfTemplate]',\r\n\tstandalone: true,\r\n    host: {}\r\n})\r\nexport class CfTemplate {\r\n\r\n    template: TemplateRef<any> = inject(TemplateRef);\r\n    \r\n    @Input() type: string | null = null;\r\n    \r\n    @Input('cfTemplate') name: string | null = null;\r\n\r\n    getName(): string | null {\r\n        return this.name;\r\n    }\r\n}","import { Directive, ElementRef, HostListener, inject, Input, OnDestroy } from '@angular/core';\r\nimport { showTooltip } from '../helpers/tooltip.helper';\r\n\r\n@Directive({\r\n    selector: '[cfTooltip]',\r\n\tstandalone: true\r\n})\r\nexport class CfTooltipDirective implements OnDestroy {\r\n\r\n    private el: ElementRef<Element> = inject(ElementRef);\r\n\t\r\n    @Input() cfTooltip: string | null = null;\r\n    @Input() distance: number = 4;\r\n    @Input() width: string = 'auto';\r\n    @Input() position: 'top' | 'right' | 'bottom' | 'left' = 'bottom';\r\n\r\n    tooltip: HTMLDivElement | null = null;\r\n\r\n    @HostListener('mouseenter')\r\n    onMouseEnter(): void {\r\n\t\tif (this.cfTooltip === null || this.cfTooltip.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.tooltip = showTooltip(this.cfTooltip, this.el.nativeElement, this.position, this.width, this.distance);\r\n    }\r\n\r\n    @HostListener('mouseleave')\r\n    onMouseLeave(): void {\r\n        if (this.tooltip !== null) {\r\n            this.tooltip.remove();\r\n        }\r\n    }\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (this.tooltip !== null) {\r\n\t\t\tthis.tooltip.remove();\r\n\t\t}\r\n\t}\r\n}\r\n","import { Directive, inject, Input, OnChanges, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\nimport { CfPermissionsService } from \"../services\";\r\n\r\n@Directive({\r\n    selector: \"[hasPermission]\",\r\n\tstandalone: true\r\n})\r\nexport class CfPermissionDirective implements OnChanges {\r\n\t\r\n\tpermissionsService: CfPermissionsService = inject(CfPermissionsService);\r\n\ttemplateRef: TemplateRef<any> = inject(TemplateRef);\r\n\tviewContainer: ViewContainerRef = inject(ViewContainerRef);\r\n\r\n\t_permissions: string[] = [];\r\n\t_skipGodMode: boolean = false;\r\n\t_skipOnPermissions: string[] = [];\r\n\t_mode: 'and' | 'or' = 'and';\r\n\r\n    @Input()\r\n    set hasPermission(permissions: string | string[]) {\r\n        if (typeof permissions === 'string') {\r\n            permissions = [permissions];\r\n        }\r\n\t\tthis._permissions = permissions;\r\n    }\r\n\r\n\t@Input()\r\n\tset hasPermissionSkipGodmode(skipGodmode: boolean) {\r\n\t\tthis._skipGodMode = skipGodmode;\r\n\t}\r\n\r\n\t@Input()\r\n\tset hasPermissionSkipOnPermissions(skipOnPermissions: string[]) {\r\n\t\tthis._skipOnPermissions = skipOnPermissions;\r\n\t}\r\n\r\n\t@Input()\r\n\tset hasPermissionMode(mode: 'and' | 'or') {\r\n\t\tthis._mode = mode;\r\n\t}\r\n\r\n\tcheck(): void {\r\n        if (this.permissionsService.hasPermissions(this._permissions, this._skipGodMode, this._skipOnPermissions, this._mode)) {\r\n            this.viewContainer.createEmbeddedView(this.templateRef);\r\n        } else {\r\n            this.viewContainer.clear();\r\n        }\r\n\t}\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.check();\r\n\t}\r\n}\r\n","import { AutocompleteFilterFunction } from \"./autocomplete.interfaces\";\r\n\r\nexport const AUTOCOMPLETE_FILTER_FUNCTION_CONTAINS: AutocompleteFilterFunction = (values: any[], labelId: string, query: string) => {\r\n\treturn values.filter((value: string) => value[labelId].toLowerCase().includes(query.toLowerCase()));\r\n}\r\n\r\nexport const AUTOCOMPLETE_FILTER_FUNCTION_STARTSWITH: AutocompleteFilterFunction = (values: string[], labelId: string, query: string) => {\r\n\treturn values.filter((value: string) => value[labelId].toLowerCase().startsWith(query.toLowerCase()));\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, inject, Input, OnChanges, OnInit, Output, QueryList, SimpleChanges, TemplateRef, ViewChild } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { filter, timer } from \"rxjs\";\r\nimport { ReadonlyDirective, CfTemplate } from \"../../shared/directives\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { appendToBody, isNumberArray, isOuter, isStringArray, selectIndexMinMax, setElementRect } from \"../../shared/helpers/helpers\";\r\nimport { AUTOCOMPLETE_FILTER_FUNCTION_CONTAINS } from \"./autocomplete.const\";\r\nimport { AutocompleteFilterFunction } from \"./autocomplete.interfaces\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\n\r\n@Component({\r\n\tselector: 'cf-autocomplete',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule\r\n\t],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => AutocompleteComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t],\r\n\ttemplate: `\r\n\t\t<div class=\"cf-floating-label-container\">\r\n\t\t\t<input #input [disabled]=\"isDisabled\" [readonly]=\"isReadonly\" (focus)=\"focusFromInput()\" (keydown)=\"keydown($event)\" (keyup)=\"keyup($event)\" [(ngModel)]=\"value\" (ngModelChange)=\"ngModelChange()\" (blur)=\"blur()\" class=\"cf-input-container-default-input\" />\r\n\t\t\t<label class=\"cf-floating-label\" [ngClass]=\"{'float': focused || filled}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n\t\t</div>\r\n\t\t<span class=\"cf-input-clear remixicon close-circle-fill\" *ngIf=\"clearable && filled && !this.isReadonly && !this.isDisabled\" (click)=\"clearClicked()\"></span>\r\n\t\t<div class=\"cf-autocomplete-items\" #autocompleteItemsList [ngStyle]=\"{'max-height': height}\"  *ngIf=\"isOpened\">\r\n\t\t\t<div *ngFor=\"let filteredValue of filteredValues; let i = index;\" [ngClass]=\"{'hovered': this.selectedIndex === i}\" class=\"autocomplete-item\" (click)=\"valueClicked($event, filteredValue)\" (mouseenter)=\"selectItemIndex(i, false)\" (mouseleave)=\"selectItemIndex(null, false)\">\r\n\t\t\t\t<ng-container *ngIf=\"itemTemplate !== null\">\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: filteredValue, index: i}\"></ng-container>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<ng-container *ngIf=\"itemTemplate === null\">{{filteredValue[labelId]}}</ng-container>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t`,\r\n    host: {\r\n        class: 'cf-input-container cf-autocomplete'\r\n    }\r\n})\r\nexport class AutocompleteComponent extends FormItem implements OnInit, OnChanges, AfterContentInit, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\t@Input() values: any[] = [];\r\n\t@Input() value: string = '';\r\n\t@Input() labelId: string = 'label';\r\n\t@Input() valueId: string = 'value';\r\n\t@Input() height: string = '250px';\r\n\t@HostBinding('style.width') @Input() width: string = 'auto';\r\n\t@Input() dropdownWidth: string | null = null;\r\n\t@Input() emptyStringIsNull: boolean = false;\r\n\t@Input() openOnFocus: boolean = true;\r\n\t@Input() selectMode: 'label' | 'value' | 'object' = 'object';\r\n\t@Input() scrollIntoViewOptions: ScrollIntoViewOptions | boolean = {\r\n\t\tbehavior: 'auto',\r\n\t\tblock: 'center',\r\n\t\tinline: 'center'\r\n\t};\r\n\t@Input() inputDisabled: boolean = false;\r\n\t@Input() filterFunction: AutocompleteFilterFunction | null = AUTOCOMPLETE_FILTER_FUNCTION_CONTAINS;\r\n\r\n\t@ViewChild('input') input: ElementRef<HTMLInputElement> | undefined = undefined;\r\n\t@ViewChild('autocompleteItemsList') autocompleteItemsList: ElementRef<HTMLDivElement> | undefined = undefined;\r\n\r\n\t@Output() onSelect: EventEmitter<any> = new EventEmitter();\r\n\t@Output() onChanged: EventEmitter<string> = new EventEmitter();\r\n\t@Output() onFocus: EventEmitter<void> = new EventEmitter();\r\n\t@Output() onEnter: EventEmitter<number | null> = new EventEmitter();\r\n\r\n\t@ContentChildren(CfTemplate) templates: QueryList<CfTemplate> = new QueryList();\r\n\r\n\titemTemplate: TemplateRef<any> | null = null;\r\n\r\n\topened: boolean = false;\r\n\tprocessedValues: any[] = [];\r\n\tfilteredValues: any[] = [];\r\n\tselectedIndex: number | null = null;\r\n\r\n\touterFocus: boolean = false;\r\n\r\n\tkeepFocus: boolean = false;\r\n\r\n\toverride enterAsTabType: string = 'autocomplete';\r\n\r\n\tget isOpened(): boolean {\r\n\t\treturn this.opened && this.filteredValues.length > 0;\r\n\t}\r\n\r\n\tget filled(): boolean {\r\n\t\treturn this.value !== undefined && typeof this.value === 'string' && this.value.length > 0;\r\n\t}\r\n\r\n\tngModelChange(): void {\r\n\t\tthis.selectValue(this.value);\r\n\t\tif (this.filteredValues.length < 1) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t}\r\n\r\n\tclearClicked(): void {\r\n\t\tthis.defaultClear(() => {\r\n\t\t\tthis.focused = false;\r\n\t\t\tthis.value = '';\r\n\t\t});\r\n\t}\r\n\r\n\tfilterValues(): void {\r\n\t\tthis.selectedIndex = null;\r\n\t\tif (this.value === undefined || this.value === null || this.value.length === 0 || this.filterFunction === null) {\r\n\t\t\tthis.filteredValues = [...this.processedValues];\r\n\t\t} else {\r\n\t\t\tthis.filteredValues = this.filterFunction(this.processedValues, this.labelId, this.value);\r\n\t\t}\r\n\t\tif (this.isOpened) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tvalueClicked(event: MouseEvent, value: any): void {\r\n\t\tevent.stopPropagation();\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.focus();\r\n\t\t}\r\n\t\tthis.emitSelected(value);\r\n\t\tthis.selectValue(value);\r\n\t\tthis.close();\r\n\t}\r\n\t\r\n\temitSelected(value: any): void {\r\n\t\tswitch (this.selectMode) {\r\n\t\t\tcase 'label': this.onSelect.emit(value[this.labelId]); break;\r\n\t\t\tcase 'value': this.onSelect.emit(value[this.valueId]); break;\r\n\t\t\tcase 'object': this.onSelect.emit(value); break;\r\n\t\t}\r\n\t}\r\n\r\n\tselectValue(input: any): void {\r\n\r\n\t\tconst label: any = typeof input === 'string' ? input : input[this.labelId];\r\n\t\tconst value: any = typeof input === 'string' ? input : input[this.valueId];\r\n\r\n\t\tthis.value = label;\r\n\t\tthis.filterValues();\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(value);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tthis.onChanged.emit(value);\r\n\t}\r\n\r\n\toverride focus(): void {\r\n        if (this.focused || this.isDisabled || this.isReadonly) {\r\n            return;\r\n        }\r\n\t\tthis.outerFocus = true;\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.focus();\r\n\t\t}\r\n\t\tthis.outerFocus = false;\r\n\t\tif (this.openOnFocus) {\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t\tthis.focused = true;\r\n\t\tthis.onFocus.emit();\r\n\t\ttimer(0).subscribe(() => {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n\tfocusFromInput(): void {\r\n        if (this.focused || this.isDisabled || this.isReadonly || this.outerFocus) {\r\n            return;\r\n        }\r\n\t\tif (this.openOnFocus) {\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t\tthis.focused = true;\r\n\t\tthis.onFocus.emit();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\topen(): void {\r\n\t\tif (this.opened || this.filteredValues.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n        const nativeElementRect: DOMRect = this.element.nativeElement.getBoundingClientRect();\r\n\r\n\t\tthis.opened = true;\r\n\t\tthis.cdr.detectChanges();\r\n\r\n        // APPEND TO BODY\r\n\t\tif (this.autocompleteItemsList === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n        appendToBody(this.autocompleteItemsList.nativeElement);\r\n        const width: string = this.dropdownWidth !== null ? this.dropdownWidth : nativeElementRect.width.toString() + 'px';\r\n        setElementRect(this.element.nativeElement, this.autocompleteItemsList.nativeElement, width, 'auto');\r\n\t}\r\n\r\n\tclose(): void {\r\n\t\tif (this.opened) {\r\n\t\t\tthis.opened = false;\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tselectItemIndex(index: number | null, scrollTo: boolean = true): void {\r\n\t\tthis.selectedIndex = index;\r\n\t\tif (scrollTo) {\r\n\t\t\tthis.scrollToSelectedItemIndex();\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tscrollToSelectedItemIndex(): void {\r\n\t\tif (\r\n\t\t\tthis.selectedIndex !== null &&\r\n\t\t\tthis.autocompleteItemsList !== undefined &&\r\n\t\t\tthis.autocompleteItemsList.nativeElement.children[this.selectedIndex] !== undefined\r\n\t\t) {\r\n\t\t\tthis.autocompleteItemsList.nativeElement.children[this.selectedIndex].scrollIntoView(this.scrollIntoViewOptions);\r\n\t\t}\r\n\t}\r\n\r\n\tkeyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tthis.onKeyup.emit(keyboardEvent);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'enter') {\r\n\t\t\tif (this.opened) {\r\n\t\t\t\tif (this.selectedIndex !== null && this.filteredValues[this.selectedIndex] !== undefined) {\r\n\t\t\t\t\tthis.onEnter.emit(this.selectedIndex);\r\n\t\t\t\t\tthis.emitSelected(this.filteredValues[this.selectedIndex]);\r\n\t\t\t\t\tthis.selectValue(this.filteredValues[this.selectedIndex]);\r\n\t\t\t\t\tthis.selectItemIndex(null);\r\n\t\t\t\t\tthis.close();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.onEnter.emit(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tkeyboardEvent.preventDefault();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'escape') {\r\n\t\t\tthis.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tkeydown(keyboardEvent: KeyboardEvent): void {\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'arrowdown' && this.filteredValues.length > 0) {\r\n\t\t\tthis.open();\r\n\t\t\tif (this.selectedIndex === null) {\r\n\t\t\t\tthis.selectItemIndex(0);\r\n\t\t\t} else {\r\n\t\t\t\tthis.selectItemIndex(selectIndexMinMax(this.selectedIndex, 'down', this.filteredValues.length - 1))\r\n\t\t\t}\r\n\t\t\tkeyboardEvent.preventDefault();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'arrowup' && this.filteredValues.length > 0) {\r\n\t\t\tthis.open();\r\n\t\t\tif (this.selectedIndex === null) {\r\n\t\t\t\tthis.selectItemIndex(this.filteredValues.length - 1);\r\n\t\t\t} else {\r\n\t\t\t\tthis.selectItemIndex(selectIndexMinMax(this.selectedIndex, 'up', this.filteredValues.length - 1));\r\n\t\t\t}\r\n\t\t\tkeyboardEvent.preventDefault();\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tblur(): void {\r\n\t\tif (this.keepFocus) {\r\n\t\t\tthis.keepFocus = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.focused = false;\r\n\t\tthis.selectedIndex = null;\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.blur();\r\n\t\t}\r\n\t\tif (this.opened) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t}\r\n\r\n\toverride writeValue(value: string): void {\r\n\t\tthis.value = value;\r\n\t\tthis.onChanged.emit(value);\r\n\t\tthis.filterValues();\r\n\t\tif (!this.opened) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.setControlComponent();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprocessValues(): void {\r\n\t\tif (isStringArray(this.values)) {\r\n\t\t\tthis.processedValues = (this.values as string[]).map((value: string) => ({\r\n\t\t\t\tlabel: value,\r\n\t\t\t\tvalue\r\n\t\t\t}));\r\n\t\t\tthis.filterValues();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (isNumberArray(this.values)) {\r\n\t\t\tthis.processedValues = (this.values as number[]).map((value: number) => ({\r\n\t\t\t\tlabel: value.toString(),\r\n\t\t\t\tvalue\r\n\t\t\t}));\r\n\t\t\tthis.filterValues();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.processedValues = [...this.values];\r\n\t\tthis.filterValues();\r\n\t}\r\n\r\n\tsetValues(values: any[]): void {\r\n\t\tthis.values = values;\r\n\t\tthis.processValues();\r\n\t}\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tlet processValues: boolean = false;\r\n\t\tif (changes['values'] !== undefined || changes['value'] !== undefined) {\r\n\t\t\tprocessValues = true;\r\n\t\t}\r\n\t\tif (processValues) {\r\n\t\t\tthis.processValues();\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tthis.templates.forEach((cfTemplate: CfTemplate) => {\r\n\t\t\tconst name: string | null = cfTemplate.getName();\r\n\t\t\tif (name === 'item') {\r\n\t\t\t\tthis.itemTemplate = cfTemplate.template;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed()\r\n\t\t).subscribe((event: MouseEvent) => {\r\n\t\t\tif (this.autocompleteItemsList === undefined) {\r\n\t\t\t\tif (isOuter([this.element.nativeElement], event)) {\r\n\t\t\t\t\tthis.focused = false;\r\n\t\t\t\t\tthis.close();\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.keepFocus = true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (isOuter([this.element.nativeElement, this.autocompleteItemsList.nativeElement], event)) {\r\n\t\t\t\t\tthis.focused = false;\r\n\t\t\t\t\tthis.close();\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.keepFocus = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => this.input !== undefined && event.target !== this.input.nativeElement)\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.focused = false;\r\n\t\t\tthis.opened = false;\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { BreadcrumbMenuItem } from \"../../interfaces\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class CfBreadcrumbService {\r\n\r\n    items: Subject<BreadcrumbMenuItem[]> = new Subject();\r\n\r\n    setItems(items: BreadcrumbMenuItem[]): void {\r\n        this.items.next(items);\r\n    }\r\n\r\n}","import { CommonModule } from \"@angular/common\";\r\nimport { Component, inject, Input } from \"@angular/core\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { BreadcrumbMenuItem } from \"../../interfaces\";\r\nimport { CfBreadcrumbService } from \"./breadcrumb.service\";\r\n\r\n@Component({\r\n    selector: 'cf-breadcrumb',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tRouterModule\r\n\t],\r\n    template: `\r\n        <div class=\"cf-breadcrumb\">\r\n            <ng-template [ngForOf]=\"items\" ngFor let-item let-end=\"last\">\r\n                <div class=\"item\" [routerLink]=\"item.routerLink ? item.routerLink : []\" [ngClass]=\"{'nav-item': item.routerLink}\">\r\n                    <span *ngIf=\"item.icon\" [class]=\"'icon remixicon ' + item.icon\"></span>\r\n                    <span *ngIf=\"item.label\" class=\"label\">\r\n                        {{item.label}}\r\n                    </span>\r\n                </div>\r\n                <span *ngIf=\"!end\" class=\"chevron remixicon arrow-right-s-line\"></span>\r\n            </ng-template>\r\n        </div>\r\n    `,\r\n})\r\nexport class BreadcrumbComponent {\r\n\r\n    breadcrumbService: CfBreadcrumbService = inject(CfBreadcrumbService);\r\n\r\n    @Input() items: BreadcrumbMenuItem[] = [ ];\r\n\r\n    constructor() {\r\n        this.breadcrumbService.items.subscribe((rsp) => {\r\n            this.items = rsp;\r\n        });\r\n    }\r\n\r\n}\r\n","import { ChartAxisValuePipeFunction, ChartStyleFull, ChartStyle } from \"./chart.interfaces\";\r\n\r\n\r\nexport const CHART_DEFAULT_AXIS_VALUE_PIPE: ChartAxisValuePipeFunction = ({ value }) => {\r\n\tif (value === null) {\r\n\t\treturn '';\r\n\t}\r\n\tconst maxIntParts: number = Math.max(0, 3 - parseInt(value.toString()).toString().length);\r\n\treturn value.toFixed(maxIntParts);\r\n}\r\n\r\nexport const CHART_STYLE_DEFAULT: ChartStyleFull = {\r\n\tfill: '#000000',\r\n\tfontFamily: 'worksans-regular',\r\n\tfontSize: 16,\r\n\topacity: 1,\r\n\tstroke: '#000000',\r\n\tlineWidth: 1,\r\n\ttextAlign: 'start',\r\n\ttextBaseline: 'middle',\r\n\ttextStyle: null,\r\n\tlineDashSegments: []\r\n}\r\n\r\nexport const CHART_RANGE_SELECTION_DEFAULT_LINE_STYLE: ChartStyle = {\r\n\tstroke: 'rgba(9, 132, 227, 1.0)'\r\n}\r\n\r\nexport const CHART_RANGE_SELECTION_DEFAULT_RECT_STYLE: ChartStyle = {\r\n\tfill: 'rgba(116, 185, 255, 0.4)'\r\n}\r\n\r\nexport const CHART_BACKGROUND_DEFAULT_STYLE: ChartStyle = {\r\n\tfill: '#ffffff'\r\n}\r\n","import { ChartComponent } from \"./chart.component\";\r\n\r\nexport interface ChartStyleFull {\r\n\tfill: string | CanvasGradient | CanvasPattern;\r\n\tstroke: string | CanvasGradient | CanvasPattern;\r\n\tlineWidth: number | null;\r\n\ttextAlign: CanvasTextAlign;\r\n\ttextBaseline: CanvasTextBaseline;\r\n\topacity: number | null;\r\n\ttextStyle: 'italic' | 'bold' | null;\r\n\tfontSize: number;\r\n\tfontFamily: string;\r\n\tlineDashSegments: number[];\r\n};\r\n\r\nexport type ChartStyle = Partial<ChartStyleFull> | null;\r\n\r\nexport interface ChartCoordinates {\r\n\tleft: number;\r\n\ttop: number;\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\nexport interface ChartPosition {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport interface ChartSize {\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\nexport enum SeriesType {\r\n\tBAR = 'BAR',\r\n\tLINE = 'LINE',\r\n\tLINE_STEP_BEFORE = 'LINE_STEP_BEFORE',\r\n\tLINE_STEP_AFTER = 'LINE_STEP_AFTER',\r\n\tPOINTS = 'POINTS',\r\n\tAREA = 'AREA',\r\n\tPIE = 'PIE'\r\n}\r\n\r\nexport enum AxisType {\r\n\tLEFT = 'LEFT',\r\n\tRIGHT = 'RIGHT'\r\n}\r\n\r\n/**\r\n * ChartMargin\r\n */\r\nexport type ChartMargin = {\r\n\ttop?: number;\r\n\tright?: number;\r\n\tbottom?: number;\r\n\tleft?: number;\r\n};\r\n\r\nexport type ChartPadding = {\r\n\ttop?: number;\r\n\tright?: number;\r\n\tbottom?: number;\r\n\tleft?: number;\r\n};\r\n\r\nexport interface ChartMarginProcessed {\r\n\ttop: number;\r\n\tright: number;\r\n\tbottom: number;\r\n\tleft: number;\r\n}\r\n\r\nexport interface AxisMaxValueAndMode {\r\n\tvalue: number | null;\r\n\tmode: MaxMode | null;\r\n}\r\n\r\nexport enum ChartMode {\r\n\tDEFAULT = 'DEFAULT',\r\n\tDATE = 'DATE'\r\n}\r\n\r\nexport enum ChartDateAggregation {\r\n\tHOUR = 'HOUR',\r\n\tDAY = 'DAY',\r\n\tMONTH = 'MONTH',\r\n\tYEAR = 'YEAR'\r\n}\r\n\r\nexport enum ChartDateAggregationMode {\r\n\tMAX = 'MAX',\r\n\tMIN = 'MIN',\r\n\tSUM = 'SUM',\r\n\tFIRST = 'FIRST',\r\n\tLAST = 'LAST'\r\n}\r\n\r\nexport enum LabelDisplayMethod {\r\n\tCLOSEST = 'CLOSEST',\r\n\tALL = 'ALL'\r\n}\r\n\r\nexport type ChartConfiguration = {\r\n\twidth?: 'auto' | number;\r\n\theight?: 'auto' | number;\r\n\r\n\t/**\r\n\t * Global margin for chart\r\n\t */\r\n\tmargin?: ChartMargin;\r\n\r\n\t/** We can set the left and right gap for the bar charts */\r\n\tbarChartGap?: number;\r\n\t\r\n\t/** If we have multiple bar charts set, we can set the gap between the charts */\r\n\tbarChartGapBetween?: number;\r\n\tshowLegend?: boolean;\r\n\tseries?: Series[];\r\n\r\n\t/** Left axis */\r\n\tleftAxis?: Axis;\r\n\r\n\t/** Right axis */\r\n\trightAxis?: Axis;\r\n\r\n\t/** Title */\r\n\ttitle?: string | null;\r\n\r\n\t/** Height of the header in pixels */\r\n\theaderHeight?: number;\r\n\r\n\t/** Margin for header */\r\n\theaderMargin?: ChartMargin;\r\n\r\n\t/** Space between the legend items in pixels */\r\n\tlegendSpaceBetween?: number;\r\n\r\n\t/** Legend item size */\r\n\tlegendItemSize?: number;\r\n\r\n\t/** Legend space before title */\r\n\tlegendSpaceBeforeTitle?: number;\r\n\r\n\t/** Legend title style */\r\n\tlegendTitleStyle?: ChartStyle;\r\n\r\n\t/** Show header */\r\n\tshowHeader?: boolean;\r\n\ttitleStyle?: ChartStyle | null;\r\n\tbackgroundStyle?: ChartStyle;\r\n\tlabelTransform?: LabelPipeFunction | null;\r\n\tzoom?: boolean;\r\n\trangeSelection?: boolean;\r\n\taxisValuePipe?: ChartAxisValuePipeFunction | null;\r\n\tshowHorizontalAxis?: boolean;\r\n\tshowZeroLine?: boolean;\r\n\trangeIndexStart?: number | null;\r\n\trangeIndexEnd?: number | null;\r\n\tmode?: ChartMode;\r\n\tdateAggregation?: ChartDateAggregation;\r\n\tdateAggregationMode?: ChartDateAggregationMode;\r\n\trangeSelectionLineStyle?: ChartStyle;\r\n\trangeSelectionRectStyle?: ChartStyle;\r\n\tdisplayCross?: boolean;\r\n\tcrossStyle?: ChartStyle;\r\n\tpieTemplates?: ChartPieTemplate[];\r\n\tfooterLabelStyle?: ChartStyle;\r\n\tfooterMarginTop?: number;\r\n\tlabelDisplayMethod?: LabelDisplayMethod;\r\n\thorizontalLineStyle?: ChartStyle | null;\r\n\tshowHorizontalLines?: boolean;\r\n\tverticalLineStyle?: ChartStyle | null;\r\n\tshowVerticalLines?: boolean;\r\n\tfillEmptyDatesWithLastValue?: boolean;\r\n}\r\n\r\nexport interface ProcessedChartConfiguration {\r\n\twidth: 'auto' | number;\r\n\theight: 'auto' | number;\r\n\tmargin: ChartMargin;\r\n\tbarChartGap: number;\r\n\tbarChartGapBetween: number;\r\n\tshowLegend: boolean;\r\n\tseries: ProcessedSeries[];\r\n\tleftAxis: ProcessedAxis | null;\r\n\trightAxis: ProcessedAxis | null;\r\n\ttitle: string | null;\r\n\theaderHeight: number;\r\n\theaderMargin: ChartMargin;\r\n\tlegendSpaceBetween: number;\r\n\tlegendItemSize: number;\r\n\tlegendSpaceBeforeTitle: number;\r\n\tlegendTitleStyle: ChartStyle | null;\r\n\tshowHeader: boolean;\r\n\ttitleStyle: ChartStyle | null;\r\n\tfooterLabelStyle: ChartStyle | null;\r\n\tbackgroundStyle: ChartStyle;\r\n\tlabelTransform: LabelPipeFunction | null;\r\n\tzoom: boolean;\r\n\trangeSelection: boolean;\r\n\taxisValuePipe: ChartAxisValuePipeFunction | null;\r\n\tshowHorizontalAxis: boolean;\r\n\tshowZeroLine: boolean;\r\n\trangeIndexStart: number | null;\r\n\trangeIndexEnd: number | null;\r\n\tmode: ChartMode;\r\n\tdateAggregation: ChartDateAggregation;\r\n\tdateAggregationMode: ChartDateAggregationMode;\r\n\trangeSelectionLineStyle: ChartStyle | null;\r\n\trangeSelectionRectStyle: ChartStyle | null;\r\n\tdisplayCross: boolean;\r\n\tcrossStyle: ChartStyle | null;\r\n\tpieTemplates: ChartPieTemplate[];\r\n\tfooterMarginTop: number;\r\n\tlabelDisplayMethod: LabelDisplayMethod;\r\n\thorizontalLineStyle: ChartStyle | null;\r\n\tshowHorizontalLines: boolean;\r\n\tverticalLineStyle: ChartStyle | null;\r\n\tshowVerticalLines: boolean;\r\n\tfillEmptyDatesWithLastValue: boolean;\r\n}\r\n\r\nexport enum ChartPieLegendPosition {\r\n\tTOP = 'TOP',\r\n\tBOTTOM = 'BOTTOM',\r\n\tLEFT = 'LEFT',\r\n\tRIGHT = 'RIGHT'\r\n}\r\n\r\nexport interface ChartPieTemplate {\r\n\tleftPercent: number,\r\n\ttopPercent: number;\r\n\twidthPercent: number;\r\n\theightPercent: number;\r\n\tbackgroundStyle?: ChartStyle;\r\n\titemStyles?: ChartStyle[];\r\n\tlegendPosition?: ChartPieLegendPosition;\r\n\tlegendBackgroundStyle?: ChartStyle;\r\n\tlegendPadding?: ChartPadding;\r\n\tlegendMargin?: ChartPadding;\r\n\tdisplayLegend?: boolean;\r\n\tlegendLabelStyle?: ChartStyle;\r\n\tlegendSize?: number;\r\n\tlegendGap?: number;\r\n\tlegendGapBetween?: number;\r\n\tdisplayPieValue?: boolean;\r\n\tpieValueStyle?: ChartStyle;\r\n}\r\n\r\nexport interface ChartPieTemplateFull {\r\n\tleftPercent: number,\r\n\ttopPercent: number;\r\n\twidthPercent: number;\r\n\theightPercent: number;\r\n\tbackgroundStyle: ChartStyle;\r\n\titemStyles: ChartStyle[];\r\n\tlegendPosition: ChartPieLegendPosition;\r\n\tlegendBackgroundStyle: ChartStyle;\r\n\tlegendPadding: ChartPadding;\r\n\tlegendMargin: ChartPadding;\r\n\tdisplayLegend: boolean;\r\n\tlegendLabelStyle: ChartStyle;\r\n\tlegendSize: number;\r\n\tlegendGap: number;\r\n\tlegendGapBetween: number;\r\n\tdisplayPieValue: boolean;\r\n\tpieValueStyle: ChartStyle;\r\n}\r\n\r\nexport interface ChartArcInformation {\r\n\tstartAnglePosition: ChartPosition;\r\n\tendAnglePosition: ChartPosition;\r\n\tmiddleAnglePosition: ChartPosition;\r\n\tcenterPosition: ChartPosition;\r\n}\r\n\r\nexport interface ChartDrawColumnSeriesValueInformation {\r\n\tseries: ProcessedSeries;\r\n\tseriesIndex: number;\r\n\tvalue: number;\r\n\tpointPosition: ChartPosition;\r\n}\r\n\r\nexport interface ChartDrawColumnInformation {\r\n\tcoordinates: ChartCoordinates,\r\n\tindex: number,\r\n\tseriesValues: ChartDrawColumnSeriesValueInformation[],\r\n\tlabel: string | number\r\n};\r\n\r\nexport type ChartPieTemplateDrawFunctionParams = {\r\n\tchart: ChartComponent\r\n}\r\n\r\nexport type ChartPieTemplateDrawFunction = (params: ChartPieTemplateDrawFunctionParams) => ChartPieTemplate[];\r\n\r\nexport type ChartColumnHoverDrawFunctionParams = {\r\n\tchart: ChartComponent,\r\n\tdrawColumnInformation: ChartDrawColumnInformation,\r\n\tmouseMoveEventPosition: ChartPosition | null\r\n}\r\n\r\nexport type ChartColumnHoverDrawFunction = (params: ChartColumnHoverDrawFunctionParams) => void;\r\n\r\nexport type Axis = {\r\n\tmax?: number;\r\n\tmaxMode?: MaxMode;\r\n\tmin?: number;\r\n\tdivide?: number;\r\n\tenabled?: boolean;\r\n\tsteps?: number;\r\n\tlabelStyle?: ChartStyle;\r\n\tshowTitle?: boolean;\r\n\ttitleSpace?: number;\r\n\ttitleStyle?: ChartStyle;\r\n\tvisible?: boolean;\r\n};\r\n\r\nexport enum MaxMode {\r\n\tEXACT = 'EXACT',\r\n\tPERCENT = 'PERCENT',\r\n\tINCREMENT = 'INCREMENT'\r\n}\r\n\r\nexport interface ProcessedAxis {\r\n\tmax: number | null;\r\n\tmaxMode: MaxMode;\r\n\tmin: number | null;\r\n\tdivide: number;\r\n\tenabled: boolean;\r\n\tsteps: number | null;\r\n\tlabelStyle: ChartStyle | null;\r\n\tshowTitle: boolean;\r\n\ttitleSpace: number;\r\n\ttitleStyle: ChartStyle | null;\r\n\tvisible: boolean;\r\n}\r\n\r\nexport interface ChartSeriesValuePipeFunctionParams {\r\n\tchart: ChartComponent;\r\n\tseries: ProcessedSeries;\r\n\tvalueInformation: ChartDrawColumnSeriesValueInformation;\r\n\tdrawColumnInformation: ChartDrawColumnInformation;\r\n}\r\nexport type ChartSeriesValuePipeFunction = (params: ChartSeriesValuePipeFunctionParams) => string;\r\n\r\nexport interface ChartAxisValuePipeFunctionParams {\r\n\taxisType: AxisType;\r\n\tvalue: number | null;\r\n}\r\nexport type ChartAxisValuePipeFunction = (params: ChartAxisValuePipeFunctionParams) => string;\r\n\r\nexport interface LabelPipeFunctionParams {\r\n\tlabel: string | number;\r\n}\r\nexport type LabelPipeFunction = (params: LabelPipeFunctionParams) => string | number;\r\n\r\nexport type SeriesData = ((number | null | undefined) | object | [number, string] | [number, number]);\r\n\r\nexport enum SeriesPointMode {\r\n\tALWAYS = 'ALWAYS',\r\n\tNEVER = 'NEVER',\r\n\tHOVER = 'HOVER'\r\n}\r\n\r\nexport enum SeriesPointType {\r\n\tSQUARE = 'SQUARE',\r\n\tCIRCLE = 'CIRCLE'\r\n}\r\n\r\nexport interface Series {\r\n\ttype: SeriesType;\r\n\tdata: SeriesData[];\r\n\tid?: string;\r\n\taxis?: AxisType;\r\n\ttitle?: string;\r\n\tshowInLegend?: boolean;\r\n\tpointType?: SeriesPointType;\r\n\tpointSize?: number;\r\n\tpointStyle?: ChartStyle;\r\n\tpointMode?: SeriesPointMode;\r\n\tbarStyle?: ChartStyle;\r\n\tlineStyle?: ChartStyle;\r\n\tareaStyle?: ChartStyle;\r\n\tpieStyles?: ChartStyle[];\r\n\tvaluePipeFunction?: ChartSeriesValuePipeFunction;\r\n\tlabelId?: string;\r\n\tvalueId?: string;\r\n\tvisible?: boolean;\r\n}\r\n\r\nexport interface ProcessedSeries {\r\n\tid: string | number;\r\n\ttype: SeriesType;\r\n\tdata: SeriesData[];\r\n\taxis: AxisType;\r\n\ttitle: string;\r\n\tshowInLegend: boolean;\r\n\tprocessedData: SeriesDataProcessed[];\r\n\tpointType: SeriesPointType;\r\n\tpointMode: SeriesPointMode;\r\n\tpointSize: number;\r\n\tpointStyle: ChartStyle | null;\r\n\tbarStyle: ChartStyle | null;\r\n\tlineStyle: ChartStyle | null;\r\n\tareaStyle: ChartStyle | null;\r\n\tpieStyles: ChartStyle[];\r\n\tbarChartIndex: number;\r\n\tvisible: boolean;\r\n\tlabelId: string;\r\n\tvalueId: string;\r\n\tvaluePipeFunction: ChartSeriesValuePipeFunction;\r\n}\r\n\r\nexport interface SeriesDataProcessed {\r\n\tlabel: string | number;\r\n\tvalue: number | null | undefined;\r\n}\r\n\r\nexport interface AxisDrawInfo {\r\n\tmin: number;\r\n\tmax: number;\r\n\tcoordinates: ChartCoordinates;\r\n\tmaxLabelWidth: number;\r\n\tsteps: number | null;\r\n}\r\n\r\nexport interface ChartDrawStartedParams {\r\n\tchart: ChartComponent;\r\n}\r\n\r\nexport interface ChartDrawFinishedParams {\r\n\tchart: ChartComponent;\r\n}\r\n\r\nexport interface ChartContextMenuItem {\r\n\ttitle: string;\r\n\ticon: string;\r\n\taction: (() => void) | null;\r\n\tchildren: ChartContextMenuItem[];\r\n}\r\n\r\nexport interface ChartSvgElementConfiguration {\r\n\tclipPathId?: string;\r\n}\r\n\r\nexport interface ChartSvgLineConfiguration extends ChartSvgElementConfiguration {\r\n\tstartPosition?: ChartPosition;\r\n\tendPosition?: ChartPosition;\r\n}\r\n\r\nexport interface ChartSvgRectConfiguration extends ChartSvgElementConfiguration {\r\n\tstartPosition?: ChartPosition;\r\n\twidth?: number;\r\n\theight?: number;\r\n}\r\n\r\nexport interface ChartSvgPathConfiguration extends ChartSvgElementConfiguration {\r\n\tposition?: ChartPosition;\r\n\twidth?: number;\r\n\theight?: number;\r\n}\r\n\r\nexport interface ChartClipPathDefConfiguration {\r\n\tstartPosition?: ChartPosition;\r\n\twidth?: number;\r\n\theight?: number;\r\n\tid?: string;\r\n}\r\n\r\nexport interface AxisDrawValue {\r\n\toriginalValue: (number | null);\r\n\tdisplayValue: string;\r\n\tskipValueDisplay: boolean;\r\n\tvalueScalePercent: number;\r\n}\r\n","import { formatDate, FormatWidth, getLocaleDateFormat } from \"@angular/common\";\r\nimport { max, min, sum } from \"../../shared\";\r\nimport { ChartComponent } from \"./chart.component\";\r\nimport { AxisType, ProcessedChartConfiguration, ChartDateAggregation, ChartDateAggregationMode, ChartMode, MaxMode, Series, SeriesData, SeriesDataProcessed, ProcessedSeries, ProcessedAxis, ChartMargin, ChartMarginProcessed, SeriesPointMode, SeriesPointType } from \"./chart.interfaces\";\r\n\r\nexport function modifySeriesMax(axis: ProcessedAxis, max: number | null): number | null {\r\n\r\n\tif (max === null) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (axis.max === null) {\r\n\t\treturn max;\r\n\t}\r\n\r\n\tif (axis.max !== null) {\r\n\t\tif (axis.maxMode === MaxMode.INCREMENT) {\r\n\t\t\tmax += axis.max;\r\n\t\t}\r\n\t\r\n\t\tif (axis.maxMode === MaxMode.PERCENT) {\r\n\t\t\tmax = (max / 100) * (100 + axis.max);\r\n\t\t}\r\n\t}\r\n\r\n\treturn max;\r\n}\r\n\r\nexport function roundMax(max: number): number {\r\n\tconst maxInt: number = parseInt(max.toString());\r\n\tconst maxIntString: string = maxInt.toString();\r\n\tconst pow: number = maxIntString.length - 2;\r\n\tconst round: number = Math.pow(10, pow);\r\n\tlet nextMax: number = Math.ceil(max / round);\r\n\tconst newMax: number = nextMax * round;\r\n\tif (max * 1.2 >= newMax) {\r\n\t\tnextMax += 1;\r\n\t}\r\n\tmax = nextMax * round;\r\n\treturn max;\r\n}\r\n\r\nexport function getMaxOfProcessedSeriesData(seriesDataProcessed: SeriesDataProcessed[]): number | null {\r\n\tlet max: number | null = null;\r\n\tfor (let i = 0; i < seriesDataProcessed.length; i++) {\r\n\t\tconst value: number | null | undefined = seriesDataProcessed[i].value;\r\n\t\tif (value === null || value === undefined) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (max === null) {\r\n\t\t\tmax = value;\r\n\t\t} else {\r\n\t\t\tif (value > max) {\r\n\t\t\t\tmax = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn max;\r\n}\r\n\r\nexport function getMaxOfProcessedSeries(processedSeries: ProcessedSeries | ProcessedSeries[]): number | null {\r\n\tlet max: number | null = null;\r\n\tif (processedSeries instanceof Array) {\r\n\t\tfor (let p = 0; p < processedSeries.length; p++) {\r\n\t\t\tconst value: number | null = getMaxOfProcessedSeriesData(processedSeries[p].processedData);\r\n\t\t\tif (max === null) {\r\n\t\t\t\tmax = value;\r\n\t\t\t} else {\r\n\t\t\t\tif (value !== null && value > max) {\r\n\t\t\t\t\tmax = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\tconst value: number | null = getMaxOfProcessedSeriesData(processedSeries.processedData);\r\n\t\tif (max === null) {\r\n\t\t\tmax = value;\r\n\t\t} else {\r\n\t\t\tif (value !== null && value > max) {\r\n\t\t\t\tmax = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn max;\r\n}\r\n\r\n/**\r\n * Get max value of axis\r\n * \r\n * If we set `max` directly return with `axi.max`\r\n * \r\n * In case we set `max.mode` to `EXACT` and we set `max.value`, returns with `max.value`\r\n * \r\n * In other cases we try to process all the series that using this axis, collect the data and find the maximum value\r\n * \r\n * @param axis `ProcessedAxis`\r\n * @param processedChartConfiguration `ProcessedChartConfiguration`\r\n * @param axisType `axisType`\r\n * @returns `number | null`\r\n */\r\nexport function getMaxOfAxis(axis: ProcessedAxis, processedChartConfiguration: ProcessedChartConfiguration, axisType: AxisType): number | null {\r\n\r\n\tif (axis.max !== null && axis.maxMode === MaxMode.EXACT) {\r\n\t\treturn axis.max;\r\n\t}\r\n\r\n\tlet max: number | null = null;\r\n\r\n\tfor (let series of processedChartConfiguration.series) {\r\n\t\tif (!series.visible || series.axis !== axisType) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (series.axis === axisType) {\r\n\t\t\tconst maxOfAxis: number | null = getMaxOfProcessedSeries(series);\r\n\t\t\tif (maxOfAxis !== null) {\r\n\t\t\t\tif (max === null) {\r\n\t\t\t\t\tmax = maxOfAxis;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (maxOfAxis > max) {\r\n\t\t\t\t\t\tmax = maxOfAxis;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmax = modifySeriesMax(axis, max);\r\n\r\n\treturn max;\r\n}\r\n\r\nexport function getMinOfProcessedSeriesData(seriesDataProcessed: SeriesDataProcessed[]): number | null {\r\n\tlet min: number | null = null;\r\n\tfor (let i = 0; i < seriesDataProcessed.length; i++) {\r\n\t\tconst value: number | null | undefined = seriesDataProcessed[i].value;\r\n\t\tif (value === null || value === undefined) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (min === null) {\r\n\t\t\tmin = value;\r\n\t\t} else {\r\n\t\t\tif (value < min) {\r\n\t\t\t\tmin = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn min;\r\n}\r\n\r\nexport function getMinOfProcessedSeries(processedSeries: ProcessedSeries | ProcessedSeries[]): number | null {\r\n\tlet min: number | null = null;\r\n\tif (processedSeries instanceof Array) {\r\n\t\tfor (let p = 0; p < processedSeries.length; p++) {\r\n\t\t\tconst value: number | null = getMinOfProcessedSeriesData(processedSeries[p].processedData);\r\n\t\t\tif (min === null) {\r\n\t\t\t\tmin = value;\r\n\t\t\t} else {\r\n\t\t\t\tif (value !== null && value < min) {\r\n\t\t\t\t\tmin = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\tconst value: number | null = getMinOfProcessedSeriesData(processedSeries.processedData);\r\n\t\tif (min === null) {\r\n\t\t\tmin = value;\r\n\t\t} else {\r\n\t\t\tif (value !== null && value < min) {\r\n\t\t\t\tmin = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn min;\r\n}\r\n\r\nexport function getMinOfAxis(axis: ProcessedAxis, processedChartConfiguration: ProcessedChartConfiguration, axisType: AxisType): number | null {\r\n\r\n\tif (axis.min !== null) {\r\n\t\treturn axis.min;\r\n\t}\r\n\r\n\tlet min: number | null = null;\r\n\r\n\tfor (let series of processedChartConfiguration.series) {\r\n\t\tif (!series.visible || series.axis !== axisType) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (series.axis === axisType) {\r\n\t\t\tlet minOfSeries: number | null = getMinOfProcessedSeries(series);\r\n\t\t\tif (minOfSeries !== null) {\r\n\t\t\t\tif (min === null) {\r\n\t\t\t\t\tmin = minOfSeries;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (minOfSeries < min) {\r\n\t\t\t\t\t\tmin = minOfSeries\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn min;\r\n}\r\n\r\nexport function processData(data: SeriesData[], processedSeries: ProcessedSeries): SeriesDataProcessed[] {\r\n\tconst processedSeriesData: SeriesDataProcessed[] = [];\r\n\tfor (let i = 0; i < data.length; i++) {\r\n\t\tconst value: SeriesData = data[i];\r\n\t\tlet processedSeriesDataItem: SeriesDataProcessed | null = null;\r\n\t\tif (value instanceof Array) {\r\n\t\t\tif (typeof value[0] === 'number' && typeof value[1] === 'number') {\r\n\t\t\t\tprocessedSeriesDataItem = {\r\n\t\t\t\t\tvalue: value[0],\r\n\t\t\t\t\tlabel: value[1]\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tif (typeof value[0] === 'number' && typeof value[1] === 'string') {\r\n\t\t\t\tprocessedSeriesDataItem = {\r\n\t\t\t\t\tvalue: value[0],\r\n\t\t\t\t\tlabel: value[1]\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (typeof value === 'number' || typeof value === 'undefined' || value === null) {\r\n\t\t\t\tprocessedSeriesDataItem = {\r\n\t\t\t\t\tvalue: value as (number | null | undefined),\r\n\t\t\t\t\tlabel: i\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\t// OBJECT\r\n\t\t\t\tif (processedSeries.labelId in value && processedSeries.valueId in value) {\r\n\t\t\t\t\tprocessedSeriesDataItem = {\r\n\t\t\t\t\t\tlabel: (value as any)[processedSeries.labelId],\r\n\t\t\t\t\t\tvalue: (value as any)[processedSeries.valueId]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (processedSeriesDataItem !== null) {\r\n\t\t\tconst lastLabelIndex: number = processedSeriesData.findIndex((a) => processedSeriesDataItem !== null && processedSeriesDataItem.label === a.label);\r\n\t\t\tif (lastLabelIndex === -1) {\r\n\t\t\t\tprocessedSeriesData.push(processedSeriesDataItem);\r\n\t\t\t} else {\r\n\t\t\t\tprocessedSeriesData[lastLabelIndex] = {...processedSeriesDataItem};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn processedSeriesData;\r\n}\r\n\r\nexport function processMargin(margin: ChartMargin | undefined): ChartMarginProcessed {\r\n\tif (margin === undefined) {\r\n\t\treturn {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t}\r\n\t}\r\n\treturn {\r\n\t\ttop: margin.top || 0,\r\n\t\tright: margin.right || 0,\r\n\t\tbottom: margin.bottom || 0,\r\n\t\tleft: margin.left || 0\r\n\t}\r\n}\r\n\r\nexport function processSeries(series: Series[], processedChartConfiguration: ProcessedChartConfiguration, localeId: string, chart: ChartComponent): ProcessedSeries[] {\r\n\r\n\tconst processedSeries: ProcessedSeries[] = [];\r\n\r\n\tlet index: number = 0;\r\n\tfor (let seriesItem of series) {\r\n\t\tconst seriesProcessedItem: ProcessedSeries = {\r\n\t\t\tid: seriesItem.id ?? index,\r\n\t\t\ttype: seriesItem.type,\r\n\t\t\tdata: seriesItem.data,\r\n\t\t\taxis: seriesItem.axis ?? AxisType.LEFT,\r\n\t\t\tprocessedData: [],\r\n\t\t\tshowInLegend: seriesItem.showInLegend ?? true,\r\n\t\t\ttitle: seriesItem.title ?? index.toString(),\r\n\t\t\tareaStyle: seriesItem.areaStyle ?? null,\r\n\t\t\tbarStyle: seriesItem.barStyle ?? null,\r\n\t\t\tlineStyle: seriesItem.lineStyle ?? null,\r\n\t\t\tpointMode: seriesItem.pointMode ?? SeriesPointMode.HOVER,\r\n\t\t\tpointSize: seriesItem.pointSize ?? 10,\r\n\t\t\tpointType: seriesItem.pointType ?? SeriesPointType.CIRCLE,\r\n\t\t\tpointStyle: seriesItem.pointStyle ?? null,\r\n\t\t\tpieStyles: seriesItem.pieStyles ?? [],\r\n\t\t\tvisible: seriesItem.visible ?? true,\r\n\t\t\tbarChartIndex: 0,\r\n\t\t\tvaluePipeFunction: seriesItem.valuePipeFunction || chart.seriesValuePipeFunctionDefault,\r\n\t\t\tlabelId: seriesItem.labelId || 'label',\r\n\t\t\tvalueId: seriesItem.valueId || 'value'\r\n\t\t};\r\n\t\tif (processedChartConfiguration.mode === ChartMode.DEFAULT) {\r\n\t\t\tseriesProcessedItem.processedData = processData(seriesItem.data, seriesProcessedItem);\r\n\t\t}\r\n\t\tprocessedSeries.push(seriesProcessedItem);\r\n\t\tindex++;\r\n\t}\r\n\r\n\tprocessSeriesDate(processedChartConfiguration, processedSeries, localeId);\r\n\r\n\treturn processedSeries;\r\n}\r\n\r\nexport function processSeriesDate(processedChartConfiguration: ProcessedChartConfiguration, processedSeries: ProcessedSeries[], localeId: string): void {\r\n\r\n\tif (processedChartConfiguration.mode !== ChartMode.DATE) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (processedChartConfiguration.labelTransform === null) {\r\n\t\tprocessedChartConfiguration.labelTransform = ({ label }) => {\r\n\t\t\tlet format: string = getLocaleDateFormat(localeId, FormatWidth.Short) + ' HH:00';\r\n\t\t\tswitch(processedChartConfiguration.dateAggregation) {\r\n\t\t\t\tcase ChartDateAggregation.DAY:\r\n\t\t\t\t\tformat = getLocaleDateFormat(localeId, FormatWidth.Short);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase ChartDateAggregation.MONTH:\r\n\t\t\t\t\tformat = 'yyyy MMM';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase ChartDateAggregation.YEAR:\r\n\t\t\t\t\tformat = 'yyyy';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn formatDate(label, format, localeId);\r\n\t\t}\r\n\t}\r\n\r\n\tlet seriesDates: [number, number][][] = [];\r\n\tlet dates: number[] = [];\r\n\tfor (let s = 0; s < processedSeries.length; s++) {\r\n\t\tseriesDates[s] = [];\r\n\t\tfor (let dataItem of processedSeries[s].data) {\r\n\t\t\tlet date: number | null = null;\r\n\t\t\tif (dataItem instanceof Array) {\r\n\t\t\t\tif (typeof dataItem[0] === 'number' && typeof dataItem[1] === 'number') {\r\n\t\t\t\t\tdate = dataItem[1];\r\n\t\t\t\t\tseriesDates[s].push([dataItem[0], dataItem[1]]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (typeof dataItem === 'number' || typeof dataItem === 'undefined' || dataItem === null) {\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// OBJECT\r\n\t\t\t\t\tif (processedSeries[s].labelId in dataItem && processedSeries[s].valueId in dataItem) {\r\n\t\t\t\t\t\tdate = (dataItem as any)[processedSeries[s].labelId];\r\n\t\t\t\t\t\tseriesDates[s].push([\r\n\t\t\t\t\t\t\t(dataItem as any)[processedSeries[s].valueId],\r\n\t\t\t\t\t\t\t(dataItem as any)[processedSeries[s].labelId]\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (date !== null) {\r\n\t\t\t\tdates.push(date);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tlet minDate: number | null = null;\r\n\tlet maxDate: number | null = null;\r\n\tif (dates.length > 0) {\r\n\t\tminDate = dates[0];\r\n\t\tmaxDate = dates[0];\r\n\t\tfor (let i = 0; i < dates.length; i++) {\r\n\t\t\tif (dates[i] < minDate) {\r\n\t\t\t\tminDate = dates[i];\r\n\t\t\t}\r\n\t\t\tif (dates[i] > maxDate) {\r\n\t\t\t\tmaxDate = dates[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (minDate === null || maxDate === null) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tlet startDate: Date = new Date(minDate);\r\n\tstartDate.setMilliseconds(0);\r\n\tstartDate.setSeconds(0);\r\n\tstartDate.setMinutes(0);\r\n\tif ([ChartDateAggregation.DAY, ChartDateAggregation.MONTH, ChartDateAggregation.YEAR].includes(processedChartConfiguration.dateAggregation)) {\r\n\t\tstartDate.setHours(0);\r\n\t}\r\n\tif ([ChartDateAggregation.MONTH, ChartDateAggregation.YEAR].includes(processedChartConfiguration.dateAggregation)) {\r\n\t\tstartDate.setDate(1);\r\n\t}\r\n\tif ([ChartDateAggregation.YEAR].includes(processedChartConfiguration.dateAggregation)) {\r\n\t\tstartDate.setMonth(0);\r\n\t}\r\n\r\n\tconst dateValues: number[] = [];\r\n\tconst endDate: Date = new Date(maxDate);\r\n\twhile (startDate < endDate) {\r\n\t\tdateValues.push(startDate.getTime());\r\n\t\tswitch(processedChartConfiguration.dateAggregation) {\r\n\t\t\tcase ChartDateAggregation.HOUR: startDate.setHours(startDate.getHours() + 1); break;\r\n\t\t\tcase ChartDateAggregation.DAY: startDate.setDate(startDate.getDate() + 1); break;\r\n\t\t\tcase ChartDateAggregation.MONTH: startDate.setMonth(startDate.getMonth() + 1); break;\r\n\t\t\tcase ChartDateAggregation.YEAR: startDate.setFullYear(startDate.getFullYear() + 1); break;\r\n\t\t}\r\n\t}\r\n\r\n\t// AGGREGATE VALUES\r\n\tconst aggregatedDateValues: {date: number, seriesIndex: number, values: number[]}[] = [];\r\n\tfor (let d = 0; d < dateValues.length; d++) {\r\n\t\tfor (let s = 0; s < processedSeries.length; s++) {\r\n\t\t\taggregatedDateValues.push({\r\n\t\t\t\tdate: dateValues[d],\r\n\t\t\t\tseriesIndex: s,\r\n\t\t\t\tvalues: []\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (let d = 0; d < dateValues.length; d++) {\r\n\t\tconst date: Date = new Date(dateValues[d]);\r\n\t\tconst year: number = date.getFullYear();\r\n\t\tconst month: number = date.getMonth();\r\n\t\tconst day: number = date.getDate();\r\n\t\tconst hour: number = date.getHours();\r\n\t\tfor (let s = 0; s < seriesDates.length; s++) {\r\n\t\t\tfor (let si = 0; si < seriesDates[s].length; si++) {\r\n\t\t\t\tconst datesi: Date = new Date(seriesDates[s][si][1]);\r\n\t\t\t\tconst yearsi: number = datesi.getFullYear();\r\n\t\t\t\tconst monthsi: number = datesi.getMonth();\r\n\t\t\t\tconst daysi: number = datesi.getDate();\r\n\t\t\t\tconst hoursi: number = datesi.getHours();\r\n\t\t\t\tswitch(processedChartConfiguration.dateAggregation) {\r\n\t\t\t\t\tcase ChartDateAggregation.HOUR:\r\n\t\t\t\t\t\tif (year === yearsi && month === monthsi && day === daysi && hour === hoursi) {\r\n\t\t\t\t\t\t\tlet foundIndex: number = aggregatedDateValues.findIndex((a) => a.date === dateValues[d] && a.seriesIndex === s);\r\n\t\t\t\t\t\t\tif (foundIndex !== -1) {\r\n\t\t\t\t\t\t\t\taggregatedDateValues[foundIndex].values.push(seriesDates[s][si][0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase ChartDateAggregation.DAY:\r\n\t\t\t\t\t\tif (year === yearsi && month === monthsi && day === daysi) {\r\n\t\t\t\t\t\t\tlet foundIndex: number = aggregatedDateValues.findIndex((a) => a.date === dateValues[d] && a.seriesIndex === s);\r\n\t\t\t\t\t\t\tif (foundIndex !== -1) {\r\n\t\t\t\t\t\t\t\taggregatedDateValues[foundIndex].values.push(seriesDates[s][si][0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase ChartDateAggregation.MONTH:\r\n\t\t\t\t\t\tif (year === yearsi && month === monthsi) {\r\n\t\t\t\t\t\t\tlet foundIndex: number = aggregatedDateValues.findIndex((a) => a.date === dateValues[d] && a.seriesIndex === s);\r\n\t\t\t\t\t\t\tif (foundIndex !== -1) {\r\n\t\t\t\t\t\t\t\taggregatedDateValues[foundIndex].values.push(seriesDates[s][si][0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase ChartDateAggregation.YEAR:\r\n\t\t\t\t\t\tif (year === yearsi) {\r\n\t\t\t\t\t\t\tlet foundIndex: number = aggregatedDateValues.findIndex((a) => a.date === dateValues[d] && a.seriesIndex === s);\r\n\t\t\t\t\t\t\tif (foundIndex !== -1) {\r\n\t\t\t\t\t\t\t\taggregatedDateValues[foundIndex].values.push(seriesDates[s][si][0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfor (let processedSeriesItem of processedSeries) {\r\n\t\tprocessedSeriesItem.processedData = [];\r\n\t}\r\n\r\n\t// MATCH VALUES\r\n\tfor (let a = 0; a < aggregatedDateValues.length; a++) {\r\n\t\tlet value: number | undefined = undefined;\r\n\t\tif (aggregatedDateValues[a].values.length > 0) {\r\n\t\t\tif (aggregatedDateValues[a].values.length === 1) {\r\n\t\t\t\tvalue = aggregatedDateValues[a].values[0];\r\n\t\t\t} else {\r\n\t\t\t\tswitch(processedChartConfiguration.dateAggregationMode) {\r\n\t\t\t\t\tcase ChartDateAggregationMode.MAX:\r\n\t\t\t\t\t\tvalue = max(aggregatedDateValues[a].values);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase ChartDateAggregationMode.MIN:\r\n\t\t\t\t\t\tvalue = min(aggregatedDateValues[a].values);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase ChartDateAggregationMode.SUM:\r\n\t\t\t\t\t\tvalue = sum(aggregatedDateValues[a].values);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase ChartDateAggregationMode.FIRST:\r\n\t\t\t\t\t\tvalue = aggregatedDateValues[a].values[0];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase ChartDateAggregationMode.LAST:\r\n\t\t\t\t\t\tvalue = aggregatedDateValues[a].values[aggregatedDateValues[a].values.length - 1];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprocessedSeries[aggregatedDateValues[a].seriesIndex].processedData.push({\r\n\t\t\tlabel: aggregatedDateValues[a].date,\r\n\t\t\tvalue\r\n\t\t});\r\n\t}\r\n\r\n\tfor (let processedSeriesItem of processedSeries) {\r\n\t\tprocessedSeriesItem.processedData.sort((a, b) => {\r\n\t\t\tif (typeof a.label !== 'number' || typeof b.label !== 'number') {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\treturn a.label - b.label;\r\n\t\t});\r\n\t}\r\n\r\n\tif (processedChartConfiguration.fillEmptyDatesWithLastValue) {\r\n\t\tvar lastValue: number | null = null;\r\n\t\tfor (let processedSeriesItem of processedSeries) {\r\n\t\t\tlastValue = null;\r\n\t\t\tfor (let data of processedSeriesItem.processedData) {\r\n\t\t\t\tif (typeof data.value === 'number') {\r\n\t\t\t\t\tlastValue = data.value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (lastValue !== null) {\r\n\t\t\t\t\t\tdata.value = lastValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import { TranslationType } from \"../../interfaces\";\r\n\r\nexport const CHART_LANGUAGES_HU: TranslationType = {\r\n\tcontextMenu: {\r\n\t\theader: 'Fejléc',\r\n\t\tleftAxis: 'Bal tengely',\r\n\t\tlegend: 'Jelmagyarázat',\r\n\t\trightAxis: 'Jobb tengely',\r\n\t\tsaveImage: 'Kép mentése',\r\n\t\tvisible: 'Látható',\r\n\t\tshowHorizontalAxis: 'X tengely látható',\r\n\t\tshowZeroLine: 'Nulla vonal',\r\n\t\tshowAxisLeft: 'Bal értékek megjelenítése',\r\n\t\tshowAxisRight: 'Jobb értékek megjelenítése',\r\n\t\thideAxisLeft: 'Bal értékek eltüntetése',\r\n\t\thideAxisRight: 'Jobb értékek eltüntetése',\r\n\t\tdateAggregation: 'Dátum összevonás',\r\n\t\tdateAggregationHour: 'Óra',\r\n\t\tdateAggregationDay: 'Nap',\r\n\t\tdateAggregationMonth: 'Hónap',\r\n\t\tdateAggregationYear: 'Év'\r\n\t},\r\n\tsaveImage: {\r\n\t\twidth: 'Szélesség',\r\n\t\theight: 'Magasság',\r\n\t\ttype: 'Típus',\r\n\t\tname: 'File neve',\r\n\t\tsave: 'Mentés',\r\n\t\tcancel: 'Mégsem'\r\n\t}\r\n};\r\n\r\nexport const CHART_LANGUAGES_EN: TranslationType = {\r\n\tcontextMenu: {\r\n\t\theader: 'Header',\r\n\t\tleftAxis: 'Left axis',\r\n\t\tlegend: 'Legend',\r\n\t\trightAxis: 'Right axis',\r\n\t\tsaveImage: 'Save image',\r\n\t\tvisible: 'Visible',\r\n\t\tshowHorizontalAxis: 'X axis Visible',\r\n\t\tshowZeroLine: 'Zero line',\r\n\t\tshowAxisLeft: 'Show left axis values',\r\n\t\tshowAxisRight: 'Show left axis values',\r\n\t\thideAxisLeft: 'Hide left axis values',\r\n\t\thideAxisRight: 'Hide left axis values',\r\n\t\tdateAggregation: 'Date aggregation',\r\n\t\tdateAggregationHour: 'Hour',\r\n\t\tdateAggregationDay: 'Day',\r\n\t\tdateAggregationMonth: 'Month',\r\n\t\tdateAggregationYear: 'Year'\r\n\t},\r\n\tsaveImage: {\r\n\t\twidth: 'Width',\r\n\t\theight: 'Height',\r\n\t\ttype: 'Type',\r\n\t\tname: 'Name of file',\r\n\t\tsave: 'Save',\r\n\t\tcancel: 'Cancel'\r\n\t}\r\n};\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { ChartDateAggregation, ChartDateAggregationMode, ChartMode, ChartPieLegendPosition, ChartPieTemplate, ChartPieTemplateFull, ChartPieTemplateDrawFunction, ChartStyle, ProcessedChartConfiguration, ChartColumnHoverDrawFunction, ChartDrawColumnSeriesValueInformation, ChartPosition, LabelDisplayMethod, ChartSeriesValuePipeFunction } from \"./chart.interfaces\";\r\n\r\nexport const CHART_DEFAULT_STYLES: InjectionToken<ChartStyle[]> = new InjectionToken('Default chart styles', {\r\n\tfactory: (): ChartStyle[] => {\r\n\t\treturn [\r\n\t\t\t{ fill: '#00b894', stroke: '#00b894', lineWidth: 1 },\r\n\t\t\t{ fill: '#0984e3', stroke: '#0984e3', lineWidth: 1 },\r\n\t\t\t{ fill: '#00cec9', stroke: '#00cec9', lineWidth: 1 },\r\n\t\t\t{ fill: '#6c5ce7', stroke: '#6c5ce7', lineWidth: 1 },\r\n\t\t\t{ fill: '#fdcb6e', stroke: '#fdcb6e', lineWidth: 1 }\r\n\t\t];\r\n\t}\r\n});\r\n\r\nexport const CHART_DEFAULT_AREA_STYLES: InjectionToken<ChartStyle[]> = new InjectionToken('Default chart area styles', {\r\n\tfactory: (): ChartStyle[] => {\r\n\t\treturn [\r\n\t\t\t{ fill: 'rgba(0, 184, 148, 0.4)', stroke: '#00b894', lineWidth: 1 },\r\n\t\t\t{ fill: '#0984e3', stroke: '#0984e3', lineWidth: 1 },\r\n\t\t\t{ fill: '#00cec9', stroke: '#00cec9', lineWidth: 1 },\r\n\t\t\t{ fill: '#6c5ce7', stroke: '#6c5ce7', lineWidth: 1 },\r\n\t\t\t{ fill: '#fdcb6e', stroke: '#fdcb6e', lineWidth: 1 }\r\n\t\t];\r\n\t}\r\n});\r\n\r\nexport const CHART_DEFAULT_CONFIGURATION: InjectionToken<ProcessedChartConfiguration> = new InjectionToken('Chart default configuration', {\r\n\tfactory: (): ProcessedChartConfiguration => {\r\n\t\treturn {\r\n\t\t\twidth: 'auto',\r\n\t\t\theight: 'auto',\r\n\t\t\tmargin: {\r\n\t\t\t\ttop: 20,\r\n\t\t\t\tright: 20,\r\n\t\t\t\tbottom: 20,\r\n\t\t\t\tleft: 20\r\n\t\t\t},\r\n\t\t\tbarChartGap: 5,\r\n\t\t\tbarChartGapBetween: 5,\r\n\t\t\tseries: [],\r\n\t\t\tshowLegend: true,\r\n\t\t\theaderHeight: 20,\r\n\t\t\theaderMargin: {\r\n\t\t\t\tleft: 0,\r\n\t\t\t\tright: 0,\r\n\t\t\t\tbottom: 20,\r\n\t\t\t\ttop: 0\r\n\t\t\t},\r\n\t\t\tlegendSpaceBetween: 10,\r\n\t\t\tlegendItemSize: 20,\r\n\t\t\tlegendSpaceBeforeTitle: 10,\r\n\t\t\tlegendTitleStyle: null,\r\n\t\t\tshowHeader: true,\r\n\t\t\ttitle: null,\r\n\t\t\ttitleStyle: {\r\n\t\t\t\ttextStyle: 'bold'\r\n\t\t\t},\r\n\t\t\tbackgroundStyle: null,\r\n\t\t\tlabelTransform: null,\r\n\t\t\tzoom: false,\r\n\t\t\trangeSelection: false,\r\n\t\t\tfooterLabelStyle: null,\r\n\t\t\tshowHorizontalAxis: true,\r\n\t\t\tshowZeroLine: true,\r\n\t\t\trangeIndexStart: null,\r\n\t\t\trangeIndexEnd: null,\r\n\t\t\tmode: ChartMode.DEFAULT,\r\n\t\t\tdateAggregation: ChartDateAggregation.DAY,\r\n\t\t\tdateAggregationMode: ChartDateAggregationMode.MAX,\r\n\t\t\tleftAxis: null,\r\n\t\t\trightAxis: null,\r\n\t\t\taxisValuePipe: null,\r\n\t\t\trangeSelectionLineStyle: null,\r\n\t\t\trangeSelectionRectStyle: null,\r\n\t\t\tcrossStyle: {\r\n\t\t\t\tstroke: '#000000',\r\n\t\t\t\tlineDashSegments: [4, 4],\r\n\t\t\t\topacity: 0.4\r\n\t\t\t},\r\n\t\t\tdisplayCross: true,\r\n\t\t\tpieTemplates: [],\r\n\t\t\tfooterMarginTop: 10,\r\n\t\t\tlabelDisplayMethod: LabelDisplayMethod.ALL,\r\n\t\t\tshowHorizontalLines: true,\r\n\t\t\thorizontalLineStyle: {\r\n\t\t\t\tstroke: '#000000',\r\n\t\t\t\topacity: 0.3\r\n\t\t\t},\r\n\t\t\tshowVerticalLines: false,\r\n\t\t\tverticalLineStyle: {\r\n\t\t\t\tstroke: '#000000',\r\n\t\t\t\topacity: 0.3\r\n\t\t\t},\r\n\t\t\tfillEmptyDatesWithLastValue: false\r\n\t\t};\r\n\t}\r\n});\r\n\r\n/**\r\n * Default pie template draw function\r\n * \r\n * It will create a single row of pie charts, wiht `N` columns. `N` is number of the visible pie charts.\r\n * \r\n * For a single instance of chart, you can override the templates via the `pieTemplates` configuration.\r\n * \r\n * You can override it globally and create your own function to display pie templates\r\n */\r\nexport const CHART_DEFAULT_PIE_TEMPLATES_DRAW_FUNCTION: InjectionToken<ChartPieTemplateDrawFunction> = new InjectionToken('Chart default pie tempaltes draw function', {\r\n\tfactory: (): ChartPieTemplateDrawFunction => ({ chart }) => {\r\n\t\tconst pieTemplates: ChartPieTemplate[] = [];\r\n\t\tfor (let i = 0; i < chart.visibleSeries.length; i++) {\r\n\t\t\tconst widthPercent: number = 100 / chart.visibleSeries.length;\r\n\t\t\tpieTemplates.push({\r\n\t\t\t\twidthPercent,\r\n\t\t\t\theightPercent: 100,\r\n\t\t\t\ttopPercent: 0,\r\n\t\t\t\tleftPercent: i * widthPercent\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn pieTemplates;\r\n\t},\r\n});\r\n\r\nexport const CHART_DEFAULT_COLUMN_HOVER_DRAW_FUNCTION: InjectionToken<ChartColumnHoverDrawFunction> = new InjectionToken('Chart default column hover draw function', {\r\n\tfactory: (): ChartColumnHoverDrawFunction => ({ chart, drawColumnInformation, mouseMoveEventPosition }) => {\r\n\t\tif (mouseMoveEventPosition === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst texts: string[] = [drawColumnInformation.label.toString()];\r\n\r\n\t\tswitch(chart.processedConfiguration.labelDisplayMethod) {\r\n\t\t\tcase LabelDisplayMethod.ALL:\r\n\t\t\t\tfor (let i = 0; i < drawColumnInformation.seriesValues.length; i++) {\r\n\t\t\t\t\tlet valueText: string = drawColumnInformation.seriesValues[i].series.valuePipeFunction({\r\n\t\t\t\t\t\tchart,\r\n\t\t\t\t\t\tvalueInformation: drawColumnInformation.seriesValues[i],\r\n\t\t\t\t\t\tseries: drawColumnInformation.seriesValues[i].series,\r\n\t\t\t\t\t\tdrawColumnInformation\r\n\t\t\t\t\t});\r\n\t\t\t\t\ttexts.push(drawColumnInformation.seriesValues[i].series.title + ': ' + valueText);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelDisplayMethod.CLOSEST:\r\n\t\t\t\tlet closestSeriesValues: ChartDrawColumnSeriesValueInformation | null = null;\r\n\t\t\t\tfor (let seriesValue of drawColumnInformation.seriesValues) {\r\n\t\t\t\t\tif (closestSeriesValues === null) {\r\n\t\t\t\t\t\tclosestSeriesValues = seriesValue;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (Math.abs(mouseMoveEventPosition.y - seriesValue.pointPosition.y) < Math.abs(mouseMoveEventPosition.y - closestSeriesValues.pointPosition.y)) {\r\n\t\t\t\t\t\t\tclosestSeriesValues = seriesValue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (closestSeriesValues !== null) {\r\n\t\t\t\t\tlet valueText: string = closestSeriesValues.series.valuePipeFunction({\r\n\t\t\t\t\t\tchart,\r\n\t\t\t\t\t\tvalueInformation: closestSeriesValues,\r\n\t\t\t\t\t\tseries: closestSeriesValues.series,\r\n\t\t\t\t\t\tdrawColumnInformation\r\n\t\t\t\t\t});\r\n\t\t\t\t\ttexts.push(closestSeriesValues.series.title + ': ' + valueText);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t// Measure texts width\r\n\t\tlet textsHeights: number[] = [];\r\n\t\tlet textsMaxWidth: number = 0;\r\n\t\tfor (let i = 0; i < texts.length; i++) {\r\n\t\t\ttextsHeights.push(chart.canvasHover.measureTextHeight(texts[i]));\r\n\t\t\tconst textWidth: number = chart.canvasHover.measureTextWidth(texts[i]);\r\n\t\t\tif (textWidth > textsMaxWidth) {\r\n\t\t\t\ttextsMaxWidth = textWidth;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst displayBoxWidth: number = textsMaxWidth + 40;\r\n\t\tconst displayBoxHeight: number = textsHeights.reduce((a, b) => a + b, 0) + ((textsHeights.length - 1) * 10) + 20;\r\n\t\tconst boxPosition: ChartPosition = {\r\n\t\t\tx: mouseMoveEventPosition.x - (displayBoxWidth / 2),\r\n\t\t\ty: mouseMoveEventPosition.y - displayBoxHeight\r\n\t\t};\r\n\t\tif (boxPosition.x < chart.chartCoordinates.left) {\r\n\t\t\tboxPosition.x = chart.chartCoordinates.left;\r\n\t\t}\r\n\t\tif (boxPosition.y < chart.chartCoordinates.top) {\r\n\t\t\tboxPosition.y = chart.chartCoordinates.top;\r\n\t\t}\r\n\t\tif (chart.chartCoordinates.left + chart.chartCoordinates.width < boxPosition.x + displayBoxWidth) {\r\n\t\t\tboxPosition.x = chart.chartCoordinates.left + chart.chartCoordinates.width - displayBoxWidth;\r\n\t\t}\r\n\t\tchart.canvasHover.setStyle({\r\n\t\t\tfill: 'rgba(0, 0, 0, 0.6)'\r\n\t\t});\r\n\t\tchart.canvasHover.rect(boxPosition, displayBoxWidth, displayBoxHeight);\r\n\t\tchart.canvasHover.setStyle({\r\n\t\t\ttextAlign: 'center',\r\n\t\t\ttextBaseline: 'middle',\r\n\t\t\tfill: '#ffffff'\r\n\t\t});\r\n\t\tlet y: number = boxPosition.y + 20;\r\n\t\tfor (let i = 0; i < texts.length; i++) {\r\n\t\t\tchart.canvasHover.text(texts[i], {\r\n\t\t\t\tx: boxPosition.x + (displayBoxWidth / 2),\r\n\t\t\t\ty\r\n\t\t\t});\r\n\t\t\ty += textsHeights[i] + 10;\r\n\t\t}\r\n\r\n\t}\r\n});\r\n\r\nexport const CHART_PIE_TEMPLATE_DEFAULTS: InjectionToken<ChartPieTemplateFull> = new InjectionToken('Chart pie template defaults', {\r\n\tfactory: (): ChartPieTemplateFull => {\r\n\t\treturn {\r\n\t\t\tleftPercent: 0,\r\n\t\t\ttopPercent: 0,\r\n\t\t\theightPercent: 100,\r\n\t\t\twidthPercent: 100,\r\n\t\t\tlegendMargin: {\r\n\t\t\t\tbottom: 20,\r\n\t\t\t\tleft: 20,\r\n\t\t\t\tright: 20,\r\n\t\t\t\ttop: 20\r\n\t\t\t},\r\n\t\t\tlegendPadding: {\r\n\t\t\t\tbottom: 20,\r\n\t\t\t\tleft: 20,\r\n\t\t\t\tright: 20,\r\n\t\t\t\ttop: 20\r\n\t\t\t},\r\n\t\t\tdisplayLegend: true,\r\n\t\t\tlegendPosition: ChartPieLegendPosition.LEFT,\r\n\t\t\tlegendBackgroundStyle: {\r\n\t\t\t\tfill: 'rgba(255, 255, 255, 0.6)'\r\n\t\t\t},\r\n\t\t\tlegendSize: 20,\r\n\t\t\tlegendGap: 20,\r\n\t\t\tlegendGapBetween: 15,\r\n\t\t\titemStyles: [\r\n\t\t\t\t{ fill: '#00b894', lineWidth: 0, stroke: '#00b894' },\r\n\t\t\t\t{ fill: '#0984e3', lineWidth: 0, stroke: '#0984e3' },\r\n\t\t\t\t{ fill: '#00cec9', lineWidth: 0, stroke: '#00cec9' },\r\n\t\t\t\t{ fill: '#6c5ce7', lineWidth: 0, stroke: '#6c5ce7' },\r\n\t\t\t\t{ fill: '#fdcb6e', lineWidth: 0, stroke: '#fdcb6e' }\r\n\t\t\t],\r\n\t\t\tbackgroundStyle: {},\r\n\t\t\tlegendLabelStyle: {},\r\n\t\t\tdisplayPieValue: true,\r\n\t\t\tpieValueStyle: {}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport const SERIES_VALUE_PIPE_FUNCTION_DEFAULT: InjectionToken<ChartSeriesValuePipeFunction> = new InjectionToken('Series value pipe function default', {\r\n\tfactory: (): ChartSeriesValuePipeFunction => {\r\n\t\treturn ({ valueInformation }) => {\r\n\t\t\tconst maxIntParts: number = Math.max(0, 3 - parseInt(valueInformation.value.toString()).toString().length);\r\n\t\t\treturn valueInformation.value.toFixed(maxIntParts);\r\n\t\t}\r\n\t}\r\n})\r\n","import { DropdownQueryMode } from \"../../interfaces\";\r\n\r\nexport function filterDropdownArray(values: any[], key: string, queryMode: DropdownQueryMode, query: string): any[] {\r\n\treturn values.filter((value: any) => {\r\n\t\tif (value[key] !== undefined && typeof value[key] === 'string') {\r\n\t\t\tconst valueString: string = value[key];\r\n\t\t\tif (queryMode === 'contains') {\r\n\t\t\t\treturn valueString.toLowerCase().includes(query.toLowerCase());\r\n\t\t\t}\r\n\t\t\tif (queryMode === 'startwith') {\r\n\t\t\t\treturn valueString.toLowerCase().startsWith(query.toLowerCase());\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t})\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, HostBinding, Input, OnChanges, Output, ViewChild, OnInit, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { filter } from 'rxjs';\r\nimport { FormItem } from '../../shared/classes/formitem.class';\r\nimport { isOuter } from '../../shared/helpers/helpers';\r\nimport { ReadonlyDirective } from '../../shared';\r\n\r\n@Component({\r\n    selector: 'cf-checkbox',\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => CheckboxComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n    styleUrls: ['./checkbox.component.scss'],\r\n    template: `\r\n        <div class=\"cf-checkbox\">\r\n            <input #hiddenInput type=\"text\" class=\"cf-hidden-input\" (keyup)=\"keyup($event)\" (focus)=\"focusFromHiddenInput()\" (blur)=\"blur()\" />\r\n            <span class=\"cf-check\" [ngClass]=\"{'checked': value || (triState && value !== null)}\" (click)=\"toggleValue()\">\r\n                <span class=\"remixicon\" [ngClass]=\"icon\" *ngIf=\"value === true\"></span>\r\n                <span class=\"remixicon\" [ngClass]=\"falseIcon\" *ngIf=\"triState && value === false\"></span>\r\n            </span>\r\n            <span *ngIf=\"label !== null\" class=\"cf-checkbox-label\" (click)=\"toggleValue()\">{{label}}</span>\r\n        </div>\r\n    `\r\n})\r\nexport class CheckboxComponent extends FormItem implements OnChanges, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n    @Input() value: boolean | null = false;\r\n    @Input() triState = false;\r\n    @Input() triStateFalseFirst = false;\r\n    @Input() icon = 'check-fill';\r\n    @Input() falseIcon = 'close-fill';\r\n\t@Input() @HostBinding('style.width') width: string = 'auto';\r\n\r\n    @Output() onChanged: EventEmitter<boolean | null> = new EventEmitter();\r\n    @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter();\r\n\r\n    @ViewChild('hiddenInput') hiddenInput: ElementRef<HTMLInputElement> | undefined = undefined;\r\n    \r\n\toverride enterAsTabType: string = 'checkbox';\r\n\r\n    toggleValue(): void {\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n        if (this.isDisabled || this.isReadonly) {\r\n            return;\r\n        }\r\n        if(this.triState) {\r\n            if (this.triStateFalseFirst) {\r\n                switch(this.value) {\r\n                    case null: this.value = false; break;\r\n                    case false: this.value = true; break;\r\n                    case true: this.value = null; break;\r\n                }\r\n            } else {\r\n                switch(this.value) {\r\n                    case null: this.value = true; break;\r\n                    case true: this.value = false; break;\r\n                    case false: this.value = null; break;\r\n                }\r\n            }\r\n        } else {\r\n            this.value = !this.value;\r\n        }\r\n        if (this.onChangeFn !== null) {\r\n            this.onChangeFn(this.value);\r\n        }\r\n        if (this.onTouchedFn !== null) {\r\n            this.onTouchedFn(this.value);\r\n        }\r\n        this.onChanged.emit(this.value);\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    override writeValue(value: boolean): void {\r\n        this.value = value;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    blur(): void {\r\n        this.focused = false;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    keyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tthis.onKeyup.emit(keyboardEvent);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n        if (keyboardEvent.code.toLowerCase() === 'space') {\r\n            this.toggleValue();\r\n        }\r\n    }\r\n\r\n\tfocusFromHiddenInput(): void {\r\n\t\tif (this.focused) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.focused = true;\r\n        this.cdr.detectChanges();\r\n\t}\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n\t\tthis.focused = true;\r\n        this.cdr.detectChanges();\r\n\t}\r\n\r\n\tdocumentClicked(event: MouseEvent): void {\r\n\t\tif (isOuter([this.element.nativeElement], event)) {\r\n\t\t\tthis.blur();\r\n\t\t}\r\n\t}\r\n\r\n    ngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.setControlComponent();\r\n    }\r\n\r\n    constructor() {\r\n        super();\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed()\r\n\t\t).subscribe((event: MouseEvent) => {\r\n            if (isOuter([this.element.nativeElement], event)) {\r\n                this.focused = false;\r\n                this.cdr.detectChanges();\r\n            }\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => this.hiddenInput !== undefined && event.target !== this.hiddenInput.nativeElement)\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.focused = false;\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n    }\r\n}\r\n","import {\r\n    AfterContentInit,\r\n    Component,\r\n    ContentChildren,\r\n    ElementRef,\r\n    EventEmitter,\r\n    forwardRef,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    Output,\r\n    QueryList,\r\n    SimpleChanges,\r\n    TemplateRef,\r\n    ViewChild,\r\n\tHostListener,\r\n\tChangeDetectionStrategy,\r\n\tHostBinding,\r\n    inject\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { appendToBody, inPath, isNumberArray, isOuter, isStringArray, selectIndexMinMax, setElementRect } from '../../shared/helpers/helpers';\r\nimport { DropdownQueryMode } from '../../interfaces';\r\nimport { filterDropdownArray } from './dropdown.helpers';\r\nimport { DropdownQueryChangedEvent } from './dropdown.interfaces';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { debounceTime, filter } from 'rxjs/operators';\r\nimport { CfTemplate } from '../../shared/directives/template.directive';\r\nimport { FormItem } from '../../shared/classes/formitem.class';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ReadonlyDirective } from '../../shared';\r\n\r\n@Component({\r\n    selector: 'cf-dropdown',\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tCheckboxComponent\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => DropdownComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n    template: `\r\n        <input class=\"cf-hidden-input\" #hiddenInput (keyup)=\"keyup($event)\" (blur)=\"blur()\" (keydown)=\"keydown($event)\" (focus)=\"focusFromHiddenInput()\" />\r\n        <div class=\"cf-floating-label-container\">\r\n            <div class=\"dropdown-value-container\" (click)=\"dropDownValueClicked()\">\r\n                <div class=\"dropdown-value\" *ngIf=\"!filled && unfilledText !== null\">{{unfilledText}}</div>\r\n                <div class=\"dropdown-value\" *ngIf=\"filled\">\r\n\r\n                    <!-- SELECTED ITEMS -->\r\n                    <ng-container *ngIf=\"selectedItemTemplate === null\">\r\n                        <span *ngFor=\"let selectedLabel of selectedLabels\">{{selectedLabel}}</span>\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"selectedItemTemplate !== null\">\r\n                        <span *ngFor=\"let selectedItem of selectedItems\">\r\n                            <ng-container *ngTemplateOutlet=\"selectedItemTemplate; context: {$implicit: selectedItem}\"></ng-container>\r\n                        </span>\r\n                    </ng-container>\r\n\r\n                </div>\r\n            </div>\r\n            <label class=\"cf-floating-label\" [ngClass]=\"{'float': filled || (!filled && unfilledText !== null)}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n        </div>\r\n\t\t<span *ngIf=\"clearable && filled && !isDisabled && !isReadonly\" class=\"cf-input-clear remixicon close-circle-fill\" (click)=\"clearClicked($event)\"></span>\r\n\t\t<span *ngIf=\"!isDisabled && !isReadonly\" class=\"cf-input-open remixicon arrow-down-s-line\" [ngClass]=\"{'opened': opened}\" (click)=\"toggleOpen()\"></span>\r\n        <div #dropdownItemsTemplate class=\"cf-dropdown-items\" [ngStyle]=\"{'max-height': height, 'width': dropdownWidth}\" *ngIf=\"opened\">\r\n            <div *ngIf=\"searchable\" class=\"cf-dropdown-item-search\">\r\n                <input type=\"text\" tabindex=\"-1\" [(ngModel)]=\"query\" (ngModelChange)=\"queryChanged()\" (focus)=\"queryInputFocus()\" (keyup)=\"queryInputKeyup($event)\" />\r\n            </div>\r\n            <div #dropdownItemsList class=\"cf-dropdown-items-list\">\r\n                <div class=\"cf-dropdown-item\" [ngClass]=\"{'disabled': filteredValue.disabled === true, 'selected': isValueSelected(filteredValue[this.valueId]) && !checkbox, 'active': i === selectedItemIndex}\" *ngFor=\"let filteredValue of filteredValues; let i = index;\" (click)=\"selectValueClick($event, filteredValue)\" (mouseenter)=\"selectItemIndex(i, false)\" (mouseleave)=\"selectItemIndex(null, false)\">\r\n                    <div class=\"cf-flex cf-ai-center\" *ngIf=\"itemTemplate === null\">\r\n                        <cf-checkbox [disabled]=\"filteredValue.disabled === true\" [ngModel]=\"isValueSelected(filteredValue[this.valueId])\" *ngIf=\"checkbox\"></cf-checkbox>\r\n                        <span>{{filteredValue[labelId]}}</span>\r\n                    </div>\r\n                    <ng-container *ngIf=\"itemTemplate !== null\">\r\n                        <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: filteredValue}\"></ng-container>\r\n                    </ng-container>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    `,\r\n    host: {\r\n        class: 'cf-input-container cf-dropdown'\r\n    }\r\n})\r\nexport class DropdownComponent extends FormItem implements AfterContentInit, OnChanges, OnInit, OnDestroy {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n    @Input() values: any[] = [];\r\n    @Input() value: any = undefined;\r\n    @HostBinding('style.width') @Input() width: string = 'auto';\r\n    @Input() dropdownWidth: string | null = null;\r\n    @Input() height: string = '250px';\r\n    @Input() labelId: string = 'label';\r\n    @Input() valueId: string = 'value';\r\n    @Input() searchable: boolean = false;\r\n    @Input() multiple: boolean = false;\r\n    @Input() unfilledText: string | null = null;\r\n    @Input() queryMode: DropdownQueryMode = 'contains';\r\n    @Input() keyboardQueryMode: DropdownQueryMode = 'startwith';\r\n\t@Input() checkbox: boolean = false;\r\n\r\n    @Output() onQueryChanged: EventEmitter<DropdownQueryChangedEvent> = new EventEmitter();\r\n\r\n    @ViewChild('hiddenInput') hiddenInput: ElementRef<HTMLInputElement> | undefined = undefined;\r\n    @ViewChild('dropdownItemsTemplate') dropdownItemsTemplate: ElementRef<HTMLDivElement> | undefined = undefined;\r\n    @ViewChild('dropdownItemsList') dropdownItemsList: ElementRef<HTMLDivElement> | undefined = undefined;\r\n\r\n\t@ContentChildren(CfTemplate) templates: QueryList<CfTemplate> = new QueryList();\r\n\r\n    itemTemplate: TemplateRef<any> | null = null;\r\n    selectedItemTemplate: TemplateRef<any> | null = null;\r\n\r\n    processedValues: any[] = [];\r\n    filteredValues: any[] = [];\r\n    fullValue: boolean = true;\r\n\r\n    opened: boolean = false;\r\n\r\n    query: string | null = null;\r\n\r\n    selectedItemIndex: number | null = null;\r\n\r\n\tkeepFocus: boolean = false;\r\n\r\n    keypressSearchSubject: Subject<void> = new Subject();\r\n    keypressSearchSubjectSubscription: Subscription | null = null;\r\n\r\n\toverride enterAsTabType: string = 'dropdown';\r\n\r\n\t@HostListener('document:mousewheel', ['$event'])\r\n\twindowScroll(wheelEvent: WheelEvent): void {\r\n\t\tif (this.opened) {\r\n\t\t\tif (this.dropdownItemsTemplate !== undefined && inPath(this.dropdownItemsTemplate.nativeElement, wheelEvent)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t}\r\n\r\n    focusFromHiddenInput(): void {\r\n        if (this.focused || this.isDisabled || this.isReadonly) {\r\n            return;\r\n        }\r\n        this.focused = true;\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n\t}\r\n\r\n\tkeyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tthis.onKeyup.emit(keyboardEvent);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n        if (this.isDisabled || this.isReadonly) {\r\n            return;\r\n        }\r\n        if (keyboardEvent.key.toLowerCase() === 'enter') {\r\n            if (this.opened && this.selectedItemIndex !== null && this.selectedItemIndex < this.filteredValues.length) {\r\n                this.selectValue(this.filteredValues[this.selectedItemIndex]);\r\n                this.selectItemIndex(null);\r\n                this.close();\r\n            }\r\n            return;\r\n        }\r\n        if (keyboardEvent.key.toLowerCase() === 'escape') {\r\n            if (this.opened) {\r\n                this.selectItemIndex(null);\r\n                this.close();\r\n            }\r\n            return;\r\n        }\r\n\t}\r\n\r\n    keydown(keyboardEvent: KeyboardEvent): void {\r\n        if (this.isDisabled || this.isReadonly) {\r\n            return;\r\n        }\r\n        switch(keyboardEvent.key.toLowerCase()) {\r\n            case 'arrowdown':\r\n                if (!this.opened) {\r\n                    this.open();\r\n                }\r\n                this.selectItemIndex(selectIndexMinMax(this.selectedItemIndex, 'down', this.filteredValues.length - 1));\r\n                break;\r\n            case 'arrowup':\r\n                if (!this.opened) {\r\n                    this.open();\r\n                }\r\n                this.selectItemIndex(selectIndexMinMax(this.selectedItemIndex, 'up', this.filteredValues.length - 1));\r\n                break;\r\n            default:\r\n                this.keypressSearchSubject.next();\r\n                break;\r\n        }\r\n    }\r\n\r\n    selectItemIndexByValue(value: any, scrollTo: boolean = true): void {\r\n        const valueIndex: number = this.filteredValues.findIndex((filteredValue: any) => filteredValue[this.valueId] === value);\r\n        this.selectItemIndex(valueIndex !== -1 ? valueIndex : null, scrollTo);\r\n    }\r\n\r\n    selectItemIndex(index: number | null, scrollTo: boolean = true): void {\r\n        this.selectedItemIndex = index;\r\n        if (scrollTo) {\r\n            this.scrollToSelectedItemIndex();\r\n        }\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n\tclearClicked(event: MouseEvent): void {\r\n\t\tevent.preventDefault();\r\n        this.value = undefined;\r\n\t\tthis.opened = false;\r\n        this.fireChanged();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    scrollToSelectedItemIndex(): void {\r\n        if (this.selectedItemIndex === null) {\r\n            return;\r\n        }\r\n        if (this.dropdownItemsList !== null && this.dropdownItemsList !== undefined && this.dropdownItemsList.nativeElement.children[this.selectedItemIndex] !== undefined) {\r\n            this.dropdownItemsList.nativeElement.children[this.selectedItemIndex].scrollIntoView({\r\n                behavior: 'auto',\r\n                block: 'center',\r\n                inline: 'center'\r\n            });\r\n        }\r\n    }\r\n\r\n    override writeValue(value: any): void {\r\n\t\tif (this.multiple) {\r\n\t\t\tif (value instanceof Array) {\r\n\t\t\t\tthis.value = [...value];\r\n\t\t\t}\r\n\t\t} else {\r\n            this.value = value;\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    processValues(): void {\r\n        if (isStringArray(this.values)) {\r\n            this.processedValues = (this.values as string[]).map((value: string) => ({\r\n                label: value,\r\n                value\r\n            }));\r\n            this.updateFilteredValues();\r\n            return;\r\n        }\r\n        if (isNumberArray(this.values)) {\r\n            this.processedValues = (this.values as number[]).map((value: number) => ({\r\n                label: value.toString(),\r\n                value\r\n            }));\r\n            this.updateFilteredValues();\r\n            return;\r\n        }\r\n        this.processedValues = [...this.values];\r\n        this.updateFilteredValues();\r\n    }\r\n\r\n    selectValueClick(event: MouseEvent, value: any): void {\r\n        event.stopPropagation();\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n        this.selectValue(value);\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    selectValue(value: any): void {\r\n        if (value.disabled === true) {\r\n            return;\r\n        }\r\n        if (!this.multiple) {\r\n            this.value = value[this.valueId];\r\n            this.opened = false;\r\n        } else {\r\n            if (this.value === null || !(this.value instanceof Array)) {\r\n                this.value = [];\r\n            }\r\n            const alreadyExistingValueIndex: number = this.value.indexOf(value[this.valueId]);\r\n            if (alreadyExistingValueIndex === - 1) {\r\n                this.value.push(value[this.valueId]);\r\n            } else {\r\n                this.value.splice(alreadyExistingValueIndex, 1);\r\n            }\r\n        }\r\n        this.fireChanged();\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    fireChanged(): void {\r\n        if (this.onChangeFn !== null) {\r\n            this.onChangeFn(this.value);\r\n        }\r\n        if (this.onTouchedFn !== null) {\r\n            this.onTouchedFn();\r\n        }\r\n    }\r\n\r\n    dropDownValueClicked(): void {\r\n        if (this.isDisabled || this.isReadonly || this.hiddenInput === undefined) {\r\n            return;\r\n        }\r\n        this.hiddenInput.nativeElement.focus();\r\n        if (this.opened) {\r\n            this.close();\r\n        } else {\r\n            this.open();\r\n        }\r\n    }\r\n\r\n    toggleOpen(): void {\r\n\t\tthis.focused = true;\r\n        if (this.opened) {\r\n            this.close();\r\n        } else {\r\n            this.open();\r\n        }\r\n    }\r\n\r\n    open(): void {\r\n        if (this.opened) {\r\n            return;\r\n        }\r\n\r\n        const nativeElementRect: DOMRect = this.element.nativeElement.getBoundingClientRect();\r\n\r\n        this.opened = true;\r\n        this.cdr.detectChanges();\r\n\r\n        // APPEND TO BODY\r\n\t\tif (this.dropdownItemsTemplate === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tappendToBody(this.dropdownItemsTemplate.nativeElement);\r\n        const width: string = this.dropdownWidth !== null ? this.dropdownWidth : nativeElementRect.width.toString() + 'px';\r\n        setElementRect(this.element.nativeElement, this.dropdownItemsTemplate.nativeElement, width, 'auto');\r\n    }\r\n\r\n    close(): void {\r\n\t\tif (this.dropdownItemsTemplate !== undefined) {\r\n\t\t\tthis.dropdownItemsTemplate.nativeElement.remove();\r\n\t\t}\r\n        this.opened = false;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    queryChanged(): void {\r\n        this.updateFilteredValues();\r\n        this.onQueryChanged.emit({\r\n            query: this.query,\r\n            dropdown: this\r\n        });\r\n    }\r\n\r\n    queryInputFocus(): void {\r\n        this.selectItemIndex(null);\r\n    }\r\n\r\n    queryInputKeyup(keyboardEvent: KeyboardEvent): void {\r\n        this.selectItemIndex(null);\r\n        if (keyboardEvent.key.toLowerCase() === 'arrowdown') {\r\n            this.selectItemIndex(0);\r\n            (keyboardEvent.target as HTMLInputElement).blur();\r\n\t\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t\t}\r\n        }\r\n    }\r\n\r\n    blur(): void {\r\n\t\tif (this.keepFocus) {\r\n\t\t\tthis.keepFocus = false;\r\n\t\t\treturn;\r\n\t\t}\r\n        this.focused = false;\r\n        this.selectedItemIndex = null;\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.blur();\r\n\t\t}\r\n        this.close();\r\n    }\r\n\r\n    isValueSelected(value: any): boolean {\r\n        if (!this.opened) {\r\n            return false;\r\n        }\r\n        if (!this.multiple) {\r\n            return this.value !== null && this.value === value;\r\n        } else {\r\n            return this.value !== null && this.value instanceof Array && this.value.includes(value);\r\n        }\r\n    }\r\n\r\n    setupKeypressSearchTimeout(): void {\r\n        this.keypressSearchSubjectSubscription = this.keypressSearchSubject.pipe(debounceTime(200)).subscribe(() => {\r\n\t\t\tif (this.hiddenInput === undefined) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n            const query: string = this.hiddenInput.nativeElement.value;\r\n            this.hiddenInput.nativeElement.value = '';\r\n            const filteredArray: any[] = filterDropdownArray(this.filteredValues, this.labelId, this.keyboardQueryMode, query);\r\n            if (filteredArray.length > 0) {\r\n                this.selectItemIndexByValue(filteredArray[0][this.valueId]);\r\n            }\r\n        });\r\n    }\r\n\r\n    get selectedItems(): any[] {\r\n        const values: any[] = [];\r\n        if (!this.multiple) {\r\n            values.push(this.value);\r\n        } else {\r\n            values.push(...this.value);\r\n        }\r\n        return this.processedValues.filter((value: any) => values.includes(value[this.valueId]));\r\n    }\r\n\r\n    get selectedLabels(): string[] {\r\n        return this.selectedItems.map((value: any) => value[this.labelId]);\r\n    }\r\n\r\n    updateFilteredValues(): void {\r\n        if (this.query !== null) {\r\n            this.filteredValues = filterDropdownArray(this.processedValues, this.labelId, this.queryMode, this.query);\r\n        } else {\r\n            this.filteredValues = [...this.processedValues];\r\n        }\r\n    }\r\n\r\n    get filled(): boolean {\r\n        if (!this.multiple) {\r\n            return this.value !== undefined;\r\n        } else {\r\n            return this.value !== undefined && this.value instanceof Array && this.value.length > 0;\r\n        }\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.processValues();\r\n        this.setupKeypressSearchTimeout();\r\n        this.setControlComponent();\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    ngAfterContentInit(): void {\r\n\t\tthis.templates.forEach((cfTemplate: CfTemplate) => {\r\n\t\t\tconst name: string | null = cfTemplate.getName();\r\n            if (name === 'item') {\r\n                this.itemTemplate = cfTemplate.template;\r\n            }\r\n            if (name === 'selected-item') {\r\n                this.selectedItemTemplate = cfTemplate.template;\r\n            }\r\n\t\t});\r\n        if (this.itemTemplate !== null && this.selectedItemTemplate === null) {\r\n            this.selectedItemTemplate = this.itemTemplate;\r\n        }\r\n        if (this.itemTemplate !== null || this.selectedItemTemplate !== null) {\r\n            this.cdr.detectChanges();\r\n        }\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['values'] !== undefined) {\r\n            this.processValues();\r\n        }\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        if (this.keypressSearchSubjectSubscription !== null) {\r\n            this.keypressSearchSubjectSubscription.unsubscribe();\r\n            this.keypressSearchSubjectSubscription = null;\r\n        }\r\n    }\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed()\r\n\t\t).subscribe((event: MouseEvent) => {\r\n            if (isOuter([this.element, this.dropdownItemsTemplate], event)) {\r\n                this.focused = false;\r\n                this.close();\r\n                this.cdr.detectChanges();\r\n            } else {\r\n                this.keepFocus = true;\r\n            }\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => isOuter([this.element, this.dropdownItemsTemplate], event))\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.focused = false;\r\n\t\t\tthis.opened = false;\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n}\r\n","import { CommonModule, getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, forwardRef, HostBinding, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { Subscription, timer } from 'rxjs';\r\nimport { FormItem } from '../../shared/classes/formitem.class';\r\nimport { escapeRegExp, strToNumber } from '../../shared/helpers/helpers';\r\nimport { ReadonlyDirective } from '../../shared';\r\n\r\n@Component({\r\n    selector: 'cf-inputnumber',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => InputNumberComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n    template: `\r\n        <ng-container *ngIf=\"prefix !== null\">\r\n            <span class=\"cf-input-prefix\">{{prefix}}</span>\r\n            <span class=\"cf-input-separator\"></span>\r\n        </ng-container>\r\n        <div class=\"cf-floating-label-container\">\r\n            <input \r\n                #input\r\n                [disabled]=\"isDisabled\"\r\n                [readonly]=\"isReadonly\"\r\n\t\t\t\t[attr.inputmode]=\"inputMode\"\r\n                [ngClass]=\"{'cf-filled': filled, 'cf-text-right': this.alignToRight, 'readonly': readonly}\"\r\n                (focus)=\"focusFromInput($event)\"\r\n                (blur)=\"blur($event)\"\r\n                (keydown)=\"keydown($event)\"\r\n                (keyup)=\"keyup($event)\"\r\n                (paste)=\"paste($event)\"\r\n                (drop)=\"drop($event)\"\r\n                class=\"cf-flex-grow cf-input-container-default-input\"/>\r\n            <label class=\"cf-floating-label\" [ngClass]=\"{'float': focused || numberValue !== null}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n        </div>\r\n\t\t<span *ngIf=\"clearable && filled && !isDisabled && !isReadonly\" class=\"cf-input-clear remixicon close-circle-fill\" (click)=\"clearClicked()\"></span>\r\n        <div *ngIf=\"displayStepButtons\" class=\"cf-flex cf-flex-column cf-inputnumber-buttons\">\r\n            <div class=\"cf-flex-grow cf-inputnumber-button cf-inputnumber-button-up\" [ngClass]=\"{'disabled': !allowStepUp || disabled, 'readonly': readonly}\"><div class=\"remixicon add-line\" (mousedown)=\"inputNumberButtonMouseDown($event, 'up')\" (mouseup)=\"inputNumberButtonMouseUp($event)\" (mouseleave)=\"inputNumberButtonMouseLeave()\"></div></div>\r\n            <div class=\"cf-flex-grow cf-inputnumber-button cf-inputnumber-button-down\" [ngClass]=\"{'disabled': !allowStepDown || disabled, 'readonly': readonly}\"><div class=\"remixicon subtract-line\" (mousedown)=\"inputNumberButtonMouseDown($event, 'down')\" (mouseup)=\"inputNumberButtonMouseUp($event)\" (mouseleave)=\"inputNumberButtonMouseLeave()\"></div></div>\r\n        </div>\r\n        <ng-container *ngIf=\"suffix !== null\">\r\n            <span class=\"cf-input-separator\"></span>\r\n            <span class=\"cf-input-suffix\">{{suffix}}</span>\r\n        </ng-container>\r\n    `,\r\n    host: {\r\n        class: 'cf-input-container cf-inputnumber'\r\n    }\r\n})\r\nexport class InputNumberComponent extends FormItem implements OnChanges, AfterViewInit, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n    @ViewChild('input') input: ElementRef<HTMLInputElement> | undefined = undefined;\r\n\r\n    @Input() zeroFillBefore: number = 0;\r\n    @Input() decimalCount: number | null = 0;\r\n    @Input() minDecimalCount: number = 0;\r\n    @Input() maxDecimalCount: number = 0;\r\n    @Input() max: number | null = null;\r\n    @Input() min: number | null = null;\r\n    @Input() step: number | null = 1;\r\n    @Input() stepUp: number | null = null;\r\n    @Input() stepDown: number | null = null;\r\n    @Input() suffix: string | null = null;\r\n    @Input() prefix: string | null = null;\r\n    @Input() displayButtons: boolean = false;\r\n    @Input() alignToRight: boolean = true;\r\n    @Input() selectOnFocus: boolean = true;\r\n\t@Input() preventDefaultOnKeydown: boolean = false;\r\n    @Input() @HostBinding('style.width') width: string = 'auto';\r\n\t@Input() enableThousandSeparator: boolean = true;\r\n\t@Input() customThousandSeparator: string | null = null;\r\n    @Input() nonNullable: boolean = false;\r\n    @Input() override clearValue: number | null = null;\r\n\t@Input() inputMode: string = 'numeric';\r\n\r\n    @Output() onChanged: EventEmitter<number | null> = new EventEmitter();\r\n    @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter();\r\n    @Output() onBlur: EventEmitter<FocusEvent> = new EventEmitter();\r\n    @Output() onKeydown: EventEmitter<KeyboardEvent> = new EventEmitter();\r\n    @Output() onEnter: EventEmitter<KeyboardEvent> = new EventEmitter();\r\n    @Output() onUp: EventEmitter<void> = new EventEmitter();\r\n    @Output() onDown: EventEmitter<void> = new EventEmitter();\r\n\r\n    #numberValue: number | null = null;\r\n    arrowTimer: Subscription | null = null;\r\n    inputNumberButtonMouseDownEvent: MouseEvent | null = null;\r\n    inputNumberButtonMouseDownMode: 'up' | 'down' | null = null;\r\n\tfromWriteValue: boolean = false;\r\n\r\n    allowedKeys: string[] = [\r\n        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\r\n        '-', ',', '.',\r\n        'Backspace', 'Home', 'End', 'Tab', 'ArrowUp', 'ArrowRight', 'ArrowBottom', 'ArrowLeft', 'Enter', 'Delete'\r\n    ];\r\n\r\n\toverride enterAsTabType: string = 'inputnumber';\r\n\r\n    get numberValue(): number | null {\r\n        return this.#numberValue;\r\n    }\r\n\r\n    set numberValue(numberValue: number | null) {\r\n        if (this.nonNullable && numberValue === null) {\r\n            return;\r\n        }\r\n        this.#numberValue = this.checkMaxAndMin(numberValue);\r\n        if (this.onChangeFn !== null && !this.fromWriteValue) {\r\n            this.onChangeFn(this.numberValue);\r\n        }\r\n\t\tthis.fromWriteValue = false;\r\n        this.onChanged.emit(this.numberValue);\r\n    }\r\n\r\n    get filled(): boolean {\r\n        return this.numberValue !== null;\r\n    }\r\n\r\n    get allowStepUp(): boolean {\r\n        return this.max === null ? true : this.numberValue < this.max;\r\n    }\r\n\r\n    get allowStepDown(): boolean {\r\n        return this.min === null ? true : this.numberValue > this.min;\r\n    }\r\n\r\n    get displayStepButtons(): boolean {\r\n        return this.displayButtons && (this.step !== null || this.stepUp !== null || this.stepDown !== null);\r\n    }\r\n\r\n    inputNumberButtonMouseDown(event: MouseEvent, mode: 'up' | 'down'): void {\r\n        if (\r\n            this.isDisabled || this.isReadonly ||\r\n            (mode === 'up' && !this.allowStepUp) ||\r\n            (mode === 'down' && !this.allowStepDown)\r\n        ) {\r\n            return;\r\n        }\r\n        this.inputNumberButtonMouseDownEvent = event;\r\n        this.inputNumberButtonMouseDownMode = mode;\r\n        this.stopArrowTimer();\r\n        this.startArrowTimer(mode);\r\n    }\r\n\r\n    inputNumberButtonMouseUp(event: MouseEvent): void {\r\n        this.stopArrowTimer();\r\n        if (this.inputNumberButtonMouseDownEvent !== null && this.inputNumberButtonMouseDownMode !== null) {\r\n            if (event.timeStamp - this.inputNumberButtonMouseDownEvent.timeStamp < 200) {\r\n                this.makeStep(this.inputNumberButtonMouseDownMode, true);\r\n            }\r\n        }\r\n        this.inputNumberButtonMouseDownEvent = null;\r\n        this.inputNumberButtonMouseDownMode = null;\r\n    }\r\n\r\n    inputNumberButtonMouseLeave(): void {\r\n        this.stopArrowTimer();\r\n    }\r\n\r\n    startArrowTimer(mode: 'up' | 'down'): void {\r\n        if (this.arrowTimer !== null) {\r\n            this.stopArrowTimer();\r\n        }\r\n        this.arrowTimer = timer(500, 50).subscribe(() => {\r\n            this.makeStep(mode);\r\n        });\r\n    }\r\n\r\n    stopArrowTimer(): void {\r\n        if (this.arrowTimer !== null) {\r\n            this.arrowTimer.unsubscribe();\r\n            this.arrowTimer = null;\r\n        }\r\n    }\r\n\r\n    keydown(event: KeyboardEvent): void {\r\n        this.stopArrowTimer();\r\n        this.onKeydown.emit(event);\r\n\t\tif (this.preventDefaultOnKeydown) {\r\n\t\t\treturn;\r\n\t\t}\r\n        if (event.key.toLocaleLowerCase() === 'enter') {\r\n            this.onEnter.emit(event);\r\n        }\r\n        if (event.key.toLocaleLowerCase() === 'arrowup') {\r\n            this.makeStep('up');\r\n        }\r\n        if (event.key.toLocaleLowerCase() === 'arrowdown') {\r\n            this.makeStep('down');\r\n        }\r\n        if (event.ctrlKey === true && event.key.toLocaleLowerCase() === 'a' && this.input !== undefined) {\r\n            this.input.nativeElement.select();\r\n        }\r\n        if (event.ctrlKey === true && (event.key.toLocaleLowerCase() === 'c' || event.key.toLocaleLowerCase() === 'x' || event.key.toLocaleLowerCase() === 'v')) {\r\n            return;\r\n        }\r\n        if (!this.allowedKeys.includes(event.key)) {\r\n            event.preventDefault();\r\n            return;\r\n        }\r\n        if (this.input === undefined) {\r\n            return;\r\n        }\r\n        const inputValue: string = this.input.nativeElement.value;\r\n        if (event.key === '.' || event.key === ',') {\r\n            if (this.decimalCount === 0 || inputValue !== null && (inputValue.indexOf('.') !== -1 || inputValue.indexOf(',') !== -1)) {\r\n                event.preventDefault();\r\n                return;\r\n            }\r\n        }\r\n        if (event.key === '-') {\r\n\t\t\tconst isAllSelected: boolean = this.input.nativeElement.selectionEnd === this.input.nativeElement.value.length;\r\n\t\t\tif (!isAllSelected && (inputValue.indexOf('-') !== -1 || this.input.nativeElement.selectionStart !== 0)) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n        }\r\n    }\r\n\r\n\tclearClicked(): void {\r\n\t\tthis.defaultClear(() => {\r\n\t\t\tthis.numberValue = null;\r\n            this.setInputValue();\r\n\t\t});\r\n\t}\r\n\r\n\tdrop(dragEvent: DragEvent): void {\r\n\t\tdragEvent.stopPropagation();\r\n\t\tdragEvent.preventDefault();\r\n\t\tif (dragEvent.dataTransfer === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst clipboardText: string = dragEvent.dataTransfer.getData('Text');\r\n        const numberValue: number | null = strToNumber(clipboardText);\r\n\t\tif (this.input !== undefined && numberValue !== null) {\r\n\t\t\tthis.input.nativeElement.value = numberValue.toString();\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(clipboardEvent: ClipboardEvent): void {\r\n\t\tclipboardEvent.stopPropagation();\r\n\t\tclipboardEvent.preventDefault();\r\n\t\tif (clipboardEvent.clipboardData === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst clipboardText: string = clipboardEvent.clipboardData.getData('Text');\r\n        const numberValue: number | null = strToNumber(clipboardText);\r\n\t\tif (this.input !== undefined && numberValue !== null) {\r\n\t\t\tthis.input.nativeElement.value = numberValue.toString();\r\n\t\t}\r\n\t}\r\n\r\n    keyup(event: KeyboardEvent): void {\r\n        this.onKeyup.emit(event);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n        this.stopArrowTimer();\r\n\r\n        if (this.onTouchedFn !== null) {\r\n            this.onTouchedFn(this.numberValue);\r\n        }\r\n        const numberValue: number | null = strToNumber(this.input.nativeElement.value);\r\n        if (numberValue !== this.numberValue) {\r\n            this.numberValue = numberValue;\r\n\t\t\tthis.cdr.detectChanges();\r\n        }\r\n    }\r\n\r\n    makeStep(mode: 'up' | 'down', setInputValue: boolean = false): void {\r\n\t\tif (this.isDisabled || this.isReadonly) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n        let step: number | null = mode === 'up' ? this.stepUp : this.stepDown;\r\n        if (step === null) {\r\n            step = this.step;\r\n            if (step === null) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (this.numberValue !== null) {\r\n            if (mode === 'up') {\r\n                this.numberValue = this.numberValue + step;\r\n            } else {\r\n                this.numberValue = this.numberValue - step;\r\n            }\r\n            this.setInputValue(setInputValue);\r\n        }\r\n\r\n        if (mode === 'up') {\r\n            this.onUp.emit();\r\n        }\r\n\r\n        if (mode === 'down') {\r\n            this.onDown.emit();\r\n        }\r\n    }\r\n\r\n    setInputValue(displayNumberValue: boolean = false): void {\r\n        if (this.input !== undefined) {\r\n            let value: string = '';\r\n            if (this.numberValue !== null) {\r\n                if (displayNumberValue) {\r\n\t\t\t\t\tvalue = Intl.NumberFormat(this.locale, {\r\n\t\t\t\t\t\tuseGrouping: this.enableThousandSeparator,\r\n\t\t\t\t\t\tminimumIntegerDigits: this.zeroFillBefore + 1,\r\n\t\t\t\t\t\tminimumFractionDigits: this.minDecimalCount,\r\n\t\t\t\t\t\tmaximumFractionDigits: this.maxDecimalCount\r\n\t\t\t\t\t}).format(this.numberValue);\r\n                } else {\r\n                    value = this.numberValue.toString();\r\n                }\r\n\r\n\t\t\t\tif (this.customThousandSeparator !== null) {\r\n\t\t\t\t\tconst thousandSeparator: string = getLocaleNumberSymbol(this.locale, NumberSymbol.Group);\r\n\t\t\t\t\tconst thousandSeparatorRegex: RegExp = new RegExp(escapeRegExp(thousandSeparator), 'g');\r\n\t\t\t\t\tvalue = value.replace(thousandSeparatorRegex, this.customThousandSeparator);\r\n\t\t\t\t}\r\n            }\r\n            this.input.nativeElement.value = value;\r\n        }\r\n    }\r\n\r\n    checkMaxAndMin(numberValue: number | null = null): number | null {\r\n        if (numberValue === null) {\r\n            return null;\r\n        }\r\n        if (this.max !== null && numberValue > this.max) {\r\n            return this.max;\r\n        }\r\n        if (this.min !== null && numberValue < this.min) {\r\n            return this.min;\r\n        }\r\n        return numberValue;\r\n    }\r\n\r\n    select(): void {\r\n        if (this.input !== undefined) {\r\n            this.input.nativeElement.select();\r\n        }\r\n    }\r\n\r\n    override writeValue(value: string | number | null): void {\r\n\t\tthis.fromWriteValue = true;\r\n        this.numberValue = strToNumber(value);\r\n        this.setInputValue(true);\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    setFocus(): void {\r\n        if (this.input !== undefined) {\r\n            this.input.nativeElement.focus();\r\n            if (this.selectOnFocus) {\r\n                this.input.nativeElement.select();\r\n            }\r\n        }\r\n    }\r\n\r\n    enableAndSetFocus(): void {\r\n        this.disabled = false;\r\n        if (this.input !== undefined) {\r\n            this.input.nativeElement.disabled = false;\r\n            this.input.nativeElement.focus();\r\n        }\r\n    }\r\n\r\n    focusFromInput(event: FocusEvent): void {\r\n        if (this.isReadonly || this.isDisabled) {\r\n            return;\r\n        }\r\n        this.focused = true;\r\n        this.onFocus.emit(event);\r\n        this.setInputValue();\r\n        if (this.selectOnFocus && this.input !== undefined) {\r\n            this.input.nativeElement.select();\r\n        }\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    override focus(): void {\r\n        if (this.input !== undefined) {\r\n            this.input.nativeElement.focus();\r\n        }\r\n    }\r\n\r\n    blur(event: FocusEvent): void {\r\n        this.focused = false;\r\n        this.onBlur.emit(event);\r\n        this.setInputValue(true);\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['decimalCount'] !== undefined && changes['decimalCount'].currentValue !== null) {\r\n            this.minDecimalCount = changes['decimalCount'].currentValue;\r\n            this.maxDecimalCount = changes['decimalCount'].currentValue;\r\n        }\r\n        this.setInputValue();\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.setControlComponent();\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.setInputValue();\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, inject, Input, LOCALE_ID, Output, ViewChild } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { debounceTime, Subject } from \"rxjs\";\r\nimport { CHART_BACKGROUND_DEFAULT_STYLE, CHART_DEFAULT_AXIS_VALUE_PIPE, CHART_RANGE_SELECTION_DEFAULT_LINE_STYLE, CHART_RANGE_SELECTION_DEFAULT_RECT_STYLE, CHART_STYLE_DEFAULT } from \"./chart.const\";\r\nimport { getMaxOfAxis, getMinOfAxis, processSeries, processData, processMargin, processSeriesDate } from \"./chart.helpers\";\r\nimport { Axis, ProcessedAxis, AxisType, ChartConfiguration, ProcessedChartConfiguration, ChartContextMenuItem, ChartCoordinates, ChartDateAggregation, ChartDrawFinishedParams, ChartDrawStartedParams, ChartMode, ChartPosition, ChartSize, ChartStyle, SeriesData, SeriesType, ProcessedSeries, MaxMode, ChartAxisValuePipeFunction, ChartMarginProcessed, ChartStyleFull, SeriesDataProcessed, SeriesPointMode, SeriesPointType, ChartPieTemplate, ChartArcInformation, ChartPieTemplateDrawFunction, ChartPieLegendPosition, ChartPadding, ChartMargin, ChartPieTemplateFull, ChartColumnHoverDrawFunction, ChartSeriesValuePipeFunction, AxisDrawValue, Series } from \"./chart.interfaces\";\r\nimport { CHART_LANGUAGES_EN, CHART_LANGUAGES_HU } from \"./chart.translations\";\r\nimport { CHART_DEFAULT_AREA_STYLES, CHART_DEFAULT_COLUMN_HOVER_DRAW_FUNCTION, CHART_DEFAULT_CONFIGURATION, CHART_DEFAULT_PIE_TEMPLATES_DRAW_FUNCTION, CHART_DEFAULT_STYLES, CHART_PIE_TEMPLATE_DEFAULTS, SERIES_VALUE_PIPE_FUNCTION_DEFAULT } from './chart.tokens';\r\nimport { DropdownComponent } from \"../dropdown/dropdown.component\";\r\nimport { distanceNumbers, minMax, onlyUnique, TranslationsService } from \"../../shared\";\r\nimport { InputNumberComponent } from \"../inputnumber/inputnumber.component\";\r\nimport { InputTextComponent } from \"../inputtext/inputtext.component\";\r\nimport { LabelValue } from \"../../interfaces\";\r\nimport { ButtonDirective } from '../../shared/directives/button.directive';\r\nimport { TranslationPipe } from '../../shared/pipes';\r\n\r\nclass ChartCanvas {\r\n\r\n\tcanvasElement: ElementRef<HTMLCanvasElement> | undefined = undefined;\r\n\r\n\tget context(): CanvasRenderingContext2D | null {\r\n\t\tif (this.canvasElement === undefined) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.canvasElement.nativeElement.getContext('2d');\r\n\t}\r\n\r\n\tupdateSize(): void {\r\n\t\tif (this.canvasElement === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//Fit canvas to container\r\n\t\tthis.canvasElement.nativeElement.width = this.canvasElement.nativeElement.offsetWidth;\r\n\t\tthis.canvasElement.nativeElement.height = this.canvasElement.nativeElement.offsetHeight;\r\n\t}\r\n\r\n\ttext(text: string, position: ChartPosition, maxWidth?: number, boxWidth?: number, align?: CanvasTextAlign): void {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (boxWidth !== undefined && align !== undefined) {\r\n\t\t\tif (align === 'right' || align === 'end') {\r\n\t\t\t\tposition.x += boxWidth;\r\n\t\t\t}\r\n\t\t\tif (align === 'center') {\r\n\t\t\t\tposition.x += (boxWidth / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.context.fillText(text, position.x, position.y, maxWidth);\r\n\t}\r\n\r\n\trect(position: ChartPosition, width: number, height: number): void {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.context.fillRect(position.x, position.y, width, height);\r\n\t}\r\n\r\n\tline(positions: ChartPosition[]): void {\r\n\t\tif (this.context === null || positions.length < 2) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.context.beginPath();\r\n\t\tthis.context.moveTo(positions[0].x, positions[0].y);\r\n\t\tfor (let i = 1; i < positions.length; i++) {\r\n\t\t\tthis.context.lineTo(positions[i].x, positions[i].y);\r\n\t\t}\r\n\t\tthis.context.stroke();\r\n\t}\r\n\r\n\tlineFill(positions: ChartPosition[]): void {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.line(positions);\r\n\t\tthis.context.fill();\r\n\t}\r\n\r\n\tcircle(position: ChartPosition, radius: number): ChartArcInformation | null {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.arc(position, radius, 0, 2 * Math.PI, false);\r\n\t}\r\n\r\n\tarc(position: ChartPosition, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): ChartArcInformation | null {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tthis.context.beginPath();\r\n\t\tthis.context.moveTo(position.x, position.y);\r\n\t\tthis.context.arc(position.x, position.y, Math.max(0, radius), startAngle, endAngle, counterclockwise);\r\n\t\tthis.context.stroke();\r\n\t\tthis.context.fill();\r\n\t\tthis.context.closePath();\r\n\r\n\t\t// Arc points\r\n\t\tconst startAnglePosition: ChartPosition = {\r\n\t\t\tx: position.x + Math.cos(startAngle) * radius,\r\n\t\t\ty: position.y + Math.sin(startAngle) * radius\r\n\t\t}\r\n\r\n\t\tconst endAnglePosition: ChartPosition = {\r\n\t\t\tx: position.x + Math.cos(endAngle) * radius,\r\n\t\t\ty: position.y + Math.sin(endAngle) * radius\r\n\t\t}\r\n\r\n\t\tconst middleAnglePosition: ChartPosition = {\r\n\t\t\tx: position.x + Math.cos(startAngle + (endAngle - startAngle) / 2) * radius,\r\n\t\t\ty: position.y + Math.sin(startAngle + (endAngle - startAngle) / 2) * radius\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tstartAnglePosition,\r\n\t\t\tendAnglePosition,\r\n\t\t\tmiddleAnglePosition,\r\n\t\t\tcenterPosition: position\r\n\t\t}\r\n\t}\r\n\r\n\tmidPoint(positionA: ChartPosition, positionB: ChartPosition, percent: number): ChartPosition {\r\n\t\treturn {\r\n\t\t\tx: positionA.x + (positionB.x - positionA.x) * percent / 100,\r\n\t\t\ty: positionA.y + (positionB.y - positionA.y) * percent / 100\r\n\t\t}\r\n\t}\r\n\r\n\tsetStyle(style: ChartStyle | null | undefined): void {\r\n\r\n\t\tif (this.context === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// Extend to full style\r\n\t\tconst FULL_STYLE: ChartStyleFull = {\r\n\t\t\t...CHART_STYLE_DEFAULT,\r\n\t\t\t...(style !== null && style !== undefined ? style : {})\r\n\t\t}\r\n\r\n\t\tif (FULL_STYLE.opacity !== null) {\r\n\t\t\tthis.context.globalAlpha = FULL_STYLE.opacity;\r\n\t\t}\r\n\r\n\t\tthis.context.setLineDash(FULL_STYLE.lineDashSegments);\r\n\r\n\t\tconst fontParts: string[] = [];\r\n\t\tif (FULL_STYLE.textStyle !== null) {\r\n\t\t\tfontParts.push(FULL_STYLE.textStyle);\r\n\t\t}\r\n\t\tfontParts.push(FULL_STYLE.fontSize + 'px');\r\n\t\tfontParts.push(FULL_STYLE.fontFamily);\r\n\r\n\t\tthis.context.font = fontParts.join(' ');\r\n\r\n\t\tthis.context.fillStyle = FULL_STYLE.fill;\r\n\r\n\t\tthis.context.strokeStyle = FULL_STYLE.stroke || 'none';\r\n\r\n\t\tif (FULL_STYLE.lineWidth !== null) {\r\n\t\t\tthis.context.lineWidth = FULL_STYLE.lineWidth;\r\n\t\t}\r\n\r\n\t\tthis.context.textAlign = FULL_STYLE.textAlign;\r\n\t\tthis.context.textBaseline = FULL_STYLE.textBaseline;\r\n\r\n\t}\r\n\r\n\tmeasureTextHeight(text: string): number {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tconst textMetrics: TextMetrics = this.context.measureText(text);\r\n\t\treturn textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent;\r\n\t}\r\n\r\n\tmeasureTextWidth(text: string): number {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\treturn this.context.measureText(text).width;\r\n\t}\r\n\r\n\tclear(): void {\r\n\t\tif (this.context === null || this.canvasElement === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.context.clearRect(0, 0, this.canvasElement.nativeElement.width, this.canvasElement.nativeElement.height);\r\n\t}\r\n\r\n\tclipRect(chartCoordinates: ChartCoordinates): void {\r\n\t\tif (this.context === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.context.rect(chartCoordinates.left, chartCoordinates.top, chartCoordinates.width, chartCoordinates.height);\r\n\t\tthis.context.clip();\r\n\t}\r\n\r\n\tmouseEventToPosition(mouseEvent: MouseEvent | WheelEvent): ChartPosition {\r\n\t\tif (this.canvasElement === undefined) {\r\n\t\t\treturn {\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: 0\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst canvasDomRect: DOMRect = this.canvasElement.nativeElement.getBoundingClientRect();\r\n\t\treturn {\r\n\t\t\tx: mouseEvent.clientX - canvasDomRect.left,\r\n\t\t\ty: mouseEvent.clientY - canvasDomRect.top\r\n\t\t}\r\n\t}\r\n\r\n\tdownloadImage(name: string, type: string, quality: number): void {\r\n\r\n\t\tif (this.canvasElement === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst imageDataUrl: string | null = this.canvasElement.nativeElement.toDataURL(type, quality);\r\n\r\n\t\tif (imageDataUrl === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst a: HTMLAnchorElement = document.createElement('a');\r\n\t\ta.href = imageDataUrl;\r\n\t\ta.download = name;\r\n\t\ta.target = '_blank';\r\n\t\ta.click();\r\n\t}\r\n\r\n\tconstructor(canvasElement: ElementRef<HTMLCanvasElement> | undefined = undefined) {\r\n\t\tthis.canvasElement = canvasElement;\r\n\t}\r\n\r\n\r\n}\r\n\r\nclass ChartAxisComponent {\r\n\r\n\tchartComponent: ChartComponent | null = null;\r\n\r\n\taxis: ProcessedAxis | null = null;\r\n\r\n\taxisType: AxisType = AxisType.LEFT;\r\n\r\n\t#coordinates: ChartCoordinates = {\r\n\t\tleft: 0,\r\n\t\ttop: 0,\r\n\t\twidth: 0,\r\n\t\theight: 0\r\n\t}\r\n\r\n\ttitleWidth: number = 0;\r\n\tdrawValuesWidth: number = 0;\r\n\r\n\tdrawValues: AxisDrawValue[] = [];\r\n\r\n\tget titleWidthAndSpace(): number {\r\n\t\tif (this.axis === null) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\treturn this.axis.showTitle ? this.titleWidth + this.axis.titleSpace : 0;\r\n\t}\r\n\r\n\tget coordinates(): ChartCoordinates {\r\n\t\tif (this.axis === null) {\r\n\t\t\treturn this.#coordinates;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\t...this.#coordinates,\r\n\t\t\twidth: this.drawValuesWidth + this.titleWidthAndSpace\r\n\t\t}\r\n\t}\r\n\r\n\tget axisSeries(): ProcessedSeries[] {\r\n\t\tif (this.chartComponent === null) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tconst axisSeries: ProcessedSeries[] = [];\r\n\t\tfor (let series of this.chartComponent.visibleSeries) {\r\n\t\t\tif (series.axis === this.axisType) {\r\n\t\t\t\taxisSeries.push(series);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn axisSeries;\r\n\t}\r\n\r\n\tget axisSeriesText(): string {\r\n\t\treturn this.axisSeries.map(({ title }) => title).join(' / ');\r\n\t}\r\n\r\n\tsetCoordinates(coordinates: ChartCoordinates): void {\r\n\t\tthis.#coordinates = coordinates;\r\n\t}\r\n\r\n\tmin(): number | null {\r\n\t\tif (this.chartComponent === null || this.axis === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn getMinOfAxis(this.axis, this.chartComponent.processedConfiguration, this.axisType);\r\n\t}\r\n\r\n\tmax(): number | null {\r\n\t\tif (this.chartComponent === null || this.axis === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn getMaxOfAxis(this.axis, this.chartComponent.processedConfiguration, this.axisType);\r\n\t}\r\n\r\n\tminNumber(): number {\r\n\t\treturn this.min() || 0;\r\n\t}\r\n\r\n\tmaxNumber(): number {\r\n\t\treturn this.max() || 100;\r\n\t}\r\n\r\n\tgenerateDrawValues(): AxisDrawValue[] {\r\n\r\n\t\tif (this.chartComponent === null || this.axis === null) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst min: number = this.minNumber();\r\n\t\tconst max: number = this.maxNumber();\r\n\t\tconst drawValues: AxisDrawValue[] = [];\r\n\t\tconst axisValuePipe: ChartAxisValuePipeFunction = this.chartComponent.processedConfiguration.axisValuePipe || CHART_DEFAULT_AXIS_VALUE_PIPE;\r\n\r\n\t\tif (this.axis.steps !== null && this.axis.steps > 0) {\r\n\t\t\tlet actualValue: number = min;\r\n\t\t\twhile (actualValue < max) {\r\n\t\t\t\tdrawValues.push({\r\n\t\t\t\t\toriginalValue: actualValue,\r\n\t\t\t\t\tdisplayValue: axisValuePipe({\r\n\t\t\t\t\t\taxisType: this.axisType,\r\n\t\t\t\t\t\tvalue: actualValue\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tskipValueDisplay: false,\r\n\t\t\t\t\tvalueScalePercent: (distanceNumbers(min, actualValue) / distanceNumbers(min, max)) * 100\r\n\t\t\t\t});\r\n\t\t\t\tactualValue += this.axis.steps;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst step: number = (max - min) / this.axis.divide;\r\n\t\t\tfor (let i = 0; i < this.axis.divide; i++) {\r\n\t\t\t\tdrawValues.push({\r\n\t\t\t\t\toriginalValue: min + (step * i),\r\n\t\t\t\t\tdisplayValue: axisValuePipe({\r\n\t\t\t\t\t\taxisType: this.axisType,\r\n\t\t\t\t\t\tvalue: min + (step * i)\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tskipValueDisplay: false,\r\n\t\t\t\t\tvalueScalePercent: (distanceNumbers(min, min + (step * i)) / distanceNumbers(min, max)) * 100\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.chartComponent.processedConfiguration.showZeroLine && min < 0) {\r\n\t\t\tdrawValues.push({\r\n\t\t\t\toriginalValue: 0,\r\n\t\t\t\tdisplayValue: '0',\r\n\t\t\t\tskipValueDisplay: true,\r\n\t\t\t\tvalueScalePercent: (distanceNumbers(min, 0) / distanceNumbers(min, max)) * 100\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tdrawValues.push({\r\n\t\t\toriginalValue: max,\r\n\t\t\tdisplayValue: axisValuePipe({\r\n\t\t\t\taxisType: this.axisType,\r\n\t\t\t\tvalue: max\r\n\t\t\t}),\r\n\t\t\tskipValueDisplay: false,\r\n\t\t\tvalueScalePercent: 100\r\n\t\t});\r\n\r\n\t\tthis.drawValues = drawValues;\r\n\r\n\t\treturn this.drawValues;\r\n\t}\r\n\r\n\tprecalculate(): void {\r\n\t\tif (this.chartComponent === null || this.axis === null || !this.axis.visible) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.axis.showTitle && this.axisSeries.length > 0) {\r\n\t\t\tthis.chartComponent.canvas.setStyle(this.axis.titleStyle);\r\n\t\t\tthis.titleWidth = this.chartComponent.canvas.measureTextHeight(this.axisSeriesText);\r\n\t\t}\r\n\r\n\t\tthis.chartComponent.canvas.setStyle(this.axis.labelStyle);\r\n\t\tthis.drawValuesWidth = Math.max(...this.drawValues.map(({ displayValue }) => this.chartComponent!.canvas.measureTextWidth(displayValue)));\r\n\t}\r\n\r\n\tdraw(): void {\r\n\t\tif (this.chartComponent === null || this.axis === null || !this.axis.visible) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Title\r\n\t\tif (this.axis.showTitle) {\r\n\t\t\tthis.chartComponent.canvas.context!.save();\r\n\t\t\tthis.chartComponent.canvas.context!.translate(this.coordinates.left, (this.coordinates.top + this.coordinates.height) / 2);\r\n\t\t\tconst rotate: number = this.axisType === AxisType.LEFT ? -90 * (Math.PI / 180) : 90 * (Math.PI / 180);\r\n\t\t\tthis.chartComponent.canvas.setStyle({\r\n\t\t\t\ttextBaseline: 'top',\r\n\t\t\t\ttextAlign: 'center',\r\n\t\t\t\t...this.axis.titleStyle\r\n\t\t\t});\r\n\t\t\tif (this.chartComponent.canvas.context !== null) {\r\n\t\t\t\tthis.chartComponent.canvas.context.rotate(rotate);\r\n\t\t\t}\r\n\t\t\tthis.chartComponent.canvas.text(this.axisSeriesText, {\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: 0\r\n\t\t\t});\r\n\t\t\tthis.chartComponent.canvas.context!.restore();\r\n\t\t}\r\n\r\n\t\t// Values\r\n\t\tconst unitHeight: number = this.coordinates.height / distanceNumbers(this.minNumber(), this.maxNumber());\r\n\t\tfor (let drawValue of this.drawValues) {\r\n\r\n\t\t\tif (drawValue.skipValueDisplay) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst y: number = unitHeight * distanceNumbers(this.minNumber(), drawValue.originalValue);\r\n\r\n\t\t\t// Draw label\r\n\t\t\tthis.chartComponent.canvas.setStyle(this.axis.labelStyle);\r\n\t\t\tlet textAlign: CanvasTextAlign = CHART_STYLE_DEFAULT.textAlign;\r\n\t\t\tif (this.axis.labelStyle !== null && this.axis.labelStyle.textAlign !== undefined) {\r\n\t\t\t\ttextAlign = this.axis.labelStyle.textAlign;\r\n\t\t\t}\r\n\t\t\tswitch(this.axisType) {\r\n\t\t\t\tcase AxisType.LEFT:\r\n\t\t\t\t\tthis.chartComponent.canvas.text(drawValue.displayValue, {\r\n\t\t\t\t\t\tx: this.coordinates.left + this.titleWidthAndSpace,\r\n\t\t\t\t\t\ty: this.coordinates.top + this.coordinates.height - y\r\n\t\t\t\t\t}, undefined, this.drawValuesWidth, textAlign);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase AxisType.RIGHT:\r\n\t\t\t\t\tthis.chartComponent.canvas.text(drawValue.displayValue, {\r\n\t\t\t\t\t\tx: this.coordinates.left - this.coordinates.width,\r\n\t\t\t\t\t\ty: this.coordinates.top + this.coordinates.height - y\r\n\t\t\t\t\t}, undefined, this.drawValuesWidth, textAlign);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tconstructor(chartComponent: ChartComponent, axis: ProcessedAxis, axisType: AxisType) {\r\n\t\tthis.chartComponent = chartComponent;\r\n\t\tthis.axis = axis;\r\n\t\tthis.axisType = axisType;\r\n\t}\r\n\r\n}\r\n\r\nclass ChartLegendComponent {\r\n\r\n\tchartComponent: ChartComponent | null = null;\r\n\r\n\tcoordinates: ChartCoordinates = {\r\n\t\tleft: 0,\r\n\t\ttop: 0,\r\n\t\twidth: 0,\r\n\t\theight: 0\r\n\t}\r\n\r\n\tsetCoordinates(coordinates: ChartCoordinates): void {\r\n\t\tthis.coordinates = coordinates;\r\n\t}\r\n\r\n\tprecalculateWidth(): number {\r\n\t\tif (this.chartComponent === null || this.chartComponent.visibleSeries.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tthis.chartComponent.canvas.setStyle(this.chartComponent.processedConfiguration.legendTitleStyle);\r\n\t\tconst fullSpaceBetween: number = (this.chartComponent.visibleSeries.length - 1) * this.chartComponent.processedConfiguration.legendSpaceBetween;\r\n\t\tconst fullTitleWidth: number = this.chartComponent.visibleSeries.map(({ title }) => this.chartComponent!.canvas.measureTextWidth(title)).reduce((a, b) => a + b, 0);\r\n\t\treturn fullSpaceBetween + fullTitleWidth + (this.chartComponent.visibleSeries.length * (this.chartComponent.processedConfiguration.legendSpaceBeforeTitle + this.chartComponent.processedConfiguration.legendItemSize));\r\n\t}\r\n\r\n\tdraw(): void {\r\n\t\tif (this.chartComponent === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst legendPosition: ChartPosition = {\r\n\t\t\tx: this.coordinates.left,\r\n\t\t\ty: this.coordinates.top\r\n\t\t};\r\n\r\n\t\tlet seriesIndex: number = 0;\r\n\t\tfor (let series of this.chartComponent.legendSeries) {\r\n\t\t\tlet defaultStyle: ChartStyle = this.chartComponent.getDefaultStyleByIndex(seriesIndex);\r\n\t\t\tthis.chartComponent.canvas.setStyle({\r\n\t\t\t\t...defaultStyle,\r\n\t\t\t\t...series.barStyle\r\n\t\t\t});\r\n\t\t\tswitch(series.type) {\r\n\t\t\t\tcase SeriesType.AREA:\r\n\t\t\t\tcase SeriesType.BAR:\r\n\t\t\t\t\tthis.chartComponent.canvas.rect({\r\n\t\t\t\t\t\tx: legendPosition.x,\r\n\t\t\t\t\t\ty: legendPosition.y + (this.coordinates.height / 2) - (this.chartComponent.processedConfiguration.legendItemSize / 2)\r\n\t\t\t\t\t}, this.chartComponent.processedConfiguration.legendItemSize, this.chartComponent.processedConfiguration.legendItemSize);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SeriesType.LINE:\r\n\t\t\t\tcase SeriesType.LINE_STEP_AFTER:\r\n\t\t\t\tcase SeriesType.LINE_STEP_BEFORE:\r\n\t\t\t\t\tconst y: number = legendPosition.y + (this.coordinates.height / 2);\r\n\t\t\t\t\tthis.chartComponent.canvas.line([{\r\n\t\t\t\t\t\tx: legendPosition.x,\r\n\t\t\t\t\t\ty\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\tx: legendPosition.x + this.chartComponent.processedConfiguration.legendItemSize,\r\n\t\t\t\t\t\ty\r\n\t\t\t\t\t}]);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SeriesType.PIE:\r\n\t\t\t\t\tthis.chartComponent.canvas.circle({\r\n\t\t\t\t\t\tx: legendPosition.x + (this.chartComponent.processedConfiguration.legendItemSize / 2),\r\n\t\t\t\t\t\ty: legendPosition.y + (this.coordinates.height / 2)\r\n\t\t\t\t\t}, this.chartComponent.processedConfiguration.legendItemSize / 2);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SeriesType.POINTS:\r\n\t\t\t\t\tthis.chartComponent.canvas.setStyle({\r\n\t\t\t\t\t\t...defaultStyle,\r\n\t\t\t\t\t\t...series.pointStyle\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.chartComponent.canvas.circle({\r\n\t\t\t\t\t\tx: legendPosition.x + (this.chartComponent.processedConfiguration.legendItemSize / 2),\r\n\t\t\t\t\t\ty: legendPosition.y + (this.coordinates.height / 2)\r\n\t\t\t\t\t}, this.chartComponent.processedConfiguration.legendItemSize / 2);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// Add item width\r\n\t\t\tlegendPosition.x += this.chartComponent.processedConfiguration.legendItemSize + this.chartComponent.processedConfiguration.legendSpaceBeforeTitle;\r\n\r\n\t\t\t// Draw title\r\n\t\t\tthis.chartComponent.canvas.setStyle(this.chartComponent.processedConfiguration.legendTitleStyle);\r\n\t\t\tthis.chartComponent.canvas.text(series.title, {\r\n\t\t\t\tx: legendPosition.x,\r\n\t\t\t\ty: this.coordinates.top + (this.coordinates.height / 2)\r\n\t\t\t});\r\n\t\t\tlegendPosition.x += this.chartComponent.canvas.measureTextWidth(series.title) + this.chartComponent.processedConfiguration.legendSpaceBetween;\r\n\r\n\t\t\tseriesIndex++;\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor(chartComponent: ChartComponent) {\r\n\t\tthis.chartComponent = chartComponent;\r\n\t}\r\n\r\n}\r\n\r\nclass ChartHeaderComponent {\r\n\r\n\tchartComponent: ChartComponent | null = null;\r\n\r\n\tcoordinates: ChartCoordinates = {\r\n\t\tleft: 0,\r\n\t\ttop: 0,\r\n\t\twidth: 0,\r\n\t\theight: 0\r\n\t}\r\n\r\n\tlegend: ChartLegendComponent | null = null;\r\n\r\n\tupdateCoordinates(): void {\r\n\t\tif (this.chartComponent === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.coordinates = {\r\n\t\t\tleft: this.chartComponent.margin.left + this.chartComponent.headerMargin.left,\r\n\t\t\ttop: this.chartComponent.margin.top + this.chartComponent.headerMargin.top,\r\n\t\t\twidth: this.chartComponent.containerCoordinates.width - this.chartComponent.margin.left - this.chartComponent.margin.right - this.chartComponent.headerMargin.left - this.chartComponent.headerMargin.right,\r\n\t\t\theight: this.chartComponent.processedConfiguration.headerHeight\r\n\t\t}\r\n\t}\r\n\r\n\tdraw(): void {\r\n\t\tif (this.chartComponent === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst processedConfiguration: ProcessedChartConfiguration = this.chartComponent.processedConfiguration;\r\n\t\t\r\n\t\tconst headerHeightHalf: number = Math.floor(processedConfiguration.headerHeight / 2);\r\n\r\n\t\t// Title position\r\n\t\tconst titlePosition: ChartPosition = {\r\n\t\t\tx: this.coordinates.left,\r\n\t\t\ty: this.coordinates.top + headerHeightHalf\r\n\t\t}\r\n\r\n\t\t// Title\r\n\t\tif (processedConfiguration.title !== null) {\r\n\t\t\tthis.chartComponent.canvas.setStyle({\r\n\t\t\t\t...processedConfiguration.titleStyle,\r\n\t\t\t\ttextAlign: 'start',\r\n\t\t\t\ttextBaseline: 'middle'\r\n\t\t\t});\r\n\t\t\tthis.chartComponent.canvas.text(processedConfiguration.title, titlePosition);\r\n\t\t}\r\n\r\n\t\t// Draw legend\r\n\t\tif (processedConfiguration.showLegend) {\r\n\t\t\tthis.legend = new ChartLegendComponent(this.chartComponent);\r\n\t\t\tconst legendWidth: number = this.legend.precalculateWidth();\r\n\t\t\tthis.legend.setCoordinates({\r\n\t\t\t\theight: this.coordinates.height,\r\n\t\t\t\tleft: this.coordinates.left + this.coordinates.width - legendWidth,\r\n\t\t\t\ttop: this.coordinates.top,\r\n\t\t\t\twidth: legendWidth\r\n\t\t\t});\r\n\t\t\tthis.legend.draw();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tconstructor(chartComponent: ChartComponent) {\r\n\t\tthis.chartComponent = chartComponent;\r\n\t}\r\n\r\n}\r\n\r\n@Component({\r\n\tselector: 'cf-chart',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tDropdownComponent,\r\n\t\tButtonDirective,\r\n\t\tInputNumberComponent,\r\n\t\tFormsModule,\r\n\t\tInputTextComponent,\r\n\t\tCommonModule,\r\n\t\tTranslationPipe\r\n\t],\r\n\ttemplate: `\r\n\t\t<canvas #canvasElement (contextmenu)=\"showContextMenu($event)\"></canvas>\r\n\t\t<canvas #canvasHoverElement id=\"canvas-hover\" (contextmenu)=\"showContextMenu($event)\"></canvas>\r\n\t\t<div #hoverElement id=\"hover-element\"></div>\r\n\t\t<div id=\"save-image\" *ngIf=\"saveImageWindowVisible\">\r\n\t\t\t<div id=\"save-image-content\" class=\"cf-grid cf-cols-3\">\r\n\t\t\t\t<cf-inputnumber #downloadImageWidth [(ngModel)]=\"downloadImageWidthValue\" (ngModelChange)=\"detectChanges()\" [label]=\"'chart.saveImage.width'|translation\" class=\"cf-col-1\"></cf-inputnumber>\r\n\t\t\t\t<cf-inputnumber #downloadImageHeight [(ngModel)]=\"downloadImageHeightValue\" (ngModelChange)=\"detectChanges()\" [label]=\"'chart.saveImage.height'|translation\" class=\"cf-col-1\"></cf-inputnumber>\r\n\t\t\t\t<cf-dropdown [label]=\"'chart.saveImage.type'|translation\" [values]=\"downloadImageTypes\" [(ngModel)]=\"downloadImageType\" (ngModelChange)=\"detectChanges()\" class=\"cf-col-1\"></cf-dropdown>\r\n\t\t\t\t<cf-inputtext #downloadImageFileName [(ngModel)]=\"downloadImageFileNameValue\" [value]=\"processedConfiguration.title\" [label]=\"'chart.saveImage.name'|translation\" class=\"cf-col-3\"></cf-inputtext>\r\n\t\t\t\t<button cfButton [severity]=\"'success'\" [label]=\"'chart.saveImage.save'|translation\" (click)=\"downloadImage()\" class=\"cf-col-2\"></button>\r\n\t\t\t\t<button cfButton [severity]=\"'danger'\" [label]=\"'chart.saveImage.cancel'|translation\" (click)=\"hideSaveImageWindow()\" class=\"cf-col-1\"></button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t`,\r\n\tstyleUrls: ['./chart.component.scss'],\r\n\tproviders: [TranslationPipe],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ChartComponent implements AfterViewInit {\r\n\r\n\ttranslationsService: TranslationsService = inject(TranslationsService);\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef, {\r\n\t\tskipSelf: true\r\n\t});\r\n\tel: ElementRef<HTMLElement> = inject(ElementRef);\r\n\tlocaleId: string = inject(LOCALE_ID);\r\n\r\n\t@Input() configuration: ChartConfiguration = {\r\n\t\tseries: []\r\n\t};\r\n\r\n\tmouseDown: MouseEvent | null = null;\r\n\tmouseUpEvent: ((event: MouseEvent) => void) | null = null;\r\n\r\n\theader: ChartHeaderComponent | null = null;\r\n\tleftAxis: ChartAxisComponent | null = null;\r\n\trightAxis: ChartAxisComponent | null = null;\r\n\r\n\tdefaultConfiguration: ProcessedChartConfiguration = inject(CHART_DEFAULT_CONFIGURATION);\r\n\r\n\tprocessedConfiguration: ProcessedChartConfiguration = this.defaultConfiguration;\r\n\r\n\tstyle: ChartStyle | null = null;\r\n\t\r\n\tdefaultStyles: ChartStyle[] = inject(CHART_DEFAULT_STYLES);\r\n\tdefaultAreaStyles: ChartStyle[] = inject(CHART_DEFAULT_AREA_STYLES);\r\n\tchartDefaultPieTemplatesDrawFunction: ChartPieTemplateDrawFunction = inject(CHART_DEFAULT_PIE_TEMPLATES_DRAW_FUNCTION);\r\n\tchartPieTemplateDefaults: ChartPieTemplateFull = inject(CHART_PIE_TEMPLATE_DEFAULTS);\r\n\tcolumnHoverDrawFunction: ChartColumnHoverDrawFunction = inject(CHART_DEFAULT_COLUMN_HOVER_DRAW_FUNCTION);\r\n\tseriesValuePipeFunctionDefault: ChartSeriesValuePipeFunction = inject(SERIES_VALUE_PIPE_FUNCTION_DEFAULT);\r\n\r\n\tinited: boolean = false;\r\n\r\n\tfooterHeight: number = 0;\r\n\trightAxisLeftSpace: number = 10;\r\n\r\n\trangeIndexStart: number = 0;\r\n\trangeIndexEnd: number = 0;\r\n\r\n\trangeSelection: {\r\n\t\tmouseDownEvent: MouseEvent,\r\n\t\tmouseMoveEvent: MouseEvent\r\n\t} | null = null;\r\n\r\n\tcontextMenuElement: HTMLDivElement | null = null;\r\n\r\n\tsaveImageWindowVisible: boolean = false;\r\n\r\n\tdownloadImageWidthValue: number = 0;\r\n\tdownloadImageHeightValue: number = 0;\r\n\tdownloadImageFileNameValue: string = '';\r\n\tdownloadImageType: 'image/png' | 'image/jpeg' = 'image/png';\r\n\tdownloadImageTypes: LabelValue<string>[] = [\r\n\t\t{ label: 'Png', value: 'image/png' },\r\n\t\t{ label: 'Jpeg', value: 'image/jpeg' }\r\n\t];\r\n\tdownloadImageQuality: number = 1;\r\n\r\n\tcanvas: ChartCanvas = new ChartCanvas();\r\n\tcanvasHover: ChartCanvas = new ChartCanvas();\r\n\r\n\tdrawColumns: {\r\n\t\tcoordinates: ChartCoordinates,\r\n\t\tindex: number,\r\n\t\tlabel: string | number,\r\n\t\tseriesValues: {\r\n\t\t\tseries: ProcessedSeries,\r\n\t\t\tseriesIndex: number,\r\n\t\t\tvalue: number,\r\n\t\t\tpointPosition: ChartPosition\r\n\t\t}[]\r\n\t}[] = [];\r\n\tdrawColumnHoverIndex: number | null = null;\r\n\tdrawHoverMouseMovePosition: ChartPosition | null = null;\r\n\r\n\tskipDraw: boolean = false;\r\n\r\n\t@ViewChild('svgElement') svgElement: ElementRef<SVGSVGElement> | undefined = undefined;\r\n\t@ViewChild('hoverElement') hoverElement: ElementRef<HTMLDivElement> | undefined = undefined;\r\n\t@ViewChild('canvasElement') canvasElement: ElementRef<HTMLCanvasElement> | undefined = undefined;\r\n\t@ViewChild('canvasHoverElement') canvasHoverElement: ElementRef<HTMLCanvasElement> | undefined = undefined;\r\n\r\n\t@Output('drawStarted') drawStarted: EventEmitter<ChartDrawStartedParams> = new EventEmitter();\r\n\t@Output('drawFinished') drawFinished: EventEmitter<ChartDrawFinishedParams> = new EventEmitter();\r\n\r\n\tget margin(): ChartMarginProcessed {\r\n\t\treturn processMargin(this.processedConfiguration.margin);\r\n\t}\r\n\r\n\tget headerMargin(): ChartMarginProcessed {\r\n\t\treturn processMargin(this.processedConfiguration.headerMargin);\r\n\t}\r\n\r\n\tget graphDrawAreaCoordinates(): ChartCoordinates {\r\n\t\tconst domRect: DOMRect = this.el.nativeElement.getBoundingClientRect();\r\n\t\tlet left: number = this.margin.left;\r\n\t\tlet top: number = this.margin.top;\r\n\t\tif (this.processedConfiguration.showHeader) {\r\n\t\t\ttop += this.processedConfiguration.headerHeight + this.headerMargin.bottom;\r\n\t\t}\r\n\r\n\t\tlet width: number = domRect.width - this.margin.right - this.margin.left;\r\n\r\n\t\tlet height: number = domRect.height - this.margin.top - this.margin.bottom - this.footerHeight - 10;\r\n\t\tif (this.processedConfiguration.showHeader) {\r\n\t\t\theight -= this.processedConfiguration.headerHeight + this.headerMargin.bottom;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tleft,\r\n\t\t\ttop,\r\n\t\t\twidth,\r\n\t\t\theight\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Chart coordinates\r\n\t * \r\n\t * @returns `ChartCoordinates`\r\n\t */\r\n\tget containerCoordinates(): ChartCoordinates {\r\n\t\tconst domRect: DOMRect = this.el.nativeElement.getBoundingClientRect();\r\n\t\treturn {\r\n\t\t\ttop: 0, \r\n\t\t\tleft: 0,\r\n\t\t\twidth: domRect.width,\r\n\t\t\theight: domRect.height\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Body coordinates\r\n\t * \r\n\t * @returns `ChartCoordinates`\r\n\t */\r\n\tget bodyCoordinates(): ChartCoordinates {\r\n\t\tlet headerHeight: number = 0;\r\n\t\tif (this.header !== null) {\r\n\t\t\theaderHeight = this.header.coordinates.height;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tleft: this.margin.left,\r\n\t\t\ttop: this.margin.top + headerHeight + this.headerMargin.top + this.headerMargin.bottom,\r\n\t\t\twidth: this.containerCoordinates.width - this.margin.left - this.margin.right,\r\n\t\t\theight: this.containerCoordinates.height - this.margin.top - this.margin.bottom - headerHeight - this.footerHeight - this.processedConfiguration.footerMarginTop - this.headerMargin.top - this.headerMargin.bottom\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Chart coordinates\r\n\t * \r\n\t * @returns `ChartCoordinates`\r\n\t */\r\n\tget chartCoordinates(): ChartCoordinates {\r\n\r\n\t\tlet leftAxisWidth: number = 0;\r\n\t\tif (this.leftAxis !== null) {\r\n\t\t\tleftAxisWidth = this.leftAxis.coordinates.width;\r\n\t\t}\r\n\r\n\t\tlet rightAxisWidth: number = 0;\r\n\t\tif (this.rightAxis !== null) {\r\n\t\t\trightAxisWidth = this.rightAxis.coordinates.width;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tleft: this.bodyCoordinates.left + leftAxisWidth,\r\n\t\t\ttop: this.bodyCoordinates.top,\r\n\t\t\theight: this.bodyCoordinates.height,\r\n\t\t\twidth: this.bodyCoordinates.width - leftAxisWidth - rightAxisWidth\r\n\t\t}\r\n\t}\r\n\r\n\tget allSeriesDataLength(): number {\r\n\t\tlet rangeIndexEnd: number = 0;\r\n\t\tfor (let series of this.visibleSeries) {\r\n\t\t\tif (series.processedData.length > rangeIndexEnd) {\r\n\t\t\t\trangeIndexEnd = series.processedData.length;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn rangeIndexEnd;\r\n\t}\r\n\r\n\tget pieTemplates(): ChartPieTemplate[] {\r\n\t\tif (this.processedConfiguration.pieTemplates.length > 0) {\r\n\t\t\treturn this.processedConfiguration.pieTemplates;\r\n\t\t}\r\n\t\treturn this.chartDefaultPieTemplatesDrawFunction({\r\n\t\t\tchart: this\r\n\t\t});\r\n\t}\r\n\r\n\tgetDefaultStyleByIndex(index: number, seriesType: SeriesType = SeriesType.BAR): ChartStyle {\r\n\t\tif (seriesType === SeriesType.AREA) {\r\n\t\t\tif (this.defaultAreaStyles.length === 0) {\r\n\t\t\t\treturn CHART_STYLE_DEFAULT;\r\n\t\t\t}\r\n\t\t\treturn this.defaultAreaStyles[index % this.defaultAreaStyles.length];\r\n\t\t}\r\n\t\tif (this.defaultStyles.length === 0) {\r\n\t\t\treturn CHART_STYLE_DEFAULT;\r\n\t\t}\r\n\t\treturn this.defaultStyles[index % this.defaultStyles.length];\r\n\t}\r\n\r\n\t@HostBinding('style.width')\r\n\tget hostWidth(): string {\r\n\t\tif (this.processedConfiguration.width === 'auto') {\r\n\t\t\treturn '100%';\r\n\t\t} else {\r\n\t\t\treturn this.processedConfiguration.width.toString() + 'px';\r\n\t\t}\r\n\t}\r\n\r\n\t@HostBinding('style.height')\r\n\tget hostHeight(): string {\r\n\t\tif (this.processedConfiguration.height === 'auto') {\r\n\t\t\treturn '100%';\r\n\t\t} else {\r\n\t\t\treturn this.processedConfiguration.height.toString() + 'px';\r\n\t\t}\r\n\t}\r\n\r\n\tshowContextMenu(mouseEvent: MouseEvent): void {\r\n\t\t\r\n\t\tmouseEvent.preventDefault();\r\n\r\n\t\tthis.hideContextMenu();\r\n\r\n\t\tconst contextMenuElement: HTMLDivElement = document.createElement('div');\r\n\t\tcontextMenuElement.classList.add('context-menu');\r\n\t\tcontextMenuElement.style.top = mouseEvent.offsetY.toString() + 'px';\r\n\t\tcontextMenuElement.style.left = mouseEvent.offsetX.toString() + 'px';\r\n\r\n\t\t// Menu items\r\n\t\tconst menuItems: ChartContextMenuItem[] = [{\r\n\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.saveImage'),\r\n\t\t\ticon: 'save-3-line',\r\n\t\t\taction: () => {\r\n\t\t\t\tthis.showSaveImageWindow();\r\n\t\t\t\tthis.hideContextMenu();\r\n\t\t\t},\r\n\t\t\tchildren: []\r\n\t\t}, {\r\n\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.header'),\r\n\t\t\ticon: this.processedConfiguration.showHeader ? 'checkbox-line': 'checkbox-blank-line',\r\n\t\t\taction: () => {\r\n\t\t\t\tthis.processedConfiguration.showHeader = !this.processedConfiguration.showHeader;\r\n\t\t\t\tthis.draw();\r\n\t\t\t\tthis.hideContextMenu();\r\n\t\t\t},\r\n\t\t\tchildren: []\r\n\t\t}, {\r\n\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.legend'),\r\n\t\t\ticon: this.processedConfiguration.showLegend ? 'checkbox-line': 'checkbox-blank-line',\r\n\t\t\taction: () => {\r\n\t\t\t\tthis.processedConfiguration.showLegend = !this.processedConfiguration.showLegend;\r\n\t\t\t\tthis.draw();\r\n\t\t\t\tthis.hideContextMenu();\r\n\t\t\t},\r\n\t\t\tchildren: []\r\n\t\t}, {\r\n\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.showHorizontalAxis'),\r\n\t\t\ticon: this.processedConfiguration.showHorizontalAxis ? 'checkbox-line': 'checkbox-blank-line',\r\n\t\t\taction: () => {\r\n\t\t\t\tthis.processedConfiguration.showHorizontalAxis = !this.processedConfiguration.showHorizontalAxis;\r\n\t\t\t\tthis.draw();\r\n\t\t\t\tthis.hideContextMenu();\r\n\t\t\t},\r\n\t\t\tchildren: []\r\n\t\t}, {\r\n\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.showZeroLine'),\r\n\t\t\ticon: this.processedConfiguration.showZeroLine ? 'checkbox-line': 'checkbox-blank-line',\r\n\t\t\taction: () => {\r\n\t\t\t\tthis.processedConfiguration.showZeroLine = !this.processedConfiguration.showZeroLine;\r\n\t\t\t\tthis.draw();\r\n\t\t\t\tthis.hideContextMenu();\r\n\t\t\t},\r\n\t\t\tchildren: []\r\n\t\t}];\r\n\r\n\t\tif (this.processedConfiguration.leftAxis !== null && this.processedConfiguration.leftAxis.enabled) {\r\n\t\t\tmenuItems.push({\r\n\t\t\t\ttitle: this.translationsService.getTranslation(this.processedConfiguration.leftAxis.visible ? 'chart.contextMenu.hideAxisLeft' : 'chart.contextMenu.showAxisLeft'),\r\n\t\t\t\ticon: this.processedConfiguration.leftAxis.visible ? 'eye-off-line': 'eye-line',\r\n\t\t\t\taction: () => {\r\n\t\t\t\t\tif (this.processedConfiguration.leftAxis === null) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.processedConfiguration.leftAxis.visible = !this.processedConfiguration.leftAxis.visible;\r\n\t\t\t\t\tthis.draw();\r\n\t\t\t\t\tthis.hideContextMenu();\r\n\t\t\t\t},\r\n\t\t\t\tchildren: []\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.processedConfiguration.rightAxis !== null && this.processedConfiguration.rightAxis.enabled) {\r\n\t\t\tmenuItems.push({\r\n\t\t\t\ttitle: this.translationsService.getTranslation(this.processedConfiguration.rightAxis.visible ? 'chart.contextMenu.hideAxisRight' : 'chart.contextMenu.showAxisRight'),\r\n\t\t\t\ticon: this.processedConfiguration.rightAxis.visible ? 'eye-off-line': 'eye-line',\r\n\t\t\t\taction: () => {\r\n\t\t\t\t\tif (this.processedConfiguration.rightAxis === null) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.processedConfiguration.rightAxis.visible = !this.processedConfiguration.rightAxis.visible;\r\n\t\t\t\t\tthis.draw();\r\n\t\t\t\t\tthis.hideContextMenu();\r\n\t\t\t\t},\r\n\t\t\t\tchildren: []\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfor (let series of this.actualSeries) {\r\n\t\t\tconst seriesMenuitem: ChartContextMenuItem = {\r\n\t\t\t\ttitle: series.title,\r\n\t\t\t\ticon: 'bar-chart-fill',\r\n\t\t\t\taction: null,\r\n\t\t\t\tchildren: [{\r\n\t\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.visible'),\r\n\t\t\t\t\ticon: series.visible ? 'checkbox-line': 'checkbox-blank-line',\r\n\t\t\t\t\taction: () => {\r\n\t\t\t\t\t\tseries.visible = !series.visible;\r\n\t\t\t\t\t\tthis.draw();\r\n\t\t\t\t\t\tthis.hideContextMenu();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tchildren: []\r\n\t\t\t\t}]\r\n\t\t\t};\r\n\t\t\tif (series.axis === AxisType.LEFT) {\r\n\t\t\t\tif (this.processedConfiguration.rightAxis !== null && this.processedConfiguration.rightAxis.enabled) {\r\n\t\t\t\t\tseriesMenuitem.children.push({\r\n\t\t\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.rightAxis'),\r\n\t\t\t\t\t\ticon: 'exchange-line',\r\n\t\t\t\t\t\taction: () => {\r\n\t\t\t\t\t\t\tseries.axis = AxisType.RIGHT;\r\n\t\t\t\t\t\t\tthis.draw();\r\n\t\t\t\t\t\t\tthis.hideContextMenu();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tchildren: []\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (this.processedConfiguration.leftAxis !== null && this.processedConfiguration.leftAxis.enabled) {\r\n\t\t\t\t\tseriesMenuitem.children.push({\r\n\t\t\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.leftAxis'),\r\n\t\t\t\t\t\ticon: 'exchange-line',\r\n\t\t\t\t\t\taction: () => {\r\n\t\t\t\t\t\t\tseries.axis = AxisType.LEFT;\r\n\t\t\t\t\t\t\tthis.draw();\r\n\t\t\t\t\t\t\tthis.hideContextMenu();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tchildren: []\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tmenuItems.push(seriesMenuitem);\r\n\t\t}\r\n\r\n\t\tif (this.processedConfiguration.mode === ChartMode.DATE) {\r\n\t\t\tmenuItems.push({\r\n\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.dateAggregation'),\r\n\t\t\t\taction: null,\r\n\t\t\t\ticon: 'calendar-line',\r\n\t\t\t\tchildren: [{\r\n\t\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.dateAggregationHour'),\r\n\t\t\t\t\ticon: 'calendar-line',\r\n\t\t\t\t\taction: () => {\r\n\t\t\t\t\t\tthis.configuration.dateAggregation = ChartDateAggregation.HOUR;\r\n\t\t\t\t\t\tthis.processConfiguration();\r\n\t\t\t\t\t\tthis.draw();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tchildren: []\r\n\t\t\t\t}, {\r\n\t\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.dateAggregationDay'),\r\n\t\t\t\t\ticon: 'calendar-line',\r\n\t\t\t\t\taction: () => {\r\n\t\t\t\t\t\tthis.configuration.dateAggregation = ChartDateAggregation.DAY;\r\n\t\t\t\t\t\tthis.processConfiguration();\r\n\t\t\t\t\t\tthis.draw();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tchildren: []\r\n\t\t\t\t}, {\r\n\t\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.dateAggregationMonth'),\r\n\t\t\t\t\ticon: 'calendar-line',\r\n\t\t\t\t\taction: () => {\r\n\t\t\t\t\t\tthis.configuration.dateAggregation = ChartDateAggregation.MONTH;\r\n\t\t\t\t\t\tthis.processConfiguration();\r\n\t\t\t\t\t\tthis.draw();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tchildren: []\r\n\t\t\t\t}, {\r\n\t\t\t\t\ttitle: this.translationsService.getTranslation('chart.contextMenu.dateAggregationYear'),\r\n\t\t\t\t\ticon: 'calendar-line',\r\n\t\t\t\t\taction: () => {\r\n\t\t\t\t\t\tthis.configuration.dateAggregation = ChartDateAggregation.YEAR;\r\n\t\t\t\t\t\tthis.processConfiguration();\r\n\t\t\t\t\t\tthis.draw();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tchildren: []\r\n\t\t\t\t}]\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tthis.generateContextMenuItems(menuItems, contextMenuElement);\r\n\r\n\t\tthis.contextMenuElement = contextMenuElement;\r\n\t\tthis.el.nativeElement.appendChild(contextMenuElement);\r\n\t}\r\n\r\n\tgenerateContextMenuItems(menuItems: ChartContextMenuItem[], parentElement: HTMLDivElement): void {\r\n\r\n\t\tconst menuItemsGroup: HTMLDivElement = document.createElement('div');\r\n\t\tmenuItemsGroup.classList.add('context-menu-item-group');\r\n\r\n\t\tfor ( let menuItem of menuItems) {\r\n\t\t\tconst contextMenuItemElement: HTMLDivElement = document.createElement('div');\r\n\t\t\tcontextMenuItemElement.classList.add('context-menu-item');\r\n\r\n\t\t\tconst contextMenuItemIconElement: HTMLSpanElement = document.createElement('span');\r\n\t\t\tcontextMenuItemIconElement.classList.add('context-menu-item-icon', 'remixicon', menuItem.icon)\r\n\t\t\tcontextMenuItemElement.appendChild(contextMenuItemIconElement);\r\n\r\n\t\t\tconst contextMenuItemTitleElement: HTMLSpanElement = document.createElement('span');\r\n\t\t\tcontextMenuItemTitleElement.classList.add('context-menu-item-title');\r\n\t\t\tcontextMenuItemTitleElement.innerHTML = menuItem.title;\r\n\t\t\tcontextMenuItemElement.appendChild(contextMenuItemTitleElement);\r\n\r\n\t\t\tif (menuItem.action !== null) {\r\n\t\t\t\tcontextMenuItemElement.onclick = () => {\r\n\t\t\t\t\tif (menuItem.action !== null) {\r\n\t\t\t\t\t\tmenuItem.action();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmenuItemsGroup.appendChild(contextMenuItemElement);\r\n\r\n\t\t\tif (menuItem.children.length > 0) {\r\n\t\t\t\tthis.generateContextMenuItems(menuItem.children, contextMenuItemElement);\r\n\t\t\t}\r\n\t\t}\r\n\t\tparentElement.appendChild(menuItemsGroup);\r\n\t}\r\n\r\n\thideContextMenu(): void {\r\n\t\tif (this.contextMenuElement !== null) {\r\n\t\t\tthis.contextMenuElement.remove();\r\n\t\t\tthis.contextMenuElement = null;\r\n\t\t}\r\n\t}\r\n\r\n\tshowSaveImageWindow(): void {\r\n\t\tthis.downloadImageWidthValue = this.chartCoordinates.width;\r\n\t\tthis.downloadImageHeightValue = this.chartCoordinates.height;\r\n\t\tthis.downloadImageFileNameValue = this.processedConfiguration.title || 'download';\r\n\t\tthis.saveImageWindowVisible = true;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\thideSaveImageWindow(): void {\r\n\t\tthis.saveImageWindowVisible = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tdrawPieSeries(): void {\r\n\r\n\t\tfor (let s = 0; s < Math.min(this.visibleSeries.length, this.pieTemplates.length); s++) {\r\n\r\n\t\t\tconst pieChartCoordinates: ChartCoordinates = {\r\n\t\t\t\tleft: this.chartCoordinates.left + ((this.chartCoordinates.width / 100) * this.pieTemplates[s].leftPercent),\r\n\t\t\t\ttop: this.chartCoordinates.top + ((this.chartCoordinates.height / 100) * this.pieTemplates[s].topPercent),\r\n\t\t\t\twidth: (this.chartCoordinates.width / 100) * this.pieTemplates[s].widthPercent,\r\n\t\t\t\theight: (this.chartCoordinates.height / 100) * this.pieTemplates[s].heightPercent\r\n\t\t\t};\r\n\r\n\t\t\tconst pieChartCenter: ChartPosition = {\r\n\t\t\t\tx: pieChartCoordinates.left + (pieChartCoordinates.width / 2),\r\n\t\t\t\ty: pieChartCoordinates.top + (pieChartCoordinates.height / 2)\r\n\t\t\t};\r\n\r\n\t\t\tconst itemStyles: ChartStyle[] = this.pieTemplates[s].itemStyles || this.chartPieTemplateDefaults.itemStyles;\r\n\t\t\tconst displayPieValue: boolean = this.pieTemplates[s].displayPieValue ?? this.chartPieTemplateDefaults.displayPieValue;\r\n\r\n\t\t\tlet pieChartPossibleWidth: number = pieChartCoordinates.width;\r\n\t\t\tlet pieChartPossibleHeight: number = pieChartCoordinates.height;\r\n\r\n\t\t\tconst backgroundStyle: ChartStyle | undefined = this.pieTemplates[s].backgroundStyle;\r\n\t\t\tif (backgroundStyle !== undefined) {\r\n\t\t\t\tthis.canvas.setStyle(backgroundStyle);\r\n\t\t\t\tthis.canvas.rect({\r\n\t\t\t\t\tx: pieChartCoordinates.left,\r\n\t\t\t\t\ty: pieChartCoordinates.top\r\n\t\t\t\t}, pieChartCoordinates.width, pieChartCoordinates.height);\r\n\t\t\t}\r\n\r\n\t\t\t// Collect values\r\n\t\t\tconst seriesValues: {label: string | number, labelProcessed: string | number, value: number}[] = [];\r\n\t\t\tfor (let c = 0; c < this.visibleSeries[s].processedData.length; c++) {\r\n\t\t\t\tconst value: number | null | undefined = this.visibleSeries[s].processedData[c].value;\r\n\t\t\t\tif (value !== null && value !== undefined) {\r\n\t\t\t\t\tlet labelProcessed: string | number = this.visibleSeries[s].processedData[c].label.toString();\r\n\t\t\t\t\tif (this.processedConfiguration.labelTransform !== null) {\r\n\t\t\t\t\t\tlabelProcessed = this.processedConfiguration.labelTransform({label: labelProcessed});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tseriesValues.push({\r\n\t\t\t\t\t\tlabel: this.visibleSeries[s].processedData[c].label,\r\n\t\t\t\t\t\tlabelProcessed,\r\n\t\t\t\t\t\tvalue\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Draw legend of pie\r\n\t\t\tconst displayLegend: boolean = this.pieTemplates[s].displayLegend ?? this.chartPieTemplateDefaults.displayLegend;\r\n\t\t\tif (displayLegend && seriesValues.length > 0) {\r\n\t\t\t\tconst legendPosition: ChartPieLegendPosition = this.pieTemplates[s].legendPosition ?? this.chartPieTemplateDefaults.legendPosition;\r\n\t\t\t\tconst legendMargin: ChartMargin = this.pieTemplates[s].legendMargin ?? this.chartPieTemplateDefaults.legendMargin;\r\n\t\t\t\tconst legendPadding: ChartPadding = this.pieTemplates[s].legendPadding ?? this.chartPieTemplateDefaults.legendPadding;\r\n\t\t\t\tconst legendSize: number = this.pieTemplates[s].legendSize ?? this.chartPieTemplateDefaults.legendSize;\r\n\t\t\t\tconst legendGap: number = this.pieTemplates[s].legendGap ?? this.chartPieTemplateDefaults.legendGap;\r\n\t\t\t\tconst legendGapBetween: number = this.pieTemplates[s].legendGapBetween ?? this.chartPieTemplateDefaults.legendGapBetween;\r\n\t\t\t\tconst legendBackgroundStyle: ChartStyle = this.pieTemplates[s].legendBackgroundStyle ?? this.chartPieTemplateDefaults.legendBackgroundStyle;\r\n\t\t\t\t\r\n\t\t\t\t// Get legend coordinates\r\n\t\t\t\tconst legendCoordinates: ChartCoordinates = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: 0,\r\n\t\t\t\t\theight: 0\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Set legend position based on the position\r\n\t\t\t\tif (legendPosition === ChartPieLegendPosition.LEFT || legendPosition === ChartPieLegendPosition.RIGHT) {\r\n\r\n\t\t\t\t\t// Measure max text with\r\n\t\t\t\t\tthis.canvas.setStyle(this.pieTemplates[s].legendLabelStyle);\r\n\t\t\t\t\tconst maxLabelWidth: number = Math.ceil(Math.max(...seriesValues.map(({ labelProcessed }) => this.canvas.measureTextWidth(labelProcessed.toString()))));\r\n\r\n\t\t\t\t\t// Count full legend width including padding and margin\r\n\t\t\t\t\tconst fullLegendWidth: number = maxLabelWidth + legendSize + legendGap + (legendPadding.left || 0) + (legendPadding.right || 0) + (legendMargin.left || 0) + (legendMargin.right || 0);\r\n\r\n\t\t\t\t\t// Set legend coordinates\r\n\t\t\t\t\tlegendCoordinates.width = maxLabelWidth + legendSize + legendGap + (legendPadding.left || 0) + (legendPadding.right || 0);\r\n\t\t\t\t\tlegendCoordinates.height = pieChartCoordinates.height - (legendMargin.top || 0) - (legendMargin.bottom || 0);\r\n\t\t\t\t\tlegendCoordinates.top = pieChartCoordinates.top + (legendMargin.top || 0);\r\n\r\n\t\t\t\t\t// Modify piechart possible width\r\n\t\t\t\t\tpieChartPossibleWidth = pieChartCoordinates.width - fullLegendWidth;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (legendPosition === ChartPieLegendPosition.LEFT) {\r\n\t\t\t\t\t\tlegendCoordinates.left = pieChartCoordinates.left + (legendMargin.left || 0);\r\n\r\n\t\t\t\t\t\t// Set new center and possible width for pie chart\r\n\t\t\t\t\t\tpieChartCenter.x = pieChartCoordinates.left + fullLegendWidth + ((pieChartCoordinates.width - fullLegendWidth) / 2);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlegendCoordinates.left = (pieChartCoordinates.left + pieChartCoordinates.width) - legendCoordinates.width - (legendMargin.right || 0);\r\n\r\n\t\t\t\t\t\t// Set new center and possible width for pie chart\r\n\t\t\t\t\t\tpieChartCenter.x = pieChartCoordinates.left + ((pieChartCoordinates.width - fullLegendWidth) / 2);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Count full legend height including padding and margin\r\n\t\t\t\t\tconst fullLegendHeight: number = (seriesValues.length * legendSize) + ((seriesValues.length - 1) * legendGapBetween) + (legendPadding.top || 0) + (legendPadding.bottom || 0) + (legendMargin.top || 0) + (legendMargin.bottom || 0);\r\n\r\n\t\t\t\t\t// Set legend coordinates\r\n\t\t\t\t\tlegendCoordinates.width = pieChartCoordinates.width - (legendMargin.left || 0) - (legendMargin.right || 0);\r\n\t\t\t\t\tlegendCoordinates.height = (seriesValues.length * legendSize) + ((seriesValues.length - 1) * legendGapBetween) + (legendPadding.top || 0) + (legendPadding.bottom || 0);\r\n\t\t\t\t\tlegendCoordinates.left = pieChartCoordinates.left + (legendMargin.left || 0);\r\n\r\n\t\t\t\t\tpieChartPossibleHeight = pieChartCoordinates.height - fullLegendHeight;\r\n\r\n\t\t\t\t\tif (legendPosition === ChartPieLegendPosition.TOP) {\r\n\t\t\t\t\t\tlegendCoordinates.top = pieChartCoordinates.top + (legendMargin.top || 0);\r\n\r\n\t\t\t\t\t\t// Set new center and possible width for pie chart\r\n\t\t\t\t\t\tpieChartCenter.y = pieChartCoordinates.top + fullLegendHeight + ((pieChartCoordinates.height - fullLegendHeight) / 2);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlegendCoordinates.top = (pieChartCoordinates.top + pieChartCoordinates.height) - legendCoordinates.height - (legendMargin.bottom || 0);\r\n\r\n\t\t\t\t\t\t// Set new center and possible width for pie chart\r\n\t\t\t\t\t\tpieChartCenter.y = pieChartCoordinates.top + ((pieChartCoordinates.height - fullLegendHeight) / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Legend background\r\n\t\t\t\tthis.canvas.setStyle(legendBackgroundStyle);\r\n\t\t\t\tthis.canvas.rect({\r\n\t\t\t\t\tx: legendCoordinates.left,\r\n\t\t\t\t\ty: legendCoordinates.top\r\n\t\t\t\t}, legendCoordinates.width, legendCoordinates.height);\r\n\r\n\t\t\t\t// Draw legend items\r\n\t\t\t\tfor (let i = 0; i < seriesValues.length; i++) {\r\n\t\t\t\t\tthis.canvas.setStyle(itemStyles[i % itemStyles.length]);\r\n\t\t\t\t\tthis.canvas.circle({\r\n\t\t\t\t\t\tx: legendCoordinates.left + (legendPadding.left || 0) + (legendSize / 2),\r\n\t\t\t\t\t\ty: legendCoordinates.top + (legendPadding.top || 0) + (legendSize / 2) + (i * (legendGapBetween + legendSize))\r\n\t\t\t\t\t}, (legendSize / 2));\r\n\t\t\t\t\tthis.canvas.setStyle(this.pieTemplates[s].legendLabelStyle);\r\n\t\t\t\t\tthis.canvas.text(seriesValues[i].labelProcessed.toString(), {\r\n\t\t\t\t\t\tx: legendCoordinates.left + (legendPadding.left || 0) + (legendSize / 2) + legendGap,\r\n\t\t\t\t\t\ty: legendCoordinates.top + (legendPadding.top || 0) + (legendSize / 2) + (i * (legendGapBetween + legendSize))\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Sum values\r\n\t\t\tlet valueSum: number = 0;\r\n\t\t\tfor (let { value } of seriesValues) {\r\n\t\t\t\tvalueSum += value;\r\n\t\t\t}\r\n\r\n\t\t\t// Draw arcs and collect arc informations\r\n\t\t\tlet startAngle: number = 0;\r\n\t\t\tconst radius: number = Math.min(pieChartPossibleWidth * 0.8, pieChartPossibleHeight * 0.8) / 2;\r\n\t\t\tconst seriesArcInformations: ChartArcInformation[] = [];\r\n\t\t\tfor (let i = 0; i < seriesValues.length; i++) {\r\n\t\t\t\tconst percentage: number = seriesValues[i].value / valueSum * 100;\r\n\t\t\t\tconst angle: number = 0.02 * percentage;\r\n\t\t\t\tthis.canvas.setStyle(itemStyles[i % itemStyles.length]);\r\n\t\t\t\tconst arcInformation: ChartArcInformation | null = this.canvas.arc(pieChartCenter, radius, (startAngle - 0.5) * Math.PI, ((startAngle + angle) - 0.5) * Math.PI, false);\r\n\t\t\t\tif (arcInformation !== null) {\r\n\t\t\t\t\tseriesArcInformations.push(arcInformation);\r\n\t\t\t\t}\r\n\t\t\t\tstartAngle += angle;\r\n\t\t\t}\r\n\r\n\t\t\t// Draw pie values\r\n\t\t\tif (displayPieValue) {\r\n\t\t\t\tthis.canvas.setStyle({\r\n\t\t\t\t\tfill: '#ffffff',\r\n\t\t\t\t\ttextStyle: 'bold',\r\n\t\t\t\t\ttextAlign: 'center',\r\n\t\t\t\t\ttextBaseline: 'middle',\r\n\t\t\t\t\t...(this.pieTemplates[s].pieValueStyle ?? {})\r\n\t\t\t\t});\r\n\t\t\t\tfor (let i = 0; i < seriesArcInformations.length; i++) {\r\n\t\t\t\t\tconst labelPosition: ChartPosition = this.canvas.midPoint(seriesArcInformations[i].middleAnglePosition, seriesArcInformations[i].centerPosition, 20);\r\n\t\t\t\t\tthis.canvas.text(seriesValues[i].value.toString(), labelPosition);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tget hasPieChart(): boolean {\r\n\t\treturn this.processedConfiguration.series.some(({ type }) => type === SeriesType.PIE);\r\n\t}\r\n\r\n\tget visibleSeries(): ProcessedSeries[] {\r\n\t\tconst visibleSeries: ProcessedSeries[] = [];\r\n\t\tfor (let series of this.processedConfiguration.series) {\r\n\t\t\tif (!series.visible || (this.hasPieChart && series.type !== SeriesType.PIE)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tvisibleSeries.push(series);\r\n\t\t}\r\n\t\treturn visibleSeries;\r\n\t}\r\n\r\n\tget legendSeries(): ProcessedSeries[] {\r\n\t\tconst legendSeries: ProcessedSeries[] = [];\r\n\t\tfor (let series of this.visibleSeries) {\r\n\t\t\tif (!series.showInLegend) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tlegendSeries.push(series);\r\n\t\t}\r\n\t\treturn legendSeries;\r\n\t}\r\n\r\n\tget actualSeries(): ProcessedSeries[] {\r\n\t\tconst visibleSeries: ProcessedSeries[] = [];\r\n\t\tfor (let series of this.processedConfiguration.series) {\r\n\t\t\tif (this.hasPieChart && series.type !== SeriesType.PIE) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tvisibleSeries.push(series);\r\n\t\t}\r\n\t\treturn visibleSeries;\r\n\t}\r\n\r\n\tdrawHover(): void {\r\n\r\n\t\tthis.canvasHover.clear();\r\n\r\n\t\tif (this.contextMenuElement !== null || this.saveImageWindowVisible) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.hasPieChart) {\r\n\r\n\t\t} else {\r\n\t\r\n\t\t\tif (this.rangeSelection === null && this.drawHoverMouseMovePosition !== null && this.processedConfiguration.displayCross) {\r\n\t\t\t\tthis.canvasHover.setStyle(this.processedConfiguration.crossStyle); \r\n\t\t\t\tthis.canvasHover.line([{\r\n\t\t\t\t\tx: this.chartCoordinates.left,\r\n\t\t\t\t\ty: this.drawHoverMouseMovePosition.y\r\n\t\t\t\t}, {\r\n\t\t\t\t\tx: this.chartCoordinates.left + this.chartCoordinates.width,\r\n\t\t\t\t\ty: this.drawHoverMouseMovePosition.y\r\n\t\t\t\t}]);\r\n\t\t\t\tthis.canvasHover.line([{\r\n\t\t\t\t\tx: this.drawHoverMouseMovePosition.x - 0.5,\r\n\t\t\t\t\ty: this.chartCoordinates.top - 0.5\r\n\t\t\t\t}, {\r\n\t\t\t\t\tx: this.drawHoverMouseMovePosition.x - 0.5,\r\n\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height - 0.5\r\n\t\t\t\t}]);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.rangeSelection !== null) {\r\n\t\t\t\t\r\n\t\t\t\tconst mouseDownEventPosition: ChartPosition = this.canvasHover.mouseEventToPosition(this.rangeSelection.mouseDownEvent);\r\n\t\t\t\tconst mouseMoveEventPosition: ChartPosition = this.canvasHover.mouseEventToPosition(this.rangeSelection.mouseMoveEvent);\r\n\t\r\n\t\t\t\t// Start position\r\n\t\t\t\tmouseDownEventPosition.x = minMax(mouseDownEventPosition.x, this.chartCoordinates.left, this.chartCoordinates.left + this.chartCoordinates.width);\r\n\t\r\n\t\t\t\t// Move position\r\n\t\t\t\tmouseMoveEventPosition.x = minMax(mouseMoveEventPosition.x, this.chartCoordinates.left, this.chartCoordinates.left + this.chartCoordinates.width);\r\n\t\r\n\t\t\t\t// Left and right line\r\n\t\t\t\tthis.canvasHover.setStyle({\r\n\t\t\t\t\t...CHART_RANGE_SELECTION_DEFAULT_LINE_STYLE,\r\n\t\t\t\t\t...this.processedConfiguration.rangeSelectionLineStyle\r\n\t\t\t\t});\r\n\t\t\t\tthis.canvasHover.line([{\r\n\t\t\t\t\tx: mouseDownEventPosition.x,\r\n\t\t\t\t\ty: this.chartCoordinates.top\r\n\t\t\t\t}, {\r\n\t\t\t\t\tx: mouseDownEventPosition.x,\r\n\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t\t}]);\r\n\t\t\t\tthis.canvasHover.line([{\r\n\t\t\t\t\tx: mouseMoveEventPosition.x,\r\n\t\t\t\t\ty: this.chartCoordinates.top\r\n\t\t\t\t}, {\r\n\t\t\t\t\tx: mouseMoveEventPosition.x,\r\n\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t\t}]);\r\n\t\r\n\t\t\t\t// Fill area\r\n\t\t\t\tthis.canvasHover.setStyle({\r\n\t\t\t\t\t...CHART_RANGE_SELECTION_DEFAULT_RECT_STYLE,\r\n\t\t\t\t\t...this.processedConfiguration.rangeSelectionRectStyle\r\n\t\t\t\t});\r\n\t\t\t\tthis.canvasHover.rect({\r\n\t\t\t\t\tx: mouseDownEventPosition.x < mouseMoveEventPosition.x ? mouseDownEventPosition.x : mouseMoveEventPosition.x,\r\n\t\t\t\t\ty: this.chartCoordinates.top\r\n\t\t\t\t}, mouseDownEventPosition.x < mouseMoveEventPosition.x ? mouseMoveEventPosition.x - mouseDownEventPosition.x : mouseDownEventPosition.x - mouseMoveEventPosition.x, this.chartCoordinates.height)\r\n\t\t\t}\r\n\t\r\n\t\t\tif (this.drawColumnHoverIndex !== null && this.rangeSelection === null) {\r\n\t\t\t\tif (this.drawColumns[this.drawColumnHoverIndex - this.rangeIndexStart] !== undefined) {\r\n\t\t\t\t\tthis.columnHoverDrawFunction({\r\n\t\t\t\t\t\tchart: this,\r\n\t\t\t\t\t\tdrawColumnInformation: this.drawColumns[this.drawColumnHoverIndex - this.rangeIndexStart],\r\n\t\t\t\t\t\tmouseMoveEventPosition: this.drawHoverMouseMovePosition\r\n\t\t\t\t\t});\r\n\t\t\t\t\tfor (let { series, seriesIndex, pointPosition } of this.drawColumns[this.drawColumnHoverIndex - this.rangeIndexStart].seriesValues) {\r\n\t\t\t\t\t\tif (series.pointMode === SeriesPointMode.HOVER && [SeriesType.AREA, SeriesType.LINE, SeriesType.LINE_STEP_BEFORE, SeriesType.LINE_STEP_AFTER].includes(series.type)) {\r\n\t\t\t\t\t\t\tthis.canvasHover.setStyle({\r\n\t\t\t\t\t\t\t\t...this.getDefaultStyleByIndex(seriesIndex, series.type),\r\n\t\t\t\t\t\t\t\t...series.pointStyle\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tswitch(series.pointType) {\r\n\t\t\t\t\t\t\t\tcase SeriesPointType.CIRCLE:\r\n\t\t\t\t\t\t\t\t\tthis.canvasHover.circle(pointPosition, series.pointSize / 2)\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase SeriesPointType.SQUARE:\r\n\t\t\t\t\t\t\t\t\tthis.canvasHover.rect({\r\n\t\t\t\t\t\t\t\t\t\tx: pointPosition.x - (series.pointSize / 2),\r\n\t\t\t\t\t\t\t\t\t\ty: pointPosition.y - (series.pointSize / 2)\r\n\t\t\t\t\t\t\t\t\t}, series.pointSize, series.pointSize);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tdraw(): void {\r\n\r\n\t\tif (this.skipDraw) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setCanvasSize();\r\n\r\n\t\tthis.drawStarted.emit({\r\n\t\t\tchart: this\r\n\t\t});\r\n\t\t\r\n\t\tthis.canvas.clear();\r\n\r\n\t\t// Set background style\r\n\t\tthis.canvas.setStyle({\r\n\t\t\t...CHART_BACKGROUND_DEFAULT_STYLE,\r\n\t\t\t...this.processedConfiguration.backgroundStyle\r\n\t\t});\r\n\t\tthis.canvas.rect({\r\n\t\t\tx: 0,\r\n\t\t\ty: 0\r\n\t\t}, this.containerCoordinates.width, this.containerCoordinates.height);\r\n\r\n\t\t// Display header\r\n\t\tif (this.processedConfiguration.showHeader) {\r\n\t\t\tthis.header = new ChartHeaderComponent(this);\r\n\t\t\tthis.header.updateCoordinates();\r\n\t\t\tthis.header.draw();\r\n\t\t}\r\n\r\n\t\t// Pie chart\r\n\t\tif (this.hasPieChart) {\r\n\t\t\tthis.drawPieSeries();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Merge draw values for horizontal lines\r\n\t\tconst mergedAxisDrawValues: AxisDrawValue[] = [];\r\n\r\n\t\t// Draw left axis\r\n\t\tif (this.processedConfiguration.leftAxis !== null && this.processedConfiguration.leftAxis.enabled) {\r\n\t\t\tthis.leftAxis = new ChartAxisComponent(this, this.processedConfiguration.leftAxis, AxisType.LEFT);\r\n\t\t\tconst axisDrawValues: AxisDrawValue[] = this.leftAxis.generateDrawValues();\r\n\t\t\tmergedAxisDrawValues.push(...axisDrawValues);\r\n\t\t\tthis.leftAxis.precalculate();\r\n\t\t}\r\n\r\n\t\t// Draw right axis\r\n\t\tif (this.processedConfiguration.rightAxis !== null && this.processedConfiguration.rightAxis.enabled) {\r\n\t\t\tthis.rightAxis = new ChartAxisComponent(this, this.processedConfiguration.rightAxis, AxisType.RIGHT);\r\n\t\t\tconst axisDrawValues: AxisDrawValue[] = this.rightAxis.generateDrawValues();\r\n\t\t\tmergedAxisDrawValues.push(...axisDrawValues);\r\n\t\t\tthis.rightAxis.precalculate();\r\n\t\t}\r\n\r\n\t\t// Horizontal values\r\n\t\tconst horizontalColumns: {label: string | number, labelProcessed: string | number, position: ChartPosition, size: ChartSize}[] = [];\r\n\t\tfor (let series of this.visibleSeries) {\r\n\t\t\tfor (let d = this.rangeIndexStart; d <= this.rangeIndexEnd; d++) {\r\n\t\t\t\tif (series.processedData[d] !== undefined) {\r\n\t\t\t\t\tlet columnIndex: number = horizontalColumns.findIndex((c) => c.label === series.processedData[d].label);\r\n\t\t\t\t\tif (columnIndex === -1) {\r\n\r\n\t\t\t\t\t\t// Process label\r\n\t\t\t\t\t\tlet labelProcessed: string | number = series.processedData[d].label.toString();\r\n\t\t\t\t\t\tif (this.processedConfiguration.labelTransform !== null) {\r\n\t\t\t\t\t\t\tlabelProcessed = this.processedConfiguration.labelTransform({label: labelProcessed});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcolumnIndex = horizontalColumns.push({\r\n\t\t\t\t\t\t\tlabel: series.processedData[d].label,\r\n\t\t\t\t\t\t\tlabelProcessed,\r\n\t\t\t\t\t\t\tposition: {\r\n\t\t\t\t\t\t\t\tx: 0,\r\n\t\t\t\t\t\t\t\ty: 0\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tsize: {\r\n\t\t\t\t\t\t\t\twidth: 0,\r\n\t\t\t\t\t\t\t\theight: 0\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Get max label height\r\n\t\tif (this.processedConfiguration.showHorizontalAxis) {\r\n\t\t\tlet maxLabelHeight: number = 0;\r\n\t\t\tfor (let { labelProcessed } of horizontalColumns) {\r\n\t\t\t\tthis.canvas.setStyle(this.processedConfiguration.footerLabelStyle);\r\n\t\t\t\tconst textHeight: number = this.canvas.measureTextHeight(labelProcessed.toString());\r\n\t\t\t\tif (textHeight > maxLabelHeight) {\r\n\t\t\t\t\tmaxLabelHeight = textHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.footerHeight = maxLabelHeight;\r\n\t\t}\r\n\r\n\t\t// Draw left axis\r\n\t\tif (this.leftAxis !== null) {\r\n\t\t\tthis.leftAxis.setCoordinates({\r\n\t\t\t\theight: this.bodyCoordinates.height,\r\n\t\t\t\tleft: this.bodyCoordinates.left,\r\n\t\t\t\ttop: this.bodyCoordinates.top,\r\n\t\t\t\twidth: 0\r\n\t\t\t});\r\n\t\t\tthis.leftAxis.draw();\r\n\t\t}\r\n\r\n\t\t// Draw right axis\r\n\t\tif (this.rightAxis !== null) {\r\n\t\t\tthis.rightAxis.setCoordinates({\r\n\t\t\t\theight: this.bodyCoordinates.height,\r\n\t\t\t\tleft: this.bodyCoordinates.left + this.bodyCoordinates.width,\r\n\t\t\t\ttop: this.bodyCoordinates.top,\r\n\t\t\t\twidth: 0\r\n\t\t\t});\r\n\t\t\tthis.rightAxis.draw();\r\n\t\t}\r\n\r\n\t\t// Draw horizontal lines\r\n\t\tif (this.processedConfiguration.showHorizontalLines && mergedAxisDrawValues.length > 0) {\r\n\t\t\tthis.canvas.setStyle(this.processedConfiguration.horizontalLineStyle);\r\n\t\t\tconst mergedAxisDrawValuesValueScalePercents: number[] = mergedAxisDrawValues.map(({ valueScalePercent }) => valueScalePercent).filter(onlyUnique);\r\n\t\t\tfor (let mergedAxisDrawValuesValueScalePercent of mergedAxisDrawValuesValueScalePercents) {\r\n\t\t\t\tlet y: number = (this.chartCoordinates.top + this.chartCoordinates.height) - ((this.chartCoordinates.height / 100) * mergedAxisDrawValuesValueScalePercent);\r\n\t\t\t\ty = Math.round(y) + 0.5;\r\n\t\t\t\tthis.canvas.line([{\r\n\t\t\t\t\tx: this.chartCoordinates.left,\r\n\t\t\t\t\ty\r\n\t\t\t\t}, {\r\n\t\t\t\t\tx: this.chartCoordinates.left + this.chartCoordinates.width,\r\n\t\t\t\t\ty\r\n\t\t\t\t}]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// DRAWCOLUMNS\r\n\t\tthis.drawColumns = [];\r\n\t\tfor (let i = 0; i < horizontalColumns.length; i++) {\r\n\t\t\thorizontalColumns[i].position.y = this.chartCoordinates.top + this.chartCoordinates.height;\r\n\t\t\thorizontalColumns[i].position.x = this.chartCoordinates.left + (i * (this.chartCoordinates.width / horizontalColumns.length));\r\n\t\t\tthis.drawColumns.push({\r\n\t\t\t\tcoordinates: {\r\n\t\t\t\t\tleft: this.chartCoordinates.left + (i * (this.chartCoordinates.width / horizontalColumns.length)),\r\n\t\t\t\t\ttop: this.chartCoordinates.top,\r\n\t\t\t\t\twidth: this.chartCoordinates.width / horizontalColumns.length,\r\n\t\t\t\t\theight: this.chartCoordinates.height\r\n\t\t\t\t},\r\n\t\t\t\tindex: this.rangeIndexStart + i,\r\n\t\t\t\tseriesValues: [],\r\n\t\t\t\tlabel: horizontalColumns[i].labelProcessed\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Draw vertical lines\r\n\t\tif (this.processedConfiguration.showVerticalLines) {\r\n\t\t\tthis.canvas.setStyle(this.processedConfiguration.verticalLineStyle);\r\n\t\t\tif (this.drawColumns.length > 0) {\r\n\t\t\t\tfor (let { coordinates } of this.drawColumns) {\r\n\t\t\t\t\tthis.canvas.line([{\r\n\t\t\t\t\t\tx: coordinates.left,\r\n\t\t\t\t\t\ty: this.chartCoordinates.top\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\tx: coordinates.left,\r\n\t\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t\t\t}]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis.canvas.line([{\r\n\t\t\t\t\tx: this.chartCoordinates.left,\r\n\t\t\t\t\ty: this.chartCoordinates.top\r\n\t\t\t\t}, {\r\n\t\t\t\t\tx: this.chartCoordinates.left,\r\n\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t\t}]);\r\n\t\t\t}\r\n\t\t\tthis.canvas.line([{\r\n\t\t\t\tx: this.chartCoordinates.left + this.chartCoordinates.width,\r\n\t\t\t\ty: this.chartCoordinates.top\r\n\t\t\t}, {\r\n\t\t\t\tx: this.chartCoordinates.left + this.chartCoordinates.width,\r\n\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t}]);\r\n\t\t}\r\n\r\n\t\t// Find max footer label width\r\n\t\tif (this.processedConfiguration.showHorizontalAxis) {\r\n\t\t\tthis.canvas.setStyle({\r\n\t\t\t\ttextBaseline: 'middle',\r\n\t\t\t\ttextAlign: 'center',\r\n\t\t\t\t...this.processedConfiguration.footerLabelStyle\r\n\t\t\t});\r\n\t\t\tconst maxFooterLabelWidth: number = Math.max(...horizontalColumns.map(({ labelProcessed }) => this.canvas.measureTextWidth(labelProcessed.toString())));\r\n\t\t\tconst footerLabelSkip: number = Math.ceil(maxFooterLabelWidth / (this.chartCoordinates.width / horizontalColumns.length));\r\n\t\r\n\t\t\t// Draw footer values\r\n\t\t\tlet footerLabelIndex: number = 0;\r\n\t\t\tfor (let { labelProcessed, position } of horizontalColumns) {\r\n\t\t\t\tif (footerLabelIndex % footerLabelSkip === 0) {\r\n\t\t\t\t\tthis.canvas.text(labelProcessed.toString(), {\r\n\t\t\t\t\t\tx: position.x + ((this.chartCoordinates.width / horizontalColumns.length) / 2),\r\n\t\t\t\t\t\ty: position.y + (this.footerHeight / 2) + this.processedConfiguration.footerMarginTop\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tfooterLabelIndex++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (horizontalColumns.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Count barcharts\r\n\t\tlet barChartCount: number = 0;\r\n\t\tfor (let series of this.visibleSeries) {\r\n\t\t\tif (series.type === SeriesType.BAR) {\r\n\t\t\t\tbarChartCount++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.canvas.clipRect({\r\n\t\t\tleft: this.chartCoordinates.left,\r\n\t\t\ttop: this.chartCoordinates.top,\r\n\t\t\twidth: this.chartCoordinates.width,\r\n\t\t\theight: this.chartCoordinates.height\r\n\t\t});\r\n\r\n\t\tlet prevValuePosition: ChartPosition | null = null;\r\n\r\n\t\tlet seriesIndex: number = 0;\r\n\t\tlet barChartIndex: number = 0;\r\n\t\tfor (let series of this.visibleSeries) {\r\n\t\t\t\r\n\t\t\tlet min: number = 0;\r\n\t\t\tlet max: number = 0;\r\n\r\n\t\t\tif (series.axis === AxisType.LEFT) {\r\n\t\t\t\tif (this.leftAxis === null) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tmin = this.leftAxis.minNumber();\r\n\t\t\t\tmax = this.leftAxis.maxNumber();\r\n\t\t\t}\r\n\r\n\t\t\tif (series.axis === AxisType.RIGHT) {\r\n\t\t\t\tif (this.rightAxis === null) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tmin = this.rightAxis.minNumber();\r\n\t\t\t\tmax = this.rightAxis.maxNumber();\r\n\t\t\t}\r\n\r\n\t\t\tconst rangeWidth: number = this.chartCoordinates.width / horizontalColumns.length;\r\n\t\t\tlet minMaxRange: number = distanceNumbers(max, min);\r\n\t\t\tconst rangeHeight: number = this.chartCoordinates.height / minMaxRange;\r\n\r\n\t\t\tconst defaultSeriesStyle: ChartStyle = this.getDefaultStyleByIndex(seriesIndex, series.type);\r\n\t\t\tprevValuePosition = null;\r\n\r\n\t\t\tconst collectedColumnPositions: {\r\n\t\t\t\tpointPosition: ChartPosition,\r\n\t\t\t\tcolumnCenter: number,\r\n\t\t\t\ty: number,\r\n\t\t\t\tvalue: number\r\n\t\t\t}[] = [];\r\n\r\n\t\t\tconst collectedLinePositions: ChartPosition[] = [];\r\n\r\n\t\t\t// Draw first layer and collect points and lines, only draw bar charts at this points\r\n\t\t\tfor (let c = 0; c < horizontalColumns.length; c++) {\r\n\r\n\t\t\t\tlet processedSeriesDataItem: SeriesDataProcessed | null = series.processedData.find((s) => s.label === horizontalColumns[c].label) || null;\r\n\r\n\t\t\t\tif (processedSeriesDataItem === null || processedSeriesDataItem.value === undefined || processedSeriesDataItem.value === null) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet x: number = this.chartCoordinates.left + rangeWidth * c;\r\n\t\t\t\tlet y: number = this.chartCoordinates.top + this.chartCoordinates.height;\r\n\t\t\t\tlet columnCenter: number = x + (rangeWidth / 2);\r\n\r\n\t\t\t\tconst barChartWidth: number = (rangeWidth - (2 * this.processedConfiguration.barChartGap) - ((barChartCount - 1) * this.processedConfiguration.barChartGapBetween)) / barChartCount;\r\n\t\t\t\tx += this.processedConfiguration.barChartGap + (barChartIndex * (this.processedConfiguration.barChartGapBetween + barChartWidth));\r\n\r\n\t\t\t\tconst pointPosition: ChartPosition = {\r\n\t\t\t\t\tx: columnCenter,\r\n\t\t\t\t\ty: y - processedSeriesDataItem.value * rangeHeight\r\n\t\t\t\t};\r\n\t\t\t\tpointPosition.y += min * rangeHeight;\r\n\t\t\t\t\r\n\t\t\t\tif (this.drawColumns[c] !== undefined) {\r\n\t\t\t\t\tthis.drawColumns[c].seriesValues.push({\r\n\t\t\t\t\t\tseries,\r\n\t\t\t\t\t\tseriesIndex,\r\n\t\t\t\t\t\tvalue: processedSeriesDataItem.value,\r\n\t\t\t\t\t\tpointPosition: {...pointPosition}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcollectedColumnPositions.push({\r\n\t\t\t\t\tcolumnCenter,\r\n\t\t\t\t\tpointPosition,\r\n\t\t\t\t\tvalue: processedSeriesDataItem.value,\r\n\t\t\t\t\ty\r\n\t\t\t\t});\r\n\r\n\t\t\t\tswitch(series.type) {\r\n\t\t\t\t\tcase SeriesType.BAR:\r\n\t\t\t\t\t\tthis.canvas.setStyle({\r\n\t\t\t\t\t\t\t...defaultSeriesStyle,\r\n\t\t\t\t\t\t\t...series.barStyle\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis.canvas.rect({\r\n\t\t\t\t\t\t\tx: x,\r\n\t\t\t\t\t\t\ty: pointPosition.y\r\n\t\t\t\t\t\t}, barChartWidth, processedSeriesDataItem.value * rangeHeight);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase SeriesType.LINE:\r\n\t\t\t\t\tcase SeriesType.LINE_STEP_BEFORE:\r\n\t\t\t\t\tcase SeriesType.LINE_STEP_AFTER:\r\n\t\t\t\t\t\tif (prevValuePosition !== null) {\r\n\t\t\t\t\t\t\tswitch(series.type) {\r\n\t\t\t\t\t\t\t\tcase SeriesType.LINE_STEP_BEFORE:\r\n\t\t\t\t\t\t\t\t\tcollectedLinePositions.push({\r\n\t\t\t\t\t\t\t\t\t\tx: prevValuePosition.x,\r\n\t\t\t\t\t\t\t\t\t\ty: pointPosition.y\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase SeriesType.LINE_STEP_AFTER:\r\n\t\t\t\t\t\t\t\t\tcollectedLinePositions.push({\r\n\t\t\t\t\t\t\t\t\t\tx: pointPosition.x,\r\n\t\t\t\t\t\t\t\t\t\ty: prevValuePosition.y\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcollectedLinePositions.push(pointPosition);\r\n\r\n\t\t\t\t// Get Prev value\r\n\t\t\t\tprevValuePosition = {...pointPosition};\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Draw second layer, lines and points\r\n\t\t\tif (series.type === SeriesType.LINE || series.type === SeriesType.LINE_STEP_BEFORE || series.type === SeriesType.LINE_STEP_AFTER || series.type === SeriesType.AREA) {\r\n\t\t\t\tthis.canvas.setStyle({\r\n\t\t\t\t\t...defaultSeriesStyle,\r\n\t\t\t\t\t...series.lineStyle\r\n\t\t\t\t});\r\n\t\t\t\tthis.canvas.line(collectedLinePositions);\r\n\t\t\t}\r\n\r\n\t\t\tif (series.type === SeriesType.AREA) {\r\n\t\t\t\tthis.canvas.setStyle({\r\n\t\t\t\t\t...defaultSeriesStyle,\r\n\t\t\t\t\tstroke: 'rgba(0, 0, 0, 0)',\r\n\t\t\t\t\t...series.areaStyle\r\n\t\t\t\t});\r\n\t\t\t\tthis.canvas.lineFill([\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tx: collectedLinePositions[0].x,\r\n\t\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t\t\t},\r\n\t\t\t\t\t...collectedLinePositions,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tx: collectedLinePositions[collectedLinePositions.length - 1].x,\r\n\t\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tx: collectedLinePositions[0].x,\r\n\t\t\t\t\t\ty: this.chartCoordinates.top + this.chartCoordinates.height\r\n\t\t\t\t\t}\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\r\n\t\t\tif (series.type === SeriesType.POINTS || ((series.type === SeriesType.AREA || series.type === SeriesType.LINE || series.type === SeriesType.LINE_STEP_AFTER || series.type === SeriesType.LINE_STEP_BEFORE) && series.pointMode === SeriesPointMode.ALWAYS)) {\r\n\t\t\t\tthis.canvas.setStyle({\r\n\t\t\t\t\t...defaultSeriesStyle,\r\n\t\t\t\t\t...series.pointStyle\r\n\t\t\t\t});\r\n\t\t\t\tfor (let i = 0; i < collectedColumnPositions.length; i++) {\r\n\t\t\t\t\tswitch(series.pointType) {\r\n\t\t\t\t\t\tcase SeriesPointType.CIRCLE:\r\n\t\t\t\t\t\t\tthis.canvas.circle(collectedColumnPositions[i].pointPosition, (series.pointSize / 2));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase SeriesPointType.SQUARE:\r\n\t\t\t\t\t\t\tthis.canvas.rect({\r\n\t\t\t\t\t\t\t\tx: collectedColumnPositions[i].pointPosition.x - (series.pointSize / 2),\r\n\t\t\t\t\t\t\t\ty: collectedColumnPositions[i].pointPosition.y - (series.pointSize / 2)\r\n\t\t\t\t\t\t\t}, series.pointSize, series.pointSize);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tseriesIndex++;\r\n\t\t\tif (series.type === SeriesType.BAR) {\r\n\t\t\t\tbarChartIndex++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.drawFinished.emit({\r\n\t\t\tchart: this\r\n\t\t});\r\n\t}\r\n\r\n\tdownloadImage(): void {\r\n\t\tthis.canvas.downloadImage(this.downloadImageFileNameValue, this.downloadImageType, this.downloadImageQuality);\r\n\t\tthis.hideSaveImageWindow();\r\n\t}\r\n\r\n\tprocessAxis(axis: Axis): ProcessedAxis {\r\n\t\treturn {\r\n\t\t\tmax: axis.max ?? null,\r\n\t\t\tmaxMode: axis.maxMode ?? MaxMode.EXACT,\r\n\t\t\tmin: axis.min ?? null,\r\n\t\t\tdivide: axis.divide ?? 10,\r\n\t\t\tenabled: axis.enabled ?? false,\r\n\t\t\tsteps: axis.steps ?? null,\r\n\t\t\tlabelStyle: axis.labelStyle ?? null,\r\n\t\t\tshowTitle: axis.showTitle ?? true,\r\n\t\t\ttitleStyle: axis.titleStyle ?? null,\r\n\t\t\ttitleSpace: axis.titleSpace ?? 10,\r\n\t\t\tvisible: axis.visible ?? true\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Process configuration\r\n\t * \r\n\t * Resets everywith from the `configuration` input param and fill unfilled data with the `CHART_DEFAULT_CONFIGURATION`\r\n\t */\r\n\tprocessConfiguration(): void {\r\n\r\n\t\t// Process left axis\r\n\t\tlet leftAxis: ProcessedAxis | null = null;\r\n\t\tif (this.configuration.leftAxis !== undefined) {\r\n\t\t\tleftAxis = this.processAxis(this.configuration.leftAxis);\r\n\t\t}\r\n\r\n\t\t// Process right axis\r\n\t\tlet rightAxis: ProcessedAxis | null = null;\r\n\t\tif (this.configuration.rightAxis !== undefined) {\r\n\t\t\trightAxis = this.processAxis(this.configuration.rightAxis);\r\n\t\t}\r\n\r\n\t\t// Set configuration object and fill with defaults\r\n\t\tthis.processedConfiguration = {\r\n\t\t\t...this.defaultConfiguration,\r\n\t\t\t...this.configuration,\r\n\t\t\tseries: [],\r\n\t\t\tleftAxis,\r\n\t\t\trightAxis\r\n\t\t};\r\n\r\n\t\t// Process series\r\n\t\tlet processedSeries: ProcessedSeries[] = [];\r\n\t\tif (this.configuration.series !== undefined) {\r\n\t\t\tprocessedSeries = processSeries(this.configuration.series, this.processedConfiguration,  this.localeId, this);\r\n\t\t}\r\n\r\n\t\tthis.processedConfiguration.series = processedSeries;\r\n\r\n\t\t// Set range indexes\r\n\t\tthis.rangeIndexStart = 0;\r\n\t\tthis.rangeIndexEnd = this.allSeriesDataLength - 1;\r\n\r\n\t\tif (this.processedConfiguration.rangeIndexStart !== null) {\r\n\t\t\tthis.rangeIndexStart = this.processedConfiguration.rangeIndexStart;\r\n\t\t}\r\n\r\n\t\tif (this.processedConfiguration.rangeIndexEnd !== null) {\r\n\t\t\tthis.rangeIndexEnd = this.processedConfiguration.rangeIndexEnd;\r\n\t\t}\r\n\t}\r\n\r\n\tzoom(wheelEvent: WheelEvent, mode: 'in' | 'out'): void {\r\n\t\tconst zoomFactor: number = 10;\r\n\t\tconst zoomIndex: number = this.findRangeIndexInDrawValues(this.canvas.mouseEventToPosition(wheelEvent).x);\r\n\r\n\t\tlet zoomLeftRange: number | null = null;\r\n\t\tlet zoomRightRange: number | null = null;\r\n\r\n\t\tlet zoomLeftModifier: number | null = null;\r\n\t\tlet zoomRightModifier: number | null = null;\r\n\r\n\t\tlet newRangeIndexStart: number | null = null;\r\n\t\tlet newRangeIndexEnd: number | null = null;\r\n\r\n\t\tswitch(mode) {\r\n\t\t\tcase 'in':\r\n\t\t\t\tzoomLeftRange = distanceNumbers(this.rangeIndexStart, zoomIndex);\r\n\t\t\t\tzoomRightRange = distanceNumbers(this.rangeIndexEnd, zoomIndex);\r\n\r\n\t\t\t\tzoomLeftModifier = zoomLeftRange !== 0 ? Math.ceil(zoomLeftRange / zoomFactor) : 0;\r\n\t\t\t\tzoomRightModifier = zoomRightRange !== 0 ? Math.ceil(zoomRightRange / zoomFactor) : 0;\r\n\r\n\t\t\t\tnewRangeIndexStart = this.rangeIndexStart + zoomLeftModifier;\r\n\t\t\t\tnewRangeIndexEnd = this.rangeIndexEnd - zoomRightModifier;\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'out':\r\n\t\t\t\tzoomLeftRange = distanceNumbers(0, zoomIndex);\r\n\t\t\t\tzoomRightRange = distanceNumbers(this.allSeriesDataLength - 1, zoomIndex);\r\n\r\n\t\t\t\tzoomLeftModifier = zoomLeftRange !== 0 ? Math.ceil(zoomLeftRange / zoomFactor) : 0;\r\n\t\t\t\tzoomRightModifier = zoomRightRange !== 0 ? Math.ceil(zoomRightRange / zoomFactor) : 0;\r\n\r\n\t\t\t\tnewRangeIndexStart = this.rangeIndexStart - zoomLeftModifier;\r\n\t\t\t\tnewRangeIndexEnd = this.rangeIndexEnd + zoomRightModifier;\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (newRangeIndexEnd > this.allSeriesDataLength - 1) {\r\n\t\t\tnewRangeIndexEnd = this.allSeriesDataLength - 1;\r\n\t\t}\r\n\t\tif (newRangeIndexStart < 0) {\r\n\t\t\tnewRangeIndexStart = 0;\r\n\t\t}\r\n\r\n\t\tif (newRangeIndexStart !== null && newRangeIndexEnd !== null) {\r\n\t\t\tthis.setRangeIndex(newRangeIndexStart, newRangeIndexEnd);\r\n\t\t}\r\n\t}\r\n\r\n\tin(positon: ChartPosition, coordinates: ChartCoordinates): boolean {\r\n\t\treturn (positon.x >= coordinates.left) &&\r\n\t\t\t(positon.x <= coordinates.left + coordinates.width) &&\r\n\t\t\t(positon.y >= coordinates.top) &&\r\n\t\t\t(positon.y <= coordinates.top + coordinates.height);\r\n\t}\r\n\r\n\tsetCanvasSize(): void {\r\n\t\tthis.canvas = new ChartCanvas(this.canvasElement);\r\n\t\tthis.canvasHover = new ChartCanvas(this.canvasHoverElement);\r\n\t\tthis.canvas.updateSize();\r\n\t\tthis.canvasHover.updateSize();\r\n\t}\r\n\r\n\tmouseMove(mouseMoveEvent: MouseEvent): void {\r\n\r\n\t\tconst mouseMoveEventPosition: ChartPosition = this.canvas.mouseEventToPosition(mouseMoveEvent);\r\n\r\n\t\tif (this.in(mouseMoveEventPosition, this.chartCoordinates)) {\r\n\t\t\tthis.drawColumnHoverIndex = this.findRangeIndexInDrawValues(mouseMoveEventPosition.x);\r\n\t\t\tthis.drawHoverMouseMovePosition = mouseMoveEventPosition;\r\n\t\t} else {\r\n\t\t\tthis.drawColumnHoverIndex = null;\r\n\t\t\tthis.drawHoverMouseMovePosition = null;\r\n\t\t}\r\n\r\n\t\t// When range selection is enabled and we have a mousedown event and the mouse position was inside the graph draw area...\r\n\t\tif (this.processedConfiguration.rangeSelection && this.mouseDown !== null && this.in(this.canvas.mouseEventToPosition(this.mouseDown), this.chartCoordinates)) {\r\n\t\t\tif (this.rangeSelection === null) {\r\n\t\t\t\t// Check if we moved at least 20 pixels, so we can start the selection \r\n\t\t\t\tlet move: {h: number, v: number} = this.mouseEventPositionsMove(this.mouseDown, mouseMoveEvent);\r\n\t\t\t\tif (move.h > 20) {\r\n\t\t\t\t\tthis.rangeSelection = {\r\n\t\t\t\t\t\tmouseDownEvent: this.mouseDown,\r\n\t\t\t\t\t\tmouseMoveEvent\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// If we already have a started selection, we need to update it\r\n\t\t\t\tthis.rangeSelection = {\r\n\t\t\t\t\tmouseDownEvent: this.mouseDown,\r\n\t\t\t\t\tmouseMoveEvent\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.drawHover();\r\n\t}\r\n\r\n\tmouseUp(_: MouseEvent): void {\r\n\r\n\t\tthis.mouseDown = null;\r\n\r\n\t\tif (this.mouseUpEvent !== null) {\r\n\t\t\tdocument.removeEventListener('mouseup', this.mouseUpEvent);\r\n\t\t\tthis.mouseUpEvent = null;\r\n\t\t}\r\n\r\n\t\t// If we have a mousedown event and range selection is enabled and we have a selection in progress, we need to focus on seleciton and stop it\r\n\t\tif (this.rangeSelection !== null) {\r\n\t\t\tthis.rangeSelectionFocus();\r\n\t\t\tthis.rangeSelection = null;\r\n\t\t\tthis.canvasHover.clear();\r\n\t\t}\r\n\t}\r\n\r\n\tattachEvents(): void {\r\n\r\n\t\t// RESIZE\r\n\t\tconst resizeSubject: Subject<void> = new Subject();\r\n\t\tconst observer = new ResizeObserver(entries => {\r\n\t\t\tentries.forEach(() => {\r\n\t\t\t\tresizeSubject.next();\r\n\t\t\t});\r\n\t\t});\r\n\t\tobserver.observe(this.el.nativeElement);\r\n\t\tresizeSubject.pipe(debounceTime(300)).subscribe(() => {\r\n\t\t\tthis.draw();\r\n\t\t});\r\n\r\n\t\t// WHEEL\r\n\t\tthis.el.nativeElement.addEventListener('wheel', (wheelEvent: WheelEvent) => {\r\n\t\t\tif (!wheelEvent.ctrlKey) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\twheelEvent.preventDefault();\r\n\t\t\twheelEvent.stopPropagation();\r\n\t\t\tif (this.processedConfiguration.zoom) {\r\n\t\t\t\tthis.zoom(wheelEvent, wheelEvent.deltaY < 0 ? 'in' : 'out');\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.el.nativeElement.addEventListener('mousemove', (mouseEvent: MouseEvent) => {\r\n\t\t\tthis.mouseMove(mouseEvent);\r\n\t\t});\r\n\r\n\t\tthis.el.nativeElement.addEventListener('mousedown', (mouseEvent: MouseEvent) => {\r\n\t\t\tthis.mouseDown = mouseEvent;\r\n\t\t\tthis.mouseUpEvent = this.mouseUp.bind(this);\r\n\t\t\tdocument.addEventListener('mouseup', this.mouseUpEvent);\r\n\t\t});\r\n\r\n\t\tthis.el.nativeElement.addEventListener('mouseleave', () => {\r\n\t\t\tthis.drawColumnHoverIndex = null;\r\n\t\t\tthis.drawHover();\r\n\t\t});\r\n\t}\r\n\r\n\trangeSelectionFocus(): void {\r\n\t\tif (this.rangeSelection === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst startIndex: number = this.findRangeIndexInDrawValues(this.canvas.mouseEventToPosition(this.rangeSelection.mouseDownEvent).x);\r\n\t\tconst endIndex: number = this.findRangeIndexInDrawValues(this.canvas.mouseEventToPosition(this.rangeSelection.mouseMoveEvent).x);\r\n\t\tthis.setRangeIndex(Math.min(startIndex, endIndex), Math.max(startIndex, endIndex));\r\n\t}\r\n\r\n\tfindRangeIndexInDrawValues(x: number): number {\r\n\t\tfor (let i = this.drawColumns.length - 1; i >= 0; i--) {\r\n\t\t\tif (this.drawColumns[i].coordinates.left < x) {\r\n\t\t\t\treturn this.drawColumns[i].index;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tsetRangeIndex(start: number, end: number): void {\r\n\t\tthis.rangeIndexStart = start;\r\n\t\tthis.rangeIndexEnd = end;\r\n\t\tthis.draw();\r\n\t\tthis.drawHover();\r\n\t}\r\n\r\n\tgetRangeIndexByPosition(x: number, high: boolean = false): number {\r\n\t\tconst range: number = this.rangeIndexEnd - this.rangeIndexStart;\r\n\t\treturn Math.floor(x / (this.graphDrawAreaCoordinates.width / range)) + (high ? 1 : 0);\r\n\t}\r\n\r\n\tmouseEventPositionsMove(startMouseEvent: MouseEvent, endMouseEvent: MouseEvent): {h: number, v: number} {\r\n\t\treturn {\r\n\t\t\th: Math.abs(endMouseEvent.clientX - startMouseEvent.clientX),\r\n\t\t\tv: Math.abs(endMouseEvent.clientY - startMouseEvent.clientY)\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns series by the given `id`\r\n\t * \r\n\t * @param id Id of series\r\n\t * @returns `ProcessedSeries` or `null` if `id` is not found\r\n\t */\r\n\tgetSeriesById(id: number | string): ProcessedSeries | null {\r\n\t\tfor (let series of this.processedConfiguration.series) {\r\n\t\t\tif (series.id === id) {\r\n\t\t\t\treturn series;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the visibility of series\r\n\t * \r\n\t * @param id Id of series\r\n\t * @param visible \r\n\t */\r\n\tsetSeriesVisibility(id: number | string, visible: boolean): void {\r\n\t\tconst processedSeries: ProcessedSeries | null = this.getSeriesById(id);\r\n\t\tif (processedSeries === null || processedSeries.visible === visible) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tprocessedSeries.visible = visible;\r\n\t\tthis.draw();\r\n\t}\r\n\r\n\tsetSeriesData(id: number | string, data: SeriesData[], resetZoom: boolean = true): void {\r\n\t\tthis.setMultipleSeriesData([{\r\n\t\t\tid,\r\n\t\t\tdata\r\n\t\t}], resetZoom);\r\n\t}\r\n\r\n\tsetMultipleSeriesData(seriesData: {id: number | string, data: SeriesData[]}[], resetZoom: boolean = true): void {\r\n\t\tfor (let seriesDataItem of seriesData) {\r\n\t\t\tconst processedSeries: ProcessedSeries | null = this.getSeriesById(seriesDataItem.id);\r\n\t\t\tif (processedSeries === null) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tprocessedSeries.data = seriesDataItem.data;\r\n\t\t\tprocessedSeries.processedData = processData(seriesDataItem.data, processedSeries);\r\n\t\t}\r\n\t\tprocessSeriesDate(this.processedConfiguration, this.processedConfiguration.series, this.localeId);\r\n\t\tif (resetZoom) {\r\n\t\t\tthis.resetZoom();\r\n\t\t} else {\r\n\t\t\tthis.draw();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Reset zoom to full\r\n\t */\r\n\tresetZoom(): void {\r\n\t\tthis.setRangeIndex(0, this.allSeriesDataLength);\r\n\t}\r\n\r\n\tsetPieTemplates(pieTemplates: ChartPieTemplate[]): void {\r\n\t\tthis.processedConfiguration.pieTemplates = pieTemplates;\r\n\t\tthis.draw();\r\n\t}\r\n\r\n\tremoveAllSeries(draw: boolean = true): void {\r\n\t\tthis.processedConfiguration.series = [];\r\n\t\tif (draw) {\r\n\t\t\tthis.draw();\r\n\t\t}\r\n\t}\r\n\r\n\taddSeries(series: Series, draw: boolean = true): void {\r\n\t\tthis.processedConfiguration.series.push(...processSeries([series], this.processedConfiguration, this.localeId, this));\r\n\t\tif (draw) {\r\n\t\t\tthis.draw();\r\n\t\t}\r\n\t}\r\n\r\n\tupdate(draw: boolean = true): void {\r\n\t\tthis.processConfiguration();\r\n\t\tif (draw) {\r\n\t\t\tthis.draw();\r\n\t\t}\r\n\t}\r\n\r\n\tdetectChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.inited = true;\r\n\t\tthis.processConfiguration();\r\n\t\tthis.attachEvents();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tconstructor() {\r\n\r\n\t\tdocument.addEventListener('click', () => {\r\n\t\t\tthis.hideContextMenu();\r\n\t\t});\r\n\r\n\t\tthis.translationsService.initModuleTranslation('chart', 'hu', CHART_LANGUAGES_HU);\r\n\t\tthis.translationsService.initModuleTranslation('chart', 'en-us', CHART_LANGUAGES_EN);\r\n\r\n\t\tthis.cdr.detach();\r\n\t}\r\n}\r\n","export interface Coordinates {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport interface ColorRgb {\r\n\tr: number;\r\n\tg: number;\r\n\tb: number;\r\n\ta: number | null;\r\n}\r\n\r\nexport interface ColorHsl {\r\n\th: number;\r\n\ts: number;\r\n\tl: number;\r\n}\r\n\r\nexport interface ColorHsv {\r\n\th: number;\r\n\ts: number;\r\n\tv: number;\r\n}\r\n\r\nexport enum ColorFormat {\r\n\tRGB = 'RGB',\r\n\tHSV = 'HSV',\r\n\tHSL = 'HSL',\r\n\tHEX = 'HEX'\r\n}\r\n","import { ColorFormat, ColorHsl, ColorHsv, ColorRgb } from \"./colorpicker.interfaces\";\r\n\r\nexport function isHex(input: string): boolean {\r\n\treturn /\\#?[0-9A-Fa-f]{6}/g.test(input);\r\n}\r\n\r\nexport function colorRgbToString(colorRgb: ColorRgb): string {\r\n\tconst rgbString: string = [colorRgb.r, colorRgb.g, colorRgb.b].join(', ');\r\n\treturn colorRgb.a !== null ? 'rgba(' + rgbString + ', ' + colorRgb.a.toString() + ')': 'rgb(' + rgbString + ')'\r\n}\r\n\r\nexport function hexToRgb(hex: string, alpha: number | null = null): ColorRgb {\r\n\treturn {\r\n\t\tr: parseInt(hex.slice(1, 3), 16),\r\n\t\tg: parseInt(hex.slice(3, 5), 16),\r\n\t\tb: parseInt(hex.slice(5, 7), 16),\r\n\t\ta: alpha\r\n\t}\r\n}\r\n\r\nexport function rgbToHex(rgb: string): string {\r\n\trgb = rgb.replace('rgb(', '');\r\n\trgb = rgb.replace(')', '');\r\n\tconst colorArray: string[] = rgb.split(',');\r\n\tconst red: number = parseInt(colorArray[0], 10);\r\n\tconst green: number = parseInt(colorArray[1], 10);\r\n\tconst blue: number = parseInt(colorArray[2], 10);\r\n\treturn \"#\" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1);\r\n}\r\n\r\nexport function rgbToHsl(colorRgb: ColorRgb): ColorHsl {\r\n\tconst r: number = colorRgb.r / 255;\r\n\tconst g: number = colorRgb.g / 255;\r\n\tconst b: number = colorRgb.b / 255;\r\n\tconst max: number = Math.max(r, g, b);\r\n\tconst min: number = Math.min(r, g, b);\r\n\tlet h: number = (max + min) / 2;\r\n\tlet s: number = (max + min) / 2;\r\n\tconst l: number = (max + min) / 2;\r\n\r\n\tif (max === min) {\r\n\t\th = 0;\r\n\t\ts = 0;\r\n\t} else {\r\n\t\tconst d: number = max - min;\r\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n\t\tswitch(max) {\r\n\t\t\tcase r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n\t\t\tcase g: h = (b - r) / d + 2; break;\r\n\t\t\tcase b: h = (r - g) / d + 4; break;\r\n\t\t}\r\n\t\th /= 6;\r\n\t}\r\n\r\n\treturn {\r\n\t\th,\r\n\t\ts,\r\n\t\tl\r\n\t}\r\n}\r\n\r\nfunction percentRoundFn(number: number): number {\r\n\treturn Math.round(number * 100) / 100;\r\n}\r\n\r\nfunction diffc(c: number, v: number, diff: number): number {\r\n\treturn (v - c) / 6 / diff + 1 / 2;\r\n}\r\n\r\nexport function rgbToHsv(colorRgb: ColorRgb): ColorHsv {\r\n\r\n\tconst rabs: number = colorRgb.r / 255;\r\n\tconst gabs: number = colorRgb.g / 255;\r\n\tconst babs: number = colorRgb.b / 255;\r\n\tconst v: number = Math.max(rabs, gabs, babs);\r\n\tconst diff: number = v - Math.min(rabs, gabs, babs);\r\n\tlet h: number = 0;\r\n\tlet s: number = 0;\r\n\r\n\tif (diff !== 0) {\r\n\t\ts = diff / v;\r\n\t\tconst rr: number = diffc(rabs, v, diff);\r\n\t\tconst gg: number = diffc(gabs, v, diff);\r\n\t\tconst bb: number = diffc(babs, v, diff);\r\n\r\n\t\tif (rabs === v) {\r\n\t\t\th = bb - gg;\r\n\t\t} else if (gabs === v) {\r\n\t\t\th = (1 / 3) + rr - bb;\r\n\t\t} else if (babs === v) {\r\n\t\t\th = (2 / 3) + gg - rr;\r\n\t\t}\r\n\t\tif (h < 0) {\r\n\t\t\th += 1;\r\n\t\t}else if (h > 1) {\r\n\t\t\th -= 1;\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\t\th: Math.round(h * 360),\r\n\t\t\ts: percentRoundFn(s * 100),\r\n\t\t\tv: percentRoundFn(v * 100)\r\n\t};\r\n}\r\n\r\nexport function detectColorFormat(colorString: string): ColorFormat | null {\r\n\tif (isHex(colorString)) {\r\n\t\treturn ColorFormat.HEX;\r\n\t}\r\n\treturn null;\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, forwardRef, HostBinding, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { filter } from \"rxjs\";\r\nimport { appendToBody, ReadonlyDirective, isOuter, minMax, setElementRect } from \"../../shared\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { detectColorFormat, hexToRgb, rgbToHex, rgbToHsv } from \"./colorpicker.helpers\";\r\nimport { ColorFormat, ColorHsv, Coordinates } from \"./colorpicker.interfaces\";\r\n\r\n@Component({\r\n\tselector: 'cf-colorpicker',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => ColorPickerComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t],\r\n\ttemplate: `\r\n\t\t<div class=\"cf-floating-label-container\">\r\n\t\t\t<input\r\n\t\t\t\t#input\r\n\t\t\t\tclass=\"cf-input-container-default-input\"\r\n\t\t\t\t(keyup)=\"keyup($event)\"\r\n\t\t\t\t[disabled]=\"isDisabled\"\r\n\t\t\t\t[readonly]=\"isReadonly\"\r\n\t\t\t\t(focus)=\"focusFromHiddenInput()\"\r\n\t\t\t\t(click)=\"colorValueClicked()\"\r\n\t\t\t\t[ngClass]=\"{'dark': blockPosition !== null && blockPosition.x < 50 && blockPosition.y < 150}\"\r\n\t\t\t\t[ngStyle]=\"{'background-color': backgroundColor}\" />\r\n\t\t\t<label class=\"cf-floating-label\" [ngClass]=\"{'float': focused || filled}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n\t\t</div>\r\n\t\t<span *ngIf=\"clearable && filled && !isDisabled && !isReadonly\" class=\"cf-input-clear remixicon close-circle-fill\" (click)=\"clearClicked($event)\"></span>\r\n\t\t<div class=\"colorpicker-dropdown\" #dropdownElement *ngIf=\"opened\">\r\n\t\t\t<canvas #block class=\"colorpicker-block\" [width]=\"blockWidth\" [height]=\"height\" (mousedown)=\"blockMouseDown($event)\"></canvas>\r\n\t\t\t<canvas #strip class=\"colorpicker-strip\" [width]=\"stripWidth\" [height]=\"height\" (mousedown)=\"stripMouseDown($event)\"></canvas>\r\n\t\t\t<canvas #blockPositionElement class=\"colorpicker-block-position\" [width]=\"blockWidth\" [height]=\"height\"></canvas>\r\n\t\t\t<canvas #stripLine class=\"colorpicker-strip-line\" [width]=\"stripWidth\" [height]=\"height\"></canvas>\r\n\t\t</div>\r\n\t`,\r\n\tstyleUrls: ['colorpicker.component.scss'],\r\n    host: {\r\n        class: 'cf-input-container cf-colorpicker'\r\n    }\r\n})\r\nexport class ColorPickerComponent extends FormItem implements OnChanges, AfterViewInit, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\t/** Label */\r\n\t\r\n\t/** Value */\r\n\t@Input() value: string | null = null;\r\n\r\n\t/** Width */\r\n\t@Input() @HostBinding('style.width') width: string = 'auto';\r\n\r\n\t@Output() onOpened: EventEmitter<void> = new EventEmitter();\r\n\t@Output() onClosed: EventEmitter<void> = new EventEmitter();\r\n\r\n\t/** On value changed */\r\n\t@Output() onValueChanged: EventEmitter<string | null> = new EventEmitter();\r\n\r\n\t@ViewChild('input') input: ElementRef<HTMLInputElement> | undefined = undefined;\r\n\t@ViewChild('block') block: ElementRef<HTMLCanvasElement> | undefined = undefined;\r\n\t@ViewChild('strip') strip: ElementRef<HTMLCanvasElement> | undefined = undefined;\r\n\t@ViewChild('blockPositionElement') blockPositionElement: ElementRef<HTMLCanvasElement> | undefined = undefined;\r\n\t@ViewChild('stripLine') stripLine: ElementRef<HTMLCanvasElement> | undefined = undefined;\r\n\t@ViewChild('dropdownElement') dropdownElement: ElementRef<HTMLDivElement> | undefined = undefined;\r\n\r\n\tprivate valueColorFormat: ColorFormat | null = null;\r\n\r\n\tprotected backgroundColor: string | null = null;\r\n\r\n\theight: number = 300;\r\n\r\n\tprotected blockWidth: number = 300;\r\n\tprotected stripWidth: number = 45;\r\n\tprotected opened: boolean = false;\r\n\r\n\tprivate selectedStripColor: string = '#000000';\r\n\r\n\tprivate initialized: boolean = false;\r\n\r\n\tprotected blockPosition: Coordinates = {x: 0, y: 0};\r\n\tprivate stripMousePositionY: number = 150;\r\n\r\n\tprivate documentBlockMouseMoveEventListener: ((event: MouseEvent) => void) | null = null;\r\n\tprivate documentBlockMouseUpEventListener: ((event: MouseEvent) => void) | null = null;\r\n\tprivate documentStripMouseMoveEventListener: ((event: MouseEvent) => void) | null = null;\r\n\tprivate documentStripMouseUpEventListener: ((event: MouseEvent) => void) | null = null;\r\n\r\n\tget filled(): boolean {\r\n\t\treturn this.value !== null && this.value !== '';\r\n\t}\r\n\r\n\tclearClicked(event: MouseEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tthis.changeValue(null);\r\n\t\tthis.backgroundColor = null;\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.value = '';\r\n\t\t}\r\n\t\tthis.opened = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tcolorValueClicked(): void {\r\n\t\tif (this.isReadonly || this.isDisabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.open();\r\n\t}\r\n\r\n\tprivate open(): void {\r\n\t\tif (this.isReadonly || this.isDisabled || this.opened) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.opened = true;\r\n\t\tthis.onOpened.emit();\r\n\t\tthis.cdr.detectChanges();\r\n\t\tif (!this.initialized) {\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\r\n\t\tif (this.dropdownElement === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n        setElementRect(this.element.nativeElement, this.dropdownElement.nativeElement, null, null);\r\n\t\tappendToBody(this.dropdownElement.nativeElement);\r\n\t}\r\n\r\n\tprivate close(fireChangeDetection: boolean = true): void {\r\n\t\tif (this.opened) {\r\n\t\t\tthis.opened = false;\r\n\t\t\tthis.onClosed.emit();\r\n\t\t\tif (fireChangeDetection) {\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tkeyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'escape') {\r\n\t\t\tthis.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tconst colorFormat: ColorFormat | null = detectColorFormat(this.input.nativeElement.value);\r\n\t\t\tswitch(colorFormat) {\r\n\t\t\t\tcase ColorFormat.HEX:\r\n\t\t\t\t\tthis.changeValue(this.input.nativeElement.value);\r\n\t\t\t\t\tthis.detectValueColorFormat();\r\n\t\t\t\t\tthis.updateValuePositions();\r\n\t\t\t\t\tthis.initialize();\r\n\t\t\t\t\tthis.backgroundColor = this.input.nativeElement.value;\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfocusFromHiddenInput(): void {\r\n\t\tthis.focused = true;\r\n\t\tthis.open();\r\n\t}\r\n\r\n\toverride writeValue(value: string | null): void {\r\n\t\tthis.value = value;\r\n\t\tthis.backgroundColor = value;\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.value = value;\r\n\t\t}\r\n\t\tthis.detectValueColorFormat();\r\n\t\tthis.updateValuePositions();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate initialize(): void {\r\n\t\tthis.drawBlock();\r\n\t\tthis.drawBlockPosition();\r\n\t\tthis.drawStrip();\r\n\t\tthis.drawStripLine();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate detectValueColorFormat(): void {\r\n\t\tif (this.value === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.valueColorFormat = detectColorFormat(this.value);\r\n\t}\r\n\r\n\tprivate updateValuePositions(): void {\r\n\t\tif (this.value === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet colorHsv: ColorHsv | null = null;\r\n\t\tswitch (this.valueColorFormat) {\r\n\t\t\tcase ColorFormat.HEX: colorHsv = rgbToHsv(hexToRgb(this.value)); break;\r\n\t\t}\r\n\t\tif (colorHsv !== null) {\r\n\t\t\tthis.selectedStripColor = this.value;\r\n\t\t\tthis.stripMousePositionY = Math.round((this.height / 360) * colorHsv.h);\r\n\t\t\tthis.blockPosition = {\r\n\t\t\t\tx: Math.round((this.blockWidth / 100) * colorHsv.s),\r\n\t\t\t\ty: Math.round(this.height - ((this.height / 100) * colorHsv.v))\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawBlock(): void {\r\n\t\tif (this.block === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst domRect: DOMRect = this.block.nativeElement.getBoundingClientRect();\r\n\t\tconst ctx: CanvasRenderingContext2D | null = this.block.nativeElement.getContext('2d');\r\n\t\tif (ctx === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst width: number = domRect.width;\r\n\t\tconst height: number = domRect.height;\r\n\t\tctx.rect(0, 0, domRect.width, domRect.height);\r\n\r\n\t\tctx.fillStyle = this.selectedStripColor;\r\n\t\tctx.fillRect(0, 0, width, height);\r\n\r\n\t\tconst whiteGradient: CanvasGradient = ctx.createLinearGradient(0, 0, width, 0);\r\n\t\twhiteGradient.addColorStop(0, 'rgba(255,255,255,1)');\r\n\t\twhiteGradient.addColorStop(1, 'rgba(255,255,255,0)');\r\n\t\tctx.fillStyle = whiteGradient;\r\n\t\tctx.fillRect(0, 0, width, height);\r\n\r\n\t\tconst blackGradient: CanvasGradient = ctx.createLinearGradient(0, 0, 0, height);\r\n\t\tblackGradient.addColorStop(0, 'rgba(0,0,0,0)');\r\n\t\tblackGradient.addColorStop(1, 'rgba(0,0,0,1)');\r\n\t\tctx.fillStyle = blackGradient;\r\n\t\tctx.fillRect(0, 0, width, height);\r\n\t}\r\n\r\n\tprivate drawBlockPosition(): void {\r\n\t\tif (this.blockPositionElement === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst domRect: DOMRect = this.blockPositionElement.nativeElement.getBoundingClientRect();\r\n\t\tconst ctx: CanvasRenderingContext2D | null = this.blockPositionElement.nativeElement.getContext('2d');\r\n\t\tif (ctx === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tctx.clearRect(0, 0, domRect.width, domRect.height);\r\n\t\tctx.beginPath();\r\n\t\tctx.arc(this.blockPosition.x, this.blockPosition.y, 5, 0, 5 * Math.PI);\r\n\t\tif (this.blockPosition.x < 50 && this.blockPosition.y < 150) {\r\n\t\t\tctx.strokeStyle = '#000000';\r\n\t\t} else {\r\n\t\t\tctx.strokeStyle = '#ffffff';\r\n\t\t}\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tprivate drawStrip(): void {\r\n\t\tif (this.strip === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst domRect: DOMRect = this.strip.nativeElement.getBoundingClientRect();\r\n\t\tconst ctx: CanvasRenderingContext2D | null = this.strip.nativeElement.getContext('2d');\r\n\t\tif (ctx === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst width: number = domRect.width;\r\n\t\tconst height: number = domRect.height;\r\n\t\tctx.rect(0, 0, width, height);\r\n\t\tvar canvasGradient: CanvasGradient = ctx.createLinearGradient(0, 0, 0, height);\r\n\t\tcanvasGradient.addColorStop(0, 'rgb(255, 0, 0)');\r\n\t\tcanvasGradient.addColorStop(0.17, 'rgb(255, 255, 0)');\r\n\t\tcanvasGradient.addColorStop(0.34, 'rgb(0, 255, 0)');\r\n\t\tcanvasGradient.addColorStop(0.51, 'rgb(0, 255, 255)');\r\n\t\tcanvasGradient.addColorStop(0.68, 'rgb(0, 0, 255)');\r\n\t\tcanvasGradient.addColorStop(0.85, 'rgb(255, 0, 255)');\r\n\t\tcanvasGradient.addColorStop(1, 'rgb(255, 0, 0)');\r\n\t\tctx.fillStyle = canvasGradient;\r\n\t\tctx.fill();\r\n\t}\r\n\r\n\tprivate drawStripLine(): void {\r\n\t\tif (this.stripLine === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst domRect: DOMRect = this.stripLine.nativeElement.getBoundingClientRect();\r\n\t\tconst ctx: CanvasRenderingContext2D | null = this.stripLine.nativeElement.getContext('2d');\r\n\t\tif (ctx === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tctx.clearRect(0, 0, domRect.width, domRect.height);\r\n\t\tctx.beginPath();\r\n\t\tctx.moveTo(0, this.stripMousePositionY);\r\n\t\tctx.lineTo(domRect.width, this.stripMousePositionY);\r\n\t\tctx.strokeStyle = '#000000';\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tprivate updateStripColor(event: MouseEvent): void {\r\n\t\tif (this.strip === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst domRect: DOMRect = this.strip.nativeElement.getBoundingClientRect();\r\n\t\tlet y: number = event.pageY - window.scrollY;\r\n\t\tif (y < domRect.y) {\r\n\t\t\ty = domRect.y;\r\n\t\t}\r\n\t\tif (y > domRect.y + domRect.height) {\r\n\t\t\ty = domRect.y + domRect.height - 1;\r\n\t\t}\r\n\t\ty = y - domRect.y;\r\n\r\n\t\tthis.stripMousePositionY = y;\r\n\t\tconst ctx: CanvasRenderingContext2D | null = this.strip.nativeElement.getContext('2d');\r\n\t\tif (ctx === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst imageData: Uint8ClampedArray = ctx.getImageData(0, y, 1, 1).data;\r\n\t\tthis.selectedStripColor = rgbToHex('rgb(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ')');\r\n\t\tthis.drawStripLine();\r\n\t\tthis.drawBlock();\r\n\t\tthis.updateSelectedColor();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tstripMouseDown(event: MouseEvent): void {\r\n\t\tthis.updateStripColor(event);\r\n\r\n\t\t// Attach mousemove listener\r\n\t\tthis.documentStripMouseMoveEventListener = this.stripMouseMove.bind(this);\r\n\t\tdocument.addEventListener('mousemove', this.documentStripMouseMoveEventListener);\r\n\t\t\r\n\t\t// Attach mouseup listener\r\n\t\tthis.documentStripMouseUpEventListener = this.stripMouseUp.bind(this);\r\n\t\tdocument.addEventListener('mouseup', this.documentStripMouseUpEventListener);\r\n\t}\r\n\r\n\tstripMouseMove(event: MouseEvent): void {\r\n\t\tthis.updateStripColor(event);\r\n\t}\r\n\r\n\tstripMouseUp(): void {\r\n\t\tif (this.documentStripMouseMoveEventListener !== null) {\r\n\t\t\tdocument.removeEventListener('mousemove', this.documentStripMouseMoveEventListener);\r\n\t\t}\r\n\t\tif (this.documentStripMouseUpEventListener !== null) {\r\n\t\t\tdocument.removeEventListener('mouseup', this.documentStripMouseUpEventListener);\r\n\t\t}\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.changeValue(this.input.nativeElement.value);\r\n\t\t\tthis.input.nativeElement.focus();\r\n\t\t}\r\n\t}\r\n\r\n\tblockMouseDown(event: MouseEvent): void {\r\n\t\tthis.updateBlockPosition(event);\r\n\r\n\t\t// Attach mousemove listener\r\n\t\tthis.documentBlockMouseMoveEventListener = this.blockMouseMove.bind(this);\r\n\t\tdocument.addEventListener('mousemove', this.documentBlockMouseMoveEventListener);\r\n\t\t\r\n\t\t// Attach mouseup listener\r\n\t\tthis.documentBlockMouseUpEventListener = this.blockMouseUp.bind(this);\r\n\t\tdocument.addEventListener('mouseup', this.documentBlockMouseUpEventListener);\r\n\t}\r\n\r\n\tblockMouseMove(event: MouseEvent): void {\r\n\t\tthis.updateBlockPosition(event);\r\n\t}\r\n\r\n\tblockMouseUp(): void {\r\n\t\tif (this.documentBlockMouseMoveEventListener !== null) {\r\n\t\t\tdocument.removeEventListener('mousemove', this.documentBlockMouseMoveEventListener);\r\n\t\t}\r\n\t\tif (this.documentBlockMouseUpEventListener !== null) {\r\n\t\t\tdocument.removeEventListener('mouseup', this.documentBlockMouseUpEventListener);\r\n\t\t}\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.changeValue(this.input.nativeElement.value);\r\n\t\t\tthis.input.nativeElement.focus();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateBlockPosition(event: MouseEvent): void {\r\n\t\tif (this.blockPositionElement === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst domRect: DOMRect = this.blockPositionElement.nativeElement.getBoundingClientRect();\r\n\t\tlet x: number = Math.min(Math.max(event.pageX - window.scrollX - domRect.left, 0), domRect.width - 1);\r\n\t\tlet y: number = Math.min(Math.max(event.pageY - window.scrollY - domRect.top, 0), domRect.height - 1);\r\n\t\tthis.blockPosition = {\r\n\t\t\tx,\r\n\t\t\ty\r\n\t\t};\r\n\t\tthis.drawBlockPosition();\r\n\t\tthis.updateSelectedColor();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate updateSelectedColor(): void {\r\n\t\tif (this.block === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst ctx: CanvasRenderingContext2D | null = this.block.nativeElement.getContext('2d');\r\n\t\tif (ctx === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.blockPosition.x === 0 && this.blockPosition.y === 0) {\r\n\t\t\tconst newValue: string = rgbToHex('rgb(' + 255 + ',' + 255 + ',' + 255 + ')');\r\n\t\t\tthis.backgroundColor = newValue;\r\n\t\t\tif (this.input !== undefined) {\r\n\t\t\t\tthis.input.nativeElement.value = newValue;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tlet imageData: Uint8ClampedArray = ctx.getImageData(minMax(this.blockPosition.x, 0, this.blockWidth - 1), minMax(this.blockPosition.y, 0, this.height - 1), 1, 1).data;\r\n\t\t\tconst newValue: string = rgbToHex('rgb(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ')');\r\n\t\t\tthis.backgroundColor = newValue;\r\n\t\t\tif (this.input !== undefined) {\r\n\t\t\t\tthis.input.nativeElement.value = newValue;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Reset or set value after blur\r\n\t * \r\n\t * If value is a valid color format, set it and fire change event\r\n\t * If the value is invalid, reset the previous value\r\n\t * \r\n\t * @returns `void`\r\n\t */\r\n\tprivate resetOrSetValueAfterLeave(): void {\r\n\t\tif (this.input === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst colorFomat: ColorFormat | null = detectColorFormat(this.input.nativeElement.value);\r\n\t\tif (colorFomat === null) {\r\n\t\t\tif (this.value === null) {\r\n\t\t\t\tthis.input.nativeElement.value = '';\r\n\t\t\t} else {\r\n\t\t\t\tthis.input.nativeElement.value = this.value;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.changeValue(this.input.nativeElement.value);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate changeValue(value: string | null): void {\r\n\t\tthis.value = value;\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(this.value);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tthis.onValueChanged.emit(value);\r\n\t}\r\n\r\n\tblur(): void {\r\n\t\tthis.resetOrSetValueAfterLeave();\r\n\t\tthis.focused = false;\r\n\t\tthis.opened = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tif (this.value !== null && this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.value = this.value;\r\n\t\t\tthis.backgroundColor = this.value;\r\n\t\t\tthis.detectValueColorFormat();\r\n\t\t\tthis.updateValuePositions();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tif (changes['value'] !== undefined) {\r\n\t\t\tthis.detectValueColorFormat();\r\n\t\t\tthis.updateValuePositions();\r\n\t\t\tif (this.input !== undefined) {\r\n\t\t\t\tthis.input.nativeElement.value = this.value || '';\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.setControlComponent();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed()\r\n\t\t).subscribe((event: MouseEvent) => {\r\n\t\t\tif (this.dropdownElement !== undefined) {\r\n\t\t\t\tif (isOuter([this.element.nativeElement, this.dropdownElement.nativeElement], event)) {\r\n\t\t\t\t\tthis.blur();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (isOuter([this.element.nativeElement], event)) {\r\n\t\t\t\t\tthis.blur();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => this.input !== undefined && event.target !== this.input.nativeElement)\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.resetOrSetValueAfterLeave();\r\n\t\t\tthis.focused = false;\r\n\t\t\tthis.opened = false;\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, forwardRef, AfterViewInit, inject, OnChanges, SimpleChanges, ChangeDetectionStrategy, OnInit } from \"@angular/core\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { CfDialog } from \"../../shared/classes\";\r\nimport { CfDialogService } from \"../../shared/services\";\r\nimport { InputTextComponent } from \"../inputtext/inputtext.component\";\r\nimport { ButtonDirective } from \"../../shared/directives/button.directive\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ReadonlyDirective } from \"../../shared\";\r\n\r\nexport interface EditorMenuItemActionParams {\r\n    editor: EditorComponent;\r\n}\r\n\r\nexport interface EditorMenuItem {\r\n    title: string;\r\n    icon: string | null;\r\n\ttag: string;\r\n    action: ((params: EditorMenuItemActionParams) => void) | null;\r\n}\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tInputTextComponent,\r\n\t\tButtonDirective,\r\n\t\tFormsModule\r\n\t],\r\n\ttemplate: `\r\n\t\t<div class=\"cf-grid cf-cols-2\">\r\n            <div class=\"cf-dialog-title\">Url hozzáadása</div>\r\n\t\t\t<cf-inputtext [label]=\"'Url'\" [(ngModel)]=\"href\" class=\"cf-col-2\"></cf-inputtext>\r\n\t\t\t<div class=\"cf-dialog-buttons\">\r\n\t\t\t\t<button cfButton [severity]=\"'success'\" [label]=\"'Mentés'\" (click)=\"close(href)\"></button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t`\r\n})\r\nexport class EditorLinkComponent extends CfDialog {\r\n\thref: string = '';\r\n}\r\n\r\n@Component({\r\n    selector: 'cf-editor',\r\n\tstandalone: true,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => EditorComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n    template: `\r\n        <div class=\"input-container\">\r\n            <div class=\"editor\" [ngStyle]=\"{'height': height}\">\r\n                <input class=\"hidden-input\" #hiddenInput />\r\n                <div class=\"editor-header\">\r\n                    <div class=\"editor-header-menu\">\r\n                        <div class=\"editor-header-menu-item\" *ngFor=\"let menuItem of menu\" (click)=\"menuItemClicked(menuItem)\" [title]=\"menuItem.title\">\r\n                            <span class=\"remixicon\" [ngClass]=\"menuItem.icon\" *ngIf=\"menuItem.icon\"></span>\r\n\t\t\t\t\t\t\t<div class=\"editor-header-menu-item-heading\" *ngIf=\"menuItem.tag === 'heading'\">\r\n\t\t\t\t\t\t\t\t<div (click)=\"execCommand('formatBlock', 'H1')\">Heading 1</div>\r\n\t\t\t\t\t\t\t\t<div (click)=\"execCommand('formatBlock', 'H2')\">Heading 2</div>\r\n\t\t\t\t\t\t\t\t<div (click)=\"execCommand('formatBlock', 'H3')\">Heading 3</div>\r\n\t\t\t\t\t\t\t\t<div (click)=\"execCommand('formatBlock', 'H4')\">Heading 4</div>\r\n\t\t\t\t\t\t\t\t<div (click)=\"execCommand('formatBlock', 'H5')\">Heading 5</div>\r\n\t\t\t\t\t\t\t\t<div (click)=\"execCommand('formatBlock', 'H6')\">Heading 6</div>\r\n\t\t\t\t\t\t\t</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\t\t\t\t<div class=\"editor-content\">\r\n\t\t\t\t\t<iframe #iframe [contentEditable]=\"true\" (load)=\"init()\">\r\n\t\t\t\t\t\t<html>\r\n\t\t\t\t\t\t\t<head></head>\r\n\t\t\t\t\t\t\t<body></body>\r\n\t\t\t\t\t\t</html>\r\n\t\t\t\t\t</iframe>\r\n\t\t\t\t\t<textarea *ngIf=\"mode === 'html'\" [(ngModel)]=\"html\"></textarea>\r\n\t\t\t\t</div>\r\n            </div>\r\n            <label *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n        </div>\r\n    `\r\n})\r\nexport class EditorComponent extends FormItem implements OnInit, AfterViewInit, OnChanges, FormItem {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\tprivate dialogService: CfDialogService = inject(CfDialogService);\r\n\r\n    @Input() value: string = '';\r\n    @Input() height: string = 'auto';\r\n\r\n    @Output() onChanged: EventEmitter<string | null> = new EventEmitter();\r\n\r\n    @ViewChild('iframe') iframe: ElementRef<HTMLIFrameElement> | undefined = undefined;\r\n    @ViewChild('hiddenInput') hiddenInput: HTMLInputElement | undefined = undefined;\r\n\r\n\tfontSizes: number[] = [1, 2, 3, 4, 5, 6, 7];\r\n\r\n    inited: boolean = false;\r\n\r\n\tmode: 'editor' | 'html' = 'editor';\r\n\thtml: string = '';\r\n\r\n    menu: EditorMenuItem[] = [{\r\n\t\ttitle: 'Left',\r\n\t\ticon: 'align-left',\r\n\t\ttag: 'align-left',\r\n        action: ({ editor }) => { editor.execCommand('justifyLeft'); }\r\n\t}, {\r\n\t\ttitle: 'Center',\r\n\t\ticon: 'align-center',\r\n\t\ttag: 'align-center',\r\n        action: ({ editor }) => { editor.execCommand('justifyCenter'); }\r\n\t}, {\r\n\t\ttitle: 'Right',\r\n\t\ticon: 'align-right',\r\n\t\ttag: 'align-right',\r\n        action: ({ editor }) => { editor.execCommand('justifyRight'); }\r\n\t}, {\r\n\t\ttitle: 'Justify',\r\n\t\ticon: 'align-justify',\r\n\t\ttag: 'align-justify',\r\n        action: ({ editor }) => { editor.execCommand('justifyFull'); }\r\n\t}, {\r\n        title: 'Undo',\r\n        icon: 'arrow-go-back-fill',\r\n\t\ttag: 'undo',\r\n        action: ({ editor }) => { editor.execCommand('undo'); }\r\n    }, {\r\n        title: 'Redo',\r\n        icon: 'arrow-go-forward-fill',\r\n\t\ttag: 'redo',\r\n        action: ({ editor }) => { editor.execCommand('redo'); }\r\n    }, {\r\n        title: 'Background color',\r\n        icon: 'palette-fill',\r\n\t\ttag: 'background-color',\r\n        action: ({ editor }) => { editor.execCommand('backColor', '#563421') }\r\n    }, {\r\n        title: 'Text color',\r\n        icon: 'palette-line',\r\n\t\ttag: 'text-color',\r\n        action: ({ editor }) => { editor.execCommand('foreColor', '#123123') }\r\n    }, {\r\n\t\ttitle: 'Text size',\r\n\t\ticon: 'font-size',\r\n\t\ttag: 'text-size',\r\n        action: ({ editor }) => { editor.execCommand('fontSize', 1) }\r\n\t}, {\r\n\t\ttitle: 'Heading',\r\n\t\ticon: 'heading',\r\n\t\ttag: 'heading',\r\n\t\taction: null\r\n\t}, {\r\n\t\ttitle: 'Italic',\r\n\t\ticon: 'italic',\r\n\t\ttag: 'italic',\r\n        action: ({ editor }) => { editor.execCommand('italic') }\r\n\t}, {\r\n\t\ttitle: 'Bold',\r\n\t\ticon: 'bold',\r\n\t\ttag: 'bold',\r\n        action: ({ editor }) => { editor.execCommand('bold') }\r\n\t}, {\r\n\t\ttitle: 'Strike through',\r\n\t\ticon: 'strikethrough',\r\n\t\ttag: 'strikethrough',\r\n        action: ({ editor }) => { editor.execCommand('strikeThrough') }\r\n\t}, {\r\n\t\ttitle: 'Underline',\r\n\t\ticon: 'underline',\r\n\t\ttag: 'underline',\r\n        action: ({ editor }) => { editor.execCommand('underline') }\r\n\t}, {\r\n\t\ttitle: 'Link',\r\n\t\ticon: 'link',\r\n\t\ttag: 'link',\r\n\t\taction: ({ editor }) => {\r\n\t\t\tthis.dialogService.open(EditorLinkComponent).onClose.subscribe((href: string) => {\r\n\t\t\t\teditor.execCommand('createLink', href);\r\n\t\t\t});\r\n\t\t}\r\n\t}, {\r\n\t\ttitle: 'Unlink',\r\n\t\ticon: 'link-unlink',\r\n\t\ttag: 'unlink',\r\n\t\taction: ({ editor }) => { editor.execCommand('unlink') }\r\n\t}, {\r\n\t\ttitle: 'UL',\r\n\t\ticon: 'list-unordered',\r\n\t\ttag: 'ul',\r\n\t\taction: ({ editor }) => { editor.execCommand('ul') }\r\n\t}, {\r\n\t\ttitle: 'OL',\r\n\t\ticon: 'list-ordered',\r\n\t\ttag: 'ol',\r\n\t\taction: ({ editor }) => { editor.execCommand('ol') }\r\n\t}, {\r\n\t\ttitle: 'HTML',\r\n\t\ticon: 'file-text-line',\r\n\t\ttag: 'html',\r\n\t\taction: ({ editor }) => { editor.toggleMode(); }\r\n\t}];\r\n\r\n\toverride enterAsTabType: string = 'editor';\r\n\r\n    get iframeDocument(): Document | null {\r\n        if (this.iframe !== undefined) {\r\n            return this.iframe.nativeElement.contentDocument;\r\n        }\r\n        return null;\r\n    }\r\n\r\n\tget content(): string | null {\r\n\t\tif (this.iframeDocument === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.iframeDocument.body.innerHTML;\r\n\t}\r\n\r\n\ttoggleMode(): void {\r\n\t\tif (this.iframeDocument === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tthis.mode = this.mode === 'editor' ? 'html' : 'editor';\r\n\t\tif (this.mode === 'html') {\r\n\t\t\tthis.html = this.iframeDocument.body.innerHTML;\r\n\t\t} else {\r\n\t\t\tthis.iframeDocument.body.innerHTML = this.html;\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    execCommand(command: 'delete'): any\r\n    execCommand(command: 'italic'): any\r\n\texecCommand(command: 'strikeThrough'): any\r\n\texecCommand(command: 'underline'): any\r\n    execCommand(command: 'bold'): any\r\n    execCommand(command: 'undo'): any\r\n    execCommand(command: 'redo'): any\r\n    execCommand(command: 'backColor', color: string): any\r\n    execCommand(command: 'foreColor', color: string): any\r\n    execCommand(command: 'fontName', fontName: string): any\r\n    execCommand(command: 'justifyCenter'): any\r\n    execCommand(command: 'justifyLeft'): any\r\n    execCommand(command: 'justifyRight'): any\r\n\texecCommand(command: 'justifyFull'): any\r\n\texecCommand(command: 'fontSize', size: 1 | 2 | 3 | 4 | 5 | 6 | 7): any\r\n\texecCommand(command: 'formatBlock', size: 'H1' | 'H2' | 'H3' | 'H4' | 'H5' | 'H6'): any\r\n\texecCommand(command: 'createLink', href: string): any\r\n\texecCommand(command: 'unlink'): any\r\n\texecCommand(command: 'ul'): any\r\n\texecCommand(command: 'ol'): any\r\n    execCommand(command: string, argument: string | number | null = null): any {\r\n\t\tif (this.iframeDocument === null || this.mode === 'html') {\r\n\t\t\treturn;\r\n\t\t}\r\n        if (this.iframeDocument !== null) {\r\n\t\t\tif (command === 'ul') {\r\n\t\t\t\tconst ul: HTMLUListElement = this.iframeDocument.createElement('ul');\r\n\t\t\t\tul.appendChild(this.iframeDocument.createElement('li'));\r\n\t\t\t\tthis.iframeDocument.body.appendChild(ul);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (command === 'ol') {\r\n\t\t\t\tconst ol: HTMLOListElement = this.iframeDocument.createElement('ol');\r\n\t\t\t\tol.appendChild(this.iframeDocument.createElement('li'));\r\n\t\t\t\tthis.iframeDocument.body.appendChild(ol);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this.iframeDocument.queryCommandSupported(command)) {\r\n\t\t\t\tif (argument !== null) {\r\n\t\t\t\t\tthis.iframeDocument.execCommand(command, false, argument.toString());\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.iframeDocument.execCommand(command, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.changed();\r\n        }\r\n    }\r\n\r\n\tmenuItemClicked(menuItem: EditorMenuItem): void {\r\n\t\tif (menuItem.action === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tmenuItem.action({\r\n\t\t\teditor: this\r\n\t\t});\r\n\t}\r\n\r\n    override writeValue(value: string): void {\r\n        this.value = value;\r\n\t\tif (this.iframeDocument !== null) {\r\n\t\t\tthis.iframeDocument.body.innerHTML = value;\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n\tchanged(): void {\r\n\t\tconst value: string | null = this.content;\r\n\t\tif (value === null) {\r\n\t\t\treturn;\r\n\t\t} \r\n\t\tthis.value = value;\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(this.value);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tthis.onChanged.emit(value);\r\n\t}\r\n\r\n    init(): void {\r\n        if (this.inited || this.iframeDocument === null) {\r\n            return;\r\n        }\r\n        this.inited = true;\r\n        this.iframeDocument.designMode = 'on';\r\n        this.iframeDocument.addEventListener('keyup', () => {\r\n            this.changed();\r\n        });\r\n        this.iframeDocument.body.innerHTML = this.value;\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.cdr.detectChanges();\r\n        this.init();\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        \r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n}\r\n","import { Component, HostBinding, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n\tselector: 'cf-footer',\r\n\tstandalone: true,\r\n\ttemplate: `\r\n\t\t<ng-content></ng-content>\r\n\t`,\r\n\thost: {\r\n\t\tclass: 'cf-footer'\r\n\t}\r\n})\r\nexport class FooterComponent {\r\n\t@Input() height: string = '80px';\r\n\t@Input() @HostBinding('class') classes: string = '';\r\n\r\n\t@HostBinding('style') get hostStyle(): any {\r\n\t\treturn {\r\n\t\t\t'height': this.height,\r\n\t\t\t'flex': '0 0 ' + this.height\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component, HostBinding, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n\tselector: 'cf-header',\r\n\tstandalone: true,\r\n\ttemplate: `\r\n\t\t<ng-content></ng-content>\r\n\t`,\r\n\thost: {\r\n\t\tclass: 'cf-header'\r\n\t}\r\n})\r\nexport class HeaderComponent {\r\n\t@Input() height: string = '80px';\r\n\t@Input() @HostBinding('class') classes: string = '';\r\n\r\n\t@HostBinding('style') get hostStyle(): any {\r\n\t\treturn {\r\n\t\t\t'height': this.height,\r\n\t\t\t'flex': '0 0 ' + this.height\r\n\t\t}\r\n\t}\r\n}\r\n","import { MenuItem } from \"../../interfaces\";\r\nimport { CfPermissionsService } from \"../services\";\r\n\r\nexport function filterMenuItems(menuItems: MenuItem[], permissionsService: CfPermissionsService): MenuItem[] {\r\n\tconst filteredMenuItems: MenuItem[] = [];\r\n\tfor (let menuItem of menuItems) {\r\n\t\tif (menuItem.permissions !== undefined) {\r\n\t\t\tif (permissionsService.hasPermissions(menuItem.permissions)) {\r\n\t\t\t\tfilteredMenuItems.push(menuItem);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfilteredMenuItems.push(menuItem);\r\n\t\t}\r\n\t\tif (menuItem.children !== undefined) {\r\n\t\t\tmenuItem.children = filterMenuItems(menuItem.children, permissionsService);\r\n\t\t}\r\n\t}\r\n\treturn filteredMenuItems;\r\n}","import { CommonModule } from \"@angular/common\";\r\nimport { Component, HostBinding, inject, Input } from \"@angular/core\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { MenuItem } from \"../../../interfaces\";\r\nimport { CfPermissionsService } from \"../../../shared\";\r\nimport { CfPermissionDirective } from \"../../../shared/directives\";\r\nimport { filterMenuItems } from \"../../../shared/helpers/menu.helper\";\r\n\r\n@Component({\r\n\tselector: 'cf-menu',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tRouterModule,\r\n\t\tCfPermissionDirective\r\n\t],\r\n\ttemplate: `\r\n\r\n\t\t<ng-container [ngTemplateOutlet]=\"menuItemContent\" [ngTemplateOutletContext]=\"{menuItem: menuItem}\" *ngFor=\"let menuItem of filteredMenuItems\"></ng-container>\r\n\r\n\t\t<ng-template #menuItemContent let-menuItem=\"menuItem\">\r\n\t\t\t<a *ngIf=\"menuItem.routerLinkActiveOptions !== undefined\" [routerLink]=\"menuItem.routerLink\" [routerLinkActive]=\"'active'\" [routerLinkActiveOptions]=\"menuItem.routerLinkActiveOptions\" class=\"cf-menu-item\">\r\n\t\t\t\t<span *ngIf=\"menuItem.icon !== undefined\" class=\"remixicon cf-mr-2\" [ngClass]=\"menuItem.icon\"></span>\r\n\t\t\t\t<img *ngIf=\"menuItem.iconUrl !== undefined\" class=\"cf-menu-item-img cf-mr-2\" [src]=\"menuItem.iconUrl\" />\r\n\t\t\t\t<span>{{menuItem.title}}</span>\r\n\t\t\t</a>\r\n\r\n\t\t\t<a *ngIf=\"menuItem.routerLinkActiveOptions === undefined\" [routerLink]=\"menuItem.routerLink\" [routerLinkActive]=\"'active'\" class=\"cf-menu-item\">\r\n\t\t\t\t<span *ngIf=\"menuItem.icon !== undefined\" class=\"remixicon cf-mr-2\" [ngClass]=\"menuItem.icon\"></span>\r\n\t\t\t\t<img *ngIf=\"menuItem.iconUrl !== undefined\" class=\"cf-menu-item-img cf-mr-2\" [src]=\"menuItem.iconUrl\" />\r\n\t\t\t\t<span>{{menuItem.title}}</span>\r\n\t\t\t</a>\r\n\t\t\t\r\n\t\t\t<ng-container *ngIf=\"menuItem.children && menuItem.children.length > 0\">\r\n\t\t\t\t<ng-container *ngFor=\"let subMenuItem of menuItem.children\">\r\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"menuItemContent\" [ngTemplateOutletContext]=\"{menuItem: subMenuItem}\"></ng-container>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\t\t</ng-template>\r\n\r\n\t`,\r\n\thost: {\r\n\t\tclass: 'cf-menu'\r\n\t}\r\n})\r\nexport class MenuComponent {\r\n\r\n\tpermissionsService: CfPermissionsService = inject(CfPermissionsService);\r\n\r\n\t@Input() menuItems: MenuItem[] = [];\r\n\t@Input() width: string = '200px';\r\n\t@Input() @HostBinding('class') classes: string = '';\r\n\r\n\t@HostBinding('style') get hostStyle(): any {\r\n\t\treturn {\r\n\t\t\t'width': this.width,\r\n\t\t\t'flex': '0 0 ' + this.width\r\n\t\t}\r\n\t}\r\n\r\n\tget filteredMenuItems(): MenuItem[] {\r\n\t\treturn filterMenuItems(this.menuItems, this.permissionsService);\r\n\t}\r\n}\r\n","import { Component, HostBinding, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n\tselector: 'cf-sidebar',\r\n\tstandalone: true,\r\n\ttemplate: `\r\n\t\t<ng-content></ng-content>\r\n\t`,\r\n\thost: {\r\n\t\tclass: 'cf-sidebar'\r\n\t}\r\n})\r\nexport class SidebarComponent {\r\n\t@Input() width: string = '200px';\r\n\t@Input() @HostBinding('class') classes: string = '';\r\n\r\n\t@HostBinding('style') get hostStyle(): any {\r\n\t\treturn {\r\n\t\t\t'width': this.width,\r\n\t\t\t'flex': '0 0 ' + this.width\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component } from \"@angular/core\";\r\n\r\n@Component({\r\n\tselector: 'cf-lock',\r\n\tstandalone: true,\r\n\ttemplate: `\r\n\t\t<div class=\"cf-flex cf-flex-justify-content-center cf-text-color-white cf-background-color-danger cf-p-3 cf-text-bold\"><ng-content></ng-content></div>\r\n\t`,\r\n\thost: {\r\n\t\tclass: 'cf-lock'\r\n\t}\r\n})\r\nexport class LockComponent {}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { Component, ContentChildren, DestroyRef, Input, QueryList, TemplateRef, inject } from \"@angular/core\";\r\nimport { MenuItem } from \"../../../interfaces\";\r\nimport { CfTemplate } from \"../../../shared/directives\";\r\nimport { FooterComponent } from \"../footer/footer.component\";\r\nimport { HeaderComponent } from \"../header/header.component\";\r\nimport { MenuComponent } from \"../menu/menu.component\";\r\nimport { SidebarComponent } from \"../sidebar/sidebar.component\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { LockComponent } from \"../lock/lock.component\";\r\n\r\n@Component({\r\n\tselector: 'cf-fullpage',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tHeaderComponent,\r\n\t\tMenuComponent,\r\n\t\tSidebarComponent,\r\n\t\tFooterComponent,\r\n        LockComponent\r\n\t],\r\n\ttemplate: `\r\n\r\n\t\t<!-- HEADER -->\r\n\t\t<cf-header *ngIf=\"headerTemplate\" [height]=\"headerHeight\" [classes]=\"headerClasses\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n\t\t</cf-header>\r\n\r\n        <cf-lock *ngIf=\"lockTemplate !== null\">\r\n            <ng-container *ngTemplateOutlet=\"lockTemplate\"></ng-container>\r\n        </cf-lock>\r\n\r\n\t\t<!-- CONTENT -->\r\n\t\t<div class=\"cf-flex cf-flex-grow cf-min-height-0\">\r\n\r\n\t\t\t<!-- MENU -->\r\n\t\t\t<ng-container *ngIf=\"menuTemplate !== null\" [ngTemplateOutlet]=\"menuTemplate\"></ng-container>\r\n\t\t\t<cf-menu *ngIf=\"menuTemplate === null && menuItems.length > 0\" [width]=\"menuWidth\" [menuItems]=\"menuItems\" [classes]=\"menuClasses\"></cf-menu>\r\n\t\t\t\r\n\t\t\t<!-- LEFT SIDEBAR -->\r\n\t\t\t<cf-sidebar *ngIf=\"leftSidebarTemplate !== null\" [width]=\"leftSidebarWidth\" [classes]=\"leftSidebarClasses\">\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"leftSidebarTemplate\"></ng-container>\r\n\t\t\t</cf-sidebar>\r\n\r\n\t\t\t<div class=\"cf-flex-grow cf-overflow-y-auto\" [ngClass]=\"contentClasses\">\r\n\t\t\t\t<ng-content></ng-content>\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- RIGHT SIDEBAR -->\r\n\t\t\t<cf-sidebar *ngIf=\"rightSidebarTemplate !== null\" [width]=\"rightSidebarWidth\" [classes]=\"rightSidebarClasses\">\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"rightSidebarTemplate\"></ng-container>\r\n\t\t\t</cf-sidebar>\r\n\t\t</div>\r\n\r\n\t\t<!-- FOOTER -->\r\n\t\t<cf-footer *ngIf=\"footerTemplate !== null\" [height]=\"footerHeight\" [classes]=\"footerClasses\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n\t\t</cf-footer>\r\n\t`,\r\n\thost: {\r\n\t\tclass: 'cf-fullpage cf-fullpage-flex'\r\n\t}\r\n})\r\nexport class FullPageComponent {\r\n\r\n\tdestroyRef: DestroyRef = inject(DestroyRef);\r\n\r\n\t// MENU\r\n\t@Input() menuItems: MenuItem[] = [];\r\n\t@Input() menuWidth: string = '200px';\r\n\t@Input() menuClasses: string = '';\r\n\r\n\t// HEADER\r\n\t@Input() headerHeight: string = '80px';\r\n\t@Input() headerClasses: string = '';\r\n\r\n\t// LEFT SIDEBAR\r\n\t@Input() leftSidebarWidth: string = '200px';\r\n\t@Input() leftSidebarClasses: string = '';\r\n\r\n\t// RIGHT SIDEBAR\r\n\t@Input() rightSidebarWidth: string = '200px';\r\n\t@Input() rightSidebarClasses: string = '';\r\n\r\n\t// FOOTER\r\n\t@Input() footerHeight: string = '80px';\r\n\t@Input() footerClasses: string = '';\r\n\r\n\t// CONTENT\r\n\t@Input() contentClasses: string = '';\r\n\t\r\n\t@ContentChildren(CfTemplate) templates: QueryList<CfTemplate> = new QueryList();\r\n\r\n\theaderTemplate: TemplateRef<any> | null = null;\r\n\tlockTemplate: TemplateRef<any> | null = null;\r\n\tmenuTemplate: TemplateRef<any> | null = null;\r\n\tfooterTemplate: TemplateRef<any> | null = null;\r\n\tleftSidebarTemplate: TemplateRef<any> | null = null;\r\n\trightSidebarTemplate: TemplateRef<any> | null = null;\r\n\r\n\tupdateTemplates(): void {\r\n\t\tthis.headerTemplate = null;\r\n        this.lockTemplate = null;\r\n\t\tthis.menuTemplate = null;\r\n\t\tthis.footerTemplate = null;\r\n\t\tthis.leftSidebarTemplate = null;\r\n\t\tthis.rightSidebarTemplate = null;\r\n\r\n\t\tthis.templates.forEach((cfTemplate: CfTemplate) => {\r\n\t\t\tconst name: string | null = cfTemplate.getName();\r\n\t\t\tswitch (name) {\r\n\t\t\t\tcase 'header': this.headerTemplate = cfTemplate.template; break;\r\n                case 'lock': this.lockTemplate = cfTemplate.template; break;\r\n\t\t\t\tcase 'menu': this.menuTemplate = cfTemplate.template; break;\r\n\t\t\t\tcase 'footer': this.footerTemplate = cfTemplate.template; break;\r\n\t\t\t\tcase 'left-sidebar': this.leftSidebarTemplate = cfTemplate.template; break;\r\n\t\t\t\tcase 'right-sidebar': this.rightSidebarTemplate = cfTemplate.template; break;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tthis.updateTemplates();\r\n\t\tthis.templates.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n\t\t\tthis.updateTemplates();\r\n\t\t});\r\n\t}\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, HostBinding, Input, OnChanges, QueryList, TemplateRef } from \"@angular/core\";\r\nimport { CfTemplate } from \"../../shared/directives\";\r\n\r\n@Component({\r\n\tselector: 'cf-fieldset',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\ttemplate: `\r\n\t\t<fieldset [ngClass]=\"fieldsetClasses\">\r\n\t\t\t<legend *ngIf=\"title !== null\" class=\"cf-text-left\" [ngClass]=\"legendClasses\"><span class=\"cf-fieldset-title\">{{title}}</span></legend>\r\n\t\t\t<legend *ngIf=\"legendTemplate !== null\">\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"legendTemplate\"></ng-container>\r\n\t\t\t</legend>\r\n\t\t\t<ng-content></ng-content>\r\n\t\t</fieldset>\r\n\t`,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FieldsetComponent implements OnChanges, AfterContentInit {\r\n\r\n\t@Input() title: string | null = null;\r\n\t@Input() @HostBinding('class') classes: string = '';\r\n\t@Input() fieldsetClasses: string = '';\r\n\t@Input() legendClasses: string = '';\r\n\t\r\n\t@ContentChildren(CfTemplate) templates: QueryList<CfTemplate> = new QueryList();\r\n\r\n\tlegendTemplate: TemplateRef<any> | null = null;\r\n\r\n\tpublic detectChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tthis.templates.forEach((cfTemplate: CfTemplate) => {\r\n\t\t\tconst name: string | null = cfTemplate.getName();\r\n\t\t\tswitch (name) {\r\n\t\t\t\tcase 'legend': this.legendTemplate = cfTemplate.template; break;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate cdr: ChangeDetectorRef\r\n\t) {\r\n\t\tthis.cdr.detach();\r\n\t}\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { Component, ElementRef, EventEmitter, forwardRef, inject, Input, OnChanges, OnInit, Output, ViewChild } from \"@angular/core\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { ReadonlyDirective } from \"../../shared\";\r\n\r\n@Component({\r\n\tselector: 'cf-inputtextarea',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => InputTextareaComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n\ttemplate: `\r\n        <div class=\"cf-floating-label-container\">\r\n            <textarea\r\n                #textarea\r\n                [disabled]=\"isDisabled\"\r\n                [readonly]=\"isReadonly\"\r\n                [ngClass]=\"{'cf-filled': value !== undefined && value !== null && value !== '', 'readonly': readonly}\"\r\n                [ngStyle]=\"{\r\n                    'height': height,\r\n                    'resize': resize,\r\n\t\t\t\t\t'min-height': minHeight\r\n                }\"\r\n                (focus)=\"focusFromInput($event)\"\r\n                (blur)=\"blur($event)\"\r\n                (change)=\"change()\"\r\n                (keyup)=\"keyup($event)\"\r\n                (keydown)=\"keydown($event)\"\r\n                [value]=\"value\"\r\n                class=\"cf-input-container-default-input\"\r\n            ></textarea>\r\n            <label class=\"cf-floating-label\" [ngClass]=\"{'float': focused || value !== ''}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n        </div>\r\n\t`,\r\n    host: {\r\n        class: 'cf-input-container cf-input-container-auto-height cf-inputtextarea'\r\n    }\r\n})\r\nexport class InputTextareaComponent extends FormItem implements OnChanges, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n    @Input() value: string = '';\r\n\t@Input() height: string = 'auto';\r\n\t@Input() minHeight: string = 'auto';\r\n    @Input() resize: string = 'none';\r\n    @Input() changeOnKeyup: boolean = true;\r\n\r\n    @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter();\r\n    @Output() onBlur: EventEmitter<FocusEvent> = new EventEmitter();\r\n    @Output() onChanged: EventEmitter<string | null> = new EventEmitter();\r\n\t@Output() onKeydown: EventEmitter<KeyboardEvent> = new EventEmitter();\r\n\r\n\t@ViewChild('textarea') textarea: ElementRef<HTMLTextAreaElement> | undefined = undefined;\r\n\r\n\toverride enterAsTabType: string = 'inputtextarea';\r\n\r\n    override writeValue(value: string | null): void {\r\n        this.value = value;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    focusFromInput(event: FocusEvent): void {\r\n        if (this.isReadonly || this.isDisabled) {\r\n            return;\r\n        }\r\n        this.onFocus.emit(event);\r\n        this.focused = true;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.textarea !== undefined) {\r\n\t\t\tthis.textarea.nativeElement.focus();\r\n\t\t}\r\n\t}\r\n\r\n    blur(event: FocusEvent): void {\r\n        this.onBlur.emit(event);\r\n        this.focused = false;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    keyup(event: KeyboardEvent): void {\r\n        this.onKeyup.emit(event);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n        if (\r\n            this.changeOnKeyup &&\r\n            this.textarea !== undefined &&\r\n            this.value !== this.textarea.nativeElement.value\r\n        ) {\r\n            this.change();\r\n        }\r\n    }\r\n\r\n\tkeydown(event: KeyboardEvent): void {\r\n\t\tthis.onKeydown.emit(event);\r\n\t}\r\n\r\n\tchange(): void {\r\n\t\tif (this.textarea === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst value: string = this.textarea.nativeElement.value;\r\n        this.value = value;\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(value);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tthis.onChanged.emit(value);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n    ngOnInit(): void {\r\n        this.setControlComponent();\r\n    }\r\n}\r\n","import { ListboxFilterFunction } from \"./listbox.interfaces\";\r\n\r\nexport const LISTBOX_FILTER_FUNCTION_CONTAINS: ListboxFilterFunction = (label: any, query: string) => {\r\n\tif (typeof label === 'string') {\r\n\t\treturn label.toLowerCase().includes(query.toLowerCase());\r\n\t}\r\n\treturn false;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, forwardRef, HostBinding, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ReadonlyDirective, convertValues, isOuter, selectIndexMinMax } from '../../shared';\r\nimport { FormItem } from '../../shared/classes/formitem.class';\r\nimport { InputTextComponent } from '../inputtext/inputtext.component';\r\nimport { LISTBOX_FILTER_FUNCTION_CONTAINS } from './listbox.const';\r\nimport { ListboxFilterFunction } from './listbox.interfaces';\r\n\r\n@Component({\r\n    selector: 'cf-listbox',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tInputTextComponent,\r\n\t\tFormsModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => ListboxComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n    template: `\r\n        <input class=\"cf-hidden-input\" #hiddenInput (keypress)=\"keypress($event)\" (focus)=\"focusFromHiddenInput()\" (blur)=\"blur()\" />\r\n        <div class=\"cf-floating-label-container\" [ngClass]=\"{'cf-pt-2': label !== null}\">\r\n            <div class=\"cf-flex cf-p-2 cf-pt-0 cf-flex-column cf-fill-width\">\r\n                <div class=\"listbox-item-search cf-p-3 cf-pb-0\" *ngIf=\"filter\">\r\n                    <cf-inputtext [(ngModel)]=\"query\" (ngModelChange)=\"filterValues()\" (onKeypress)=\"keypress($event)\" [disabled]=\"disabled\" [readonly]=\"readonly\"></cf-inputtext>\r\n                </div>\r\n                <div #listBoxItemsContainer class=\"cf-listbox-items-container cf-flex-grow cf-overflow-y-auto\">\r\n                    <div class=\"cf-listbox-item cf-flex cf-ai-center cf-p-1\"\r\n                        *ngFor=\"let filteredValue of filteredValues; let i = index;\"\r\n                        [ngClass]=\"{\r\n                            'cf-listbox-item-selected': filteredValue.selected,\r\n                            'cf-listbox-item-hovered': selectedItemIndex === i,\r\n                            'cf-listbox-item-disabled': filteredValue.value.disabled,\r\n\t\t\t\t\t\t\t'cf-listbox-item-has-checkbox': checkbox\r\n                        }\"\r\n                        (click)=\"valueClicked(filteredValue.value, i)\"\r\n                    >\r\n                        <div class=\"cf-checkbox\">\r\n                            <span class=\"cf-check\" [ngClass]=\"{'checked': filteredValue.selected}\" (click)=\"toggleValue(filteredValue)\">\r\n                                <span class=\"remixicon check-fill\" *ngIf=\"filteredValue.selected\"></span>\r\n                            </span>\r\n                            <span class=\"cf-checkbox-label\">{{filteredValue.value[labelId]}}</span>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <span class=\"cf-floating-label float\" *ngIf=\"label !== null\">{{label}}</span>\r\n        </div>\r\n    `,\r\n    styleUrls: ['./listbox.component.scss'],\r\n    host: {\r\n        class: 'cf-input-container cf-listbox'\r\n    }\r\n})\r\nexport class ListboxComponent extends FormItem implements OnChanges, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n    @ViewChild('hiddenInput') hiddenInput: ElementRef<HTMLInputElement> | undefined = undefined;\r\n    @ViewChild('listBoxItemsContainer') listBoxItemsContainer: ElementRef<HTMLDivElement> | undefined = undefined;\r\n\r\n    @Input() values: any[] = [];\r\n    @Input() multiple: boolean = true;\r\n    @Input() checkbox: boolean = true;\r\n    @Input() icon: string = 'check-fill';\r\n    @Input() filter: boolean = false;\r\n    @Input() labelId: string = 'label';\r\n    @Input() valueId: string = 'value';\r\n    @Input() filterFunction: ListboxFilterFunction = LISTBOX_FILTER_FUNCTION_CONTAINS;\r\n    @Input() @HostBinding('style.height') height: string = '100%';\r\n\t@Input() scrollIntoViewOptions: ScrollIntoViewOptions | boolean = {\r\n\t\tbehavior: 'auto',\r\n\t\tblock: 'center',\r\n\t\tinline: 'center'\r\n\t};\r\n\r\n    @Output() onChanged: EventEmitter<any> = new EventEmitter();\r\n\r\n\toverride enterAsTabType: string = 'listbox';\r\n\r\n    public filteredValues: { value: any, selected: boolean }[] = [];\r\n    public query = '';\r\n    \r\n    private selectedValues: any[] = [];\r\n\r\n    public selectedItemIndex: number | null = null;\r\n\r\n    documentClickEventListener: ((event: MouseEvent) => void) | null = null;\r\n\r\n    public get selectedItem(): any {\r\n        return this.selectedItemIndex !== null ? this.filteredValues[this.selectedItemIndex] : null;\r\n    }\r\n\r\n    toggleValue(filteredValue: { value: any, selected: boolean }): void {\r\n        if (this.isDisabled || this.isReadonly) {\r\n            return;\r\n        }\r\n        filteredValue.selected = !filteredValue.selected;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    selectItemIndex(selectedItemIndex: number | null, scrollIntoView: boolean = false): void {\r\n        this.selectedItemIndex = selectedItemIndex;\r\n        if (\r\n            scrollIntoView &&\r\n            this.selectedItemIndex !== null &&\r\n            this.listBoxItemsContainer !== undefined &&\r\n            this.listBoxItemsContainer.nativeElement.children[this.selectedItemIndex] !== undefined\r\n        ) {\r\n            this.listBoxItemsContainer.nativeElement.children[this.selectedItemIndex].scrollIntoView(this.scrollIntoViewOptions);\r\n        }\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    valueClicked(value: any, index: number): void {\r\n        if (this.isValueDisabled(value) || this.isDisabled || this.isReadonly) {\r\n            return;\r\n        }\r\n        this.focus();\r\n        this.selectItemIndex(index);\r\n        this.selectValue(value);\r\n    }\r\n\r\n    private isValueDisabled(value: any): boolean {\r\n        return this.isDisabled || this.isReadonly || (value.disabled !== undefined && value.disabled === true);\r\n    }\r\n\r\n    private selectValue(value: any): void {\r\n        \r\n        if (this.isValueDisabled(value)) {\r\n            return;\r\n        }\r\n\r\n        if (this.multiple) {\r\n            if (!this.selectedValues.includes(value[this.valueId])) {   \r\n                this.selectedValues.push(value[this.valueId]);\r\n            } else {\r\n                this.selectedValues = this.selectedValues.filter((v: any) => v !== value[this.valueId]);\r\n                this.selectItemIndex(null);\r\n            }\r\n        } else {\r\n            this.selectedValues = [value[this.valueId]];\r\n        }\r\n\r\n        this.updateSelectedStates();\r\n\r\n        const selectedValues: any = this.multiple ? this.selectedValues : this.selectedValues[0];\r\n\r\n        if (this.onChangeFn !== null) {\r\n            this.onChangeFn(selectedValues);\r\n        }\r\n        if (this.onTouchedFn !== null) {\r\n            this.onTouchedFn();\r\n        }\r\n        this.onChanged.emit(selectedValues);\r\n    }\r\n\r\n    keypress(event: KeyboardEvent): void {\r\n        if (event.key.toLowerCase() === 'arrowdown') {\r\n\t\t\tif (this.selectedItemIndex !== null) {\r\n\t\t\t\tthis.selectItemIndex(selectIndexMinMax(this.selectedItemIndex, 'down', this.filteredValues.length - 1), true);\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t}\r\n        }\r\n        if (event.key.toLowerCase() === 'arrowup') {\r\n\t\t\tif (this.selectedItemIndex !== null) {\r\n\t\t\t\tthis.selectItemIndex(selectIndexMinMax(this.selectedItemIndex, 'up', this.filteredValues.length - 1), true);\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t}\r\n        }\r\n        if (event.key.toLowerCase() === 'enter' || event.code.toLowerCase() === 'space') {\r\n            if (this.selectedItemIndex !== null && this.selectedItemIndex < this.filteredValues.length) {\r\n                this.selectValue(this.filteredValues[this.selectedItemIndex].value);\r\n            }\r\n        }\r\n    }\r\n\r\n    focusFromHiddenInput(): void {\r\n        if (this.focused) {\r\n            return;\r\n        }\r\n        this.focused = true;\r\n    }\r\n\r\n    override focus(): void {\r\n        if (this.hiddenInput !== undefined) {\r\n            this.hiddenInput.nativeElement.focus();\r\n        }\r\n        this.bindDocumentClickListener();\r\n    }\r\n\r\n    blur(): void {\r\n        this.focused = false;\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.blur();\r\n\t\t}\r\n        this.selectItemIndex(null);\r\n        this.unbindDocumentClickListener();\r\n    }\r\n\r\n    override writeValue(value: any): void {\r\n        if (value instanceof Array) {\r\n            this.selectedValues = [...value];\r\n        } else {\r\n            this.selectedValues = [value];\r\n        }\r\n        this.updateSelectedStates();\r\n    }\r\n\r\n    filterValues(): void {\r\n\r\n        let filteredValues: any[] = [];\r\n\r\n        if (this.query.length === 0) {\r\n            filteredValues = [...this.values];\r\n        } else {\r\n            filteredValues = this.values.filter((value: any) => this.filterFunction(value[this.labelId], this.query));\r\n        }\r\n\r\n        this.filteredValues = filteredValues.map((value) => ({\r\n            selected: false,\r\n            value\r\n        }));\r\n\r\n        this.updateSelectedStates();\r\n    }\r\n\r\n    updateSelectedStates(): void {\r\n        this.filteredValues.forEach((filteredValue) => {\r\n            filteredValue.selected = this.selectedValues.includes(filteredValue.value[this.valueId]);\r\n        });\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    convertValues(): void {\r\n        this.values = convertValues(this.values);\r\n        this.filterValues();\r\n    }\r\n\r\n    bindDocumentClickListener(): void {\r\n        if (this.documentClickEventListener !== null) {\r\n            return;\r\n        }\r\n        this.documentClickEventListener = this.documentClicked.bind(this);\r\n        document.addEventListener('click', this.documentClickEventListener);\r\n    }\r\n\r\n    unbindDocumentClickListener(): void {\r\n        if (this.documentClickEventListener === null) {\r\n            return;\r\n        }\r\n        document.removeEventListener('click', this.documentClickEventListener);\r\n        this.documentClickEventListener = null;\r\n    }\r\n\r\n    documentClicked(event: MouseEvent): void {\r\n        if (isOuter([this.element.nativeElement], event)) {\r\n            this.blur();\r\n        }\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['values'] !== undefined) {\r\n            this.convertValues();\r\n        }\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.setControlComponent();\r\n    }\r\n}\r\n","import { Observable, Subject } from \"rxjs\";\r\nimport { ConfirmConfiguration, MultiLangData } from \"../../interfaces\";\r\nimport { MediaManagerComponent, MediaManagerError } from \"./mediamanager.component\";\r\n\r\nexport enum MediaManagerMediaType {\r\n\tIMAGE = 'IMAGE',\r\n\tVIDEO = 'VIDEO',\r\n\tAUDIO = 'AUDIO',\r\n\tPDF = 'PDF',\r\n\tOTHER = 'OTHER'\r\n}\r\n\r\nexport type ModuleOptionsLoaderFunction = (configuration: MediaManagerFullConfiguration) => Observable<MediaManager>;\r\n\r\nexport enum MediaManagerThumbnail {\r\n\tNONE = 'NONE',\r\n\tSINGLE = 'SINGLE',\r\n\tMULTIPLE = 'MULTIPLE'\r\n}\r\nexport enum MediaManagerThumbnailStatus {\r\n\tWAITING = 'WAITING',\r\n\tDONE = 'DONE',\r\n\tERROR = 'ERROR'\r\n}\r\n\r\nexport interface MediaManagerMedia {\r\n    guid: string;\r\n\textension: string;\r\n\toriginalFileName: string;\r\n\tuserId: number | null;\r\n\tuserFullname: string | null;\r\n\tuploadDate: string | Date;\r\n    mediaType: MediaManagerMediaType;\r\n\tmimeType: string;\r\n\twidth: number | null;\r\n\theight: number | null;\r\n\tduration: number | null;\r\n\tfileSize: number;\r\n    public: boolean;\r\n    title: MultiLangData;\r\n    tags: MultiLangData;\r\n    source: string;\r\n\tthumbnail: MediaManagerThumbnailStatus;\r\n\tupdatedAt: string | Date;\r\n    originalFileUrl: string;\r\n    thumbnailUrls: string[];\r\n    touched: boolean;\r\n    delete: boolean;\r\n\tfile?: File | null;\r\n}\r\n\r\nexport type MediaFiles = MediaManagerMedia[];\r\n\r\nexport interface MediaManagerOptions {\r\n\textension: string;\r\n    maxFileSize: number | null;\r\n    minWidth: number | null;\r\n    maxWidth: number | null;\r\n    minHeight: number | null;\r\n    maxHeight: number | null;\r\n    minDuration: number | null;\r\n    maxDuration: number | null;\r\n    ratio: MediaManagerRatio | null;\r\n    compressImage: boolean;\r\n    thumbnail: MediaManagerThumbnail;\r\n\tthumbnailSize: number;\r\n}\r\n\r\nexport interface MediaManagerRatio {\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\nexport interface MediaManager {\r\n    module: string;\r\n    allowedMimeTypes: string[];\r\n\tallowedExtensions: string[];\r\n    maxFileCount: number | null;\r\n\ttotalFileSize: number | null;\r\n    tokenRequestedToDownload: boolean;\r\n    permissionToDownload: string;\r\n    options: {[key: string]: MediaManagerOptions};\r\n}\r\n\r\nexport type MediaManagerConfiguration = Partial<MediaManagerFullConfiguration> & ({module: string} | {mediaManager: MediaManager});\r\n\r\nexport interface MediaManagerFullConfiguration {\r\n\tmodule: string | null;\r\n\tmediaManager: MediaManager | null;\r\n\tmoduleOptionsLoader: ModuleOptionsLoaderFunction | null;\r\n\twidth: string;\r\n\theight: string;\r\n\tvideoMetadataLoadMaxWaitTime: number;\r\n\taudioMetadataLoadMaxWaitTime: number;\r\n\tdisplayStyle: 'list' | 'grid' | 'single';\r\n\tchangeStyleButtonVisible: boolean;\r\n\terrorDisplayMode: 'message' | 'dialog' | 'inner';\r\n\terrorHandleMethod: 'stopatfirst' | 'skip' | 'stop';\r\n\tdisabled: boolean;\r\n\tlanguages: string[];\r\n\tlanguage: string;\r\n\tgridTemplateMinSize: string;\r\n\tgridTemplateMaxSize: string;\r\n\tautoPlayInPreview: boolean;\r\n\tdeletable: boolean | ((params: MediaManagerDeleteCallbackParams) => boolean);\r\n\tdeleteCallback: ((params: MediaManagerDeleteCallbackParams) => boolean | Subject<boolean> | Observable<boolean>) | null;\r\n\tdeleteConfirm: boolean;\r\n\tdeleteConfirmConfiguration: ConfirmConfiguration | null;\r\n\tshowBorder: boolean;\r\n\tdropFilesAllowed: boolean;\r\n    httpParams: {[key: string]: string | number | boolean} | null;\r\n\tconditionalClasses: ((params: MediaManagerConfigurationConditionalClassesParams) => string[]) | string[] | null;\r\n}\r\n\r\nexport type MediaManagerConfigurationConditionalClassesParams = {\r\n\tmediaManager: MediaManagerComponent;\r\n\tmedia: MediaManagerMedia;\r\n\tmode: 'list' | 'grid';\r\n\tindex: number;\r\n}\r\n\r\nexport type MediaManagerDeleteCallbackParams = {\r\n\tmediaManagerComponent: MediaManagerComponent,\r\n\tmediaManagerMedia: MediaManagerMedia\r\n}\r\n\r\nexport type MediaUploadErros = {[key: string]: string};\r\n\r\nexport enum MediaManagerErrorType {\r\n\tINVALID_CONFIGURATION = 'INVALID_CONFIGURATION',\r\n\tEMPTY_FILE_LIST = 'EMPTY_FILE_LIST',\r\n\tTYPE_NOT_SUPPORTED = 'TYPE_NOT_SUPPORTED',\r\n\tNO_OPTIONS_FOUND = 'NO_OPTIONS_FOUND',\r\n\tMAX_FILE_SIZE_EXCEEDED = 'MAX_FILE_SIZE_EXCEEDED',\r\n\tMAX_FILE_SIZE_GLOBAL_EXCEEDED = 'MAX_FILE_SIZE_GLOBAL_EXCEEDED',\r\n\tMAX_FILE_COUNT_EXCEEDED = 'MAX_FILE_COUNT_EXCEEDED',\r\n\tVIDEO_INFO_CANNOT_BE_LOADED = 'VIDEO_INFO_CANNOT_BE_LOADED',\r\n\tIMAGE_INFO_CANNOT_BE_LOADED = 'IMAGE_INFO_CANNOT_BE_LOADED',\r\n\tAUDIO_INFO_CANNOT_BE_LOADED = 'AUDIO_INFO_CANNOT_BE_LOADED',\r\n\tVIDEO_DURATION_TOO_LONG = 'VIDEO_DURATION_TOO_LONG',\r\n\tVIDEO_DURATION_TOO_SHORT = 'VIDEO_DURATION_TOO_SHORT',\r\n\tAUDIO_DURATION_TOO_LONG = 'AUDIO_DURATION_TOO_LONG',\r\n\tAUDIO_DURATION_TOO_SHORT = 'AUDIO_DURATION_TOO_SHORT',\r\n\tMEDIA_RATIO_NOT_EXPECTED = 'MEDIA_RATIO_NOT_EXPECTED',\r\n\tMEDIA_WIDTH_TOO_WIDE = 'MEDIA_WIDTH_TOO_WIDE',\r\n\tMEDIA_WIDTH_TOO_THIN = 'MEDIA_WIDTH_TOO_THIN',\r\n\tMEDIA_HEIGHT_TOO_TALL = 'MEDIA_HEIGHT_TOO_TALL',\r\n\tMEDIA_HEIGHT_TOO_LOW = 'MEDIA_HEIGHT_TOO_LOW',\r\n\tINVALID_MEDIA_DIMENSIONS_WIDTH = 'INVALID_MEDIA_DIMENSIONS_WIDTH',\r\n\tINVALID_MEDIA_DIMENSIONS_HEIGHT = 'INVALID_MEDIA_DIMENSIONS_HEIGHT',\r\n\tINVALID_MEDIA_DIMENSIONS_DURATION = 'INVALID_MEDIA_DIMENSIONS_DURATION',\r\n\tNOTHING_TO_UPLOAD = 'NOTHING_TO_UPLOAD',\r\n\tERROR_NOT_SET = 'ERROR_NOT_SET'\r\n}\r\n\r\nexport interface MediaManagerValidateFileResult {\r\n\tfile: File;\r\n\terror: MediaManagerError | null;\r\n\tmediaType: MediaManagerMediaType | null;\r\n\tmediaInfo: MediaManagerMediaInfo | null;\r\n}\r\n\r\nexport interface MediaManagerMediaInfo {\r\n\twidth: number | null;\r\n\theight: number | null;\r\n\tduration: number | null;\r\n}\r\n\r\nexport interface MediaManagerMediaAddProgress {\r\n\ttotal: number;\r\n\terror: number;\r\n}\r\n","import { MediaManagerFullConfiguration, MediaManagerMediaType } from \"./mediamanager.interfaces\";\r\n\r\nexport const MEDIA_TYPES: Map<MediaManagerMediaType, string[]> = new Map();\r\nMEDIA_TYPES.set(MediaManagerMediaType.AUDIO, [\"audio/ogg\", \"audio/mpeg\", \"audio/flac\", \"audio/wav\"]);\r\nMEDIA_TYPES.set(MediaManagerMediaType.IMAGE, [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/bmp\", \"image/webp\", \"image/tiff\"]);\r\nMEDIA_TYPES.set(MediaManagerMediaType.PDF, [\"application/pdf\"]);\r\nMEDIA_TYPES.set(MediaManagerMediaType.VIDEO, [\"video/mp4\", \"video/webm\", \"video/ogg\", \"video/x-msvideo\", \"video/msvideo\", \"video/x-matroska\", \"video/avi\", \"video/mpeg\", \"video/quicktime\"]);\r\n\r\nexport const MEDIA_MANAGER_DEFAULT_CONFIGURATION: MediaManagerFullConfiguration = {\r\n\tmodule: null,\r\n\tmediaManager: null,\r\n\tmoduleOptionsLoader: null,\r\n\twidth: 'auto',\r\n\theight: 'auto',\r\n\tvideoMetadataLoadMaxWaitTime: 5000,\r\n\taudioMetadataLoadMaxWaitTime: 1000,\r\n\tdisplayStyle: 'grid',\r\n\tchangeStyleButtonVisible: true,\r\n\terrorDisplayMode: 'dialog',\r\n\terrorHandleMethod: 'stopatfirst',\r\n\tdisabled: false,\r\n\tlanguages: ['hu'],\r\n\tlanguage: 'hu',\r\n\tgridTemplateMinSize: '130px',\r\n\tgridTemplateMaxSize: '200px',\r\n\tautoPlayInPreview: true,\r\n\tdeletable: true,\r\n\tdeleteCallback: null,\r\n\tdeleteConfirm: true,\r\n\tdeleteConfirmConfiguration: null,\r\n\tshowBorder: true,\r\n\tdropFilesAllowed: true,\r\n    httpParams: null,\r\n\tconditionalClasses: null\r\n}\r\n","import { fromEvent, map, race, timer } from \"rxjs\";\r\nimport { CfDialogService, onlyUnique } from \"../../shared\";\r\nimport { MediaManagerError, MediaManagerModalComponent } from \"./mediamanager.component\";\r\nimport { MEDIA_TYPES } from \"./mediamanager.const\";\r\nimport { MediaFiles, MediaManagerConfiguration, MediaManagerErrorType, MediaManagerFullConfiguration, MediaManagerMediaInfo, MediaManagerMediaType, MediaManagerOptions, MediaManagerValidateFileResult } from \"./mediamanager.interfaces\";\r\n\r\nexport function isObject(input: any): boolean {\r\n\treturn (typeof input === \"object\" && !Array.isArray(input) && input !== null);\r\n}\r\n\r\n/**\r\n * Open media manager modal with the given configuration\r\n * \r\n * @param dialogService CfDialogService\r\n * @param configuration `MediaManagerConfiguration`, but `width` and `height` is mandatory, modal will displayed in this size\r\n */\r\nexport function openMediaManagerModal(dialogService: CfDialogService, configuration: MediaManagerConfiguration & {width: string, height: string}, mediaFiles: MediaFiles = []): void {\r\n\tdialogService.open(MediaManagerModalComponent, {\r\n\t\tdata: {\r\n\t\t\tconfiguration,\r\n\t\t\tmediaFiles\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Load media info depending on the `File` and `MediaType`\r\n * \r\n * @param file File\r\n * @param mediaType `MediaType`\r\n * @returns \r\n */\r\nexport function mediaManagerLoadMediaInfo(file: File, mediaType: MediaManagerMediaType, mediaManagerConfiguration: MediaManagerFullConfiguration): Promise<MediaManagerMediaInfo | null> {\r\n\r\n\tif (mediaType === MediaManagerMediaType.IMAGE) {\r\n\t\treturn new Promise<MediaManagerMediaInfo | null>((resolve) => {\r\n\t\t\tconst fileReader: FileReader = new FileReader();\r\n\t\t\tfileReader.onloadend = () => {\r\n\t\t\t\tif (typeof fileReader.result === 'string') {\r\n\t\t\t\t\tconst image: HTMLImageElement = new Image();\r\n\t\t\t\t\timage.onload = () => {\r\n\t\t\t\t\t\tresolve({\r\n\t\t\t\t\t\t\twidth: image.width,\r\n\t\t\t\t\t\t\theight: image.height,\r\n\t\t\t\t\t\t\tduration: null\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\timage.onerror = () => {\r\n\t\t\t\t\t\tresolve(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t\timage.src = fileReader.result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfileReader.readAsDataURL(file);\r\n\t\t});\r\n\t}\r\n\r\n\tif (mediaType === MediaManagerMediaType.VIDEO) {\r\n\t\treturn new Promise<MediaManagerMediaInfo | null>((resolve) => {\r\n\t\t\tconst video: HTMLVideoElement = document.createElement('video');\r\n\t\t\tvideo.preload = 'metadata';\r\n\t\t\trace([\r\n\t\t\t\tfromEvent(video, 'loadedmetadata'),\r\n\t\t\t\ttimer(mediaManagerConfiguration.videoMetadataLoadMaxWaitTime).pipe(map(() => null))\r\n\t\t\t]).subscribe((result: Event | null) => {\r\n\t\t\t\tif (result !== null && !isNaN(video.duration)) {\r\n\t\t\t\t\tresolve({\r\n\t\t\t\t\t\twidth: video.videoWidth,\r\n\t\t\t\t\t\theight: video.videoHeight,\r\n\t\t\t\t\t\tduration: Math.round(video.duration)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tresolve(null);\r\n\t\t\t});\r\n\t\t\tvideo.src = URL.createObjectURL(file);\r\n\t\t});\r\n\t}\r\n\r\n\tif (mediaType === MediaManagerMediaType.AUDIO) {\r\n\t\treturn new Promise<MediaManagerMediaInfo | null>((resolve) => {\r\n\t\t\tconst audio: HTMLAudioElement = new Audio();\r\n\t\t\taudio.preload = 'metadata';\r\n\t\t\trace([\r\n\t\t\t\tfromEvent(audio, 'loadedmetadata'),\r\n\t\t\t\ttimer(mediaManagerConfiguration.audioMetadataLoadMaxWaitTime).pipe(map(() => null))\r\n\t\t\t]).subscribe((result: Event | null) => {\r\n\t\t\t\tif (result !== null && !isNaN(audio.duration)) {\r\n\t\t\t\t\tresolve({\r\n\t\t\t\t\t\twidth: null,\r\n\t\t\t\t\t\theight: null,\r\n\t\t\t\t\t\tduration: Math.round(audio.duration)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tresolve(null);\r\n\t\t\t});\r\n\t\t\taudio.src = URL.createObjectURL(file);\r\n\t\t});\r\n\t}\r\n\r\n\treturn new Promise<MediaManagerMediaInfo | null>((resolve) => resolve(null));\r\n}\r\n\r\n/**\r\n * \r\n * @param file File\r\n * @returns \r\n */\r\nexport async function mediaManagerValidateFile(file: File, mediaManagerConfiguration: MediaManagerFullConfiguration): Promise<MediaManagerValidateFileResult> {\r\n\r\n\tfunction respondWithError(error: MediaManagerError): MediaManagerValidateFileResult {\r\n\t\treturn {\r\n\t\t\terror,\r\n\t\t\tmediaInfo: null,\r\n\t\t\tmediaType: null,\r\n\t\t\tfile\r\n\t\t}\r\n\t}\r\n\r\n\tif (mediaManagerConfiguration.mediaManager === null) {\r\n\t\treturn respondWithError(new MediaManagerError(MediaManagerErrorType.INVALID_CONFIGURATION));\r\n\t}\r\n\r\n\t// Check type\r\n\tif (mediaManagerConfiguration.mediaManager.allowedMimeTypes.length > 0 && !mediaManagerConfiguration.mediaManager.allowedMimeTypes.includes(file.type)) {\r\n\t\treturn respondWithError(new MediaManagerError(MediaManagerErrorType.TYPE_NOT_SUPPORTED));\r\n\t}\r\n\r\n\t// Get options\r\n\tconst options: MediaManagerOptions | null = mediaManagerConfiguration.mediaManager.options[file.type] || mediaManagerConfiguration.mediaManager.options['*'] || null;\r\n\tif (options === null) {\r\n\t\treturn respondWithError(new MediaManagerError(MediaManagerErrorType.NO_OPTIONS_FOUND));\r\n\t}\r\n\r\n\t// Validate max file size\r\n\tif (options.maxFileSize !== null && file.size > options.maxFileSize) {\r\n\t\treturn respondWithError(new MediaManagerError(MediaManagerErrorType.MAX_FILE_SIZE_EXCEEDED));\r\n\t}\r\n\r\n\t// Check type\r\n\tlet mediaType: MediaManagerMediaType = MediaManagerMediaType.OTHER as MediaManagerMediaType;\r\n\tMEDIA_TYPES.forEach((types: string[], actualMediaType: MediaManagerMediaType) => {\r\n\t\tif (types.includes(file.type)) {\r\n\t\t\tmediaType = actualMediaType;\r\n\t\t}\r\n\t});\r\n\r\n\tlet mediaInfo: MediaManagerMediaInfo | null = null;\r\n\r\n\tif (mediaType === MediaManagerMediaType.IMAGE || mediaType === MediaManagerMediaType.VIDEO || mediaType === MediaManagerMediaType.AUDIO) {\r\n\t\tmediaInfo = await mediaManagerLoadMediaInfo(file, mediaType, mediaManagerConfiguration);\r\n\t\tif (mediaInfo === null) {\r\n\t\t\tif (mediaType === MediaManagerMediaType.IMAGE) {\r\n\t\t\t\treturn respondWithError(new MediaManagerError(MediaManagerErrorType.IMAGE_INFO_CANNOT_BE_LOADED));\r\n\t\t\t}\r\n\t\t\tif (mediaType === MediaManagerMediaType.VIDEO) {\r\n\t\t\t\treturn respondWithError(new MediaManagerError(MediaManagerErrorType.VIDEO_INFO_CANNOT_BE_LOADED));\r\n\t\t\t}\r\n\t\t\tif (mediaType === MediaManagerMediaType.AUDIO) {\r\n\t\t\t\treturn respondWithError(new MediaManagerError(MediaManagerErrorType.AUDIO_INFO_CANNOT_BE_LOADED));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst validateMediaInfoResult: MediaManagerError | null = validateMediaInfo(mediaInfo, mediaType, options);\r\n\t\t\tif (validateMediaInfoResult !== null) {\r\n\t\t\t\treturn respondWithError(validateMediaInfoResult);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\terror: null,\r\n\t\tmediaInfo,\r\n\t\tmediaType,\r\n\t\tfile\r\n\t};\r\n}\r\n\r\nexport function validateMediaInfo(mediaManagerMediaInfo: MediaManagerMediaInfo, mediaType: MediaManagerMediaType, options: MediaManagerOptions): MediaManagerError | null {\r\n\r\n\tif (mediaType === MediaManagerMediaType.IMAGE || mediaType === MediaManagerMediaType.VIDEO) {\r\n\r\n\t\tif (mediaManagerMediaInfo.width === null) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.INVALID_MEDIA_DIMENSIONS_WIDTH);\r\n\t\t}\r\n\r\n\t\tif (mediaManagerMediaInfo.height === null) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.INVALID_MEDIA_DIMENSIONS_HEIGHT);\r\n\t\t}\r\n\r\n\t\t// WIDTH\r\n\t\tif (options.minWidth !== null && mediaManagerMediaInfo.width < options.minWidth) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.MEDIA_WIDTH_TOO_THIN);\r\n\t\t}\r\n\t\tif (options.maxWidth !== null && mediaManagerMediaInfo.width > options.maxWidth) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.MEDIA_WIDTH_TOO_WIDE);\r\n\t\t}\r\n\r\n\t\t// HEIGHT\r\n\t\tif (options.minHeight !== null && mediaManagerMediaInfo.height < options.minHeight) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.MEDIA_HEIGHT_TOO_LOW);\r\n\t\t}\r\n\t\tif (options.maxHeight !== null && mediaManagerMediaInfo.height > options.maxHeight) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.MEDIA_HEIGHT_TOO_TALL);\r\n\t\t}\r\n\r\n\t\t// RATIO\r\n\t\tif (options.ratio !== null && (mediaManagerMediaInfo.width * options.ratio.height !== mediaManagerMediaInfo.height * options.ratio.width)) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.MEDIA_RATIO_NOT_EXPECTED);\r\n\t\t}\r\n\t}\r\n\r\n\t// DURATION\r\n\tif (mediaType === MediaManagerMediaType.AUDIO || mediaType === MediaManagerMediaType.VIDEO) {\r\n\r\n\t\tif (mediaManagerMediaInfo.duration === null) {\r\n\t\t\treturn new MediaManagerError(MediaManagerErrorType.INVALID_MEDIA_DIMENSIONS_DURATION);\r\n\t\t}\r\n\r\n\t\tif (options.maxDuration !== null && mediaManagerMediaInfo.duration > options.maxDuration) {\r\n\t\t\tif (mediaType === MediaManagerMediaType.AUDIO) {\r\n\t\t\t\treturn new MediaManagerError(MediaManagerErrorType.AUDIO_DURATION_TOO_LONG);\r\n\t\t\t}\r\n\t\t\tif (mediaType === MediaManagerMediaType.VIDEO) {\r\n\t\t\t\treturn new MediaManagerError(MediaManagerErrorType.VIDEO_DURATION_TOO_LONG);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (options.minDuration !== null && mediaManagerMediaInfo.duration < options.minDuration) {\r\n\t\t\tif (mediaType === MediaManagerMediaType.AUDIO) {\r\n\t\t\t\treturn new MediaManagerError(MediaManagerErrorType.AUDIO_DURATION_TOO_SHORT);\r\n\t\t\t}\r\n\t\t\tif (mediaType === MediaManagerMediaType.VIDEO) {\r\n\t\t\t\treturn new MediaManagerError(MediaManagerErrorType.VIDEO_DURATION_TOO_SHORT);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nexport function createVideoThumbnail(objectUrl: string, numberOfSeekPoints: number, treshold: number, callback: (result: string) => void): void {\r\n\t\r\n\tlet video: HTMLVideoElement = document.createElement('video');\r\n\r\n\tvideo.onloadedmetadata = () => {\r\n\t\tconst canvas: HTMLCanvasElement = document.createElement('canvas');\r\n\t\tcanvas.width = video.videoWidth;\r\n\t\tcanvas.height = video.videoHeight;\r\n\t\tconst context: CanvasRenderingContext2D = canvas.getContext('2d');\r\n\r\n\t\tlet seekPoints: number[] = new Array(numberOfSeekPoints).fill(null).map((_, index) => Math.round(index * (video.duration / (numberOfSeekPoints - 1)))).filter(onlyUnique);\r\n\r\n\t\tvideo.onseeked = () => {\r\n\r\n\t\t\tcontext.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\r\n\t\t\tconst frame: ImageData = context.getImageData(0, 0, video.videoWidth, video.videoHeight);\r\n\t\t\tlet sum: number = 0;\r\n\t\t\tfor (let i: number = 0; i < frame.data.length; i += 4) {\r\n\t\t\t\tconst r: number = frame.data[i];\r\n\t\t\t\tconst g: number = frame.data[i + 1];\r\n\t\t\t\tconst b: number = frame.data[i + 2];\r\n\t\t\t\tsum += (r + g + b) / 3;\r\n\t\t\t}\r\n\t\t\tconst avg: number = sum / (frame.data.length / 4);\r\n\t\t\tif (avg > treshold) {\r\n\t\t\t\tcallback(canvas.toDataURL('image/jpeg'));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (seekPoints.length > 0) {\r\n\t\t\t\tvideo.currentTime = seekPoints[0];\r\n\t\t\t\tseekPoints.shift();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvideo.currentTime = seekPoints[0];\r\n\t}\r\n\r\n\tvideo.src = objectUrl;\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { ApiService } from \"../../shared\";\r\nimport { MediaManager, MediaManagerFullConfiguration } from \"./mediamanager.interfaces\";\r\nimport { HttpParams } from \"@angular/common/http\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class MediaManagerService {\r\n\r\n\tapiService: ApiService = inject(ApiService);\r\n\r\n\tgetMediaManager(configuration: MediaManagerFullConfiguration): Observable<MediaManager> {\r\n        let httpParams: HttpParams = new HttpParams();\r\n        if (configuration.httpParams !== null) {\r\n            Object.keys(configuration.httpParams).forEach((key: string) => {\r\n                const httpParam: string | number | boolean = configuration.httpParams[key];\r\n                if (typeof httpParam === 'boolean') {\r\n                    httpParams = httpParams.append(key, httpParam ? '1' : '0');\r\n                } else {\r\n                    httpParams = httpParams.append(key, httpParam.toString());\r\n                }\r\n            });\r\n        }\r\n        return this.apiService.getWithHttpParams(['mediamanager', 'modules', configuration.module], httpParams);\r\n\t}\r\n\r\n\tgetMedia(guid: string): Observable<ArrayBuffer> {\r\n\t\treturn this.apiService.getFileArrayBuffer(['mediamanager', 'media', guid]);\r\n\t}\r\n\r\n}\r\n","import { TranslationType } from \"../../interfaces\"\r\n\r\nexport const MEDIAMANAGER_LANGUAGES_HU: TranslationType = {\r\n\tdelete: {\r\n\t\ttitle: 'Törlés',\r\n\t\ttext: 'Biztosan törölni szeretnéd a filet?',\r\n\t\tacceptText: 'Törlés',\r\n\t\tdeclineText: 'Mégsem'\r\n\t},\r\n\tpreview: {\r\n\t\tdownload: 'Letöltés',\r\n\t\tclose: 'Bezárás'\r\n\t},\r\n\teditor: {\r\n\t\tsave: 'Mentés',\r\n\t\tclose: 'Bezárás',\r\n\t\ttitleLabel: 'Cím',\r\n\t\ttagsLabel: 'Tag-ek',\r\n\t\ttitle: 'Beállítások'\r\n\t},\r\n\tfreeSpace: \"Felhasznált hely: {{$1}}/{{$2}}\",\r\n\tupload: \"Feltöltés\",\r\n\tcancelsort: 'Sorbarendezés megszakítása',\r\n\tmodal: {\r\n\t\ttitle: \"Médiakezelő\",\r\n\t\tclose: \"Bezárás\",\r\n\t\tupload: \"Feltöltés\"\r\n\t},\r\n\tdetail: {\r\n\t\tcancel: 'Mégsem',\r\n\t\tsave: 'Mentés',\r\n\t\tsize: 'Fájlméret',\r\n\t\tdimensions: 'Méret',\r\n\t\tduration: 'Hossz',\r\n\t\tuploadedBy: 'Feltöltötte',\r\n\t\tupdatedAt: 'Utoljára frissítéve',\r\n\t\tuploadDate: 'Feltöltés dátuma'\r\n\t},\r\n\terror: {\r\n\t\ttitle: \"Hiba történt\"\r\n\t},\r\n\tinfo: {\r\n\t\tallowedFileTypes: 'Engedélyezett file típusok',\r\n\t\tuploadFileCount: 'Feltölthető fileok száma',\r\n\t\tuploadFileSize: 'Feltölthető fileok mérete',\r\n\t\tgeneralRules: 'Általános szabályok',\r\n\t\trules: '{{$1}} szabályok',\r\n\t\tmaxFileSize: 'Maximum méret fileonként',\r\n\t\tminWidth: 'Minimum szélesség',\r\n\t\tmaxWidth: 'Maximum szélesség',\r\n\t\tminHeight: 'Minimum magasság',\r\n\t\tmaxHeight: 'Maximum magasság',\r\n\t\tminDuration: 'Minimum hossz',\r\n\t\tmaxDuration: 'Maximum hossz',\r\n\t\tratio: 'Képarány'\r\n\t},\r\n\terrors: {\r\n\t\tINVALID_CONFIGURATION: 'Hiba a beállításokban',\r\n\t\tEMPTY_FILE_LIST: 'Üres a feöltési lista',\r\n\t\tTYPE_NOT_SUPPORTED: 'Nem támogatott filetípus',\r\n\t\tNO_OPTIONS_FOUND: 'Nincs megfelelő konfiguráció',\r\n\t\tMAX_FILE_SIZE_EXCEEDED: 'A maximum fileméret meghaladva',\r\n\t\tMAX_FILE_SIZE_GLOBAL_EXCEEDED: 'A maximum globális fileméret meghaladva',\r\n\t\tMAX_FILE_COUNT_EXCEEDED: 'A maximum file szám elérve',\r\n\t\tVIDEO_INFO_CANNOT_BE_LOADED: 'A videó nem dekódolható',\r\n\t\tIMAGE_INFO_CANNOT_BE_LOADED: 'A kép nem dekódolható',\r\n\t\tAUDIO_INFO_CANNOT_BE_LOADED: 'A hangfájl nem dekódolható',\r\n\t\tVIDEO_DURATION_TOO_LONG: 'A videó túl hosszú',\r\n\t\tVIDEO_DURATION_TOO_SHORT: 'A videó túl rövid',\r\n\t\tAUDIO_DURATION_TOO_LONG: 'A hangfájl túl hosszú',\r\n\t\tAUDIO_DURATION_TOO_SHORT: 'A hangfájl túl rövid',\r\n\t\tMEDIA_RATIO_NOT_EXPECTED: 'A képarány nem meglelelő',\r\n\t\tMEDIA_WIDTH_TOO_WIDE: 'Szélesség túl nagy',\r\n\t\tMEDIA_WIDTH_TOO_THIN: 'Szélesség túl kicsi',\r\n\t\tMEDIA_HEIGHT_TOO_TALL: 'Magasság túl nagy',\r\n\t\tMEDIA_HEIGHT_TOO_LOW: 'Magasság túl kicsi',\r\n\t\tINVALID_MEDIA_DIMENSIONS_WIDTH: 'Szélesség nem megfelelő',\r\n\t\tINVALID_MEDIA_DIMENSIONS_HEIGHT: 'Magasság nem megfelelő',\r\n\t\tINVALID_MEDIA_DIMENSIONS_DURATION: 'Hossz nem megfelelő',\r\n\t\tNOTHING_TO_UPLOAD: 'Üres a feöltési lista'\r\n\t}\r\n}\r\n\r\nexport const MEDIAMANAGER_LANGUAGES_EN: TranslationType = {\r\n\tdelete: {\r\n\t\ttitle: 'Delete',\r\n\t\ttext: 'Do you really want to delete this file?',\r\n\t\tacceptText: 'Delete',\r\n\t\tdeclineText: 'Cancel'\r\n\t},\r\n\tpreview: {\r\n\t\tdownload: 'Download',\r\n\t\tclose: 'Close'\r\n\t},\r\n\teditor: {\r\n\t\tsave: 'Save',\r\n\t\tclose: 'Close',\r\n\t\ttitleLabel: 'Title',\r\n\t\ttagsLabel: 'Tags',\r\n\t\ttitle: 'Settings'\r\n\t},\r\n\tfreeSpace: \"Used space: {{$1}}/{{$2}}\",\r\n\tupload: \"Upload\",\r\n\tcancelsort: 'Cancel sort',\r\n\tmodal: {\r\n\t\ttitle: \"Mediamanager\",\r\n\t\tclose: \"Close\",\r\n\t\tupload: \"Upload\"\r\n\t},\r\n\tdetail: {\r\n\t\tcancel: 'Cancel',\r\n\t\tsave: 'Save',\r\n\t\tsize: 'Size',\r\n\t\tdimensions: 'Dimension',\r\n\t\tduration: 'Duration',\r\n\t\tuploadedBy: 'Uploaded by',\r\n\t\tupdatedAt: 'Updated at',\r\n\t\tuploadDate: 'Upload date'\r\n\t},\r\n\terror: {\r\n\t\ttitle: \"Error during upload\"\r\n\t},\r\n\tinfo: {\r\n\t\tallowedFileTypes: 'Allowed file types',\r\n\t\tuploadFileCount: 'Max upload file count',\r\n\t\tuploadFileSize: 'Max upload file size',\r\n\t\tgeneralRules: 'General rules',\r\n\t\trules: '{{$1}} rules',\r\n\t\tmaxFileSize: 'Max size per file',\r\n\t\tminWidth: 'Minimum width',\r\n\t\tmaxWidth: 'Maximum width',\r\n\t\tminHeight: 'Minimum height',\r\n\t\tmaxHeight: 'Maximum height',\r\n\t\tminDuration: 'Minimum duration',\r\n\t\tmaxDuration: 'Maximum duration',\r\n\t\tratio: 'Ratio'\r\n\t},\r\n\terrors: {\r\n\t\tINVALID_CONFIGURATION: 'Invalid configuration',\r\n\t\tEMPTY_FILE_LIST: 'File list is empty',\r\n\t\tTYPE_NOT_SUPPORTED: 'File type is not supported',\r\n\t\tNO_OPTIONS_FOUND: 'No options found',\r\n\t\tMAX_FILE_SIZE_EXCEEDED: 'Maximum file size exceeded',\r\n\t\tMAX_FILE_SIZE_GLOBAL_EXCEEDED: 'Maximum global file size exceeded',\r\n\t\tMAX_FILE_COUNT_EXCEEDED: 'Maximum file count exceeded',\r\n\t\tVIDEO_INFO_CANNOT_BE_LOADED: 'Video decode error',\r\n\t\tIMAGE_INFO_CANNOT_BE_LOADED: 'Image decode error',\r\n\t\tAUDIO_INFO_CANNOT_BE_LOADED: 'Audio decode error',\r\n\t\tVIDEO_DURATION_TOO_LONG: 'Video too long',\r\n\t\tVIDEO_DURATION_TOO_SHORT: 'Video too short',\r\n\t\tAUDIO_DURATION_TOO_LONG: 'Audio too long',\r\n\t\tAUDIO_DURATION_TOO_SHORT: 'Audio too short',\r\n\t\tMEDIA_RATIO_NOT_EXPECTED: 'Invalid ratio',\r\n\t\tMEDIA_WIDTH_TOO_WIDE: 'Media is too wide',\r\n\t\tMEDIA_WIDTH_TOO_THIN: 'Media is too thin',\r\n\t\tMEDIA_HEIGHT_TOO_TALL: 'Media is too tall',\r\n\t\tMEDIA_HEIGHT_TOO_LOW: 'Media is too low',\r\n\t\tINVALID_MEDIA_DIMENSIONS_WIDTH: 'Invalid media width',\r\n\t\tINVALID_MEDIA_DIMENSIONS_HEIGHT: 'Invalid media height',\r\n\t\tINVALID_MEDIA_DIMENSIONS_DURATION: 'Invalid media duration',\r\n\t\tNOTHING_TO_UPLOAD: 'File list is empty'\r\n\t}\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit } from \"@angular/core\";\r\nimport { FormBuilder, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { createMultilangFormGroup } from \"../../../shared\";\r\nimport { CfDialog } from \"../../../shared/classes\";\r\nimport { ButtonDirective } from \"../../../shared/directives/button.directive\";\r\nimport { TranslationPipe } from \"../../../shared/pipes\";\r\nimport { InputTextComponent } from \"../../inputtext/inputtext.component\";\r\nimport { MediaManagerMedia } from \"../mediamanager.interfaces\";\r\n\r\n@Component({\r\n\tselector: 'cf-mediamanagereditor',\r\n\tstandalone: true,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\timports: [\r\n\t\tReactiveFormsModule,\r\n\t\tInputTextComponent,\r\n\t\tCommonModule,\r\n\t\tButtonDirective,\r\n\t\tTranslationPipe\r\n\t],\r\n\ttemplate: `\r\n\t\t<div [formGroup]=\"formGroup\" class=\"cf-grid cf-cols-12\">\r\n\t\t\t<div class=\"cf-dialog-title cf-col-12\">{{'mediamanager.editor.title'|translation}}</div>\r\n\t\t\t<ng-container formGroupName='title'>\r\n\t\t\t\t<cf-inputtext [label]=\"('mediamanager.editor.titleLabel'|translation) + ' (' + language + ')'\" [readonly]=\"disabled\" [formControlName]='language' *ngFor=\"let language of languages\" class=\"cf-col-12\"></cf-inputtext>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container formGroupName='tags'>\r\n\t\t\t\t<cf-inputtext [label]=\"('mediamanager.editor.tagsLabel'|translation) + ' (' + language + ')'\" [readonly]=\"disabled\" [formControlName]='language' *ngFor=\"let language of languages\" class=\"cf-col-12\"></cf-inputtext>\r\n\t\t\t</ng-container>\r\n\t\t\t<div class=\"cf-col-12 cf-flex cf-flex-right cf-flex-spacer-2\">\r\n\t\t\t\t<button cfButton [severity]=\"'success'\" [disabled]=\"disabled\" [label]=\"'mediamanager.editor.save'|translation\" (click)=\"save()\"></button>\r\n\t\t\t\t<button cfButton [severity]=\"'danger'\" [label]=\"'mediamanager.editor.close'|translation\" (click)=\"close()\"></button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t`,\r\n\tstyleUrls: ['mediamanagereditor.component.scss']\r\n})\r\nexport class MediaManagerEditorComponent extends CfDialog implements OnInit {\r\n\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\tfb: FormBuilder = inject(FormBuilder);\r\n\t\r\n\tlanguages: string[] = this.config.getData('languages', []);\r\n\tmedia: MediaManagerMedia | null = this.config.getData('media', null);\r\n\tdisabled: boolean = this.config.getData('disabled', null);\r\n\r\n\tformGroup = this.fb.group({\r\n\t\ttitle: createMultilangFormGroup(this.languages, this.fb, ''),\r\n\t\ttags: createMultilangFormGroup(this.languages, this.fb, '')\r\n\t});\r\n\r\n\tsave(): void {\r\n\t\tthis.close(this.formGroup.value);\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tif (this.media !== null) {\r\n\t\t\tthis.formGroup.patchValue({\r\n\t\t\t\ttitle: this.media.title,\r\n\t\t\t\ttags: this.media.tags\r\n\t\t\t}, {emitEvent: false});\r\n\t\t}\r\n\t\tthis.cdr.detach();\r\n\t}\r\n\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnInit } from \"@angular/core\";\r\nimport { FileSource } from \"../../../interfaces\";\r\nimport { downloadFile, getFileUri } from \"../../../shared\";\r\nimport { CfDialog } from \"../../../shared/classes\";\r\nimport { ButtonDirective } from \"../../../shared/directives/button.directive\";\r\nimport { TranslationPipe } from \"../../../shared/pipes\";\r\nimport { MediaManagerMediaType } from \"../mediamanager.interfaces\";\r\n\r\n@Component({\r\n\tselector: 'cf-mediamanagerpreview',\r\n\tstandalone: true,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tButtonDirective,\r\n\t\tTranslationPipe\r\n\t],\r\n\ttemplate: `\r\n\t\t<div class=\"cf-dialog-title cf-mb-4\">{{source !== null ? source.fileName : ''}}</div>\r\n\t\t<div class=\"cf-dialog-content\">\r\n\t\t\t<ng-container *ngIf=\"type === MediaManagerMediaType.VIDEO\">\r\n\t\t\t\t<video [src]=\"src\" [controls]=\"true\" [autoplay]=\"autoPlay\"></video>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf=\"type === MediaManagerMediaType.AUDIO\">\r\n\t\t\t\t<audio [src]=\"src\" [controls]=\"true\" [autoplay]=\"autoPlay\"></audio>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf=\"type === MediaManagerMediaType.IMAGE\">\r\n\t\t\t\t<img [src]=\"src\" />\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t\t<div class=\"cf-dialog-buttons\">\r\n\t\t\t<button cfButton [severity]=\"'success'\" [icon]=\"'download-cloud-2-line'\" [label]=\"'mediamanager.preview.download'|translation\" (click)=\"download()\"></button>\r\n\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t<button cfButton [severity]=\"'danger'\" [icon]=\"'close-fill'\" [label]=\"'mediamanager.preview.close'|translation\" (click)=\"close()\"></button>\r\n\t\t</div>\r\n\t`,\r\n\tstyleUrls: ['mediamanagerpreview.component.scss']\r\n})\r\nexport class MediaManagerPreviewComponent extends CfDialog implements OnInit {\r\n\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n\tsrc: string | null = null;\r\n\r\n\t@Input() type: MediaManagerMediaType = this.config.getData('type', MediaManagerMediaType.OTHER);\r\n\t@Input() source: FileSource | null = this.config.getData('source', null);\r\n\t@Input() autoPlay: boolean = this.config.getData('autoPlay', true);\r\n\r\n\tMediaManagerMediaType = MediaManagerMediaType;\r\n\r\n\tdownload(): void {\r\n\t\tif (this.source === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tdownloadFile(this.source);\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tif (this.source !== null) {\r\n\t\t\tgetFileUri(this.source).then((fileUri: string | null) => {\r\n\t\t\t\tthis.src = fileUri;\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.cdr.detach();\r\n\t}\r\n\r\n}","import { CommonModule } from \"@angular/common\";\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, inject, Input, OnChanges, OnInit, Output, ViewChild } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { filter, Observable, Subject } from \"rxjs\";\r\nimport { ConfirmConfiguration, FileSource, MultiLangData } from \"../../interfaces\";\r\nimport { ReadonlyDirective, createMultilangFormGroup, generateUuid, inPath } from \"../../shared\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { CheckboxComponent } from \"../checkbox/checkbox.component\";\r\nimport { InputTextComponent } from \"../inputtext/inputtext.component\";\r\nimport { MEDIA_MANAGER_DEFAULT_CONFIGURATION } from \"./mediamanager.const\";\r\nimport { createVideoThumbnail, mediaManagerValidateFile } from \"./mediamanager.helpers\";\r\nimport { MediaFiles, MediaManager, MediaManagerConfiguration, MediaManagerErrorType, MediaManagerFullConfiguration, MediaManagerMedia, MediaManagerMediaType, MediaManagerOptions, MediaManagerThumbnailStatus, MediaManagerValidateFileResult } from \"./mediamanager.interfaces\";\r\nimport { MediaManagerService } from \"./mediamanager.service\";\r\nimport { MEDIAMANAGER_LANGUAGES_EN, MEDIAMANAGER_LANGUAGES_HU } from \"./mediamanager.translations\";\r\nimport { MediaManagerEditorComponent } from \"./mediamanagereditor/mediamanagereditor.component\";\r\nimport { MediaManagerPreviewComponent } from \"./mediamanagerpreview/mediamanagerpreview.component\";\r\nimport { ButtonDirective } from '../../shared/directives/button.directive';\r\nimport { FileSizePipe, DurationPipe, TranslationPipe } from '../../shared/pipes';\r\nimport { CfDialog } from '../../shared/classes';\r\nimport { CfDialogService, CfMessageService, TranslationsService } from '../../shared/services';\r\n\r\nexport class MediaManagerError {\r\n\ttype: MediaManagerErrorType = MediaManagerErrorType.ERROR_NOT_SET;\r\n\tparams: string[] = [];\r\n\tconstructor(type: MediaManagerErrorType, params: string[] = []) {\r\n\t\tthis.type = type;\r\n\t\tthis.params = params;\r\n\t}\r\n}\r\n\r\n@Component({\r\n\tselector: 'cf-mediamanager',\r\n\tstandalone: true,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tButtonDirective,\r\n\t\tFileSizePipe,\r\n\t\tDurationPipe,\r\n\t\tInputTextComponent,\r\n\t\tCheckboxComponent,\r\n\t\tTranslationPipe,\r\n\t\tReactiveFormsModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => MediaManagerComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\tFileSizePipe,\r\n\t\tDurationPipe,\r\n\t\tTranslationPipe\r\n    ],\r\n\ttemplate: `\r\n\t\t<div id=\"media-manager\" [ngClass]=\"{'disabled': isDisabled, 'focused': focused, 'dragdropactive': dragDropActive}\">\r\n\t\t\t<div class=\"dropzone\">\r\n\t\t\t\t<div class=\"dropzone-content\"><span class=\"remixicon drag-drop-line\"></span></div>\r\n\t\t\t</div>\r\n\t\t\t<div id=\"loading-container\" *ngIf=\"loading\">\r\n\t\t\t\t<div id=\"loading\">\r\n\t\t\t\t\t<div class=\"remixicon loader-fill spin\"></div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<ng-container *ngIf=\"processedConfiguration.mediaManager !== null\">\r\n\t\t\t\t<input #hiddenInput (focus)=\"focusFromHiddenInput()\" (blur)=\"blurFromHiddenInput()\" class=\"hidden-input\" />\r\n\r\n\t\t\t\t<!-- INFO -->\r\n\t\t\t\t<div id=\"info\" class=\"cf-p-4\" *ngIf=\"infoShowed\">\r\n\t\t\t\t\t<div class=\"info-block\">\r\n\t\t\t\t\t\t<div class=\"info-title\">{{'mediamanager.info.allowedFileTypes'|translation}}: {{processedConfiguration.mediaManager.allowedExtensions.join(', ')}}</div>\t\r\n\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.maxFileCount !== null\">{{'mediamanager.info.uploadFileCount'|translation}}: {{processedConfiguration.mediaManager.maxFileCount}}</div>\t\r\n\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.totalFileSize !== null\">{{'mediamanager.info.uploadFileSize'|translation}}: {{processedConfiguration.mediaManager.totalFileSize|filesize}}</div>\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-container *ngFor=\"let option of options\">\r\n\t\t\t\t\t\t<div class=\"info-block\" *ngIf=\"isOptionFilled(processedConfiguration.mediaManager.options[option])\">\r\n\t\t\t\t\t\t\t<div class=\"info-title\" *ngIf=\"option === '*'\">{{'mediamanager.info.generalRules'|translation}}:</div>\r\n\t\t\t\t\t\t\t<div class=\"info-title\" *ngIf=\"option !== '*'\">{{'mediamanager.info.rules'|translation:processedConfiguration.mediaManager.options[option].extension}}:</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].maxFileSize !== null\">{{'mediamanager.info.maxFileSize'|translation}}: {{processedConfiguration.mediaManager.options[option].maxFileSize|filesize}}</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].minWidth !== null\">{{'mediamanager.info.minWidth'|translation}}: {{processedConfiguration.mediaManager.options[option].minWidth}}px</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].maxWidth !== null\">{{'mediamanager.info.maxWidth'|translation}}: {{processedConfiguration.mediaManager.options[option].maxWidth}}px</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].minHeight !== null\">{{'mediamanager.info.minHeight'|translation}}: {{processedConfiguration.mediaManager.options[option].minHeight}}px</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].maxHeight !== null\">{{'mediamanager.info.maxHeight'|translation}}: {{processedConfiguration.mediaManager.options[option].maxHeight}}px</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].minDuration !== null\">{{'mediamanager.info.minDuration'|translation}}: {{processedConfiguration.mediaManager.options[option].minDuration|duration}}</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].maxDuration !== null\">{{'mediamanager.info.maxDuration'|translation}}: {{processedConfiguration.mediaManager.options[option].maxDuration|duration}}</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"processedConfiguration.mediaManager.options[option].ratio !== null && processedConfiguration.mediaManager.options[option].ratio!.width !== null && processedConfiguration.mediaManager.options[option].ratio!.height\">{{'mediamanager.info.ratio'|translation}}: {{processedConfiguration.mediaManager.options[option].ratio!.width}}:{{processedConfiguration.mediaManager.options[option].ratio!.height}}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'danger'\" [icon]=\"'close-line'\" [label]=\"'Close'\" (click)=\"hideInfo()\"></button>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- INNER ERROR -->\r\n\t\t\t\t<div id=\"inner-error-outer\" *ngIf=\"innerErrorDisplayed\">\r\n\t\t\t\t\t<div id=\"inner-error\" class=\"cf-p-4 cf-background-color-danger cf-text-color-white\">\r\n\t\t\t\t\t\t<div id=\"inner-error-close\" class=\"remixicon close-line cf-cursor-pointer\" (click)=\"hideInnerError()\"></div>\r\n\t\t\t\t\t\t<div id=\"inner-error-title\" class=\"cf-text-bold cf-mb-2\">{{'mediamanager.error.title'|translation}}</div>\r\n\t\t\t\t\t\t<div id=\"inner-error-text\">{{innerErrorText}}</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- FULL -->\r\n\t\t\t\t<div id=\"full\" *ngIf=\"displayStyle === 'full'\">\r\n\t\t\t\t\t<div id=\"full-body\">\r\n\t\t\t\t\t\t<div class=\"cf-flex cf-flex-spacer-2\">\r\n\t\t\t\t\t\t\t<span class=\"free-space cf-p-2\" *ngIf=\"processedConfiguration.mediaManager.totalFileSize !== null && remainingFreeSize !== null\">\r\n\t\t\t\t\t\t\t\t<span class=\"free-space-line\" [ngStyle]=\"{'width.%': 100 - (remainingFreeSize / processedConfiguration.mediaManager.totalFileSize) * 100}\"></span>\r\n\t\t\t\t\t\t\t\t{{'mediamanager.freeSpace'|translation:((processedConfiguration.mediaManager.totalFileSize - remainingFreeSize)|filesize):(processedConfiguration.mediaManager.totalFileSize|filesize)}}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<span class=\"free-space cf-p-2\" *ngIf=\"processedConfiguration.mediaManager.maxFileCount !== null\">\r\n\t\t\t\t\t\t\t\t{{uploadedMediaFiles.length}}/{{processedConfiguration.mediaManager.maxFileCount}}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'warning'\" [icon]=\"'information-line'\" (click)=\"showInfo()\"></button>\r\n\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'success'\" [disabled]=\"isDisabled || isReadonly\" [label]=\"'mediamanager.upload'|translation\" (click)=\"selectFiles()\"></button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div id=\"full-header\">\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"multiple-file-grid\" [ngStyle]=\"{'grid-template-columns': 'repeat(auto-fill, minmax(max(' + this.processedConfiguration.gridTemplateMinSize + ', ' + this.processedConfiguration.gridTemplateMaxSize + '), 1fr))'}\">\r\n\t\t\t\t\t\t\t<div class=\"file-grid-item\" *ngFor=\"let uploadedMediaFile of uploadedMediaFiles; let i = index;\" (click)=\"changeFullDetailMedia(uploadedMediaFile)\">\r\n\t\t\t\t\t\t\t\t<div class=\"file-grid-item-name cf-text-bold cf-text-center cf-mb-4\" [title]=\"getName(uploadedMediaFile)\">{{getName(uploadedMediaFile)}}</div>\r\n\t\t\t\t\t\t\t\t<div class=\"file-grid-item-info cf-text-center cf-mb-4\">{{uploadedMediaFile.fileSize|filesize}}</div>\r\n\t\t\t\t\t\t\t\t<div class=\"file-grid-item-info cf-text-center cf-mb-4\">{{getGridInfo(uploadedMediaFile)}}</div>\r\n\t\t\t\t\t\t\t\t<div class=\"file-grid-item-placeholder-container\">\r\n\t\t\t\t\t\t\t\t\t<img [src]=\"getThumbnail(uploadedMediaFile)\" class=\"file-grid-item-placeholder\" />\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div id=\"full-body-detail\" *ngIf=\"fullDetailMedia !== null\">\r\n\t\t\t\t\t\t<div class=\"cf-vgrid\">\r\n\t\t\t\t\t\t\t<div>{{getName(fullDetailMedia)}}</div>\r\n\t\t\t\t\t\t\t<div (click)=\"preview(fullDetailMedia)\" class=\"cf-cursor-pointer\">\r\n\t\t\t\t\t\t\t\t<img id=\"full-body-detail-preview-image\" [src]=\"getThumbnail(fullDetailMedia)\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<ng-container [formGroup]=\"fullDetailMediaFormGroup\" *ngIf=\"fullDetailMediaFormGroup !== null\">\r\n\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"'title'\">\r\n\t\t\t\t\t\t\t\t\t<cf-inputtext *ngFor=\"let language of processedConfiguration.languages\" [readonly]=\"isDisabled || isReadonly\" [label]='\"Title (\" + language + \")\"' [formControlName]=\"language\"></cf-inputtext>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"'tags'\">\r\n\t\t\t\t\t\t\t\t\t<cf-inputtext *ngFor=\"let language of processedConfiguration.languages\" [readonly]=\"isDisabled || isReadonly\" [label]='\"Tags (\" + language + \")\"' [formControlName]=\"language\"></cf-inputtext>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<cf-checkbox [label]=\"'Public'\" [formControlName]=\"'public'\"></cf-checkbox>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t<div *ngIf=\"fullDetailMedia.fileSize !== null\">{{'mediamanager.detail.size'|translation}}: {{fullDetailMedia.fileSize|filesize}}</div>\r\n\t\t\t\t\t\t\t\t<div *ngIf=\"fullDetailMedia.width !== null && fullDetailMedia.height !== null\">{{'mediamanager.detail.dimensions'|translation}}: {{fullDetailMedia.width}} x {{fullDetailMedia.height}}</div>\r\n\t\t\t\t\t\t\t\t<div *ngIf=\"fullDetailMedia.duration !== null\">{{'mediamanager.detail.duration'|translation}}: {{fullDetailMedia.duration|duration}}</div>\r\n\t\t\t\t\t\t\t\t<div *ngIf=\"fullDetailMedia.userFullname !== null\">{{'mediamanager.detail.uploadedBy'|translation}}: {{fullDetailMedia.userFullname}}</div>\r\n\t\t\t\t\t\t\t\t<div *ngIf=\"fullDetailMedia.updatedAt !== null\">{{'mediamanager.detail.updatedAt'|translation}}: {{fullDetailMedia.updatedAt|date}}</div>\r\n\t\t\t\t\t\t\t\t<div>{{'mediamanager.detail.uploadDate'|translation}}: {{fullDetailMedia.uploadDate|date}}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"cf-flex cf-flex-spacer-2\">\r\n\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'danger'\" [label]=\"'mediamanager.detail.cancel'|translation\" (click)=\"changeFullDetailMedia(null)\"></button>\r\n\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'success'\" [disabled]=\"isDisabled || isReadonly\" [label]=\"'mediamanager.detail.save'|translation\" (click)=\"saveFullDetailMedia()\"></button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- SINGLE -->\r\n\t\t\t\t<div id=\"single-file\" *ngIf=\"displayStyle === 'single'\">\r\n\t\t\t\t\t<div id=\"single-file-selected\" *ngIf=\"uploadedMediaFiles.length > 0\">\r\n\t\t\t\t\t\t{{getName(uploadedMediaFiles[0])}}\r\n\t\t\t\t\t\t<img [src]=\"getThumbnail(uploadedMediaFiles[0])\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div id=\"single-file-buttons\" class=\"cf-flex cf-flex-spacer-2\">\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'warning'\" [icon]=\"'information-line'\" (click)=\"showInfo()\"></button>\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'warning'\" [disabled]=\"isDisabled || isReadonly\" [icon]=\"'settings-4-line'\" *ngIf=\"uploadedMediaFiles.length > 0\" (click)=\"openSettings(uploadedMediaFiles[0])\"></button>\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'external-link-line'\" *ngIf=\"uploadedMediaFiles.length > 0\" (click)=\"openMediaOnNewPage(uploadedMediaFiles[0])\"></button>\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'danger'\" [disabled]=\"isDisabled || isReadonly\" [icon]=\"'delete-bin-6-line'\" *ngIf=\"uploadedMediaFiles.length > 0 && (processedConfiguration.deletable === null || deletable(uploadedMediaFiles[0]))\" (click)=\"deleteMedia(uploadedMediaFiles[0])\"></button>\r\n\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'success'\" [disabled]=\"isDisabled || isReadonly\" [label]=\"'mediamanager.upload'|translation\" (click)=\"selectFiles()\"></button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- GRID, LIST -->\r\n\t\t\t\t<div id=\"multiple-file\" class=\"cf-p-4 cf-fill-height cf-flex cf-flex-column cf-flex-spacer-4\" *ngIf=\"displayStyle === 'list' || displayStyle === 'grid'\">\r\n\t\t\t\t\t<div id=\"multiple-file-header\" class=\"cf-flex cf-flex-spacer-2\">\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [icon]=\"displayStyle === 'list' ? 'grid-fill' : 'list-check'\" (click)=\"toogleDisplayStyle()\" *ngIf=\"processedConfiguration.changeStyleButtonVisible\"></button>\r\n\t\t\t\t\t\t<span class=\"free-space cf-p-2\" *ngIf=\"processedConfiguration.mediaManager.totalFileSize !== null && remainingFreeSize !== null\">\r\n\t\t\t\t\t\t\t<span class=\"free-space-line\" [ngStyle]=\"{'width.%': 100 - (remainingFreeSize / processedConfiguration.mediaManager.totalFileSize) * 100}\"></span>\r\n\t\t\t\t\t\t\t{{'mediamanager.freeSpace'|translation:((processedConfiguration.mediaManager.totalFileSize - remainingFreeSize)|filesize):(processedConfiguration.mediaManager.totalFileSize|filesize)}}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"free-space cf-p-2\" *ngIf=\"processedConfiguration.mediaManager.maxFileCount !== null\">\r\n\t\t\t\t\t\t\t{{uploadedMediaFiles.length}}/{{processedConfiguration.mediaManager.maxFileCount}}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'danger'\" [label]=\"'mediamanager.cancelsort'|translation\" (click)=\"cancelSort()\" *ngIf=\"indexToSort !== null\"></button>\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'warning'\" [icon]=\"'information-line'\" (click)=\"showInfo()\"></button>\r\n\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'success'\" [disabled]=\"isDisabled || isReadonly\" [label]=\"'mediamanager.upload'|translation\" (click)=\"selectFiles()\"></button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"cf-flex-grow cf-overflow-y-auto\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"displayStyle === 'list'\">\r\n\t\t\t\t\t\t\t<div class=\"cf-vgrid\">\r\n\t\t\t\t\t\t\t\t<div class=\"cf-flex cf-flex-spacer-2 cf-ai-center\" *ngFor=\"let uploadedMediaFile of uploadedMediaFiles; let i = index;\" [ngClass]=\"getConditionalClasses(uploadedMediaFile, i, 'list')\">\r\n\t\t\t\t\t\t\t\t\t<span>{{getName(uploadedMediaFile)}}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"indexToSort === null\">\r\n\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'arrow-left-right-fill'\" (click)=\"startSort(i)\"></button>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"indexToSort !== null && indexToSort !== i\">\r\n\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'skip-up-fill'\" (click)=\"setSort(i, 'before')\" *ngIf=\"indexToSort + 1 !== i\"></button>\r\n\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'skip-down-fill'\" (click)=\"setSort(i, 'after')\" *ngIf=\"indexToSort - 1 !== i\"></button>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'success'\" [icon]=\"'eye-line'\" (click)=\"preview(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'warning'\" [disabled]=\"isDisabled || isReadonly\" [icon]=\"'settings-4-line'\" (click)=\"openSettings(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'external-link-line'\" (click)=\"openMediaOnNewPage(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'danger'\" [disabled]=\"isDisabled || isReadonly\" [icon]=\"'delete-bin-6-line'\" *ngIf=\"processedConfiguration.deletable === null || deletable(uploadedMediaFile)\" (click)=\"deleteMedia(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<ng-container *ngIf=\"displayStyle === 'grid' && uploadedMediaFiles.length > 0\">\r\n\t\t\t\t\t\t\t<div class=\"multiple-file-grid\" [ngStyle]=\"{'grid-template-columns': 'repeat(auto-fill, minmax(max(' + this.processedConfiguration.gridTemplateMinSize + ', ' + this.processedConfiguration.gridTemplateMaxSize + '), 1fr))'}\">\r\n\t\t\t\t\t\t\t\t<div class=\"file-grid-item\" *ngFor=\"let uploadedMediaFile of uploadedMediaFiles; let i = index;\" [ngClass]=\"getConditionalClasses(uploadedMediaFile, i, 'grid')\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"file-grid-item-placeholder-container cf-mb-2\">\r\n\t\t\t\t\t\t\t\t\t\t<img [src]=\"getThumbnail(uploadedMediaFile)\" class=\"file-grid-item-placeholder\" />\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"file-grid-item-name cf-text-bold cf-text-center cf-mb-4\" [title]=\"getName(uploadedMediaFile)\">{{getName(uploadedMediaFile)}}</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"file-grid-item-info cf-flex cf-ai-center cf-mb-4\">\r\n\t\t\t\t\t\t\t\t\t\t<span>{{uploadedMediaFile.fileSize|filesize}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{getGridInfo(uploadedMediaFile)}}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"cf-flex-grow cf-flex\">\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"indexToSort === null\">\r\n\t\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'success'\" [icon]=\"'eye-line'\" [text]=\"true\" [raised]=\"false\" (click)=\"preview(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'warning'\" [disabled]=\"isDisabled || isReadonly\" [icon]=\"'settings-4-line'\" [text]=\"true\" [raised]=\"false\" (click)=\"openSettings(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'external-link-line'\" [text]=\"true\" [raised]=\"false\" (click)=\"openMediaOnNewPage(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'arrow-left-right-fill'\" [text]=\"true\" [raised]=\"false\" (click)=\"startSort(i)\"></button>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'danger'\" [disabled]=\"isDisabled || isReadonly\" [icon]=\"'delete-bin-6-line'\" [text]=\"true\" [raised]=\"false\" *ngIf=\"processedConfiguration.deletable === null || deletable(uploadedMediaFile)\" (click)=\"deleteMedia(uploadedMediaFile)\"></button>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"indexToSort !== null && indexToSort !== i\">\r\n\t\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'skip-left-fill'\" [text]=\"true\" [raised]=\"false\" (click)=\"setSort(i, 'before')\" *ngIf=\"indexToSort + 1 !== i\"></button>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t<button cfButton type=\"button\" [severity]=\"'info'\" [icon]=\"'skip-right-fill'\" [text]=\"true\" [raised]=\"false\" (click)=\"setSort(i, 'after')\" *ngIf=\"indexToSort - 1 !== i\"></button>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t`,\r\n\tstyleUrls: ['./mediamanager.component.scss'],\r\n    host: {\r\n        class: 'cf-input-container cf-mediamanager'\r\n    }\r\n})\r\nexport class MediaManagerComponent extends FormItem implements OnInit, OnChanges {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\tmediaManagerService: MediaManagerService = inject(MediaManagerService);\r\n\tdialogService: CfDialogService = inject(CfDialogService);\r\n\tmessageService: CfMessageService = inject(CfMessageService);\r\n\tfileSizePipe: FileSizePipe = inject(FileSizePipe);\r\n\tdurationPipe: DurationPipe = inject(DurationPipe);\r\n\ttranslationsService: TranslationsService = inject(TranslationsService);\r\n\ttranslationPipe: TranslationPipe = inject(TranslationPipe);\r\n\tfb: FormBuilder = inject(FormBuilder);\r\n\tinfoShowed: boolean = false;\r\n\r\n\toverride enterAsTabType: string = 'mediamanager';\r\n\r\n\t@Input('configuration') configuration: MediaManagerConfiguration | null = null;\r\n\t@Input('mediaFiles') mediaFiles: MediaFiles | null = null;\r\n\t@Input('modalMode') modalMode: boolean = false;\r\n\r\n\t@Output('valueChanged') valueChanged: EventEmitter<MediaFiles> = new EventEmitter();\r\n\r\n\t@ViewChild('hiddenInput') hiddenInput: ElementRef<HTMLInputElement> | undefined = undefined;\r\n\r\n\tprocessedConfiguration: MediaManagerFullConfiguration = MEDIA_MANAGER_DEFAULT_CONFIGURATION;\r\n\r\n\tloading: boolean = false;\r\n\r\n\t_uploadedMediaFiles: MediaManagerMedia[] = [];\r\n\r\n\tfullDetailMedia: MediaManagerMedia | null = null;\r\n\r\n\tfullDetailMediaFormGroup: FormGroup<{\r\n\t\ttitle: FormGroup<{}>,\r\n\t\ttags: FormGroup<{}>,\r\n\t\tpublic: FormControl<boolean>\r\n\t}> | null = null;\r\n\r\n\tinnerErrorDisplayed: boolean = false;\r\n\tinnerErrorText: string = '';\r\n\r\n\toverrideDisplayStyleFromSingle: boolean = false;\r\n\r\n\tmediaDataCache: Map<string, string> = new Map();\r\n\tmediaThumbnailCache: Map<string, string> = new Map();\r\n\r\n\tpasteEvent: ((clipboardEvent: ClipboardEvent) => any) | null = null;\r\n\r\n\tdragDropActive: boolean = false;\r\n\r\n\tindexToSort: number | null = null;\r\n\r\n\t@HostBinding('class') get classes(): string {\r\n\t\tconst classes: string[] = [];\r\n\t\tif (!this.processedConfiguration.showBorder) {\r\n\t\t\tclasses.push('hideborder');\r\n\t\t}\r\n\t\treturn classes.join(' ');\r\n\t}\r\n\r\n\t@HostBinding('style.height') get heigth(): string {\r\n\t\tif (this.modalMode) {\r\n\t\t\treturn 'auto';\r\n\t\t}\r\n\t\treturn this.processedConfiguration.height;\r\n\t}\r\n\r\n\tget uploadedMediaFiles(): MediaManagerMedia[] {\r\n\t\treturn this._uploadedMediaFiles.filter((mediaManagerMedia: MediaManagerMedia) => !mediaManagerMedia.delete);\r\n\t}\r\n\r\n\tget displayStyle(): 'full' | 'grid' | 'list' | 'single' {\r\n\t\tif (this.modalMode) {\r\n\t\t\treturn 'full';\r\n\t\t}\r\n\t\tif (this.overrideDisplayStyleFromSingle) {\r\n\t\t\treturn 'grid';\r\n\t\t}\r\n\t\treturn this.processedConfiguration.displayStyle;\r\n\t}\r\n\r\n\tget options(): string[] {\r\n\t\tif (this.processedConfiguration.mediaManager === null) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn Object.keys(this.processedConfiguration.mediaManager.options);\r\n\t}\r\n\r\n\tget remainingFreeSize(): number | null {\r\n\t\tif (this.processedConfiguration.mediaManager === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (this.processedConfiguration.mediaManager.totalFileSize !== null) {\r\n\t\t\tconst fullUsedSize: number = this.uploadedMediaFiles.map(({fileSize}) => fileSize).reduce((fileSizeA: number, fileSizeB: number) => {\r\n\t\t\t\treturn fileSizeA + fileSizeB;\r\n\t\t\t}, 0);\r\n\t\t\treturn this.processedConfiguration.mediaManager.totalFileSize - fullUsedSize;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tappendPasteEvent(): void {\r\n\t\tif (this.pasteEvent !== null) {\r\n\t\t\tthis.removePasteEvent();\r\n\t\t}\r\n\t\tthis.pasteEvent = this.paste.bind(this);\r\n\t\tdocument.addEventListener('paste', this.pasteEvent);\r\n\t}\r\n\r\n\tremovePasteEvent(): void {\r\n\t\tif (this.pasteEvent === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tdocument.removeEventListener('paste', this.pasteEvent);\r\n\t\tthis.pasteEvent = null;\r\n\t}\r\n\r\n\tpaste(clipboardEvent: ClipboardEvent): void {\r\n\t\tif (!this.focused || clipboardEvent.clipboardData === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.validateAndAddFiles(clipboardEvent.clipboardData.files);\r\n\t}\r\n\r\n\tfocusFromHiddenInput(): void {\r\n\t\tthis.focused = true;\r\n\t\tthis.appendPasteEvent();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tblurFromHiddenInput(): void {\r\n\t\tthis.focused = false;\r\n\t\tthis.removePasteEvent();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n\t}\r\n\r\n\tblur(): void {\r\n\t\tthis.focused = false;\r\n\t\tthis.removePasteEvent();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tisOptionFilled(mediaManagerOptions: MediaManagerOptions): boolean {\r\n\t\treturn mediaManagerOptions.ratio !== null || \r\n\t\t\tmediaManagerOptions.maxFileSize !== null ||\r\n\t\t\tmediaManagerOptions.minWidth !== null ||\r\n\t\t\tmediaManagerOptions.maxWidth !== null ||\r\n\t\t\tmediaManagerOptions.minHeight !== null ||\r\n\t\t\tmediaManagerOptions.maxHeight !== null ||\r\n\t\t\tmediaManagerOptions.minDuration !== null ||\r\n\t\t\tmediaManagerOptions.maxDuration !== null;\r\n\t}\r\n\r\n\tshowInfo(): void {\r\n\t\tthis.infoShowed = true;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\thideInfo(): void {\r\n\t\tthis.infoShowed = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\toverride setDisabledState(isDisabled: boolean): void {\r\n\t\tthis.processedConfiguration.disabled = isDisabled;\r\n\t\tthis.disabled = isDisabled;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\t/**\r\n\t * Deletable\r\n\t * \r\n\t * Set `configuration.deletable` to override the return value\r\n\t * \r\n\t * Otherwise, it will return default `true`\r\n\t * \r\n\t * @param mediaManagerMedia `MediaManagerMedia`\r\n\t * @returns `boolean`\r\n\t */\r\n\tdeletable(mediaManagerMedia: MediaManagerMedia): boolean {\r\n\t\tif (typeof this.processedConfiguration.deletable === 'boolean') {\r\n\t\t\treturn this.processedConfiguration.deletable;\r\n\t\t}\r\n\t\tif (typeof this.processedConfiguration.deletable === 'function') {\r\n\t\t\treturn this.processedConfiguration.deletable({\r\n\t\t\t\tmediaManagerComponent: this,\r\n\t\t\t\tmediaManagerMedia\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Delete a `MediaManagerMedia` from the list.\r\n\t * \r\n\t * If `configuration.deleteCallback` is set, and the callback if `false`, it wont be deleted.\r\n\t * \r\n\t * If `configuration.deleteConfirm` is set, a confirmation window will appear.\r\n\t * \r\n\t * For the confirmation window, if `configuration.deleteConfirmConfiguration` is set, we use that, otherwise we are using \r\n\t * \r\n\t * @param mediaManagerMedia `MediaManagerMedia`\r\n\t */\r\n\tdeleteMedia(mediaManagerMedia: MediaManagerMedia): void {\r\n\r\n\t\tconst deleteFunction: () => void = () => {\r\n\r\n\t\t\tconst afterDelete: () => void = () => {\r\n\t\t\t\tmediaManagerMedia.delete = true;\r\n\t\t\t\tthis.mediaDataCache.delete(mediaManagerMedia.guid);\r\n\t\t\t\tthis.mediaThumbnailCache.delete(mediaManagerMedia.guid);\r\n\t\t\t\tthis.changeValue();\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t}\r\n\r\n\t\t\tlet confirm: boolean = false;\r\n\t\t\tif (typeof this.processedConfiguration.deleteConfirm === 'boolean') {\r\n\t\t\t\tconfirm = this.processedConfiguration.deleteConfirm;\r\n\t\t\t}\r\n\r\n\t\t\tif (confirm) {\r\n\t\t\t\tlet confirmConfiguration: ConfirmConfiguration = {\r\n\t\t\t\t\ttitle: this.translationPipe.transform('mediamanager.delete.title'),\r\n\t\t\t\t\ttext: this.translationPipe.transform('mediamanager.delete.text'),\r\n\t\t\t\t\tacceptText: this.translationPipe.transform('mediamanager.delete.acceptText'),\r\n\t\t\t\t\tdeclineText: this.translationPipe.transform('mediamanager.delete.declineText')\r\n\t\t\t\t};\r\n\t\t\t\tif (this.processedConfiguration.deleteConfirmConfiguration !== undefined && this.processedConfiguration.deleteConfirmConfiguration !== null) {\r\n\t\t\t\t\tconfirmConfiguration = this.processedConfiguration.deleteConfirmConfiguration;\r\n\t\t\t\t}\r\n\t\t\t\tthis.dialogService.confirmAccept(confirmConfiguration).then(() => {\r\n\t\t\t\t\tafterDelete();\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\tafterDelete();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\tif (typeof this.processedConfiguration.deleteCallback === 'function') {\r\n\t\t\tconst result: boolean | Subject<boolean> | Observable<boolean> = this.processedConfiguration.deleteCallback({\r\n\t\t\t\tmediaManagerComponent: this,\r\n\t\t\t\tmediaManagerMedia\r\n\t\t\t});\r\n\t\t\tif (typeof result === 'boolean') {\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tdeleteFunction();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdeleteFunction();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Opens settings modal, on the close callback, the modified media will be updated in the list\r\n\t * \r\n\t * @param media `MediaManagerMedia`\r\n\t */\r\n\topenSettings(media: MediaManagerMedia): void {\r\n\t\tthis.dialogService.open(MediaManagerEditorComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\tlanguages: this.processedConfiguration.languages,\r\n\t\t\t\tdisabled: this.processedConfiguration.disabled,\r\n\t\t\t\tmedia\r\n\t\t\t}\r\n\t\t}).onCloseValue.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((editorData: {\r\n\t\t\ttitle: MultiLangData,\r\n\t\t\ttags: MultiLangData,\r\n\t\t\tsource: string\r\n\t\t}) => {\r\n\t\t\tmedia.title = editorData.title;\r\n\t\t\tmedia.tags = editorData.tags;\r\n\t\t\tmedia.source = editorData.source;\r\n\t\t\tmedia.touched = true;\r\n\t\t\tthis.changeValue();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n\topenMediaOnNewPage(mediaManagerMedia: MediaManagerMedia): void {\r\n\t\tif (typeof mediaManagerMedia.originalFileUrl === 'string' && mediaManagerMedia.originalFileUrl !== '') {\r\n\t\t\twindow.open(mediaManagerMedia.originalFileUrl, '_blank');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst mediaDataCacheValue: string | undefined = this.mediaDataCache.get(mediaManagerMedia.guid);\r\n\t\tif (mediaDataCacheValue !== undefined) {\r\n\t\t\twindow.open(mediaDataCacheValue, '_blank');\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tstartSort(index: number): void {\r\n\t\tthis.indexToSort = index;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tsetSort(index: number, way: 'before' | 'after'): void {\r\n\t\tif (this.indexToSort !== null) {\r\n\t\t\tconst mediaElements: MediaManagerMedia[] = this._uploadedMediaFiles.splice(this.indexToSort, 1);\r\n\t\t\tif (index > this.indexToSort && way === 'before') {\r\n\t\t\t\tindex--;\r\n\t\t\t}\r\n\t\t\tif (index < this.indexToSort && way === 'after') {\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t\tthis._uploadedMediaFiles.splice(index, 0, ...mediaElements);\r\n\t\t}\r\n\t\tthis.cancelSort();\r\n\t}\r\n\r\n\tcancelSort(): void {\r\n\t\tthis.indexToSort = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tpreview(media: MediaManagerMedia): void {\r\n\r\n\t\tconst type: MediaManagerMediaType = media.mediaType;\r\n\t\tconst source: FileSource = {\r\n\t\t\tfileName: this.getName(media)\r\n\t\t}\r\n\r\n\t\tif (media.file !== undefined && media.file !== null) {\r\n\t\t\tsource.file = media.file;\r\n\t\t}\r\n\r\n\t\tif (media.originalFileUrl !== '') {\r\n\t\t\tsource.fileUrl = media.originalFileUrl;\r\n\t\t}\r\n\r\n\t\tthis.dialogService.open(MediaManagerPreviewComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\ttype,\r\n\t\t\t\tsource,\r\n\t\t\t\tautoPlay: this.processedConfiguration.autoPlayInPreview\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tchangeValue(): void {\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(this._uploadedMediaFiles);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tthis.valueChanged.emit(this._uploadedMediaFiles);\r\n\t}\r\n\r\n\toverride writeValue(mediaFiles: MediaFiles): void {\r\n\t\tthis._uploadedMediaFiles = mediaFiles;\r\n\t\tif (this.displayStyle === 'single' && mediaFiles.length > 0) {\r\n\t\t\tthis.overrideDisplayStyleFromSingle = true;\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\ttoogleDisplayStyle(): void {\r\n\t\tthis.processedConfiguration.displayStyle = this.processedConfiguration.displayStyle === 'list' ? 'grid' : 'list';\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tgetConditionalClasses(media: MediaManagerMedia, index: number, mode: 'list' | 'grid'): string[] {\r\n\t\tif (this.processedConfiguration.conditionalClasses !== null) {\r\n\t\t\tif (typeof this.processedConfiguration.conditionalClasses === 'function') {\r\n\t\t\t\treturn this.processedConfiguration.conditionalClasses({\r\n\t\t\t\t\tmediaManager: this,\r\n\t\t\t\t\tmedia,\r\n\t\t\t\t\tindex,\r\n\t\t\t\t\tmode\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn this.processedConfiguration.conditionalClasses;\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tgetThumbnail(media: MediaManagerMedia): string {\r\n\t\tlet thumbnail: string | undefined = this.mediaThumbnailCache.get(media.guid) || media.thumbnailUrls[0];\r\n\t\tif (thumbnail === undefined) {\r\n\t\t\tthumbnail = this.getExtensionThumbnail(media.extension);\r\n\t\t\tthis.mediaThumbnailCache.set(media.guid, thumbnail);\r\n\t\t}\r\n\t\treturn thumbnail;\r\n\t}\r\n\r\n\tgetName(media: MediaManagerMedia): string {\r\n\t\treturn media.title[this.processedConfiguration.language] || media.originalFileName;\t\r\n\t}\r\n\r\n\tchangeFullDetailMedia(media: MediaManagerMedia | null): void {\r\n\t\tthis.fullDetailMedia = media;\r\n\t\tif (this.fullDetailMedia !== null) {\r\n\t\t\tthis.fullDetailMediaFormGroup = new FormGroup({\r\n\t\t\t\ttitle: createMultilangFormGroup(this.processedConfiguration.languages, this.fb, ''),\r\n\t\t\t\ttags: createMultilangFormGroup(this.processedConfiguration.languages, this.fb, ''),\r\n\t\t\t\tpublic: this.fb.nonNullable.control(this.fullDetailMedia.public)\r\n\t\t\t});\r\n\t\t\tthis.fullDetailMediaFormGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n\t\t\t\tthis.changeValue();\r\n\t\t\t});\r\n\t\t\tthis.fullDetailMediaFormGroup.patchValue({\r\n\t\t\t\ttitle: this.fullDetailMedia.title,\r\n\t\t\t\ttags: this.fullDetailMedia.tags,\r\n\t\t\t\tpublic: this.fullDetailMedia.public\r\n\t\t\t}, {emitEvent: false});\r\n\t\t\tif (this.isDisabled || this.isReadonly) {\r\n\t\t\t\tthis.fullDetailMediaFormGroup.disable({\r\n\t\t\t\t\temitEvent: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.fullDetailMediaFormGroup = null;\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tsaveFullDetailMedia(): void {\r\n\t\tif (this.fullDetailMedia === null || this.fullDetailMediaFormGroup === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst mediaManagerMedia: MediaManagerMedia | null = this._uploadedMediaFiles.find(({ guid }) => guid === this.fullDetailMedia!.guid) || null;\r\n\t\tif (mediaManagerMedia === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tmediaManagerMedia.title = this.fullDetailMediaFormGroup.controls.title.value;\r\n\t\tmediaManagerMedia.tags = this.fullDetailMediaFormGroup.controls.tags.value;\r\n\t\tmediaManagerMedia.public = this.fullDetailMediaFormGroup.controls.public.value;\r\n\t\tmediaManagerMedia.touched = true;\r\n\r\n\t\tthis.fullDetailMedia = null;\r\n\t\tthis.fullDetailMediaFormGroup = null;\r\n\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tgetGridInfo(media: MediaManagerMedia): string {\r\n\t\tconst info: string[] = [];\r\n\r\n\t\tif (media.width !== null && media.height !== null) {\r\n\t\t\tinfo.push(media.width.toString() + 'x' + media.height.toString());\r\n\t\t}\r\n\r\n\t\tif (media.duration !== null) {\r\n\t\t\tinfo.push(this.durationPipe.transform(media.duration));\r\n\t\t}\r\n\r\n\t\treturn info.join(', ')\r\n\t}\r\n\r\n\tasync validateAndAddFiles(input: FileList | File[] | File | null): Promise<void> {\r\n\t\tconst mediaManagerValidateFilesResult: {error: MediaManagerError | null, mediaManagerValidateFileResults: MediaManagerValidateFileResult[]} = await this.validateFiles(input);\r\n\r\n\t\tconst oldLength: number = this.uploadedMediaFiles.length;\r\n\r\n\t\tfor (let mediaManagerValidateFileResult of mediaManagerValidateFilesResult.mediaManagerValidateFileResults) {\r\n\t\t\tif (mediaManagerValidateFileResult.mediaType !== null) {\r\n\t\t\t\tconst media: MediaManagerMedia = {\r\n\t\t\t\t\tdelete: false,\r\n\t\t\t\t\tduration: mediaManagerValidateFileResult.mediaInfo !== null ? mediaManagerValidateFileResult.mediaInfo.duration : null,\r\n\t\t\t\t\toriginalFileName: mediaManagerValidateFileResult.file.name,\r\n\t\t\t\t\theight: mediaManagerValidateFileResult.mediaInfo !== null ? mediaManagerValidateFileResult.mediaInfo.height : null,\r\n\t\t\t\t\tguid: generateUuid(),\r\n\t\t\t\t\tmediaType: mediaManagerValidateFileResult.mediaType,\r\n\t\t\t\t\tmimeType: mediaManagerValidateFileResult.file.type,\r\n\t\t\t\t\toriginalFileUrl: '',\r\n\t\t\t\t\tpublic: true,\r\n\t\t\t\t\tsource: '',\r\n\t\t\t\t\ttags: {},\r\n\t\t\t\t\tthumbnailUrls: [],\r\n\t\t\t\t\ttitle: {},\r\n\t\t\t\t\ttouched: true,\r\n\t\t\t\t\twidth: mediaManagerValidateFileResult.mediaInfo !== null ? mediaManagerValidateFileResult.mediaInfo.width : null,\r\n\t\t\t\t\textension: '.' + mediaManagerValidateFileResult.file.name.split('.').reverse()[0],\r\n\t\t\t\t\tfileSize: mediaManagerValidateFileResult.file.size,\r\n\t\t\t\t\tthumbnail: MediaManagerThumbnailStatus.DONE,\r\n\t\t\t\t\tupdatedAt: new Date(),\r\n\t\t\t\t\tuploadDate: new Date(),\r\n\t\t\t\t\tuserFullname: null,\r\n\t\t\t\t\tuserId: null,\r\n\t\t\t\t\tfile: mediaManagerValidateFileResult.file\r\n\t\t\t\t};\r\n\t\t\t\tthis._uploadedMediaFiles.push(media);\r\n\r\n\t\t\t\t// Set cache\r\n\t\t\t\tthis.createMediaCache(media.guid, media.mediaType, media.extension, mediaManagerValidateFileResult.file);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.uploadedMediaFiles.length !== oldLength) {\r\n\t\t\tthis.changeValue();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\t\r\n\t\tif (mediaManagerValidateFilesResult.error !== null) {\r\n\t\t\tthis.displayErrors([mediaManagerValidateFilesResult.error]);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tcreateMediaCache(guid: string, mediaType: MediaManagerMediaType, extension: string, file: File): void {\r\n\t\tconst objectUrl: string = URL.createObjectURL(file);\r\n\t\tthis.mediaDataCache.set(guid, objectUrl);\r\n\t\tif (mediaType === MediaManagerMediaType.IMAGE) {\r\n\t\t\tthis.mediaThumbnailCache.set(guid, objectUrl);\r\n\t\t} else {\r\n\t\t\tthis.mediaThumbnailCache.set(guid, this.getExtensionThumbnail(extension));\r\n\t\t\tif (mediaType === MediaManagerMediaType.VIDEO) {\r\n\t\t\t\tcreateVideoThumbnail(objectUrl, 10, 10, (result: string) => {\r\n\t\t\t\t\tthis.mediaThumbnailCache.set(guid, result);\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetExtensionThumbnail(extension: string): string {\r\n\t\textension = extension.split('.').reverse()[0];\r\n\t\tconst canvas: HTMLCanvasElement = document.createElement('canvas');\r\n\t\tcanvas.width = 200;\r\n\t\tcanvas.height = 100;\r\n\t\tconst context: CanvasRenderingContext2D = canvas.getContext('2d');\r\n\t\tcontext.fillStyle = '#cbcbcb';\r\n\t\tcontext.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\tcontext.fillStyle = '#000000';\r\n\t\tcontext.textBaseline = 'middle';\r\n\t\tcontext.font = '30px Arial';\r\n\t\tconst textMetrics: TextMetrics = context.measureText(extension);\r\n\t\tcontext.fillText(extension, (canvas.width / 2) - (textMetrics.width / 2), canvas.height / 2);\r\n\t\treturn canvas.toDataURL('image/jpeg');\r\n\t}\r\n\r\n\tasync cloneFile(file: File): Promise<File | null> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst fileReader: FileReader = new FileReader();\r\n\t\t\tfileReader.onload = () => {\r\n\t\t\t\tif (fileReader.result instanceof ArrayBuffer) {\r\n\t\t\t\t\tresolve(new File([fileReader.result], file.name, {\r\n\t\t\t\t\t\ttype: file.type\r\n\t\t\t\t\t}));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresolve(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfileReader.onerror = () => {\r\n\t\t\t\tresolve(null);\r\n\t\t\t}\r\n\t\t\tfileReader.readAsArrayBuffer(file);\r\n\t\t});\r\n\t}\r\n\r\n\tasync validateFiles(input: FileList | File[] | File | null): Promise<{error: MediaManagerError | null, mediaManagerValidateFileResults: MediaManagerValidateFileResult[]}> {\r\n\r\n\t\treturn new Promise<{error: MediaManagerError | null, mediaManagerValidateFileResults: MediaManagerValidateFileResult[]}>(async (resolve) => {\r\n\r\n\t\t\tif (input === null || ((input instanceof FileList || input instanceof Array) && input.length === 0)) {\r\n\t\t\t\tresolve({\r\n\t\t\t\t\terror: new MediaManagerError(MediaManagerErrorType.INVALID_CONFIGURATION),\r\n\t\t\t\t\tmediaManagerValidateFileResults: []\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\r\n\t\t\t// Check configuration\r\n\t\t\tif (this.processedConfiguration.mediaManager === null) {\r\n\t\t\t\tresolve({\r\n\t\t\t\t\terror: new MediaManagerError(MediaManagerErrorType.INVALID_CONFIGURATION),\r\n\t\t\t\t\tmediaManagerValidateFileResults: []\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Files to upload, create an array\r\n\t\t\tconst rawFilesToUpload: File[] = input instanceof File ? [input] : Array.from(input);\r\n\t\t\tconst filesToUpload: File[] = [];\r\n\r\n\t\t\tfor (let i = 0; i < rawFilesToUpload.length; i++) {\r\n\t\t\t\tconst newFile: File | null = await this.cloneFile(rawFilesToUpload[0]);\r\n\t\t\t\tif (newFile !== null) {\r\n\t\t\t\t\tfilesToUpload.push(newFile);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (filesToUpload.length === 0) {\r\n\t\t\t\tresolve({\r\n\t\t\t\t\terror: new MediaManagerError(MediaManagerErrorType.INVALID_CONFIGURATION),\r\n\t\t\t\t\tmediaManagerValidateFileResults: []\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst filesToUploadCount: number = filesToUpload.length;\r\n\t\t\tconst filesToUploadSize: number = filesToUpload.map(({ size }) => size).reduce((sizeA: number, sizeB: number) => sizeA + sizeB, 0);\r\n\r\n\t\t\t// Check max file count\r\n\t\t\tif (this.processedConfiguration.mediaManager.maxFileCount !== null && this.uploadedMediaFiles.length + filesToUploadCount > this.processedConfiguration.mediaManager.maxFileCount) {\r\n\t\t\t\tresolve({\r\n\t\t\t\t\terror: new MediaManagerError(MediaManagerErrorType.MAX_FILE_COUNT_EXCEEDED),\r\n\t\t\t\t\tmediaManagerValidateFileResults: []\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Detect free size\r\n\t\t\tif (this.processedConfiguration.mediaManager.totalFileSize !== null) {\r\n\t\t\t\tconst remainingFreeSize: number | null = this.remainingFreeSize;\r\n\t\t\t\tif (remainingFreeSize !== null && remainingFreeSize < filesToUploadSize) {\r\n\t\t\t\t\tresolve({\r\n\t\t\t\t\t\terror: new MediaManagerError(MediaManagerErrorType.MAX_FILE_SIZE_GLOBAL_EXCEEDED),\r\n\t\t\t\t\t\tmediaManagerValidateFileResults: []\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Validate files\r\n\t\t\tconst mediaManagerValidateFileResults: MediaManagerValidateFileResult[] = [];\r\n\t\t\tfor (let i = 0; i < filesToUpload.length; i++) {\r\n\t\t\t\tmediaManagerValidateFileResults.push(await mediaManagerValidateFile(filesToUpload[i], this.processedConfiguration));\r\n\t\t\t}\r\n\r\n\t\t\tif (mediaManagerValidateFileResults.length === 0) {\r\n\t\t\t\tresolve({\r\n\t\t\t\t\terror: new MediaManagerError(MediaManagerErrorType.NOTHING_TO_UPLOAD),\r\n\t\t\t\t\tmediaManagerValidateFileResults: []\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Get first error index\r\n\t\t\tconst firstErrorIndex: number = mediaManagerValidateFileResults.findIndex(({ error }) => error !== null);\r\n\r\n\t\t\tif (this.processedConfiguration.errorHandleMethod === 'stop' && firstErrorIndex !== -1) {\r\n\t\t\t\tresolve({\r\n\t\t\t\t\terror: mediaManagerValidateFileResults[firstErrorIndex].error,\r\n\t\t\t\t\tmediaManagerValidateFileResults: []\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tresolve({\r\n\t\t\t\terror: firstErrorIndex !== -1 ? mediaManagerValidateFileResults[firstErrorIndex].error : null,\r\n\t\t\t\tmediaManagerValidateFileResults: firstErrorIndex !== -1 ? mediaManagerValidateFileResults.splice(0, firstErrorIndex) : mediaManagerValidateFileResults\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tselectFiles(): void {\r\n\t\tif (this.processedConfiguration.mediaManager === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst input: HTMLInputElement = document.createElement('input');\r\n\t\tinput.type = 'file';\r\n\t\tinput.multiple = this.processedConfiguration.mediaManager.maxFileCount !== 1;\r\n\t\tinput.accept = this.processedConfiguration.mediaManager.allowedMimeTypes.join(',');\r\n\t\tinput.onchange = () => {\r\n\t\t\tthis.validateAndAddFiles(input.files);\r\n\t\t}\r\n\t\tinput.click();\r\n\t}\r\n\r\n\tdisplayErrors(errors: MediaManagerError[]): void {\r\n\r\n\t\tlet errorTexts: string[] = [];\r\n\r\n\t\tfor (let error of errors) {\r\n\t\t\terrorTexts.push(this.translationPipe.transform('mediamanager.errors.' + error.type, ...error.params));\r\n\t\t}\r\n\r\n\t\tconst text: string = errorTexts.join('\\r');\r\n\r\n\t\tswitch(this.processedConfiguration.errorDisplayMode) {\r\n\t\t\tcase 'dialog':\r\n\t\t\t\tthis.dialogService.showAlert({\r\n\t\t\t\t\ttitle: this.translationPipe.transform('mediamanager.error.title'),\r\n\t\t\t\t\ttext\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'inner':\r\n\t\t\t\tthis.innerErrorDisplayed = true;\r\n\t\t\t\tthis.innerErrorText = text;\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'message':\r\n\t\t\t\tthis.messageService.showDangerMessage(this.translationPipe.transform('mediamanager.error.title'), text);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\thideInnerError(): void {\r\n\t\tthis.innerErrorDisplayed = false;\r\n\t\tthis.innerErrorText = '';\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tloadMediaManager(): void {\r\n\t\tif (this.processedConfiguration.module === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet obs: Observable<MediaManager> | null = null;\r\n\t\tif (this.processedConfiguration.moduleOptionsLoader !== null) {\r\n\t\t\tobs = this.processedConfiguration.moduleOptionsLoader(this.processedConfiguration);\r\n\t\t} else {\r\n\t\t\tobs = this.mediaManagerService.getMediaManager(this.processedConfiguration);\r\n\t\t}\r\n\r\n\t\tif (obs !== null) {\r\n\t\t\tthis.loading = true;\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t\tobs.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((mediaManager: MediaManager) => {\r\n\t\t\t\tthis.processedConfiguration.mediaManager = mediaManager;\r\n\t\t\t}).add(() => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n    clearAndReload(configuration?: MediaManagerConfiguration): void {\r\n        for (const uploadedMediaFile of this._uploadedMediaFiles) {\r\n            uploadedMediaFile.delete = true;\r\n        }\r\n        this.changeValue();\r\n        this.cdr.detectChanges();\r\n        this.reload(configuration);\r\n    }\r\n\r\n    reload(configuration?: MediaManagerConfiguration): void {\r\n        if (configuration !== undefined) {\r\n            this.processedConfiguration = {...MEDIA_MANAGER_DEFAULT_CONFIGURATION, ...configuration};\r\n        }\r\n\t\tthis.disabled = this.processedConfiguration.disabled;\r\n\t\tif (this.processedConfiguration.module !== null) {\r\n\t\t\tthis.loadMediaManager();\r\n\t\t}\r\n    }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.processedConfiguration = {...MEDIA_MANAGER_DEFAULT_CONFIGURATION, ...this.configuration};\r\n\t\tthis.disabled = this.processedConfiguration.disabled;\r\n\t\tif (this.mediaFiles !== null) {\r\n\t\t\tthis._uploadedMediaFiles = [...this.mediaFiles];\r\n\t\t}\r\n\t\tthis.setControlComponent();\r\n\t\tthis.cdr.detectChanges();\r\n\t\tif (this.processedConfiguration.module !== null) {\r\n\t\t\tthis.loadMediaManager();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.globalEventListenerService.clicked.pipe(takeUntilDestroyed()).subscribe((event: Event) => {\r\n\t\t\tif (!(event instanceof PointerEvent)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst isInPath: boolean = inPath(this.element.nativeElement, event);\r\n\t\t\tif (isInPath) {\r\n\t\t\t\tthis.focus();\r\n\t\t\t} else {\r\n\t\t\t\tthis.blur();\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.globalEventListenerService.dragenter.pipe(takeUntilDestroyed(), filter(() => this.processedConfiguration.dropFilesAllowed)).subscribe((event: DragEvent) => {\r\n\t\t\tif (inPath(this.element.nativeElement, event)) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tif (!this.dragDropActive) {\r\n\t\t\t\t\tthis.dragDropActive = true;\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.globalEventListenerService.dragover.pipe(takeUntilDestroyed(), filter(() => this.processedConfiguration.dropFilesAllowed)).subscribe((event: DragEvent) => {\r\n\t\t\tif (this.dragDropActive) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tif (!inPath(this.element.nativeElement, event)) {\r\n\t\t\t\t\tthis.dragDropActive = false;\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.globalEventListenerService.drop.pipe(takeUntilDestroyed(), filter(() => this.processedConfiguration.dropFilesAllowed)).subscribe((event: DragEvent) => {\r\n\t\t\tif (this.dragDropActive && inPath(this.element.nativeElement, event) && event.dataTransfer !== null) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tthis.dragDropActive = false;\r\n\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\tthis.validateAndAddFiles(event.dataTransfer.files);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.translationsService.initModuleTranslation('mediamanager', 'hu', MEDIAMANAGER_LANGUAGES_HU);\r\n\t\tthis.translationsService.initModuleTranslation('mediamanager', 'en-us', MEDIAMANAGER_LANGUAGES_EN);\r\n\t}\r\n\r\n}\r\n\r\n@Component({\r\n\tselector: 'cf-mediamanagermodal',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tMediaManagerComponent,\r\n\t\tButtonDirective,\r\n\t\tTranslationPipe\r\n\t],\r\n\ttemplate: `\r\n\t\t<div class=\"cf-dialog-title cf-mb-4\">{{'mediamanager.modal.title'|translation}}</div>\r\n\t\t<cf-mediamanager [configuration]=\"configuration\" [mediaFiles]=\"mediaFiles\" [modalMode]=\"true\" class=\"cf-flex-grow\"></cf-mediamanager>\r\n\t\t<div class=\"cf-flex cf-flex-spacer-2 cf-mt-4\">\r\n\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t<button cfButton type=\"button\" [severity]=\"'danger'\" [label]=\"'mediamanager.modal.close'|translation\" (click)=\"close()\"></button>\r\n\t\t</div>\r\n\t`,\r\n\tstyles: [\r\n\t\t':host {display: flex; flex-direction: column;}'\r\n\t]\r\n})\r\nexport class MediaManagerModalComponent extends CfDialog implements AfterViewInit {\r\n\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n\tconfiguration: MediaManagerConfiguration = this.config.getData('configuration', {});\r\n\tmediaFiles: MediaFiles = this.config.getData('mediaFiles', []);\r\n\r\n\t@HostBinding('style.width') get width(): string {\r\n\t\treturn this.configuration.width || 'auto';\r\n\t}\r\n\r\n\t@HostBinding('style.height') get heigth(): string {\r\n\t\treturn this.configuration.height || 'auto';\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.config.showCloseIcon = false;\r\n\t\tthis.configuration.showBorder = false;\r\n\t\tthis.cdr.detach();\r\n\t}\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'cf-progressbar',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    template: `\r\n    <div class=\"cf-progressbar\" [ngStyle]=\"{'height': height}\">\r\n        <div *ngIf=\"mode === 'determinate'\" class=\"cf-progressbar-determinate\" [ngClass]=\"{'animated': animated}\" [ngStyle]=\"{'width': percent + '%'}\">\r\n\t\t\t<label *ngIf=\"showValue && unit === '%'\">{{percent}} {{unit}}</label>\r\n\t\t\t<label *ngIf=\"showValue && unit !== '%'\">{{value}} {{unit}}</label>\r\n        </div>\r\n        <div *ngIf=\"mode === 'indeterminate'\" class=\"cf-progressbar-indeterminate\"></div>\r\n    </div>\r\n    `,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ProgressbarComponent implements OnChanges {\r\n\r\n\tprivate cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    @Input() mode: 'determinate' | 'indeterminate' = 'determinate';\r\n    @Input() min: number = 0;\r\n    @Input() value: number = 0;\r\n    @Input() max: number = 100;\r\n    @Input() unit: string = '%';\r\n    @Input() showValue: boolean = true;\r\n\t@Input() animated: boolean = true;\r\n\t@Input() @HostBinding('style.width') width: string = '100%';\r\n\t@Input() height: string = 'auto';\r\n\r\n    percent = 0;\r\n\r\n    calculatePercentage(): void {\r\n\t\tconst value: number = Math.max(this.min, Math.min(this.max, this.value));\r\n\t\tconst percentValue: number = 100 / (this.max - this.min);\r\n\t\tthis.percent = Math.min(Math.ceil((value - this.min) * percentValue), 100);\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['value'] !== undefined) {\r\n            this.calculatePercentage();\r\n        }\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    constructor() {\r\n\t\tthis.cdr.detach();\r\n\t}\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, ElementRef, forwardRef, inject, Input, OnChanges, OnDestroy, OnInit, ViewChild } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { filter, Subscription } from \"rxjs\";\r\nimport { RadioServiceCheckEvent } from \"../../interfaces\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { isOuter } from \"../../shared/helpers/helpers\";\r\nimport { CfRadioService } from \"../../shared/services/radio.service\";\r\nimport { ReadonlyDirective } from \"../../shared\";\r\n\r\n@Component({\r\n\tselector: 'cf-radio',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => RadioComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t],\r\n\tstyleUrls: ['./radio.component.scss'],\r\n\ttemplate: `\r\n        <div class=\"radio\" (click)=\"setValue()\">\r\n            <input #hiddenInput type=\"text\" class=\"cf-hidden-input\" (keyup)=\"keyup($event)\" (focus)=\"focusFromHiddenInput()\" (blur)=\"blur()\" />\r\n            <span class=\"check\" [ngClass]=\"{'checked': checked}\">\r\n                <span class=\"remixicon\" [ngClass]=\"icon\" *ngIf=\"checked\"></span>\r\n            </span>\r\n            <span *ngIf=\"label !== null\" class=\"label\">{{label}}</span>\r\n        </div>\r\n    `\r\n})\r\nexport class RadioComponent extends FormItem implements OnInit, OnDestroy, OnChanges {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\tprivate radioService: CfRadioService = inject(CfRadioService);\r\n\r\n\t@Input() value: any = undefined;\r\n\t@Input() group: string | null = null;\r\n\t@Input() icon = 'check-fill';\r\n\t\r\n\t@ViewChild('hiddenInput') hiddenInput: ElementRef<HTMLInputElement> | undefined = undefined;\r\n\r\n\tchecked: boolean = false;\r\n\r\n\tpreventFocusFromInput: boolean = false;\r\n\r\n\tdocumentClickEventListener: ((event: MouseEvent) => void) | null = null;\r\n\r\n\tradioServiceCheckedSubscription: Subscription | null = null;\r\n\r\n\toverride enterAsTabType: string = 'radio';\r\n\r\n\tkeyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tif (keyboardEvent.code.toLowerCase() === 'space') {\r\n\t\t\tthis.setValue();\r\n\t\t}\r\n\t\tthis.onKeyup.emit(keyboardEvent);\r\n\t}\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.focused) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.focused = true;\r\n\t\tthis.preventFocusFromInput = true;\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprotected focusFromHiddenInput(): void {\r\n\t\tif (this.focused) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.preventFocusFromInput) {\r\n\t\t\tthis.preventFocusFromInput = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.focused = true;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tsetValue(): void {\r\n\t\tif (this.isDisabled || this.isReadonly) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.focused = true;\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n\t\tif (this.checked) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(this.value);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tif (this.group !== null) {\r\n\t\t\tthis.radioService.checked.next({\r\n\t\t\t\tgroup: this.group,\r\n\t\t\t\tvalue: this.value\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.preventFocusFromInput = true;\r\n\t\tthis.checked = true;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\toverride writeValue(value: string): void {\r\n\t\tthis.checked = this.value === value;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tblur(): void {\r\n\t\tthis.focused = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tuncheck(): void {\r\n\t\tthis.checked = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.setControlComponent();\r\n\t\tthis.cdr.detectChanges();\r\n\t\tif (this.group !== null) {\r\n\t\t\tthis.radioServiceCheckedSubscription = this.radioService.checked.pipe(\r\n\t\t\t\tfilter((radioServiceCheckEvent: RadioServiceCheckEvent) => this.group === radioServiceCheckEvent.group)\r\n\t\t\t).subscribe((radioServiceCheckEvent: RadioServiceCheckEvent) => {\r\n\t\t\t\tif (this.value !== radioServiceCheckEvent.value) {\r\n\t\t\t\t\tthis.uncheck();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (this.radioServiceCheckedSubscription !== null) {\r\n\t\t\tthis.radioServiceCheckedSubscription.unsubscribe();\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event) => isOuter([this.element.nativeElement], event))\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.blur();\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => this.hiddenInput !== undefined && event.target !== this.hiddenInput.nativeElement)\r\n\t\t).subscribe(() => {\r\n            this.blur();\r\n\t\t});\r\n\t}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, OnChanges, AfterContentInit, Output, ViewChild, OnInit, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { filter } from 'rxjs';\r\nimport { FormItem } from '../../shared/classes/formitem.class';\r\nimport { isOuter } from '../../shared/helpers/helpers';\r\nimport { ReadonlyDirective } from '../../shared';\r\n\r\n@Component({\r\n    selector: 'cf-switch',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => SwitchComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n\tstyleUrls: ['./switch.component.scss'],\r\n    template: `\r\n\t\t<div class=\"switch\" [ngClass]=\"{'switched': value}\" (click)=\"toggleValue()\">\r\n\t\t\t<input #hiddenInput type=\"text\" class=\"cf-hidden-input\" (keyup)=\"keyup($event)\" (focus)=\"focusFromHiddenInput()\" (blur)=\"blur()\" />\r\n\t\t\t<span class=\"cf-switch-slider\"></span>\r\n\t\t\t<span *ngIf=\"label !== null\" class=\"label\">{{label}}</span>\r\n\t\t</div>\r\n    `\r\n})\r\nexport class SwitchComponent extends FormItem implements OnChanges, AfterContentInit, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n    @Input() value: boolean = false;\r\n\t@Input() square: boolean = false;\r\n\r\n    @Output() onChanged: EventEmitter<boolean | null> = new EventEmitter();\r\n    @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter();\r\n\r\n    @ViewChild('hiddenInput') hiddenInput: ElementRef<HTMLInputElement> | undefined = undefined;\r\n    \r\n\toverride enterAsTabType: string = 'switch';\r\n\r\n    toggleValue(): void {\r\n\t\tif (this.isDisabled || this.isReadonly || this.hiddenInput === undefined) {\r\n\t\t\treturn;\r\n        }\r\n\t\tthis.hiddenInput.nativeElement.focus();\r\n\r\n        this.value = !this.value;\r\n\r\n        if (this.onChangeFn !== null) {\r\n            this.onChangeFn(this.value);\r\n        }\r\n        if (this.onTouchedFn !== null) {\r\n            this.onTouchedFn(this.value);\r\n        }\r\n        this.onChanged.emit(this.value);\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    override writeValue(value: boolean): void {\r\n        this.value = value;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    blur(): void {\r\n        this.focused = false;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    keyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tthis.onKeyup.emit(keyboardEvent);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n        if (keyboardEvent.code.toLowerCase() === 'space') {\r\n            this.toggleValue();\r\n        }\r\n    }\r\n\r\n\tfocusFromHiddenInput(): void {\r\n\t\tif (this.focused) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.focused = true;\r\n        this.cdr.detectChanges();\r\n\t}\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.hiddenInput !== undefined) {\r\n\t\t\tthis.hiddenInput.nativeElement.focus();\r\n\t\t}\r\n\t\tthis.focused = true;\r\n        this.cdr.detectChanges();\r\n\t}\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    ngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n    }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.setControlComponent();\r\n\t}\r\n\t\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event) => isOuter([this.element.nativeElement], event))\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.blur();\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => this.hiddenInput !== undefined && event.target !== this.hiddenInput.nativeElement)\r\n\t\t).subscribe(() => {\r\n            this.blur();\r\n\t\t});\r\n\t}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnChanges } from '@angular/core';\r\nimport { TabViewComponent } from './tabview.component';\r\n\r\n@Component({\r\n    selector: 'cf-tabPanel',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    template: `\r\n        <div *ngIf=\"selected\" class=\"cf-tabpanel\">\r\n            <ng-content *ngIf=\"!disabled\"></ng-content>\r\n            <div *ngIf=\"disabled\" class=\"cf-tabpanel-disabled\">\r\n                <div class=\"cf-tabpanel-disabled-content\">\r\n                    <span class=\"remixicon lock-line\"></span>\r\n                    <span>A tartalom nem megjeleníthető</span>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div *ngIf=\"!selected\"></div>\r\n    `,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TabPanelComponent implements OnChanges {\r\n\r\n\tcdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    tabViewComponent: TabViewComponent | null = null;\r\n\r\n    @Input() title: string | null = null;\r\n    @Input() tag: string | null = null;\r\n    @Input() selected: boolean = false;\r\n    @Input() disabled: boolean = false;\r\n    @Input() titleClasses: string[] = [];\r\n    @Input() hasFormError: boolean = false;\r\n\r\n    disable(): void {\r\n        this.disabled = true;\r\n        this.detectChanges();\r\n    }\r\n\r\n    enable(): void {\r\n        this.disabled = false;\r\n        this.detectChanges();\r\n    }\r\n\r\n    detectChanges(): void {\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    ngOnChanges(): void {\r\n        this.detectChanges();\r\n        if (this.tabViewComponent !== null) {\r\n            this.tabViewComponent.detectChanges();\r\n        }\r\n    }\r\n\r\n    constructor() {\r\n        this.cdr.detach();\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n    Component,\r\n    Input,\r\n    HostBinding,\r\n    ContentChildren,\r\n    QueryList,\r\n    AfterContentInit,\r\n    ViewChild,\r\n    ElementRef,\r\n    ChangeDetectorRef,\r\n    OnInit,\r\n    Output,\r\n    EventEmitter,\r\n\tChangeDetectionStrategy,\r\n\tinject,\r\n    OnChanges\r\n} from '@angular/core';\r\nimport { isOuter, selectIndexMinMax } from '../../shared/helpers/helpers';\r\nimport { TabPanelComponent } from './tabpanel.component';\r\n\r\n@Component({\r\n    selector: 'cf-tabView',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    template: `\r\n        <div class=\"cf-tabview\" [ngClass]=\"{'focused': focused}\">\r\n            <input #input class=\"hidden-input\" (focus)=\"focusFromHiddenInput()\" (keydown)=\"keydown($event)\" />\r\n            <div class=\"cf-tabview-header\" [ngClass]=\"{'closeable': closeable}\" *ngIf=\"!hideTabs\">\r\n                <div #header class=\"cf-tabview-header-items\" (wheel)=\"headerScroll($event)\">\r\n                    <span *ngFor=\"let tabPanel of tabPanels; let i = index;\" (click)=\"selectTabPanel(i)\" class=\"cf-tabview-header-item\" [ngClass]=\"getClasses(i)\">\r\n                        <span class=\"remixicon error-warning-line\" *ngIf=\"tabPanel.hasFormError\"></span>\r\n                        <span class=\"cf-tabview-header-item-title\">{{tabPanel.title}}</span>\r\n                    </span>\r\n                </div>\r\n                <div *ngIf=\"closeable\" class=\"close-icon\" (click)=\"toggleClosed()\"><span class=\"remixicon\" [ngClass]=\"{'arrow-down-line': closed, 'arrow-up-line': !closed}\"></span></div>\r\n            </div>\r\n            <div class=\"cf-tabpanels\" *ngIf=\"!closed\">\r\n                <ng-content></ng-content>\r\n            </div>\r\n        </div>\r\n    `,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TabViewComponent implements AfterContentInit, OnInit, OnChanges {\r\n\r\n\tprivate cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\tprivate el: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n    @ViewChild('input') input: ElementRef<HTMLInputElement> | null = null;\r\n\r\n    @Input() selectedTabpanelIndex: number = 0;\r\n    @Input() disabled: boolean = false;\r\n    @Input() @HostBinding('style.height') height: string = '100%';\r\n    @Input() hideTabs: boolean = false;\r\n    @Input() closeable: boolean = false;\r\n    @Input() closed: boolean = false;\r\n\r\n    @Output() tabPanelSelected: EventEmitter<{\r\n        index: number,\r\n        tabPanel: TabPanelComponent\r\n    }> = new EventEmitter();\r\n\r\n    @Output() onClose: EventEmitter<boolean> = new EventEmitter();\r\n\r\n\r\n    @ContentChildren(TabPanelComponent) protected tabPanelsQueryList: QueryList<TabPanelComponent> = new QueryList();\r\n\r\n    @ViewChild('header') protected header: ElementRef<HTMLDivElement> | undefined = undefined;\r\n\r\n    protected focused = false;\r\n\r\n    protected documentClickEventListener: ((event: MouseEvent) => void) | null = null;\r\n\r\n    protected tabPanels: TabPanelComponent[] = [];\r\n\r\n    protected headerScroll(wheelEvent: WheelEvent): void {\r\n        if (this.header === undefined) {\r\n            return;\r\n        }\r\n\r\n        this.header.nativeElement.scrollLeft += wheelEvent.deltaY;\r\n    }\r\n\r\n    protected toggleClosed(): void {\r\n        if (!this.closeable) {\r\n            return;\r\n        }\r\n        this.setClosedState(!this.closed);\r\n    }\r\n\r\n    get selectedTabpanelTag(): string | null {\r\n        if (this.tabPanels[this.selectedTabpanelIndex] === undefined) {\r\n            return null;\r\n        }\r\n        return this.tabPanels[this.selectedTabpanelIndex].tag;\r\n    }\r\n\r\n    close(): void {\r\n        this.setClosedState(true);\r\n    }\r\n\r\n    open(): void {\r\n        this.setClosedState(false);\r\n    }\r\n\r\n    private setClosedState(closed: boolean): void {\r\n        this.closed = closed;\r\n\t\tthis.cdr.detectChanges();\r\n        this.onClose.emit(this.closed);\r\n    }\r\n\r\n    protected getClasses(index: number): string[] {\r\n        const classes: string[] = [];\r\n        if (index === this.selectedTabpanelIndex) {\r\n            classes.push('active-tab');\r\n        }\r\n        if (this.tabPanels[index].disabled) {\r\n            classes.push('disabled-tab');\r\n        }\r\n        classes.push(...this.tabPanels[index].titleClasses);\r\n        if (this.tabPanels[index].hasFormError) {\r\n            classes.push('cf-form-error');\r\n        }\r\n        return classes;\r\n    }\r\n\r\n    protected focusFromHiddenInput(): void {\r\n        this.focused = true;\r\n        this.bindDocumentClickListener();\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    selectTabPanel(input: number | string, preventFocus: boolean = false): void {\r\n        if (typeof input === 'number') {\r\n            if (this.tabPanels[input] === undefined) {\r\n                return;\r\n            }\r\n        } else {\r\n            if (this.tabPanels.find(({ tag }) => tag === input) === undefined) {\r\n                return;\r\n            }\r\n        }\r\n        this.selectedTabpanelIndex = typeof input === 'number' ? input : this.tabPanels.findIndex(({ tag }) => tag === input);\r\n        this.tabPanels.forEach((tabPanel: TabPanelComponent, i: number) => {\r\n            tabPanel.selected = this.selectedTabpanelIndex === i;\r\n            tabPanel.detectChanges();\r\n        });\r\n\t\tthis.cdr.detectChanges();\r\n        if (this.input !== null && !preventFocus) {\r\n            this.input.nativeElement.focus();\r\n        }\r\n        this.tabPanelSelected.emit({\r\n            index: this.selectedTabpanelIndex,\r\n            tabPanel: this.tabPanels[this.selectedTabpanelIndex]\r\n        });\r\n    }\r\n\r\n    protected keydown(keyboardEvent: KeyboardEvent): void {\r\n        if (keyboardEvent.key.toLowerCase() === 'arrowleft' || keyboardEvent.key.toLowerCase() === 'arrowright') {\r\n            const nextIndex: number | null = selectIndexMinMax(this.selectedTabpanelIndex, keyboardEvent.key.toLowerCase() === 'arrowleft' ? 'up' : 'down', this.tabPanels.length - 1);\r\n            if (nextIndex !== null) {\r\n                this.selectTabPanel(nextIndex);\r\n            }\r\n        }\r\n        if (keyboardEvent.key.toLowerCase() === 'tab') {\r\n            this.blur();\r\n        }\r\n    }\r\n\r\n    protected blur(): void {\r\n        if (this.input !== null) {\r\n            this.input.nativeElement.blur();\r\n        }\r\n        this.unbindDocumentClickListener();\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    protected bindDocumentClickListener(): void {\r\n        if (this.documentClickEventListener !== null) {\r\n            return;\r\n        }\r\n        this.documentClickEventListener = this.documentClicked.bind(this);\r\n        document.addEventListener('click', this.documentClickEventListener);\r\n    }\r\n\r\n    protected unbindDocumentClickListener(): void {\r\n        if (this.documentClickEventListener === null) {\r\n            return;\r\n        }\r\n        document.removeEventListener('click', this.documentClickEventListener);\r\n        this.documentClickEventListener = null;\r\n    }\r\n\r\n    protected documentClicked(event: MouseEvent): void {\r\n        if (isOuter([this.el.nativeElement], event)) {\r\n            this.blur();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Disable the tab at given index\r\n     * \r\n     * @param index Index of tab\r\n     * @returns `void`\r\n     */\r\n    disable(index: number): void {\r\n        if (this.tabPanels[index] === undefined || this.tabPanels[index].disabled) {\r\n            return;\r\n        }\r\n        this.tabPanels[index].disable();\r\n    }\r\n\r\n    /**\r\n     * Enables the tab at given index\r\n     * \r\n     * @param index Index of tab\r\n     * @returns `void`\r\n     */\r\n    enable(index: number): void {\r\n        if (this.tabPanels[index] === undefined || !this.tabPanels[index].disabled) {\r\n            return;\r\n        }\r\n        this.tabPanels[index].enable();\r\n    }\r\n\r\n    update(selectedTabpanelIndex: number | null = null): void {\r\n        this.tabPanels = this.tabPanelsQueryList.toArray();\r\n        if (selectedTabpanelIndex !== null) {\r\n            this.selectedTabpanelIndex = selectedTabpanelIndex;\r\n        }\r\n        if (this.selectedTabpanelIndex > this.tabPanels.length - 1) {\r\n            this.selectedTabpanelIndex = this.tabPanels.length - 1;\r\n        }\r\n        if (this.selectedTabpanelIndex < 0) {\r\n            this.selectedTabpanelIndex = 0;\r\n        }\r\n        this.selectTabPanel(this.selectedTabpanelIndex);\r\n    }\r\n\r\n    ngAfterContentInit(): void {\r\n        this.tabPanels = this.tabPanelsQueryList.toArray();\r\n        for (let i = 0; i < this.tabPanels.length; i++) {\r\n            this.tabPanels[i].tabViewComponent = this;\r\n        }\r\n        this.selectTabPanel(this.selectedTabpanelIndex);\r\n    }\r\n\r\n    /**\r\n     * Runs change detection\r\n     */\r\n    detectChanges(): void {\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * Angular `ngOnChanges`\r\n     */\r\n    ngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * Angular `ngOnInit`\r\n     */\r\n    ngOnInit(): void {\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n    constructor() {\r\n        this.cdr.detach();\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild, inject, OnChanges, OnInit } from '@angular/core';\r\nimport { FormItem } from '../../shared/classes/formitem.class';\r\nimport { isOuter } from '../../shared/helpers/helpers';\r\nimport { CfDialogService } from '../../shared/services/dialog.service';\r\nimport { CfDialogConfiguration, ConfirmConfiguration } from '../../interfaces';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { filter } from 'rxjs';\r\nimport { ReadonlyDirective } from '../../shared';\r\n\r\n@Component({\r\n    selector: 'cf-tags',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => TagsComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n    template: `\r\n        <div class=\"cf-tag-items cf-mb-4\" *ngIf=\"value.length > 0\">\r\n            <div class=\"cf-tag cf-tag-primary\" *ngFor=\"let tag of value; let i = index;\">\r\n                <span [ngStyle]=\"{'max-width': tagsMaxWidth}\">{{tag}}</span>\r\n                <span class=\"remixicon close-line\" (click)=\"delete(i)\"></span>\r\n            </div>\r\n        </div>\r\n        <div class=\"cf-input-container cf-flex-grow\">\r\n            <div class=\"cf-floating-label-container\">\r\n                <input #input [disabled]=\"isDisabled\" [readonly]=\"isReadonly\" (focus)=\"focus()\" (blur)=\"blur()\" (keyup)=\"keyup($event)\" class=\"cf-input-container-default-input\" />\r\n                <label class=\"cf-floating-label\" [ngClass]=\"{'float': focused || filled}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n            </div>\r\n        </div>\r\n        <div class=\"dropdown-items\" [ngStyle]=\"{'max-height': height}\" *ngIf=\"opened\">\r\n            <div class=\"dropdown-item\" [ngClass]=\"{'hovered': i === selectedItemIndex}\" *ngFor=\"let filteredValue of values; let i = index;\" (click)=\"selectTag($event, filteredValue)\" (mouseenter)=\"selectItemIndex(i)\" (mouseleave)=\"selectItemIndex(null)\">{{filteredValue}}</div>\r\n        </div>\r\n    `,\r\n    host: {\r\n        class: 'cf-tags'\r\n    }\r\n})\r\nexport class TagsComponent extends FormItem implements AfterViewInit, OnChanges, OnInit {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n    \r\n    public dialogService: CfDialogService = inject(CfDialogService);\r\n\r\n    @ViewChild('input') input: ElementRef<HTMLInputElement> | null = null;\r\n\r\n    @Input() values: string[] = [];\r\n    @Input() value: string[] = [];\r\n    @Input() deleteWithConfirm: boolean = false;\r\n    @Input() deleteConfirmConfiguration: ConfirmConfiguration | null = null;\r\n    @Input() deleteConfirmDialogConfiguration: CfDialogConfiguration = {};\r\n    @Input() height: string = '250px';\r\n    @Input() tagsMaxWidth: string = 'auto';\r\n\r\n    @Output() onChanged: EventEmitter<string[]> = new EventEmitter();\r\n    @Output() onFocus: EventEmitter<void> = new EventEmitter();\r\n    @Output() onBlur: EventEmitter<void> = new EventEmitter();\r\n\r\n\toverride enterAsTabType: string = 'tags';\r\n\r\n    opened = false;\r\n\r\n    selectedItemIndex: number | null = null;\r\n\r\n    get filled(): boolean {\r\n        if (this.input === null) {\r\n            return false;\r\n        }\r\n        return this.values.length > 0 || this.input.nativeElement.value.length > 0;\r\n    }\r\n\r\n    delete(tagIndex: number): void {\r\n\t\tif (this.isReadonly || this.isDisabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n        if (this.deleteWithConfirm) {\r\n            this.deleteConfirm(tagIndex);\r\n        } else {\r\n            this.deleteTag(tagIndex);\r\n        }\r\n    }\r\n\r\n    private deleteConfirm(tagIndex: number): void {\r\n        this.dialogService.confirmAccept(this.deleteConfirmConfiguration, this.deleteConfirmDialogConfiguration).then(() => {\r\n            this.deleteTag(tagIndex);\r\n        });\r\n    }\r\n\r\n    private deleteTag(tagIndex: number): void {\r\n        this.value.splice(tagIndex, 1);\r\n        this.cdr.detectChanges();\r\n        this.valueChanged();\r\n    }\r\n\r\n    documentClicked(event: MouseEvent): void {\r\n        const outerClicked: boolean = isOuter([this.element.nativeElement], event);\r\n        if (outerClicked) {\r\n            this.blur();\r\n            this.close();\r\n        }\r\n    }\r\n\r\n    override focus(): void {\r\n        if (this.isReadonly || this.isDisabled) {\r\n            return;\r\n        }\r\n        this.focused = true;\r\n        if (this.values.length > 0) {\r\n            this.open();\r\n        }\r\n        this.cdr.detectChanges();\r\n        this.onFocus.emit();\r\n    }\r\n\r\n    blur(): void {\r\n        this.focused = false;\r\n\t\tthis.close();\r\n        this.cdr.detectChanges();\r\n        this.onBlur.emit();\r\n    }\r\n\r\n    selectTag(event: MouseEvent, value: string): void {\r\n\t\tevent.stopPropagation();\r\n        this.addValue(value);\r\n    }\r\n\r\n    selectItemIndex(index: number | null): void {\r\n        this.selectedItemIndex = index;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    override writeValue(value: string[] | null): void {\r\n        this.value = value === null ? [] : value;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    keyup(event: KeyboardEvent): void {\r\n        if (this.input === null) {\r\n            return;\r\n        }\r\n        if (event.key.toLowerCase() === 'arrowdown') {\r\n            if (!this.opened) {\r\n                this.open();\r\n            } else {\r\n                let selectedItemIndex: number | null = this.selectedItemIndex;\r\n                if (selectedItemIndex === null) {\r\n                    selectedItemIndex = 0;\r\n                } else {\r\n                    selectedItemIndex = selectedItemIndex + 1;\r\n                    if (selectedItemIndex > this.values.length - 1) {\r\n                        selectedItemIndex = 0;\r\n                    }\r\n                }\r\n                this.selectItemIndex(selectedItemIndex);\r\n            }\r\n        }\r\n        if (event.key.toLowerCase() === 'arrowup') {\r\n            if (!this.opened) {\r\n                this.open();\r\n            } else {\r\n                let selectedItemIndex: number | null = this.selectedItemIndex;\r\n                if (selectedItemIndex === null) {\r\n                    selectedItemIndex = this.values.length - 1;\r\n                } else {\r\n                    selectedItemIndex = selectedItemIndex - 1;\r\n                    if (selectedItemIndex < 0) {\r\n                        selectedItemIndex = this.values.length - 1;\r\n                    }\r\n                }\r\n                this.selectItemIndex(selectedItemIndex);\r\n            }\r\n        }\r\n        if (event.key.toLowerCase() === 'enter') {\r\n            if (this.selectedItemIndex !== null) {\r\n                this.addValue(this.values[this.selectedItemIndex]);\r\n            } else {\r\n                if (this.input.nativeElement.value.trim() === '') {\r\n                    return;\r\n                }\r\n                this.addValue(this.input.nativeElement.value);\r\n            }\r\n            this.cdr.detectChanges();\r\n            this.input.nativeElement.value = '';\r\n        }\r\n\t\tthis.onKeyup.emit(event);\r\n\r\n    }\r\n\r\n\tvalueChanged(): void {\r\n        if (this.onChangeFn !== null) {\r\n            this.onChangeFn(this.value);\r\n        }\r\n        if (this.onTouchedFn !== null) {\r\n            this.onTouchedFn(this.value);\r\n        }\r\n        this.onChanged.emit(this.value);\r\n\t}\r\n\r\n    addValue(value: string): void {\r\n        if (this.value.includes(value)) {\r\n            return;\r\n        }\r\n        this.value.push(value);\r\n\t\tthis.valueChanged();\r\n\t\tthis.close();\r\n    }\r\n\r\n    open(): void {\r\n        if (this.opened) {\r\n            return;\r\n        }\r\n        this.opened = true;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    close(): void {\r\n        if (!this.opened) {\r\n            return;\r\n        }\r\n        this.opened = false;\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n\t}\r\n\r\n    ngOnInit(): void {\r\n        this.setControlComponent();\r\n    }\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n            filter((event) => isOuter([this.element.nativeElement], event))\r\n\t\t).subscribe(() => {\r\n            this.blur();\r\n            this.close();\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => this.input !== undefined && event.target !== this.input.nativeElement)\r\n\t\t).subscribe(() => {\r\n            this.blur();\r\n            this.close();\r\n\t\t});\r\n\t}\r\n}\r\n","import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, inject, Input, OnChanges, OnInit, Output, QueryList, SimpleChanges, TemplateRef } from \"@angular/core\";\r\nimport { ControlValueAccessor } from \"@angular/forms\";\r\nimport { TreeLike, TreeNode, TreeNodeOrderParams, TreeNodesQueryFilterFunction } from '../../interfaces';\r\nimport { Observable } from 'rxjs';\r\nimport { selectAllNodes, closeAllNodes, convertToTreeNodes, deselectAllNodes, getSelectedNodes, openAllNodes, openPartialAndSelectedNodes, selectNodeValues, setAllParentStatus, searchNodeChildren, setNodesVisibilityByQueryFunction, setNodesVisibilityVisibleAll } from \"../../shared/helpers/tree.helpers\";\r\nimport { NgClass, NgFor, NgIf, NgStyle, NgTemplateOutlet } from \"@angular/common\";\r\nimport { arrayMove, CfTemplate, ReadonlyDirective } from \"../../shared\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\n\r\n@Component({\r\n\tselector: 'cf-tree',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tNgFor,\r\n\t\tNgIf,\r\n\t\tNgStyle,\r\n\t\tNgClass,\r\n\t\tNgTemplateOutlet\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => TreeComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n    styleUrls: ['./tree.component.scss'],\r\n\ttemplate: `\r\n\t\t<ng-template #treeNode let-nodes let-level=\"level\">\r\n\t\t\t<ng-container *ngFor=\"let node of nodes; let nodeIndex = index;\">\r\n\t\t\t\t<ng-container *ngIf=\"node.visible\">\r\n\t\t\t\t\t<div class=\"node-check\" [ngClass]=\"{'hover': node === hoveredNode, 'disabled': disabled}\" *ngIf=\"selectable\" (click)=\"changeNodeSelection(node)\" (mouseenter)=\"hoverNode(node)\" (mouseleave)=\"blurNode()\">\r\n\t\t\t\t\t\t<span class=\"remixicon subtract-line\" *ngIf=\"node.partialSelected\"></span>\r\n\t\t\t\t\t\t<span class=\"remixicon check-fill\" *ngIf=\"!node.partialSelected && node.selected\"></span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"node-title cf-overflow-hidden cf-white-space-nowrap cf-text-overflow-ellipsis\" [ngClass]=\"{'hover': node === hoveredNode}\" [ngStyle]=\"{'padding-left.px': level * levelGap}\" (mouseenter)=\"hoverNode(node)\" (mouseleave)=\"blurNode()\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"itemTemplate === null\">{{node.data[labelId]}}</ng-container>\r\n\t\t\t\t\t\t<ng-container *ngIf=\"itemTemplate !== null\">\r\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: node, label: node.data[labelId], data: node.data}\"></ng-container>\r\n\t\t\t\t\t\t</ng-container>\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"node-buttons cf-ml-auto cf-flex cf-flex-justify-content-flex-end\" [ngClass]=\"{'hover': node === hoveredNode, 'disabled': isDisabled}\" (mouseenter)=\"hoverNode(node)\" (mouseleave)=\"blurNode()\">\r\n\t\t\t\t\t\t<span class=\"node-button node-button-openclose\" *ngIf=\"selectedNode === null && displayOpenCloseButtons && node.children.length > 0 && !node.opened\" (click)=\"openNode(node)\"><span class=\"remixicon add-line\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-openclose\" *ngIf=\"selectedNode === null && displayOpenCloseButtons && node.children.length > 0 && node.opened\" (click)=\"closeNode(node)\"><span class=\"remixicon subtract-line\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-move\" *ngIf=\"selectedNode === null && sortable && !filtered && nodeIndex !== nodes.length - 1\" (click)=\"orderNode(node, 'down')\"><span class=\"remixicon arrow-down-s-line\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-move\" *ngIf=\"selectedNode === null && sortable && !filtered && nodeIndex !== 0\" (click)=\"orderNode(node, 'up')\"><span class=\"remixicon arrow-up-s-line\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-delete\" *ngIf=\"selectedNode === null && node.children.length === 0 && deletable\" (click)=\"deleteNode(node)\"><span class=\"remixicon close-line\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-delete\" *ngIf=\"selectedNode === null && node.children.length !== 0 && deletable && !deleteOnlyChild\" (click)=\"deleteNode(node)\"><span class=\"remixicon close-line\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-select\" *ngIf=\"movable && selectedNode === null || movable && selectedNode !== null && selectedNode === node\" (click)=\"selectNode(node)\"><span class=\"remixicon\" [ngClass]=\"{'drag-move-2-fill': selectedNode !== node, 'close-fill': selectedNode === node}\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-select-target\" *ngIf=\"movable && selectedNode !== null && selectedNode !== node && allowedMove(node)\" (click)=\"moveNode(node)\"><span class=\"remixicon arrow-drop-down-fill\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-edit\" *ngIf=\"editable && (editableFilter === null || editableFilter(node))\" (click)=\"edit(node)\"><span class=\"remixicon pencil-line\"></span></span>\r\n\t\t\t\t\t\t<span class=\"node-button node-button-create\" *ngIf=\"create && (createFilter === null || createFilter(node))\" (click)=\"createStart(node)\"><span class=\"remixicon add-line\"></span></span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-container *ngIf=\"node.opened\">\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNode; context: {$implicit: node.children, level: level + 1}\"></ng-container>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\t\t</ng-template>\r\n\t\t<div class=\"tree\" [ngStyle]=\"{'height': height}\" [ngClass]=\"{'selectable': selectable}\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"treeNode; context: {$implicit: treeNodes, level: 0}\"></ng-container>\r\n\t\t</div>\r\n\t`\r\n})\r\nexport class TreeComponent<T = any> extends FormItem implements OnInit, OnChanges, AfterContentInit, ControlValueAccessor {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\t@Input() values: TreeLike<T>[] = [];\r\n\t@Input() value: any[] = [];\r\n\t@Input() labelId: string = 'label';\r\n\t@Input() valueId: string = 'value';\r\n\t@Input() topValuesOnly: boolean = true;\r\n\t@Input() leafValuesOnly: boolean = false;\r\n\t@Input() nodesAsValues: boolean = false;\r\n\t@Input() displayOpenCloseButtons: boolean = true;\r\n\t@Input() sortable: boolean = false;\r\n\t@Input() movable: boolean = false;\r\n\t@Input() deletable: boolean = true;\r\n\t@Input() deleteOnlyChild: boolean = false;\r\n\t@Input() deleteWithConfirm: boolean = false;\r\n\t@Input() beforeDeleteCallback: ((node: TreeNode<T>) => (boolean | Observable<boolean>)) | null = null;\r\n\t@Input() selectable: boolean = true;\r\n\t@Input() beforeOrderCallback: ((params: TreeNodeOrderParams<T>) => (boolean | Observable<boolean>)) | null = null;\r\n\t@Input() beforeMoveCallback: ((node: TreeNode<T>) => (boolean | Observable<boolean>)) | null = null;\r\n\t@Input() height: string = 'auto';\r\n\t@Input() editable: boolean = false;\r\n\t@Input() editableFilter: ((node: TreeNode<T>) => boolean) | null = null;\r\n\t@Input() create: boolean = false;\r\n\t@Input() createFilter: ((node: TreeNode<T>) => boolean) | null = null;\r\n\t@Input() queryFilter: TreeNodesQueryFilterFunction<T> | null = null;\r\n\t@Input() levelGap: number = 20;\r\n\r\n\t@Output() editStarted: EventEmitter<TreeNode<T>> = new EventEmitter();\r\n\t@Output() createStarted: EventEmitter<TreeNode<T>> = new EventEmitter(); \r\n\t@Output() valueChanged: EventEmitter<any[]> = new EventEmitter();\r\n\r\n\ttreeNodes: TreeNode<T>[] = [];\r\n\r\n\tselectedNode: TreeNode<T> | null = null;\r\n\thoveredNode: TreeNode<T> | null = null;\r\n\r\n\titemTemplate: TemplateRef<any> | null = null;\r\n\r\n\tfiltered = false;\r\n\r\n\toverride enterAsTabType: string = 'tree';\r\n\r\n\t@ContentChildren(CfTemplate) templates: QueryList<CfTemplate> = new QueryList();\r\n\r\n\tclearFilter(): void {\r\n\t\tthis.filtered = false;\r\n\t\tsetNodesVisibilityVisibleAll(this.treeNodes);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tfilter(query: string): void {\r\n\t\tif (this.queryFilter === null || query === '') {\r\n\t\t\tthis.filtered = false;\r\n\t\t\tsetNodesVisibilityVisibleAll(this.treeNodes);\r\n\t\t} else {\r\n\t\t\tthis.filtered = true;\r\n\t\t\tsetNodesVisibilityByQueryFunction(this.treeNodes, this.queryFilter, query);\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\thoverNode(node: TreeNode<T>): void {\r\n\t\tthis.hoveredNode = node;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tblurNode(): void {\r\n\t\tthis.hoveredNode = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.setControlComponent();\r\n\t\tthis.convertToTreeNodes();\r\n\t}\r\n\r\n\tconvertToTreeNodes(): void {\r\n\t\tthis.treeNodes = convertToTreeNodes(this.values);\r\n\t\tdeselectAllNodes(this.treeNodes);\r\n\t\tselectNodeValues(this.treeNodes, this.valueId as any, this.value);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\topenNode(node: TreeNode<T>): void {\r\n\t\tnode.opened = true;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tcloseNode(node: TreeNode<T>): void {\r\n\t\tnode.opened = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tchangeNodeSelection(node: TreeNode<T>): void {\r\n\t\tif (!this.selectable || this.isDisabled || this.isReadonly) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (node.partialSelected) {\r\n\t\t\tnode.partialSelected = false;\r\n\t\t\tnode.selected = true;\r\n\t\t} else {\r\n\t\t\tif (node.selected) {\r\n\t\t\t\tnode.selected = false;\r\n\t\t\t} else {\r\n\t\t\t\tnode.selected = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (node.selected) {\r\n\t\t\tselectAllNodes(node.children);\r\n\t\t} else {\r\n\t\t\tdeselectAllNodes(node.children);\r\n\t\t}\r\n\t\tif (node.parent !== null) {\r\n\t\t\tsetAllParentStatus(node.parent);\r\n\t\t}\r\n\r\n\t\t// SET VALUE\r\n\t\tthis.changeValue();\r\n\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(this.value);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tchangeValue(): void {\r\n\t\tlet selectedNodes: TreeNode<T>[] = [];\r\n\t\tif (this.leafValuesOnly) {\r\n\t\t\tselectedNodes = getSelectedNodes(this.treeNodes).filter((selectedNode: TreeNode<T>) => selectedNode.children.length === 0);\r\n\t\t} else {\r\n\t\t\tselectedNodes = getSelectedNodes(this.treeNodes, this.topValuesOnly);\r\n\t\t}\r\n\t\tif (this.nodesAsValues) {\r\n\t\t\tthis.value = selectedNodes;\r\n\t\t} else {\r\n\t\t\tthis.value = selectedNodes.map((treeNode: TreeNode<T>) => treeNode.data[this.valueId]);\r\n\t\t}\r\n\t\tthis.valueChanged.emit(this.value);\r\n\t}\r\n\r\n\toverride writeValue(value: any[] = []): void {\r\n\t\tthis.value = value;\r\n\t\tdeselectAllNodes(this.treeNodes);\r\n\t\tselectNodeValues(this.treeNodes, this.valueId as any, this.value);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tcloseAllNodes(): void {\r\n\t\tcloseAllNodes(this.treeNodes);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\topenAllNodes(): void {\r\n\t\topenAllNodes(this.treeNodes);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tselectAllNodes(): void {\r\n\t\tselectAllNodes(this.treeNodes);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tdeselectAllNodes(): void {\r\n\t\tdeselectAllNodes(this.treeNodes);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\topenPartialAndSelectedNodes(): void {\r\n\t\topenPartialAndSelectedNodes(this.treeNodes);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tselectNode(node: TreeNode<T>): void {\r\n\t\tif (node === this.selectedNode) {\r\n\t\t\tthis.selectedNode = null;\r\n\t\t} else {\r\n\t\t\tthis.selectedNode = node;\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tmoveNode(node: TreeNode<T>): void {\r\n\t\tif (this.beforeMoveCallback !== null) {\r\n\t\t\tconst result: boolean | Observable<boolean> = this.beforeMoveCallback(node);\r\n\t\t\tif (typeof result === 'boolean') {\r\n\t\t\t\tif (result === true) {\r\n\t\t\t\t\tthis.move(node);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult.subscribe((value: boolean) => {\r\n\t\t\t\t\tif (value === true) {\r\n\t\t\t\t\t\tthis.move(node);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.move(node);\r\n\t}\r\n\r\n\tedit(node: TreeNode<T>): void {\r\n\t\tthis.editStarted.emit(node);\r\n\t}\r\n\r\n\tcreateStart(node: TreeNode<T>): void {\r\n\t\tthis.createStarted.emit(node);\r\n\t}\r\n\r\n\tmove(node: TreeNode<T>): void {\r\n\t\tif (node === this.selectedNode || this.selectedNode === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnode.children.push({...this.selectedNode, parent: node,});\r\n\t\tthis.removeNode(this.selectedNode);\r\n\t\tthis.selectedNode = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tallowedMove(node: TreeNode<T>): boolean {\r\n\t\tconst nodes: TreeNode<T>[] = [...searchNodeChildren(this.selectedNode), this.selectedNode];\r\n\t\tif (this.selectedNode.parent !== null) {\r\n\t\t\tnodes.push(this.selectedNode.parent);\r\n\t\t}\r\n\t\treturn !nodes.includes(node);\r\n\t}\r\n\r\n\tdeleteNode(node: TreeNode<T>): void {\r\n\t\tif (this.beforeDeleteCallback !== null) {\r\n\t\t\tconst result: boolean | Observable<boolean> = this.beforeDeleteCallback(node);\r\n\t\t\tif (typeof result === 'boolean') {\r\n\t\t\t\tif (result === true) {\r\n\t\t\t\t\tthis.removeNode(node);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult.subscribe((value: boolean) => {\r\n\t\t\t\t\tif (value === true) {\r\n\t\t\t\t\t\tthis.removeNode(node);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.removeNode(node);\r\n\t}\r\n\r\n\tprivate removeNode(node: TreeNode<T>): void {\r\n\t\tconst nodeList: TreeNode<T>[] = node.parent !== null ? node.parent.children : this.treeNodes;\r\n\t\tconst actualIndex: number = nodeList.indexOf(node);\r\n\t\tnodeList.splice(actualIndex, 1);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\torderNode(node: TreeNode<T>, way: 'up'|'down'): void {\r\n\t\tif (this.beforeOrderCallback !== null) {\r\n\t\t\tconst siblingsValues: any[] = (node.parent === null ? this.treeNodes : node.parent.children).map(({data}) => data[this.valueId]);\r\n\t\t\tconst oldPosition: number = siblingsValues.indexOf(node.data[this.valueId]);\r\n\t\t\tconst newPosition: number = way === 'up' ? oldPosition - 1 : oldPosition + 1;\r\n\t\t\tconst result: boolean | Observable<boolean> = this.beforeOrderCallback({\r\n\t\t\t\tnode,\r\n\t\t\t\tway,\r\n\t\t\t\tparent: node.parent,\r\n\t\t\t\tsiblingsValues,\r\n\t\t\t\tsiblingsValuesAfter: arrayMove(siblingsValues, oldPosition, newPosition),\r\n\t\t\t\toldPosition,\r\n\t\t\t\tnewPosition\r\n\t\t\t});\r\n\t\t\tif (typeof result === 'boolean') {\r\n\t\t\t\tif (result === true) {\r\n\t\t\t\t\tthis.order(node, way);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult.subscribe((value: boolean) => {\r\n\t\t\t\t\tif (value === true) {\r\n\t\t\t\t\t\tthis.order(node, way);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.order(node, way);\r\n\t}\r\n\r\n\torder(node: TreeNode<T>, way: 'up'|'down'): void {\r\n\t\tconst nodeList: TreeNode<T>[] = node.parent !== null ? node.parent.children : this.treeNodes;\r\n\t\tconst actualIndex: number = nodeList.indexOf(node);\r\n\t\tconst replaceIndex: number = way === 'down' ? actualIndex + 1 : actualIndex - 1;\r\n\t\tconst tmpNode: TreeNode<T> = {...nodeList[actualIndex]};\r\n\t\tnodeList[actualIndex] = {...nodeList[replaceIndex]};\r\n\t\tnodeList[replaceIndex] = tmpNode;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    ngAfterContentInit(): void {\r\n\t\tthis.templates.forEach((cfTemplate: CfTemplate) => {\r\n\t\t\tconst name: string | null = cfTemplate.getName();\r\n            if (name === 'item') {\r\n                this.itemTemplate = cfTemplate.template;\r\n            }\r\n\t\t});\r\n        if (this.itemTemplate !== null) {\r\n            this.cdr.detectChanges();\r\n        }\r\n    }\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tif (changes['values'] !== undefined) {\r\n\t\t\tthis.convertToTreeNodes();\r\n\t\t}\r\n\t\tif (changes['nodesAsValues'] !== undefined) {\r\n\t\t\tthis.changeValue();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['topValuesOnly'] !== undefined) {\r\n\t\t\tthis.changeValue();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['leafValuesOnly'] !== undefined) {\r\n\t\t\tthis.changeValue();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['displayOpenCloseButtons'] !== undefined) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['sortable'] !== undefined) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['deletable'] !== undefined) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['deleteOnlyChild'] !== undefined) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['disabled'] !== undefined) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tif (changes['levelGap'] !== undefined) {\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t}\r\n\t\tthis.setHostClasses();\r\n\t}\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { AfterViewChecked, ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, inject, Input, OnChanges, OnInit, Output, QueryList, SimpleChanges, TemplateRef, ViewChild } from \"@angular/core\";\r\nimport { ControlValueAccessor } from \"@angular/forms\";\r\nimport { DragDropListSortEvent } from \"../../interfaces\";\r\nimport { arrayMove, isNumberArray, isStringArray } from \"../../shared\";\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { CfDragDirective, CfTemplate, CfDragDropListDirective, CfDragHandleDirective, ReadonlyDirective } from \"../../shared/directives\";\r\nimport { ButtonDirective } from \"../../shared/directives/button.directive\";\r\n\r\n\r\n@Component({\r\n\tselector: 'cf-dragdroplist',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tforwardRef(() => CfDragDropListDirective),\r\n\t\tCfDragDirective,\r\n\t\tCfDragHandleDirective,\r\n\t\tCfTemplate,\r\n\t\tButtonDirective\r\n\t],\r\n    providers: [\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => CfDragDropListComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n    ],\r\n\ttemplate: `\r\n\t\t<div class=\"input-container\">\r\n\t\t\t<div class=\"dragdroplist\">\r\n\t\t\t\t<input class=\"hidden-input\" #hiddenInput (keyup)=\"keyup($event)\" (blur)=\"blurFromHiddenInput()\" (focus)=\"focusFromHiddenInput()\" />\r\n\t\t\t\t<div class=\"cf-vgrid\" cfDragDropList [group]=\"group\" (sorted)=\"sorted($event)\">\r\n\t\t\t\t\t<div class=\"cf-flex cf-ai-center cf-flex-spacer-2\" *ngFor=\"let processedValue of processedValues\" cfDrag [cfDragData]=\"processedValue\">\r\n\t\t\t\t\t\t<div>{{processedValue[labelId]}}</div>\r\n\t\t\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t\t\t<ng-container *ngIf=\"actionsTemplate !== null\" [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: processedValue}\"></ng-container>\r\n\t\t\t\t\t\t<button cfButton [severity]=\"'success'\" [icon]=\"'drag-move-2-fill'\" cfDragHandle></button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t`,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CfDragDropListComponent<T> extends FormItem implements OnInit, AfterViewChecked, OnChanges, ControlValueAccessor {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\t@Input() value: any[] = [];\r\n\t@Input() values: T[] = [];\r\n    @Input() labelId: string = 'label';\r\n    @Input() valueId: string = 'value';\r\n\t@Input() group: string | null = null;\r\n    \r\n\t@Output() onSorted: EventEmitter<any[]> = new EventEmitter();\r\n\t\r\n    @ViewChild('hiddenInput') hiddenInput: ElementRef<HTMLInputElement> | undefined = undefined;\r\n\r\n\t@ContentChildren(CfTemplate) templates: QueryList<CfTemplate> = new QueryList();\r\n\t\r\n\toverride enterAsTabType: string = 'dragdroplist';\r\n\tprocessedValues: any[] = [];\r\n\r\n    actionsTemplate: TemplateRef<any> | null = null;\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.hiddenInput === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.hiddenInput.nativeElement.focus();\r\n\t}\r\n\r\n\tkeyup(keyboardEvent: KeyboardEvent): void {\r\n\r\n\t}\r\n\r\n\tblurFromHiddenInput(): void {\r\n\t\tthis.focused = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tfocusFromHiddenInput(): void {\r\n\t\tthis.focused = true;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    override writeValue(value: any): void {\r\n\t\tif (!(value instanceof Array)) {\r\n\t\t\tvalue = [];\r\n\t\t}\r\n\t\tthis.value = value;\r\n\t\tthis.processValues();\r\n\t\tthis.cdr.detectChanges();\r\n    }\r\n\r\n\tsorted(dragDropListSortEvent: DragDropListSortEvent): void {\r\n\t\tthis.processedValues = arrayMove(this.processedValues, dragDropListSortEvent.oldPosition, dragDropListSortEvent.newPosition, dragDropListSortEvent.dragData);\r\n\t\tthis.value = this.processedValues.map((v) => v[this.valueId]);\r\n\t\tthis.onSorted.emit(this.processedValues);\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tthis.onChangeFn(this.value);\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    processValues(): void {\r\n        if (isStringArray(this.values)) {\r\n            this.processedValues = (this.values as string[]).map((value: string) => ({\r\n                label: value,\r\n                value\r\n            }));\r\n        } else if (isNumberArray(this.values)) {\r\n            this.processedValues = (this.values as number[]).map((value: number) => ({\r\n                label: value.toString(),\r\n                value\r\n            }));\r\n        } else {\r\n\t\t\tthis.processedValues = [...this.values];\r\n\t\t}\r\n\t\tif (this.group !== null) {\r\n\t\t\tthis.processedValues = this.processedValues.filter((a) => this.value.includes(a[this.valueId]));\r\n\t\t}\r\n\t\tthis.processedValues = this.processedValues.sort((a: T, b: T) => this.value.indexOf(a[this.valueId]) - this.value.indexOf(b[this.valueId]));\r\n    }\r\n\r\n\tngAfterViewChecked(): void {\r\n\t\tthis.templates.forEach((cfTemplate: CfTemplate) => {\r\n\t\t\tconst name: string | null = cfTemplate.getName();\r\n\t\t\tif (name === 'actions') {\r\n\t\t\t\tthis.actionsTemplate = cfTemplate.template;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['values'] !== undefined && !changes['values'].firstChange) {\r\n            this.processValues();\r\n            this.cdr.detectChanges();\r\n        }\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n    }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.processValues();\r\n\t}\t\r\n\r\n}\r\n","import { FormatWidth, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleTimeFormat } from \"@angular/common\";\r\nimport { inject, InjectionToken, LOCALE_ID } from \"@angular/core\";\r\n\r\nexport const DATETIMEPICKER_MODE: InjectionToken<'date' | 'time' | 'datetime'> = new InjectionToken('DateTimePicker mode', {\r\n    factory: (): 'date' | 'time' | 'datetime' => {\r\n        return 'date';\r\n    }\r\n});\r\n\r\nexport const DATETIMEPICKER_SHOW_TODAY: InjectionToken<boolean> = new InjectionToken('DateTimePicker show today', {\r\n    factory: () => {\r\n        return true;\r\n    }\r\n});\r\n\r\nexport const DATETIMEPICKER_DATE_DISPLAY_FORMAT: InjectionToken<string> = new InjectionToken('DateTimePicker date display format', {\r\n    factory: () => {\r\n        return getLocaleDateFormat(inject(LOCALE_ID), FormatWidth.Short);\r\n    }\r\n});\r\n\r\nexport const DATETIMEPICKER_DATE_EDIT_FORMAT: InjectionToken<string> = new InjectionToken('DateTimePicker date edit format', {\r\n    factory: () => {\r\n        return 'yyyy.MM.dd';\r\n    }\r\n});\r\n\r\nexport const DATETIMEPICKER_DATETIME_DISPLAY_FORMAT: InjectionToken<string> = new InjectionToken('DateTimePicker datetime display format', {\r\n    factory: () => {\r\n        return getLocaleDateTimeFormat(inject(LOCALE_ID), FormatWidth.Short)\r\n            .replace('{1}', getLocaleDateFormat(inject(LOCALE_ID), FormatWidth.Short))\r\n            .replace('{0}', getLocaleTimeFormat(inject(LOCALE_ID), FormatWidth.Medium));\r\n    }\r\n});\r\n\r\nexport const DATETIMEPICKER_DATETIME_EDIT_FORMAT: InjectionToken<string> = new InjectionToken('DateTimePicker datetime edit format', {\r\n    factory: () => {\r\n        return 'yyyy.MM.dd HH:mm:ss';\r\n    }\r\n});\r\n\r\nexport const DATETIMEPICKER_SECONDS: InjectionToken<boolean> = new InjectionToken('DateTimePicker seconds', {\r\n    factory: () => {\r\n        return false;\r\n    }\r\n});\r\n\r\nexport const DATETIMEPICKER_LOCAL: InjectionToken<boolean> = new InjectionToken('DateTimePicker local', {\r\n    factory: () => {\r\n        return false;\r\n    }\r\n});\r\n\r\n","import { CommonModule, DatePipe, formatDate, FormStyle, getLocaleDayNames, getLocaleFirstDayOfWeek, getLocaleMonthNames, TranslationWidth, WeekDay } from \"@angular/common\";\r\nimport { Component, ElementRef, EventEmitter, forwardRef, Input, OnInit, OnChanges, Output, ViewChild, ChangeDetectionStrategy, inject, HostBinding } from \"@angular/core\";\r\nimport { ControlValueAccessor } from \"@angular/forms\";\r\nimport { DateItem, DateTimePickerBeforeOpenCallback } from \"./datetimepicker.interfaces\";\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormItem } from \"../../shared/classes/formitem.class\";\r\nimport { appendToBody, ReadonlyDirective, dateIsValid, getCalendarDrawDates, isOuter, setElementRect } from \"../../shared\";\r\nimport { DATETIMEPICKER_DATE_DISPLAY_FORMAT, DATETIMEPICKER_DATE_EDIT_FORMAT, DATETIMEPICKER_DATETIME_DISPLAY_FORMAT, DATETIMEPICKER_DATETIME_EDIT_FORMAT, DATETIMEPICKER_SHOW_TODAY, DATETIMEPICKER_SECONDS, DATETIMEPICKER_LOCAL, DATETIMEPICKER_MODE } from \"./datetimepicker.tokens\";\r\nimport { filter } from \"rxjs\";\r\n\r\n@Component({\r\n\tselector: 'cf-datetimepicker',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\tproviders: [\r\n\t\tDatePipe,\r\n\t\t{\r\n\t\t\tprovide: FormItem,\r\n\t\t\tuseExisting: forwardRef(() => DateTimePickerComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t],\r\n\ttemplate: `\r\n\t\t<div class=\"cf-floating-label-container\">\r\n\t\t\t<input #input class=\"cf-input-container-default-input\" type=\"text\" [disabled]=\"isDisabled\" [readonly]=\"isReadonly\" (keyup)=\"keyup($event)\" (focus)=\"focusFromInput()\" (blur)=\"blurFromInput()\" (paste)=\"paste($event)\" />\r\n\t\t\t<label class=\"cf-floating-label\" [ngClass]=\"{'float': focused || filled}\" *ngIf=\"label !== null && label.length > 0\">{{label}}</label>\r\n\t\t</div>\r\n\t\t<span *ngIf=\"clearable && filled && !isDisabled && !isReadonly\" class=\"cf-input-clear remixicon close-circle-fill\" (click)=\"clearClicked($event)\"></span>\r\n\t\t<span *ngIf=\"(mode === 'date' || mode === 'datetime') && !isDisabled && !isReadonly\" class=\"cf-input-open remixicon arrow-down-s-line\" [ngClass]=\"{'opened': opened}\" (click)=\"toggleOpen()\"></span>\r\n\t\t<div #calendarContent class=\"cf-datetimepicker-dropdown\" *ngIf=\"opened\">\r\n\t\t\t<div class=\"year-and-month\">\r\n\t\t\t\t<div class=\"year\">\r\n\t\t\t\t\t<div class=\"year-prev\" (click)=\"prevYear()\"><span class=\"remixicon arrow-drop-left-line\"></span></div>\r\n\t\t\t\t\t<div class=\"year-text\">{{referenceDate|date:'y'}}</div>\r\n\t\t\t\t\t<div class=\"year-next\" (click)=\"nextYear()\"><span class=\"remixicon arrow-drop-right-line\"></span></div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"month\">\r\n\t\t\t\t\t<div class=\"month-prev\" (click)=\"prevMonth()\"><span class=\"remixicon arrow-drop-left-line\"></span></div>\r\n\t\t\t\t\t<div class=\"month-text\">{{months[referenceDate.getMonth()]}}</div>\r\n\t\t\t\t\t<div class=\"month-next\" (click)=\"nextMonth()\"><span class=\"remixicon arrow-drop-right-line\"></span></div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"dates\">\r\n\t\t\t\t<div class=\"date cf-calendar-header\" *ngFor=\"let weekday of weekdays\">{{weekday}}</div>\r\n\t\t\t\t<div class=\"date normal\" *ngFor=\"let dateItem of dates\" (click)=\"changeValueFromDates(dateItem.date)\" [ngClass]=\"{\r\n\t\t\t\t\t'selected': dateItem.selected,\r\n\t\t\t\t\t'disabled': dateItem.disabled,\r\n\t\t\t\t\t'today': dateItem.today,\r\n\t\t\t\t\t'othermonth': dateItem.otherMonth\r\n\t\t\t\t}\">{{dateItem.date|date:'d'}}</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"todayline\" *ngIf=\"showToday\" (click)=\"setDateToday()\">{{today|date:finalDisplayFormat}}</div>\r\n\t\t</div>\r\n\t`,\r\n    host: {\r\n        class: 'cf-input-container cf-datetimepicker'\r\n    }\r\n})\r\nexport class DateTimePickerComponent extends FormItem implements OnInit, OnChanges, ControlValueAccessor {\r\n\r\n    override readonlyDirective: ReadonlyDirective | null = inject(ReadonlyDirective, {\r\n        optional: true\r\n    });\r\n\r\n\tprivate datePipe: DatePipe = inject(DatePipe);\r\n\r\n\tprivate defaultDateDisplayFormat: string = inject(DATETIMEPICKER_DATE_DISPLAY_FORMAT);\r\n\tprivate defaultDateEditFormat: string = inject(DATETIMEPICKER_DATE_EDIT_FORMAT);\r\n\tprivate defaultDateTimeDisplayFormat: string = inject(DATETIMEPICKER_DATETIME_DISPLAY_FORMAT);\r\n\tprivate defaultDateTimeEditFormat: string = inject(DATETIMEPICKER_DATETIME_EDIT_FORMAT);\r\n\r\n\t/** Value */\r\n\t@Input() value: Date | string | null = null;\r\n\r\n\t/** Mode */\r\n\t@Input() mode: 'date' | 'time' | 'datetime' = inject(DATETIMEPICKER_MODE);\r\n\r\n\t/** Display format */\r\n\t@Input() displayFormat: string | null = null;\r\n\r\n\t/** Edit format */\r\n\t@Input() editFormat: string | null = null;\r\n\r\n\t/** Min date */\r\n\t@Input() minDate: Date | null = null;\r\n\r\n\t/** Max date */\r\n\t@Input() maxDate: Date | null = null;\r\n\r\n\t/** Width */\r\n\t@Input() @HostBinding('style.width') width: string = 'auto';\r\n\r\n\t/**\r\n\t * Show today\r\n\t * \r\n\t * Display actual day on thebottom of thedropdown area\r\n\t */\r\n\t@Input() showToday: boolean = inject(DATETIMEPICKER_SHOW_TODAY);\r\n\r\n\t/**\r\n\t * Seconds\r\n\t * \r\n\t * Display seconds when `mode` is set `time`\r\n\t */\r\n\t@Input() seconds: boolean = inject(DATETIMEPICKER_SECONDS);\r\n\r\n\t/** Local */\r\n\t@Input() local: boolean = inject(DATETIMEPICKER_LOCAL);\r\n\r\n\t/** Before open */\r\n\t@Input() beforeOpen: DateTimePickerBeforeOpenCallback | null = null;\r\n\t\r\n\t/** On value changed */\r\n\t@Output() onValueChanged: EventEmitter<Date | string | null> = new EventEmitter();\r\n\t\r\n\t@ViewChild('input') input: ElementRef<HTMLInputElement> | undefined = undefined;\r\n\t@ViewChild('calendarContent') calendarContent: ElementRef<HTMLDivElement> | undefined = undefined;\r\n\t\r\n\t/**\r\n\t * Reference date\r\n\t * \r\n\t * It is used to handle the displayed calendar date during changing year or month\r\n\t */\r\n\treferenceDate: Date = new Date();\r\n\r\n\t/**\r\n\t * Opened state, `boolean`\r\n\t */\r\n\topened: boolean = false;\r\n\r\n\t/**\r\n\t * Prevent focus from input\r\n\t */\r\n\tprivate preventFocusFromInput: boolean = false;\r\n\t\r\n\tpreventBlur: boolean = false;\r\n\r\n\tfirstDayOfWeek: WeekDay = getLocaleFirstDayOfWeek(this.locale);\r\n\tweekdays: Readonly<string[]> = getLocaleDayNames(this.locale, FormStyle.Standalone, TranslationWidth.Short);\r\n\tmonths: Readonly<string[]> = getLocaleMonthNames(this.locale, FormStyle.Format, TranslationWidth.Short);\r\n\r\n\tskipClick: boolean = false;\r\n\r\n\toverride enterAsTabType: string = 'datetimepicker';\r\n\r\n\tprotected get finalDisplayFormat(): string {\r\n\t\tif (this.displayFormat !== null) {\r\n\t\t\treturn this.displayFormat;\r\n\t\t}\r\n\t\tswitch(this.mode) {\r\n\t\t\tcase 'date': return this.defaultDateDisplayFormat;\r\n\t\t\tcase 'datetime': return this.defaultDateTimeDisplayFormat;\r\n\t\t}\r\n\t\treturn '';\r\n\t}\r\n\r\n\tprotected get finalEditFormat(): string {\r\n\t\tif (this.editFormat !== null) {\r\n\t\t\treturn this.editFormat;\r\n\t\t}\r\n\t\tswitch(this.mode) {\r\n\t\t\tcase 'date': return this.defaultDateEditFormat;\r\n\t\t\tcase 'datetime': return this.defaultDateTimeEditFormat;\r\n\t\t}\r\n\t\treturn '';\r\n\t}\r\n\r\n\tprotected get today(): Date {\r\n\t\treturn new Date();\r\n\t}\r\n\r\n\tprotected get dates(): DateItem[] {\r\n\t\tif (this.mode === 'time' || typeof this.value === 'string') {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn getCalendarDrawDates(this.referenceDate, this.value, new Date(), this.minDate, this.maxDate, []);\r\n\t}\r\n\r\n\tprotected get filled(): boolean {\r\n\t\treturn this.value !== null;\r\n\t}\r\n\r\n\tprotected get localValue(): string | null {\r\n\t\tif (this.value === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (this.mode === 'time' && typeof this.value === 'string') {\r\n\t\t\treturn this.value;\r\n\t\t}\r\n\t\tif (this.mode === 'date') {\r\n\t\t\treturn formatDate(this.value, 'yyyy-MM-dd', this.locale);\r\n\t\t}\r\n\t\tif (this.mode === 'datetime') {\r\n\t\t\treturn formatDate(this.value, 'yyyy-MM-ddTHH:mm:ss', this.locale);\r\n\t\t}\r\n\t\treturn '';\r\n\t}\r\n\r\n\toverride writeValue(value: Date | string | null): void {\r\n\t\tlet valueCopy: Date | string | null = value instanceof Date ? new Date(value.getTime()) : value;\r\n\t\tswitch(this.mode) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'datetime':\r\n\t\t\t\tif (typeof valueCopy === 'string') {\r\n\t\t\t\t\tvalueCopy = this.convertDate(valueCopy);\r\n\t\t\t\t}\r\n\t\t\t\tthis.value = valueCopy;\r\n\t\t\t\tif (this.value === null) {\r\n\t\t\t\t\tthis.setInputValue('');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.setInputValue(formatDate(this.value, this.finalDisplayFormat, this.locale));\r\n\t\t\t\t}\r\n\t\t\t\tthis.setReferenceDate();\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'time':\r\n\t\t\t\tif (valueCopy === null) {\r\n\t\t\t\t\tthis.value = null;\r\n\t\t\t\t\tthis.setInputValue('');\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof valueCopy === 'string') {\r\n\t\t\t\t\tif (!this.seconds && valueCopy.length === 8) {\r\n\t\t\t\t\t\tvalueCopy = valueCopy.substring(0, 5);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.isTimeValid(valueCopy)) {\r\n\t\t\t\t\t\tthis.setInputValue(valueCopy);\r\n\t\t\t\t\t\tif (!this.seconds) {\r\n\t\t\t\t\t\t\tvalueCopy += ':00';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.value = valueCopy;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tsetInputValue(value: string): void {\r\n\t\tif (this.input === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.input.nativeElement.value = value;\r\n\t}\r\n\r\n\tclearClicked(event: MouseEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tthis.value = null;\r\n\t\tthis.opened = false;\r\n\t\tthis.emitValueChanged();\r\n\t\tthis.setInputValue('');\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\topenDowpdownIconClick(event: MouseEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.opened) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tif (this.input !== undefined) {\r\n\t\t\t\tthis.input.nativeElement.focus();\r\n\t\t\t}\r\n\t\t\tthis.focused = true;\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t}\r\n\r\n\tprotected focusFromInput(): void {\r\n\t\tif (this.isDisabled || this.isReadonly) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.preventFocusFromInput) {\r\n\t\t\tthis.preventFocusFromInput = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.value !== null && (this.mode === 'date' || this.mode === 'datetime')) {\r\n\t\t\tthis.setInputValue(formatDate(this.value, this.finalEditFormat, this.locale));\r\n\t\t}\r\n\t\tthis.focused = true;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprotected blurFromInput(): void {\r\n\t\tif (this.preventBlur) {\r\n\t\t\tthis.preventBlur = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.checkAndSetValueFromInput(true);\r\n\t\tthis.focused = false;\r\n        this.opened = false;\r\n\t\tif (this.value !== null && (this.mode === 'date' || this.mode === 'datetime')) {\r\n\t\t\tthis.setInputValue(formatDate(this.value, this.finalDisplayFormat, this.locale));\r\n\t\t}\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprotected paste(event: ClipboardEvent): void {\r\n\t\tthis.checkAndSetValueFromInput();\r\n\t\tif (event.clipboardData === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tswitch(this.mode) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'datetime':\r\n\t\t\t\tconst clipboardDataDate: Date | null = this.convertDate(event.clipboardData.getData('text'));\r\n\t\t\t\tif (clipboardDataDate === null) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.isDateValid(clipboardDataDate)) {\r\n\t\t\t\t\tthis.value = clipboardDataDate;\r\n\t\t\t\t\tthis.referenceDate = clipboardDataDate;\r\n\t\t\t\t\tthis.emitValueChanged();\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'time':\r\n\t\t\t\tlet clipboardData: string = event.clipboardData.getData('text');\r\n\t\t\t\tif (!this.seconds && clipboardData.length === 8) {\r\n\t\t\t\t\tclipboardData = clipboardData.substring(0, 5);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.isTimeValid(clipboardData)) {\r\n\t\t\t\t\tthis.value = clipboardData;\r\n\t\t\t\t\tthis.setInputValue(clipboardData);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\toverride focus(): void {\r\n\t\tif (this.isDisabled || this.isReadonly) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.focus();\r\n\t\t}\r\n\t\tthis.focusFromInput();\r\n\t}\r\n\r\n    toggleOpen(): void {\r\n\t\tthis.focused = true;\r\n        if (this.opened) {\r\n            this.close();\r\n        } else {\r\n            this.open();\r\n        }\r\n    }\r\n\r\n\t/**\r\n\t * Opens the calendar\r\n\t */\r\n\topen(): void {\r\n        if (this.opened || this.mode === 'time') {\r\n            return;\r\n        }\r\n\r\n\t\tif (this.beforeOpen !== null) {\r\n\t\t\tthis.beforeOpen({\r\n\t\t\t\tcomponent: this\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.opened = true;\r\n\t\tthis.cdr.detectChanges();\r\n\r\n\t\tif (this.calendarContent === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// APPEND TO BODY\r\n\t\tsetElementRect(this.element.nativeElement, this.calendarContent.nativeElement, null, null);\r\n\t\tappendToBody(this.calendarContent.nativeElement);\r\n\t}\r\n\r\n\t/**\r\n\t * Closes the calandar\r\n\t */\r\n\tclose(): void {\r\n\t\tif (this.calendarContent !== undefined) {\r\n\t\t\tthis.calendarContent.nativeElement.remove();\r\n\t\t}\r\n\t\tthis.opened = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tblur(): void {\r\n\t\tthis.focused = false;\r\n\t\tthis.opened = false;\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.input.nativeElement.blur();\r\n\t\t\tthis.checkAndSetValueFromInput(true);\r\n\t\t\tif (this.value !== null && (this.mode === 'date' || this.mode === 'datetime')) {\r\n\t\t\t\tthis.setInputValue(formatDate(this.value, this.finalDisplayFormat, this.locale));\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tkeyup(keyboardEvent: KeyboardEvent): void {\r\n\t\tthis.onKeyup.emit(keyboardEvent);\r\n\t\tif (this.preventDefaultOnKeyup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'arrowdown') {\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'escape') {\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t\tif (keyboardEvent.key.toLowerCase() === 'enter') {\r\n\t\t\tthis.checkAndSetValueFromInput();\r\n\t\t}\r\n\t}\r\n\r\n\tcheckAndSetValueFromInput(resetOnInvalid: boolean = false): void {\r\n\t\tif (this.input === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tswitch(this.mode) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'datetime':\r\n\t\t\t\tconst inputDateValue: Date = new Date(this.input.nativeElement.value);\r\n\t\t\t\tif (this.isDateValid(inputDateValue)) {\r\n\t\t\t\t\tthis.value = inputDateValue;\r\n\t\t\t\t\tthis.referenceDate = inputDateValue;\r\n\t\t\t\t\tthis.emitValueChanged();\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (resetOnInvalid) {\r\n\t\t\t\t\t\tthis.input.nativeElement.value = '';\r\n\t\t\t\t\t\tthis.value = null;\r\n\t\t\t\t\t\tthis.emitValueChanged();\r\n\t\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'time':\r\n\t\t\t\tlet inputValue: string = this.input.nativeElement.value;\r\n\t\t\t\tif (!this.seconds && inputValue.length === 8) {\r\n\t\t\t\t\tinputValue = inputValue.substring(0, 5);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.isTimeValid(inputValue)) {\r\n\t\t\t\t\tthis.setInputValue(inputValue);\r\n\t\t\t\t\tif (!this.seconds) {\r\n\t\t\t\t\t\tinputValue += ':00';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.value = inputValue;\r\n\t\t\t\t\tthis.emitValueChanged();\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate isDateValid(date: Date): boolean {\r\n\t\treturn date instanceof Date && isFinite(+date);\r\n\t}\r\n\r\n    private isTimeValid(time: string): boolean {\r\n        if (this.seconds) {\r\n            return new RegExp(/^(((0|1)[0-9])|2[01234]):([012345][0-9]):([012345][0-9])$/g).test(time);\r\n        }\r\n        return new RegExp(/^(((0|1)[0-9])|2[01234]):([012345][0-9])$/g).test(time);\r\n    }\r\n\r\n\tprotected changeValueFromDates(date: Date): void {\r\n\t\tthis.value = date;\r\n\t\tthis.referenceDate = date;\r\n\t\tthis.opened = false;\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.preventFocusFromInput = true;\r\n\t\t\tthis.input.nativeElement.focus();\r\n\t\t\tconst formattedDate: string | null = this.datePipe.transform(date, this.finalEditFormat);\r\n\t\t\tif (formattedDate !== null) {\r\n\t\t\t\tthis.input.nativeElement.value = formattedDate;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.emitValueChanged();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprotected setDateToday(): void {\r\n\t\tthis.value = this.today;\r\n\t\tthis.referenceDate = this.today;\r\n\t\tthis.opened = false;\r\n\t\tif (this.input !== undefined) {\r\n\t\t\tthis.preventFocusFromInput = true;\r\n\t\t\tthis.input.nativeElement.focus();\r\n\t\t\tconst formattedDate: string | null = this.datePipe.transform(this.today, this.finalEditFormat);\r\n\t\t\tif (formattedDate !== null) {\r\n\t\t\t\tthis.input.nativeElement.value = formattedDate;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.emitValueChanged();\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate emitValueChanged(): void {\r\n\t\tthis.setReferenceDate();\r\n\t\tif (this.onChangeFn !== null) {\r\n\t\t\tif (this.local) {\r\n\t\t\t\tthis.onChangeFn(this.localValue);\r\n\t\t\t} else {\r\n\t\t\t\tthis.onChangeFn(this.value);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.onTouchedFn !== null) {\r\n\t\t\tthis.onTouchedFn();\r\n\t\t}\r\n\t\tif (this.local) {\r\n\t\t\tthis.onValueChanged.emit(this.localValue);\r\n\t\t} else {\r\n\t\t\tthis.onValueChanged.emit(this.value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets next year on reference date\r\n\t */\r\n\tnextYear(): void {\r\n\t\tthis.referenceDate = new Date(this.referenceDate.getFullYear() + 1, this.referenceDate.getMonth(), 1);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets prev year on reference date\r\n\t */\r\n\tprevYear(): void {\r\n\t\tthis.referenceDate = new Date(this.referenceDate.getFullYear() - 1, this.referenceDate.getMonth(), 1);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets next month on reference date\r\n\t */\r\n\tnextMonth(): void {\r\n\t\tthis.referenceDate = new Date(this.referenceDate.getFullYear(), this.referenceDate.getMonth() + 1, 1);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets prev month on reference date\r\n\t */\r\n\tprevMonth(): void {\r\n\t\tthis.referenceDate = new Date(this.referenceDate.getFullYear(), this.referenceDate.getMonth() - 1, 1);\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\t/**\r\n\t * Set reference date\r\n\t * \r\n\t * If `date` param is not set, the reference date is set based on the actual value. If actual value is null, it will be `new Date()`\r\n\t * \r\n\t * @param date `Date` or `null`\r\n\t * @returns \r\n\t */\r\n\tsetReferenceDate(date: Date | null = null): void {\r\n\t\tif (this.mode === 'time') {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (date !== null) {\r\n\t\t\tthis.referenceDate = new Date(date.getTime());\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.value !== null && this.value instanceof Date) {\r\n\t\t\tthis.referenceDate = new Date(this.value.getTime());\r\n\t\t} else {\r\n\t\t\tthis.referenceDate = new Date();\r\n\t\t}\r\n\t}\r\n\r\n\tconvertDate(dateString: string): Date | null {\r\n\t\tconst date: Date = new Date(dateString);\r\n\t\treturn dateIsValid(date) ? date : null;\r\n\t}\r\n\r\n\tprivate updateInputValue(): void {\r\n\t\tif (this.value === null) {\r\n\t\t\tthis.setInputValue('');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tswitch(this.mode) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'datetime':\r\n\t\t\t\tthis.setInputValue(formatDate(this.value, this.finalDisplayFormat, this.locale));\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'time':\r\n\t\t\t\tif (typeof this.value !== 'string') {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.setInputValue(this.value);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t\r\n\tngOnInit(): void {\r\n\t\tthis.setReferenceDate();\r\n\t\tthis.updateInputValue();\r\n\t\tthis.setControlComponent();\r\n\t\tthis.cdr.detectChanges();\r\n\t\tif (this.control === null && this.value !== null) {\r\n\t\t\tthis.writeValue(this.value);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnChanges(): void {\r\n\t\tthis.cdr.detectChanges();\r\n\t\tthis.setHostClasses();\r\n    }\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tif (this.firstDayOfWeek === WeekDay.Monday) {\r\n\t\t\tthis.weekdays = [...this.weekdays.slice(1), this.weekdays[0]];\r\n\t\t}\r\n\t\tthis.globalEventListenerService.mousedown.pipe(\r\n\t\t\ttakeUntilDestroyed()\r\n\t\t).subscribe((event: MouseEvent) => {\r\n\t\t\tthis.preventBlur = false;\r\n\t\t\tif (this.calendarContent === undefined) {\r\n\t\t\t\tif (isOuter([this.element.nativeElement], event)) {\r\n\t\t\t\t\tthis.focused = false;\r\n\t\t\t\t\tthis.opened = false;\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.preventBlur = true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (isOuter([this.element.nativeElement, this.calendarContent.nativeElement], event)) {\r\n\t\t\t\t\tthis.focused = false;\r\n\t\t\t\t\tthis.opened = false;\r\n\t\t\t\t\tthis.cdr.detectChanges();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.preventBlur = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.globalEventListenerService.mouseup.pipe(\r\n\t\t\ttakeUntilDestroyed()\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.preventBlur = false;\r\n\t\t});\r\n\t\tthis.globalEventListenerService.focusin.pipe(\r\n\t\t\ttakeUntilDestroyed(),\r\n\t\t\tfilter((event: FocusEvent) => this.input !== undefined && event.target !== this.input.nativeElement)\r\n\t\t).subscribe(() => {\r\n\t\t\tthis.focused = false;\r\n\t\t\tthis.opened = false;\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n}\r\n","import { AfterViewInit, ContentChildren, DestroyRef, Directive, Input, QueryList, inject } from \"@angular/core\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { EnterAsTabCallbackFunction } from \"../../interfaces\";\r\nimport { FormItem } from \"../classes/formitem.class\";\r\nimport { DateTimePickerComponent, DropdownComponent, AutocompleteComponent } from '../../features';\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\n\r\n@Directive({\r\n\tselector: '[cfEnterAsTab]',\r\n\tstandalone: true\r\n})\r\nexport class CfEnterAsTabDirective implements AfterViewInit {\r\n\t\r\n\tdestroyRef: DestroyRef = inject(DestroyRef);\r\n\t\r\n\t@Input() skipTypes: (string | null)[] = [];\r\n\t@Input() enterAsTabCallbackFunction: EnterAsTabCallbackFunction | null = null;\r\n\r\n\t@ContentChildren(FormItem, {\r\n\t\tdescendants: true\r\n\t}) items: QueryList<FormItem> = new QueryList();\r\n\r\n\tsubscriptions: Subscription[] = [];\r\n\r\n\tget availableIndexes(): number[] {\r\n\t\treturn this.items.map((item: FormItem, index: number) => {\r\n\t\t\tif (item.disabled || item.skipEnterAsTab) {\r\n\t\t\t\treturn - 1;\r\n\t\t\t}\r\n\t\t\treturn index;\r\n\t\t}).filter((index: number) => index !== -1);\r\n\t}\r\n\r\n\tget lastAvailableIndex(): number | null {\r\n\t\tif (this.availableIndexes.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.availableIndexes[this.availableIndexes.length - 1];\r\n\t}\r\n\r\n\tget firstAvailableIndex(): number | null {\r\n\t\tif (this.availableIndexes.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.availableIndexes[0];\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.items.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n\t\t\tthis.setupSubscriptions();\r\n\t\t});\r\n\t\tthis.setupSubscriptions();\r\n\t}\r\n\r\n\tsetupSubscriptions(): void {\r\n\t\tif (this.items.length <= 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.clearSubscriptions();\r\n\t\tthis.items.forEach((item: FormItem, index: number)  => {\r\n\t\t\t((actualIndex: number) => {\r\n\t\t\t\tthis.subscriptions.push(item.onKeyup.subscribe((keyboardEvent: KeyboardEvent) => {\r\n\t\t\t\t\tif (keyboardEvent.key.toLowerCase() !== 'enter') {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'datetimepicker' && item instanceof DateTimePickerComponent && !item.opened) {\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tkeyboardEvent.preventDefault();\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'dropdown' && item instanceof DropdownComponent && !item.opened) {\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tkeyboardEvent.preventDefault();\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'autocomplete' && item instanceof AutocompleteComponent && !item.opened) {\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tkeyboardEvent.preventDefault();\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'inputtextarea') {\r\n\t\t\t\t\t\tif (keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey) {\r\n\t\t\t\t\t\t\tkeyboardEvent.preventDefault();\r\n\t\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'inputtext') {\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'inputnumber') {\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'checkbox') {\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'switch') {\r\n\t\t\t\t\t\tif (keyboardEvent.ctrlKey || keyboardEvent.shiftKey) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'datetimepicker') {\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.enterAsTabType === 'radio') {\r\n\t\t\t\t\t\tthis.focusOnNextTarget(actualIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t})(index);\r\n\t\t});\r\n\t}\r\n\r\n\tfocusOnNextTarget(actualIndex: number): void {\r\n\r\n\t\tif (this.items === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// if we dont have any items, we have nothing to do\r\n\t\tif (this.items.length <= 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// Get next id, or go to first one, this will be the point we start the search for the next available item\r\n\t\tlet nextTargetIndex: number = actualIndex + 1;\r\n\t\tif (nextTargetIndex > this.items.length - 1) {\r\n\t\t\tnextTargetIndex = 0;\r\n\t\t}\r\n\r\n\t\tlet nextTargetIndexItem: FormItem | undefined = this.items.get(nextTargetIndex);\r\n\t\tif (nextTargetIndexItem === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// While the actual index is disabled, we need to search for an enabled one\r\n\t\t// In case we dont find any, we have nothing to do\r\n\t\tconst searchStartIndex: number = nextTargetIndex;\r\n\t\twhile (\r\n\t\t\tnextTargetIndexItem.isDisabled ||\r\n\t\t\tnextTargetIndexItem.isReadonly ||\r\n\t\t\tnextTargetIndexItem.skipEnterAsTab ||\r\n\t\t\t(this.skipTypes.length > 0 && this.skipTypes.includes(nextTargetIndexItem.enterAsTabType))\r\n\t\t) {\r\n\r\n\t\t\t// Step to a nother item\r\n\t\t\tnextTargetIndex++;\r\n\t\t\tif (nextTargetIndex > this.items.length - 1) {\r\n\t\t\t\tnextTargetIndex = 0;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// If we reached the start position, there is nothing to focus on\r\n\t\t\tif (nextTargetIndex === searchStartIndex) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tnextTargetIndexItem = this.items.get(nextTargetIndex);\r\n\t\t\tif (nextTargetIndexItem === undefined) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Callback\r\n\t\tif (this.enterAsTabCallbackFunction !== null && !this.enterAsTabCallbackFunction({\r\n\t\t\tactualIndex,\r\n\t\t\tnextTargetIndex,\r\n\t\t\tavailableIndexes: this.availableIndexes,\r\n\t\t\tlastAvailableIndex: this.lastAvailableIndex,\r\n\t\t\tfirstAvailableIndex: this.firstAvailableIndex,\r\n\t\t\titems: this.items\r\n\t\t})) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// In case we have the next available index, focus on it\r\n\t\tnextTargetIndexItem.focus();\r\n\t}\r\n\r\n\tclearSubscriptions(): void {\r\n\t\tthis.subscriptions.forEach((subscription: Subscription) => {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t});\r\n\t\tthis.subscriptions = [];\r\n\t}\r\n}\r\n","import { Directive, ElementRef, HostListener, Input, ContentChildren, QueryList, AfterViewInit, inject } from \"@angular/core\";\r\nimport { NgControl, NgModel, ValidationErrors } from \"@angular/forms\";\r\nimport { FormItem } from \"../classes/formitem.class\";\r\nimport { showTooltip } from \"../helpers/tooltip.helper\";\r\nimport { CfConfigService } from \"../services\";\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n    selector: '[cfFormErrorsTooltip]',\r\n\tstandalone: true\r\n})\r\nexport class CfFormErrorsTooltipDirective implements AfterViewInit {\r\n\t\r\n\tprivate el: ElementRef<Element> = inject(ElementRef);\r\n\tprivate ngModel: NgModel | null = inject(NgModel, {\r\n\t\toptional: true\r\n\t});\r\n\tprivate ngControl: NgControl | null = inject(NgControl, {\r\n\t\toptional: true\r\n\t});\r\n\tprivate configService: CfConfigService = inject(CfConfigService);\r\n\r\n\t\r\n\t@Input() distance: number = 4;\r\n    @Input() width: string = 'auto';\r\n    @Input() position: 'top' | 'right' | 'bottom' | 'left' = 'bottom';\r\n\t\r\n\ttooltip: HTMLDivElement | null = null;\r\n\tformItemSubscription: Subscription | null = null\r\n\r\n\t@ContentChildren(FormItem, {\r\n\t\tdescendants: true\r\n\t}) formItems: QueryList<FormItem> = new QueryList();\r\n\r\n\t@HostListener('mouseenter')\r\n\tonMouseEnter(): void {\r\n\t\tif (this.formItems.length > 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet errors: ValidationErrors | null = null;\r\n\r\n\t\tif (this.ngControl !== null) {\r\n\t\t\terrors = this.ngControl.errors;\r\n\r\n\t\t\tthis.clearSubscription(this.formItemSubscription);\r\n\t\t\tthis.formItemSubscription = this.ngControl.valueChanges.subscribe(() => {\r\n\t\t\t\tif (this.ngControl.errors === null) {\r\n\t\t\t\t\tif (this.tooltip !== null) {\r\n\t\t\t\t\t\tthis.removeTooltip();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (this.tooltip !== null) {\r\n\t\t\t\t\t\tthis.tooltip.innerHTML = this.proccessValidationErrors(this.ngControl.errors);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.showTooltip(this.ngControl.errors, this.el.nativeElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t\tif (this.ngModel !== null) {\r\n\t\t\terrors = this.ngModel.errors;\r\n\r\n\t\t\tthis.clearSubscription(this.formItemSubscription);\r\n\t\t\tthis.formItemSubscription = this.ngModel.valueChanges.subscribe(() => {\r\n\t\t\t\tif (this.ngModel.errors === null) {\r\n\t\t\t\t\tif (this.tooltip !== null) {\r\n\t\t\t\t\t\tthis.removeTooltip();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (this.tooltip !== null) {\r\n\t\t\t\t\t\tthis.tooltip.innerHTML = this.proccessValidationErrors(this.ngModel.errors);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.showTooltip(this.ngModel.errors, this.el.nativeElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tif (errors !== null) {\r\n\t\t\tthis.showTooltip(errors, this.el.nativeElement);\r\n\t\t}\r\n\t}\r\n\r\n\t@HostListener('mouseleave')\r\n    onMouseLeave(): void {\r\n\t\tif (this.formItems.length > 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.clearSubscription(this.formItemSubscription);\r\n        this.removeTooltip();\r\n    }\r\n\r\n\tclearSubscription(subscription: Subscription) {\r\n\t\tif (subscription !== null) {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t\tsubscription = null;\r\n\t\t}\r\n\t}\r\n\r\n\tshowTooltip(errors: ValidationErrors | null, element: Element): void {\r\n\t\tthis.tooltip = showTooltip(this.proccessValidationErrors(errors), element, this.position, this.width, this.distance);\r\n\t}\r\n\r\n\tremoveTooltip(): void {\r\n        if (this.tooltip !== null) {\r\n            this.tooltip.remove();\r\n\t\t\tthis.tooltip = null;\r\n        }\r\n\t}\r\n\t\r\n\tproccessValidationErrors(errors: ValidationErrors | null): string {\r\n\t\tlet text: string | null = null;\r\n\t\tif (this.configService.formErrorsTooltipDirectiveCallback !== null) {\r\n\t\t\ttext = this.configService.formErrorsTooltipDirectiveCallback(errors);\r\n\t\t} else {\r\n\t\t\tif (errors !== null) {\r\n\t\t\t\ttext = Object.keys(errors).join(', ')\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn text;\r\n\t}\r\n\r\n\tprocessFormItems(): void {\r\n\t\tif (this.formItems.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet formItemSubscription: Subscription | null = null;\r\n\r\n\t\tthis.formItems.forEach((formItem: FormItem)  => {\r\n\t\t\tif (formItem.control !== null) {\r\n\t\t\t\tformItem.element.nativeElement.addEventListener('mouseenter', () => {\r\n\t\t\t\t\tif (formItem.control.errors !== null) {\r\n\t\t\t\t\t\tthis.showTooltip(formItem.control.errors, formItem.element.nativeElement);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.clearSubscription(formItemSubscription);\r\n\t\t\t\t\tformItemSubscription = formItem.control.valueChanges.subscribe(() => {\r\n\t\t\t\t\t\tif (formItem.control.errors === null) {\r\n\t\t\t\t\t\t\tif (this.tooltip !== null) {\r\n\t\t\t\t\t\t\t\tthis.removeTooltip();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (this.tooltip !== null) {\r\n\t\t\t\t\t\t\t\tthis.tooltip.innerHTML = this.proccessValidationErrors(formItem.control.errors);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthis.showTooltip(formItem.control.errors, formItem.element.nativeElement);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tformItem.element.nativeElement.addEventListener('mouseleave', () => {\r\n\t\t\t\t\tthis.clearSubscription(formItemSubscription);\r\n\t\t\t\t\tthis.removeTooltip();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.processFormItems();\r\n\t}\r\n}\r\n","import { AfterViewInit, ContentChildren, Directive, ElementRef, EventEmitter, inject, Input, OnInit, Output, QueryList } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { fromEvent, Subject } from \"rxjs\";\r\nimport { filter, takeUntil } from \"rxjs/operators\";\r\nimport { CfDragDropEventType, DragDropListSortEvent } from \"../../interfaces\";\r\nimport { CfDestroyRef } from \"../classes\";\r\nimport { CfDragDropService } from \"../services\";\r\nimport { CfDragDirective } from \"./drag.directive\";\r\n\r\n@Directive({\r\n    selector: \"[cfDragDropList]\",\r\n\tstandalone: true\r\n})\r\nexport class CfDragDropListDirective extends CfDestroyRef implements OnInit, AfterViewInit {\r\n\r\n\tdragDropService: CfDragDropService = inject(CfDragDropService);\r\n\telementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n\t@Input() direction: 'vertical' | 'horizontal' | null = null;\r\n\t@Input() group: string | null = null;\r\n\t@Input() dragOpacity: number = 0.2;\r\n\t@Input() preventClick: boolean = true;\r\n\r\n\t@ContentChildren(CfDragDirective) dragDirectivesContentChildren: QueryList<CfDragDirective> = new QueryList();\r\n\r\n\tchildren: CfDragDirective[] = [];\r\n\r\n\toldPosition: number | null = null;\r\n\tactiveDragDirective: CfDragDirective | null = null;\r\n\r\n\tdragEndSubject: Subject<void> = new Subject();\r\n\r\n\t@Output() sorted: EventEmitter<DragDropListSortEvent> = new EventEmitter();\r\n\r\n\tdragStart(dragDirective: CfDragDirective): void {\r\n\t\tthis.oldPosition = this.children.findIndex((child: CfDragDirective) => child === dragDirective);\r\n\t\tif (this.oldPosition === -1) {\r\n\t\t\tthis.oldPosition = null;\r\n\t\t} else {\r\n\t\t\tthis.children.splice(this.oldPosition, 1);\r\n\t\t}\r\n\t\t\r\n\t\tthis.activeDragDirective = dragDirective;\r\n\r\n\t\tif (this.activeDragDirective.originalDragDropListDirective === this && this.activeDragDirective.originalDragDropListDirectiveOldPosition === null) {\r\n\t\t\tthis.activeDragDirective.originalDragDropListDirectiveOldPosition = this.oldPosition;\r\n\t\t}\r\n\r\n\t\tthis.activeDragDirective.element.style.opacity = this.dragOpacity.toString();\r\n\r\n\t\tthis.activeDragDirective.dragMove.pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.dragEndSubject)).subscribe(() => {\r\n\t\t\tthis.dragMove();\r\n\t\t});\r\n\t\tthis.dragMove();\r\n\r\n\t\tthis.elementRef.nativeElement.classList.add('drag-started');\r\n\t}\r\n\r\n\tdragMove(): void {\r\n\t\tif (this.activeDragDirective === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tthis.elementRef.nativeElement.removeChild(this.activeDragDirective.element);\r\n\r\n\t\tconst newPosition: number = this.getNewPositionByCoord();\r\n\t\tif (newPosition === this.children.length) {\r\n\t\t\tthis.elementRef.nativeElement.appendChild(this.activeDragDirective.element);\r\n\t\t} else {\r\n\t\t\tthis.elementRef.nativeElement.insertBefore(this.activeDragDirective.element, this.elementRef.nativeElement.children.item(newPosition));\r\n\t\t}\r\n\t}\r\n\r\n\tdragEnd(emitEvent: boolean = true): void {\r\n\t\tif (this.activeDragDirective === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (emitEvent) {\r\n\t\t\tconst newPosition: number = this.getNewPositionByCoord();\r\n\t\t\tthis.children.splice(newPosition, 0, this.activeDragDirective);\r\n\r\n\t\t\tif (this.activeDragDirective.originalDragDropListDirective === this) {\r\n\t\t\t\tthis.oldPosition = this.activeDragDirective.originalDragDropListDirectiveOldPosition;\r\n\t\t\t\tthis.activeDragDirective.originalDragDropListDirectiveOldPosition = null;\r\n\t\t\t} else {\r\n\t\t\t\tif (this.activeDragDirective.originalDragDropListDirective !== null) {\r\n\t\t\t\t\tthis.activeDragDirective.originalDragDropListDirective.sorted.emit({\r\n\t\t\t\t\t\toldPosition: this.activeDragDirective.originalDragDropListDirectiveOldPosition,\r\n\t\t\t\t\t\tnewPosition: null,\r\n\t\t\t\t\t\tdragDirective: this.activeDragDirective,\r\n\t\t\t\t\t\tdragData: this.activeDragDirective.cfDragData\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (newPosition !== this.oldPosition) {\r\n\t\t\t\tthis.sorted.emit({\r\n\t\t\t\t\toldPosition: this.oldPosition,\r\n\t\t\t\t\tnewPosition,\r\n\t\t\t\t\tdragDirective: this.activeDragDirective,\r\n\t\t\t\t\tdragData: this.activeDragDirective.cfDragData\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (this.activeDragDirective.originalDragDropListDirective !== this) {\r\n\t\t\t\tif (this.activeDragDirective.element.parentElement !== null) {\r\n\t\t\t\t\tthis.activeDragDirective.element.parentElement.removeChild(this.activeDragDirective.element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.activeDragDirective.originalDragDropListDirective = this;\r\n\t\t}\r\n\r\n\t\tthis.activeDragDirective.element.style.opacity = '1';\r\n\r\n\t\tthis.oldPosition = null;\r\n\t\tthis.activeDragDirective = null;\r\n\t\tthis.elementRef.nativeElement.classList.remove('drag-started');\r\n\t\tthis.dragEndSubject.next();\r\n\t}\r\n\t\r\n\tgetNewPositionByCoord(): number {\r\n\t\tif (this.activeDragDirective === null || this.activeDragDirective.clonedElement === null) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst movedRect: DOMRect = this.activeDragDirective.clonedElement.getBoundingClientRect();\r\n\t\tlet newPosition: number = this.children.length;\r\n\r\n\t\tif (this.direction === 'vertical') {\r\n\t\t\tconst movedCenterY: number = movedRect.y + (movedRect.height / 2);\r\n\t\t\tfor (let i = this.children.length - 1; i >= 0; i--) {\r\n\t\t\t\tif (this.children[i].elementRect.y + this.children[i].elementRect.height > movedCenterY) {\r\n\t\t\t\t\tnewPosition = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst movedCenterX: number = movedRect.x + (movedRect.width / 2);\r\n\t\t\tfor (let i = this.children.length - 1; i >= 0; i--) {\r\n\t\t\t\tif (this.children[i].elementRect.x + this.children[i].elementRect.width > movedCenterX) {\r\n\t\t\t\t\tnewPosition = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn newPosition;\r\n\t}\r\n\r\n\tsetDragDirectivesInputs(): void {\r\n\t\tthis.children = [];\r\n\t\tfor (let i = 0; i < this.dragDirectivesContentChildren.length; i++) {\r\n\t\t\tconst dragDirective: CfDragDirective | undefined = this.dragDirectivesContentChildren.get(i);\r\n\t\t\tif(dragDirective !== undefined) {\r\n\t\t\t\tdragDirective.direction = this.direction;\r\n\t\t\t\tdragDirective.dragDropListGroup = this.group;\r\n\t\t\t\tdragDirective.dragDropListDirective = this;\r\n\t\t\t\tdragDirective.originalDragDropListDirective = this;\r\n\t\t\t\tdragDirective.preventClick = this.preventClick;\r\n\t\t\t\tthis.children.push(dragDirective);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tif (this.group === null && this.direction === null) {\r\n\t\t\tthis.direction = 'vertical';\r\n\t\t}\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.dragDirectivesContentChildren.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n\t\t\tthis.setDragDirectivesInputs();\r\n\t\t});\r\n\t\tthis.setDragDirectivesInputs();\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.dragDropService.dragEvent.pipe(\r\n\t\t\ttakeUntilDestroyed(this.destroyRef),\r\n\t\t\tfilter(({ dragDirective }) => dragDirective.dragDropListDirective === this)\r\n\t\t).subscribe(({ dragDropListGroup, type, dragDirective }) => {\r\n\t\t\tif (this.group === null || (this.group === dragDropListGroup)) {\r\n\t\t\t\tswitch(type) {\r\n\t\t\t\t\tcase CfDragDropEventType.DRAG_START:\r\n\t\t\t\t\t\tthis.dragStart(dragDirective);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CfDragDropEventType.DRAG_END:\r\n\t\t\t\t\t\tthis.dragEnd();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfromEvent(this.elementRef.nativeElement, 'mouseenter').pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n\t\t\tif (\r\n\t\t\t\tthis.group !== null &&\r\n\t\t\t\tthis.dragDropService.activeDragDirective !== null && \r\n\t\t\t\tthis.dragDropService.activeDragDirective.dragDropListDirective !== null && \r\n\t\t\t\tthis.dragDropService.activeDragDirective.dragDropListDirective !== this &&\r\n\t\t\t\tthis.group === this.dragDropService.activeDragDirective.dragDropListDirective.group\r\n\t\t\t) {\r\n\t\t\t\tthis.elementRef.nativeElement.appendChild(this.dragDropService.activeDragDirective.element);\r\n\t\t\t\tthis.dragDropService.activeDragDirective.dragDropListDirective.dragEnd(false);\r\n\t\t\t\tthis.dragDropService.activeDragDirective.dragDropListDirective = this;\r\n\t\t\t\tthis.dragStart(this.dragDropService.activeDragDirective);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n}","import { DestroyRef, Directive, ElementRef, inject, Input, OnChanges } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { LoaderInterceptorFilterParams, LoaderInterceptorService } from \"../services/loader.interceptor.service\";\r\n\r\n@Directive({\r\n    selector: 'button[cfLoader],input[cfLoader],textarea[cfLoader]',\r\n    standalone: true\r\n})\r\nexport class LoaderDirective implements OnChanges {\r\n\r\n    element: ElementRef<HTMLButtonElement | HTMLInputElement | HTMLTextAreaElement> = inject(ElementRef);\r\n    loaderInterceptorService: LoaderInterceptorService = inject(LoaderInterceptorService);\r\n    destroyRef: DestroyRef = inject(DestroyRef);\r\n\r\n    @Input() loaderFilter: LoaderInterceptorFilterParams = {};\r\n\r\n    @Input() disabledState: boolean = false;\r\n\r\n    loadingFilterSubject: Subscription | null = null;\r\n\r\n    update(disabledState: boolean = false): void {\r\n        this.element.nativeElement.disabled = this.disabledState || disabledState;\r\n    }\r\n\r\n    updateSubscription(): void {\r\n        this.update();\r\n        if (this.loadingFilterSubject !== null) {\r\n            this.loadingFilterSubject.unsubscribe();\r\n        }\r\n        this.loadingFilterSubject = this.loaderInterceptorService.loadingFilter(this.loaderFilter).pipe(takeUntilDestroyed(this.destroyRef)).subscribe((disabledState: boolean) => {\r\n            this.update(disabledState);\r\n        });\r\n    }\r\n\r\n    ngOnChanges(): void {\r\n        this.updateSubscription();\r\n    }\r\n\r\n}\r\n","import { Directive, EventEmitter, HostListener, inject, Input, Output } from \"@angular/core\";\r\nimport { CfDialogConfiguration } from \"../../interfaces\";\r\nimport { CfDialogService } from \"../services\";\r\n\r\n@Directive({\r\n    selector: \"button[cfDialog]\",\r\n\tstandalone: true\r\n})\r\nexport class DialogDirective {\r\n\r\n    dialogService: CfDialogService = inject(CfDialogService);\r\n\r\n    @Input() configuration: CfDialogConfiguration = {};\r\n    @Input() data: any = undefined;\r\n\t@Input() closeValue: any = undefined;\r\n\t\r\n    @Input()\r\n    set cfDialog(name: string) {\r\n\t\tthis.name = name;\r\n    }\r\n\t\r\n\t@Output() onClose: EventEmitter<any> = new EventEmitter();\r\n\t@Output() onCloseValue: EventEmitter<any> = new EventEmitter();\r\n\t@Output() onCloseOnValue: EventEmitter<any> = new EventEmitter();\r\n\t@Output() onMessage: EventEmitter<any> = new EventEmitter();\r\n\t@Output() onDestroy: EventEmitter<any> = new EventEmitter();\r\n\r\n\tname: string | null = null;\r\n    \r\n    @HostListener('click')\r\n    click(): void {\r\n        if (this.name === null) {\r\n            return;\r\n        }\r\n        if (this.data !== undefined) {\r\n            this.configuration.data = this.data;\r\n        }\r\n        this.dialogService.openPredefined(this.name, this.configuration).then(({onClose, onCloseValue, onCloseOnValue, onMessage, onDestroy}) => {\r\n\t\t\tonClose.subscribe((value: any) => {\r\n\t\t\t\tthis.onClose.emit(value);\r\n\t\t\t});\r\n\t\t\tonCloseValue.subscribe((value: any) => {\r\n\t\t\t\tthis.onCloseValue.emit(value);\r\n\t\t\t});\r\n\t\t\tonCloseOnValue(this.closeValue).subscribe((value: any) => {\r\n\t\t\t\tthis.onCloseOnValue.emit(value);\r\n\t\t\t});\r\n\t\t\tonDestroy.subscribe((value: any) => {\r\n\t\t\t\tthis.onDestroy.emit(value);\r\n\t\t\t});\r\n\t\t\tonMessage.subscribe((value: any) => {\r\n\t\t\t\tthis.onMessage.emit(value);\r\n\t\t\t});\r\n\t\t});\r\n    }\r\n}\r\n","import { Directive, EventEmitter, HostListener, inject, Input, Output } from \"@angular/core\";\r\nimport { CfDialogService } from \"../services\";\r\nimport { ConfirmConfiguration } from \"../../interfaces\";\r\n\r\n@Directive({\r\n    selector: \"button[cfConfirmDialog]\",\r\n\tstandalone: true\r\n})\r\nexport class ConfirmDialogDirective {\r\n\r\n    dialogService: CfDialogService = inject(CfDialogService);\r\n\r\n    @Input()\r\n    set cfConfirmDialog(configuration: ConfirmConfiguration | string) {\r\n\t\tthis.configuration = configuration;\r\n    }\r\n\r\n\tconfiguration: ConfirmConfiguration | string | null = null;\r\n\r\n    @Output() onAccept: EventEmitter<any> = new EventEmitter();\r\n    @Output() onDecline: EventEmitter<any> = new EventEmitter();\r\n\r\n    @HostListener('click')\r\n    click(): void {\r\n        if (this.configuration === null) {\r\n            return;\r\n        }\r\n        this.dialogService.confirm(this.configuration).then(() => {\r\n            this.onAccept.emit();\r\n        }).catch(() => {\r\n            this.onDecline.emit();\r\n        });\r\n    }\r\n\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, UrlTree } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { CfConfigService, CfPermissionsService } from \"../services\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CfPermissionGuard implements CanActivate {\r\n\r\n\tprivate permissionsService: CfPermissionsService = inject(CfPermissionsService);\r\n\tprivate configService: CfConfigService = inject(CfConfigService);\r\n\tprivate router: Router = inject(Router);\r\n\r\n\tcanActivate(route: ActivatedRouteSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {\r\n\t\tif (route.data['permission'] !== undefined && typeof route.data['permission'] === 'string') {\r\n\t\t\tconst hasPermission: boolean = this.permissionsService.hasPermission(route.data['permission']);\r\n\t\t\tif (hasPermission) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn this.router.createUrlTree(this.configService.permissionGuardNoPermissionCommands);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n}","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n\tselector: 'cf-card-header',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\ttemplate: `\r\n\t\t<div class=\"cf-card cf-mb-4\">\r\n\t\t\t<div class=\"cf-flex cf-ai-center\">\r\n\t\t\t\t<span *ngIf=\"title !== null\">{{title}}</span>\r\n\t\t\t\t<span class=\"cf-ml-auto\"></span>\r\n\t\t\t\t<ng-content></ng-content>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t`\r\n})\r\nexport class CardHeaderComponent {\r\n\t@Input() title: string | null = null;\r\n}","import { NgFor, NgIf, NgStyle } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EmbeddedViewRef, EventEmitter, inject, Input, OnInit, Output, TemplateRef, ViewChild } from \"@angular/core\";\r\nimport { tap } from \"rxjs\";\r\nimport { ButtonConfiguration, CfDialogConfigurationBeforeClose } from \"../../interfaces\";\r\nimport { CfDialogRef } from \"../classes\";\r\nimport { BUTTON_CONFIGURATION_CANCEL, BUTTON_CONFIGURATION_NO, BUTTON_CONFIGURATION_YES, DIALOG_TRANSLATIONS_EN, DIALOG_TRANSLATIONS_HU } from \"../consts\";\r\nimport { ButtonDirective } from \"../directives/button.directive\";\r\nimport { CfTemplate } from '../directives/template.directive';\r\nimport { TranslationPipe } from \"../pipes\";\r\nimport { CfDialogService, TranslationsService } from \"../services\";\r\n\r\n@Component({\r\n    standalone: true,\r\n    template: `\r\n        <ng-content></ng-content>\r\n    `,\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nclass DialogContainerComponent {\r\n\r\n}\r\n\r\n@Component({\r\n    selector: 'cf-dialog',\r\n    standalone: true,\r\n    template: `\r\n        <ng-template #template cfTemplate=\"content\">\r\n            <div [ngStyle]=\"{'width': width}\">\r\n                <div class=\"cf-dialog-title cf-mb-4\" *ngIf=\"title !== ''\">{{title}}</div>\r\n                <ng-content></ng-content>\r\n                <ng-container *ngIf=\"processedButtons.length > 0\">\r\n                    <div class=\"cf-flex cf-flex-spacer-2 cf-flex-right cf-mt-4\">\r\n                        <ng-container *ngFor=\"let button of processedButtons\">\r\n                            <button cfButton [severity]=\"button.severity\" [label]=\"button.translateLabel ? (button.label|translation) : button.label\" *ngIf=\"button.callback !== undefined\" (click)=\"button.callback({dialogRef: dialogRef})\"></button>\r\n                        </ng-container>\r\n                    </div>\r\n                </ng-container>\r\n            </div>\r\n        </ng-template>\r\n    `,\r\n    imports: [\r\n        CfTemplate,\r\n        NgIf,\r\n        NgStyle,\r\n        NgFor,\r\n        TranslationPipe,\r\n        ButtonDirective\r\n    ],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DialogComponent implements OnInit {\r\n\r\n    cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n    dialogService: CfDialogService = inject(CfDialogService);\r\n    translationsService: TranslationsService = inject(TranslationsService);\r\n\r\n    @Input() title: string = '';\r\n    @Input() showCloseIcon: boolean | undefined = undefined;\r\n    @Input() containerClasses: string[] | undefined = undefined;\r\n    @Input() dialogClasses: string[] | undefined = undefined;\r\n    @Input() beforeClose: CfDialogConfigurationBeforeClose | undefined = undefined;\r\n    @Input() noPadding: boolean | undefined = undefined;\r\n    @Input() width: string = 'auto';\r\n    @Input() buttons: (ButtonConfiguration | string)[] = [];\r\n\r\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\r\n\r\n    @ViewChild('template') template: TemplateRef<any> | undefined = undefined;\r\n\r\n    dialogRef: CfDialogRef | null = null;\r\n\r\n    get processedButtons(): ButtonConfiguration[] {\r\n        const processedButtons: ButtonConfiguration[] = [];\r\n        for (let button of this.buttons) {\r\n            if (typeof button === 'string') {\r\n                switch(button) {\r\n                    case 'yes': processedButtons.push(BUTTON_CONFIGURATION_YES); break;\r\n                    case 'no': processedButtons.push(BUTTON_CONFIGURATION_NO); break;\r\n                    case 'cancel': processedButtons.push(BUTTON_CONFIGURATION_CANCEL); break;\r\n                }\r\n            } else {\r\n                processedButtons.push(button);\r\n            }\r\n        }\r\n        return processedButtons;\r\n    }\r\n\r\n    open(): void {\r\n        if (this.template === undefined) {\r\n            return;\r\n        }\r\n        const embeddedViewRef: EmbeddedViewRef<any> = this.template.createEmbeddedView(this.template);\r\n        embeddedViewRef.detectChanges()\r\n        this.dialogRef = this.dialogService.open(DialogContainerComponent, {\r\n            contentElement: embeddedViewRef.rootNodes[0],\r\n            showCloseIcon: this.showCloseIcon,\r\n            containerClasses: this.containerClasses,\r\n            dialogClasses: this.dialogClasses,\r\n            beforeClose: this.beforeClose,\r\n            noPadding: this.noPadding\r\n        });\r\n        this.dialogRef.onClose.pipe(tap((closeValue: any) => {\r\n            this.onClose.emit(closeValue);\r\n        })).subscribe();\r\n    }\r\n\r\n    close(): void {\r\n        if (this.dialogRef === null) {\r\n            return;\r\n        }\r\n        this.dialogRef.close();\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    constructor() {\r\n\t\tthis.translationsService.initModuleTranslation('dialog', 'hu', DIALOG_TRANSLATIONS_HU);\r\n\t\tthis.translationsService.initModuleTranslation('dialog', 'en', DIALOG_TRANSLATIONS_EN);\r\n        this.cdr.detach();\r\n    }\r\n\r\n}\r\n","import { ErrorTranslateHandlerFunction, TranslationType } from \"../../interfaces\";\r\n\r\nexport const ERROR_TRANSLATE_HANDLER_FUNCTION: ErrorTranslateHandlerFunction = ({ key, value, translationsService, localeId }) => {\r\n    return translationsService.getTranslation('formerrors.' + key, localeId, value);\r\n}\r\n\r\nexport const FORM_ERRORS_HU: TranslationType = {\r\n    'required': 'Kötelező kitölteni!',\r\n    'minlength': 'Legalább {{requiredLength}} katakter hosszú legyen!',\r\n    'maxlength': 'Legfeljebb {{requiredLength}} katakter hosszú legyen!',\r\n    'min': 'Minimum {{min}} lehet!',\r\n    'max': 'Maximum {{max}} lehet!'\r\n};\r\n\r\nexport const FORM_ERRORS_EN: TranslationType = {\r\n    'required': 'Required!',\r\n    'minlength': 'Should be at leats {{requiredLength}} char long!',\r\n    'maxlength': 'Should be maximum {{requiredLength}} char long!',\r\n    'min': 'Min allowed: {{min}}!',\r\n    'max': 'Max allowed: {{max}}!'\r\n};\r\n","import { NgFor, NgIf } from \"@angular/common\";\r\nimport { ChangeDetectorRef, Component, inject, LOCALE_ID, OnInit } from \"@angular/core\";\r\nimport { CfDialog, CfFormErrors } from \"../../classes\";\r\nimport { CfFormErrorItem, ErrorTranslateHandlers } from \"../../../interfaces\";\r\nimport { ERROR_TRANSLATE_HANDLERS } from \"../../tokens\";\r\nimport { ERROR_TRANSLATE_HANDLER_FUNCTION, FORM_ERRORS_EN, FORM_ERRORS_HU } from \"../../consts/formerrors\";\r\nimport { ButtonDirective } from \"../../directives\";\r\nimport { TranslationsService } from \"../../services\";\r\n\r\n@Component({\r\n    standalone: true,\r\n    templateUrl: 'formerrorsmodal.component.html',\r\n    styleUrls: ['formerrorsmodal.component.scss'],\r\n    imports: [\r\n        ButtonDirective,\r\n        NgIf,\r\n        NgFor\r\n    ]\r\n})\r\nexport class FormErrorsModalComponent extends CfDialog implements OnInit {\r\n\r\n    cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    title: string = this.config.getData('title', 'Hiba');\r\n    cfFormErrors: CfFormErrors | null = this.config.getData('cfFormErrors', null);\r\n    \r\n    translationsService: TranslationsService = inject(TranslationsService);\r\n    localeId: string = inject(LOCALE_ID);\r\n\r\n    errorTranslateHandlers: ErrorTranslateHandlers = inject(ERROR_TRANSLATE_HANDLERS);\r\n    defaultErrorTranslateHandlers: ErrorTranslateHandlers = new Map();\r\n\r\n    errorTranslate(cfFormErrorItem: CfFormErrorItem): string {\r\n        const handler = this.errorTranslateHandlers.get(cfFormErrorItem.key) || this.defaultErrorTranslateHandlers.get(cfFormErrorItem.key);\r\n        return handler !== undefined ? handler({\r\n            value: cfFormErrorItem.value,\r\n            translationsService: this.translationsService,\r\n            key: cfFormErrorItem.key,\r\n            localeId: this.localeId\r\n        }) : `-- NO HANDLER FOR: ${cfFormErrorItem.key} --`;\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.cdr.detectChanges();\r\n    }\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.defaultErrorTranslateHandlers.set('required', ERROR_TRANSLATE_HANDLER_FUNCTION);\r\n        this.defaultErrorTranslateHandlers.set('minlength', ERROR_TRANSLATE_HANDLER_FUNCTION);\r\n        this.defaultErrorTranslateHandlers.set('maxlength', ERROR_TRANSLATE_HANDLER_FUNCTION);\r\n        this.defaultErrorTranslateHandlers.set('min', ERROR_TRANSLATE_HANDLER_FUNCTION);\r\n        this.defaultErrorTranslateHandlers.set('max', ERROR_TRANSLATE_HANDLER_FUNCTION);\r\n\r\n\t\tthis.translationsService.initModuleTranslation('formerrors', 'hu', FORM_ERRORS_HU);\r\n\t\tthis.translationsService.initModuleTranslation('formerrors', 'en-us', FORM_ERRORS_EN);\r\n\r\n        this.cdr.detach();\r\n    }\r\n\r\n}\r\n","<div class=\"cf-dialog-title\">{{title}}</div>\r\n<div class=\"cf-dialog-content\">\r\n    <div class=\"cf-vgrid\" *ngIf=\"cfFormErrors !== null\">\r\n        <div *ngFor=\"let cfFormErrorErrorItem of cfFormErrors.errors.values()\">\r\n            <div class=\"cf-text-bold cf-mb-2\">{{cfFormErrorErrorItem.labelPath.join(' - ')}}</div>\r\n            <div *ngFor=\"let error of cfFormErrorErrorItem.errors\">{{errorTranslate(error)}}</div>\r\n        </div>\r\n    </div>\r\n</div>\r\n<div class=\"cf-flex cf-flex-end cf-flex-spacer-2 cf-flex-right\">\r\n    <button cfButton [severity]=\"'danger'\" [label]=\"'Bezárás'\" (click)=\"close()\"></button>\r\n</div>","import { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\r\nimport { ErrorInterceptor, LoaderInterceptor, LockInterceptor, Mockinterceptor, PrecheckInterceptor, RequestIdInterceptor, TokenInterceptor } from \"../interceptors\";\r\nimport { HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\nimport { CF_MOCK } from \"../tokens\";\r\nimport { MockResponses } from \"../../interfaces\";\r\n\r\nexport function provideErrorInterceptor(): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: HTTP_INTERCEPTORS,\r\n        useClass: ErrorInterceptor,\r\n        multi: true\r\n    }]);\r\n}\r\n\r\nexport function provideLoaderInterceptor(): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: HTTP_INTERCEPTORS,\r\n        useClass: LoaderInterceptor,\r\n        multi: true\r\n    }]);\r\n}\r\n\r\nexport function provideLockInterceptor(): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: HTTP_INTERCEPTORS,\r\n        useClass: LockInterceptor,\r\n        multi: true\r\n    }]);\r\n}\r\n\r\nexport function provideMockInterceptor(): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: HTTP_INTERCEPTORS,\r\n        useClass: Mockinterceptor,\r\n        multi: true\r\n    }]);\r\n}\r\n\r\nexport function providePrecheckInterceptor(): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: HTTP_INTERCEPTORS,\r\n        useClass: PrecheckInterceptor,\r\n        multi: true\r\n    }]);\r\n}\r\n\r\nexport function provideRequestIdInterceptor(): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: HTTP_INTERCEPTORS,\r\n        useClass: RequestIdInterceptor,\r\n        multi: true\r\n    }]);\r\n}\r\n\r\nexport function provideTokenInterceptor(): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: HTTP_INTERCEPTORS,\r\n        useClass: TokenInterceptor,\r\n        multi: true\r\n    }]);\r\n}\r\n \r\nexport function provideInterceptors(interceptors: ('error' | 'loader' | 'lock' | 'mock' | 'precheck' | 'requestId' | 'token')[]): EnvironmentProviders {\r\n    return makeEnvironmentProviders([\r\n        interceptors.includes('error') ? provideErrorInterceptor() : [],\r\n        interceptors.includes('loader') ? provideLoaderInterceptor() : [],\r\n        interceptors.includes('lock') ? provideLockInterceptor() : [],\r\n        interceptors.includes('mock') ? provideMockInterceptor() : [],\r\n        interceptors.includes('precheck') ? providePrecheckInterceptor() : [],\r\n        interceptors.includes('requestId') ? provideRequestIdInterceptor() : [],\r\n        interceptors.includes('token') ? provideTokenInterceptor() : []\r\n    ]);\r\n}\r\n\r\nexport function provideMockResponses(mockResponses: MockResponses): EnvironmentProviders {\r\n\treturn makeEnvironmentProviders([{\r\n\t\tprovide: CF_MOCK,\r\n\t\tuseValue: mockResponses\r\n\t}]);\r\n}\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\r\nimport { ALERT_CONFIGURATIONS, CF_PREDEFINED_DIALOGS, CONFIRM_CONFIGURATIONS } from \"../tokens\";\r\nimport { AlertConfiguration, ConfirmConfiguration, PredefinedDialogs } from \"../../interfaces\";\r\n\r\nexport function provideConfirmConfigurations(confirmConfigurations: {[key: string]: ConfirmConfiguration}): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: CONFIRM_CONFIGURATIONS,\r\n        useValue: confirmConfigurations\r\n    }]);\r\n}\r\n\r\nexport function provideAlertConfigurations(confirmConfigurations: {[key: string]: AlertConfiguration}): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: ALERT_CONFIGURATIONS,\r\n        useValue: confirmConfigurations\r\n    }]);\r\n}\r\n\r\nexport function providePredefinedDialogs(predefinedDialogs: PredefinedDialogs): EnvironmentProviders {\r\n    return makeEnvironmentProviders([{\r\n        provide: CF_PREDEFINED_DIALOGS,\r\n        useValue: predefinedDialogs\r\n    }]);\r\n}\r\n","/* SHARED MODULE */\r\nexport * from './lib/shared';\r\n\r\n/* FEATURES */\r\nexport * from './lib/features';\r\n\r\n/* INTERFACES */\r\nexport * from './lib/interfaces';\r\n\r\n/* ENUMS */\r\nexport * from './lib/enums';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1.InterceptorType","catchError","tap","takeUntil","filter","debounceTime","i1","map"],"mappings":"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"}