{"version":3,"file":"ngx-danisoft-utils.mjs","sources":["../../../projects/ngx-danisoft-utils/src/lib/components/ngx-danisoft-utils/ngx-danisoft-utils.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/ngx-danisoft-utils/ngx-danisoft-utils.component.html","../../../projects/ngx-danisoft-utils/src/lib/pipes/utils-highlight.pipe.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-autocomplete/utils-autocomplete.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-autocomplete/utils-autocomplete.component.html","../../../projects/ngx-danisoft-utils/src/lib/services/utils-dropzone.service.ts","../../../projects/ngx-danisoft-utils/src/lib/helpers/helpers.ts","../../../projects/ngx-danisoft-utils/src/lib/interfaces/dropzone.interface.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-dropzone-preview/utils-dropzone-remove-badge/utils-dropzone-remove-badge.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-dropzone-preview/utils-dropzone-remove-badge/utils-dropzone-remove-badge.component.html","../../../projects/ngx-danisoft-utils/src/lib/components/utils-dropzone-preview/utils-dropzone-preview.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-dropzone-preview/utils-dropzone-preview.component.html","../../../projects/ngx-danisoft-utils/src/lib/components/utils-dropzone/utils-dropzone.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-dropzone/utils-dropzone.component.html","../../../projects/ngx-danisoft-utils/src/lib/enums/country-iso.enum.ts","../../../projects/ngx-danisoft-utils/src/lib/data/country-code.ts","../../../projects/ngx-danisoft-utils/src/lib/enums/search-country-field.enum.ts","../../../projects/ngx-danisoft-utils/src/lib/validator/ngx-intl-tel-input.validator.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-intl-tel-input/utils-intl-tel-input.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-intl-tel-input/utils-intl-tel-input.component.html","../../../projects/ngx-danisoft-utils/src/lib/pipes/utils-keys.pipe.ts","../../../projects/ngx-danisoft-utils/src/lib/utils/keyboard-util.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-otp-input/utils-otp-input.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-otp-input/utils-otp-input.component.html","../../../projects/ngx-danisoft-utils/src/lib/services/utils-pagination.service.ts","../../../projects/ngx-danisoft-utils/src/lib/directives/utils-pagination.directive.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-pagination/utils-pagination.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-pagination/utils-pagination.component.html","../../../projects/ngx-danisoft-utils/src/lib/interfaces/utils-spinner-config.ts","../../../projects/ngx-danisoft-utils/src/lib/enums/utils-spinner.enum.ts","../../../projects/ngx-danisoft-utils/src/lib/pipes/utils-safe-html.pipe.ts","../../../projects/ngx-danisoft-utils/src/lib/services/utils-spinner.service.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-spinner/utils-spinner.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-spinner/utils-spinner.component.html","../../../projects/ngx-danisoft-utils/src/lib/interfaces/toast-ref.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-toastr/portal/portal.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-toastr/portal/dom-portal-host.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-toastr/overlay/overlay-ref.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-toastr/overlay/overlay-container.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-toastr/overlay/overlay.ts","../../../projects/ngx-danisoft-utils/src/lib/interfaces/toastr-interface.ts","../../../projects/ngx-danisoft-utils/src/lib/services/utils-toastr.service.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-toastr/utils-toastr.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-toastr/utils-toastr.component.html","../../../projects/ngx-danisoft-utils/src/lib/pipes/utils-customCurrency.pipe.ts","../../../projects/ngx-danisoft-utils/src/lib/pipes/utlils-paginate.pipe.ts","../../../projects/ngx-danisoft-utils/src/lib/services/ngx-danisoft-utils.service.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-ui-table-sorter/utils-ui-table-sorter.component.ts","../../../projects/ngx-danisoft-utils/src/lib/components/utils-ui-table-sorter/utils-ui-table-sorter.component.html","../../../projects/ngx-danisoft-utils/src/lib/directives/tablesorter.directive.ts","../../../projects/ngx-danisoft-utils/src/lib/directives/utils-dropzone-label.directive.ts","../../../projects/ngx-danisoft-utils/src/lib/directives/utils-native-element-injector.directive.ts","../../../projects/ngx-danisoft-utils/src/lib/directives/utils-toast.directive.ts","../../../projects/ngx-danisoft-utils/src/lib/enums/phone-number-format.enum.ts","../../../projects/ngx-danisoft-utils/src/lib/models/opt-config.model.ts","../../../projects/ngx-danisoft-utils/src/lib/pipes/utils.truncate.pipe.ts","../../../projects/ngx-danisoft-utils/src/lib/services/utils-http-client.service.ts","../../../projects/ngx-danisoft-utils/src/lib/services/utils-storage.service.ts","../../../projects/ngx-danisoft-utils/src/lib/services/utils-local-storage.service.ts","../../../projects/ngx-danisoft-utils/src/lib/services/utils-session-torage.service.ts","../../../projects/ngx-danisoft-utils/src/public-api.ts","../../../projects/ngx-danisoft-utils/src/ngx-danisoft-utils.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lib-ngx-danisoft-utils',\n  templateUrl: './ngx-danisoft-utils.component.html',\n  styleUrls: ['./ngx-danisoft-utils.component.scss'],\n  providers: [],\n})\nexport class NgxDanisoftUtilsComponent {}\n","","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'highlight',\n    standalone: true,\n})\nexport class UtilsHighlightPipe implements PipeTransform {\n    transform(text: any, search: any, searchKeyword?: any): any {\n        let pattern = search.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n        pattern = pattern\n            .split(' ')\n            .filter((t: string) => {\n                return t.length > 0;\n            })\n            .join('|');\n        const regex = new RegExp(pattern, 'gi');\n\n        if (!search) {\n            return text;\n        }\n\n        if (searchKeyword) {\n            const name = text[searchKeyword].replace(\n                regex,\n                (match: string) => `<b>${match}</b>`\n            );\n            // copy original object\n            const textCopied = { ...text };\n            // set bold value into searchKeyword of copied object\n            textCopied[searchKeyword] = name;\n            return textCopied;\n        } else {\n            return search ? text.replace(regex, (match: string) => `<b>${match}</b>`) : text;\n        }\n    }\n}\n","import {\n    AfterViewInit,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    Renderer2,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { debounceTime, filter, map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { UtilsHighlightPipe } from '../../pipes/utils-highlight.pipe';\n\n/**\n * Keyboard events\n */\nconst isArrowUp = (keyCode: number): boolean => keyCode === 38;\nconst isArrowDown = (keyCode: number): boolean => keyCode === 40;\nconst isArrowUpDown = (keyCode: number): boolean => isArrowUp(keyCode) || isArrowDown(keyCode);\nconst isEnter = (keyCode: number): boolean => keyCode === 13;\nconst isBackspace = (keyCode: number): boolean => keyCode === 8;\nconst isDelete = (keyCode: number): boolean => keyCode === 46;\nconst isESC = (keyCode: number): boolean => keyCode === 27;\nconst isTab = (keyCode: number): boolean => keyCode === 9;\n\n@Component({\n    selector: 'utils-autocomplete',\n    standalone: true,\n    imports: [CommonModule, FormsModule, UtilsHighlightPipe],\n    templateUrl: './utils-autocomplete.component.html',\n    styleUrls: ['./utils-autocomplete.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => UtilsAutocompleteComponent),\n            multi: true,\n        },\n    ],\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        '(document:click)': 'handleClick($event)',\n        class: 'ng-autocomplete',\n    },\n})\nexport class UtilsAutocompleteComponent\n    implements OnInit, OnChanges, AfterViewInit, ControlValueAccessor {\n    @ViewChild('searchInput') searchInput!: ElementRef; // input element\n    @ViewChild('filteredListElement') filteredListElement!: ElementRef; // element of items\n    @ViewChild('historyListElement') historyListElement!: ElementRef; // element of history items\n\n    inputKeyUp$!: Observable<any>;\n    inputKeyDown$!: Observable<any>;\n\n    public query = ''; // search query\n    public filteredList: any[] = []; // list of items\n    public historyList: any[] = []; // list of history items\n    public isHistoryListVisible = false;\n    public elementRef;\n    public selectedIdx = -1;\n    public toHighlight = '';\n    public notFound = false;\n    public isFocused = false;\n    public isOpen = false;\n    public isScrollToEnd = false;\n    public overlay = false;\n    private manualOpen: boolean | undefined = undefined;\n    private manualClose: boolean | undefined = undefined;\n\n    // @Inputs\n    /**\n     * Data of items list.\n     * It can be array of strings or array of objects.\n     */\n    @Input() public data: any[] = [];\n    @Input() public searchKeyword: string = 'name'; // keyword to filter the list\n    @Input() public placeholder = '';\n    @Input() public heading = '';\n    @Input() public initialValue: any;\n    @Input() cssClass = 'autocomplete-default';\n    @Input() cssTemplateClass = '';\n    @Input() cssItemClass = '';\n    /**\n     * History identifier of history list\n     * When valid history identifier is given, then component stores selected item to local storage of user's browser.\n     * If it is null then history is hidden.\n     * History list is visible if at least one history item is stored.\n     */\n    @Input() public historyIdentifier: string = '';\n    /**\n     * Heading text of history list.\n     * If it is null then history heading is hidden.\n     */\n    @Input() public historyHeading = 'Recently selected';\n    @Input() public historyListMaxNumber = 15; // maximum number of items in the history list.\n    @Input() public notFoundText = 'Not found'; // set custom text when filter returns empty result\n    @Input() public isLoading: boolean = false; // loading mask\n    @Input() public debounceTime: number = 300; // delay time while typing\n    @Input() public disabled: boolean = false; // input disable/enable\n    /**\n     * The minimum number of characters the user must type before a search is performed.\n     */\n    @Input() public minQueryLength = 1;\n\n    /**\n     * Focus first item in the list\n     */\n    @Input() public focusFirst = false;\n\n    /**\n     * Custom filter function\n     */\n    @Input() public customFilter: (items: any[], query: string) => any[] = (items: any[], query: string) => items;\n\n    /**\n     * Custom result render function\n     * @param value - selected value to be rendered inside input field\n     */\n    @Input() public selectedValueRender: (value: any) => string = (value: any) => value;\n\n    // @Output events\n    /** Event that is emitted whenever an item from the list is selected. */\n    @Output() selected = new EventEmitter<any>();\n\n    /** Event that is emitted whenever an input is changed. */\n    @Output() inputChanged = new EventEmitter<any>();\n\n    /** Event that is emitted whenever an input is focused. */\n    @Output() readonly inputFocused: EventEmitter<void> =\n        new EventEmitter<void>();\n\n    /** Event that is emitted whenever an input loses focus. */\n    @Output() readonly inputBlurred: EventEmitter<void> =\n        new EventEmitter<void>();\n\n    /** Event that is emitted whenever an input is cleared. */\n    @Output() readonly inputCleared: EventEmitter<void> =\n        new EventEmitter<void>();\n\n    /** Event that is emitted when the autocomplete panel is opened. */\n    @Output() readonly opened: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Event that is emitted when the autocomplete panel is closed. */\n    @Output() readonly closed: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Event that is emitted when scrolled to the end of items. */\n    @Output() readonly scrolledToEnd: EventEmitter<void> =\n        new EventEmitter<void>();\n\n    // Custom templates\n    @Input() itemTemplate!: TemplateRef<any>;\n    @Input() notFoundTemplate!: TemplateRef<any>;\n    @ContentChild(TemplateRef) customTemplate!: TemplateRef<any>;\n\n    /**\n     * Propagates new value when model changes\n     */\n    propagateChange: any = () => { };\n    /**\n     * Propagates new value when model bur\n     */\n    propagateBlur: any = () => { };\n\n    onTouched: any = () => { };\n\n    /**\n     * Writes a new value from the form model into the view,\n     * Updates model\n     */\n    writeValue(value: any = '') {\n        this.query =\n            this.selectedValueRender !== undefined\n                ? this.selectedValueRender(value)\n                : this.defaultWriteValue(value);\n    }\n\n    private defaultWriteValue(value: any) {\n        return value && !this.isTypeString(value)\n            ? value[this.searchKeyword]\n            : value;\n    }\n\n    /**\n     * Registers a handler that is called when something in the view has changed\n     */\n    registerOnChange(fn: any) {\n        this.propagateChange = fn;\n    }\n    /**\n     * Registers a handler that is called when something in the view has blur\n     */\n\n    registerOnBlur(fn: any) {\n        this.propagateBlur = fn;\n    }\n\n    /**\n     * Registers a handler specifically for when a control receives a touch event\n     */\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    /**\n     * Event that is called when the value of an input element is changed\n     */\n    onChange(event: any) {\n        this.propagateChange(event.target.value);\n    }\n\n    onBlur(event: any) {\n        this.inputBlurred.emit(event.target.value);\n    }\n\n    constructor(elementRef: ElementRef, private renderer: Renderer2) {\n        this.elementRef = elementRef;\n    }\n\n    /**\n     * Event that is called when the control status changes to or from DISABLED\n     */\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    ngOnInit(): void { }\n\n    ngAfterViewInit() {\n        this.initEventStream();\n        this.handleScroll();\n    }\n\n    /**\n     * Set initial value\n     * @param value\n     */\n    public setInitialValue(value: any) {\n        if (this.initialValue) {\n            this.select(value);\n        }\n    }\n\n    /**\n     * Update search results\n     */\n    ngOnChanges(changes: SimpleChanges | any): void {\n        this.setInitialValue(this.initialValue);\n        if (changes && changes.data && Array.isArray(changes.data.currentValue)) {\n            this.handleItemsChange();\n            if (!changes.data.firstChange && this.isFocused) {\n                this.handleOpen();\n            }\n        }\n    }\n\n    /**\n     * Items change\n     */\n    public handleItemsChange() {\n        this.isScrollToEnd = false;\n        if (!this.isOpen) {\n            return;\n        }\n\n        this.filteredList = this.data;\n        this.notFound = !this.filteredList || this.filteredList.length === 0;\n\n        // Filter list when updating data and panel is open\n        if (this.isOpen) {\n            this.filterList();\n        }\n    }\n\n    /**\n     * Filter data\n     */\n    public filterList() {\n        this.selectedIdx = -1;\n        this.initSearchHistory();\n        if (this.query != null && this.data) {\n            this.toHighlight = this.query;\n            this.filteredList =\n                this.customFilter !== undefined\n                    ? this.customFilter([...this.data], this.query)\n                    : this.defaultFilterFunction();\n            // If [focusFirst]=\"true\" automatically focus the first match\n            if (this.filteredList.length > 0 && this.focusFirst) {\n                this.selectedIdx = 0;\n            }\n        } else {\n            this.notFound = false;\n        }\n    }\n\n    /**\n     * Default filter function, used unless customFilter is provided\n     */\n    public defaultFilterFunction(): any[] {\n        return this.data.filter((item: any) => {\n            if (typeof item === 'string') {\n                // string logic, check equality of strings\n                return item.toLowerCase().indexOf(this.query.toLowerCase()) > -1;\n            } else if (typeof item === 'object' && item instanceof Object) {\n                // object logic, check property equality\n                return item[this.searchKeyword]\n                    ? item[this.searchKeyword]\n                        .toLowerCase()\n                        .indexOf(this.query.toLowerCase()) > -1\n                    : '';\n            }\n            return [];\n        });\n    }\n\n    /**\n     * Check if item is a string in the list.\n     * @param item\n     */\n    isTypeString(item: any) {\n        return typeof item === 'string';\n    }\n\n    /**\n     * Select item in the list.\n     * @param item\n     */\n    public select(item: any) {\n        this.query = !this.isTypeString(item) ? item[this.searchKeyword] : item;\n        this.isOpen = true;\n        this.overlay = false;\n        this.selected.emit(item);\n        this.propagateChange(item);\n\n        if (this.initialValue) {\n            // check if history already exists in localStorage and then update\n            const history = window.localStorage.getItem(`${this.historyIdentifier}`);\n            if (history) {\n                let existingHistory = JSON.parse(\n                    localStorage[`${this.historyIdentifier}`]\n                );\n                if (!(existingHistory instanceof Array)) existingHistory = [];\n\n                // check if selected item exists in existingHistory\n                if (\n                    !existingHistory.some((existingItem: any) =>\n                        !this.isTypeString(existingItem)\n                            ? existingItem[this.searchKeyword] == item[this.searchKeyword]\n                            : existingItem == item\n                    )\n                ) {\n                    existingHistory.unshift(item);\n                    localStorage.setItem(\n                        `${this.historyIdentifier}`,\n                        JSON.stringify(existingHistory)\n                    );\n\n                    // check if items don't exceed max allowed number\n                    if (existingHistory.length >= this.historyListMaxNumber) {\n                        existingHistory.splice(existingHistory.length - 1, 1);\n                        localStorage.setItem(\n                            `${this.historyIdentifier}`,\n                            JSON.stringify(existingHistory)\n                        );\n                    }\n                } else {\n                    // if selected item exists in existingHistory swap to top in array\n                    if (!this.isTypeString(item)) {\n                        // object logic\n                        const copiedExistingHistory = existingHistory.slice(); // copy original existingHistory array\n                        const selectedIndex = copiedExistingHistory\n                            .map((el: any) => el[this.searchKeyword])\n                            .indexOf(item[this.searchKeyword]);\n                        copiedExistingHistory.splice(selectedIndex, 1);\n                        copiedExistingHistory.splice(0, 0, item);\n                        localStorage.setItem(\n                            `${this.historyIdentifier}`,\n                            JSON.stringify(copiedExistingHistory)\n                        );\n                    } else {\n                        // string logic\n                        const copiedExistingHistory = existingHistory.slice(); // copy original existingHistory array\n                        copiedExistingHistory.splice(\n                            copiedExistingHistory.indexOf(item),\n                            1\n                        );\n                        copiedExistingHistory.splice(0, 0, item);\n                        localStorage.setItem(\n                            `${this.historyIdentifier}`,\n                            JSON.stringify(copiedExistingHistory)\n                        );\n                    }\n                }\n            } else {\n                this.saveHistory(item);\n            }\n        } else {\n            this.saveHistory(item);\n        }\n        this.handleClose();\n    }\n\n    /**\n     * Document click\n     * @param e event\n     */\n    public handleClick(e: any) {\n        let clickedComponent = e.target;\n        let inside = false;\n        do {\n            if (clickedComponent === this.elementRef.nativeElement) {\n                inside = true;\n                if (this.filteredList.length) {\n                    this.handleOpen();\n                }\n            }\n            clickedComponent = clickedComponent.parentNode;\n        } while (clickedComponent);\n        if (!inside) {\n            this.handleClose();\n        }\n    }\n\n    /**\n     * Handle body overlay\n     */\n    handleOverlay() {\n        this.overlay = false;\n    }\n\n    /**\n     * Scroll items\n     */\n    public handleScroll() {\n        this.renderer.listen(\n            this.filteredListElement.nativeElement,\n            'scroll',\n            () => {\n                this.scrollToEnd();\n            }\n        );\n    }\n\n    /**\n     * Define panel state\n     */\n    setPanelState(event: any) {\n        if (event) {\n            event.stopPropagation();\n        }\n        // If controls are untouched\n        if (\n            typeof this.manualOpen === 'undefined' &&\n            typeof this.manualClose === 'undefined'\n        ) {\n            this.isOpen = false;\n            this.handleOpen();\n        }\n\n        // If one of the controls is untouched and other is deactivated\n        if (\n            (typeof this.manualOpen === 'undefined' && this.manualClose === false) ||\n            (typeof this.manualClose === 'undefined' && this.manualOpen === false)\n        ) {\n            this.isOpen = false;\n            this.handleOpen();\n        }\n\n        // if controls are touched but both are deactivated\n        if (this.manualOpen === false && this.manualClose === false) {\n            this.isOpen = false;\n            this.handleOpen();\n        }\n\n        // if open control is touched and activated\n        if (this.manualOpen) {\n            this.isOpen = false;\n            this.handleOpen();\n            this.manualOpen = false;\n        }\n\n        // if close control is touched and activated\n        if (this.manualClose) {\n            this.isOpen = true;\n            this.handleClose();\n            this.manualClose = false;\n        }\n    }\n\n    /**\n     * Manual controls\n     */\n    open() {\n        this.manualOpen = true;\n        this.isOpen = false;\n        this.handleOpen();\n    }\n\n    close() {\n        this.manualClose = true;\n        this.isOpen = true;\n        this.handleClose();\n    }\n\n    focus() {\n        this.handleFocus(event);\n    }\n\n    blur() {\n        this.handleClose(); // Remove the 'event' parameter\n    }\n\n    clear() {\n        this.remove(event);\n    }\n\n    /**\n     * Remove search query\n     */\n    public remove(e: any) {\n        e.stopPropagation();\n        this.query = '';\n        this.inputCleared.emit();\n        this.propagateChange(this.query);\n        this.setPanelState(e);\n\n        if (this.data && !this.data.length) {\n            this.notFound = false;\n        }\n    }\n\n    /**\n     * Initialize historyList search\n     */\n    initSearchHistory() {\n        this.isHistoryListVisible = false;\n        if (this.historyIdentifier && !this.query) {\n            const history = window.localStorage.getItem(`${this.historyIdentifier}`);\n            if (history) {\n                this.isHistoryListVisible = true;\n                this.filteredList = [];\n                this.historyList = history ? JSON.parse(history) : [];\n            } else {\n                this.isHistoryListVisible = false;\n            }\n        } else {\n            this.isHistoryListVisible = false;\n        }\n    }\n\n    handleOpen() {\n        if (this.isOpen || (this.isOpen && !this.isLoading)) {\n            return;\n        }\n        // If data exists\n        if (this.data && this.data.length) {\n            this.isOpen = true;\n            this.overlay = true;\n            this.filterList();\n            this.opened.emit();\n        }\n    }\n\n    handleClose() {\n        if (!this.isOpen) {\n            this.isFocused = false;\n            return;\n        }\n        this.isOpen = false;\n        this.overlay = false;\n        this.filteredList = [];\n        this.selectedIdx = -1;\n        this.notFound = false;\n        this.isHistoryListVisible = false;\n        this.isFocused = false;\n        this.closed.emit();\n    }\n\n    handleFocus(e: any) {\n        this.searchInput.nativeElement.focus();\n        if (this.isFocused) {\n            return;\n        }\n        this.inputFocused.emit(e);\n        // if data exists then open\n        if (this.data && this.data.length) {\n            this.setPanelState(e);\n        }\n        this.isFocused = true;\n    }\n\n    handleBlur(e: any) {\n        this.inputBlurred.emit(e);\n        //this.onTouched(e);\n        //this.isFocused = false;\n        //this.handleClose();\n    }\n\n    scrollToEnd(): void {\n        if (this.isScrollToEnd) {\n            return;\n        }\n\n        const scrollTop = this.filteredListElement.nativeElement.scrollTop;\n        const scrollHeight = this.filteredListElement.nativeElement.scrollHeight;\n        const elementHeight = this.filteredListElement.nativeElement.clientHeight;\n        const atBottom =\n            elementHeight != 0 &&\n            Math.abs(scrollHeight - elementHeight - scrollTop) < 1;\n\n        if (atBottom) {\n            this.scrolledToEnd.emit();\n            this.isScrollToEnd = true;\n        }\n    }\n\n    /**\n     * Initialize keyboard events\n     */\n    initEventStream() {\n        this.inputKeyUp$ = fromEvent(this.searchInput.nativeElement, 'keyup').pipe(\n            map((e: any) => e)\n        );\n\n        this.inputKeyDown$ = fromEvent(\n            this.searchInput.nativeElement,\n            'keydown'\n        ).pipe(map((e: any) => e));\n\n        this.listenEventStream();\n    }\n\n    /**\n     * Listen keyboard events\n     */\n    listenEventStream() {\n        // key up event\n        this.inputKeyUp$\n            .pipe(\n                filter(\n                    (e) =>\n                        !isArrowUpDown(e.keyCode) &&\n                        !isEnter(e.keyCode) &&\n                        !isESC(e.keyCode) &&\n                        !isTab(e.keyCode)\n                ),\n                debounceTime(this.debounceTime)\n            )\n            .subscribe((e) => {\n                this.onKeyUp(e);\n            });\n\n        // cursor up & down\n        this.inputKeyDown$\n            .pipe(filter((e) => isArrowUpDown(e.keyCode)))\n            .subscribe((e) => {\n                e.preventDefault();\n                this.onFocusItem(e);\n            });\n\n        // enter keyup\n        this.inputKeyUp$.pipe(filter((e) => isEnter(e.keyCode))).subscribe((e) => {\n            //this.onHandleEnter();\n        });\n\n        // enter keydown\n        this.inputKeyDown$\n            .pipe(filter((e) => isEnter(e.keyCode)))\n            .subscribe((e) => {\n                this.onHandleEnter();\n            });\n\n        // ESC\n        this.inputKeyUp$\n            .pipe(filter((e) => isESC(e.keyCode), debounceTime(100)))\n            .subscribe((e) => {\n                this.onEsc();\n            });\n\n        // TAB\n        this.inputKeyDown$.pipe(filter((e) => isTab(e.keyCode))).subscribe((e) => {\n            this.onTab();\n        });\n\n        // delete\n        this.inputKeyDown$\n            .pipe(filter((e) => isBackspace(e.keyCode) || isDelete(e.keyCode)))\n            .subscribe((e) => {\n                this.onDelete();\n            });\n    }\n\n    /**\n     * on keyup == when input changed\n     * @param e event\n     */\n    onKeyUp(e: any) {\n        this.notFound = false; // search results are unknown while typing\n        // if input is empty\n        if (!this.query) {\n            this.notFound = false;\n            this.inputChanged.emit(e.target.value);\n            this.inputCleared.emit();\n            this.setPanelState(e);\n        }\n        // note that '' can be a valid query\n        if (!this.query && this.query !== '') {\n            return;\n        }\n        // if query >= to minQueryLength\n        if (this.query.length >= this.minQueryLength) {\n            this.inputChanged.emit(e.target.value);\n            this.filterList();\n\n            // If no results found\n            if (!this.filteredList.length && !this.isLoading) {\n                this.notFoundText ? (this.notFound = true) : (this.notFound = false);\n            }\n\n            if (this.data && !this.data.length) {\n                this.isOpen = true;\n            }\n        }\n    }\n\n    /**\n     * Keyboard arrow top and arrow bottom\n     * @param e event\n     */\n    onFocusItem(e: any) {\n        // move arrow up and down on filteredList or historyList\n        if (!this.historyList.length || !this.isHistoryListVisible) {\n            // filteredList\n            const totalNumItem = this.filteredList.length;\n            if (e.key === 'ArrowDown') {\n                let sum = this.selectedIdx;\n                sum = this.selectedIdx === null ? 0 : sum + 1;\n                this.selectedIdx = (totalNumItem + sum) % totalNumItem;\n                this.scrollToFocusedItem(this.selectedIdx);\n            } else if (e.key === 'ArrowUp') {\n                if (this.selectedIdx == -1) {\n                    this.selectedIdx = 0;\n                }\n                this.selectedIdx = (totalNumItem + this.selectedIdx - 1) % totalNumItem;\n                this.scrollToFocusedItem(this.selectedIdx);\n            }\n        } else {\n            // historyList\n            const totalNumItem = this.historyList.length;\n            if (e.key === 'ArrowDown') {\n                let sum = this.selectedIdx;\n                sum = this.selectedIdx === null ? 0 : sum + 1;\n                this.selectedIdx = (totalNumItem + sum) % totalNumItem;\n                this.scrollToFocusedItem(this.selectedIdx);\n            } else if (e.key === 'ArrowUp') {\n                if (this.selectedIdx == -1) {\n                    this.selectedIdx = 0;\n                }\n                this.selectedIdx = (totalNumItem + this.selectedIdx - 1) % totalNumItem;\n                this.scrollToFocusedItem(this.selectedIdx);\n            }\n        }\n    }\n\n    /**\n     * Scroll to focused item\n     * * @param index\n     */\n    scrollToFocusedItem(index: any) {\n        let listElement = null;\n        // Define list element\n        if (!this.historyList.length || !this.isHistoryListVisible) {\n            // filteredList element\n            listElement = this.filteredListElement.nativeElement;\n        } else {\n            // historyList element\n            listElement = this.historyListElement.nativeElement;\n        }\n\n        const items = Array.prototype.slice\n            .call(listElement.childNodes)\n            .filter((node: any) => {\n                if (node.nodeType === 1) {\n                    // if node is element\n                    return node.className.includes('item');\n                } else {\n                    return false;\n                }\n            });\n\n        if (!items.length) {\n            return;\n        }\n\n        const listHeight = listElement.offsetHeight;\n        const itemHeight = items[index].offsetHeight;\n        const visibleTop = listElement.scrollTop;\n        const visibleBottom = listElement.scrollTop + listHeight - itemHeight;\n        const targetPosition = items[index].offsetTop;\n\n        if (targetPosition < visibleTop) {\n            listElement.scrollTop = targetPosition;\n        }\n\n        if (targetPosition > visibleBottom) {\n            listElement.scrollTop = targetPosition - listHeight + itemHeight;\n        }\n    }\n\n    /**\n     * Select item on enter click\n     */\n    onHandleEnter() {\n        // click enter to choose item from filteredList or historyList\n        if (this.selectedIdx > -1) {\n            if (!this.historyList.length || !this.isHistoryListVisible) {\n                // filteredList\n                this.query = !this.isTypeString(this.filteredList[this.selectedIdx])\n                    ? this.filteredList[this.selectedIdx][this.searchKeyword]\n                    : this.filteredList[this.selectedIdx];\n\n                this.saveHistory(this.filteredList[this.selectedIdx]);\n                this.select(this.filteredList[this.selectedIdx]);\n            } else {\n                // historyList\n                this.query = !this.isTypeString(this.historyList[this.selectedIdx])\n                    ? this.historyList[this.selectedIdx][this.searchKeyword]\n                    : this.historyList[this.selectedIdx];\n                this.saveHistory(this.historyList[this.selectedIdx]);\n                this.select(this.historyList[this.selectedIdx]);\n            }\n        }\n        this.isHistoryListVisible = false;\n        this.handleClose();\n    }\n\n    /**\n     * Esc click\n     */\n    onEsc() {\n        this.searchInput.nativeElement.blur();\n        this.handleClose();\n    }\n\n    /**\n     * Tab click\n     */\n    onTab() {\n        this.searchInput.nativeElement.blur();\n        this.handleClose();\n    }\n\n    /**\n     * Delete click\n     */\n    onDelete() {\n        this.isOpen = true;\n    }\n\n    /**\n     * Select item to save in localStorage\n     * @param selected\n     */\n    saveHistory(selected: any) {\n        if (this.historyIdentifier) {\n            // check if selected item exists in historyList\n            if (\n                !this.historyList.some((item) =>\n                    !this.isTypeString(item)\n                        ? item[this.searchKeyword] == selected[this.searchKeyword]\n                        : item == selected\n                )\n            ) {\n                this.saveHistoryToLocalStorage([selected, ...this.historyList]);\n\n                // check if items don't exceed max allowed number\n                if (this.historyList.length >= this.historyListMaxNumber) {\n                    this.historyList.splice(this.historyList.length - 1, 1);\n                    this.saveHistoryToLocalStorage([selected, ...this.historyList]);\n                }\n            } else {\n                // if selected item exists in historyList swap to top in array\n                if (!this.isTypeString(selected)) {\n                    // object logic\n                    const copiedHistoryList = this.historyList.slice(); // copy original historyList array\n                    const selectedIndex = copiedHistoryList\n                        .map((item) => item[this.searchKeyword])\n                        .indexOf(selected[this.searchKeyword]);\n                    copiedHistoryList.splice(selectedIndex, 1);\n                    copiedHistoryList.splice(0, 0, selected);\n                    this.saveHistoryToLocalStorage([...copiedHistoryList]);\n                } else {\n                    // string logic\n                    const copiedHistoryList = this.historyList.slice(); // copy original historyList array\n                    copiedHistoryList.splice(this.historyList.indexOf(selected), 1);\n                    copiedHistoryList.splice(0, 0, selected);\n                    this.saveHistoryToLocalStorage([...copiedHistoryList]);\n                }\n            }\n        }\n    }\n\n    /**\n     * Save item in localStorage\n     * @param selected\n     */\n    saveHistoryToLocalStorage(selected: any) {\n        window.localStorage.setItem(\n            `${this.historyIdentifier}`,\n            JSON.stringify(selected)\n        );\n    }\n\n    /**\n     * Remove item from localStorage\n     * @param index\n     * @param e event\n     */\n    removeHistoryItem(index: any, e: any) {\n        e.stopPropagation();\n        this.historyList = this.historyList.filter((v, i) => i !== index);\n        this.saveHistoryToLocalStorage(this.historyList);\n        if (this.historyList.length == 0) {\n            window.localStorage.removeItem(`${this.historyIdentifier}`);\n            this.filterList();\n        }\n    }\n\n    /**\n     * Reset localStorage\n     * @param e event\n     */\n    resetHistoryList(e: any) {\n        e.stopPropagation();\n        this.historyList = [];\n        window.localStorage.removeItem(`${this.historyIdentifier}`);\n        this.filterList();\n    }\n}\n","<div class=\"autocomplete-container\" aria-owns=\"suggestions suggestions-history\" [attr.aria-expanded]=\"isOpen\"\n    [ngClass]=\"{ 'active': isOpen}\">\n    <div class=\"input-container\">\n        <input #searchInput type=\"text\" attr.aria-label=\"{{placeholder}}\" aria-autocomplete=\"list\" role=\"combobox\"\n            placeholder={{placeholder}} [(ngModel)]=query (input)=\"onChange($event)\" (focus)=handleFocus($event)\n            (blur)=\"onBlur($event)\" [disabled]=\"disabled\" autocomplete=\"off\" [ngClass]=\"cssClass\">\n        <!--  (blur)=onTouched($event) (blur)=handleBlur($event)  -->\n        <div [ngClass]=\"{ 'xx': notFound, 'x': !notFound}\" *ngIf=\"query && !isLoading && !disabled\"\n            (click)=\"remove($event)\">\n            <i class=\"material-icons\" aria-label=\"Close\">close</i>\n        </div>\n        <!--Loading mask-->\n        <div class=\"sk-fading-circle\" *ngIf=\"isLoading\">\n            <div class=\"sk-circle1 sk-circle\"></div>\n            <div class=\"sk-circle2 sk-circle\"></div>\n            <div class=\"sk-circle3 sk-circle\"></div>\n            <div class=\"sk-circle4 sk-circle\"></div>\n            <div class=\"sk-circle5 sk-circle\"></div>\n            <div class=\"sk-circle6 sk-circle\"></div>\n            <div class=\"sk-circle7 sk-circle\"></div>\n            <div class=\"sk-circle8 sk-circle\"></div>\n            <div class=\"sk-circle9 sk-circle\"></div>\n            <div class=\"sk-circle10 sk-circle\"></div>\n            <div class=\"sk-circle11 sk-circle\"></div>\n            <div class=\"sk-circle12 sk-circle\"></div>\n        </div>\n    </div>\n\n    <!--FilteredList items-->\n    <div class=\"suggestions-container {{cssTemplateClass}}\" id=\"suggestions\" role=\"listbox\"\n        [ngClass]=\"{'is-hidden': isHistoryListVisible, 'is-visible': !isHistoryListVisible}\">\n        <!--FilteredList heading-->\n        <div class=\"heading\" *ngIf=\"filteredList.length > 0 && heading\">\n            <div class=\"text\">{{heading}}</div>\n        </div>\n\n        <ul #filteredListElement>\n            <li *ngFor=\"let item of filteredList; let idx = index\" class=\"item\">\n                <!--string logic-->\n                <div [ngClass]=\"cssItemClass\" [class.complete-selected]=\"idx === selectedIdx\" *ngIf='isTypeString(item)'\n                    (click)=\"select(item)\">\n                    <ng-container\n                        *ngTemplateOutlet=\"itemTemplate;  context: { $implicit: item | highlight: toHighlight }\">\n                    </ng-container>\n                </div>\n                <!--object logic-->\n                <div [ngClass]=\"cssItemClass\" [class.complete-selected]=\"idx === selectedIdx\"\n                    *ngIf='!isTypeString(item)' (click)=\"select(item)\">\n                    <ng-container\n                        *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item | highlight: toHighlight : searchKeyword }\">\n                    </ng-container>\n                </div>\n            </li>\n        </ul>\n    </div>\n\n    <!--HistoryList items-->\n    <div class=\"suggestions-container {{cssTemplateClass}}\" id=\"suggestions-history\" role=\"listbox\"\n        [ngClass]=\"{'is-hidden': !isHistoryListVisible, 'is-visible': isHistoryListVisible}\">\n        <!--HistoryList heading-->\n        <div class=\"heading\" *ngIf=\"historyList.length > 0 && historyHeading\">\n            <div class=\"text\">{{historyHeading}}</div>\n            <div [ngClass]=\"{ 'xx': notFound, 'x': !notFound}\" (click)=\"resetHistoryList($event)\">\n                <i class=\"material-icons\" aria-label=\"Delete\">delete</i>\n            </div>\n        </div>\n\n        <ul #historyListElement>\n            <li *ngFor=\"let item of historyList; let idx = index\" class=\"item\">\n                <!--string logic-->\n                <div [ngClass]=\"cssItemClass\" [class.complete-selected]=\"idx === selectedIdx\" *ngIf='isTypeString(item)'\n                    (click)=\"select(item)\">\n                    <ng-container *ngTemplateOutlet=\"itemTemplate;  context: { $implicit: item }\">\n                    </ng-container>\n                </div>\n                <!--object logic-->\n                <div [ngClass]=\"cssItemClass\" [class.complete-selected]=\"idx === selectedIdx\"\n                    *ngIf='!isTypeString(item)' (click)=\"select(item)\">\n                    <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\">\n                    </ng-container>\n                </div>\n                <div [ngClass]=\"{ 'xx': notFound, 'x': !notFound}\" (click)=\"removeHistoryItem(idx, $event)\">\n                    <i class=\"material-icons\" aria-label=\"Close\">close</i>\n                </div>\n            </li>\n        </ul>\n    </div>\n\n    <!--Not found-->\n    <div [ngClass]=\"cssTemplateClass\" class=\"not-found\" *ngIf=\"isLoading ? !isLoading && notFound : notFound\">\n        <ng-container *ngTemplateOutlet=\"notFoundTemplate;  context: { $implicit: notFoundText  }\">\n        </ng-container>\n    </div>\n</div>\n<div class=\"autocomplete-overlay\" *ngIf=\"overlay\" (click)=\"handleOverlay()\"></div>","import { Injectable } from \"@angular/core\";\nimport { FileSelectResult, RejectedFile, RejectReason } from \"../interfaces/dropzone.interface\";\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class UtilsDropzoneService {\n    parseFileList(\n        files: FileList,\n        accept: string,\n        maxFileSize: number,\n        multiple: boolean\n    ): FileSelectResult {\n        const addedFiles: File[] = [];\n        const rejectedFiles: RejectedFile[] = [];\n\n        for (let i = 0; i < files.length; i++) {\n            const file = files.item(i);\n\n            if (!file || !this.isAccepted(file, accept)) {\n                this.rejectFile(rejectedFiles, file!, 'type');\n                continue;\n            }\n\n            if (maxFileSize && file.size > maxFileSize) {\n                this.rejectFile(rejectedFiles, file, 'size');\n                continue;\n            }\n\n            if (!multiple && addedFiles.length >= 1) {\n                this.rejectFile(rejectedFiles, file, 'no_multiple');\n                continue;\n            }\n\n            addedFiles.push(file);\n        }\n\n        const result: FileSelectResult = {\n            addedFiles,\n            rejectedFiles,\n        };\n\n        return result;\n    }\n\n    private isAccepted(file: File, accept: string): boolean {\n        if (accept === '*') {\n            return true;\n        }\n\n        const acceptFiletypes = accept\n            .split(',')\n            .map((it) => it.toLowerCase().trim());\n        const filetype = file.type.toLowerCase();\n        const filename = file.name.toLowerCase();\n\n        const matchedFileType = acceptFiletypes.find((acceptFiletype) => {\n            // check for wildcard mimetype (e.g. image/*)\n            if (acceptFiletype.endsWith('/*')) {\n                return filetype.split('/')[0] === acceptFiletype.split('/')[0];\n            }\n\n            // check for file extension (e.g. .csv)\n            if (acceptFiletype.startsWith('.')) {\n                return filename.endsWith(acceptFiletype);\n            }\n\n            // check for exact mimetype match (e.g. image/jpeg)\n            return acceptFiletype == filetype;\n        });\n\n        return !!matchedFileType;\n    }\n\n    private rejectFile(\n        rejectedFiles: RejectedFile[],\n        file: File,\n        reason: RejectReason\n    ) {\n        const rejectedFile = file as RejectedFile;\n        rejectedFile.reason = reason;\n\n        rejectedFiles.push(rejectedFile);\n    }\n}\n","\n/**\n * Coerces a data-bound value (typically a string) to a boolean.\n * Taken from https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.ts\n */\nexport function coerceBooleanProperty(value: any): boolean {\n    return value != null && `${value}` !== 'false';\n}\n\n/**\n * Whether the provided value is considered a number.\n * Taken from https://github.com/angular/components/blob/master/src/cdk/coercion/number-property.ts\n */\nexport function coerceNumberProperty(value: any): number {\n    // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n    // and other non-number values as NaN, where Number just uses 0) but it considers the string\n    // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n    return (!isNaN(parseFloat(value as any)) && !isNaN(Number(value))) ? Number(value) : 0;\n}\n","import { UtilsDropzoneComponent } from \"../components/utils-dropzone/utils-dropzone.component\";\n\nexport enum KEY_CODE {\n  BACKSPACE = 8,\n  DELETE = 46,\n}\nexport interface UtilsDropzoneChangeEvent {\n  source: UtilsDropzoneComponent;\n  addedFiles: File[];\n  rejectedFiles: RejectedFile[];\n}\n\n\nexport interface FileSelectResult {\n  /** The added files, emitted in the filesAdded event. */\n  addedFiles: File[];\n\n  /** The rejected files, emitted in the filesRejected event. */\n  rejectedFiles: RejectedFile[];\n}\n\nexport interface RejectedFile extends File {\n  /** The reason the file was rejected. */\n  reason?: RejectReason;\n}\n\nexport type RejectReason = 'type' | 'size' | 'no_multiple';\n","import { Component } from '@angular/core';\n\n@Component({\n    selector: 'utils-dropzone-remove-badge',\n    standalone: true,\n    templateUrl: './utils-dropzone-remove-badge.component.html',\n    styleUrls: ['./utils-dropzone-remove-badge.component.scss'],\n})\nexport class UtilsDropzoneRemoveBadgeComponent { }\n","<svg>\n  <line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"10\" />\n  <line x1=\"0\" y1=\"10\" x2=\"10\" y2=\"0\" />\n</svg>","import { Component, Input, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';\nimport { SafeStyle, DomSanitizer } from '@angular/platform-browser';\nimport { coerceBooleanProperty } from '../../helpers/helpers';\nimport { KEY_CODE } from '../../interfaces/dropzone.interface';\nimport { UtilsDropzoneRemoveBadgeComponent } from './utils-dropzone-remove-badge/utils-dropzone-remove-badge.component';\n\n@Component({\n    selector: 'utils-dropzone-preview',\n    standalone: true,\n    imports: [UtilsDropzoneRemoveBadgeComponent],\n    templateUrl: './utils-dropzone-preview.component.html',\n    styleUrls: ['./utils-dropzone-preview.component.scss'],\n})\nexport class UtilsDropzonePreviewComponent {\n    constructor(protected sanitizer: DomSanitizer) { }\n\n    protected _file: File = new File([], '');\n\n    /** The file to preview. */\n    @Input()\n    set file(value: File) {\n        this._file = value;\n    }\n    get file(): File {\n        return this._file;\n    }\n\n    /** Allow the user to remove files. */\n    @Input()\n    get removable(): boolean {\n        return this._removable;\n    }\n    set removable(value: boolean) {\n        this._removable = coerceBooleanProperty(value);\n    }\n    protected _removable = false;\n\n    /** Emitted when the element should be removed. */\n    @Output() readonly removed = new EventEmitter<File>();\n\n    @HostListener('keyup', ['$event'])\n    keyEvent(event: KeyboardEvent) {\n        switch (event.keyCode) {\n            case KEY_CODE.BACKSPACE:\n            case KEY_CODE.DELETE:\n                this.remove();\n                break;\n            default:\n                break;\n        }\n    }\n\n    /** We use the HostBinding to pass these common styles to child components. */\n    @HostBinding('style')\n    get hostStyle(): SafeStyle {\n        const styles = `\n\t\t\tdisplay: flex;\n\t\t\theight: 140px;\n\t\t\tmin-height: 140px;\n\t\t\tmin-width: 180px;\n\t\t\tmax-width: 180px;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tpadding: 0 20px;\n\t\t\tmargin: 10px;\n\t\t\tborder-radius: 5px;\n\t\t\tposition: relative;\n\t\t`;\n\n        return this.sanitizer.bypassSecurityTrustStyle(styles);\n    }\n\n    /** Make the preview item focusable using the tab key. */\n    @HostBinding('tabindex') tabIndex = 0;\n\n    /** Remove method to be used from the template. */\n    _remove(event: any) {\n        event.stopPropagation();\n        this.remove();\n    }\n\n    /** Remove the preview item (use from component code). */\n    remove() {\n        if (this._removable) {\n            this.removed.next(this.file);\n        }\n    }\n\n    protected async readFile(): Promise<string | ArrayBuffer> {\n        return new Promise<string | ArrayBuffer>((resolve, reject) => {\n            const reader = new FileReader();\n\n            reader.onload = (e) => {\n                resolve((e.target as FileReader).result as string);\n            };\n\n            reader.onerror = (e) => {\n                console.error(`FileReader failed on file ${this.file.name}.`);\n                reject(e);\n            };\n\n            if (!this.file) {\n                return reject(\n                    'No file to read. Please provide a file using the [file] Input property.'\n                );\n            }\n\n            reader.readAsDataURL(this.file);\n        });\n    }\n}\n","<ng-content select=\"utils-dropzone-label\"></ng-content>\n<utils-dropzone-remove-badge *ngIf=\"removable\" (click)=\"_remove($event)\">\n</utils-dropzone-remove-badge>","import { Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, Self, ViewChild } from \"@angular/core\";\nimport { UtilsDropzoneService } from \"../../services/utils-dropzone.service\";\nimport { UtilsDropzoneChangeEvent } from \"../../interfaces/dropzone.interface\";\nimport { UtilsDropzonePreviewComponent } from \"../utils-dropzone-preview/utils-dropzone-preview.component\";\nimport { coerceBooleanProperty, coerceNumberProperty } from \"../../helpers/helpers\";\n\n@Component({\n    selector: 'utils-dropzone, [utils-dropzone]',\n    templateUrl: './utils-dropzone.component.html',\n    styleUrls: ['./utils-dropzone.component.scss'],\n    standalone: true,\n    imports: [],\n    providers: [UtilsDropzoneService],\n})\nexport class UtilsDropzoneComponent {\n    constructor(@Self() private service: UtilsDropzoneService) { }\n\n    /** A list of the content-projected preview children. */\n    @ContentChildren(UtilsDropzonePreviewComponent, { descendants: true })\n    _previewChildren!: QueryList<UtilsDropzonePreviewComponent>;\n\n    get _hasPreviews(): boolean {\n        return !!this._previewChildren.length;\n    }\n\n    /** A template reference to the native file input element. */\n    @ViewChild('fileInput', { static: true }) _fileInput!: ElementRef;\n\n    /** Emitted when any files were added or rejected. */\n    @Output() readonly change = new EventEmitter<UtilsDropzoneChangeEvent>();\n\n    /** Set the accepted file types. Defaults to '*'. */\n    @Input() accept = '*';\n\n    /** Disable any user interaction with the component. */\n    @Input()\n    @HostBinding('class.utils-dz-disabled')\n    get disabled(): boolean {\n        return this._disabled;\n    }\n    set disabled(value: boolean) {\n        this._disabled = coerceBooleanProperty(value);\n\n        if (this._isHovered) {\n            this._isHovered = false;\n        }\n    }\n    private _disabled = false;\n\n    /** Allow the selection of multiple files. */\n    @Input()\n    get multiple(): boolean {\n        return this._multiple;\n    }\n    set multiple(value: boolean) {\n        this._multiple = coerceBooleanProperty(value);\n    }\n    private _multiple = true;\n\n    /** Set the maximum size a single file may have. */\n    @Input()\n    get maxFileSize(): number {\n        return this._maxFileSize;\n    }\n    set maxFileSize(value: number) {\n        this._maxFileSize = coerceNumberProperty(value);\n    }\n    private _maxFileSize: number = 0;\n\n    /** Allow the dropzone container to expand vertically. */\n    @Input()\n    @HostBinding('class.expandable')\n    get expandable(): boolean {\n        return this._expandable;\n    }\n    set expandable(value: boolean) {\n        this._expandable = coerceBooleanProperty(value);\n    }\n    private _expandable: boolean = false;\n\n    /** Open the file selector on click. */\n    @Input()\n    @HostBinding('class.unclickable')\n    get disableClick(): boolean {\n        return this._disableClick;\n    }\n    set disableClick(value: boolean) {\n        this._disableClick = coerceBooleanProperty(value);\n    }\n    private _disableClick = false;\n\n    /** Allow dropping directories. */\n    @Input()\n    get processDirectoryDrop(): boolean {\n        return this._processDirectoryDrop;\n    }\n    set processDirectoryDrop(value: boolean) {\n        this._processDirectoryDrop = coerceBooleanProperty(value);\n    }\n    private _processDirectoryDrop = false;\n\n    /** Expose the id, aria-label, aria-labelledby and aria-describedby of the native file input for proper accessibility. */\n    @Input() id: string = '';\n    @Input('aria-label') ariaLabel: string = '';\n    @Input('aria-labelledby') ariaLabelledby: string = '';\n    @Input('aria-describedby') ariaDescribedBy: string = '';\n\n    @HostBinding('class.utils-dz-hovered')\n    _isHovered = false;\n\n    /** Show the native OS file explorer to select files. */\n    @HostListener('click')\n    _onClick() {\n        if (!this.disableClick) {\n            this.showFileSelector();\n        }\n    }\n\n    @HostListener('dragover', ['$event'])\n    _onDragOver(event: any) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.preventDefault(event as any);\n        this._isHovered = true;\n    }\n\n    @HostListener('dragleave')\n    _onDragLeave() {\n        this._isHovered = false;\n    }\n\n    @HostListener('drop', ['$event'])\n    _onDrop(event: any) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.preventDefault(event as any);\n        this._isHovered = false;\n\n        // if processDirectoryDrop is not enabled or webkitGetAsEntry is not supported we handle the drop as usual\n        if (\n            !this.processDirectoryDrop ||\n            !DataTransferItem.prototype.webkitGetAsEntry\n        ) {\n            this.handleFileDrop(event.dataTransfer.files);\n\n            // if processDirectoryDrop is enabled and webkitGetAsEntry is supported we can extract files from a dropped directory\n        } else {\n            const droppedItems: DataTransferItem[] = event.dataTransfer.items;\n\n            if (droppedItems.length > 0) {\n                const droppedFiles: File[] = [];\n                const droppedDirectories = [];\n\n                // seperate dropped files from dropped directories for easier handling\n                for (let i = 0; i < droppedItems.length; i++) {\n                    const entry = droppedItems[i].webkitGetAsEntry();\n                    if (entry?.isFile) {\n                        droppedFiles.push(event.dataTransfer.files[i]);\n                    } else if (entry?.isDirectory) {\n                        droppedDirectories.push(entry);\n                    }\n                }\n\n                // create a DataTransfer\n                const droppedFilesList = new DataTransfer();\n                droppedFiles.forEach((droppedFile) => {\n                    droppedFilesList.items.add(droppedFile);\n                });\n\n                // if no directory is dropped we are done and can call handleFileDrop\n                if (!droppedDirectories.length && droppedFilesList.items.length) {\n                    this.handleFileDrop(droppedFilesList.files);\n                }\n\n                // if directories are dropped we extract the files from these directories one-by-one and add it to droppedFilesList\n                if (droppedDirectories.length) {\n                    const extractFilesFromDirectoryCalls = [];\n\n                    for (const droppedDirectory of droppedDirectories) {\n                        extractFilesFromDirectoryCalls.push(\n                            this.extractFilesFromDirectory(droppedDirectory)\n                        );\n                    }\n\n                    // wait for all directories to be proccessed to add the extracted files afterwards\n                    Promise.all(extractFilesFromDirectoryCalls).then(\n                        (allExtractedFiles: any[]) => {\n                            allExtractedFiles\n                                .reduce((a, b) => [...a, ...b])\n                                .forEach((extractedFile: File) => {\n                                    droppedFilesList.items.add(extractedFile);\n                                });\n\n                            this.handleFileDrop(droppedFilesList.files);\n                        }\n                    );\n                }\n            }\n        }\n    }\n\n    private extractFilesFromDirectory(directory: any) {\n        async function getFileFromFileEntry(fileEntry: any) {\n            try {\n                return await new Promise((resolve, reject) =>\n                    fileEntry.file(resolve, reject)\n                );\n            } catch (err) {\n                console.log('Error converting a fileEntry to a File: ', err);\n            }\n            return true;\n        }\n\n        return new Promise((resolve, reject) => {\n            const files: File[] = [];\n\n            const dirReader = directory.createReader();\n\n            // we need this to be a recursion because of this issue: https://bugs.chromium.org/p/chromium/issues/detail?id=514087\n            const readEntries = () => {\n                dirReader.readEntries(async (dirItems: any) => {\n                    if (!dirItems.length) {\n                        resolve(files);\n                    } else {\n                        const fileEntries = dirItems.filter((dirItem: any) => dirItem.isFile);\n\n                        for (const fileEntry of fileEntries) {\n                            const file: any = await getFileFromFileEntry(fileEntry);\n                            files.push(file);\n                        }\n\n                        readEntries();\n                    }\n                });\n            };\n            readEntries();\n        });\n    }\n\n    showFileSelector() {\n        if (!this.disabled) {\n            (this._fileInput.nativeElement as HTMLInputElement).click();\n        }\n    }\n\n    _onFilesSelected(event: any) {\n        const files: FileList = event.target.files;\n        this.handleFileDrop(files);\n\n        // Reset the native file input element to allow selecting the same file again\n        this._fileInput.nativeElement.value = '';\n\n        // fix(#32): Prevent the default event behaviour which caused the change event to emit twice.\n        this.preventDefault(event);\n    }\n\n    private handleFileDrop(files: FileList) {\n        const result = this.service.parseFileList(\n            files,\n            this.accept,\n            this.maxFileSize,\n            this.multiple\n        );\n\n        this.change.next({\n            addedFiles: result.addedFiles,\n            rejectedFiles: result.rejectedFiles,\n            source: this,\n        });\n    }\n\n    private preventDefault(event: DragEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n}\n","<input #fileInput type=\"file\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" [disabled]=\"disabled\"\n    (change)=\"_onFilesSelected($event)\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n    [attr.aria-describedby]=\"ariaDescribedBy\">\n@if (!_hasPreviews) {\n<ng-content select=\"utils-dropzone-label\"></ng-content>\n}@else {\n<ng-content select=\"utils-dropzone-preview\"></ng-content>\n<ng-content></ng-content>\n}","export enum CountryISO {\n\tAfghanistan = 'af',\n\tAlbania = 'al',\n\tAlgeria = 'dz',\n\tAmericanSamoa = 'as',\n\tAndorra = 'ad',\n\tAngola = 'ao',\n\tAnguilla = 'ai',\n\tAntiguaAndBarbuda = 'ag',\n\tArgentina = 'ar',\n\tArmenia = 'am',\n\tAruba = 'aw',\n\tAustralia = 'au',\n\tAustria = 'at',\n\tAzerbaijan = 'az',\n\tBahamas = 'bs',\n\tBahrain = 'bh',\n\tBangladesh = 'bd',\n\tBarbados = 'bb',\n\tBelarus = 'by',\n\tBelgium = 'be',\n\tBelize = 'bz',\n\tBenin = 'bj',\n\tBermuda = 'bm',\n\tBhutan = 'bt',\n\tBolivia = 'bo',\n\tBosniaAndHerzegovina = 'ba',\n\tBotswana = 'bw',\n\tBrazil = 'br',\n\tBritishIndianOceanTerritory = 'io',\n\tBritishVirginIslands = 'vg',\n\tBrunei = 'bn',\n\tBulgaria = 'bg',\n\tBurkinaFaso = 'bf',\n\tBurundi = 'bi',\n\tCambodia = 'kh',\n\tCameroon = 'cm',\n\tCanada = 'ca',\n\tCapeVerde = 'cv',\n\tCaribbeanNetherlands = 'bq',\n\tCaymanIslands = 'ky',\n\tCentralAfricanRepublic = 'cf',\n\tChad = 'td',\n\tChile = 'cl',\n\tChina = 'cn',\n\tChristmasIsland = 'cx',\n\tCocos = 'cc',\n\tColombia = 'co',\n\tComoros = 'km',\n\tCongoDRCJamhuriYaKidemokrasiaYaKongo = 'cd',\n\tCongoRepublicCongoBrazzaville = 'cg',\n\tCookIslands = 'ck',\n\tCostaRica = 'cr',\n\tCôteDIvoire = 'ci',\n\tCroatia = 'hr',\n\tCuba = 'cu',\n\tCuraçao = 'cw',\n\tCyprus = 'cy',\n\tCzechRepublic = 'cz',\n\tDenmark = 'dk',\n\tDjibouti = 'dj',\n\tDominica = 'dm',\n\tDominicanRepublic = 'do',\n\tEcuador = 'ec',\n\tEgypt = 'eg',\n\tElSalvador = 'sv',\n\tEquatorialGuinea = 'gq',\n\tEritrea = 'er',\n\tEstonia = 'ee',\n\tEthiopia = 'et',\n\tFalklandIslands = 'fk',\n\tFaroeIslands = 'fo',\n\tFiji = 'fj',\n\tFinland = 'fi',\n\tFrance = 'fr',\n\tFrenchGuiana = 'gf',\n\tFrenchPolynesia = 'pf',\n\tGabon = 'ga',\n\tGambia = 'gm',\n\tGeorgia = 'ge',\n\tGermany = 'de',\n\tGhana = 'gh',\n\tGibraltar = 'gi',\n\tGreece = 'gr',\n\tGreenland = 'gl',\n\tGrenada = 'gd',\n\tGuadeloupe = 'gp',\n\tGuam = 'gu',\n\tGuatemala = 'gt',\n\tGuernsey = 'gg',\n\tGuinea = 'gn',\n\tGuineaBissau = 'gw',\n\tGuyana = 'gy',\n\tHaiti = 'ht',\n\tHonduras = 'hn',\n\tHongKong = 'hk',\n\tHungary = 'hu',\n\tIceland = 'is',\n\tIndia = 'in',\n\tIndonesia = 'id',\n\tIran = 'ir',\n\tIraq = 'iq',\n\tIreland = 'ie',\n\tIsleOfMan = 'im',\n\tIsrael = 'il',\n\tItaly = 'it',\n\tJamaica = 'jm',\n\tJapan = 'jp',\n\tJersey = 'je',\n\tJordan = 'jo',\n\tKazakhstan = 'kz',\n\tKenya = 'ke',\n\tKiribati = 'ki',\n\tKosovo = 'xk',\n\tKuwait = 'kw',\n\tKyrgyzstan = 'kg',\n\tLaos = 'la',\n\tLatvia = 'lv',\n\tLebanon = 'lb',\n\tLesotho = 'ls',\n\tLiberia = 'lr',\n\tLibya = 'ly',\n\tLiechtenstein = 'li',\n\tLithuania = 'lt',\n\tLuxembourg = 'lu',\n\tMacau = 'mo',\n\tMacedonia = 'mk',\n\tMadagascar = 'mg',\n\tMalawi = 'mw',\n\tMalaysia = 'my',\n\tMaldives = 'mv',\n\tMali = 'ml',\n\tMalta = 'mt',\n\tMarshallIslands = 'mh',\n\tMartinique = 'mq',\n\tMauritania = 'mr',\n\tMauritius = 'mu',\n\tMayotte = 'yt',\n\tMexico = 'mx',\n\tMicronesia = 'fm',\n\tMoldova = 'md',\n\tMonaco = 'mc',\n\tMongolia = 'mn',\n\tMontenegro = 'me',\n\tMontserrat = 'ms',\n\tMorocco = 'ma',\n\tMozambique = 'mz',\n\tMyanmar = 'mm',\n\tNamibia = 'na',\n\tNauru = 'nr',\n\tNepal = 'np',\n\tNetherlands = 'nl',\n\tNewCaledonia = 'nc',\n\tNewZealand = 'nz',\n\tNicaragua = 'ni',\n\tNiger = 'ne',\n\tNigeria = 'ng',\n\tNiue = 'nu',\n\tNorfolkIsland = 'nf',\n\tNorthKorea = 'kp',\n\tNorthernMarianaIslands = 'mp',\n\tNorway = 'no',\n\tOman = 'om',\n\tPakistan = 'pk',\n\tPalau = 'pw',\n\tPalestine = 'ps',\n\tPanama = 'pa',\n\tPapuaNewGuinea = 'pg',\n\tParaguay = 'py',\n\tPeru = 'pe',\n\tPhilippines = 'ph',\n\tPoland = 'pl',\n\tPortugal = 'pt',\n\tPuertoRico = 'pr',\n\tQatar = 'qa',\n\tRéunion = 're',\n\tRomania = 'ro',\n\tRussia = 'ru',\n\tRwanda = 'rw',\n\tSaintBarthélemy = 'bl',\n\tSaintHelena = 'sh',\n\tSaintKittsAndNevis = 'kn',\n\tSaintLucia = 'lc',\n\tSaintMartin = 'mf',\n\tSaintPierreAndMiquelon = 'pm',\n\tSaintVincentAndTheGrenadines = 'vc',\n\tSamoa = 'ws',\n\tSanMarino = 'sm',\n\tSãoToméAndPríncipe = 'st',\n\tSaudiArabia = 'sa',\n\tSenegal = 'sn',\n\tSerbia = 'rs',\n\tSeychelles = 'sc',\n\tSierraLeone = 'sl',\n\tSingapore = 'sg',\n\tSintMaarten = 'sx',\n\tSlovakia = 'sk',\n\tSlovenia = 'si',\n\tSolomonIslands = 'sb',\n\tSomalia = 'so',\n\tSouthAfrica = 'za',\n\tSouthKorea = 'kr',\n\tSouthSudan = 'ss',\n\tSpain = 'es',\n\tSriLanka = 'lk',\n\tSudan = 'sd',\n\tSuriname = 'sr',\n\tSvalbardAndJanMayen = 'sj',\n\tSwaziland = 'sz',\n\tSweden = 'se',\n\tSwitzerland = 'ch',\n\tSyria = 'sy',\n\tTaiwan = 'tw',\n\tTajikistan = 'tj',\n\tTanzania = 'tz',\n\tThailand = 'th',\n\tTimorLeste = 'tl',\n\tTogo = 'tg',\n\tTokelau = 'tk',\n\tTonga = 'to',\n\tTrinidadAndTobago = 'tt',\n\tTunisia = 'tn',\n\tTurkey = 'tr',\n\tTurkmenistan = 'tm',\n\tTurksAndCaicosIslands = 'tc',\n\tTuvalu = 'tv',\n\tUSVirginIslands = 'vi',\n\tUganda = 'ug',\n\tUkraine = 'ua',\n\tUnitedArabEmirates = 'ae',\n\tUnitedKingdom = 'gb',\n\tUnitedStates = 'us',\n\tUruguay = 'uy',\n\tUzbekistan = 'uz',\n\tVanuatu = 'vu',\n\tVaticanCity = 'va',\n\tVenezuela = 've',\n\tVietnam = 'vn',\n\tWallisAndFutuna = 'wf',\n\tWesternSahara = 'eh',\n\tYemen = 'ye',\n\tZambia = 'zm',\n\tZimbabwe = 'zw',\n\tÅlandIslands = 'ax',\n}\n","import { Injectable } from \"@angular/core\";\nimport { CountryISO } from '../enums/country-iso.enum';\n\n@Injectable()\nexport class CountryCode {\n\tpublic allCountries = [\n\t\t[\n\t\t\t'Afghanistan (‫افغانستان‬‎)',\n\t\t\tCountryISO.Afghanistan,\n\t\t\t'93'\n\t\t],\n\t\t[\n\t\t\t'Albania (Shqipëri)',\n\t\t\tCountryISO.Albania,\n\t\t\t'355'\n\t\t],\n\t\t[\n\t\t\t'Algeria (‫الجزائر‬‎)',\n\t\t\tCountryISO.Algeria,\n\t\t\t'213'\n\t\t],\n\t\t[\n\t\t\t'American Samoa',\n\t\t\t'as',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'684',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Andorra',\n\t\t\tCountryISO.Andorra,\n\t\t\t'376'\n\t\t],\n\t\t[\n\t\t\t'Angola',\n\t\t\tCountryISO.Angola,\n\t\t\t'244'\n\t\t],\n\t\t[\n\t\t\t'Anguilla',\n\t\t\t'ai',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'264',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Antigua and Barbuda',\n\t\t\t'ag',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'268',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Argentina',\n\t\t\tCountryISO.Argentina,\n\t\t\t'54'\n\t\t],\n\t\t[\n\t\t\t'Armenia (Հայաստան)',\n\t\t\tCountryISO.Armenia,\n\t\t\t'374'\n\t\t],\n\t\t[\n\t\t\t'Aruba',\n\t\t\tCountryISO.Aruba,\n\t\t\t'297'\n\t\t],\n\t\t[\n\t\t\t'Australia',\n\t\t\tCountryISO.Australia,\n\t\t\t'61',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Austria (Österreich)',\n\t\t\tCountryISO.Austria,\n\t\t\t'43'\n\t\t],\n\t\t[\n\t\t\t'Azerbaijan (Azərbaycan)',\n\t\t\tCountryISO.Azerbaijan,\n\t\t\t'994'\n\t\t],\n\t\t[\n\t\t\t'Bahamas',\n\t\t\t'bs',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'242',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Bahrain (‫البحرين‬‎)',\n\t\t\tCountryISO.Bahrain,\n\t\t\t'973'\n\t\t],\n\t\t[\n\t\t\t'Bangladesh (বাংলাদেশ)',\n\t\t\tCountryISO.Bangladesh,\n\t\t\t'880'\n\t\t],\n\t\t[\n\t\t\t'Barbados',\n\t\t\t'bb',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'246',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Belarus (Беларусь)',\n\t\t\tCountryISO.Belarus,\n\t\t\t'375'\n\t\t],\n\t\t[\n\t\t\t'Belgium (België)',\n\t\t\tCountryISO.Belgium,\n\t\t\t'32'\n\t\t],\n\t\t[\n\t\t\t'Belize',\n\t\t\tCountryISO.Belize,\n\t\t\t'501'\n\t\t],\n\t\t[\n\t\t\t'Benin (Bénin)',\n\t\t\tCountryISO.Benin,\n\t\t\t'229'\n\t\t],\n\t\t[\n\t\t\t'Bermuda',\n\t\t\t'bm',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'441',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Bhutan (འབྲུག)',\n\t\t\tCountryISO.Bhutan,\n\t\t\t'975'\n\t\t],\n\t\t[\n\t\t\t'Bolivia',\n\t\t\tCountryISO.Bolivia,\n\t\t\t'591'\n\t\t],\n\t\t[\n\t\t\t'Bosnia and Herzegovina (Босна и Херцеговина)',\n\t\t\tCountryISO.BosniaAndHerzegovina,\n\t\t\t'387'\n\t\t],\n\t\t[\n\t\t\t'Botswana',\n\t\t\tCountryISO.Botswana,\n\t\t\t'267'\n\t\t],\n\t\t[\n\t\t\t'Brazil (Brasil)',\n\t\t\tCountryISO.Brazil,\n\t\t\t'55'\n\t\t],\n\t\t[\n\t\t\t'British Indian Ocean Territory',\n\t\t\tCountryISO.BritishIndianOceanTerritory,\n\t\t\t'246'\n\t\t],\n\t\t[\n\t\t\t'British Virgin Islands',\n\t\t\t'vg',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'284',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Brunei',\n\t\t\tCountryISO.Brunei,\n\t\t\t'673'\n\t\t],\n\t\t[\n\t\t\t'Bulgaria (България)',\n\t\t\tCountryISO.Bulgaria,\n\t\t\t'359'\n\t\t],\n\t\t[\n\t\t\t'Burkina Faso',\n\t\t\tCountryISO.BurkinaFaso,\n\t\t\t'226'\n\t\t],\n\t\t[\n\t\t\t'Burundi (Uburundi)',\n\t\t\tCountryISO.Burundi,\n\t\t\t'257'\n\t\t],\n\t\t[\n\t\t\t'Cambodia (កម្ពុជា)',\n\t\t\tCountryISO.Cambodia,\n\t\t\t'855'\n\t\t],\n\t\t[\n\t\t\t'Cameroon (Cameroun)',\n\t\t\tCountryISO.Cameroon,\n\t\t\t'237'\n\t\t],\n\t\t[\n\t\t\t'Canada',\n\t\t\tCountryISO.Canada,\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'204', '226', '236', '249', '250', '289', '306', '343', '365', '387', '403', '416',\n\t\t\t\t'418', '431', '437', '438', '450', '506', '514', '519', '548', '579', '581', '587',\n\t\t\t\t'604', '613', '639', '647', '672', '705', '709', '742', '778', '780', '782', '807',\n\t\t\t\t'819', '825', '867', '873', '902', '905'\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Cape Verde (Kabu Verdi)',\n\t\t\tCountryISO.CapeVerde,\n\t\t\t'238'\n\t\t],\n\t\t[\n\t\t\t'Caribbean Netherlands',\n\t\t\tCountryISO.CaribbeanNetherlands,\n\t\t\t'599',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Cayman Islands',\n\t\t\t'ky',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'345',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Central African Republic (République centrafricaine)',\n\t\t\tCountryISO.CentralAfricanRepublic,\n\t\t\t'236'\n\t\t],\n\t\t[\n\t\t\t'Chad (Tchad)',\n\t\t\tCountryISO.Chad,\n\t\t\t'235'\n\t\t],\n\t\t[\n\t\t\t'Chile',\n\t\t\tCountryISO.Chile,\n\t\t\t'56'\n\t\t],\n\t\t[\n\t\t\t'China (中国)',\n\t\t\tCountryISO.China,\n\t\t\t'86'\n\t\t],\n\t\t[\n\t\t\t'Christmas Island',\n\t\t\tCountryISO.ChristmasIsland,\n\t\t\t'61',\n\t\t\t2\n\t\t],\n\t\t[\n\t\t\t'Cocos (Keeling) Islands',\n\t\t\tCountryISO.Cocos,\n\t\t\t'61',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Colombia',\n\t\t\tCountryISO.Colombia,\n\t\t\t'57'\n\t\t],\n\t\t[\n\t\t\t'Comoros (‫جزر القمر‬‎)',\n\t\t\tCountryISO.Comoros,\n\t\t\t'269'\n\t\t],\n\t\t[\n\t\t\t'Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)',\n\t\t\tCountryISO.CongoDRCJamhuriYaKidemokrasiaYaKongo,\n\t\t\t'243'\n\t\t],\n\t\t[\n\t\t\t'Congo (Republic) (Congo-Brazzaville)',\n\t\t\tCountryISO.CongoRepublicCongoBrazzaville,\n\t\t\t'242'\n\t\t],\n\t\t[\n\t\t\t'Cook Islands',\n\t\t\tCountryISO.CookIslands,\n\t\t\t'682'\n\t\t],\n\t\t[\n\t\t\t'Costa Rica',\n\t\t\tCountryISO.CostaRica,\n\t\t\t'506'\n\t\t],\n\t\t[\n\t\t\t'Côte d’Ivoire',\n\t\t\tCountryISO.CôteDIvoire,\n\t\t\t'225'\n\t\t],\n\t\t[\n\t\t\t'Croatia (Hrvatska)',\n\t\t\tCountryISO.Croatia,\n\t\t\t'385'\n\t\t],\n\t\t[\n\t\t\t'Cuba',\n\t\t\tCountryISO.Cuba,\n\t\t\t'53'\n\t\t],\n\t\t[\n\t\t\t'Curaçao',\n\t\t\tCountryISO.Curaçao,\n\t\t\t'599',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Cyprus (Κύπρος)',\n\t\t\tCountryISO.Cyprus,\n\t\t\t'357'\n\t\t],\n\t\t[\n\t\t\t'Czech Republic (Česká republika)',\n\t\t\tCountryISO.CzechRepublic,\n\t\t\t'420'\n\t\t],\n\t\t[\n\t\t\t'Denmark (Danmark)',\n\t\t\tCountryISO.Denmark,\n\t\t\t'45'\n\t\t],\n\t\t[\n\t\t\t'Djibouti',\n\t\t\tCountryISO.Djibouti,\n\t\t\t'253'\n\t\t],\n\t\t[\n\t\t\t'Dominica',\n\t\t\tCountryISO.Dominica,\n\t\t\t'1767'\n\t\t],\n\t\t[\n\t\t\t'Dominican Republic (República Dominicana)',\n\t\t\tCountryISO.DominicanRepublic,\n\t\t\t'1',\n\t\t\t2,\n\t\t\t['809', '829', '849']\n\t\t],\n\t\t[\n\t\t\t'Ecuador',\n\t\t\tCountryISO.Ecuador,\n\t\t\t'593'\n\t\t],\n\t\t[\n\t\t\t'Egypt (‫مصر‬‎)',\n\t\t\tCountryISO.Egypt,\n\t\t\t'20'\n\t\t],\n\t\t[\n\t\t\t'El Salvador',\n\t\t\tCountryISO.ElSalvador,\n\t\t\t'503'\n\t\t],\n\t\t[\n\t\t\t'Equatorial Guinea (Guinea Ecuatorial)',\n\t\t\tCountryISO.EquatorialGuinea,\n\t\t\t'240'\n\t\t],\n\t\t[\n\t\t\t'Eritrea',\n\t\t\tCountryISO.Eritrea,\n\t\t\t'291'\n\t\t],\n\t\t[\n\t\t\t'Estonia (Eesti)',\n\t\t\tCountryISO.Estonia,\n\t\t\t'372'\n\t\t],\n\t\t[\n\t\t\t'Ethiopia',\n\t\t\tCountryISO.Ethiopia,\n\t\t\t'251'\n\t\t],\n\t\t[\n\t\t\t'Falkland Islands (Islas Malvinas)',\n\t\t\tCountryISO.FalklandIslands,\n\t\t\t'500'\n\t\t],\n\t\t[\n\t\t\t'Faroe Islands (Føroyar)',\n\t\t\tCountryISO.FaroeIslands,\n\t\t\t'298'\n\t\t],\n\t\t[\n\t\t\t'Fiji',\n\t\t\tCountryISO.Fiji,\n\t\t\t'679'\n\t\t],\n\t\t[\n\t\t\t'Finland (Suomi)',\n\t\t\tCountryISO.Finland,\n\t\t\t'358',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'France',\n\t\t\tCountryISO.France,\n\t\t\t'33'\n\t\t],\n\t\t[\n\t\t\t'French Guiana (Guyane française)',\n\t\t\tCountryISO.FrenchGuiana,\n\t\t\t'594'\n\t\t],\n\t\t[\n\t\t\t'French Polynesia (Polynésie française)',\n\t\t\tCountryISO.FrenchPolynesia,\n\t\t\t'689'\n\t\t],\n\t\t[\n\t\t\t'Gabon',\n\t\t\tCountryISO.Gabon,\n\t\t\t'241'\n\t\t],\n\t\t[\n\t\t\t'Gambia',\n\t\t\tCountryISO.Gambia,\n\t\t\t'220'\n\t\t],\n\t\t[\n\t\t\t'Georgia (საქართველო)',\n\t\t\tCountryISO.Georgia,\n\t\t\t'995'\n\t\t],\n\t\t[\n\t\t\t'Germany (Deutschland)',\n\t\t\tCountryISO.Germany,\n\t\t\t'49'\n\t\t],\n\t\t[\n\t\t\t'Ghana (Gaana)',\n\t\t\tCountryISO.Ghana,\n\t\t\t'233'\n\t\t],\n\t\t[\n\t\t\t'Gibraltar',\n\t\t\tCountryISO.Gibraltar,\n\t\t\t'350'\n\t\t],\n\t\t[\n\t\t\t'Greece (Ελλάδα)',\n\t\t\tCountryISO.Greece,\n\t\t\t'30'\n\t\t],\n\t\t[\n\t\t\t'Greenland (Kalaallit Nunaat)',\n\t\t\tCountryISO.Greenland,\n\t\t\t'299'\n\t\t],\n\t\t[\n\t\t\t'Grenada',\n\t\t\tCountryISO.Grenada,\n\t\t\t'1473'\n\t\t],\n\t\t[\n\t\t\t'Guadeloupe',\n\t\t\tCountryISO.Guadeloupe,\n\t\t\t'590',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Guam',\n\t\t\t'gu',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'671',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Guatemala',\n\t\t\tCountryISO.Guatemala,\n\t\t\t'502'\n\t\t],\n\t\t[\n\t\t\t'Guernsey',\n\t\t\tCountryISO.Guernsey,\n\t\t\t'44',\n\t\t\t1,\n\t\t\t[1481]\n\t\t],\n\t\t[\n\t\t\t'Guinea (Guinée)',\n\t\t\tCountryISO.Guinea,\n\t\t\t'224'\n\t\t],\n\t\t[\n\t\t\t'Guinea-Bissau (Guiné Bissau)',\n\t\t\tCountryISO.GuineaBissau,\n\t\t\t'245'\n\t\t],\n\t\t[\n\t\t\t'Guyana',\n\t\t\tCountryISO.Guyana,\n\t\t\t'592'\n\t\t],\n\t\t[\n\t\t\t'Haiti',\n\t\t\tCountryISO.Haiti,\n\t\t\t'509'\n\t\t],\n\t\t[\n\t\t\t'Honduras',\n\t\t\tCountryISO.Honduras,\n\t\t\t'504'\n\t\t],\n\t\t[\n\t\t\t'Hong Kong (香港)',\n\t\t\tCountryISO.HongKong,\n\t\t\t'852'\n\t\t],\n\t\t[\n\t\t\t'Hungary (Magyarország)',\n\t\t\tCountryISO.Hungary,\n\t\t\t'36'\n\t\t],\n\t\t[\n\t\t\t'Iceland (Ísland)',\n\t\t\tCountryISO.Iceland,\n\t\t\t'354'\n\t\t],\n\t\t[\n\t\t\t'India (भारत)',\n\t\t\tCountryISO.India,\n\t\t\t'91'\n\t\t],\n\t\t[\n\t\t\t'Indonesia',\n\t\t\tCountryISO.Indonesia,\n\t\t\t'62'\n\t\t],\n\t\t[\n\t\t\t'Iran (‫ایران‬‎)',\n\t\t\tCountryISO.Iran,\n\t\t\t'98'\n\t\t],\n\t\t[\n\t\t\t'Iraq (‫العراق‬‎)',\n\t\t\tCountryISO.Iraq,\n\t\t\t'964'\n\t\t],\n\t\t[\n\t\t\t'Ireland',\n\t\t\tCountryISO.Ireland,\n\t\t\t'353'\n\t\t],\n\t\t[\n\t\t\t'Isle of Man',\n\t\t\tCountryISO.IsleOfMan,\n\t\t\t'44',\n\t\t\t2,\n\t\t\t[1624]\n\t\t],\n\t\t[\n\t\t\t'Israel (‫ישראל‬‎)',\n\t\t\tCountryISO.Israel,\n\t\t\t'972'\n\t\t],\n\t\t[\n\t\t\t'Italy (Italia)',\n\t\t\tCountryISO.Italy,\n\t\t\t'39',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Jamaica',\n\t\t\t'jm',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'876',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Japan (日本)',\n\t\t\tCountryISO.Japan,\n\t\t\t'81'\n\t\t],\n\t\t[\n\t\t\t'Jersey',\n\t\t\tCountryISO.Jersey,\n\t\t\t'44',\n\t\t\t3,\n\t\t\t[1534]\n\t\t],\n\t\t[\n\t\t\t'Jordan (‫الأردن‬‎)',\n\t\t\tCountryISO.Jordan,\n\t\t\t'962'\n\t\t],\n\t\t[\n\t\t\t'Kazakhstan (Казахстан)',\n\t\t\tCountryISO.Kazakhstan,\n\t\t\t'7',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Kenya',\n\t\t\tCountryISO.Kenya,\n\t\t\t'254'\n\t\t],\n\t\t[\n\t\t\t'Kiribati',\n\t\t\tCountryISO.Kiribati,\n\t\t\t'686'\n\t\t],\n\t\t[\n\t\t\t'Kosovo',\n\t\t\tCountryISO.Kosovo,\n\t\t\t'383'\n\t\t],\n\t\t[\n\t\t\t'Kuwait (‫الكويت‬‎)',\n\t\t\tCountryISO.Kuwait,\n\t\t\t'965'\n\t\t],\n\t\t[\n\t\t\t'Kyrgyzstan (Кыргызстан)',\n\t\t\tCountryISO.Kyrgyzstan,\n\t\t\t'996'\n\t\t],\n\t\t[\n\t\t\t'Laos (ລາວ)',\n\t\t\tCountryISO.Laos,\n\t\t\t'856'\n\t\t],\n\t\t[\n\t\t\t'Latvia (Latvija)',\n\t\t\tCountryISO.Latvia,\n\t\t\t'371'\n\t\t],\n\t\t[\n\t\t\t'Lebanon (‫لبنان‬‎)',\n\t\t\tCountryISO.Lebanon,\n\t\t\t'961'\n\t\t],\n\t\t[\n\t\t\t'Lesotho',\n\t\t\tCountryISO.Lesotho,\n\t\t\t'266'\n\t\t],\n\t\t[\n\t\t\t'Liberia',\n\t\t\tCountryISO.Liberia,\n\t\t\t'231'\n\t\t],\n\t\t[\n\t\t\t'Libya (‫ليبيا‬‎)',\n\t\t\tCountryISO.Libya,\n\t\t\t'218'\n\t\t],\n\t\t[\n\t\t\t'Liechtenstein',\n\t\t\tCountryISO.Liechtenstein,\n\t\t\t'423'\n\t\t],\n\t\t[\n\t\t\t'Lithuania (Lietuva)',\n\t\t\tCountryISO.Lithuania,\n\t\t\t'370'\n\t\t],\n\t\t[\n\t\t\t'Luxembourg',\n\t\t\tCountryISO.Luxembourg,\n\t\t\t'352'\n\t\t],\n\t\t[\n\t\t\t'Macau (澳門)',\n\t\t\tCountryISO.Macau,\n\t\t\t'853'\n\t\t],\n\t\t[\n\t\t\t'Macedonia (FYROM) (Македонија)',\n\t\t\tCountryISO.Macedonia,\n\t\t\t'389'\n\t\t],\n\t\t[\n\t\t\t'Madagascar (Madagasikara)',\n\t\t\tCountryISO.Madagascar,\n\t\t\t'261'\n\t\t],\n\t\t[\n\t\t\t'Malawi',\n\t\t\tCountryISO.Malawi,\n\t\t\t'265'\n\t\t],\n\t\t[\n\t\t\t'Malaysia',\n\t\t\tCountryISO.Malaysia,\n\t\t\t'60'\n\t\t],\n\t\t[\n\t\t\t'Maldives',\n\t\t\tCountryISO.Maldives,\n\t\t\t'960'\n\t\t],\n\t\t[\n\t\t\t'Mali',\n\t\t\tCountryISO.Mali,\n\t\t\t'223'\n\t\t],\n\t\t[\n\t\t\t'Malta',\n\t\t\tCountryISO.Malta,\n\t\t\t'356'\n\t\t],\n\t\t[\n\t\t\t'Marshall Islands',\n\t\t\tCountryISO.MarshallIslands,\n\t\t\t'692'\n\t\t],\n\t\t[\n\t\t\t'Martinique',\n\t\t\tCountryISO.Martinique,\n\t\t\t'596'\n\t\t],\n\t\t[\n\t\t\t'Mauritania (‫موريتانيا‬‎)',\n\t\t\tCountryISO.Mauritania,\n\t\t\t'222'\n\t\t],\n\t\t[\n\t\t\t'Mauritius (Moris)',\n\t\t\tCountryISO.Mauritius,\n\t\t\t'230'\n\t\t],\n\t\t[\n\t\t\t'Mayotte',\n\t\t\tCountryISO.Mayotte,\n\t\t\t'262',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Mexico (México)',\n\t\t\tCountryISO.Mexico,\n\t\t\t'52'\n\t\t],\n\t\t[\n\t\t\t'Micronesia',\n\t\t\tCountryISO.Micronesia,\n\t\t\t'691'\n\t\t],\n\t\t[\n\t\t\t'Moldova (Republica Moldova)',\n\t\t\tCountryISO.Moldova,\n\t\t\t'373'\n\t\t],\n\t\t[\n\t\t\t'Monaco',\n\t\t\tCountryISO.Monaco,\n\t\t\t'377'\n\t\t],\n\t\t[\n\t\t\t'Mongolia (Монгол)',\n\t\t\tCountryISO.Mongolia,\n\t\t\t'976'\n\t\t],\n\t\t[\n\t\t\t'Montenegro (Crna Gora)',\n\t\t\tCountryISO.Montenegro,\n\t\t\t'382'\n\t\t],\n\t\t[\n\t\t\t'Montserrat',\n\t\t\t'ms',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'664',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Morocco (‫المغرب‬‎)',\n\t\t\tCountryISO.Morocco,\n\t\t\t'212',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Mozambique (Moçambique)',\n\t\t\tCountryISO.Mozambique,\n\t\t\t'258'\n\t\t],\n\t\t[\n\t\t\t'Myanmar (Burma) (မြန်မာ)',\n\t\t\tCountryISO.Myanmar,\n\t\t\t'95'\n\t\t],\n\t\t[\n\t\t\t'Namibia (Namibië)',\n\t\t\tCountryISO.Namibia,\n\t\t\t'264'\n\t\t],\n\t\t[\n\t\t\t'Nauru',\n\t\t\tCountryISO.Nauru,\n\t\t\t'674'\n\t\t],\n\t\t[\n\t\t\t'Nepal (नेपाल)',\n\t\t\tCountryISO.Nepal,\n\t\t\t'977'\n\t\t],\n\t\t[\n\t\t\t'Netherlands (Nederland)',\n\t\t\tCountryISO.Netherlands,\n\t\t\t'31'\n\t\t],\n\t\t[\n\t\t\t'New Caledonia (Nouvelle-Calédonie)',\n\t\t\tCountryISO.NewCaledonia,\n\t\t\t'687'\n\t\t],\n\t\t[\n\t\t\t'New Zealand',\n\t\t\tCountryISO.NewZealand,\n\t\t\t'64'\n\t\t],\n\t\t[\n\t\t\t'Nicaragua',\n\t\t\tCountryISO.Nicaragua,\n\t\t\t'505'\n\t\t],\n\t\t[\n\t\t\t'Niger (Nijar)',\n\t\t\tCountryISO.Niger,\n\t\t\t'227'\n\t\t],\n\t\t[\n\t\t\t'Nigeria',\n\t\t\tCountryISO.Nigeria,\n\t\t\t'234'\n\t\t],\n\t\t[\n\t\t\t'Niue',\n\t\t\tCountryISO.Niue,\n\t\t\t'683'\n\t\t],\n\t\t[\n\t\t\t'Norfolk Island',\n\t\t\tCountryISO.NorfolkIsland,\n\t\t\t'672'\n\t\t],\n\t\t[\n\t\t\t'North Korea (조선 민주주의 인민 공화국)',\n\t\t\tCountryISO.NorthKorea,\n\t\t\t'850'\n\t\t],\n\t\t[\n\t\t\t'Northern Mariana Islands',\n\t\t\tCountryISO.NorthernMarianaIslands,\n\t\t\t'1670'\n\t\t],\n\t\t[\n\t\t\t'Norway (Norge)',\n\t\t\tCountryISO.Norway,\n\t\t\t'47',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Oman (‫عُمان‬‎)',\n\t\t\tCountryISO.Oman,\n\t\t\t'968'\n\t\t],\n\t\t[\n\t\t\t'Pakistan (‫پاکستان‬‎)',\n\t\t\tCountryISO.Pakistan,\n\t\t\t'92'\n\t\t],\n\t\t[\n\t\t\t'Palau',\n\t\t\tCountryISO.Palau,\n\t\t\t'680'\n\t\t],\n\t\t[\n\t\t\t'Palestine (‫فلسطين‬‎)',\n\t\t\tCountryISO.Palestine,\n\t\t\t'970'\n\t\t],\n\t\t[\n\t\t\t'Panama (Panamá)',\n\t\t\tCountryISO.Panama,\n\t\t\t'507'\n\t\t],\n\t\t[\n\t\t\t'Papua New Guinea',\n\t\t\tCountryISO.PapuaNewGuinea,\n\t\t\t'675'\n\t\t],\n\t\t[\n\t\t\t'Paraguay',\n\t\t\tCountryISO.Paraguay,\n\t\t\t'595'\n\t\t],\n\t\t[\n\t\t\t'Peru (Perú)',\n\t\t\tCountryISO.Peru,\n\t\t\t'51'\n\t\t],\n\t\t[\n\t\t\t'Philippines',\n\t\t\tCountryISO.Philippines,\n\t\t\t'63'\n\t\t],\n\t\t[\n\t\t\t'Poland (Polska)',\n\t\t\tCountryISO.Poland,\n\t\t\t'48'\n\t\t],\n\t\t[\n\t\t\t'Portugal',\n\t\t\tCountryISO.Portugal,\n\t\t\t'351'\n\t\t],\n\t\t[\n\t\t\t'Puerto Rico',\n\t\t\tCountryISO.PuertoRico,\n\t\t\t'1',\n\t\t\t3,\n\t\t\t['787', '939']\n\t\t],\n\t\t[\n\t\t\t'Qatar (‫قطر‬‎)',\n\t\t\tCountryISO.Qatar,\n\t\t\t'974'\n\t\t],\n\t\t[\n\t\t\t'Réunion (La Réunion)',\n\t\t\tCountryISO.Réunion,\n\t\t\t'262',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Romania (România)',\n\t\t\tCountryISO.Romania,\n\t\t\t'40'\n\t\t],\n\t\t[\n\t\t\t'Russia (Россия)',\n\t\t\tCountryISO.Russia,\n\t\t\t'7',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Rwanda',\n\t\t\tCountryISO.Rwanda,\n\t\t\t'250'\n\t\t],\n\t\t[\n\t\t\t'Saint Barthélemy (Saint-Barthélemy)',\n\t\t\tCountryISO.SaintBarthélemy,\n\t\t\t'590',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Saint Helena',\n\t\t\tCountryISO.SaintHelena,\n\t\t\t'290'\n\t\t],\n\t\t[\n\t\t\t'Saint Kitts and Nevis',\n\t\t\tCountryISO.SaintKittsAndNevis,\n\t\t\t'1869'\n\t\t],\n\t\t[\n\t\t\t'Saint Lucia',\n\t\t\t'lc',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'758',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Saint Martin (Saint-Martin (partie française))',\n\t\t\tCountryISO.SaintMartin,\n\t\t\t'590',\n\t\t\t2\n\t\t],\n\t\t[\n\t\t\t'Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)',\n\t\t\tCountryISO.SaintPierreAndMiquelon,\n\t\t\t'508'\n\t\t],\n\t\t[\n\t\t\t'Saint Vincent and the Grenadines',\n\t\t\t'vc',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'784',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Samoa',\n\t\t\tCountryISO.Samoa,\n\t\t\t'685'\n\t\t],\n\t\t[\n\t\t\t'San Marino',\n\t\t\tCountryISO.SanMarino,\n\t\t\t'378'\n\t\t],\n\t\t[\n\t\t\t'São Tomé and Príncipe (São Tomé e Príncipe)',\n\t\t\tCountryISO.SãoToméAndPríncipe,\n\t\t\t'239'\n\t\t],\n\t\t[\n\t\t\t'Saudi Arabia (‫المملكة العربية السعودية‬‎)',\n\t\t\tCountryISO.SaudiArabia,\n\t\t\t'966'\n\t\t],\n\t\t[\n\t\t\t'Senegal (Sénégal)',\n\t\t\tCountryISO.Senegal,\n\t\t\t'221'\n\t\t],\n\t\t[\n\t\t\t'Serbia (Србија)',\n\t\t\tCountryISO.Serbia,\n\t\t\t'381'\n\t\t],\n\t\t[\n\t\t\t'Seychelles',\n\t\t\tCountryISO.Seychelles,\n\t\t\t'248'\n\t\t],\n\t\t[\n\t\t\t'Sierra Leone',\n\t\t\tCountryISO.SierraLeone,\n\t\t\t'232'\n\t\t],\n\t\t[\n\t\t\t'Singapore',\n\t\t\tCountryISO.Singapore,\n\t\t\t'65'\n\t\t],\n\t\t[\n\t\t\t'Sint Maarten',\n\t\t\t'sx',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'721',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Slovakia (Slovensko)',\n\t\t\tCountryISO.Slovakia,\n\t\t\t'421'\n\t\t],\n\t\t[\n\t\t\t'Slovenia (Slovenija)',\n\t\t\tCountryISO.Slovenia,\n\t\t\t'386'\n\t\t],\n\t\t[\n\t\t\t'Solomon Islands',\n\t\t\tCountryISO.SolomonIslands,\n\t\t\t'677'\n\t\t],\n\t\t[\n\t\t\t'Somalia (Soomaaliya)',\n\t\t\tCountryISO.Somalia,\n\t\t\t'252'\n\t\t],\n\t\t[\n\t\t\t'South Africa',\n\t\t\tCountryISO.SouthAfrica,\n\t\t\t'27'\n\t\t],\n\t\t[\n\t\t\t'South Korea (대한민국)',\n\t\t\tCountryISO.SouthKorea,\n\t\t\t'82'\n\t\t],\n\t\t[\n\t\t\t'South Sudan (‫جنوب السودان‬‎)',\n\t\t\tCountryISO.SouthSudan,\n\t\t\t'211'\n\t\t],\n\t\t[\n\t\t\t'Spain (España)',\n\t\t\tCountryISO.Spain,\n\t\t\t'34'\n\t\t],\n\t\t[\n\t\t\t'Sri Lanka (ශ්‍රී ලංකාව)',\n\t\t\tCountryISO.SriLanka,\n\t\t\t'94'\n\t\t],\n\t\t[\n\t\t\t'Sudan (‫السودان‬‎)',\n\t\t\tCountryISO.Sudan,\n\t\t\t'249'\n\t\t],\n\t\t[\n\t\t\t'Suriname',\n\t\t\tCountryISO.Suriname,\n\t\t\t'597'\n\t\t],\n\t\t[\n\t\t\t'Svalbard and Jan Mayen',\n\t\t\tCountryISO.SvalbardAndJanMayen,\n\t\t\t'47',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Swaziland',\n\t\t\tCountryISO.Swaziland,\n\t\t\t'268'\n\t\t],\n\t\t[\n\t\t\t'Sweden (Sverige)',\n\t\t\tCountryISO.Sweden,\n\t\t\t'46'\n\t\t],\n\t\t[\n\t\t\t'Switzerland (Schweiz)',\n\t\t\tCountryISO.Switzerland,\n\t\t\t'41'\n\t\t],\n\t\t[\n\t\t\t'Syria (‫سوريا‬‎)',\n\t\t\tCountryISO.Syria,\n\t\t\t'963'\n\t\t],\n\t\t[\n\t\t\t'Taiwan (台灣)',\n\t\t\tCountryISO.Taiwan,\n\t\t\t'886'\n\t\t],\n\t\t[\n\t\t\t'Tajikistan',\n\t\t\tCountryISO.Tajikistan,\n\t\t\t'992'\n\t\t],\n\t\t[\n\t\t\t'Tanzania',\n\t\t\tCountryISO.Tanzania,\n\t\t\t'255'\n\t\t],\n\t\t[\n\t\t\t'Thailand (ไทย)',\n\t\t\tCountryISO.Thailand,\n\t\t\t'66'\n\t\t],\n\t\t[\n\t\t\t'Timor-Leste',\n\t\t\tCountryISO.TimorLeste,\n\t\t\t'670'\n\t\t],\n\t\t[\n\t\t\t'Togo',\n\t\t\tCountryISO.Togo,\n\t\t\t'228'\n\t\t],\n\t\t[\n\t\t\t'Tokelau',\n\t\t\tCountryISO.Tokelau,\n\t\t\t'690'\n\t\t],\n\t\t[\n\t\t\t'Tonga',\n\t\t\tCountryISO.Tonga,\n\t\t\t'676'\n\t\t],\n\t\t[\n\t\t\t'Trinidad and Tobago',\n\t\t\t'tt',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'868',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Tunisia (‫تونس‬‎)',\n\t\t\tCountryISO.Tunisia,\n\t\t\t'216'\n\t\t],\n\t\t[\n\t\t\t'Turkey (Türkiye)',\n\t\t\tCountryISO.Turkey,\n\t\t\t'90'\n\t\t],\n\t\t[\n\t\t\t'Turkmenistan',\n\t\t\tCountryISO.Turkmenistan,\n\t\t\t'993'\n\t\t],\n\t\t[\n\t\t\t'Turks and Caicos Islands',\n\t\t\tCountryISO.TurksAndCaicosIslands,\n\t\t\t'1649'\n\t\t],\n\t\t[\n\t\t\t'Tuvalu',\n\t\t\tCountryISO.Tuvalu,\n\t\t\t'688'\n\t\t],\n\t\t[\n\t\t\t'U.S. Virgin Islands',\n\t\t\t'vi',\n\t\t\t'1',\n\t\t\t1,\n\t\t\t[\n\t\t\t\t'340',\n\t\t\t]\n\t\t],\n\t\t[\n\t\t\t'Uganda',\n\t\t\tCountryISO.Uganda,\n\t\t\t'256'\n\t\t],\n\t\t[\n\t\t\t'Ukraine (Україна)',\n\t\t\tCountryISO.Ukraine,\n\t\t\t'380'\n\t\t],\n\t\t[\n\t\t\t'United Arab Emirates (‫الإمارات العربية المتحدة‬‎)',\n\t\t\tCountryISO.UnitedArabEmirates,\n\t\t\t'971'\n\t\t],\n\t\t[\n\t\t\t'United Kingdom',\n\t\t\tCountryISO.UnitedKingdom,\n\t\t\t'44',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'United States',\n\t\t\tCountryISO.UnitedStates,\n\t\t\t'1',\n\t\t\t0\n\t\t],\n\t\t[\n\t\t\t'Uruguay',\n\t\t\tCountryISO.Uruguay,\n\t\t\t'598'\n\t\t],\n\t\t[\n\t\t\t'Uzbekistan (Oʻzbekiston)',\n\t\t\tCountryISO.Uzbekistan,\n\t\t\t'998'\n\t\t],\n\t\t[\n\t\t\t'Vanuatu',\n\t\t\tCountryISO.Vanuatu,\n\t\t\t'678'\n\t\t],\n\t\t[\n\t\t\t'Vatican City (Città del Vaticano)',\n\t\t\tCountryISO.VaticanCity,\n\t\t\t'39',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Venezuela',\n\t\t\tCountryISO.Venezuela,\n\t\t\t'58'\n\t\t],\n\t\t[\n\t\t\t'Vietnam (Việt Nam)',\n\t\t\tCountryISO.Vietnam,\n\t\t\t'84'\n\t\t],\n\t\t[\n\t\t\t'Wallis and Futuna',\n\t\t\tCountryISO.WallisAndFutuna,\n\t\t\t'681'\n\t\t],\n\t\t[\n\t\t\t'Western Sahara (‫الصحراء الغربية‬‎)',\n\t\t\tCountryISO.WesternSahara,\n\t\t\t'212',\n\t\t\t1\n\t\t],\n\t\t[\n\t\t\t'Yemen (‫اليمن‬‎)',\n\t\t\tCountryISO.Yemen,\n\t\t\t'967'\n\t\t],\n\t\t[\n\t\t\t'Zambia',\n\t\t\tCountryISO.Zambia,\n\t\t\t'260'\n\t\t],\n\t\t[\n\t\t\t'Zimbabwe',\n\t\t\tCountryISO.Zimbabwe,\n\t\t\t'263'\n\t\t],\n\t\t[\n\t\t\t'Åland Islands',\n\t\t\tCountryISO.ÅlandIslands,\n\t\t\t'358',\n\t\t\t1\n\t\t]\n\t];\n}","export enum SearchCountryField {\n\tDialCode = 'dialCode',\n\tIso2 = 'iso2',\n\tName = 'name',\n\tAll = 'all'\n}\n","import * as lpn from 'google-libphonenumber';\n\nexport const phoneNumberValidator = (control: any) => {\n    if (!control.value) {\n        return null;\n    }\n\n    // Find <input> inside injected nativeElement and get its \"id\".\n    const el: HTMLElement = control.nativeElement as HTMLElement;\n    const inputBox: HTMLInputElement | any = el ? el.querySelector('input[type=\"tel\"]') : undefined;\n\n    if (inputBox) {\n        const isCheckValidation = inputBox.getAttribute('validation');\n\n        if (isCheckValidation === 'true') {\n            const isRequired = control.errors && control.errors['required'] === true;\n            const error = { validatePhoneNumber: { valid: false } };\n\n            inputBox.setCustomValidity('Invalid field.');\n\n            let number: lpn.PhoneNumber;\n\n            try {\n                // Verificar que control.value tenga las propiedades necesarias\n                if (control.value && typeof control.value === 'object' && control.value.number && control.value.countryCode) {\n                    number = lpn.PhoneNumberUtil.getInstance().parse(\n                        control.value.number,\n                        control.value.countryCode\n                    );\n                } else {\n                    return error;\n                }\n            } catch (e) {\n                if (isRequired) {\n                    return error;\n                } else {\n                    inputBox.setCustomValidity('');\n                    return null;\n                }\n            }\n\n            if (control.value) {\n                // @ts-ignore\n                if (!number) {\n                    return error;\n                } else {\n                    if (\n                        !lpn.PhoneNumberUtil.getInstance().isValidNumberForRegion(\n                            number,\n                            control.value.countryCode\n                        )\n                    ) {\n                        return error;\n                    } else {\n                        inputBox.setCustomValidity('');\n                        return null;\n                    }\n                }\n            }\n        } else if (isCheckValidation === 'false') {\n            inputBox.setCustomValidity('');\n            return null;\n        }\n    }\n\n    return null;\n};","import * as lpn from 'google-libphonenumber';\nimport {\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';\n\nimport { setTheme } from 'ngx-bootstrap/utils';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CountryCode } from '../../data/country-code';\nimport { CountryISO } from '../../enums/country-iso.enum';\nimport { SearchCountryField } from '../../enums/search-country-field.enum';\nimport { ChangeData } from '../../interfaces/change-data';\nimport { Country } from '../../models/country.model';\nimport { PhoneNumberFormat } from '../../enums/phone-number-format.enum';\nimport { phoneNumberValidator } from '../../validator/ngx-intl-tel-input.validator';\n\n@Component({\n    selector: 'utils-intl-tel-input',\n    standalone: true,\n    imports: [CommonModule, ReactiveFormsModule, FormsModule, BsDropdownModule],\n    templateUrl: './utils-intl-tel-input.component.html',\n    styleUrls: [\n        './css/bootstrap-dropdown.css',\n        './css/intlTelInput.css',\n        './utils-intl-tel-input.component.scss',\n    ],\n    providers: [\n        CountryCode,\n        {\n            provide: NG_VALUE_ACCESSOR,\n            // tslint:disable-next-line:no-forward-ref\n            useExisting: forwardRef(() => UtilsIntlTelInputComponent),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useValue: phoneNumberValidator,\n            multi: true,\n        },\n    ],\n})\nexport class UtilsIntlTelInputComponent implements OnInit, OnChanges {\n    @Input() value: string | undefined = '';\n    @Input() preferredCountries: Array<string> = [];\n    @Input() enablePlaceholder = true;\n    @Input() customPlaceholder: string = '';\n    @Input() numberFormat: lpn.PhoneNumberFormat | PhoneNumberFormat =\n        lpn.PhoneNumberFormat.INTERNATIONAL;\n    @Input() cssClass = 'search-default';\n    @Input() onlyCountries: Array<string> = [];\n    @Input() enableAutoCountrySelect = true;\n    @Input() searchCountryFlag = false;\n    @Input() searchCountryField: SearchCountryField[] = [SearchCountryField.All];\n    @Input() searchCountryPlaceholder = 'Search Country';\n    @Input() maxLength: number = 0;\n    @Input() selectFirstCountry = true;\n    @Input() selectedCountryISO!: CountryISO;\n    @Input() phoneValidation = true;\n    @Input() inputId = 'phone';\n    @Input() separateDialCode = false;\n    separateDialCodeClass: string = '';\n\n    @Output() readonly countryChange = new EventEmitter<Country>();\n\n    selectedCountry: Country = {\n        areaCodes: undefined,\n        dialCode: '',\n        htmlId: '',\n        flagClass: '',\n        iso2: '',\n        name: '',\n        placeHolder: '',\n        priority: 0,\n    };\n\n    phoneNumber: string | undefined = '';\n    allCountries: Array<Country> = [];\n    preferredCountriesInDropDown: Array<Country> = [];\n    // Has to be 'any' to prevent a need to install @types/google-libphonenumber by the package user...\n    phoneUtil: any = lpn.PhoneNumberUtil.getInstance();\n    disabled = false;\n    errors: Array<any> = ['Phone number is required.'];\n    countrySearchText = '';\n\n    @ViewChild('countryList') countryList!: ElementRef;\n\n    onTouched = () => { };\n    propagateChange = (_: ChangeData) => { };\n\n    constructor(private countryCodeData: CountryCode) {\n        // If this is not set, ngx-bootstrap will try to use the bs3 CSS (which is not what we've embedded) and will\n        // Add the wrong classes and such\n        setTheme('bs4');\n    }\n\n    ngOnInit() {\n        this.init();\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const selectedISO = changes['selectedCountryISO'];\n        if (\n            this.allCountries &&\n            selectedISO &&\n            selectedISO.currentValue !== selectedISO.previousValue\n        ) {\n            this.updateSelectedCountry();\n        }\n        if (changes['preferredCountries']) {\n            this.updatePreferredCountries();\n        }\n        this.checkSeparateDialCodeStyle();\n    }\n\n    /*\n          This is a wrapper method to avoid calling this.ngOnInit() in writeValue().\n          Ref: http://codelyzer.com/rules/no-life-cycle-call/\n      */\n    init() {\n        this.fetchCountryData();\n        if (this.preferredCountries.length) {\n            this.updatePreferredCountries();\n        }\n        if (this.onlyCountries.length) {\n            this.allCountries = this.allCountries.filter((c) =>\n                this.onlyCountries.includes(c.iso2)\n            );\n        }\n        if (this.selectFirstCountry) {\n            if (this.preferredCountriesInDropDown.length) {\n                this.setSelectedCountry(this.preferredCountriesInDropDown[0]);\n            } else {\n                this.setSelectedCountry(this.allCountries[0]);\n            }\n        }\n        this.updateSelectedCountry();\n        this.checkSeparateDialCodeStyle();\n    }\n\n    setSelectedCountry(country: Country) {\n        this.selectedCountry = country;\n        this.countryChange.emit(country);\n    }\n\n    /**\n     * Search country based on country name, iso2, dialCode or all of them.\n     */\n    public searchCountry() {\n        if (!this.countrySearchText) {\n            this.countryList.nativeElement\n                .querySelector('.iti__country-list li')\n                .scrollIntoView({\n                    behavior: 'smooth',\n                    block: 'nearest',\n                    inline: 'nearest',\n                });\n            return;\n        }\n        const countrySearchTextLower = this.countrySearchText.toLowerCase();\n        // @ts-ignore\n        const country = this.allCountries.filter((c) => {\n            if (this.searchCountryField.indexOf(SearchCountryField.All) > -1) {\n                // Search in all fields\n                if (c.iso2.toLowerCase().startsWith(countrySearchTextLower)) {\n                    return c;\n                }\n                if (c.name.toLowerCase().startsWith(countrySearchTextLower)) {\n                    return c;\n                }\n                if (c.dialCode.startsWith(this.countrySearchText)) {\n                    return c;\n                }\n            } else {\n                // Or search by specific SearchCountryField(s)\n                if (this.searchCountryField.indexOf(SearchCountryField.Iso2) > -1) {\n                    if (c.iso2.toLowerCase().startsWith(countrySearchTextLower)) {\n                        return c;\n                    }\n                }\n                if (this.searchCountryField.indexOf(SearchCountryField.Name) > -1) {\n                    if (c.name.toLowerCase().startsWith(countrySearchTextLower)) {\n                        return c;\n                    }\n                }\n                if (this.searchCountryField.indexOf(SearchCountryField.DialCode) > -1) {\n                    if (c.dialCode.startsWith(this.countrySearchText)) {\n                        return c;\n                    }\n                }\n            }\n        });\n\n        if (country.length > 0) {\n            const el = this.countryList.nativeElement.querySelector(\n                '#' + country[0].htmlId\n            );\n            if (el) {\n                el.scrollIntoView({\n                    behavior: 'smooth',\n                    block: 'nearest',\n                    inline: 'nearest',\n                });\n            }\n        }\n\n        this.checkSeparateDialCodeStyle();\n    }\n\n    public onPhoneNumberChange(): void {\n        let countryCode: string | undefined;\n        // Handle the case where the user sets the value programatically based on a persisted ChangeData obj.\n        if (this.phoneNumber && typeof this.phoneNumber === 'object') {\n            const numberObj: ChangeData = this.phoneNumber;\n            this.phoneNumber = numberObj.number;\n            countryCode = numberObj.countryCode;\n        }\n\n        this.value = this.phoneNumber;\n        countryCode = countryCode || this.selectedCountry.iso2;\n        // @ts-ignore\n        const number = this.getParsedNumber(this.phoneNumber, countryCode);\n\n        // auto select country based on the extension (and areaCode if needed) (e.g select Canada if number starts with +1 416)\n        if (this.enableAutoCountrySelect) {\n            countryCode =\n                number && number.getCountryCode()\n                    ? // @ts-ignore\n                    this.getCountryIsoCode(number.getCountryCode(), number)\n                    : this.selectedCountry.iso2;\n            if (countryCode && countryCode !== this.selectedCountry.iso2) {\n                const newCountry = this.allCountries\n                    .sort((a, b) => {\n                        return a.priority - b.priority;\n                    })\n                    .find((c) => c.iso2 === countryCode);\n                if (newCountry) {\n                    this.selectedCountry = newCountry;\n                }\n            }\n        }\n        countryCode = countryCode ? countryCode : this.selectedCountry.iso2;\n\n        this.checkSeparateDialCodeStyle();\n\n        if (!this.value) {\n            // Reason: avoid https://stackoverflow.com/a/54358133/1617590\n            // tslint:disable-next-line: no-null-keyword\n            // @ts-ignore\n            this.propagateChange(null);\n        } else {\n            const intlNo = number\n                ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.INTERNATIONAL)\n                : '';\n\n            // parse phoneNumber if separate dial code is needed\n            if (this.separateDialCode && intlNo) {\n                this.value = this.removeDialCode(intlNo);\n            }\n\n            this.propagateChange({\n                number: this.value,\n                internationalNumber: intlNo,\n                nationalNumber: number\n                    ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.NATIONAL)\n                    : '',\n                e164Number: number\n                    ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.E164)\n                    : '',\n                countryCode: countryCode.toUpperCase(),\n                dialCode: '+' + this.selectedCountry.dialCode,\n            });\n        }\n    }\n\n    public onCountrySelect(country: Country, el: { focus: () => void }): void {\n        this.setSelectedCountry(country);\n\n        this.checkSeparateDialCodeStyle();\n\n        if (this.phoneNumber && this.phoneNumber.length > 0) {\n            this.value = this.phoneNumber;\n            const number = this.getParsedNumber(\n                this.phoneNumber,\n                this.selectedCountry.iso2\n            );\n            const intlNo = number\n                ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.INTERNATIONAL)\n                : '';\n            // parse phoneNumber if separate dial code is needed\n            if (this.separateDialCode && intlNo) {\n                this.value = this.removeDialCode(intlNo);\n            }\n\n            this.propagateChange({\n                number: this.value,\n                internationalNumber: intlNo,\n                nationalNumber: number\n                    ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.NATIONAL)\n                    : '',\n                e164Number: number\n                    ? this.phoneUtil.format(number, lpn.PhoneNumberFormat.E164)\n                    : '',\n                countryCode: this.selectedCountry.iso2.toUpperCase(),\n                dialCode: '+' + this.selectedCountry.dialCode,\n            });\n        } else {\n            // Reason: avoid https://stackoverflow.com/a/54358133/1617590\n            // tslint:disable-next-line: no-null-keyword\n            // @ts-ignore\n            this.propagateChange(null);\n        }\n\n        el.focus();\n    }\n\n    public onInputKeyPress(event: KeyboardEvent): void {\n        const allowedChars = /[0-9\\+\\-\\(\\)\\ ]/;\n        const allowedCtrlChars = /[axcv]/; // Allows copy-pasting\n        const allowedOtherKeys = [\n            'ArrowLeft',\n            'ArrowUp',\n            'ArrowRight',\n            'ArrowDown',\n            'Home',\n            'End',\n            'Insert',\n            'Delete',\n            'Backspace',\n        ];\n\n        if (\n            !allowedChars.test(event.key) &&\n            !(event.ctrlKey && allowedCtrlChars.test(event.key)) &&\n            !allowedOtherKeys.includes(event.key)\n        ) {\n            event.preventDefault();\n        }\n    }\n\n    registerOnChange(fn: any): void {\n        this.propagateChange = fn;\n    }\n\n    registerOnTouched(fn: any) {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    writeValue(obj: any): void {\n        if (obj === undefined) {\n            this.init();\n        }\n        this.phoneNumber = obj;\n        setTimeout(() => {\n            this.onPhoneNumberChange();\n        }, 1);\n    }\n\n    resolvePlaceholder(): string {\n        let placeholder = '';\n        if (this.customPlaceholder) {\n            placeholder = this.customPlaceholder;\n        } else if (this.selectedCountry.placeHolder) {\n            placeholder = this.selectedCountry.placeHolder;\n            if (this.separateDialCode) {\n                placeholder = this.removeDialCode(placeholder);\n            }\n        }\n        return placeholder;\n    }\n\n    /* --------------------------------- Helpers -------------------------------- */\n    /**\n     * Returns parse PhoneNumber object.\n     * @param phoneNumber string\n     * @param countryCode string\n     */\n    private getParsedNumber(\n        phoneNumber: string,\n        countryCode: string\n    ): lpn.PhoneNumber {\n        let number: lpn.PhoneNumber;\n        try {\n            number = this.phoneUtil.parse(phoneNumber, countryCode.toUpperCase());\n        } catch (e) { }\n        // @ts-ignore\n        return number;\n    }\n\n    /**\n     * Adjusts input alignment based on the dial code presentation style.\n     */\n    private checkSeparateDialCodeStyle() {\n        if (this.separateDialCode && this.selectedCountry) {\n            const cntryCd = this.selectedCountry.dialCode;\n            this.separateDialCodeClass =\n                'separate-dial-code iti-sdc-' + (cntryCd.length + 1);\n        } else {\n            this.separateDialCodeClass = '';\n        }\n    }\n\n    /**\n     * Cleans dialcode from phone number string.\n     * @param phoneNumber string\n     */\n    private removeDialCode(phoneNumber: string): string {\n        const number = this.getParsedNumber(phoneNumber, this.selectedCountry.iso2);\n        phoneNumber = this.phoneUtil.format(\n            number,\n            lpn.PhoneNumberFormat[this.numberFormat]\n        );\n        if (phoneNumber.startsWith('+') && this.separateDialCode) {\n            phoneNumber = phoneNumber.substr(phoneNumber.indexOf(' ') + 1);\n        }\n        return phoneNumber;\n    }\n\n    /**\n     * Sifts through all countries and returns iso code of the primary country\n     * based on the number provided.\n     * @param countryCode country code in number format\n     * @param number PhoneNumber object\n     */\n    private getCountryIsoCode(\n        countryCode: number,\n        number: lpn.PhoneNumber\n    ): string | undefined {\n        // Will use this to match area code from the first numbers\n        // @ts-ignore\n        const rawNumber = number['values_']['2'].toString();\n        // List of all countries with countryCode (can be more than one. e.x. US, CA, DO, PR all have +1 countryCode)\n        const countries = this.allCountries.filter(\n            (c) => c.dialCode === countryCode.toString()\n        );\n        // Main country is the country, which has no areaCodes specified in country-code.ts file.\n        const mainCountry = countries.find((c) => c.areaCodes === undefined);\n        // Secondary countries are all countries, which have areaCodes specified in country-code.ts file.\n        const secondaryCountries = countries.filter(\n            (c) => c.areaCodes !== undefined\n        );\n        let matchedCountry = mainCountry ? mainCountry.iso2 : undefined;\n\n        /*\n                Iterate over each secondary country and check if nationalNumber starts with any of areaCodes available.\n                If no matches found, fallback to the main country.\n            */\n        secondaryCountries.forEach((country) => {\n            // @ts-ignore\n            country.areaCodes.forEach((areaCode) => {\n                if (rawNumber.startsWith(areaCode)) {\n                    matchedCountry = country.iso2;\n                }\n            });\n        });\n\n        return matchedCountry;\n    }\n\n    /**\n     * Gets formatted example phone number from phoneUtil.\n     * @param countryCode string\n     */\n    protected getPhoneNumberPlaceHolder(countryCode: string): string {\n        try {\n            return this.phoneUtil.format(\n                this.phoneUtil.getExampleNumber(countryCode),\n                lpn.PhoneNumberFormat[this.numberFormat]\n            );\n        } catch (e) {\n            // @ts-ignore\n            return e;\n        }\n    }\n\n    /**\n     * Clearing the list to avoid duplicates (https://github.com/webcat12345/ngx-intl-tel-input/issues/248)\n     */\n    protected fetchCountryData(): void {\n        this.allCountries = [];\n\n        this.countryCodeData.allCountries.forEach((c) => {\n            const country: Country = {\n                name: c[0].toString(),\n                iso2: c[1].toString(),\n                dialCode: c[2].toString(),\n                priority: +c[3] || 0,\n                areaCodes: (c[4] as string[]) || undefined,\n                htmlId: `iti-0__item-${c[1].toString()}`,\n                flagClass: `iti__${c[1].toString().toLocaleLowerCase()}`,\n                placeHolder: '',\n            };\n\n            if (this.enablePlaceholder) {\n                country.placeHolder = this.getPhoneNumberPlaceHolder(\n                    country.iso2.toUpperCase()\n                );\n            }\n\n            this.allCountries.push(country);\n        });\n    }\n\n    /**\n     * Populates preferredCountriesInDropDown with prefferred countries.\n     */\n    private updatePreferredCountries() {\n        if (this.preferredCountries.length) {\n            this.preferredCountriesInDropDown = [];\n            this.preferredCountries.forEach((iso2) => {\n                const preferredCountry = this.allCountries.filter((c) => {\n                    return c.iso2 === iso2;\n                });\n\n                this.preferredCountriesInDropDown.push(preferredCountry[0]);\n            });\n        }\n    }\n\n    /**\n     * Updates selectedCountry.\n     */\n    private updateSelectedCountry() {\n        if (this.selectedCountryISO) {\n            // @ts-ignore\n            this.selectedCountry = this.allCountries.find((c) => {\n                return c.iso2.toLowerCase() === this.selectedCountryISO.toLowerCase();\n            });\n            if (this.selectedCountry) {\n                if (this.phoneNumber) {\n                    this.onPhoneNumberChange();\n                } else {\n                    // Reason: avoid https://stackoverflow.com/a/54358133/1617590\n                    // tslint:disable-next-line: no-null-keyword\n                    // @ts-ignore\n                    this.propagateChange(null);\n                }\n            }\n        }\n    }\n}\n","<div class=\"iti iti--allow-dropdown\" [ngClass]=\"separateDialCodeClass\">\n    <div class=\"iti__flag-container\" dropdown [ngClass]=\"{ disabled: disabled }\" [isDisabled]=\"disabled\">\n        <div class=\"iti__selected-flag dropdown-toggle\" dropdownToggle>\n            <div class=\"iti__flag\" [ngClass]=\"selectedCountry.flagClass || ''\"></div>\n            <div *ngIf=\"separateDialCode\" class=\"selected-dial-code\">+{{ selectedCountry.dialCode }}</div>\n            <div class=\"iti__arrow\"></div>\n        </div>\n        <div *dropdownMenu class=\"dropdown-menu iti__dropdown-content\">\n            <div class=\"search-container\" *ngIf=\"searchCountryFlag && searchCountryField\">\n                <input id=\"country-search-box\" [(ngModel)]=\"countrySearchText\" (keyup)=\"searchCountry()\"\n                    (click)=\"$event.stopPropagation()\" [placeholder]=\"searchCountryPlaceholder\" autofocus />\n            </div>\n            <ul class=\"iti__country-list\" #countryList>\n                <li class=\"iti__country iti__preferred\" *ngFor=\"let country of preferredCountriesInDropDown\"\n                    (click)=\"onCountrySelect(country, focusable)\" [id]=\"country.htmlId + '-preferred'\">\n                    <div class=\"iti__flag-box\">\n                        <div class=\"iti__flag\" [ngClass]=\"country.flagClass\"></div>\n                    </div>\n                    <span class=\"iti__country-name\">{{ country.name }}</span>\n                    <span class=\"iti__dial-code\">+{{ country.dialCode }}</span>\n                </li>\n                <li class=\"iti__divider\" *ngIf=\"preferredCountriesInDropDown?.length\"></li>\n                <li class=\"iti__country iti__standard\" *ngFor=\"let country of allCountries\"\n                    (click)=\"onCountrySelect(country, focusable)\" [id]=\"country.htmlId\">\n                    <div class=\"iti__flag-box\">\n                        <div class=\"iti__flag\" [ngClass]=\"country.flagClass\"></div>\n                    </div>\n                    <span class=\"iti__country-name\">{{ country.name }}</span>\n                    <span class=\"iti__dial-code\">+{{ country.dialCode }}</span>\n                </li>\n            </ul>\n        </div>\n    </div>\n    <input type=\"tel\" [id]=\"inputId\" autocomplete=\"off\" class=\"iti__tel-input\" [ngClass]=\"cssClass\" (blur)=\"onTouched()\"\n        (keypress)=\"onInputKeyPress($event)\" [(ngModel)]=\"phoneNumber\" (ngModelChange)=\"onPhoneNumberChange()\"\n        [disabled]=\"disabled\" [placeholder]=\"resolvePlaceholder()\" [attr.maxLength]=\"maxLength\"\n        [attr.validation]=\"phoneValidation\" #focusable />\n</div>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'keys',\n    standalone: true,\n})\nexport class UtilsKeysPipe implements PipeTransform {\n    transform(value: any): string[] {\n        return Object.keys(value);\n    }\n}\n","export class KeyboardUtil{\n\n    static ifBackspaceOrDelete(event:KeyboardEvent){\n        return this.ifKey(event,'Backspace;Delete;Del');\n    }\n    static ifRightArrow(event:KeyboardEvent){\n        return this.ifKey(event,'ArrowRight;Right')\n    }\n    static ifLeftArrow(event:KeyboardEvent){\n        return this.ifKey(event,'ArrowLeft;Left')\n    }\n    static ifSpacebar(event:KeyboardEvent){\n        return this.ifKey(event,'Spacebar; ')//don't remove the space after ; as this will check for space key\n    }\n    static  ifKey(event:KeyboardEvent, keys:string):boolean{\n        let keysToCheck=keys.split(';');\n        return keysToCheck.some(k=> k ===event.key);\n    }\n}","import {\n    Component,\n    OnInit,\n    Input,\n    Output,\n    EventEmitter,\n    AfterViewInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { UtilsOtpInputConfig } from '../../models/opt-config.model';\nimport { UtilsKeysPipe } from '../../pipes/utils-keys.pipe';\nimport { KeyboardUtil } from '../../utils/keyboard-util';\n@Component({\n    // tslint:disable-next-line: component-selector\n    selector: 'utils-otp-input',\n    standalone: true,\n    imports: [CommonModule, ReactiveFormsModule, UtilsKeysPipe],\n    templateUrl: './utils-otp-input.component.html',\n    styleUrls: ['./utils-otp-input.component.scss'],\n})\nexport class UtilsOtpInputComponent implements OnInit, AfterViewInit {\n    @Input() config: UtilsOtpInputConfig = { length: 4 };\n    // tslint:disable-next-line: no-output-on-prefix\n    @Output() onInputChange = new EventEmitter<string>();\n    @Input() formCtrl!: FormControl;\n    otpForm!: FormGroup;\n    currentVal: string = '';\n    inputControls: FormControl[] = new Array(this.config.length);\n    componentKey =\n        Math.random().toString(36).substring(2) + new Date().getTime().toString(36);\n    get inputType() {\n        return this.config?.isPasswordInput\n            ? 'password'\n            : this.config?.allowNumbersOnly\n                ? 'tel'\n                : 'text';\n    }\n    constructor(private keysPipe: UtilsKeysPipe) { }\n\n    ngOnInit() {\n        this.otpForm = new FormGroup({});\n        for (let index = 0; index < this.config.length; index++) {\n            this.otpForm.addControl(this.getControlName(index), new FormControl());\n        }\n        this.otpForm.valueChanges.subscribe((v: object) => {\n            this.keysPipe.transform(this.otpForm.controls).forEach((k) => {\n                var val = this.otpForm.controls[k].value;\n                if (val && val.length > 1) {\n                    if (val.length >= this.config.length) {\n                        this.setValue(val);\n                    } else {\n                        this.rebuildValue();\n                    }\n                }\n            });\n        });\n    }\n\n    ngAfterViewInit(): void {\n        if (!this.config.disableAutoFocus) {\n            const containerItem = document.getElementById(`c_${this.componentKey}`);\n            if (containerItem) {\n                const ele: any = containerItem.getElementsByClassName('otp-input')[0];\n                if (ele && ele.focus) {\n                    ele.focus();\n                }\n            }\n        }\n    }\n    private getControlName(idx: number): string {\n        return `ctrl_${idx}`;\n    }\n\n    public getFormControl(key: string): FormControl {\n        return this.otpForm.controls[key] as FormControl;\n    }\n\n    onKeyDown($event: any, inputIdx: any) {\n        if (KeyboardUtil.ifSpacebar($event)) {\n            $event.preventDefault();\n            return false;\n        }\n        return true;\n    }\n    onInput($event: any) {\n        let newVal = this.currentVal\n            ? `${this.currentVal}${$event.target.value}`\n            : $event.target.value;\n        if (this.config.allowNumbersOnly && !this.validateNumber(newVal)) {\n            $event.target.value = '';\n            $event.stopPropagation();\n            $event.preventDefault();\n            return;\n        }\n    }\n\n    onKeyUp($event: any, inputIdx: number) {\n        const nextInputId = this.appendKey(`otp_${inputIdx + 1}`);\n        const prevInputId = this.appendKey(`otp_${inputIdx - 1}`);\n        if (KeyboardUtil.ifRightArrow($event)) {\n            $event.preventDefault();\n            this.setSelected(nextInputId);\n            return;\n        }\n        if (KeyboardUtil.ifLeftArrow($event)) {\n            $event.preventDefault();\n            this.setSelected(prevInputId);\n            return;\n        }\n        if (KeyboardUtil.ifBackspaceOrDelete($event) && !$event.target.value) {\n            this.setSelected(prevInputId);\n            this.rebuildValue();\n            return;\n        }\n\n        if (!$event.target.value) {\n            return;\n        }\n\n        if (this.ifValidKeyCode($event)) {\n            this.setSelected(nextInputId);\n        }\n        this.rebuildValue();\n    }\n\n    validateNumber(val: any): boolean {\n        return val && /^\\d*\\.?\\d*$/.test(val);\n    }\n\n    appendKey(id: string): string {\n        return `${id}_${this.componentKey}`;\n    }\n\n    setSelected(eleId: string) {\n        this.focusTo(eleId);\n        const ele: any = document.getElementById(eleId);\n        if (ele && ele.setSelectionRange) {\n            setTimeout(() => {\n                ele.setSelectionRange(0, 1);\n            }, 0);\n        }\n    }\n\n    ifValidKeyCode(event: any): boolean {\n        const inp = event.key;\n        const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n        return !!(\n            isMobile ||\n            /[a-zA-Z0-9-_]/.test(inp) ||\n            (this.config.allowKeyCodes &&\n                this.config.allowKeyCodes.includes(event.keyCode))\n        );\n    }\n\n    focusTo(eleId: string) {\n        const ele: any = document.getElementById(eleId);\n        if (ele) {\n            ele.focus();\n        }\n    }\n\n    // method to set component value\n    setValue(value: any) {\n        if (this.config.allowNumbersOnly && isNaN(value)) {\n            return;\n        }\n        this.otpForm.reset();\n        if (!value) {\n            this.rebuildValue();\n            return;\n        }\n        value = value.toString().replace(/\\s/g, ''); // remove whitespace\n        Array.from(value).forEach((c, idx) => {\n            const control = this.otpForm.get(this.getControlName(idx));\n            if (control) {\n                control.setValue(c);\n            }\n        });\n        if (!this.config.disableAutoFocus) {\n            const containerItem = document.getElementById(`c_${this.componentKey}`);\n            var indexOfElementToFocus =\n                value.length < this.config.length\n                    ? value.length\n                    : this.config.length - 1;\n            let ele: any = containerItem?.getElementsByClassName('otp-input')[\n                indexOfElementToFocus\n            ];\n            if (ele && ele.focus) {\n                ele.focus();\n            }\n        }\n        this.rebuildValue();\n    }\n\n    rebuildValue() {\n        let val = '';\n        this.keysPipe.transform(this.otpForm.controls).forEach((k) => {\n            if (this.otpForm.controls[k].value) {\n                let ctrlVal = this.otpForm.controls[k].value;\n                let isLengthExceed = ctrlVal.length > 1;\n                let isCaseTransformEnabled =\n                    !this.config.allowNumbersOnly &&\n                    this.config.letterCase &&\n                    (this.config.letterCase.toLocaleLowerCase() == 'upper' ||\n                        this.config.letterCase.toLocaleLowerCase() == 'lower');\n                ctrlVal = ctrlVal[0];\n                let transformedVal = isCaseTransformEnabled\n                    ? (this.config.letterCase?.toLocaleLowerCase() == 'upper'\n                        ? ctrlVal.toUpperCase()\n                        : ctrlVal.toLowerCase())\n                    : ctrlVal;\n                if (isCaseTransformEnabled && transformedVal == ctrlVal) {\n                    isCaseTransformEnabled = false;\n                } else {\n                    ctrlVal = transformedVal;\n                }\n                val += ctrlVal;\n                if (isLengthExceed || isCaseTransformEnabled) {\n                    this.otpForm.controls[k].setValue(ctrlVal);\n                }\n            }\n        });\n        if (this.formCtrl?.setValue) {\n            this.formCtrl.setValue(val);\n        }\n        this.onInputChange.emit(val);\n        this.currentVal = val;\n    }\n\n    handlePaste(e: any) {\n        // Get pasted data via clipboard API\n        let clipboardData = e.clipboardData || (window as any)['clipboardData'];\n        if (clipboardData) {\n            var pastedData = clipboardData.getData('Text');\n        }\n        // Stop data actually being pasted into div\n        e.stopPropagation();\n        e.preventDefault();\n        if (\n            !pastedData ||\n            (this.config.allowNumbersOnly && !this.validateNumber(pastedData))\n        ) {\n            return;\n        }\n        this.setValue(pastedData);\n    }\n}\n","<div class=\"ng-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\" *ngIf=\"otpForm?.controls\"\n    [ngStyle]=\"config.containerStyles\">\n    <input (paste)=\"handlePaste($event)\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\" [type]=\"inputType\"\n        [placeholder]=\"config.placeholder || ''\" [ngStyle]=\"config.inputStyles\" class=\"otp-input {{config.inputClass}}\"\n        autocomplete=\"one-time-code\" *ngFor=\"let item of otpForm?.controls | keys;let i=index\"\n        [formControl]=\"getFormControl(item)\" #inp id=\"otp_{{i}}_{{componentKey}}\" (keyup)=\"onKeyUp($event,i)\"\n        (input)=\"onInput($event)\" (keydown)=\"onKeyDown($event,i)\">\n</div>","import { EventEmitter } from '@angular/core';\nimport { UtilsPaginationInstance } from '../interfaces/pagination-instance';\n\nexport class UtilsPaginationService {\n    public change: EventEmitter<string> = new EventEmitter<string>();\n\n    private instances: { [id: string]: UtilsPaginationInstance } = {};\n    private DEFAULT_ID = 'DEFAULT_PAGINATION_ID';\n\n    public defaultId(): string {\n        return this.DEFAULT_ID;\n    }\n\n    /**\n     * Register a UtilsPaginationInstance with this service. Returns a\n     * boolean value signifying whether the instance is new or\n     * updated (true = new or updated, false = unchanged).\n     */\n    public register(instance: UtilsPaginationInstance): boolean {\n        if (instance.id == null) {\n            instance.id = this.DEFAULT_ID;\n        }\n\n        if (!this.instances[instance.id]) {\n            this.instances[instance.id] = instance;\n            return true;\n        } else {\n            return this.updateInstance(instance);\n        }\n    }\n\n    /**\n     * Check each property of the instance and update any that have changed. Return\n     * true if any changes were made, else return false.\n     */\n    private updateInstance(instance: UtilsPaginationInstance): boolean {\n        let changed = false;\n        for (let prop in this.instances[instance.id!]) {\n            if (instance[prop as keyof UtilsPaginationInstance] !== this.instances[instance.id!][prop as keyof UtilsPaginationInstance]) {\n                this.instances[instance.id!][prop as keyof UtilsPaginationInstance] = instance[prop as keyof UtilsPaginationInstance] as never;\n                changed = true;\n            }\n        }\n        return changed;\n    }\n\n    /**\n     * Returns the current page number.\n     */\n    public getCurrentPage(id: string): number {\n        if (this.instances[id]) {\n            return this.instances[id].currentPage;\n        }\n        return 1;\n    }\n\n    /**\n     * Sets the current page number.\n     */\n    public setCurrentPage(id: string, page: number) {\n        if (this.instances[id]) {\n            let instance = this.instances[id];\n            let maxPage = Math.ceil(instance.totalItems! / instance.itemsPerPage);\n            if (page <= maxPage && 1 <= page) {\n                this.instances[id].currentPage = page;\n                this.change.emit(id);\n            }\n        }\n    }\n\n    /**\n     * Sets the value of instance.totalItems\n     */\n    public setTotalItems(id: string, totalItems: number) {\n        if (this.instances[id] && 0 <= totalItems) {\n            this.instances[id].totalItems = totalItems;\n            this.change.emit(id);\n        }\n    }\n\n    /**\n     * Sets the value of instance.itemsPerPage.\n     */\n    public setItemsPerPage(id: string, itemsPerPage: number) {\n        if (this.instances[id]) {\n            this.instances[id].itemsPerPage = itemsPerPage;\n            this.change.emit(id);\n        }\n    }\n\n    /**\n     * Returns a clone of the pagination instance object matching the id. If no\n     * id specified, returns the instance corresponding to the default id.\n     */\n    public getInstance(id: string = this.DEFAULT_ID): UtilsPaginationInstance {\n        if (this.instances[id]) {\n            return this.clone(this.instances[id]);\n        }\n        return {} as UtilsPaginationInstance;\n    }\n\n    /**\n     * Perform a shallow clone of an object.\n     */\n    private clone(obj: any): any {\n        var target: any = {};\n        for (var i in obj) {\n            if (obj.hasOwnProperty(i)) {\n                target[i] = obj[i];\n            }\n        }\n        return target;\n    }\n}\n","import {\n    ChangeDetectorRef,\n    Directive,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { UtilsPaginationInstance } from '../interfaces/pagination-instance';\nimport { UtilsPaginationService } from '../services/utils-pagination.service';\n\nexport interface Page {\n    label: string;\n    value: any;\n}\n\n/**\n * This directive is what powers all pagination controls components, including the default one.\n * It exposes an API which is hooked up to the UtilsPaginationService to keep the PaginatePipe in sync\n * with the pagination controls.\n */\n@Directive({\n    selector: 'pagination-template,[pagination-template]',\n    exportAs: 'paginationApi',\n    standalone: true,\n})\nexport class UtilsPaginationControlsDirective {\n    @Input() id: string = '';\n    @Input() maxSize: number = 7;\n    @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n    @Output() pageBoundsCorrection: EventEmitter<number> =\n        new EventEmitter<number>();\n    pages: Page[] = [];\n\n    private changeSub: Subscription;\n\n    constructor(\n        private service: UtilsPaginationService,\n        private changeDetectorRef: ChangeDetectorRef\n    ) {\n        this.changeSub = this.service.change.subscribe((id) => {\n            if (this.id === id) {\n                this.updatePageLinks();\n                this.changeDetectorRef.markForCheck();\n                this.changeDetectorRef.detectChanges();\n            }\n        });\n    }\n\n    ngOnInit() {\n        if (this.id === undefined) {\n            this.id = this.service.defaultId();\n        }\n        this.updatePageLinks();\n    }\n\n    ngOnChanges(changes: any) {\n        this.updatePageLinks();\n    }\n\n    ngOnDestroy() {\n        this.changeSub.unsubscribe();\n    }\n\n    /**\n     * Go to the previous page\n     */\n    previous() {\n        this.checkValidId();\n        this.setCurrent(this.getCurrent() - 1);\n    }\n\n    /**\n     * Go to the next page\n     */\n    next() {\n        this.checkValidId();\n        this.setCurrent(this.getCurrent() + 1);\n    }\n\n    /**\n     * Returns true if current page is first page\n     */\n    isFirstPage(): boolean {\n        return this.getCurrent() === 1;\n    }\n\n    /**\n     * Returns true if current page is last page\n     */\n    isLastPage(): boolean {\n        return this.getLastPage() === this.getCurrent();\n    }\n\n    /**\n     * Set the current page number.\n     */\n    setCurrent(page: number) {\n        this.pageChange.emit(page);\n    }\n\n    /**\n     * Get the current page number.\n     */\n    getCurrent(): number {\n        return this.service.getCurrentPage(this.id);\n    }\n\n    /**\n     * Returns the last page number\n     */\n    getLastPage(): number {\n        let inst = this.service.getInstance(this.id);\n        if (!inst.totalItems || inst.totalItems < 1) {\n            // when there are 0 or fewer (an error case) items, there are no \"pages\" as such,\n            // but it makes sense to consider a single, empty page as the last page.\n            return 1;\n        }\n        return Math.ceil(inst.totalItems / inst.itemsPerPage);\n    }\n\n    getTotalItems(): number {\n        const inst = this.service.getInstance(this.id);\n        return inst.totalItems || 0;\n    }\n\n    private checkValidId() {\n        if (this.service.getInstance(this.id).id == null) {\n            console.warn(\n                `PaginationControlsDirective: the specified id \"${this.id}\" does not match any registered UtilsPaginationInstance`\n            );\n        }\n    }\n\n    /**\n     * Updates the page links and checks that the current page is valid. Should run whenever the\n     * UtilsPaginationService.change stream emits a value matching the current ID, or when any of the\n     * input values changes.\n     */\n    private updatePageLinks() {\n        let inst = this.service.getInstance(this.id);\n        const correctedCurrentPage = this.outOfBoundCorrection(inst);\n\n        if (correctedCurrentPage !== inst.currentPage) {\n            setTimeout(() => {\n                this.pageBoundsCorrection.emit(correctedCurrentPage);\n                this.pages = this.createPageArray(\n                    inst.currentPage,\n                    inst.itemsPerPage,\n                    inst.totalItems || 0,\n                    this.maxSize\n                );\n            });\n        } else {\n            this.pages = this.createPageArray(\n                inst.currentPage,\n                inst.itemsPerPage,\n                inst.totalItems || 0,\n                this.maxSize\n            );\n        }\n    }\n\n    /**\n     * Checks that the instance.currentPage property is within bounds for the current page range.\n     * If not, return a correct value for currentPage, or the current value if OK.\n     */\n    private outOfBoundCorrection(instance: UtilsPaginationInstance): number {\n        const totalItems = instance.totalItems || 0;\n        const totalPages = Math.ceil(totalItems / instance.itemsPerPage);\n        if (totalPages < instance.currentPage && 0 < totalPages) {\n            return totalPages;\n        } else if (instance.currentPage < 1) {\n            return 1;\n        }\n\n        return instance.currentPage;\n    }\n\n    /**\n     * Returns an array of Page objects to use in the pagination controls.\n     */\n    private createPageArray(\n        currentPage: number,\n        itemsPerPage: number,\n        totalItems: number,\n        paginationRange: number\n    ): Page[] {\n        // paginationRange could be a string if passed from attribute, so cast to number.\n        paginationRange = +paginationRange;\n        let pages = [];\n\n        // Return 1 as default page number\n        // Make sense to show 1 instead of empty when there are no items\n        const totalPages = Math.max(Math.ceil(totalItems / itemsPerPage), 1);\n        const halfWay = Math.ceil(paginationRange / 2);\n\n        const isStart = currentPage <= halfWay;\n        const isEnd = totalPages - halfWay < currentPage;\n        const isMiddle = !isStart && !isEnd;\n\n        let ellipsesNeeded = paginationRange < totalPages;\n        let i = 1;\n\n        while (i <= totalPages && i <= paginationRange) {\n            let label;\n            let pageNumber = this.calculatePageNumber(\n                i,\n                currentPage,\n                paginationRange,\n                totalPages\n            );\n            let openingEllipsesNeeded = i === 2 && (isMiddle || isEnd);\n            let closingEllipsesNeeded =\n                i === paginationRange - 1 && (isMiddle || isStart);\n            if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) {\n                label = '...';\n            } else {\n                label = pageNumber;\n            }\n            pages.push({\n                label: String(label),\n                value: pageNumber,\n            });\n            i++;\n        }\n        return pages;\n    }\n\n    /**\n     * Given the position in the sequence of pagination links [i],\n     * figure out what page number corresponds to that position.\n     */\n    private calculatePageNumber(\n        i: number,\n        currentPage: number,\n        paginationRange: number,\n        totalPages: number\n    ) {\n        let halfWay = Math.ceil(paginationRange / 2);\n        if (i === paginationRange) {\n            return totalPages;\n        } else if (i === 1) {\n            return i;\n        } else if (paginationRange < totalPages) {\n            if (totalPages - halfWay < currentPage) {\n                return totalPages - paginationRange + i;\n            } else if (halfWay < currentPage) {\n                return currentPage - halfWay + i;\n            } else {\n                return i;\n            }\n        } else {\n            return i;\n        }\n    }\n}\n","import {\n    Component,\n    Input,\n    Output,\n    EventEmitter,\n    ChangeDetectionStrategy,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { UtilsPaginationControlsDirective } from '../../directives/utils-pagination.directive';\n\nfunction coerceToBoolean(input: string | boolean): boolean {\n    return !!input && input !== 'false';\n}\n\n/**\n * The default pagination controls component. Actually just a default implementation of a custom template.\n */\n@Component({\n    selector: 'utils-pagination',\n    standalone: true,\n    imports: [CommonModule, UtilsPaginationControlsDirective],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA],\n    templateUrl: './utils-pagination.component.html',\n    styleUrls: ['./utils-pagination.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n})\nexport class UtilsPaginationComponent {\n    @Input() id: string = '';\n    @Input() maxSize: number = 7;\n    @Input()\n    get directionLinks(): boolean {\n        return this._directionLinks;\n    }\n    set directionLinks(value: boolean) {\n        this._directionLinks = coerceToBoolean(value);\n    }\n    @Input()\n    get autoHide(): boolean {\n        return this._autoHide;\n    }\n    set autoHide(value: boolean) {\n        this._autoHide = coerceToBoolean(value);\n    }\n    @Input()\n    get responsive(): boolean {\n        return this._responsive;\n    }\n    set responsive(value: boolean) {\n        this._responsive = coerceToBoolean(value);\n    }\n    @Input() previousLabel: string = 'Previous';\n    @Input() nextLabel: string = 'Next';\n    @Input() screenReaderPaginationLabel: string = 'Pagination';\n    @Input() screenReaderPageLabel: string = 'page';\n    @Input() screenReaderCurrentLabel: string = `You're on page`;\n    @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n    @Output() pageBoundsCorrection: EventEmitter<number> =\n        new EventEmitter<number>();\n\n    private _directionLinks: boolean = true;\n    private _autoHide: boolean = false;\n    private _responsive: boolean = false;\n\n    trackByIndex(index: number) {\n        return index;\n    }\n}\n","<pagination-template #p=\"paginationApi\" [id]=\"id\" [maxSize]=\"maxSize\" (pageChange)=\"pageChange.emit($event)\"\n  (pageBoundsCorrection)=\"pageBoundsCorrection.emit($event)\">\n  <nav role=\"navigation\" [attr.aria-label]=\"screenReaderPaginationLabel\">\n    <ul class=\"ngx-pagination\" [class.responsive]=\"responsive\" *ngIf=\"!(autoHide && p.pages.length <= 1)\">\n\n      <li class=\"pagination-previous\" [class.disabled]=\"p.isFirstPage()\" *ngIf=\"directionLinks\">\n        <a tabindex=\"0\" *ngIf=\"1 < p.getCurrent()\" (keyup.enter)=\"p.previous()\" (click)=\"p.previous()\">\n          {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n        </a>\n        <span *ngIf=\"p.isFirstPage()\" aria-disabled=\"true\">\n          {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n        </span>\n      </li>\n\n      <li class=\"small-screen\">\n        {{ p.getCurrent() }} / {{ p.getLastPage() }}\n      </li>\n\n      <li [class.current]=\"p.getCurrent() === page.value\" [class.ellipsis]=\"page.label === '...'\"\n        *ngFor=\"let page of p.pages; trackBy: trackByIndex\">\n        <a tabindex=\"0\" (keyup.enter)=\"p.setCurrent(page.value)\" (click)=\"p.setCurrent(page.value)\"\n          *ngIf=\"p.getCurrent() !== page.value\">\n          <span class=\"show-for-sr\">{{ screenReaderPageLabel }} </span>\n          <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span>\n        </a>\n        <ng-container *ngIf=\"p.getCurrent() === page.value\">\n          <span aria-live=\"polite\">\n            <span class=\"show-for-sr\">{{ screenReaderCurrentLabel }} </span>\n            <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span>\n          </span>\n        </ng-container>\n      </li>\n\n      <li class=\"pagination-next\" [class.disabled]=\"p.isLastPage()\" *ngIf=\"directionLinks\">\n        <a tabindex=\"0\" *ngIf=\"!p.isLastPage()\" (keyup.enter)=\"p.next()\" (click)=\"p.next()\">\n          {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n        </a>\n        <span *ngIf=\"p.isLastPage()\" aria-disabled=\"true\">\n          {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n        </span>\n      </li>\n\n    </ul>\n  </nav>\n</pagination-template>","import { InjectionToken } from '@angular/core';\n\nexport interface UtilsSpinnerConfig {\n    type: string;\n}\n\nexport const UTILS_SPINNER_CONFIG = new InjectionToken<UtilsSpinnerConfig>(\n    'UTILS_SPINNER_CONFIG'\n);\n","export type Size = 'small' | 'medium' | 'large';\nexport const LOADERS: { [key: string]: number } = {\n    'ball-8bits': 16,\n    'ball-atom': 4,\n    'ball-beat': 3,\n    'ball-circus': 5,\n    'ball-climbing-dot': 4,\n    'ball-clip-rotate': 1,\n    'ball-clip-rotate-multiple': 2,\n    'ball-clip-rotate-pulse': 2,\n    'ball-elastic-dots': 5,\n    'ball-fall': 3,\n    'ball-fussion': 4,\n    'ball-grid-beat': 9,\n    'ball-grid-pulse': 9,\n    'ball-newton-cradle': 4,\n    'ball-pulse': 3,\n    'ball-pulse-rise': 5,\n    'ball-pulse-sync': 3,\n    'ball-rotate': 1,\n    'ball-running-dots': 5,\n    'ball-scale': 1,\n    'ball-scale-multiple': 3,\n    'ball-scale-pulse': 2,\n    'ball-scale-ripple': 1,\n    'ball-scale-ripple-multiple': 3,\n    'ball-spin': 8,\n    'ball-spin-clockwise': 8,\n    'ball-spin-clockwise-fade': 8,\n    'ball-spin-clockwise-fade-rotating': 8,\n    'ball-spin-fade': 8,\n    'ball-spin-fade-rotating': 8,\n    'ball-spin-rotate': 2,\n    'ball-square-clockwise-spin': 8,\n    'ball-square-spin': 8,\n    'ball-triangle-path': 3,\n    'ball-zig-zag': 2,\n    'ball-zig-zag-deflect': 2,\n    cog: 1,\n    'cube-transition': 2,\n    fire: 3,\n    'line-scale': 5,\n    'line-scale-party': 5,\n    'line-scale-pulse-out': 5,\n    'line-scale-pulse-out-rapid': 5,\n    'line-spin-clockwise-fade': 8,\n    'line-spin-clockwise-fade-rotating': 8,\n    'line-spin-fade': 8,\n    'line-spin-fade-rotating': 8,\n    pacman: 6,\n    'square-jelly-box': 2,\n    'square-loader': 1,\n    'square-spin': 1,\n    timer: 1,\n    'triangle-skew-spin': 1,\n};\n\nexport type LoaderType =\n    | 'ball-8bits'\n    | 'ball-atom'\n    | 'ball-beat'\n    | 'ball-circus'\n    | 'ball-climbing-dot'\n    | 'ball-clip-rotate'\n    | 'ball-clip-rotate-multiple'\n    | 'ball-clip-rotate-pulse'\n    | 'ball-elastic-dots'\n    | 'ball-fall'\n    | 'ball-fussion'\n    | 'ball-grid-beat'\n    | 'ball-grid-pulse'\n    | 'ball-newton-cradle'\n    | 'ball-pulse'\n    | 'ball-pulse-rise'\n    | 'ball-pulse-sync'\n    | 'ball-rotate'\n    | 'ball-running-dots'\n    | 'ball-scale'\n    | 'ball-scale-multiple'\n    | 'ball-scale-pulse'\n    | 'ball-scale-ripple'\n    | 'ball-scale-ripple-multiple'\n    | 'ball-spin'\n    | 'ball-spin-clockwise'\n    | 'ball-spin-clockwise-fade'\n    | 'ball-spin-clockwise-fade-rotating'\n    | 'ball-spin-fade'\n    | 'ball-spin-fade-rotating'\n    | 'ball-spin-rotate'\n    | 'ball-square-clockwise-spin'\n    | 'ball-square-spin'\n    | 'ball-triangle-path'\n    | 'ball-zig-zag'\n    | 'ball-zig-zag-deflect'\n    | 'cog'\n    | 'cube-transition'\n    | 'fire'\n    | 'line-scale'\n    | 'line-scale-party'\n    | 'line-scale-pulse-out'\n    | 'line-scale-pulse-out-rapid'\n    | 'line-spin-clockwise-fade'\n    | 'line-spin-clockwise-fade-rotating'\n    | 'line-spin-fade'\n    | 'line-spin-fade-rotating'\n    | 'pacman'\n    | 'square-jelly-box'\n    | 'square-loader'\n    | 'square-spin'\n    | 'timer'\n    | 'triangle-skew-spin';\n\nexport const DEFAULTS = {\n    BD_COLOR: 'rgba(51,51,51,0.8)',\n    SPINNER_COLOR: '#fff',\n    Z_INDEX: 99999,\n};\n\nexport const PRIMARY_SPINNER = 'primary';\n\nexport interface Spinner {\n    name?: string;\n    bdColor?: string;\n    size: Size;\n    color?: string;\n    type: LoaderType;\n    class?: string;\n    divCount?: number;\n    divArray?: number[];\n    fullScreen?: boolean;\n    show?: boolean;\n    zIndex?: number;\n    template?: string | undefined;\n    showSpinner?: boolean;\n}\n\nexport class UtilSpinner {\n    name: string = 'primary';\n    bdColor: string = 'rgba(0, 0, 0, 0.8)';\n    size: Size = 'large';\n    color: string = '#fff';\n    type: LoaderType = 'ball-clip-rotate-pulse';\n    class: string = 'la-3x';\n    divCount?: number;\n    divArray?: number[];\n    fullScreen: boolean = true;\n    show: boolean = false;\n    zIndex: number = 99999;\n    template?: string | undefined;\n    showSpinner: boolean = false;\n\n    constructor(init?: Partial<UtilSpinner>) {\n        Object.assign(this, init);\n    }\n\n    static create(init?: Partial<UtilSpinner>): UtilSpinner {\n        return new UtilSpinner(init);\n    }\n}","import { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'safeHtml',\n    standalone: true,\n})\nexport class UtilsSafeHtmlPipe implements PipeTransform {\n    constructor(private _sanitizer: DomSanitizer) { }\n\n    transform(v: string): SafeHtml | any {\n        if (v) {\n            return this._sanitizer.bypassSecurityTrustHtml(v);\n        }\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n    PRIMARY_SPINNER,\n    Spinner,\n    UtilSpinner,\n} from '../enums/utils-spinner.enum';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class UtilsSpinnerService {\n    /**\n     * Spinner observable\n     *\n     * @memberof UtilsSpinnerService\n     */\n    // private spinnerObservable = new ReplaySubject<NgxSpinner>(1);\n    public spinnerObservable = new BehaviorSubject<UtilSpinner | null>(null);\n    /**\n     * Creates an instance of UtilsSpinnerService.\n     * @memberof UtilsSpinnerService\n     */\n    constructor() { }\n    /**\n     * Get subscription of desired spinner\n     * @memberof UtilsSpinnerService\n     **/\n    getSpinner(name: string): Observable<UtilSpinner> {\n        return this.spinnerObservable\n            .asObservable()\n            .pipe(filter((x: UtilSpinner | null): x is UtilSpinner => x !== null && x.name === name));\n    }\n    /**\n     * To show spinner\n     *\n     * @memberof UtilsSpinnerService\n     */\n    show(name: string = PRIMARY_SPINNER, spinner?: Spinner) {\n        return new Promise((resolve, _reject) => {\n            setTimeout(() => {\n                if (spinner && Object.keys(spinner).length) {\n                    this.spinnerObservable.next(\n                        new UtilSpinner({ ...spinner, name, show: true })\n                    );\n                    resolve(true);\n                } else {\n                    this.spinnerObservable.next(new UtilSpinner({ name, show: true }));\n                    resolve(true);\n                }\n            }, 10);\n        });\n    }\n    /**\n     * To hide spinner\n     *\n     * @memberof UtilsSpinnerService\n     */\n    hide(name: string = PRIMARY_SPINNER, debounce: number = 10) {\n        return new Promise((resolve, _reject) => {\n            setTimeout(() => {\n                this.spinnerObservable.next(new UtilSpinner({ name, show: false }));\n                resolve(true);\n            }, debounce);\n        });\n    }\n}\n","import {\n    Component,\n    OnDestroy,\n    Input,\n    OnInit,\n    OnChanges,\n    SimpleChange,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    HostListener,\n    ViewChild,\n    ElementRef,\n    Optional,\n    Inject,\n    Injectable,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { from, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport {\n    trigger,\n    state,\n    style,\n    transition,\n    animate,\n} from '@angular/animations';\nimport {\n    UtilsSpinnerConfig,\n    UTILS_SPINNER_CONFIG,\n} from '../../interfaces/utils-spinner-config';\nimport {\n    Size,\n    DEFAULTS,\n    PRIMARY_SPINNER,\n    LOADERS,\n    UtilSpinner,\n    LoaderType,\n} from '../../enums/utils-spinner.enum';\nimport { UtilsSpinnerService } from '../../services/utils-spinner.service';\nimport { UtilsSafeHtmlPipe } from '../../pipes/utils-safe-html.pipe';\n\n@Component({\n    selector: 'utils-spinner',\n    standalone: true,\n    imports: [CommonModule, UtilsSafeHtmlPipe],\n    templateUrl: './utils-spinner.component.html',\n    styleUrls: [\n        './utils-spinner.component.scss',\n        './animations/ball-8bits.css',\n        './animations/ball-atom.css',\n        './animations/ball-beat.css',\n        './animations/ball-circus.css',\n        './animations/ball-climbing-dot.css',\n        './animations/ball-clip-rotate-multiple.css',\n        './animations/ball-clip-rotate-pulse.css',\n        './animations/ball-clip-rotate.css',\n        './animations/ball-elastic-dots.css',\n        './animations/ball-fall.css',\n        './animations/ball-fussion.css',\n        './animations/ball-grid-beat.css',\n        './animations/ball-grid-pulse.css',\n        './animations/ball-newton-cradle.css',\n        './animations/ball-pulse-rise.css',\n        './animations/ball-pulse-sync.css',\n        './animations/ball-pulse.css',\n        './animations/ball-rotate.css',\n        './animations/ball-running-dots.css',\n        './animations/ball-scale-multiple.css',\n        './animations/ball-scale-pulse.css',\n        './animations/ball-scale-ripple-multiple.css',\n        './animations/ball-scale-ripple.css',\n        './animations/ball-scale.css',\n        './animations/ball-spin-clockwise-fade-rotating.css',\n        './animations/ball-spin-clockwise-fade.css',\n        './animations/ball-spin-clockwise.css',\n        './animations/ball-spin-fade-rotating.css',\n        './animations/ball-spin-fade.css',\n        './animations/ball-spin-rotate.css',\n        './animations/ball-spin.css',\n        './animations/ball-square-clockwise-spin.css',\n        './animations/ball-square-spin.css',\n        './animations/ball-triangle-path.css',\n        './animations/ball-zig-zag-deflect.css',\n        './animations/ball-zig-zag.css',\n        './animations/cog.css',\n        './animations/cube-transition.css',\n        './animations/fire.css',\n        './animations/line-scale-party.css',\n        './animations/line-scale-pulse-out-rapid.css',\n        './animations/line-scale-pulse-out.css',\n        './animations/line-scale.css',\n        './animations/line-spin-clockwise-fade-rotating.css',\n        './animations/line-spin-clockwise-fade.css',\n        './animations/line-spin-fade-rotating.css',\n        './animations/line-spin-fade.css',\n        './animations/pacman.css',\n        './animations/square-jelly-box.css',\n        './animations/square-loader.css',\n        './animations/square-spin.css',\n        './animations/timer.css',\n        './animations/triangle-skew-spin.css',\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: [\n        trigger('fadeIn', [\n            state('in', style({ opacity: 1 })),\n            transition(':enter', [style({ opacity: 0 }), animate(300)]),\n            transition(':leave', animate(200, style({ opacity: 0 }))),\n        ]),\n    ],\n})\n\nexport class UtilsSpinnerComponent implements OnDestroy, OnInit, OnChanges {\n    /**\n     * To set backdrop color\n     * Only supports RGBA color format\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() bdColor: string;\n    /**\n     * To set spinner size\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() size: Size;\n    /**\n     * To set spinner color(DEFAULTS.SPINNER_COLOR)\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() color: string;\n    /**\n     * To set type of spinner\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() type: LoaderType = 'ball-scale-multiple';\n    /**\n     * To toggle fullscreen mode\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() fullScreen: boolean;\n    /**\n     * Spinner name\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() name: string = PRIMARY_SPINNER;\n    /**\n     * z-index value\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() zIndex: number;\n    /**\n     * Custom template for spinner/loader\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() template?: string;\n    /**\n     * Show/Hide the spinner\n     *\n     * @type {boolean}\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() showSpinner: boolean = false;\n\n    /**\n     * To enable/disable animation\n     *\n     * @type {boolean}\n     * @memberof NgxSpinnerComponent\n     */\n    @Input() disableAnimation: boolean = false;\n    /**\n     * Spinner Object\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    spinner: UtilSpinner = new UtilSpinner({\n        size: 'large' as Size,\n        type: 'ball-clip-rotate-pulse' as LoaderType,\n    });\n    /**\n     * Array for spinner's div\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    divArray: Array<number>;\n    /**\n     * Counter for div\n     *\n     * @memberof NgxSpinnerComponent\n     *\n     */\n    divCount: number;\n    /**\n     * Show spinner\n     *\n     * @memberof NgxSpinnerComponent\n     **/\n    show: boolean = false;\n    /**\n     * Unsubscribe from spinner's observable\n     *\n     * @memberof NgxSpinnerComponent\n     **/\n    ngUnsubscribe: Subject<void> = new Subject();\n    /**\n     * Element Reference\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    @ViewChild('overlay') spinnerDOM!: { nativeElement: any };\n\n    @HostListener('document:keydown', ['$event'])\n    handleKeyboardEvent(event: KeyboardEvent) {\n        if (this.spinnerDOM && this.spinnerDOM.nativeElement) {\n            if (\n                this.fullScreen ||\n                (!this.fullScreen && this.isSpinnerZone(event.target))\n            ) {\n                event.preventDefault();\n            }\n        }\n    }\n\n    /**\n     * Creates an instance of NgxSpinnerComponent.\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    constructor(\n        private spinnerService: UtilsSpinnerService,\n        private changeDetector: ChangeDetectorRef,\n        private elementRef: ElementRef,\n        @Optional()\n        @Inject(UTILS_SPINNER_CONFIG)\n        private globalConfig: UtilsSpinnerConfig\n    ) {\n        this.bdColor = DEFAULTS.BD_COLOR;\n        this.zIndex = DEFAULTS.Z_INDEX;\n        this.color = DEFAULTS.SPINNER_COLOR;\n        this.size = 'large';\n        this.fullScreen = true;\n        this.name = PRIMARY_SPINNER;\n        this.template = undefined;\n        this.showSpinner = false;\n\n        this.divArray = [];\n        this.divCount = 0;\n        this.show = false;\n    }\n\n    initObservable() {\n        this.spinnerService\n            .getSpinner(this.name)\n            .pipe(takeUntil(this.ngUnsubscribe))\n            .subscribe((spinner: UtilSpinner) => {\n                // Solo actualizamos si el spinner tiene el mismo nombre\n                if (spinner && spinner.name === this.name) {\n                    this.setDefaultOptions();\n                    Object.assign(this.spinner, spinner);\n                    if (spinner.show) {\n                        this.onInputChange();\n                    }\n                    this.changeDetector.detectChanges();\n                }\n            });\n    }\n\n    /**\n     * Initialization method\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    ngOnInit() {\n        if (!this.name || this.name.trim() === '') {\n            this.name = PRIMARY_SPINNER;\n        }\n\n        this.setDefaultOptions();\n        this.initObservable();\n\n        // Forzar que el spinner comience oculto\n        this.spinner.show = false;\n        this.show = false;\n        this.changeDetector.detectChanges();\n    }\n\n    /**\n     * To check event triggers inside the Spinner Zone\n     *\n     * @param {*} element\n     * @returns {boolean}\n     * @memberof NgxSpinnerComponent\n     */\n    isSpinnerZone(element: any): boolean {\n        if (element === this.elementRef.nativeElement.parentElement) {\n            return true;\n        }\n        return element.parentNode && this.isSpinnerZone(element.parentNode);\n    }\n\n    /**\n     * To set default ngx-spinner options\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    setDefaultOptions = () => {\n        const { type } = this.globalConfig ?? {};\n\n        if (!this.name || this.name.trim() === '') {\n            this.name = PRIMARY_SPINNER;\n        }\n\n        this.spinner = UtilSpinner.create({\n            name: this.name,\n            bdColor: this.bdColor,\n            size: this.size,\n            color: this.color,\n            type: this.type ?? type,\n            fullScreen: this.fullScreen,\n            divArray: this.divArray,\n            divCount: this.divCount,\n            show: false, // Siempre inicializar como oculto\n            zIndex: this.zIndex,\n            template: this.template,\n            showSpinner: this.showSpinner,\n        });\n    };\n\n    /**\n     * On changes event for input variables\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    ngOnChanges(changes: { [propKey: string]: SimpleChange }) {\n        for (const propName in changes) {\n            if (propName) {\n                const changedProp = changes[propName];\n                if (changedProp.isFirstChange()) {\n                    return;\n                } else if (\n                    typeof changedProp.currentValue !== 'undefined' &&\n                    changedProp.currentValue !== changedProp.previousValue\n                ) {\n                    if (changedProp.currentValue !== '') {\n                        // Utilizar un enfoque seguro para asignar propiedades\n                        this.assignSpinnerProperty(propName, changedProp.currentValue);\n\n                        if (propName === 'showSpinner') {\n                            if (changedProp.currentValue) {\n                                this.spinnerService.show(this.spinner.name, this.spinner);\n                            } else {\n                                this.spinnerService.hide(this.spinner.name);\n                            }\n                        }\n\n                        if (propName === 'name') {\n                            this.initObservable();\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * To get class for spinner\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    getClass(type: string, size: Size): string {\n        // Usar la aserción de tipo para indicar que 'type' es una clave válida para LOADERS\n        let divCount = LOADERS[type as keyof typeof LOADERS] || 0;\n        this.spinner.divCount = divCount;\n        this.spinner.divArray = Array(this.spinner.divCount)\n            .fill(0)\n            .map((_, i) => i);\n        let sizeClass = '';\n        switch (size) {\n            case 'small':\n                sizeClass = 'la-sm';\n                break;\n            case 'medium':\n                sizeClass = 'la-2x';\n                break;\n            case 'large':\n                sizeClass = 'la-3x';\n                break;\n            default:\n                break;\n        }\n        return 'la-' + type + ' ' + sizeClass;\n    }\n\n    /**\n     * Check if input variables have changed\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    onInputChange() {\n        this.spinner.class = this.getClass(this.spinner.type, this.spinner.size);\n        this.show = this.spinner.show || false;\n    }\n\n    /**\n     * Component destroy event\n     *\n     * @memberof NgxSpinnerComponent\n     */\n    ngOnDestroy() {\n        this.ngUnsubscribe.next();\n        this.ngUnsubscribe.complete();\n    }\n\n    /**\n     * Método auxiliar para asignar propiedades al spinner de forma segura para TypeScript\n     * @param propName Nombre de la propiedad\n     * @param value Valor a asignar\n     */\n    private assignSpinnerProperty(propName: string, value: any): void {\n        // Asignar de forma segura las propiedades conocidas\n        switch (propName) {\n            case 'name':\n                this.spinner.name = value;\n                break;\n            case 'bdColor':\n                this.spinner.bdColor = value;\n                break;\n            case 'size':\n                this.spinner.size = value;\n                break;\n            case 'color':\n                this.spinner.color = value;\n                break;\n            case 'type':\n                this.spinner.type = value;\n                break;\n            case 'fullScreen':\n                this.spinner.fullScreen = value;\n                break;\n            case 'zIndex':\n                this.spinner.zIndex = value;\n                break;\n            case 'template':\n                this.spinner.template = value;\n                break;\n            case 'showSpinner':\n                this.spinner.showSpinner = value;\n                break;\n            case 'show':\n                this.spinner.show = value;\n                break;\n            default:\n                console.warn(`Propiedad desconocida: ${propName}`);\n                break;\n        }\n    }\n}\n","@if(spinner.show) {\n<div [@.disabled]=\"disableAnimation\" [@fadeIn]=\"'in'\" class=\"ngx-spinner-overlay\"\n    [style.background-color]=\"spinner.bdColor\" [style.z-index]=\"spinner.zIndex\"\n    [style.position]=\"spinner.fullScreen ? 'fixed' : 'absolute'\" #overlay>\n\n    @if(!template) {\n    <div [class]=\"spinner.class\" [style.color]=\"spinner.color\">\n        @for(index of spinner.divArray; track index) {\n        <div></div>\n        }\n    </div>\n    }\n\n    @if(template) {\n    <div [innerHTML]=\"template | safeHtml\"></div>\n    }\n\n    <div class=\"loading-text\" [style.z-index]=\"spinner.zIndex\">\n        <ng-content></ng-content>\n    </div>\n</div>\n}","import { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from '../components/utils-toastr/overlay/overlay-ref';\n\n/**\n * Reference to a toast opened via the Toastr service.\n */\nexport class ToastRef<T> {\n  /** The instance of component opened into the toast. */\n  componentInstance!: T;\n\n  /** Count of duplicates of this toast */\n  private duplicatesCount = 0;\n\n  /** Subject for notifying the user that the toast has finished closing. */\n  private _afterClosed = new Subject<void>();\n  /** triggered when toast is activated */\n  private _activate = new Subject<void>();\n  /** notifies the toast that it should close before the timeout */\n  private _manualClose = new Subject<void>();\n  /** notifies the toast that it should reset the timeouts */\n  private _resetTimeout = new Subject<void>();\n  /** notifies the toast that it should count a duplicate toast */\n  private _countDuplicate = new Subject<number>();\n\n  constructor(private _overlayRef: OverlayRef) {}\n\n  manualClose() {\n    this._manualClose.next();\n    this._manualClose.complete();\n  }\n\n  manualClosed(): Observable<any> {\n    return this._manualClose.asObservable();\n  }\n\n  timeoutReset(): Observable<any> {\n    return this._resetTimeout.asObservable();\n  }\n\n  countDuplicate(): Observable<number> {\n    return this._countDuplicate.asObservable();\n  }\n\n  /**\n   * Close the toast.\n   */\n  close(): void {\n    this._overlayRef.detach();\n    this._afterClosed.next();\n    this._manualClose.next();\n    this._afterClosed.complete();\n    this._manualClose.complete();\n    this._activate.complete();\n    this._resetTimeout.complete();\n    this._countDuplicate.complete();\n  }\n\n  /** Gets an observable that is notified when the toast is finished closing. */\n  afterClosed(): Observable<any> {\n    return this._afterClosed.asObservable();\n  }\n\n  isInactive() {\n    return this._activate.isStopped;\n  }\n\n  activate() {\n    this._activate.next();\n    this._activate.complete();\n  }\n\n  /** Gets an observable that is notified when the toast has started opening. */\n  afterActivate(): Observable<any> {\n    return this._activate.asObservable();\n  }\n\n  /** Reset the toast timouts and count duplicates */\n  onDuplicate(resetTimeout: boolean, countDuplicate: boolean) {\n    if (resetTimeout) {\n      this._resetTimeout.next();\n    }\n    if (countDuplicate) {\n      this._countDuplicate.next(++this.duplicatesCount);\n    }\n  }\n}\nexport const DEFAULT_STYLES = `\n.toast-center-center {\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n.toast-top-center {\n  top: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-bottom-center {\n  bottom: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-top-full-width {\n  top: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-bottom-full-width {\n  bottom: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-top-left {\n  top: 12px;\n  left: 12px;\n}\n.toast-top-right {\n  top: 12px;\n  right: 12px;\n}\n.toast-bottom-right {\n  right: 12px;\n  bottom: 12px;\n}\n.toast-bottom-left {\n  bottom: 12px;\n  left: 12px;\n}\n\n/* toast styles */\n.toast-title {\n  font-weight: bold;\n}\n.toast-message {\n  word-wrap: break-word;\n}\n.toast-message a,\n.toast-message label {\n  color: #ffffff;\n}\n.toast-message a:hover {\n  color: #cccccc;\n  text-decoration: none;\n}\n.toast-close-button {\n  position: relative;\n  right: -0.3em;\n  top: -0.3em;\n  float: right;\n  font-size: 20px;\n  font-weight: bold;\n  color: #ffffff;\n  text-shadow: 0 1px 0 #ffffff;\n  /* opacity: 0.8; */\n}\n.toast-close-button:hover,\n.toast-close-button:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.4;\n}\nbutton.toast-close-button {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.toast-container {\n  pointer-events: none;\n  position: fixed;\n  z-index: 999999;\n}\n.toast-container * {\n  box-sizing: border-box;\n}\n.toast-container .ngx-toastr {\n  position: relative;\n  overflow: hidden;\n  margin: 0 0 6px;\n  padding: 15px 15px 15px 50px;\n  width: 300px;\n  border-radius: 3px 3px 3px 3px;\n  background-position: 15px center;\n  background-repeat: no-repeat;\n  background-size: 24px;\n  box-shadow: 0 0 12px #999999;\n  color: #ffffff;\n}\n.toast-container .ngx-toastr:hover {\n  box-shadow: 0 0 12px #000000;\n  opacity: 1;\n  cursor: pointer;\n}\n.toast-info {\n  background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTI1NiA4QzExOS4wNDMgOCA4IDExOS4wODMgOCAyNTZjMCAxMzYuOTk3IDExMS4wNDMgMjQ4IDI0OCAyNDhzMjQ4LTExMS4wMDMgMjQ4LTI0OEM1MDQgMTE5LjA4MyAzOTIuOTU3IDggMjU2IDh6bTAgMTEwYzIzLjE5NiAwIDQyIDE4LjgwNCA0MiA0MnMtMTguODA0IDQyLTQyIDQyLTQyLTE4LjgwNC00Mi00MiAxOC44MDQtNDIgNDItNDJ6bTU2IDI1NGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC04OGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxMnYtNjRoLTEyYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDY0YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MTAwaDEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjR6Jy8+PC9zdmc+\");\n}\n.toast-error {\n  background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTI1NiA4QzExOSA4IDggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDh6bTEyMS42IDMxMy4xYzQuNyA0LjcgNC43IDEyLjMgMCAxN0wzMzggMzc3LjZjLTQuNyA0LjctMTIuMyA0LjctMTcgMEwyNTYgMzEybC02NS4xIDY1LjZjLTQuNyA0LjctMTIuMyA0LjctMTcgMEwxMzQuNCAzMzhjLTQuNy00LjctNC43LTEyLjMgMC0xN2w2NS42LTY1LTY1LjYtNjUuMWMtNC43LTQuNy00LjctMTIuMyAwLTE3bDM5LjYtMzkuNmM0LjctNC43IDEyLjMtNC43IDE3IDBsNjUgNjUuNyA2NS4xLTY1LjZjNC43LTQuNyAxMi4zLTQuNyAxNyAwbDM5LjYgMzkuNmM0LjcgNC43IDQuNyAxMi4zIDAgMTdMMzEyIDI1Nmw2NS42IDY1LjF6Jy8+PC9zdmc+\");\n}\n.toast-success {\n  background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTE3My44OTggNDM5LjQwNGwtMTY2LjQtMTY2LjRjLTkuOTk3LTkuOTk3LTkuOTk3LTI2LjIwNiAwLTM2LjIwNGwzNi4yMDMtMzYuMjA0YzkuOTk3LTkuOTk4IDI2LjIwNy05Ljk5OCAzNi4yMDQgMEwxOTIgMzEyLjY5IDQzMi4wOTUgNzIuNTk2YzkuOTk3LTkuOTk3IDI2LjIwNy05Ljk5NyAzNi4yMDQgMGwzNi4yMDMgMzYuMjA0YzkuOTk3IDkuOTk3IDkuOTk3IDI2LjIwNiAwIDM2LjIwNGwtMjk0LjQgMjk0LjQwMWMtOS45OTggOS45OTctMjYuMjA3IDkuOTk3LTM2LjIwNC0uMDAxeicvPjwvc3ZnPg==\");\n}\n.toast-warning {\n  background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NzYgNTEyJyB3aWR0aD0nNTc2JyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDZsNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eicvPjwvc3ZnPg==\");\n}\n.toast-container.toast-top-center .ngx-toastr,\n.toast-container.toast-bottom-center .ngx-toastr {\n  width: 300px;\n  margin-left: auto;\n  margin-right: auto;\n}\n.toast-container.toast-top-full-width .ngx-toastr,\n.toast-container.toast-bottom-full-width .ngx-toastr {\n  width: 96%;\n  margin-left: auto;\n  margin-right: auto;\n}\n.ngx-toastr {\n  background-color: #030303;\n  pointer-events: auto;\n}\n.toast-success {\n  background-color: #51a351;\n}\n.toast-error {\n  background-color: #bd362f;\n}\n.toast-info {\n  background-color: #2f96b4;\n}\n.toast-warning {\n  background-color: #f89406;\n}\n.toast-progress {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  height: 4px;\n  background-color: #000000;\n  opacity: 0.4;\n}\n\n@media all and (max-width: 240px) {\n  .toast-container .ngx-toastr.div {\n    padding: 8px 8px 8px 50px;\n    width: 11em;\n  }\n  .toast-container .toast-close-button {\n    right: -0.2em;\n    top: -0.2em;\n  }\n}\n@media all and (min-width: 241px) and (max-width: 480px) {\n  .toast-container .ngx-toastr.div {\n    padding: 8px 8px 8px 50px;\n    width: 18em;\n  }\n  .toast-container .toast-close-button {\n    right: -0.2em;\n    top: -0.2em;\n  }\n}\n@media all and (min-width: 481px) and (max-width: 768px) {\n  .toast-container .ngx-toastr.div {\n    padding: 15px 15px 15px 50px;\n    width: 25em;\n  }\n}\n  `;\n","import {\n  ComponentRef,\n  Injector,\n  ViewContainerRef\n} from '@angular/core';\n\nexport interface ComponentType<T> {\n  // eslint-disable-next-line @typescript-eslint/prefer-function-type\n  new (...args: any[]): T;\n}\n\n\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nexport class ComponentPortal<T> {\n  private _attachedHost?: BasePortalHost;\n  /** The type of the component that will be instantiated for attachment. */\n  component: ComponentType<T>;\n\n  /**\n   * [Optional] Where the attached component should live in Angular's *logical* component tree.\n   * This is different from where the component *renders*, which is determined by the PortalHost.\n   * The origin necessary when the host is outside of the Angular application context.\n   */\n  viewContainerRef!: ViewContainerRef;\n\n  /** Injector used for the instantiation of the component. */\n  injector: Injector;\n\n  constructor(component: ComponentType<T>, injector: Injector) {\n    this.component = component;\n    this.injector = injector;\n  }\n\n  /** Attach this portal to a host. */\n  attach(host: BasePortalHost, newestOnTop: boolean): ComponentRef<any> {\n    this._attachedHost = host;\n    return host.attach(this, newestOnTop);\n  }\n\n  /** Detach this portal from its host */\n  detach() {\n    const host = this._attachedHost;\n    if (host) {\n      this._attachedHost = undefined;\n      return host.detach();\n    }\n  }\n\n  /** Whether this portal is attached to a host. */\n  get isAttached(): boolean {\n    return this._attachedHost != null;\n  }\n\n  /**\n   * Sets the PortalHost reference without performing `attach()`. This is used directly by\n   * the PortalHost when it is performing an `attach()` or `detach()`.\n   */\n  setAttachedHost(host?: BasePortalHost) {\n    this._attachedHost = host;\n  }\n}\n\n/**\n * Partial implementation of PortalHost that only deals with attaching a\n * ComponentPortal\n */\nexport abstract class BasePortalHost {\n  /** The portal currently attached to the host. */\n  private _attachedPortal?: ComponentPortal<any>;\n\n  /** A function that will permanently dispose this host. */\n  private _disposeFn?: () => void;\n\n  attach(portal: ComponentPortal<any>, newestOnTop: boolean) {\n    this._attachedPortal = portal;\n    return this.attachComponentPortal(portal, newestOnTop);\n  }\n\n  abstract attachComponentPortal<T>(portal: ComponentPortal<T>, newestOnTop: boolean): ComponentRef<T>;\n\n  detach() {\n    if (this._attachedPortal) {\n      this._attachedPortal.setAttachedHost();\n    }\n\n    this._attachedPortal = undefined;\n    if (this._disposeFn) {\n      this._disposeFn();\n      this._disposeFn = undefined;\n    }\n  }\n\n  setDisposeFn(fn: () => void) {\n    this._disposeFn = fn;\n  }\n}\n","import {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EmbeddedViewRef,\n} from '@angular/core';\nimport { BasePortalHost, ComponentPortal } from './portal';\n\n/**\n * A PortalHost for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n *\n * This is the only part of the portal core that directly touches the DOM.\n */\nexport class DomPortalHost extends BasePortalHost {\n  constructor(\n    private _hostDomElement: Element,\n    private _componentFactoryResolver: ComponentFactoryResolver,\n    private _appRef: ApplicationRef,\n  ) {\n    super();\n  }\n\n  /**\n   * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n   * @param portal Portal to be attached\n   */\n  attachComponentPortal<T>(\n    portal: ComponentPortal<T>,\n    newestOnTop: boolean,\n  ): ComponentRef<T> {\n    const componentFactory = this._componentFactoryResolver.resolveComponentFactory(\n      portal.component,\n    );\n    let componentRef: ComponentRef<T>;\n\n    // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n    // for the component (in terms of Angular's component tree, not rendering).\n    // When the ViewContainerRef is missing, we use the factory to create the component directly\n    // and then manually attach the ChangeDetector for that component to the application (which\n    // happens automatically when using a ViewContainer).\n    componentRef = componentFactory.create(portal.injector);\n\n    // When creating a component outside of a ViewContainer, we need to manually register\n    // its ChangeDetector with the application. This API is unfortunately not yet published\n    // in Angular core. The change detector must also be deregistered when the component\n    // is destroyed to prevent memory leaks.\n    this._appRef.attachView(componentRef.hostView);\n\n    this.setDisposeFn(() => {\n      this._appRef.detachView(componentRef.hostView);\n      componentRef.destroy();\n    });\n\n    // At this point the component has been instantiated, so we move it to the location in the DOM\n    // where we want it to be rendered.\n    if (newestOnTop) {\n      this._hostDomElement.insertBefore(\n        this._getComponentRootNode(componentRef),\n        this._hostDomElement.firstChild,\n      );\n    } else {\n      this._hostDomElement.appendChild(\n        this._getComponentRootNode(componentRef),\n      );\n    }\n\n    return componentRef;\n  }\n\n  /** Gets the root HTMLElement for an instantiated component. */\n  private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\n    return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n  }\n}\n","import { ComponentRef } from '@angular/core';\nimport { BasePortalHost, ComponentPortal } from '../portal/portal';\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nexport class OverlayRef {\n  constructor(private _portalHost: BasePortalHost) {}\n\n  attach(\n    portal: ComponentPortal<any>,\n    newestOnTop: boolean = true,\n  ): ComponentRef<any> {\n    return this._portalHost.attach(portal, newestOnTop);\n  }\n\n  /**\n   * Detaches an overlay from a portal.\n   * @returns Resolves when the overlay has been detached.\n   */\n  detach() {\n    return this._portalHost.detach();\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, OnDestroy } from '@angular/core';\n\n/** Container inside which all toasts will render. */\n@Injectable({ providedIn: 'root' })\nexport class OverlayContainer implements OnDestroy {\n  protected _containerElement!: HTMLElement;\n\n  constructor(@Inject(DOCUMENT) protected _document: any) {}\n\n  ngOnDestroy() {\n    if (this._containerElement && this._containerElement.parentNode) {\n      this._containerElement.parentNode.removeChild(this._containerElement);\n    }\n  }\n\n  /**\n   * This method returns the overlay container element. It will lazily\n   * create the element the first time  it is called to facilitate using\n   * the container in non-browser environments.\n   * @returns the container element\n   */\n  getContainerElement(): HTMLElement {\n    if (!this._containerElement) {\n      this._createContainer();\n    }\n    return this._containerElement;\n  }\n\n  /**\n   * Create the overlay container element, which is simply a div\n   * with the 'cdk-overlay-container' class on the document body\n   * and 'aria-live=\"polite\"'\n   */\n  protected _createContainer(): void {\n    const container = this._document.createElement('div');\n    container.classList.add('overlay-container');\n    container.setAttribute('aria-live','polite');\n    this._document.body.appendChild(container);\n    this._containerElement = container;\n  }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { DOCUMENT } from '@angular/common';\nimport {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  Inject,\n  Injectable,\n} from '@angular/core';\nimport { UtilsToastContainerDirective } from '../../../directives/utils-toast.directive';\nimport { DEFAULT_STYLES } from '../../../interfaces/toast-ref';\n\nimport { DomPortalHost } from '../portal/dom-portal-host';\nimport { OverlayContainer } from './overlay-container';\nimport { OverlayRef } from './overlay-ref';\n\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one.\n */\n@Injectable({ providedIn: 'root' })\nexport class Overlay {\n  // Namespace panes by overlay container\n  private _paneElements: Map<\n    UtilsToastContainerDirective,\n    Record<string, HTMLElement>\n  > = new Map();\n\n  constructor(\n    private _overlayContainer: OverlayContainer,\n    private _componentFactoryResolver: ComponentFactoryResolver,\n    private _appRef: ApplicationRef,\n    @Inject(DOCUMENT) private _document: any\n  ) {}\n  /**\n   * Creates an overlay.\n   * @returns A reference to the created overlay.\n   */\n  create(\n    positionClass?: string,\n    overlayContainer?: UtilsToastContainerDirective\n  ): OverlayRef {\n    // get existing pane if possible\n    return this._createOverlayRef(\n      this.getPaneElement(positionClass, overlayContainer)\n    );\n  }\n\n  getPaneElement(\n    positionClass: string = '',\n    overlayContainer?: UtilsToastContainerDirective\n  ): HTMLElement {\n    if (\n      !this._paneElements.get(overlayContainer as UtilsToastContainerDirective)\n    ) {\n      this._paneElements.set(\n        overlayContainer as UtilsToastContainerDirective,\n        {}\n      );\n    }\n\n    if (\n      !this._paneElements.get(\n        overlayContainer as UtilsToastContainerDirective\n      )![positionClass]\n    ) {\n      this._paneElements.get(overlayContainer as UtilsToastContainerDirective)![\n        positionClass\n      ] = this._createPaneElement(positionClass, overlayContainer);\n    }\n\n    return this._paneElements.get(\n      overlayContainer as UtilsToastContainerDirective\n    )![positionClass];\n  }\n\n  /**\n   * Creates the DOM element for an overlay and appends it to the overlay container.\n   * @returns Newly-created pane element\n   */\n  private _createPaneElement(\n    positionClass: string,\n    overlayContainer?: UtilsToastContainerDirective\n  ): HTMLElement {\n    const pane = this._document.createElement('div');\n    //agragamiento de estilos\n    const style = document.createElement('style');\n    style.innerHTML = DEFAULT_STYLES;\n\n    pane.id = 'toast-container';\n    pane.classList.add(positionClass);\n    pane.classList.add('toast-container');\n\n    if (!overlayContainer) {\n      this._overlayContainer.getContainerElement().appendChild(pane);\n      pane.appendChild(style);\n    } else {\n      overlayContainer.getContainerElement().appendChild(pane);\n    }\n    return pane;\n  }\n\n  /**\n   * Create a DomPortalHost into which the overlay content can be loaded.\n   * @param pane The DOM element to turn into a portal host.\n   * @returns A portal host for the given DOM element.\n   */\n  private _createPortalHost(pane: HTMLElement): DomPortalHost {\n    return new DomPortalHost(\n      pane,\n      this._componentFactoryResolver,\n      this._appRef\n    );\n  }\n\n  /**\n   * Creates an OverlayRef for an overlay in the given DOM element.\n   * @param pane DOM element for the overlay\n   */\n  private _createOverlayRef(pane: HTMLElement): OverlayRef {\n    return new OverlayRef(this._createPortalHost(pane));\n  }\n}\n","import { ComponentRef, InjectionToken } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\nimport { ComponentType } from '../components/utils-toastr/portal/portal';\nimport { ToastRef } from './toast-ref';\n\nexport type ProgressAnimationType = 'increasing' | 'decreasing';\n\n/**\n * Configuration for an individual toast.\n */\nexport interface IndividualConfig {\n  /**\n   * disable both timeOut and extendedTimeOut\n   * default: false\n   */\n  disableTimeOut: boolean | 'timeOut' | 'extendedTimeOut';\n  /**\n   * toast time to live in milliseconds\n   * default: 5000\n   */\n  timeOut: number;\n  /**\n   * toast show close button\n   * default: false\n   */\n  closeButton: boolean;\n  /**\n   * time to close after a user hovers over toast\n   * default: 1000\n   */\n  extendedTimeOut: number;\n  /**\n   * show toast progress bar\n   * default: false\n   */\n  progressBar: boolean;\n\n  /**\n   * changes toast progress bar animation\n   * default: decreasing\n   */\n  progressAnimation: ProgressAnimationType;\n\n  /**\n   * render html in toast message (possibly unsafe)\n   * default: false\n   */\n  enableHtml: boolean;\n  /**\n   * css class on toast component\n   * default: ngx-toastr\n   */\n  toastClass: string;\n  /**\n   * css class on toast container\n   * default: toast-top-right\n   */\n  positionClass: string;\n  /**\n   * css class on toast title\n   * default: toast-title\n   */\n  titleClass: string;\n  /**\n   * css class on toast message\n   * default: toast-message\n   */\n  messageClass: string;\n  /**\n   * animation easing on toast\n   * default: ease-in\n   */\n  easing: string;\n  /**\n   * animation ease time on toast\n   * default: 300\n   */\n  easeTime: string | number;\n  /**\n   * clicking on toast dismisses it\n   * default: true\n   */\n  tapToDismiss: boolean;\n  /**\n   * Angular toast component to be shown\n   * default: Toast\n   */\n  toastComponent?: ComponentType<any>;\n  /**\n   * Helps show toast from a websocket or from event outside Angular\n   * default: false\n   */\n  onActivateTick: boolean;\n  /**\n   * New toast placement\n   * default: true\n   */\n  newestOnTop: boolean;\n\n  /**\n   * payload to pass to the toastComponent\n   * default: null\n   */\n  payload: any;\n}\n\nexport interface ToastrIconClasses {\n  error: string;\n  info: string;\n  success: string;\n  warning: string;\n  [key: string]: string;\n}\n\n/**\n * Global Toast configuration\n * Includes all IndividualConfig\n */\nexport interface GlobalConfig extends IndividualConfig {\n  /**\n   * max toasts opened. Toasts will be queued\n   * Zero is unlimited\n   * default: 0\n   */\n  maxOpened: number;\n  /**\n   * dismiss current toast when max is reached\n   * default: false\n   */\n  autoDismiss: boolean;\n  iconClasses: Partial<ToastrIconClasses>;\n  /**\n   * block duplicate messages\n   * default: false\n   */\n  preventDuplicates: boolean;\n  /**\n   * display the number of duplicate messages\n   * default: false\n   */\n  countDuplicates: boolean;\n  /**\n   * Reset toast timeout when there's a duplicate (preventDuplicates needs to be set to true)\n   * default: false\n   */\n  resetTimeoutOnDuplicate: boolean;\n  /**\n   * consider the title of a toast when checking if duplicate\n   * default: false\n   */\n  includeTitleDuplicates: boolean;\n}\n\n/**\n * Everything a toast needs to launch\n */\nexport class ToastPackage {\n  private _onTap = new Subject<void>();\n  private _onAction = new Subject<any>();\n\n  constructor(\n    public toastId: number,\n    public config: IndividualConfig,\n    public message: string | null | undefined,\n    public title: string | undefined,\n    public toastType: string,\n    public toastRef: ToastRef<any>\n  ) {\n    this.toastRef.afterClosed().subscribe(() => {\n      this._onAction.complete();\n      this._onTap.complete();\n    });\n  }\n\n  /** Fired on click */\n  triggerTap(): void {\n    this._onTap.next();\n    if (this.config.tapToDismiss) {\n      this._onTap.complete();\n    }\n  }\n\n  onTap(): Observable<void> {\n    return this._onTap.asObservable();\n  }\n\n  /** available for use in custom toast */\n  triggerAction(action?: any): void {\n    this._onAction.next(action);\n  }\n\n  onAction(): Observable<void> {\n    return this._onAction.asObservable();\n  }\n}\n\n/* eslint-disable @typescript-eslint/no-empty-interface */\n/** @deprecated use GlobalConfig */\nexport interface GlobalToastrConfig extends GlobalConfig {}\n/** @deprecated use IndividualConfig */\nexport interface IndividualToastrConfig extends IndividualConfig {}\n/** @deprecated use IndividualConfig */\nexport interface ToastrConfig extends IndividualConfig {}\n\nexport const DefaultNoComponentGlobalConfig: GlobalConfig = {\n  maxOpened: 0,\n  autoDismiss: false,\n  newestOnTop: true,\n  preventDuplicates: false,\n  countDuplicates: false,\n  resetTimeoutOnDuplicate: false,\n  includeTitleDuplicates: false,\n\n  iconClasses: {\n    error: 'toast-error',\n    info: 'toast-info',\n    success: 'toast-success',\n    warning: 'toast-warning',\n  },\n\n  // Individual\n  closeButton: false,\n  disableTimeOut: false,\n  timeOut: 5000,\n  extendedTimeOut: 1000,\n  enableHtml: false,\n  progressBar: false,\n  toastClass: 'ngx-toastr',\n  positionClass: 'toast-top-right',\n  titleClass: 'toast-title',\n  messageClass: 'toast-message',\n  easing: 'ease-in',\n  easeTime: 300,\n  tapToDismiss: true,\n  onActivateTick: false,\n  progressAnimation: 'decreasing',\n\n  payload: null,\n};\n\nexport interface ToastToken {\n  default: GlobalConfig;\n  config: Partial<GlobalConfig>;\n}\n\nexport const TOAST_CONFIG = new InjectionToken<ToastToken>('ToastConfig');\n\nexport interface ActiveToast<C> {\n  /** Your Toast ID. Use this to close it individually */\n  toastId: number;\n  /** the title of your toast. Stored to prevent duplicates */\n  title: string;\n  /** the message of your toast. Stored to prevent duplicates */\n  message: string;\n  /** a reference to the component see portal.ts */\n  portal: ComponentRef<C>;\n  /** a reference to your toast */\n  toastRef: ToastRef<C>;\n  /** triggered when toast is active */\n  onShown: Observable<void>;\n  /** triggered when toast is destroyed */\n  onHidden: Observable<void>;\n  /** triggered on toast click */\n  onTap: Observable<void>;\n  /** available for your use in custom toast */\n  onAction: Observable<any>;\n}\n","import {\n    ComponentRef,\n    Inject,\n    Injectable,\n    Injector,\n    NgZone,\n    SecurityContext,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { Observable } from 'rxjs';\nimport { Overlay } from '../components/utils-toastr/overlay/overlay';\nimport { ComponentPortal } from '../components/utils-toastr/portal/portal';\nimport { UtilsToastContainerDirective } from '../directives/utils-toast.directive';\nimport { ToastRef } from '../interfaces/toast-ref';\nimport {\n    ActiveToast,\n    GlobalConfig,\n    IndividualConfig,\n    ToastPackage,\n    ToastToken,\n    TOAST_CONFIG,\n} from '../interfaces/toastr-interface';\n\n@Injectable({ providedIn: 'root' })\nexport class UtilsToastrService {\n    toastrConfig: GlobalConfig;\n    currentlyActive = 0;\n    toasts: ActiveToast<any>[] = [];\n    overlayContainer?: UtilsToastContainerDirective;\n    previousToastMessage: string | undefined;\n    private index = 0;\n\n    constructor(\n        @Inject(TOAST_CONFIG) token: ToastToken,\n        @Inject(Overlay) private overlay: Overlay,\n        private _injector: Injector,\n        private sanitizer: DomSanitizer,\n        private ngZone: NgZone\n    ) {\n        this.toastrConfig = {\n            ...token.default,\n            ...token.config,\n        };\n        if (token.config.iconClasses) {\n            this.toastrConfig.iconClasses = {\n                ...token.default.iconClasses,\n                ...token.config.iconClasses,\n            };\n        }\n    }\n    /** show toast */\n    show(\n        message?: string,\n        title?: string,\n        override: Partial<IndividualConfig> = {},\n        type = ''\n    ) {\n        return this._preBuildNotification(\n            type,\n            message,\n            title,\n            this.applyConfig(override)\n        );\n    }\n    /** show successful toast */\n    success(\n        message?: string,\n        title?: string,\n        override: Partial<IndividualConfig> = {}\n    ) {\n        const type = this.toastrConfig.iconClasses.success || '';\n        return this._preBuildNotification(\n            type,\n            message,\n            title,\n            this.applyConfig(override)\n        );\n    }\n    /** show error toast */\n    error(\n        message?: string,\n        title?: string,\n        override: Partial<IndividualConfig> = {}\n    ) {\n        const type = this.toastrConfig.iconClasses.error || '';\n        return this._preBuildNotification(\n            type,\n            message,\n            title,\n            this.applyConfig(override)\n        );\n    }\n    /** show info toast */\n    info(\n        message?: string,\n        title?: string,\n        override: Partial<IndividualConfig> = {}\n    ) {\n        const type = this.toastrConfig.iconClasses.info || '';\n        return this._preBuildNotification(\n            type,\n            message,\n            title,\n            this.applyConfig(override)\n        );\n    }\n    /** show warning toast */\n    warning(\n        message?: string,\n        title?: string,\n        override: Partial<IndividualConfig> = {}\n    ) {\n        const type = this.toastrConfig.iconClasses.warning || '';\n        return this._preBuildNotification(\n            type,\n            message,\n            title,\n            this.applyConfig(override)\n        );\n    }\n    /**\n     * Remove all or a single toast by id\n     */\n    clear(toastId?: number) {\n        // Call every toastRef manualClose function\n        for (const toast of this.toasts) {\n            if (toastId !== undefined) {\n                if (toast.toastId === toastId) {\n                    toast.toastRef.manualClose();\n                    return;\n                }\n            } else {\n                toast.toastRef.manualClose();\n            }\n        }\n    }\n    /**\n     * Remove and destroy a single toast by id\n     */\n    remove(toastId: number) {\n        const found = this._findToast(toastId);\n        if (!found) {\n            return false;\n        }\n        found.activeToast.toastRef.close();\n        this.toasts.splice(found.index, 1);\n        this.currentlyActive = this.currentlyActive - 1;\n        if (!this.toastrConfig.maxOpened || !this.toasts.length) {\n            return false;\n        }\n        if (\n            this.currentlyActive < this.toastrConfig.maxOpened &&\n            this.toasts[this.currentlyActive]\n        ) {\n            const p = this.toasts[this.currentlyActive].toastRef;\n            if (!p.isInactive()) {\n                this.currentlyActive = this.currentlyActive + 1;\n                p.activate();\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Determines if toast message is already shown\n     */\n    findDuplicate(\n        title = '',\n        message = '',\n        resetOnDuplicate: boolean,\n        countDuplicates: boolean\n    ) {\n        const { includeTitleDuplicates } = this.toastrConfig;\n\n        for (const toast of this.toasts) {\n            const hasDuplicateTitle = includeTitleDuplicates && toast.title === title;\n            if (\n                (!includeTitleDuplicates || hasDuplicateTitle) &&\n                toast.message === message\n            ) {\n                toast.toastRef.onDuplicate(resetOnDuplicate, countDuplicates);\n                return toast;\n            }\n        }\n\n        return null;\n    }\n\n    /** create a clone of global config and apply individual settings */\n    private applyConfig(override: Partial<IndividualConfig> = {}): GlobalConfig {\n        return { ...this.toastrConfig, ...override };\n    }\n\n    /**\n     * Find toast object by id\n     */\n    private _findToast(\n        toastId: number\n    ): { index: number; activeToast: ActiveToast<any> } | null {\n        for (let i = 0; i < this.toasts.length; i++) {\n            if (this.toasts[i].toastId === toastId) {\n                return { index: i, activeToast: this.toasts[i] };\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Determines the need to run inside angular's zone then builds the toast\n     */\n    private _preBuildNotification(\n        toastType: string,\n        message: string | undefined,\n        title: string | undefined,\n        config: GlobalConfig\n    ): ActiveToast<any> | null {\n        if (config.onActivateTick) {\n            return this.ngZone.run(() =>\n                this._buildNotification(toastType, message, title, config)\n            );\n        }\n        return this._buildNotification(toastType, message, title, config);\n    }\n\n    /**\n     * Creates and attaches toast data to component\n     * returns the active toast, or in case preventDuplicates is enabled the original/non-duplicate active toast.\n     */\n    private _buildNotification(\n        toastType: string,\n        message: string | undefined,\n        title: string | undefined,\n        config: GlobalConfig\n    ): ActiveToast<any> | null {\n        if (!config.toastComponent) {\n            throw new Error('toastComponent required');\n        }\n        // max opened and auto dismiss = true\n        // if timeout = 0 resetting it would result in setting this.hideTime = Date.now(). Hence, we only want to reset timeout if there is\n        // a timeout at all\n        const duplicate = this.findDuplicate(\n            title,\n            message,\n            this.toastrConfig.resetTimeoutOnDuplicate && config.timeOut > 0,\n            this.toastrConfig.countDuplicates\n        );\n        if (\n            ((this.toastrConfig.includeTitleDuplicates && title) || message) &&\n            this.toastrConfig.preventDuplicates &&\n            duplicate !== null\n        ) {\n            return duplicate;\n        }\n\n        this.previousToastMessage = message;\n        let keepInactive = false;\n        if (\n            this.toastrConfig.maxOpened &&\n            this.currentlyActive >= this.toastrConfig.maxOpened\n        ) {\n            keepInactive = true;\n            if (this.toastrConfig.autoDismiss) {\n                this.clear(this.toasts[0].toastId);\n            }\n        }\n\n        const overlayRef = this.overlay.create(\n            config.positionClass,\n            this.overlayContainer\n        );\n        this.index = this.index + 1;\n        let sanitizedMessage: string | undefined | null = message;\n        if (message && config.enableHtml) {\n            sanitizedMessage = this.sanitizer.sanitize(SecurityContext.HTML, message);\n        }\n\n        const toastRef = new ToastRef(overlayRef);\n        const toastPackage = new ToastPackage(\n            this.index,\n            config,\n            sanitizedMessage,\n            title,\n            toastType,\n            toastRef\n        );\n\n        /** New injector that contains an instance of `ToastPackage`. */\n        const providers = [{ provide: ToastPackage, useValue: toastPackage }];\n        const toastInjector = Injector.create({\n            providers,\n            parent: this._injector,\n        });\n\n        const component = new ComponentPortal(config.toastComponent, toastInjector);\n        const portal = overlayRef.attach(component, config.newestOnTop);\n        toastRef.componentInstance = portal.instance;\n        const ins: ActiveToast<any> = {\n            toastId: this.index,\n            title: title || '',\n            message: message || '',\n            toastRef,\n            onShown: toastRef.afterActivate(),\n            onHidden: toastRef.afterClosed(),\n            onTap: toastPackage.onTap(),\n            onAction: toastPackage.onAction(),\n            portal,\n        };\n\n        if (!keepInactive) {\n            this.currentlyActive = this.currentlyActive + 1;\n            setTimeout(() => {\n                ins.toastRef.activate();\n            });\n        }\n\n        this.toasts.push(ins);\n        return ins;\n    }\n}\n","import {\n    animate,\n    state,\n    style,\n    transition,\n    trigger,\n} from '@angular/animations';\nimport {\n    Component,\n    HostBinding,\n    HostListener,\n    NgZone,\n    OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport {\n    IndividualConfig,\n    ToastPackage,\n} from '../../interfaces/toastr-interface';\nimport { UtilsToastrService } from '../../services/utils-toastr.service';\n\n@Component({\n    selector: '[toast-component]',\n    standalone: true,\n    imports: [CommonModule],\n    templateUrl: './utils-toastr.component.html',\n    styleUrls: ['./utils-toastr.component.scss'],\n    animations: [\n        trigger('flyInOut', [\n            state('inactive', style({ opacity: 0 })),\n            state('active', style({ opacity: 1 })),\n            state('removed', style({ opacity: 0 })),\n            transition(\n                'inactive => active',\n                animate('{{ easeTime }}ms {{ easing }}')\n            ),\n            transition('active => removed', animate('{{ easeTime }}ms {{ easing }}')),\n        ]),\n    ],\n    preserveWhitespaces: false,\n})\nexport class UtilsToastr implements OnDestroy {\n    message?: string | null;\n    title?: string;\n    options: IndividualConfig;\n    duplicatesCount!: number;\n    originalTimeout: number;\n    /** width of progress bar */\n    width = -1;\n    /** a combination of toast type and options.toastClass */\n    @HostBinding('class') toastClasses = '';\n    /** controls animation */\n    @HostBinding('@flyInOut')\n    state: any;\n\n    /** hides component when waiting to be displayed */\n    @HostBinding('style.display')\n    get displayStyle(): string | undefined {\n        if (this.state.value === 'inactive') {\n            return 'none';\n        }\n\n        return '';\n    }\n\n    private timeout: any;\n    private intervalId: any;\n    private hideTime!: number;\n    private sub: Subscription;\n    private sub1: Subscription;\n    private sub2: Subscription;\n    private sub3: Subscription;\n\n    constructor(\n        protected toastrService: UtilsToastrService,\n        public toastPackage: ToastPackage,\n        protected ngZone?: NgZone\n    ) {\n        this.message = toastPackage.message;\n        this.title = toastPackage.title;\n        this.options = toastPackage.config;\n        this.originalTimeout = toastPackage.config.timeOut;\n        this.toastClasses = `${toastPackage.toastType} ${toastPackage.config.toastClass}`;\n        this.state = {\n            value: 'inactive',\n            params: {\n                easeTime: this.toastPackage.config.easeTime,\n                easing: 'ease-in',\n            },\n        };\n        this.sub = toastPackage.toastRef.afterActivate().subscribe(() => {\n            this.activateToast();\n        });\n        this.sub1 = toastPackage.toastRef.manualClosed().subscribe(() => {\n            this.remove();\n        });\n        this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(() => {\n            this.resetTimeout();\n        });\n        this.sub3 = toastPackage.toastRef.countDuplicate().subscribe((count) => {\n            this.duplicatesCount = count;\n        });\n    }\n    ngOnDestroy() {\n        this.sub.unsubscribe();\n        this.sub1.unsubscribe();\n        this.sub2.unsubscribe();\n        this.sub3.unsubscribe();\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeout);\n    }\n    /**\n     * activates toast and sets timeout\n     */\n    activateToast() {\n        this.state = { ...this.state, value: 'active' };\n        if (\n            !(\n                this.options.disableTimeOut === true ||\n                this.options.disableTimeOut === 'timeOut'\n            ) &&\n            this.options.timeOut\n        ) {\n            this.outsideTimeout(() => this.remove(), this.options.timeOut);\n            this.hideTime = new Date().getTime() + this.options.timeOut;\n            if (this.options.progressBar) {\n                this.outsideInterval(() => this.updateProgress(), 10);\n            }\n        }\n    }\n    /**\n     * updates progress bar width\n     */\n    updateProgress() {\n        if (this.width === 0 || this.width === 100 || !this.options.timeOut) {\n            return;\n        }\n        const now = new Date().getTime();\n        const remaining = this.hideTime - now;\n        this.width = (remaining / this.options.timeOut) * 100;\n        if (this.options.progressAnimation === 'increasing') {\n            this.width = 100 - this.width;\n        }\n        if (this.width <= 0) {\n            this.width = 0;\n        }\n        if (this.width >= 100) {\n            this.width = 100;\n        }\n    }\n\n    resetTimeout() {\n        clearTimeout(this.timeout);\n        clearInterval(this.intervalId);\n        this.state = { ...this.state, value: 'active' };\n\n        this.outsideTimeout(() => this.remove(), this.originalTimeout);\n        this.options.timeOut = this.originalTimeout;\n        this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n        this.width = -1;\n        if (this.options.progressBar) {\n            this.outsideInterval(() => this.updateProgress(), 10);\n        }\n    }\n\n    /**\n     * tells toastrService to remove this toast after animation time\n     */\n    remove() {\n        if (this.state.value === 'removed') {\n            return;\n        }\n        clearTimeout(this.timeout);\n        this.state = { ...this.state, value: 'removed' };\n        this.outsideTimeout(\n            () => this.toastrService.remove(this.toastPackage.toastId),\n            +this.toastPackage.config.easeTime\n        );\n    }\n    @HostListener('click')\n    tapToast() {\n        if (this.state.value === 'removed') {\n            return;\n        }\n        this.toastPackage.triggerTap();\n        if (this.options.tapToDismiss) {\n            this.remove();\n        }\n    }\n    @HostListener('mouseenter')\n    stickAround() {\n        if (this.state.value === 'removed') {\n            return;\n        }\n\n        if (this.options.disableTimeOut !== 'extendedTimeOut') {\n            clearTimeout(this.timeout);\n            this.options.timeOut = 0;\n            this.hideTime = 0;\n\n            // disable progressBar\n            clearInterval(this.intervalId);\n            this.width = 0;\n        }\n    }\n    @HostListener('mouseleave')\n    delayedHideToast() {\n        if (\n            this.options.disableTimeOut === true ||\n            this.options.disableTimeOut === 'extendedTimeOut' ||\n            this.options.extendedTimeOut === 0 ||\n            this.state.value === 'removed'\n        ) {\n            return;\n        }\n        this.outsideTimeout(() => this.remove(), this.options.extendedTimeOut);\n        this.options.timeOut = this.options.extendedTimeOut;\n        this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n        this.width = -1;\n        if (this.options.progressBar) {\n            this.outsideInterval(() => this.updateProgress(), 10);\n        }\n    }\n\n    outsideTimeout(func: () => any, timeout: number) {\n        if (this.ngZone) {\n            this.ngZone.runOutsideAngular(\n                () =>\n                (this.timeout = setTimeout(\n                    () => this.runInsideAngular(func),\n                    timeout\n                ))\n            );\n        } else {\n            this.timeout = setTimeout(() => func(), timeout);\n        }\n    }\n\n    outsideInterval(func: () => any, timeout: number) {\n        if (this.ngZone) {\n            this.ngZone.runOutsideAngular(\n                () =>\n                (this.intervalId = setInterval(\n                    () => this.runInsideAngular(func),\n                    timeout\n                ))\n            );\n        } else {\n            this.intervalId = setInterval(() => func(), timeout);\n        }\n    }\n\n    private runInsideAngular(func: () => any) {\n        if (this.ngZone) {\n            this.ngZone.run(() => func());\n        } else {\n            func();\n        }\n    }\n}\n","<button *ngIf=\"options.closeButton\" (click)=\"remove()\" type=\"button\" class=\"toast-close-button\" aria-label=\"Close\">\n  <span aria-hidden=\"true\">&times;</span>\n</button>\n<div *ngIf=\"title\" [class]=\"options.titleClass\" [attr.aria-label]=\"title\">\n  {{ title }} <ng-container *ngIf=\"duplicatesCount\">[{{ duplicatesCount + 1 }}]</ng-container>\n</div>\n<div *ngIf=\"message && options.enableHtml\" role=\"alert\" [class]=\"options.messageClass\" [innerHTML]=\"message\">\n</div>\n<div *ngIf=\"message && !options.enableHtml\" role=\"alert\" [class]=\"options.messageClass\" [attr.aria-label]=\"message\">\n  {{ message }}\n</div>\n<div *ngIf=\"options.progressBar\">\n  <div class=\"toast-progress\" [style.width]=\"width + '%'\"></div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'customCurrency',\n    standalone: true,\n})\nexport class UtilsCustomCurrencyPipe implements PipeTransform {\n    transform(\n        value: any,\n        currencyCode: string = 'USD',\n        symbolDisplay: 'code' | 'symbol' | 'narrowSymbol' = 'symbol',\n        digitsInfo: string = '1.1-2',\n        locale: string = 'en-US'\n    ): string | null {\n        const formattedValue = new Intl.NumberFormat(locale, {\n            style: 'currency',\n            currency: currencyCode,\n            minimumFractionDigits: 1,\n            maximumFractionDigits: 2,\n        }).format(value);\n\n        // Insert a space between the symbol and the value\n        return formattedValue.replace(/(\\D+)(\\d)/, '$1 $2');\n    }\n}\n","import { Pipe } from '@angular/core';\nimport { UtilsPaginationInstance } from '../interfaces/pagination-instance';\nimport { UtilsPaginationService } from '../services/utils-pagination.service';\n\nconst LARGE_NUMBER = Number.MAX_SAFE_INTEGER;\n\nexport type Collection<T> = T[] | ReadonlyArray<T>;\n\nexport interface PaginatePipeArgs {\n    id?: string;\n    itemsPerPage?: string | number;\n    currentPage?: string | number;\n    totalItems?: string | number;\n}\n\nexport interface PipeState {\n    collection: ArrayLike<any>;\n    size: number;\n    start: number;\n    end: number;\n    slice: ArrayLike<any>;\n}\n\n@Pipe({\n    name: 'paginate',\n    pure: false,\n    standalone: true,\n})\nexport class UtilsPaginatePipe {\n    // store the values from the last time the pipe was invoked\n    private state: { [id: string]: PipeState } = {};\n\n    constructor(private service: UtilsPaginationService) { }\n\n    public transform<T, U extends Collection<T>>(\n        collection: U,\n        args: PaginatePipeArgs\n    ): U {\n        // When an observable is passed through the AsyncPipe, it will output\n        // `null` until the subscription resolves. In this case, we want to\n        // use the cached data from the `state` object to prevent the NgFor\n        // from flashing empty until the real values arrive.\n        if (!(collection instanceof Array)) {\n            let _id = args.id || this.service.defaultId();\n            if (_id && this.state[_id]) {\n                return this.state[_id].slice as U;\n            } else {\n                return collection;\n            }\n        }\n\n        let serverSideMode =\n            args.totalItems && args.totalItems !== collection.length;\n        let instance = this.createInstance(collection, args);\n        let id = instance.id || this.service.defaultId();\n        let start, end;\n        let perPage = instance.itemsPerPage;\n\n        let emitChange = this.service.register(instance);\n\n        if (!serverSideMode && collection instanceof Array) {\n            perPage = +perPage || LARGE_NUMBER;\n            start = (instance.currentPage - 1) * perPage;\n            end = start + perPage;\n\n            let isIdentical = this.stateIsIdentical(id, collection, start, end);\n            if (isIdentical) {\n                return this.state[id].slice as U;\n            } else {\n                let slice = collection.slice(start, end);\n                this.saveState(id, collection, slice, start, end);\n                this.service.change.emit(id);\n                return slice as U;\n            }\n        } else {\n            if (emitChange) {\n                this.service.change.emit(id);\n            }\n\n            // save the state for server-side collection to avoid null\n            // flash as new data loads.\n            this.saveState(id, collection, collection, start || 0, end || 0);\n\n            return collection;\n        }\n    }\n\n    /**\n     * Create an UtilsPaginationInstance object, using defaults for any optional properties not supplied.\n     */\n    private createInstance(\n        collection: readonly any[],\n        config: PaginatePipeArgs\n    ): UtilsPaginationInstance {\n        this.checkConfig(config);\n\n        return {\n            id: config.id != null ? config.id : this.service.defaultId(),\n            itemsPerPage: +(config.itemsPerPage || 0),\n            currentPage: +(config.currentPage || 1),\n            totalItems: +(config.totalItems || collection.length),\n        };\n    }\n\n    /**\n     * Ensure the argument passed to the filter contains the required properties.\n     */\n    private checkConfig(config: PaginatePipeArgs): void {\n        const required = ['itemsPerPage', 'currentPage'];\n\n        const missing = required.filter((prop) => !(prop in config));\n        if (0 < missing.length) {\n            throw new Error(\n                `PaginatePipe: Argument is missing the following required properties: ${missing.join(\n                    ', '\n                )}`\n            );\n        }\n    }\n\n    /**\n     * To avoid returning a brand new array each time the pipe is run, we store the state of the sliced\n     * array for a given id. This means that the next time the pipe is run on this collection & id, we just\n     * need to check that the collection, start and end points are all identical, and if so, return the\n     * last sliced array.\n     */\n    private saveState(\n        id: string,\n        collection: ArrayLike<any>,\n        slice: ArrayLike<any>,\n        start: number,\n        end: number\n    ) {\n        this.state[id] = {\n            collection,\n            size: collection.length,\n            slice,\n            start,\n            end,\n        };\n    }\n\n    /**\n     * For a given id, returns true if the collection, size, start and end values are identical.\n     */\n    private stateIsIdentical(\n        id: string,\n        collection: ArrayLike<any>,\n        start: number,\n        end: number\n    ): boolean {\n        let state = this.state[id];\n        if (!state) {\n            return false;\n        }\n        let isMetaDataIdentical =\n            state.size === collection.length &&\n            state.start === start &&\n            state.end === end;\n\n        if (!isMetaDataIdentical) {\n            return false;\n        }\n\n        return (state.slice as Array<any>).every(\n            (element, index) => element === collection[start + index]\n        );\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport moment from 'moment/moment';\nimport 'moment/locale/es';\nimport Swal from 'sweetalert2';\nimport * as FileSaver from 'file-saver';\nimport * as XLSX from 'xlsx';\n\nimport { Observable, fromEvent, map } from 'rxjs';\nimport { Options, ParsedQuery } from '../interfaces/service.interface';\nimport {\n    genericComboConfig,\n    genericCombo,\n} from '../interfaces/generic.interface';\nimport { HttpClient } from '@angular/common/http';\n@Injectable({\n    providedIn: 'root',\n})\nexport class NgxDanisoftUtilsService {\n    constructor(private http: HttpClient) { }\n    /**\n     *\n     * @param url\n     * @param filename\n     * @returns\n     * @description\n     * Descarga un archivo desde una URL.\n     * @example\n     * ```typescript\n     * downloadFile('https://www.example.com/file.pdf', 'file.pdf');\n     * ```\n     */\n    public downloadFile(url: string, filename: string) {\n        return this.http\n            .get(url, { responseType: 'blob' })\n            .toPromise()\n            .then((blob: any) => {\n                const link = document.createElement('a');\n                link.href = window.URL.createObjectURL(blob);\n                link.download = filename;\n                link.click();\n                window.URL.revokeObjectURL(link.href);\n            })\n            .catch((err) => console.error('Error downloading file', err));\n    }\n    /**\n     *\n     * @param obj\n     * @returns\n     * @description\n     * Recorre un objeto y elimina los espacios en blanco de las cadenas de texto.\n     */\n\n    public trimObjectStrings<T>(obj: T): T {\n        const trimmedObj: any = {};\n\n        for (const key in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                const value = (obj as any)[key];\n                if (typeof value === 'string') {\n                    trimmedObj[key] = value.trim();\n                } else {\n                    trimmedObj[key] = value;\n                }\n            }\n        }\n        return trimmedObj as T;\n    }\n\n    /**\n     *\n     * @param element\n     * @param numParse\n     * @returns\n     * @description\n     * Copia el contenido de un elemento HTML al portapapeles.\n     * @example\n     * ```typescript\n     * <div id=\"copyable\" #copyable>\n     *  <!-- Aquí va tu contenido HTML que deseas copiar -->\n     * <p>Contenido a copiar</p>\n     * </div>\n     * <button (click)=\"copyToClipboard(copyable)\">Copiar al portapapeles</button>\n     * ```\n     */\n\n    public copyToClipboard(element: HTMLElement, numParse: boolean = true) {\n        if (numParse) {\n            // Crear una expresión regular para encontrar los valores que cumplen el patrón\n            const regex =\n                /\\$\\d{1,3}(?:,\\d{3})*(?:\\.\\d{2})?|\\d{1,3}(?:,\\d{3})*(?:\\.\\d{2})?/g;\n            // Reemplazar solo las partes numéricas que coinciden con el patrón\n            element.innerHTML = element.innerHTML.replace(regex, function (match) {\n                // Remover comas y puntos en la parte numérica\n                return match.replace(/,/g, '').replace(/\\./g, ',');\n            });\n        }\n        let html = element.outerHTML;\n\n        navigator.clipboard\n            .writeText(html)\n            .then(() => {\n                this.successAlert('Contenido copiado al portapapeles');\n            })\n            .catch((err) => {\n                this.errorAlert('Error al copiar al portapapeles');\n                console.error('Error al copiar al portapapeles: ', err);\n            });\n    }\n\n    /**\n   * @description\n   * Convierte un elemento HTML a un archivo Excel y lo descarga.\n   * @param element El elemento HTML a convertir.\n   * @param isStyles Indica si se deben incluir los estilos del documento en el archivo Excel.\n   * @param numParse Indica si se deben parsear los números en el contenido del elemento.\n   * @returns void\n   * @example\n   * ```typescript\n   * <div id=\"exportable\" #exportable>\n    <!-- Aquí va tu contenido HTML que deseas exportar -->\n    <table>\n      <thead>\n        <tr>\n          <th>Header 1</th>\n          <th>Header 2</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td>Data 1</td>\n          <td>Data 2</td>\n        </tr>\n      </tbody>\n    </table>\n  </div>\n  <button (click)=\"toHTMLaExcel(exportable)\">Exportar a Excel</button>\n    * ```\n    */\n    public toHTMLaExcel(\n        element: HTMLElement,\n        isStyles = true,\n        numParse: boolean = true\n    ) {\n        if (numParse) {\n            // Crear una expresión regular para encontrar los valores que cumplen el patrón\n            const regex =\n                /\\$\\d{1,3}(?:,\\d{3})*(?:\\.\\d{2})?|\\d{1,3}(?:,\\d{3})*(?:\\.\\d{2})?/g;\n            // Reemplazar solo las partes numéricas que coinciden con el patrón\n            element.innerHTML = element.innerHTML.replace(regex, function (match) {\n                // Remover comas y puntos en la parte numérica\n                return match.replace(/,/g, '').replace(/\\./g, ',');\n            });\n        }\n\n        // Obtén el HTML del elemento\n        const html = element.outerHTML;\n\n        // Si se requieren estilos, agrega los estilos del documento al HTML\n        let styledHtml = html;\n        if (isStyles) {\n            const styles = this.getAllCSSRules();\n            styledHtml = `<style>${styles}</style>${html}`;\n        }\n        const contenidoExcel = `\n      <html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">\n      <head>\n        <meta charset=\"UTF-8\">\n        <!--[if gte mso 9]><xml>\n        <x:ExcelWorkbook>\n          <x:ExcelWorksheets>\n            <x:ExcelWorksheet>\n              <x:Name>Sheet1</x:Name>\n              <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions>\n            </x:ExcelWorksheet>\n          </x:ExcelWorksheets>\n        </x:ExcelWorkbook>\n        </xml><![endif]-->\n      </head>\n      <body>\n        ${styledHtml}\n      </body>\n      </html>`;\n\n        // Crea un blob con el contenido HTML\n        const blob = new Blob([contenidoExcel], {\n            type: 'application/vnd.ms-excel;charset=utf-8;',\n        });\n\n        // Descarga el archivo Excel\n        const link = document.createElement('a');\n        link.href = URL.createObjectURL(blob);\n        link.download = `export_${Date.now()}.xls`;\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n    }\n\n    private getAllCSSRules(): string {\n        let css = '';\n        for (const sheet of Array.from(document.styleSheets) as CSSStyleSheet[]) {\n            try {\n                for (const rule of Array.from(sheet.cssRules)) {\n                    css += rule.cssText;\n                }\n            } catch (e) {\n                console.error('Error reading CSS rules from stylesheet:', e);\n            }\n        }\n        return css;\n    }\n\n    /**\n     *\n     * @param objCombo\n     * @returns\n     * @description\n     * Obtiene un arreglo de objetos con los años desde el año mínimo hasta el año actual.\n     * @example\n     * ```typescript\n     * getComboYear({ minYear: 1988, incrementYear: 0, order: 'ASC' });\n     * ```\n     */\n\n    public getComboYear(objCombo: genericComboConfig): genericCombo[] {\n        const currentYear = new Date().getFullYear();\n        const minYear = objCombo.minYear ?? 1988;\n        const incrementYear = objCombo.incrementYear ?? 0;\n        const years = [];\n\n        if (objCombo.order === 'DESC') {\n            for (let i = currentYear + incrementYear; i >= minYear; i--) {\n                years.push({ id: i.toString(), name: i.toString() });\n            }\n        } else {\n            for (let i = minYear; i <= currentYear + incrementYear; i++) {\n                years.push({ id: i.toString(), name: i.toString() });\n            }\n        }\n\n        return years;\n    }\n\n    /**\n     *\n     * @param current\n     * @param num\n     * @returns\n     * @description\n     * Obtiene el nombre del día de la semana de una fecha.\n     * @example\n     * ```typescript\n     * weekLabel(new Date(), 0);\n     * ```\n     *\n     */\n\n    public weekLabel(current: Date, num: number = 0): string {\n        moment.locale('es');\n        current.setDate(current.getDate() + num);\n        return moment(current).format('dddd');\n    }\n    /**\n     *\n     * @param date\n     * @returns\n     * @description\n     * Obtiene el nombre del mes de una fecha.\n     * @example\n     * ```typescript\n     * monthLabel(new Date());\n     * ```\n     *\n     */\n    public validarFechaMenorActual(date: string) {\n        var x = new Date();\n        var fecha: any = date.split('-');\n        x.setFullYear(fecha[2], fecha[1] - 1, fecha[0]);\n        var today = new Date();\n\n        if (x >= today) return false;\n        else return true;\n    }\n    /**\n     *\n     * @param date\n     * @param dateMin\n     * @param dateMax\n     * @returns\n     * @description\n     * Valida si una fecha se encuentra dentro de un rango de fechas.\n     * @example\n     * ```typescript\n     * validarFechaRange('2021-08-01', '2021-08-01', '2021-08-31');\n     * ```\n     */\n    public validarFechaRange(date: string, dateMin: string, dateMax: string) {\n        var x = new Date(date);\n        x.setDate(x.getDate() + 1);\n        console.log('X:', x.getTime());\n        var min = new Date(dateMin);\n        min.setDate(min.getDate() + 1);\n        console.log('MIN:', min.getTime());\n        var max = new Date(dateMax);\n        max.setDate(max.getDate() + 1);\n        console.log('MAX:', max.getTime());\n        if (x.getTime() >= min.getTime() && x.getTime() <= max.getTime()) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     *\n     * @param file\n     * @returns\n     * @description\n     * Convierte un archivo a base64.\n     * @example\n     * ```typescript\n     * convertFileToBase64(file);\n     * ```\n     *\n     */\n    public convertFileToBase64(file: File): Promise<string> {\n        return new Promise((resolve, reject) => {\n            const reader = new FileReader();\n            reader.readAsDataURL(file);\n            reader.onload = () => resolve(reader.result as string);\n            reader.onerror = (error) => reject(error);\n        });\n    }\n\n    /**\n     *\n     * @param file\n     * @returns\n     * @description\n     * Obtiene la extensión de un archivo.\n     * @example\n     * ```typescript\n     * getExtensionFile(file);\n     * ```\n     */\n    public getExtensionFile(file: File): string {\n        return file.name.split('.').pop() || '';\n    }\n\n    /**\n     *\n     * @param base64\n     * @returns\n     * @description\n     * Obtiene el tamaño de un archivo en base64.\n     * @example\n     * ```typescript\n     * getFileSizeBase64(base64);\n     * ```\n     */\n    public getFileSizeBase64(base64: string): number {\n        return Math.round((base64.length * 3) / 4);\n    }\n\n    /**\n     *\n     * @param base64\n     * @returns\n     * @description\n     * Valida si una cadena de texto es base64.\n     * @example\n     * ```typescript\n     * isBase64(base64);\n     * ```\n     */\n    public isBase64(base64: string): boolean {\n        return base64.includes('data:');\n    }\n    /**\n     *\n     * @param base64\n     * @param fileName\n     * @returns\n     * @description\n     * Convierte una cadena de texto base64 a un archivo.\n     * @example\n     * ```typescript\n     * convertBase64ToFile(base64, 'file.pdf');\n     * ```\n     */\n    public convertBase64ToFile(base64: string, fileName: string): File {\n        const arr = base64.split(',');\n        const mime = arr[0].match(/:(.*?);/)![1];\n        const bstr = atob(arr[1]);\n        let n = bstr.length;\n        const u8arr = new Uint8Array(n);\n        while (n--) {\n            u8arr[n] = bstr.charCodeAt(n);\n        }\n        return new File([u8arr], fileName, { type: mime });\n    }\n\n    /**\n     *\n     * @param file\n     * @param extensions\n     * @returns\n     * @description\n     * Valida si la extensión de un archivo es válida.\n     * @example\n     * ```typescript\n     * validateExtensionFile(file, ['jpg', 'jpeg', 'png', 'pdf', 'gif']);\n     * ```\n     */\n    public validateExtensionFile(\n        file: File,\n        extensions: string[] = ['jpg', 'jpeg', 'png', 'pdf', 'gif']\n    ): boolean {\n        const extension = this.getExtensionFile(file);\n        return extensions.includes(extension);\n    }\n    /**\n     *\n     * @param message\n     * @param title\n     * @param type\n     * @returns\n     * @description\n     * Muestra una alerta de error.\n     * @example\n     * ```typescript\n     * errorAlert('Error al guardar el registro');\n     * ```\n     */\n    public errorAlert(\n        message: string,\n        title: string = 'Error',\n        type: any = 'warning'\n    ) {\n        Swal.fire(title, message, type);\n    }\n    /**\n     *\n     * @param message\n     * @param title\n     * @param type\n     * @returns\n     * @description\n     * Muestra una alerta de éxito.\n     * @example\n     * ```typescript\n     * successAlert('Registro guardado correctamente');\n     * ```\n     */\n    public successAlert(\n        message: string,\n        title: string = 'success',\n        type: any = 'success'\n    ) {\n        Swal.fire(title, message, type);\n    }\n    /**\n     * @description\n     * Convierte un objeto JSON a un archivo Excel y lo descarga.\n     * @param json El objeto JSON a convertir.\n     * @param excelFileName El nombre del archivo Excel a descargar.\n     * @param bookType El tipo de archivo Excel a descargar.\n     * @returns void\n     * @example\n     * ```typescript\n     * exportAsExcelFile(json, 'file', 'xlsx');\n     * ```\n     */\n    public exportAsExcelFile(\n        json: any[],\n        excelFileName: string,\n        bookType?: XLSX.BookType | undefined | null\n    ): void {\n        const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\n\n        const Sheets = {\n            Hoja1: worksheet,\n        };\n\n        const SheetNames = ['Hoja1'];\n\n        const workbook: XLSX.WorkBook = {\n            Sheets: Sheets,\n            SheetNames: SheetNames,\n        };\n\n        if (bookType === undefined || bookType === null) {\n            bookType = 'xlsx';\n        }\n\n        const EXCEL_EXTENSION = '.' + bookType;\n        const excelBuffer: any = XLSX.write(workbook, {\n            bookType: bookType,\n            type: 'array',\n        });\n        this.saveAsExcelFile(excelBuffer, excelFileName, EXCEL_EXTENSION);\n    }\n\n    private saveAsExcelFile(\n        buffer: any,\n        fileName: string,\n        EXCEL_EXTENSION: string\n    ): void {\n        const data: Blob = new Blob([buffer], {\n            type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8',\n        });\n        FileSaver.saveAs(\n            data,\n            fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION\n        );\n    }\n    /**\n     *\n     * @param id\n     * @param btn\n     * @returns\n     * @description\n     * Copia el contenido de un elemento HTML al portapapeles.\n     * @example\n     * ```typescript\n     * <div id=\"copyable\" #copyable>\n     * <!-- Aquí va tu contenido HTML que deseas copiar -->\n     * <p>Contenido a copiar</p>\n     * </div>\n     * <button (click)=\"copyToClipboard_(copyable)\">Copiar al portapapeles</button>\n     * ```\n     */\n    public copyToClipboard_(id: string, btn: string) {\n        let inputBtn = document.getElementById(btn);\n        let aux: any = document.createElement('div');\n        aux.setAttribute('contentEditable', true);\n        aux.innerHTML = document.getElementById(id)!.innerHTML;\n        aux.setAttribute('onfocus', \"document.execCommand('selectAll',false,null)\");\n        document.body.appendChild(aux);\n        aux.focus();\n        document.execCommand('copy');\n\n        document.body.removeChild(aux);\n        inputBtn?.focus();\n        this.successAlert('Copiado al portapapeles');\n    }\n\n    private fileCnvert(content: string, type: string = 'application/pdf'): Blob {\n        const byteArray = new Uint8Array(\n            atob(content)\n                .split('')\n                .map((char) => char.charCodeAt(0))\n        );\n\n        return new Blob([byteArray], { type: type });\n    }\n    /**\n     *\n     * @param content\n     * @param type\n     * @param open\n     * @returns\n     * @description\n     * Abre el contenido de un archivo en una nueva pestaña.\n     * @example\n     * ```typescript\n     * openContentBlob('base64', 'application/pdf', true);\n     * ```\n     */\n    public openContentBlob(\n        content: string,\n        type: string = 'application/pdf',\n        open: boolean = true\n    ): string | void {\n        const file: Blob = this.fileCnvert(content, type);\n        const fileURL = window.URL.createObjectURL(file);\n\n        if (open) {\n            window.open(fileURL, '_blank');\n            // window.location.href = fileURL;\n        } else {\n            return fileURL;\n        }\n    }\n    /**\n     *\n     * @param blob\n     * @returns\n     * @description\n     * Convierte un archivo Blob a base64.\n     * @example\n     * ```typescript\n     * toBase64(blob);\n     * ```\n     */\n    public toBase64(blob: Blob): Observable<string> {\n        const reader = new FileReader();\n        reader.readAsDataURL(blob);\n        return fromEvent(reader, 'load').pipe(\n            map(() => (reader.result as string).split(',')[1])\n        );\n    }\n\n    _options: Options = {\n        parseNull: true,\n        parseUndefined: true,\n        parseBoolean: true,\n        parseNumber: true,\n    };\n    /**\n     *\n     * @param target\n     * @param options\n     * @returns\n     * @description\n     * Parsea un objeto o cadena de texto a un objeto JSON.\n     * @example\n     * ```typescript\n     * parse('{\"name\": \"John\", \"age\": \"30\"}');\n     * ```\n     */\n    public parse = (\n        target: ParsedQuery,\n        options: Options = this._options\n    ): ParsedQuery => {\n        switch (typeof target) {\n            case 'string':\n                if (target === '') {\n                    return '';\n                } else if (options.parseNull && target === 'null') {\n                    return null;\n                } else if (options.parseUndefined && target === 'undefined') {\n                    return undefined;\n                } else if (\n                    options.parseBoolean &&\n                    (target === 'true' || target === 'false')\n                ) {\n                    return target === 'true';\n                } else if (options.parseNumber && !isNaN(Number(target))) {\n                    return Number(target);\n                } else {\n                    return target;\n                }\n            case 'object':\n                if (Array.isArray(target)) {\n                    return target.map((x) => this.parse(x, options));\n                } else {\n                    const obj = target;\n                    Object.keys(obj).map(\n                        (key) => (obj[key] = this.parse(target[key], options))\n                    );\n                    return obj;\n                }\n            default:\n                return target;\n        }\n    };\n}\n","import {\n    Component,\n    Input,\n    OnChanges,\n    OnInit,\n    SimpleChanges,\n} from '@angular/core';\nimport {\n    DownloadType,\n    LenguageTable,\n    TableSorter,\n} from '../../interfaces/ui-table.interface';\nimport { NgxDanisoftUtilsService } from '../../services/ngx-danisoft-utils.service';\nimport { UtilsSpinnerService } from '../../services/utils-spinner.service';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UtilsPaginationComponent } from '../utils-pagination/utils-pagination.component';\nimport { UtilsCustomCurrencyPipe } from '../../pipes/utils-customCurrency.pipe';\nimport { UtilsPaginatePipe } from '../../pipes/utlils-paginate.pipe';\n\n@Component({\n    selector: 'utils-ui-table-sorter',\n    standalone: true,\n    imports: [\n        CommonModule,\n        FormsModule,\n        UtilsPaginationComponent,\n        UtilsCustomCurrencyPipe,\n        UtilsPaginatePipe\n    ],\n    templateUrl: './utils-ui-table-sorter.component.html',\n    styleUrls: ['./utils-ui-table-sorter.component.scss'],\n})\nexport class UtilsUiTableSorterComponent implements OnInit, OnChanges {\n    constructor(\n        private utilitiesservice: NgxDanisoftUtilsService,\n        private spinner: UtilsSpinnerService\n    ) { }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        //vaciamos los filtros\n        this.tableConfig.columns.forEach((column: any) => {\n            column.filter = '';\n        });\n    }\n    @Input() darkMode: boolean = false;\n    @Input() dataFilter: any[] = [];\n    @Input() tableConfig: TableSorter = {\n        data: [],\n        dataFilter: [],\n        pageOfItems: [],\n        textDownload: 'Download',\n        formatDownload: 'xlsx',\n        classDownload: 'btn btn-primary',\n        iconDownload: 'fa fa-download',\n        downloadOption: false,\n        downloadText: 'Download',\n        isPaginate: true,\n        isFilter: true,\n        sorting: true,\n        buttonsDownload: true,\n        buttonsInitial: true,\n        pageSize: 8,\n        cssClass: '',\n        buttons: [],\n        columns: [\n            {\n                title: '',\n                class: '',\n                name: '',\n                filter: '',\n                checkColumn: false,\n                format: {\n                    type: 'text',\n                    format: '',\n                },\n            },\n        ],\n        columnSelector: false,\n        lenguage: 'es',\n        sticky: true,\n    };\n\n    lenguagetable: LenguageTable = {\n        buttonName: '',\n        buttonSelected: '',\n        buttonFilter: '',\n        buttonAll: '',\n        nextLabel: '',\n        previousLabel: '',\n        colunSelector: '',\n        til_1: '',\n        til_2: '',\n        til_3: '',\n        til_4: '',\n        options: '',\n        tr_info: '',\n    };\n\n    sortProperty: string = this.tableConfig.columns[0].name || '';\n    sortOrder = -1;\n\n    page: number = 1;\n    p: number = 1;\n    totalPage: number = 0;\n    _ItemsPage: number = 0;\n\n    checkColumnsAuto: boolean = true;\n    checkColumnsOption: boolean = true;\n    downloadOption: boolean = false;\n\n    public get ItemsPage(): number {\n        this.totalPage = this.tableConfig.data.length;\n        let count = this.tableConfig.pageSize || 8 * this.page;\n        if (count > this.totalPage) {\n            return this.tableConfig.pageSize! - Math.abs(this.totalPage - count);\n        } else {\n            return this.tableConfig.pageSize!;\n        }\n    }\n\n    ngOnInit(): void {\n        this.sortOrder = -1;\n        this.tableConfig.pageOfItems = this.tableConfig.data;\n        this._ItemsPage = this.ItemsPage;\n        if (this.tableConfig.lenguage === 'en') {\n            this.lenguagetable.buttonName = 'Download Data';\n            this.lenguagetable.buttonSelected = 'Download Selection';\n            this.lenguagetable.buttonFilter = 'Download Filter';\n            this.lenguagetable.buttonAll = 'Download all';\n            this.lenguagetable.nextLabel = 'Next';\n            this.lenguagetable.previousLabel = 'Previous';\n            this.lenguagetable.colunSelector = 'Select Column';\n            this.lenguagetable.til_1 = 'showing';\n            this.lenguagetable.til_2 = 'of';\n            this.lenguagetable.til_3 = 'on';\n            this.lenguagetable.til_4 = 'page';\n            this.lenguagetable.options = 'OPTIONS';\n            this.lenguagetable.tr_info = 'No data to display';\n        } else {\n            this.lenguagetable.buttonName = 'Descargar Datos';\n            this.lenguagetable.buttonSelected = 'Descargar Selección';\n            this.lenguagetable.buttonFilter = 'Descargar Filtro';\n            this.lenguagetable.buttonAll = 'Descargar Todo';\n            this.lenguagetable.nextLabel = 'Siguiente';\n            this.lenguagetable.previousLabel = 'Anterior';\n            this.lenguagetable.colunSelector = 'Seleccionar Columna';\n            this.lenguagetable.til_1 = 'mostrando';\n            this.lenguagetable.til_2 = 'de';\n            this.lenguagetable.til_3 = 'en';\n            this.lenguagetable.til_4 = 'página';\n            this.lenguagetable.options = 'OPCIONES';\n            this.lenguagetable.tr_info = 'No hay datos para mostrar';\n        }\n    }\n    download(type: DownloadType = 'all') {\n        this.spinner.show();\n\n        let _dataDownload: any[] = [];\n\n        if (type === 'all') {\n            _dataDownload = this.tableConfig.dataFilter;\n        } else if (type === 'filter') {\n            let _dataFilter: any[] = this.tableConfig.data;\n            _dataFilter.forEach((item: any) => {\n                let _item: any = {};\n                this.tableConfig.columns.forEach((column: any) => {\n                    if (column.checkColumn) {\n                        _item[column.name] = item[column.name];\n                    }\n                });\n                _dataDownload.push(_item);\n            });\n        } else {\n            //recorremos la data en las columnas que esten seleccionadas\n            this.tableConfig.pageOfItems?.forEach((item: any) => {\n                let _item: any = {};\n                this.tableConfig.columns.forEach((column: any) => {\n                    if (column.checkColumn) {\n                        _item[column.name] = item[column.name];\n                    }\n                });\n                _dataDownload.push(_item);\n            });\n        }\n        this.utilitiesservice.exportAsExcelFile(\n            _dataDownload,\n            this.tableConfig.textDownload || 'download',\n            this.tableConfig.formatDownload || 'xlsx'\n        );\n        this.spinner.hide();\n    }\n\n    sortBy(property: string) {\n        this.sortOrder = property === this.sortProperty ? this.sortOrder * -1 : 1;\n        this.sortProperty = property;\n        this.tableConfig.data = [\n            ...this.tableConfig.data.sort((a: any, b: any) => {\n                // sort comparison function\n                let result = 0;\n                if (a[property] < b[property]) {\n                    result = -1;\n                }\n                if (a[property] > b[property]) {\n                    result = 1;\n                }\n                return result * this.sortOrder;\n            }),\n        ];\n    }\n\n    sortIcon(property: string) {\n        if (property === this.sortProperty) {\n            return this.sortOrder === 1 ? '☝️' : '👇';\n        }\n        return '';\n    }\n    // Método para filtrar las columnas\n    filterByColumns() {\n        // Restablecer los datos de la tabla a su estado original sin filtrar\n        this.tableConfig.data = this.tableConfig.dataFilter;\n\n        // Crear una copia de los datos para trabajar con ellos sin mutar el original\n        let _data: any[] = this.tableConfig.dataFilter.slice();\n\n        // Filtrar las columnas que tienen algún valor en el filtro\n        let _filterEmpty = this.tableConfig.columns.filter(\n            (column: any) => column.filter && column.filter.trim() !== ''\n        );\n\n        // Si no hay filtros aplicados, devolver los datos originales\n        if (_filterEmpty.length === 0) {\n            this.tableConfig.data = this.tableConfig.dataFilter;\n        } else {\n            // Recorrer cada columna con un filtro aplicado\n            this.tableConfig.columns.forEach((column: any) => {\n                if (column.filter && column.filter.trim() !== '') {\n                    let filterValue: string = column.filter.trim().toLowerCase();\n\n                    // Aplicar el filtro a los datos\n                    _data = _data.filter((item: any) => {\n                        let itemValue: string = (item[column.name]?.toString() || '').toLowerCase();\n                        return this.applyFilter(itemValue, filterValue);\n                    });\n                }\n            });\n\n            // Actualizar los datos de la tabla con los datos filtrados\n            this.tableConfig.data = _data;\n        }\n\n        // Reiniciar la paginación\n        this.page = 1;\n        this.p = 1;\n    }\n\n    // Método para aplicar el filtro a un valor de ítem\n    applyFilter(itemValue: string, filterValue: string): boolean {\n        // Definición de expresiones regulares para distintos tipos de filtrado\n        const regex = {\n            regex: /^\\/((?:\\\\\\/|[^\\/])+)\\/([migyu]{0,5})?$/, // regex para detectar expresiones regulares\n            child: /tablesorter-childRow/, // clase para las filas hijas de la tabla\n            filtered: /filtered/, // clase para las filas filtradas (ocultas)\n            type: /undefined|number/, // tipos a verificar\n            exact: /(^[\\\"\\'=]+)|([\\\"\\'=]+$)/g, // coincidencia exacta (permitir '==')\n            operators: /[<>=]=?/g, // operadores de comparación\n            query: '(q|query)', // reemplazar consultas de filtro\n            wild01: /\\?/g, // comodín de coincidencia 0 o 1\n            wild0More: /\\*/g, // comodín de coincidencia 0 o más\n            quote: /\\\"/g, // comillas\n            isNeg1: /(>=?\\s*-\\d)/, // verificar negativos 1\n            isNeg2: /(<=?\\s*\\d)/, // verificar negativos 2\n        };\n\n        let exactMatch = false;\n\n        // Detectar si el término de búsqueda está entre comillas dobles\n        if (regex.exact.test(filterValue)) {\n            exactMatch = true;\n            filterValue = filterValue.replace(regex.exact, '');\n        }\n\n        // Si es una coincidencia exacta\n        if (exactMatch) {\n            return itemValue === filterValue;\n        }\n\n        // Detectar si el filtro contiene un operador de comparación (>, <, >=, <=, ==)\n        if (regex.operators.test(filterValue)) {\n            let operatorMatch = filterValue.match(regex.operators);\n            if (operatorMatch) {\n                let operator = operatorMatch[0];\n                let value = filterValue.split(operator)[1].trim();\n\n                // Convertir el valor del filtro a número o fecha\n                let itemNumber = parseFloat(itemValue);\n                let filterNumber = parseFloat(value);\n                let itemDate = new Date(itemValue);\n                let filterDate = new Date(value);\n\n                // Verificar si los valores son numéricos antes de comparar\n                if (!isNaN(itemNumber) && !isNaN(filterNumber)) {\n                    switch (operator) {\n                        case '>':\n                            return itemNumber > filterNumber;\n                        case '<':\n                            return itemNumber < filterNumber;\n                        case '>=':\n                            return itemNumber >= filterNumber;\n                        case '<=':\n                            return itemNumber <= filterNumber;\n                        case '==':\n                            return itemNumber == filterNumber;\n                    }\n                }\n\n                // Verificar si los valores son fechas válidas antes de comparar\n                if (!isNaN(itemDate.getTime()) && !isNaN(filterDate.getTime())) {\n                    switch (operator) {\n                        case '>':\n                            return itemDate > filterDate;\n                        case '<':\n                            return itemDate < filterDate;\n                        case '>=':\n                            return itemDate >= filterDate;\n                        case '<=':\n                            return itemDate <= filterDate;\n                        case '==':\n                            return itemDate.getTime() === filterDate.getTime();\n                    }\n                }\n            }\n        }\n\n        // Filtro de comodines\n        let wildcard = filterValue\n            .replace(regex.wild01, '.')\n            .replace(regex.wild0More, '.*');\n        let wildcardRegex = new RegExp(wildcard, 'i');\n        return wildcardRegex.test(itemValue);\n    }\n    // Método para filtrar las columnas old\n    filterByColumns_old() {\n        // Inicialmente, restablecemos los datos de la tabla a su estado original sin filtrar.\n        this.tableConfig.data = this.tableConfig.dataFilter;\n\n        // Creamos una copia de los datos para trabajar con ellos sin mutar el original.\n        let _data: any[] = this.tableConfig.dataFilter.slice();\n\n        // Filtramos las columnas que tienen algún valor en el filtro.\n        let _filterEmpty = this.tableConfig.columns.filter(\n            (column: any) => column.filter && column.filter.trim() !== ''\n        );\n\n        // Si no hay filtros aplicados, devolvemos los datos originales.\n        if (_filterEmpty.length === 0) {\n            this.tableConfig.data = this.tableConfig.dataFilter;\n        } else {\n            // Recorremos cada columna con un filtro aplicado.\n            this.tableConfig.columns.forEach((column: any) => {\n                if (column.filter && column.filter.trim() !== '') {\n                    let filterValue = column.filter.trim().toLowerCase();\n\n                    // Detectamos si el filtro contiene un operador de comparación (>, <, >=, <=, =).\n                    let filterOperatorMatch = filterValue.match(/(>=|<=|>|<|=)/);\n                    if (filterOperatorMatch) {\n                        let operator = filterOperatorMatch[0];\n                        let value = filterValue.split(operator)[1].trim();\n\n                        // Convertimos el valor filtrado y los valores de la columna a números si es posible\n                        if (!isNaN(parseFloat(value))) {\n                            let filterNumber = parseFloat(value);\n                            _data = _data.filter((item: any) => {\n                                let itemValue = parseFloat(item[column.name] || '');\n\n                                if (isNaN(itemValue)) return false; // Si el valor del ítem no es un número, no lo incluimos\n                                switch (operator) {\n                                    case '>':\n                                        return itemValue > filterNumber;\n                                    case '<':\n                                        return itemValue < filterNumber;\n                                    case '>=':\n                                        return itemValue >= filterNumber;\n                                    case '<=':\n                                        return itemValue <= filterNumber;\n                                    case '=':\n                                        return itemValue === filterNumber;\n                                    default:\n                                        return false;\n                                }\n                            });\n                        } else if (!isNaN(Date.parse(value))) {\n                            // Si el valor del filtro es una fecha\n                            let filterDate = Date.parse(value);\n                            _data = _data.filter((item: any) => {\n                                let itemDate = Date.parse(item[column.name] || '');\n                                if (isNaN(itemDate)) return false; // Si el valor del ítem no es una fecha, no lo incluimos\n                                switch (operator) {\n                                    case '>':\n                                        return itemDate > filterDate;\n                                    case '<':\n                                        return itemDate < filterDate;\n                                    case '>=':\n                                        return itemDate >= filterDate;\n                                    case '<=':\n                                        return itemDate <= filterDate;\n                                    case '=':\n                                        return itemDate === filterDate;\n                                    default:\n                                        return false;\n                                }\n                            });\n                        }\n                    } else {\n                        // Filtro de cadena.\n                        let filterWords = filterValue.split(' ');\n                        _data = _data.filter((item: any) => {\n                            return filterWords.some((word: string) =>\n                                (item[column.name]?.toString() || '').toLowerCase().includes(word)\n                            );\n                        });\n                    }\n                }\n            });\n\n            // Actualizamos los datos de la tabla con los datos filtrados.\n            this.tableConfig.data = _data;\n        }\n\n        // Reiniciamos la paginación.\n        this.page = 1;\n        this.p = 1;\n    }\n\n    selectColumnsAuto(value: boolean) {\n        if (value === true) {\n            this.tableConfig.columns.map((column: any) => {\n                return (column.checkColumn = true);\n            });\n            this.checkColumnsOption = true;\n        }\n    }\n\n    pageChanged(p: number) {\n        this.p = p;\n        this.page = p;\n    }\n    downloadOptionClick() {\n        this.downloadOption = !this.downloadOption;\n    }\n\n    // Función para manejar cambios en los inputs\n    onInputChange(item: any, column: any, value: any) {\n        item[column.name] = value;\n        //console.log('value::', value);\n        //console.log(item);\n    }\n}\n","<div class=\"row\">\n    <div class=\"col-12\" *ngIf=\"tableConfig.data.length > 0 && tableConfig.buttonsDownload == true\">\n        <!-- Example split danger button -->\n        <div class=\"text-right\" style=\"width: 100%;\">\n            <div class=\"btn-group btn-download\">\n                <button type=\"button\" class=\"{{tableConfig.classDownload}}\" (click)=\"download()\">\n                    <i class=\"{{tableConfig.iconDownload}}\"></i>\n                    <ng-container *ngIf=\"tableConfig.downloadOption === false\">\n                        {{tableConfig.downloadText}}\n                    </ng-container>\n                    <ng-container *ngIf=\"tableConfig.downloadOption === true\">\n                        {{lenguagetable.buttonName}}\n                    </ng-container>\n                </button>\n                <ng-container *ngIf=\"tableConfig.downloadOption\">\n                    <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" (click)=\"downloadOptionClick()\">\n                        <i class=\"fas fa-chevron-down\"></i>\n                    </button>\n                    <ul *ngIf=\"downloadOption\" class=\"dropdown-menu show\"\n                        style=\"position: absolute; inset: 0px auto auto 0px; margin: 0px; transform: translate(5px, 40px);\"\n                        data-popper-placement=\"bottom-start\">\n                        <li class=\"pointer\" *ngIf=\"tableConfig.columnSelector == true\">\n                            <a class=\"dropdown-item\" (click)=\"download('selection')\">\n                                <i class=\"fa fa-file-archive-o fas fa-file-archive\"></i>\n                                {{lenguagetable.buttonSelected}}\n                            </a>\n                        </li>\n                        <li>\n                            <hr class=\"dropdown-divider\">\n                        </li>\n                        <li class=\"pointer\" *ngIf=\"tableConfig.isFilter == true\">\n                            <a class=\"dropdown-item\" (click)=\"download('filter')\">\n                                <i class=\"fa fa-file-archive-o fas fa-file-archive\"></i>\n                                {{lenguagetable.buttonFilter}}\n                            </a>\n                        </li>\n                        <li class=\"pointer\">\n                            <a class=\"dropdown-item\" (click)=\"download()\">\n                                <i class=\"fa fa-file-archive-o fas fa-file-archive\"></i>\n                                {{lenguagetable.buttonAll}}\n                            </a>\n                        </li>\n                    </ul>\n                </ng-container>\n            </div>\n        </div>\n    </div>\n    <div *ngIf=\"tableConfig.columnSelector\" class=\"col-12 columnSelectorWrapper\">\n        <input id=\"colSelect1\" type=\"checkbox\" class=\"hidden\">\n        <label class=\"btn btn-outline-primary\" for=\"colSelect1\">\n            <i class=\"fa fa-th\"></i>\n            {{lenguagetable.colunSelector}}\n        </label>\n        <div id=\"columnSelector\" class=\"columnSelector\">\n            <label>\n                <input type=\"checkbox\" data-column=\"auto\" class=\"checked\" [(ngModel)]=\"checkColumnsAuto\"\n                    (ngModelChange)=\"selectColumnsAuto($event)\">\n                Auto:\n            </label>\n            <div class=\"columnSelectorScroll\">\n                <label [ngClass]=\"{'disabled': checkColumnsAuto}\"\n                    *ngFor=\"let column of tableConfig.columns; let i = index\">\n                    <input type=\"checkbox\" attr.data-column=\"{{i}}\" class=\"checked\" [disabled]=\"checkColumnsAuto\"\n                        [(ngModel)]=\"column.checkColumn\">\n                    {{column.title}}\n                </label>\n                <label [ngClass]=\"{'disabled': checkColumnsAuto}\">\n                    <input type=\"checkbox\" data-column=\"auto\" class=\"checked\" [(ngModel)]=\"checkColumnsOption\"\n                        [disabled]=\"checkColumnsAuto\">\n                    OPTION\n                </label>\n            </div>\n        </div>\n    </div>\n    <div class=\"overflowing_table\" [ngClass]=\"{'sticky-table': tableConfig.sticky}\">\n        <div *ngIf=\"tableConfig.caption != undefined\" class=\"pagination_info\">\n            <h4 class=\"mb-0 caption-table\">{{tableConfig.caption}}</h4>\n        </div>\n        <div *ngIf=\"tableConfig.isPaginate\" class=\"pagination_info\">\n            {{lenguagetable.til_1}}\n            <b><i>{{ItemsPage}}</i></b>\n            {{lenguagetable.til_2}}\n            <b><i>{{totalPage}}</i></b>\n            {{lenguagetable.til_3}} {{lenguagetable.til_4}}\n            <b><i>{{p}}</i></b>\n        </div>\n        <div [ngClass]=\"{'table-container': tableConfig.sticky}\">\n            <table\n                class=\"table table-striped table-bordered master-hand centerText tablesorter tablesorter-blue {{tableConfig.cssClass}}\">\n                <thead [ngClass]=\"{'sticky-thead': tableConfig.sticky}\">\n                    <tr class=\"invoice_header\">\n                        <th [ngClass]=\"{'hidden': !checkColumnsOption}\" class=\"text-center th th-buton\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === true\">\n                            {{lenguagetable.options}}\n                        </th>\n                        <th *ngFor=\"let column of tableConfig.columns; let i = index\" attr.data-column=\"{{i}}\"\n                            [ngClass]=\"{'hidden': !column.checkColumn}\"\n                            (click)=\"tableConfig.sorting === true ? sortBy(column.name) : ''\"\n                            class=\"th tablesorter-header tablesorter-headerUnSorted {{column.class}}\" tabindex=\"0\"\n                            scope=\"col\" role=\"columnheader\" aria-disabled=\"false\" unselectable=\"on\" aria-sort=\"none\"\n                            attr.aria-label=\"{{column.name}}\" style=\"user-select: none;\">\n                            <div class=\"tablesorter-wrapper\" style=\"position:relative;height:100%;width:100%\">\n                                <div class=\"tablesorter-header-inner\">{{column.title}} {{tableConfig.sorting === true ?\n                                    sortIcon(column.name) : ''}}</div>\n                            </div>\n                        </th>\n                        <th [ngClass]=\"{'hidden': !checkColumnsOption}\" class=\"text-center th th-buton\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === false\">\n                            {{lenguagetable.options}}\n                        </th>\n                    </tr>\n                    <tr *ngIf=\"tableConfig.isFilter\" role=\"search\" class=\"tablesorter-filter-row tablesorter-ignoreRow\">\n                        <td [ngClass]=\"{'hidden': !checkColumnsOption}\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === true\">\n                        </td>\n                        <td [ngClass]=\"{'hidden': !column.checkColumn}\" attr.data-column=\"{{i}}\"\n                            *ngFor=\"let column of tableConfig.columns; let i = index\">\n                            <input type=\"search\" [(ngModel)]=\"column.filter\" (ngModelChange)=\"filterByColumns()\"\n                                placeholder=\"\" class=\"tablesorter-filter\" attr.data-column=\"{{i}}\" aria-label=\"Filter\">\n                        </td>\n                        <td [ngClass]=\"{'hidden': !checkColumnsOption}\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === false\">\n                        </td>\n                    </tr>\n                </thead>\n                <tbody *ngIf=\"tableConfig.isPaginate\">\n                    <tr [ngClass]=\"{'pointer': tableConfig.fillForm}\"\n                        (click)=\"tableConfig.fillForm ? tableConfig.fillForm(item) : ''\"\n                        *ngFor=\"let item of tableConfig.data | paginate: { itemsPerPage: _ItemsPage, currentPage: p }\">\n                        <td [ngClass]=\"{'hidden': !checkColumnsOption}\" class=\"text-center\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === true\">\n                            <button *ngFor=\"let button of tableConfig.buttons\" type=\"button\"\n                                class=\"btn btn-xs btn-{{button.type}}\" [ngClass]=\"{'full-width': button.text}\"\n                                attr.title=\"{{button.title}}\" (click)=\"button?.onclick(item)\">\n                                <ng-container *ngIf=\"!button.text; else textTemplate\">\n                                    <span class=\"{{button.icon}}\" *ngIf=\"button.icon\"></span>\n                                    <span class=\"fa fa-bars\" *ngIf=\"!button.icon\"></span>\n                                </ng-container>\n                                <ng-template #textTemplate>\n                                    {{button.text}}\n                                </ng-template>\n                            </button>\n                        </td>\n                        <td [ngStyle]=\"column.conditionalStyle ? column.conditionalStyle(item[column.name], column.format?.type) : {}\"\n                            [ngClass]=\"{'hidden': !column.checkColumn}\"\n                            class=\"{{item.classTd ? item.classTd : column.classItems}}\"\n                            *ngFor=\"let column of tableConfig.columns\"\n                            [ngClass]=\"column.conditionalClassTD ? column.conditionalClassTD(item[column.name], column.format?.type) : ''\">\n                            <ng-container *ngIf=\"!column.inputType?.enabled\">\n                                <span *ngIf=\"column.link === undefined\"\n                                    [ngClass]=\"column.conditionalClass ? column.conditionalClass(item[column.name], column.format?.type) : ''\">\n                                    <ng-container [ngSwitch]=\"column.format?.type\">\n                                        <ng-container *ngSwitchCase=\"'date'\">{{item[column.name] | date:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'number'\">{{item[column.name] | number:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'currency'\">{{item[column.name] | customCurrency:\n                                            column.format?.format:'symbol':'1.1-2'}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'percent'\">{{item[column.name] | percent:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchDefault>{{item[column.name]}}</ng-container>\n                                    </ng-container>\n                                </span>\n                                <span *ngIf=\"column.link?.isLink == true\" (click)=\"column.link?.onclick(item)\"\n                                    attr.title=\"{{column.link?.title}}\" class=\"clickable\"\n                                    [ngClass]=\"column.conditionalClass ? column.conditionalClass(item[column.name], column.format?.type) : ''\">\n                                    <ng-container [ngSwitch]=\"column.format?.type\">\n                                        <ng-container *ngSwitchCase=\"'date'\">{{item[column.name] | date:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'number'\">{{item[column.name] | number:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'currency'\">{{item[column.name] | customCurrency:\n                                            column.format?.format:'symbol':'1.1-2'}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'percent'\">{{item[column.name] | percent:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchDefault>{{item[column.name]}}</ng-container>\n                                    </ng-container>\n                                </span>\n                            </ng-container>\n                            <ng-container *ngIf=\"column.inputType?.enabled\">\n                                <input *ngIf=\"column.inputType?.type === 'text'\" type=\"text\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'number'\" type=\"number\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'date'\" type=\"date\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'email'\" type=\"email\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'password'\" type=\"password\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'tel'\" type=\"tel\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'checkbox'\" type=\"checkbox\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\" class=\"custom-checkbox\" />\n                            </ng-container>\n                        </td>\n                        <td [ngClass]=\"{'hidden': !checkColumnsOption}\" class=\"text-center t-option\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === false\">\n                            <button *ngFor=\"let button of tableConfig.buttons\" type=\"button\"\n                                class=\"btn btn-xs btn-{{button.type}}\" [ngClass]=\"{'full-width': button.text}\"\n                                attr.title=\"{{button.title}}\" (click)=\"button?.onclick(item)\">\n                                <ng-container *ngIf=\"!button.text; else textTemplate\">\n                                    <span class=\"{{button.icon}}\" *ngIf=\"button.icon\"></span>\n                                    <span class=\"fa fa-bars\" *ngIf=\"!button.icon\"></span>\n                                </ng-container>\n                                <ng-template #textTemplate>\n                                    {{button.text}}\n                                </ng-template>\n                            </button>\n                        </td>\n                    </tr>\n                    <tr *ngIf=\"tableConfig.data.length == 0\">\n                        <td attr.colspan=\"{{tableConfig.columns.length}}\" class=\"text-center\">\n                            <span\n                                class=\"text-muted {{darkMode === true ? '' : 'text-black'}}\">{{lenguagetable.tr_info}}</span>\n                        </td>\n                    </tr>\n                </tbody>\n                <tbody *ngIf=\"!tableConfig.isPaginate\">\n                    <tr [ngClass]=\"{'pointer': tableConfig.fillForm}\"\n                        (click)=\"tableConfig.fillForm ? tableConfig.fillForm(item) : ''\"\n                        *ngFor=\"let item of tableConfig.data\">\n                        <td [ngClass]=\"{'hidden': !checkColumnsOption}\" class=\"text-center t-option\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === true\">\n                            <button *ngFor=\"let button of tableConfig.buttons\" type=\"button\"\n                                class=\"btn btn-xs btn-{{button.type}}\" [ngClass]=\"{'full-width': button.text}\"\n                                attr.title=\"{{button.title}}\" (click)=\"button?.onclick(item)\">\n                                <ng-container *ngIf=\"!button.text; else textTemplate\">\n                                    <span class=\"{{button.icon}}\" *ngIf=\"button.icon\"></span>\n                                    <span class=\"fa fa-bars\" *ngIf=\"!button.icon\"></span>\n                                </ng-container>\n                                <ng-template #textTemplate>\n                                    {{button.text}}\n                                </ng-template>\n                            </button>\n                        </td>\n                        <td [ngStyle]=\"column.conditionalStyle ? column.conditionalStyle(item[column.name], column.format?.type) : {}\"\n                            [ngClass]=\"{'hidden': !column.checkColumn}\"\n                            class=\"{{item.classTd ? item.classTd : column.classItems}}\"\n                            *ngFor=\"let column of tableConfig.columns\"\n                            [ngClass]=\"column.conditionalClassTD ? column.conditionalClassTD(item[column.name], column.format?.type) : ''\">\n                            <ng-container *ngIf=\"!column.inputType?.enabled\">\n                                <span *ngIf=\"column.link === undefined\"\n                                    [ngClass]=\"column.conditionalClass ? column.conditionalClass(item[column.name], column.format?.type) : ''\">\n                                    <ng-container [ngSwitch]=\"column.format?.type\">\n                                        <ng-container *ngSwitchCase=\"'date'\">{{item[column.name] | date:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'number'\">{{item[column.name] | number:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'currency'\">{{item[column.name] | customCurrency:\n                                            column.format?.format:'symbol':'1.1-2'}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'percent'\">{{item[column.name] | percent:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchDefault>{{item[column.name]}}</ng-container>\n                                    </ng-container>\n                                </span>\n                                <span *ngIf=\"column.link?.isLink == true\" (click)=\"column.link?.onclick(item)\"\n                                    attr.title=\"{{column.link?.title}}\"\n                                    class=\"{{darkMode === true ? 'clickable-white' : 'clickable'}}\"\n                                    [ngClass]=\"column.conditionalClass ? column.conditionalClass(item[column.name], column.format?.type) : ''\">\n                                    <ng-container [ngSwitch]=\"column.format?.type\">\n                                        <ng-container *ngSwitchCase=\"'date'\">{{item[column.name] | date:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'number'\">{{item[column.name] | number:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'currency'\">{{item[column.name] | customCurrency:\n                                            column.format?.format:'symbol':'1.1-2'}}</ng-container>\n                                        <ng-container *ngSwitchCase=\"'percent'\">{{item[column.name] | percent:\n                                            column.format?.format}}</ng-container>\n                                        <ng-container *ngSwitchDefault>{{item[column.name]}}</ng-container>\n                                    </ng-container>\n                                </span>\n                            </ng-container>\n                            <ng-container *ngIf=\"column.inputType?.enabled\">\n                                <input *ngIf=\"column.inputType?.type === 'text'\" type=\"text\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'number'\" type=\"number\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'date'\" type=\"date\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'email'\" type=\"email\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'password'\" type=\"password\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'tel'\" type=\"tel\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\"\n                                    class=\"form-control valInput {{column.inputType?.class}}\" />\n                                <input *ngIf=\"column.inputType?.type === 'checkbox'\" type=\"checkbox\"\n                                    [(ngModel)]=\"item[column.name]\"\n                                    (ngModelChange)=\"onInputChange(item, column, $event)\" class=\"custom-checkbox\" />\n                            </ng-container>\n                        </td>\n                        <td [ngClass]=\"{'hidden': !checkColumnsOption}\" class=\"text-center t-option\"\n                            *ngIf=\"tableConfig.buttons.length > 0 && tableConfig?.fillForm === undefined && tableConfig?.buttonsInitial === false\">\n\n                            <button *ngFor=\"let button of tableConfig.buttons\" type=\"button\"\n                                class=\"btn btn-xs btn-{{button.type}}\" [ngClass]=\"{'full-width': button.text}\"\n                                attr.title=\"{{button.title}}\" (click)=\"button?.onclick(item)\">\n                                <ng-container *ngIf=\"!button.text; else textTemplate\">\n                                    <span class=\"{{button.icon}}\" *ngIf=\"button.icon\"></span>\n                                    <span class=\"fa fa-bars\" *ngIf=\"!button.icon\"></span>\n                                </ng-container>\n                                <ng-template #textTemplate>\n                                    {{button.text}}\n                                </ng-template>\n                            </button>\n                        </td>\n                    </tr>\n                    <tr *ngIf=\"tableConfig.data.length == 0\">\n                        <td attr.colspan=\"{{tableConfig.columns.length}}\" class=\"text-center\">\n                            <span\n                                class=\"text-muted {{darkMode === true ? '' : 'text-black'}}\">{{lenguagetable.tr_info}}</span>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"text-right\" *ngIf=\"tableConfig.isPaginate\">\n            <utils-pagination [responsive]=\"true\" (pageChange)=\"pageChanged($event)\"\n                [previousLabel]=\"lenguagetable.previousLabel\" [nextLabel]=\"lenguagetable.nextLabel\">\n            </utils-pagination>\n        </div>\n    </div>\n</div>","import { AfterViewInit, Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n    selector: '[tablesorter]',\n    standalone: true\n})\nexport class TablesorterDirective implements AfterViewInit {\n    @Input() filter: boolean = true;\n    @Input() sticky: boolean = true;\n    @Input() sorting: boolean = false;\n\n    private headers: HTMLElement[] = [];\n    private sortDirections: { [key: number]: 'asc' | 'desc' } = {};\n    private currentSortColumn: number | null = null;\n    private filterInputs: HTMLInputElement[] = [];\n\n    // Expresiones regulares utilizadas en el filtrado\n    private regex = {\n        regex: /^\\/((?:\\\\\\/|[^\\/])+)\\/([migyu]{0,5})?$/,\n        child: /tablesorter-childRow/,\n        filtered: /filtered/,\n        type: /undefined|number/,\n        exact: /(^[\\\"\\'=]+)|([\\\"\\'=]+$)/g,\n        operators: /[<>=]=?/g,\n        operTest: /^[<>]=?/,\n        gtTest: />/,\n        gteTest: />=/,\n        ltTest: /</,\n        lteTest: /<=/,\n        notTest: /^\\!/,\n        query: '(q|query)',\n        wild01: /\\?/g,\n        wild0More: /\\*/g,\n        wildOrTest: /[\\?\\*\\|]/,\n        wildTest: /\\?\\*/,\n        fuzzyTest: /^~/,\n        andTest: /\\s+(&|&&)\\s+/i,\n        andSplit: /(?:\\s+(?:&|&&)\\s+)/gi,\n        orTest: /(\\||\\s+or\\s+)/i,\n        orSplit: /(?:\\||\\s+or\\s+)/gi,\n        toTest: /\\s+(-|to|hasta)\\s+/i,\n        toSplit: /(?:\\s+(?:-|to|hasta)\\s+)/gi,\n        quote: /\\\"/g,\n        isNeg1: /(>=?\\s*-\\d)/,\n        isNeg2: /(<=?\\s*\\d)/,\n        alreadyFiltered: /(\\s+(-|to|hasta)\\s+|\\s+(or|y)\\s+|\\|)/i,\n    };\n\n    constructor(private el: ElementRef, private renderer: Renderer2) { }\n    ngAfterViewInit() {\n        setTimeout(() => {\n            this.initializeTableSorter();\n        });\n    }\n\n    private initializeTableSorter() {\n        this.addTableClasses();\n        const headerRow = this.el.nativeElement.querySelector('thead tr');\n        if (!headerRow) return;\n\n        this.headers = Array.from(headerRow.querySelectorAll('th'));\n\n\n\n        this.headers.forEach((header, index) => {\n            this.renderer.setStyle(header, 'cursor', 'pointer');\n            this.renderer.addClass(header, 'tablesorter-header');\n\n            if (this.sorting) {\n                this.renderer.addClass(header, 'sortable');\n\n                this.sortDirections[index] = 'asc';\n\n                header.addEventListener('click', () => {\n                    this.handleHeaderClick(index);\n                });\n            }\n        });\n\n        if (this.filter) {\n            this.addFilterRow();\n        }\n        // Aplicar la clase sticky-thead si corresponde\n        this.applyStickyClass();\n    }\n    // Método para manejar el cambio de la propiedad sticky\n    private applyStickyClass() {\n        const thead = this.el.nativeElement.querySelector('thead');\n        if (!thead) return;\n\n        // Aplica sticky al thead\n        if (this.sticky) {\n            this.renderer.addClass(thead, 'sticky-thead');\n        } else {\n            this.renderer.removeClass(thead, 'sticky-thead');\n        }\n\n        // Aplica la clase al contenedor padre de la tabla\n        const parent = this.el.nativeElement.parentElement;\n        if (parent) {\n            if (this.sticky) {\n                this.renderer.addClass(parent, 'table-scroll');\n                this.renderer.removeClass(parent, 'table-no-scroll');\n            } else {\n                this.renderer.removeClass(parent, 'table-scroll');\n                this.renderer.addClass(parent, 'table-no-scroll');\n            }\n        }\n    }\n\n    private addTableClasses() {\n        const classes = ['table', 'table-striped', 'table-bordered', 'master-hand', 'centerText', 'tablesorter', 'tablesorter-blue'];\n        classes.forEach(cls => this.renderer.addClass(this.el.nativeElement, cls));\n    }\n    private addFilterRow() {\n        const thead = this.el.nativeElement.querySelector('thead');\n        if (!thead) return;\n\n        // Crear fila para el filtro\n        const filterRow = this.renderer.createElement('tr');\n        this.renderer.setAttribute(filterRow, 'role', 'search');\n        this.renderer.addClass(filterRow, 'tablesorter-filter-row');\n        this.renderer.addClass(filterRow, 'tablesorter-ignoreRow');\n\n        // Crear un campo de búsqueda para cada columna\n        this.headers.forEach((header, columnIndex) => {\n            const filterCell = this.renderer.createElement('td');\n            this.renderer.setAttribute(filterCell, 'data-column', columnIndex.toString());\n\n            const filterInput = this.renderer.createElement('input');\n            this.renderer.setAttribute(filterInput, 'type', 'search');\n            this.renderer.setAttribute(filterInput, 'placeholder', '');\n            this.renderer.addClass(filterInput, 'tablesorter-filter');\n            this.renderer.setAttribute(filterInput, 'data-column', columnIndex.toString());\n\n            // Obtener el texto del encabezado para el aria-label\n            const headerText = header.textContent?.trim() || '';\n            const ariaLabel = `Filter \"${headerText}\" column by...`;\n            this.renderer.setAttribute(filterInput, 'aria-label', ariaLabel);\n\n            // Añadir timestamp para data-lastsearchtime \n            this.renderer.setAttribute(filterInput, 'data-lastsearchtime', Date.now().toString());\n\n            // Añadir evento para filtrar la tabla cuando se escriba\n            filterInput.addEventListener('input', () => {\n                this.filterColumnTable(columnIndex, filterInput.value);\n            });\n\n            // Añadir evento para filtrar cuando se presione Enter\n            filterInput.addEventListener('keydown', (event: KeyboardEvent) => {\n                if (event.key === 'Enter') {\n                    this.filterColumnTable(columnIndex, filterInput.value);\n                }\n            });\n\n            // Guardar referencia al input para uso posterior\n            this.filterInputs.push(filterInput);\n\n            // Ensamblar elementos\n            this.renderer.appendChild(filterCell, filterInput);\n            this.renderer.appendChild(filterRow, filterCell);\n        });\n\n        // Insertar la fila de filtro después de la primera fila de thead\n        const firstRow = thead.querySelector('tr');\n        this.renderer.insertBefore(thead, filterRow, firstRow.nextSibling);\n    }\n    private filterColumnTable(columnIndex: number, searchTerm: string) {\n        const tbody = this.el.nativeElement.querySelector('tbody');\n        if (!tbody) return;\n\n        const rows = Array.from(tbody.querySelectorAll('tr'));\n\n        // Actualizar el timestamp de búsqueda\n        const filterInput = this.el.nativeElement.querySelector(`input[data-column=\"${columnIndex}\"]`);\n        if (filterInput) {\n            this.renderer.setAttribute(filterInput, 'data-lastsearchtime', Date.now().toString());\n        }\n\n        // Si no hay término de búsqueda, mostrar todas las filas\n        if (!searchTerm.trim()) {\n            rows.forEach((row: HTMLElement | any) => {\n                this.renderer.removeStyle(row, 'display');\n            });\n            return;\n        }\n\n        rows.forEach((row: HTMLElement | any) => {\n            // Obtener el contenido de la celda en la columna específica\n            const cell = row.cells[columnIndex];\n            if (!cell) return;\n\n            const cellText = cell.textContent?.trim() || '';\n            const isVisible = this.matchesFilter(cellText, searchTerm);\n\n            // Si ya está oculta por otro filtro, mantenerla oculta\n            const currentDisplay = row.style.display;\n            if (currentDisplay === 'none' && !isVisible) {\n                return;\n            }\n\n            this.renderer.setStyle(row, 'display', isVisible ? '' : 'none');\n        });\n    }\n\n    private filterTable() {\n        const tbody = this.el.nativeElement.querySelector('tbody');\n        if (!tbody) return;\n\n        const rows = Array.from(tbody.querySelectorAll('tr'));\n        const filterInputs = this.el.nativeElement.querySelectorAll('.tablesorter-filter');\n\n        // Restablecer la visibilidad de todas las filas\n        rows.forEach((row: HTMLElement | any) => {\n            this.renderer.removeStyle(row, 'display');\n        });\n\n        // Aplicar cada filtro en secuencia\n        Array.from(filterInputs).forEach((input: HTMLInputElement | any) => {\n            const columnIndex = parseInt(input.getAttribute('data-column') || '0', 10);\n            const searchTerm = input.value.trim();\n\n            if (searchTerm) {\n                this.filterColumnTable(columnIndex, searchTerm);\n            }\n        });\n    }\n    private handleHeaderClick(columnIndex: number) {\n        if (this.currentSortColumn === columnIndex) {\n            this.sortDirections[columnIndex] = this.sortDirections[columnIndex] === 'asc' ? 'desc' : 'asc';\n        } else {\n            this.currentSortColumn = columnIndex;\n        }\n\n        this.sortTable(columnIndex);\n    }\n\n    private sortTable(columnIndex: number) {\n        const tbody = this.el.nativeElement.querySelector('tbody');\n        if (!tbody) return;\n\n        this.updateSortIndicators(columnIndex);\n\n        const rows: HTMLElement[] = Array.from(tbody.querySelectorAll('tr'));\n        const sortedRows = this.sortRows(rows, columnIndex);\n        this.reorderRows(tbody, sortedRows);\n    }\n\n    private updateSortIndicators(columnIndex: number) {\n        this.headers.forEach(header => {\n            this.renderer.removeClass(header, 'sort-asc');\n            this.renderer.removeClass(header, 'sort-desc');\n        });\n\n        this.renderer.addClass(\n            this.headers[columnIndex],\n            this.sortDirections[columnIndex] === 'asc' ? 'sort-asc' : 'sort-desc'\n        );\n    }\n\n    private sortRows(rows: HTMLElement[] | any[], columnIndex: number): HTMLElement[] {\n        const direction = this.sortDirections[columnIndex];\n\n        return [...rows].sort((a, b) => {\n            const cellA = a.cells[columnIndex];\n            const cellB = b.cells[columnIndex];\n\n            if (!cellA || !cellB) return 0;\n\n            const valueA = cellA.textContent?.trim() || '';\n            const valueB = cellB.textContent?.trim() || '';\n\n            const numA = this.parseNumber(valueA);\n            const numB = this.parseNumber(valueB);\n\n            if (numA !== null && numB !== null) {\n                return direction === 'asc' ? numA - numB : numB - numA;\n            }\n\n            return direction === 'asc'\n                ? valueA.localeCompare(valueB, 'es-CO')\n                : valueB.localeCompare(valueA, 'es-CO');\n        });\n    }\n\n    private reorderRows(tbody: HTMLElement, sortedRows: HTMLElement[]) {\n        const fragment = document.createDocumentFragment();\n        sortedRows.forEach(row => fragment.appendChild(row));\n        tbody.appendChild(fragment);\n    }\n\n    private parseNumber(value: string): number | null {\n        const cleaned = value.replace(/[$%,\\s]/g, '');\n        const num = parseFloat(cleaned);\n        return isNaN(num) ? null : num;\n    }\n    private matchesFilter(cellText: string, searchTerm: string): boolean {\n        const cellValue = cellText.toLowerCase();\n        const term = searchTerm.trim();\n\n        // Variables para almacenar datos intermedios\n        const data = {\n            filter: searchTerm,\n            iFilter: searchTerm.toLowerCase(),\n            exact: cellText,\n            iExact: cellValue,\n            isMatch: true, // Por defecto usamos coincidencia parcial (no exacta)\n            cache: cellText,\n            anyMatch: false\n        };\n\n        // Caso 1: Consulta vacía siempre coincide\n        if (term === '') {\n            return true;\n        }\n\n        // Caso 2: Expresión regular - /texto/i\n        if (this.regex.regex.test(term)) {\n            try {\n                const matches: any = this.regex.regex.exec(term);\n                const pattern = matches[1];\n                const flags = matches[2] || '';\n                const regex = new RegExp(pattern, flags);\n                return regex.test(cellValue);\n            } catch (e) {\n                // Si hay un error en la expresión regular, realizar búsqueda simple\n                return cellValue.includes(term.toLowerCase());\n            }\n        }\n\n        // Caso 3: Búsqueda negada - !texto\n        if (this.regex.notTest.test(term)) {\n            const filterText = term.replace('!', '').toLowerCase();\n            // si no hay texto después de ! mostrar todo\n            if (filterText === '') {\n                return true;\n            }\n            // Si es búsqueda exacta (entre comillas)\n            if (this.regex.exact.test(filterText)) {\n                const txt = filterText.replace(this.regex.exact, '');\n                return txt === '' ? true : txt !== cellValue;\n            } else {\n                // Búsqueda de subcadena\n                const indx = cellValue.indexOf(filterText.trim());\n                return indx < 0;\n            }\n        }\n        // Caso 4: Búsqueda exacta (entre comillas o con =) - \"texto\" o =texto\n        if (this.regex.exact.test(term)) {\n            const txt = term.replace(this.regex.exact, '');\n            return txt === cellValue;\n        }\n\n        // Caso 5: Operadores de comparación (>, <, >=, <=)\n        if (this.regex.operTest.test(term)) {\n            if (cellValue === '') {\n                return false; // cadenas vacías no se comparan numéricamente\n            }\n            const matches = term.match(this.regex.operators);\n            if (matches) {\n                const operator = matches[0];\n                const value = term.replace(this.regex.operators, '').trim();\n\n                // Intentar convertir a números para comparación numérica\n                const cellNum = this.parseNumber(cellValue);\n                const valueNum = this.parseNumber(value);\n\n                if (cellNum !== null && valueNum !== null) {\n                    if (this.regex.gteTest.test(term)) {\n                        return cellNum >= valueNum;\n                    } else if (this.regex.gtTest.test(term)) {\n                        return cellNum > valueNum;\n                    } else if (this.regex.lteTest.test(term)) {\n                        return cellNum <= valueNum;\n                    } else if (this.regex.ltTest.test(term)) {\n                        return cellNum < valueNum;\n                    }\n                }\n\n                // Si el valor es cadena vacía después de quitar el operador, mostrar todo\n                if (value === '') {\n                    return true;\n                }\n            }\n        }\n        // Caso 6: Rango - valor1 - valor2 o valor1 a valor2\n        if (this.regex.toTest.test(term)) {\n            const range = term.split(this.regex.toSplit);\n            if (range.length >= 2) {\n                let range1 = this.parseNumber(range[0].replace(/[^\\d.-]/g, ''));\n                let range2 = this.parseNumber(range[1].replace(/[^\\d.-]/g, ''));\n                const cellNum = this.parseNumber(cellValue);\n\n                // Intercambiar si range1 > range2\n                if (range1 !== null && range2 !== null && range1 > range2) {\n                    const temp = range1;\n                    range1 = range2;\n                    range2 = temp;\n                }\n\n                if (cellNum !== null && range1 !== null && range2 !== null) {\n                    return (cellNum >= range1 && cellNum <= range2);\n                } else if (range1 === null || range2 === null) {\n                    return true; // Si uno de los rangos no es un número, mostrar todo\n                }\n            }\n        }\n        // Caso 7: Búsqueda difusa - ~texto (encuentra texto incluso con caracteres en medio)\n        if (this.regex.fuzzyTest.test(term)) {\n            const pattern = term.slice(1);\n            let patternIndex = 0;\n            // Verificar si cada caracter del patrón aparece en orden en el texto\n            for (let i = 0; i < cellValue.length && patternIndex < pattern.length; i++) {\n                if (cellValue[i] === pattern[patternIndex]) {\n                    patternIndex++;\n                }\n            }\n            return patternIndex === pattern.length;\n        }\n\n        // Caso 8: Comodines - * (cualquier cantidad de caracteres) y ? (un carácter)\n        if (this.regex.wildOrTest.test(term)) {\n            try {\n                const pattern = term\n                    .replace(this.regex.wild0More, '\\\\S*')\n                    .replace(this.regex.wild01, '\\\\S{1}')\n                    .replace(/[-[\\]{}()+.,\\\\^$|#\\s]/g, '\\\\$&');\n\n                const regex = new RegExp(data.isMatch ? pattern : `^${pattern}$`, 'i');\n                return regex.test(cellValue);\n            } catch (e) {\n                // Si hay un error, realizar búsqueda simple\n                return cellValue.includes(term.toLowerCase());\n            }\n        }\n        // Caso 9: Búsqueda AND - palabra1 && palabra2\n        if (this.regex.andTest.test(term)) {\n            const filters = term.split(this.regex.andSplit);\n            let result = true;\n\n            for (let i = 0; i < filters.length; i++) {\n                const filterTerm = filters[i].trim();\n                // Procesar cada término de forma recursiva\n                const subResult = this.matchesFilter(cellText, filterTerm);\n                result = result && subResult;\n                if (!result) break; // Corto circuito para AND\n            }\n            return result;\n        }\n\n        // Caso 10: Búsqueda OR - palabra1 | palabra2 o palabra1 o palabra2\n        if (this.regex.orTest.test(term)) {\n            const filters = term.split(this.regex.orSplit);\n            let result = false;\n\n            for (let i = 0; i < filters.length; i++) {\n                const filterTerm = filters[i].trim();\n                if (filterTerm === '') continue;\n                // Procesar cada término de forma recursiva\n                const subResult = this.matchesFilter(cellText, filterTerm);\n                result = result || subResult;\n                if (result) break; // Corto circuito para OR\n            }\n            return result;\n        }\n\n        // Caso 11: Búsqueda simple predeterminada (parcial)\n        return cellValue.includes(term.toLowerCase());\n    }\n}","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: 'utils-dropzone-label',\n    standalone: true\n})\nexport class UtilsDropzoneLabelDirective { }\n","import { Directive, ElementRef, OnInit } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n/*\n\"Property 'nativeElement' does not exist on type 'FormControl'\".\n'NativeElementInjectorDirective' injects nativeElement to each control,\nso we can access it from inside validator for example.\nMore about this approach and reasons for this:\nhttps://github.com/angular/angular/issues/18025\nhttps://stackoverflow.com/a/54075119/1617590\n*/\n@Directive({\n    // tslint:disable-next-line: directive-selector\n    selector: '[ngModel], [formControl], [formControlName]',\n    standalone: true,\n})\nexport class UtilsNativeElementInjectorDirective implements OnInit {\n    constructor(\n        private controlDir: NgControl,\n        private host: ElementRef<HTMLFormElement>\n    ) { }\n    ngOnInit() {\n        if (this.controlDir.control) {\n            // @ts-ignore\n            this.controlDir.control['nativeElement'] = this.host.nativeElement;\n        }\n    }\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n    selector: '[toastContainer]',\n    exportAs: 'toastContainer',\n    standalone: true,\n})\nexport class UtilsToastContainerDirective {\n    constructor(private el: ElementRef) { }\n    getContainerElement(): HTMLElement {\n        return this.el.nativeElement;\n    }\n}\n","export enum PhoneNumberFormat {\n  International = 'INTERNATIONAL',\n  National = 'NATIONAL',\n}\n","export class UtilsOtpInputConfig {\n    inputStyles?: { [key: string]: any };\n    containerStyles?: { [key: string]: any };\n    /**\n     * @deprecated Don't use as this will be removed in upcoming versions\n     */\n    allowKeyCodes?: string[];\n    length: number = 6;\n    allowNumbersOnly?: boolean;\n    inputClass?: string;\n    containerClass?: string;\n    isPasswordInput?: boolean;\n    disableAutoFocus?: boolean;\n    placeholder?: string;\n    letterCase?: 'Upper' | 'Lower';\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'truncate',\n    standalone: true,\n})\nexport class UtilsTruncatePipe implements PipeTransform {\n    transform(value: string, args: any[]): string {\n        const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\n        const trail = args.length > 1 ? args[1] : '...';\n        return value.length > limit ? value.substring(0, limit) + trail : value;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  HttpClient,\n  HttpContext,\n  HttpEvent,\n  HttpHeaders,\n  HttpParams,\n  HttpResponse,\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UtilsHttpClientService {\n  constructor(private _http: HttpClient) {}\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<Blob>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<string>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<ArrayBuffer>>;\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Blob>>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<string>>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Object>>;\n\n  get<T>(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<T>>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Blob>>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<string>>;\n\n  get(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Object>>;\n\n  get<T>(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<T>>;\n\n  get(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<Object>;\n\n  get<T>(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<T>;\n\n  // Implementación del método GET\n  get(url: string, options: any): Observable<any> {\n    return this._http.get(url, options);\n  }\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<ArrayBuffer>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<Blob>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<string>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Blob>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<string>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Object>>;\n\n  post<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<T>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Blob>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<string>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Object>>;\n\n  post<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<T>>;\n\n  post(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<Object>;\n\n  post<T>(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<T>;\n\n  // Implementación del método POST\n  post(url: string, body: any | null, options: any): Observable<any> {\n    return this._http.post(url, body, options);\n  }\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<Blob>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<string>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Blob>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<string>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Object>>;\n\n  put<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<T>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Blob>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<string>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Object>>;\n\n  put<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<T>>;\n\n  put(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<Object>;\n\n  put<T>(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<T>;\n\n  // Implementación del método PUT\n  put(url: string, body: any | null, options: any): Observable<any> {\n    return this._http.put(url, body, options);\n  }\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<ArrayBuffer>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<Blob>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<string>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpEvent<Blob>>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpEvent<string>>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpEvent<Object>>;\n\n  delete<T>(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | (string | number | boolean)[];\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpEvent<T>>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpResponse<Blob>>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpResponse<string>>;\n\n  delete(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpResponse<Object>>;\n\n  delete<T>(\n    url: string,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<HttpResponse<T>>;\n\n  delete(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<Object>;\n\n  delete<T>(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      body?: any | null;\n    }\n  ): Observable<T>;\n\n  // Implementación del método DELETE\n  delete(url: string, options: any): Observable<any> {\n    return this._http.delete(url, options);\n  }\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<ArrayBuffer>;\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<Blob>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<string>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Blob>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<string>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<Object>>;\n\n  patch<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpEvent<T>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Blob>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<string>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<Object>>;\n\n  patch<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<HttpResponse<T>>;\n\n  patch(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<Object>;\n\n  patch<T>(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n            [header: string]: string | string[];\n          };\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n            [param: string]:\n              | string\n              | number\n              | boolean\n              | ReadonlyArray<string | number | boolean>;\n          };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    }\n  ): Observable<T>;\n\n  // Implementación del método PATCH\n  patch(url: string, body: any | null, options: any): Observable<any> {\n    return this._http.patch(url, body, options);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UtilsStorageService {\n  private api: Storage;\n\n  constructor(api: Storage) {\n    this.api = api;\n  }\n\n  get length(): number {\n    return this.api.length;\n  }\n\n  /**\n   * Guarda un valor en el almacenamiento.\n   * Si _isArray es true, el valor se guarda como un JSON string.\n   * Si _isArray es false, el valor se guarda como está.\n   */\n  setItem(key: string, value: any, _isArray: boolean = true): void {\n    const data = _isArray ? JSON.stringify(value) : value;\n    this.api.setItem(key, data);\n  }\n\n  /**\n   * Obtiene un valor del almacenamiento por su clave.\n   * Intenta parsear el valor obtenido como JSON. Si falla, retorna el valor original.\n   */\n  getItem<T = any>(key: string): T | null {\n    const data = this.api.getItem(key);\n    if (data !== null) {\n      try {\n        return JSON.parse(data);\n      } catch {\n        return data as any;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Limpia todos los datos del almacenamiento.\n   */\n  clear(): void {\n    this.api.clear();\n  }\n\n  /**\n   * Obtiene la clave en la posición dada.\n   */\n  key(index: number): string | null {\n    return this.api.key(index);\n  }\n\n  /**\n   * Elimina un elemento del almacenamiento por su clave.\n   */\n  removeItem(key: string): void {\n    this.api.removeItem(key);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { UtilsStorageService } from './utils-storage.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UtilsLocalStorageService extends UtilsStorageService {\n  constructor() {\n    super(window.localStorage);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { UtilsStorageService } from './utils-storage.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UtilsSessionStorageService extends UtilsStorageService {\n  constructor() {\n    super(window.sessionStorage);\n  }\n}\n","/*\n * Public API Surface of ngx-danisoft-utils\n */\n\n// Components\nexport * from './lib/components/ngx-danisoft-utils/ngx-danisoft-utils.component';\nexport * from './lib/components/utils-autocomplete/utils-autocomplete.component';\nexport * from './lib/components/utils-dropzone/utils-dropzone.component';\nexport * from './lib/components/utils-dropzone-preview/utils-dropzone-preview.component';\nexport * from './lib/components/utils-intl-tel-input/utils-intl-tel-input.component';\nexport * from './lib/components/utils-otp-input/utils-otp-input.component';\nexport * from './lib/components/utils-pagination/utils-pagination.component';\nexport * from './lib/components/utils-spinner/utils-spinner.component';\nexport * from './lib/components/utils-toastr/utils-toastr.component';\nexport * from './lib/components/utils-ui-table-sorter/utils-ui-table-sorter.component';\n\n//data\nexport * from './lib/data/country-code';\n\n// Directives\nexport * from './lib/directives/tablesorter.directive';\nexport * from './lib/directives/utils-dropzone-label.directive';\nexport * from './lib/directives/utils-native-element-injector.directive';\nexport * from './lib/directives/utils-pagination.directive';\nexport * from './lib/directives/utils-toast.directive';\n\n//enums\nexport * from './lib/enums/country-iso.enum';\nexport * from './lib/enums/phone-number-format.enum';\nexport * from './lib/enums/search-country-field.enum';\nexport * from './lib/enums/utils-spinner.enum';\n\n//helpers\nexport * from './lib/helpers/helpers';\n\n// Interfaces\nexport * from './lib/interfaces/change-data';\nexport * from './lib/interfaces/dropzone.interface';\nexport * from './lib/interfaces/generic.interface';\nexport * from './lib/interfaces/pagination-instance';\nexport * from './lib/interfaces/service.interface';\nexport * from './lib/interfaces/toast-ref';\nexport * from './lib/interfaces/toastr-interface';\nexport * from './lib/interfaces/ui-table.interface';\nexport * from './lib/interfaces/utils-spinner-config';\n\n//models\nexport * from './lib/models/country.model';\nexport * from './lib/models/opt-config.model';\n\n//pipes\nexport * from './lib/pipes/utils-customCurrency.pipe';\nexport * from './lib/pipes/utils-highlight.pipe';\nexport * from './lib/pipes/utils-keys.pipe';\nexport * from './lib/pipes/utils-safe-html.pipe';\nexport * from './lib/pipes/utils.truncate.pipe';\nexport * from './lib/pipes/utlils-paginate.pipe';\n\n// Services\nexport * from './lib/services/ngx-danisoft-utils.service';\nexport * from './lib/services/utils-dropzone.service';\nexport * from './lib/services/utils-http-client.service';\nexport * from './lib/services/utils-local-storage.service';\nexport * from './lib/services/utils-pagination.service';\nexport * from './lib/services/utils-session-torage.service';\nexport * from './lib/services/utils-spinner.service';\nexport * from './lib/services/utils-storage.service';\nexport * from './lib/services/utils-toastr.service';\n\n//utils\nexport * from './lib/utils/keyboard-util';\n\n//validator\nexport * from './lib/validator/ngx-intl-tel-input.validator';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.UtilsDropzoneService","i1.CountryCode","i2","i3","i1.UtilsKeysPipe","i1.UtilsPaginationService","i1.UtilsToastrService","i2.ToastPackage","map","i1.NgxDanisoftUtilsService","i2.UtilsSpinnerService","i4"],"mappings":"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"}