{"version":3,"file":"rt-tools.mjs","sources":["../../../projects/tools/src/lib/bem/bem.const.ts","../../../projects/tools/src/lib/bem/bem.utils.ts","../../../projects/tools/src/lib/bem/block.directive.ts","../../../projects/tools/src/lib/bem/concat-classes.pipe.ts","../../../projects/tools/src/lib/bem/elem.directive.ts","../../../projects/tools/src/lib/bem/mod.directive.ts","../../../projects/tools/src/lib/storage/enums/storage-types.enum.ts","../../../projects/tools/src/lib/storage/in-memory-storage.service.ts","../../../projects/tools/src/lib/storage/json-converter.ts","../../../projects/tools/src/lib/util/functions/date-format.ts","../../../projects/tools/src/lib/util/functions/date-string-to-date.ts","../../../projects/tools/src/lib/util/functions/is-date-valid.ts","../../../projects/tools/src/lib/util/functions/is-equal.ts","../../../projects/tools/src/lib/util/functions/is-number.ts","../../../projects/tools/src/lib/util/functions/is-record.ts","../../../projects/tools/src/lib/util/functions/is-string.ts","../../../projects/tools/src/lib/util/functions/is-today.ts","../../../projects/tools/src/lib/util/functions/remove-field-from-obj.ts","../../../projects/tools/src/lib/util/functions/safe-comparator.ts","../../../projects/tools/src/lib/util/functions/sorters.ts","../../../projects/tools/src/lib/util/functions/stringify-http-like-params.ts","../../../projects/tools/src/lib/util/functions/transform-array-input.ts","../../../projects/tools/src/lib/util/functions/transform-string-input.ts","../../../projects/tools/src/lib/util/functions/is-entity-in-array-by-key.ts","../../../projects/tools/src/lib/util/functions/is-nil.ts","../../../projects/tools/src/lib/util/const/overlay-positions.const.ts","../../../projects/tools/src/lib/util/const/dash.const.ts","../../../projects/tools/src/lib/util/functions/empty-to-dash.ts","../../../projects/tools/src/lib/util/functions/is-email.ts","../../../projects/tools/src/lib/util/functions/is-empty-array.ts","../../../projects/tools/src/lib/util/functions/is-empty-object.ts","../../../projects/tools/src/lib/util/functions/is-empty-string.ts","../../../projects/tools/src/lib/util/functions/is-object.ts","../../../projects/tools/src/lib/util/functions/is-empty.function.ts","../../../projects/tools/src/lib/util/functions/debounce.ts","../../../projects/tools/src/lib/util/functions/has-property-in-chain.ts","../../../projects/tools/src/lib/util/pipes/break-string.pipe.ts","../../../projects/tools/src/lib/util/pipes/sanitize.pipe.ts","../../../projects/tools/src/lib/util/pipes/entity-to-string.pipe.ts","../../../projects/tools/src/lib/util/pipes/empty-to-dash.pipe.ts","../../../projects/tools/src/lib/util/pipes/equal.pipe.ts","../../../projects/tools/src/lib/util/pipes/equal-chain.pipe.ts","../../../projects/tools/src/lib/util/pipes/not-equal.pipe.ts","../../../projects/tools/src/lib/util/pipes/not-equal-chain.pipe.ts","../../../projects/tools/src/lib/util/pipes/ternary.pipe.ts","../../../projects/tools/src/lib/util/services/platform.service.ts","../../../projects/tools/src/lib/util/services/message-bus.ts","../../../projects/tools/src/lib/util/tokens/window.token.ts","../../../projects/tools/src/lib/util/tokens/aside.token.ts","../../../projects/tools/src/lib/util/tokens/navigator.token.ts","../../../projects/tools/src/lib/util/services/device-detector.service.ts","../../../projects/tools/src/lib/util/services/breakpoints.ts","../../../projects/tools/src/lib/util/services/breakpoints.service.ts","../../../projects/tools/src/lib/util/validators/comparison.validator.ts","../../../projects/tools/src/lib/util/validators/arrays-not-empty.validator.ts","../../../projects/tools/src/lib/util/enums/modal-window-size.enum.ts","../../../projects/tools/src/lib/util/enums/aside-buttons.enum.ts","../../../projects/tools/src/lib/util/directives/icon-outlined.directive.ts","../../../projects/tools/src/lib/util/directives/scroll-to-element.directive.ts","../../../projects/tools/src/lib/util/directives/hide-tooltip.directive.ts","../../../projects/tools/src/lib/util/directives/navigation.directive.ts","../../../projects/tools/src/lib/util/directives/tab-query-param.directive.ts","../../../projects/tools/src/lib/util/directives/scroll.directive.ts","../../../projects/tools/src/lib/util/directives/escape-key.directive.ts","../../../projects/tools/src/lib/util/helpers/type-cast.helper.ts","../../../projects/tools/src/lib/util/helpers/base.mapper.ts","../../../projects/tools/src/lib/ui-kit/snack-bar/snack-bar.compontent.ts","../../../projects/tools/src/lib/ui-kit/snack-bar/snack-bar.component.html","../../../projects/tools/src/lib/ui-kit/snack-bar/rt-snack-bar.service.ts","../../../projects/tools/src/lib/util/providers.ts","../../../projects/tools/src/lib/util/public-api.ts","../../../projects/tools/src/lib/storage/storage.factory.ts","../../../projects/tools/src/lib/storage/tokens/custom-storage.token.ts","../../../projects/tools/src/lib/storage/tokens/in-memory-storage.token.ts","../../../projects/tools/src/lib/storage/tokens/local-storage.token.ts","../../../projects/tools/src/lib/storage/tokens/session-storage.token.ts","../../../projects/tools/src/lib/storage/storage.service.ts","../../../projects/tools/src/lib/storage/providers.ts","../../../projects/tools/src/lib/store/base-store.service.ts","../../../projects/tools/src/lib/store/enums/async-state-status.enum.ts","../../../projects/tools/src/lib/store/constants/base-initial-state.const.ts","../../../projects/tools/src/lib/store/base-async-store.service.ts","../../../projects/tools/src/lib/idb-storage/idb-storage-service.ts","../../../projects/tools/src/lib/idb-storage/idb-storage.factory.ts","../../../projects/tools/src/lib/idb-storage/token/idb-storage.token.ts","../../../projects/tools/src/lib/idb-storage/providers.ts","../../../projects/tools/src/lib/ui-kit/modal/modal.component.ts","../../../projects/tools/src/lib/ui-kit/modal/modal.component.html","../../../projects/tools/src/lib/ui-kit/modal/modal.service.ts","../../../projects/tools/src/lib/ui-kit/scrollable/scrollable-container.component.ts","../../../projects/tools/src/lib/ui-kit/scrollable/scrollable-container.component.html","../../../projects/tools/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.ts","../../../projects/tools/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.html","../../../projects/tools/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.ts","../../../projects/tools/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.html","../../../projects/tools/src/lib/ui-kit/spinner/spinner.component.ts","../../../projects/tools/src/lib/ui-kit/spinner/spinner.component.html","../../../projects/tools/src/lib/ui-kit/aside/components/panel/aside-panel.component.ts","../../../projects/tools/src/lib/ui-kit/aside/components/panel/aside-panel.component.html","../../../projects/tools/src/lib/ui-kit/aside/aside.service.ts","../../../projects/tools/src/lib/ui-kit/toolbar/toolbar.component.ts","../../../projects/tools/src/lib/ui-kit/toolbar/toolbar.component.html","../../../projects/tools/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.ts","../../../projects/tools/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.html","../../../projects/tools/src/lib/ui-kit/aside/components/container/aside-container.component.ts","../../../projects/tools/src/lib/ui-kit/aside/components/container/aside-container.component.html","../../../projects/tools/src/lib/ui-kit/buttons/icon-round/rtui-round-icon-button.component.ts","../../../projects/tools/src/lib/ui-kit/buttons/icon-round/rtui-round-icon-button.component.html","../../../projects/tools/src/lib/ui-kit/buttons/button/rtui-button.component.ts","../../../projects/tools/src/lib/ui-kit/buttons/multi-button/rtui-multi-button.component.ts","../../../projects/tools/src/lib/ui-kit/buttons/multi-button/rtui-multi-button.component.html","../../../projects/tools/src/lib/ui-kit/header/header.component.ts","../../../projects/tools/src/lib/ui-kit/header/header.component.html","../../../projects/tools/src/lib/ui-kit/table/components/clear-search-button/rtui-clear-button.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/clear-search-button/rtui-clear-button.component.html","../../../projects/tools/src/lib/ui-kit/table/util/default-pagination.ts","../../../projects/tools/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.html","../../../projects/tools/src/lib/ui-kit/table/util/table-stop-row-click-attribute.const.ts","../../../projects/tools/src/lib/ui-kit/table/util/list-sort-order.enum.ts","../../../projects/tools/src/lib/ui-kit/table/util/lists.interface.ts","../../../projects/tools/src/lib/ui-kit/table/util/table-column.interface.ts","../../../projects/tools/src/lib/ui-kit/table/util/table-component.interface.ts","../../../projects/tools/src/lib/ui-kit/table/util/table-config.service.ts","../../../projects/tools/src/lib/ui-kit/table/util/common-selectors.directive.ts","../../../projects/tools/src/lib/ui-kit/table/util/dynamic-list-selectors.directive.ts","../../../projects/tools/src/lib/ui-kit/table/util/table-selectors.directive.ts","../../../projects/tools/src/lib/ui-kit/table/util/index.ts","../../../projects/tools/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.html","../../../projects/tools/src/lib/ui-kit/table/components/table-header-cell/table-header-cell.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/table-header-cell/table-header-cell.component.html","../../../projects/tools/src/lib/ui-kit/table/components/table-header-filter-cell/table-header-filter-cell.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/table-header-filter-cell/table-header-filter-cell.component.html","../../../projects/tools/src/lib/ui-kit/table/directives/rtui-stop-table-row-click.directive.ts","../../../projects/tools/src/lib/ui-kit/table/directives/rtui-table-row-click-directive.ts","../../../projects/tools/src/lib/ui-kit/table/components/table/rtui-table.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/table/rtui-table.component.html","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/actions/rtui-dynamic-selector-list-actions.component.ts","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/actions/rtui-dynamic-selector-list-actions.component.html","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/dynamic-selectors-directive.ts","../../../projects/tools/src/lib/ui-kit/toggle/toggle-size.type.enum.ts","../../../projects/tools/src/lib/ui-kit/toggle/rtui-toggle.component.ts","../../../projects/tools/src/lib/ui-kit/toggle/rtui-toggle.component.html","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/multi-selector-popup/rtui-multi-selector-popup.component.ts","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/multi-selector-popup/rtui-multi-selector-popup.component.html","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/placeholder/rtui-dynamic-selector-placeholder.component.ts","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/placeholder/rtui-dynamic-selector-placeholder.component.html","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/selected-list/rtui-dynamic-selector-selected-list.component.ts","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/selected-list/rtui-dynamic-selector-selected-list.component.html","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component.ts","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component.html","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/dynamic-input/rtui-dynamic-input.component.ts","../../../projects/tools/src/lib/ui-kit/dynamic-selectors/components/dynamic-input/rtui-dynamic-input.component.html","../../../projects/tools/src/lib/ui-kit/table/components/table-config-aside/rt-table-config-aside.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/table-config-aside/rt-table-config-aside.component.html","../../../projects/tools/src/lib/ui-kit/table/components/table-container/table-container.component.ts","../../../projects/tools/src/lib/ui-kit/table/components/table-container/table-container.component.html","../../../projects/tools/src/lib/ui-kit/table/dynamic-list.component.ts","../../../projects/tools/src/lib/ui-kit/table/dynamic-list.component.html","../../../projects/tools/src/lib/ui-kit/popover/rtui-popover-container.component.ts","../../../projects/tools/src/lib/ui-kit/popover/rtui-popover-container.component.html","../../../projects/tools/src/lib/ui-kit/popover/rt-popover.directive.ts","../../../projects/tools/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.ts","../../../projects/tools/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.html","../../../projects/tools/src/lib/ui-kit/action-bar/rt-action-bar.service.ts","../../../projects/tools/src/lib/ui-kit/action-bar/components/container/rtui-action-bar-container.component.ts","../../../projects/tools/src/lib/ui-kit/action-bar/components/container/rtui-action-bar-container.component.html","../../../projects/tools/src/lib/ui-kit/providers.ts","../../../projects/tools/src/lib/ui-kit/animation/progress.animation.ts","../../../projects/tools/src/lib/ui-kit/info-badge/badge-info-enum.ts","../../../projects/tools/src/lib/ui-kit/info-badge/calculate-text-color-based-on-back.ts","../../../projects/tools/src/lib/util/enums/position.enum.ts","../../../projects/tools/src/lib/ui-kit/info-badge/info-badge.component.ts","../../../projects/tools/src/lib/ui-kit/info-badge/info-badge.component.html","../../../projects/tools/src/lib/ui-kit/info-badge/info-badge-types.enum.ts","../../../projects/tools/src/lib/ui-kit/file-uploader/rtui-file-upload.component.ts","../../../projects/tools/src/lib/ui-kit/file-uploader/rtui-file-upload.component.html","../../../projects/tools/src/lib/ui-kit/image-uploader/image-uploader/rtui-image-upload.component.ts","../../../projects/tools/src/lib/ui-kit/image-uploader/image-uploader/rtui-image-upload.component.html","../../../projects/tools/src/public-api.ts","../../../projects/tools/src/rt-tools.ts"],"sourcesContent":["import { IBemConfig } from './bem.types';\n\nexport const BEM_MODULE_CONFIG: IBemConfig = {\n    separators: {\n        el: '__',\n        mod: '--',\n        val: '--',\n    },\n    ignoreValues: false,\n    modCase: 'kebab',\n};\n","import { ElementRef, Renderer2 } from '@angular/core';\n\nimport { BEM_MODULE_CONFIG } from './bem.const';\nimport { IModsObject } from './bem.types';\n\nexport function modNameHandler(str: string): string {\n    switch (BEM_MODULE_CONFIG.modCase) {\n        case 'kebab':\n            return str\n                ? str\n                      .replace(/[A-Z]/g, function (s: string) {\n                          return '-' + s.toLowerCase();\n                      })\n                      .replace(/$-/, '')\n                : '';\n        case 'snake':\n            return str\n                ? str\n                      .replace(/[A-Z]/g, function (s: string) {\n                          return '_' + s.toLowerCase();\n                      })\n                      .replace(/$-/, '')\n                : '';\n        default:\n            return str;\n    }\n}\n\nexport function generateClass(blockName: string, elemName?: string, modName?: string, modValue?: unknown): string {\n    if (BEM_MODULE_CONFIG.ignoreValues) {\n        modValue = !!modValue;\n    }\n\n    if (typeof modValue !== 'string' && typeof modValue !== 'boolean') {\n        modValue = !!modValue;\n    }\n\n    let cls: string = blockName;\n\n    if (elemName) {\n        cls += BEM_MODULE_CONFIG.separators.el + elemName;\n    }\n\n    if (modName) {\n        modName = modNameHandler(modName);\n        cls += BEM_MODULE_CONFIG.separators.mod + modName;\n        if (typeof modValue !== 'boolean' && modValue != null) {\n            cls += BEM_MODULE_CONFIG.separators.val + modValue;\n        }\n    }\n\n    return cls;\n}\n\nexport function parseMods(mods?: string | string[] | (string | false)[] | IModsObject): IModsObject {\n    if (typeof mods === 'string') {\n        mods = mods.split(/\\s+/);\n    }\n\n    if (Array.isArray(mods)) {\n        const modsObj: IModsObject = {};\n\n        mods.forEach((key: string | false) => {\n            if (key) {\n                modsObj[key] = true;\n            }\n        });\n        mods = modsObj;\n    } else if (typeof mods !== 'object') {\n        return {};\n    }\n\n    return mods;\n}\n\nexport function setMods(\n    blockName: string,\n    elemName: string,\n    mods: IModsObject,\n    oldMods: IModsObject,\n    element: ElementRef,\n    renderer: Renderer2\n): void {\n    Object.keys(mods).forEach((key: string) => {\n        if (oldMods[key]) {\n            if (mods[key] === oldMods[key]) {\n                return;\n            }\n\n            renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));\n        }\n\n        if (mods[key]) {\n            renderer.addClass(element.nativeElement, generateClass(blockName, elemName, key, mods[key]));\n        }\n    });\n\n    Object.keys(oldMods).forEach((key: string) => {\n        if (!(key in mods) && oldMods[key]) {\n            renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));\n        }\n    });\n}\n","import { Attribute, Directive, ElementRef, Input, OnChanges, Optional, Renderer2 } from '@angular/core';\n\nimport { IModsObject } from './bem.types';\nimport { generateClass, parseMods, setMods } from './bem.utils';\n\n@Directive({\n    selector: '[rtBlock]',\n})\nexport class BlockDirective implements OnChanges {\n    @Input() public rtMod?: string | string[] | (string | false)[] | IModsObject;\n    #mods: IModsObject = {};\n    #modSerialized: string = '';\n\n    constructor(\n        public readonly element: ElementRef,\n        public readonly renderer: Renderer2,\n        @Attribute('rtBlock') public readonly name: string,\n        @Optional() @Attribute('rtElem') private readonly elem: string\n    ) {\n        if (!elem && !(element.nativeElement instanceof Comment)) {\n            renderer.addClass(element.nativeElement, generateClass(name));\n        }\n    }\n\n    public ngOnChanges(): void {\n        if (JSON.stringify(this.rtMod) !== this.#modSerialized && !this.elem) {\n            this.#modSerialized = JSON.stringify(this.rtMod);\n\n            let mods: string | string[] | (string | false)[] | IModsObject | undefined = this.rtMod;\n\n            const { renderer, element, name } = this;\n\n            mods = parseMods(mods);\n\n            if (!(element.nativeElement instanceof Comment)) {\n                setMods(name, '', mods, this.#mods || {}, element, renderer);\n            }\n\n            this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;\n        }\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'concatClasses',\n})\nexport class ConcatClassesPipe implements PipeTransform {\n    public transform<C extends string | boolean | null | undefined>(classes: (C | C[])[]): string {\n        // eslint-disable-next-line\n        const validClassList = classes.flat().filter((className) => typeof className === 'string' && !!className.trim());\n        return validClassList.join(' ');\n    }\n}\n","import { Attribute, Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';\n\nimport { IModsObject } from './bem.types';\nimport { generateClass, parseMods, setMods } from './bem.utils';\nimport { BlockDirective } from './block.directive';\n\n@Directive({\n    selector: '[rtElem]',\n})\nexport class ElemDirective implements OnChanges {\n    @Input() public rtMod?: string | string[] | (string | false)[] | IModsObject;\n    public blockName: string;\n    #mods: IModsObject = {};\n    #modSerialized: string = '';\n\n    constructor(\n        public readonly element: ElementRef,\n        public readonly renderer: Renderer2,\n        @Attribute('rtElem') public readonly name: string,\n        private readonly rtBlock: BlockDirective\n    ) {\n        this.blockName = rtBlock.name;\n\n        renderer.addClass(element.nativeElement, generateClass(rtBlock.name, name));\n    }\n\n    public ngOnChanges(): void {\n        if (JSON.stringify(this.rtMod) !== this.#modSerialized) {\n            this.#modSerialized = JSON.stringify(this.rtMod);\n\n            let mods: string | string[] | (string | false)[] | IModsObject | undefined = this.rtMod;\n\n            const { renderer, element, blockName, name } = this;\n\n            mods = parseMods(mods);\n\n            setMods(blockName, name, mods, this.#mods || {}, element, renderer);\n\n            this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;\n        }\n    }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[rtMod]',\n})\nexport class ModDirective {}\n","export enum STORAGE_TYPES_ENUM {\n    LOCAL = 'local',\n    SESSION = 'session',\n    IN_MEMORY = 'inMemory',\n    CUSTOM = 'custom',\n}\n\nexport type StorageType = STORAGE_TYPES_ENUM.LOCAL | STORAGE_TYPES_ENUM.SESSION | STORAGE_TYPES_ENUM.IN_MEMORY | STORAGE_TYPES_ENUM.CUSTOM;\n","import { Injectable } from '@angular/core';\n\n/**\n * A service that implements the `Storage` interface using an in-memory map.\n * This service provides a fallback storage solution when `localStorage`\n * or `sessionStorage` is not available, such as in server-side rendering (SSR) scenarios.\n *\n * @Injectable\n */\n@Injectable()\nexport class InMemoryStorageService implements Storage {\n    /**\n     * Private in-memory storage map used to store key-value pairs.\n     * The keys are strings, the values are strings.\n     * The map is private and cannot be accessed directly.\n     * Instead, the public methods of the service should be used to interact with the storage.\n     * The map is initialized as an empty map.\n     *\n     * @type {Map<string, string>}\n     * @private\n     * @internal\n     * @readonly\n     */\n    readonly #storage: Map<string, string> = new Map<string, string>();\n\n    /**\n     * Returns the number of key-value pairs currently stored.\n     *\n     * @returns the number of items in storage\n     * @public\n     */\n    public get length(): number {\n        return this.#storage.size;\n    }\n\n    /**\n     * Retrieves the value associated with the given key.\n     *\n     * @param key - The name of the key to retrieve the value for\n     * @returns the value associated with the key, or `null` if the key does not exist\n     * @public\n     * @returns string | null\n     */\n    public getItem(key: string): string | null {\n        return this.#storage.get(key) || null;\n    }\n\n    /**\n     * Adds or updates the key-value pair in the storage.\n     *\n     * @param key - The name of the key to create or update\n     * @param data - The value to associate with the key\n     * @public\n     * @returns void\n     */\n    public setItem(key: string, data: string): void {\n        this.#storage.set(key, data);\n    }\n\n    /**\n     * Retrieves the key at the specified index.\n     *\n     * @param index - The index of the key to retrieve\n     * @returns the key at the specified index, or `null` if the index is out of bounds\n     * @public\n     * @returns string | null\n     */\n    public key(index: number): string | null {\n        return Array.from(this.#storage.keys())[index] || null;\n    }\n\n    /**\n     * Removes the key-value pair associated with the given key.\n     *\n     * @param key - The name of the key to remove\n     * @public\n     * @returns void\n     */\n    public removeItem(key: string): void {\n        this.#storage.delete(key);\n    }\n\n    /**\n     * Clears all key-value pairs from the storage.\n     *\n     * @public\n     * @returns void\n     */\n    public clear(): void {\n        this.#storage.clear();\n    }\n}\n","import { Nullable } from '../util/interfaces/nullable.type';\nimport { IStorageConverter } from './interfaces/storage-converter';\n\nexport class JsonConverter implements IStorageConverter {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public convertTo(data: Nullable<any>): string {\n        let parsedData: string;\n\n        try {\n            parsedData = JSON.stringify(data);\n        } catch (e: unknown) {\n            // eslint-disable-next-line no-console\n            console.error(e);\n            parsedData = 'null';\n        }\n\n        return parsedData;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public convertFrom<T>(data: any): Nullable<T> {\n        if (typeof data === 'string') {\n            try {\n                return JSON.parse(data) as T;\n            } catch (e: unknown) {\n                // eslint-disable-next-line no-console\n                console.error(e);\n                return null;\n            }\n        }\n\n        return null;\n    }\n}\n","/**\n * Date formatting and parsing utilities (replacement for date-fns)\n *\n * Supported format tokens:\n * - yyyy: 4-digit year (2024)\n * - yy: 2-digit year (24)\n * - MM: 2-digit month (01-12)\n * - M: month (1-12)\n * - dd: 2-digit day (01-31)\n * - d: day (1-31)\n * - HH: 2-digit hour 24h (00-23)\n * - H: hour 24h (0-23)\n * - hh: 2-digit hour 12h (01-12)\n * - h: hour 12h (1-12)\n * - mm: 2-digit minutes (00-59)\n * - m: minutes (0-59)\n * - ss: 2-digit seconds (00-59)\n * - s: seconds (0-59)\n * - SSS: milliseconds (000-999)\n * - a: AM/PM\n * - EEEE: full weekday name (Monday)\n * - EEE: short weekday name (Mon)\n * - MMMM: full month name (January)\n * - MMM: short month name (Jan)\n */\n\nconst WEEKDAYS_SHORT: string[] = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst WEEKDAYS_LONG: string[] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst MONTHS_SHORT: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst MONTHS_LONG: string[] = [\n    'January',\n    'February',\n    'March',\n    'April',\n    'May',\n    'June',\n    'July',\n    'August',\n    'September',\n    'October',\n    'November',\n    'December',\n];\n\n/**\n * Escapes special regex characters in a string\n */\nfunction escapeRegExp(str: string): string {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Pads a number with leading zeros\n */\nfunction padStart(value: number, length: number): string {\n    return String(value).padStart(length, '0');\n}\n\n/**\n * Checks if a value is a valid Date object\n */\nexport function isDate(value: unknown): value is Date {\n    return value instanceof Date && !isNaN(value.getTime());\n}\n\n/**\n * Formats a Date object according to the specified format string\n *\n * @param date - The date to format\n * @param formatStr - The format string (e.g., 'dd.MM.yyyy', 'yyyy-MM-dd HH:mm:ss')\n * @returns Formatted date string\n *\n * @example\n * formatDate(new Date(2024, 0, 15), 'dd.MM.yyyy') // '15.01.2024'\n * formatDate(new Date(2024, 0, 15, 14, 30), 'yyyy-MM-dd HH:mm') // '2024-01-15 14:30'\n */\nexport function formatDate(date: Date, formatStr: string): string {\n    if (!isDate(date)) {\n        return '';\n    }\n\n    const year: number = date.getFullYear();\n    const month: number = date.getMonth();\n    const day: number = date.getDate();\n    const hours: number = date.getHours();\n    const minutes: number = date.getMinutes();\n    const seconds: number = date.getSeconds();\n    const milliseconds: number = date.getMilliseconds();\n    const dayOfWeek: number = date.getDay();\n\n    const hours12: number = hours % 12 || 12;\n    const ampm: string = hours < 12 ? 'AM' : 'PM';\n\n    // Use placeholders to avoid partial replacements\n    const placeholders: Map<string, string> = new Map();\n    let placeholderIndex: number = 0;\n\n    const createPlaceholder: (value: string) => string = (value: string): string => {\n        const placeholder: string = `\\x00${placeholderIndex++}\\x00`;\n        placeholders.set(placeholder, value);\n        return placeholder;\n    };\n\n    // Order matters: longer tokens must be replaced first\n    // Use exact token matching to prevent partial replacements\n    let result: string = formatStr;\n\n    // Replace tokens with placeholders (longest first)\n    result = result.replace(/yyyy/g, createPlaceholder(String(year)));\n    result = result.replace(/yy/g, createPlaceholder(String(year).slice(-2)));\n    result = result.replace(/MMMM/g, createPlaceholder(MONTHS_LONG[month]));\n    result = result.replace(/MMM/g, createPlaceholder(MONTHS_SHORT[month]));\n    result = result.replace(/MM/g, createPlaceholder(padStart(month + 1, 2)));\n    result = result.replace(/M/g, createPlaceholder(String(month + 1)));\n    result = result.replace(/EEEE/g, createPlaceholder(WEEKDAYS_LONG[dayOfWeek]));\n    result = result.replace(/EEE/g, createPlaceholder(WEEKDAYS_SHORT[dayOfWeek]));\n    result = result.replace(/dd/g, createPlaceholder(padStart(day, 2)));\n    result = result.replace(/d/g, createPlaceholder(String(day)));\n    result = result.replace(/HH/g, createPlaceholder(padStart(hours, 2)));\n    result = result.replace(/H/g, createPlaceholder(String(hours)));\n    result = result.replace(/hh/g, createPlaceholder(padStart(hours12, 2)));\n    result = result.replace(/h/g, createPlaceholder(String(hours12)));\n    result = result.replace(/mm/g, createPlaceholder(padStart(minutes, 2)));\n    result = result.replace(/m/g, createPlaceholder(String(minutes)));\n    result = result.replace(/SSS/g, createPlaceholder(padStart(milliseconds, 3)));\n    result = result.replace(/ss/g, createPlaceholder(padStart(seconds, 2)));\n    result = result.replace(/s/g, createPlaceholder(String(seconds)));\n    result = result.replace(/a/g, createPlaceholder(ampm));\n\n    // Replace placeholders with actual values\n    for (const [placeholder, value] of placeholders) {\n        result = result.replace(placeholder, value);\n    }\n\n    return result;\n}\n\n/**\n * Parses an ISO 8601 date string into a Date object\n *\n * @param dateString - ISO date string (e.g., '2024-01-15', '2024-01-15T14:30:00.000Z')\n * @returns Date object or Invalid Date if parsing fails\n *\n * @example\n * parseISO('2024-01-15') // Date object for Jan 15, 2024\n * parseISO('2024-01-15T14:30:00.000Z') // Date object with time\n */\nexport function parseISO(dateString: string): Date {\n    if (!dateString || typeof dateString !== 'string') {\n        return new Date(NaN);\n    }\n\n    const date: Date = new Date(dateString);\n    return date;\n}\n\ninterface TokenPattern {\n    token: string;\n    pattern: string;\n    handler: (val: string) => void;\n}\n\ninterface PlaceholderItem {\n    placeholder: string;\n    pattern: string;\n    handler: (val: string) => void;\n}\n\ninterface PositionedHandler {\n    placeholder: string;\n    handler: (val: string) => void;\n    position: number;\n}\n\n/**\n * Parses a date string according to the specified format\n *\n * @param dateString - The date string to parse\n * @param formatStr - The format string describing the input\n * @param referenceDate - Reference date for missing parts (defaults to current date)\n * @returns Date object or Invalid Date if parsing fails\n *\n * @example\n * parseDate('15.01.2024', 'dd.MM.yyyy') // Date object for Jan 15, 2024\n * parseDate('2024/01/15 14:30', 'yyyy/MM/dd HH:mm') // Date with time\n */\nexport function parseDate(dateString: string, formatStr: string, referenceDate: Date = new Date()): Date {\n    if (!dateString || typeof dateString !== 'string') {\n        return new Date(NaN);\n    }\n\n    let year: number = referenceDate.getFullYear();\n    let month: number = referenceDate.getMonth();\n    let day: number = referenceDate.getDate();\n    let hours: number = 0;\n    let minutes: number = 0;\n    let seconds: number = 0;\n    let milliseconds: number = 0;\n    let isPM: boolean = false;\n    let hasAMPM: boolean = false;\n\n    const tokenPatterns: TokenPattern[] = [\n        {\n            token: 'yyyy',\n            pattern: '(\\\\d{4})',\n            handler: (val: string): void => {\n                year = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'yy',\n            pattern: '(\\\\d{2})',\n            handler: (val: string): void => {\n                const parsed: number = parseInt(val, 10);\n                year = parsed >= 70 ? 1900 + parsed : 2000 + parsed;\n            },\n        },\n        {\n            token: 'MMMM',\n            pattern: `(${MONTHS_LONG.join('|')})`,\n            handler: (val: string): void => {\n                month = MONTHS_LONG.findIndex((m: string) => m.toLowerCase() === val.toLowerCase());\n            },\n        },\n        {\n            token: 'MMM',\n            pattern: `(${MONTHS_SHORT.join('|')})`,\n            handler: (val: string): void => {\n                month = MONTHS_SHORT.findIndex((m: string) => m.toLowerCase() === val.toLowerCase());\n            },\n        },\n        {\n            token: 'MM',\n            pattern: '(\\\\d{2})',\n            handler: (val: string): void => {\n                month = parseInt(val, 10) - 1;\n            },\n        },\n        {\n            token: 'M',\n            pattern: '(\\\\d{1,2})',\n            handler: (val: string): void => {\n                month = parseInt(val, 10) - 1;\n            },\n        },\n        {\n            token: 'dd',\n            pattern: '(\\\\d{2})',\n            handler: (val: string): void => {\n                day = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'd',\n            pattern: '(\\\\d{1,2})',\n            handler: (val: string): void => {\n                day = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'HH',\n            pattern: '(\\\\d{2})',\n            handler: (val: string): void => {\n                hours = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'H',\n            pattern: '(\\\\d{1,2})',\n            handler: (val: string): void => {\n                hours = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'hh',\n            pattern: '(\\\\d{2})',\n            handler: (val: string): void => {\n                hours = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'h',\n            pattern: '(\\\\d{1,2})',\n            handler: (val: string): void => {\n                hours = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'mm',\n            pattern: '(\\\\d{2})',\n            handler: (val: string): void => {\n                minutes = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'm',\n            pattern: '(\\\\d{1,2})',\n            handler: (val: string): void => {\n                minutes = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'SSS',\n            pattern: '(\\\\d{3})',\n            handler: (val: string): void => {\n                milliseconds = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'ss',\n            pattern: '(\\\\d{2})',\n            handler: (val: string): void => {\n                seconds = parseInt(val, 10);\n            },\n        },\n        {\n            token: 's',\n            pattern: '(\\\\d{1,2})',\n            handler: (val: string): void => {\n                seconds = parseInt(val, 10);\n            },\n        },\n        {\n            token: 'a',\n            pattern: '(AM|PM|am|pm)',\n            handler: (val: string): void => {\n                hasAMPM = true;\n                isPM = val.toUpperCase() === 'PM';\n            },\n        },\n    ];\n\n    // Sort by token length (longer first) to avoid partial matches\n    const sortedPatterns: TokenPattern[] = [...tokenPatterns].sort((a: TokenPattern, b: TokenPattern) => b.token.length - a.token.length);\n\n    // Build regex from format string using placeholders to avoid double-replacement\n    // First, replace all tokens in the original format string with placeholders\n    let workingFormat: string = formatStr;\n    const placeholderList: PlaceholderItem[] = [];\n    let placeholderIndex: number = 0;\n\n    for (const { token, pattern, handler } of sortedPatterns) {\n        if (workingFormat.includes(token)) {\n            const placeholder: string = `\\x00${placeholderIndex++}\\x00`;\n            workingFormat = workingFormat.split(token).join(placeholder);\n            placeholderList.push({ placeholder, pattern, handler });\n        }\n    }\n\n    // Now escape the remaining literal characters\n    let regexStr: string = escapeRegExp(workingFormat);\n\n    // Replace placeholders with actual regex patterns\n    for (const { placeholder, pattern } of placeholderList) {\n        regexStr = regexStr.replace(escapeRegExp(placeholder), pattern);\n    }\n\n    // Sort handlers by their placeholder position in the original working format\n    // to match capture group order (left-to-right in the regex)\n    const sortedByPosition: PositionedHandler[] = placeholderList\n        .map(\n            (item: PlaceholderItem): PositionedHandler => ({\n                placeholder: item.placeholder,\n                handler: item.handler,\n                position: escapeRegExp(workingFormat).indexOf(escapeRegExp(item.placeholder)),\n            })\n        )\n        .sort((a: PositionedHandler, b: PositionedHandler) => a.position - b.position);\n\n    const handlers: ((val: string) => void)[] = sortedByPosition.map((item: PositionedHandler) => item.handler);\n\n    const regex: RegExp = new RegExp(`^${regexStr}$`, 'i');\n    const match: RegExpMatchArray | null = dateString.match(regex);\n\n    if (!match) {\n        return new Date(NaN);\n    }\n\n    // Apply handlers in order\n    for (let i: number = 0; i < handlers.length; i++) {\n        if (match[i + 1]) {\n            handlers[i](match[i + 1]);\n        }\n    }\n\n    // Apply AM/PM adjustment after all handlers\n    if (hasAMPM) {\n        if (isPM && hours < 12) {\n            hours += 12;\n        } else if (!isPM && hours === 12) {\n            hours = 0;\n        }\n    }\n\n    return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n}\n","const MAX_YEAR: number = 3000;\n\nexport function dateStringToDate(date: string | Date): Date {\n    if (date instanceof Date) {\n        return date;\n    }\n\n    const firstItem: number = 1;\n    const parsedDate: string = (date || '')\n        .replace(/^(\\d)/, '0$1')\n        .replace(/\\.(\\d)\\./, '.0$1.')\n        .replace('..', '.01.')\n        .replace(/^\\./, '01.')\n        .replace(/(\\d{3})\\./g, (str: string): string => str.slice(firstItem))\n        .replace(/(\\d{2}).(\\d{2}).(\\d{4})/, '$2/$1/$3')\n        .replace(/00\\//g, '01/');\n\n    const dateValue: Date = new Date(parsedDate);\n\n    if (dateValue.getFullYear() > MAX_YEAR) {\n        return new Date();\n    }\n\n    return isNaN(dateValue.getTime()) ? new Date() : dateValue;\n}\n","export function isDateValid(date?: Date): boolean {\n    return date instanceof Date && Boolean(date.getTime());\n}\n","/**\n * Indicates if the arguments are equal\n *\n * @param f first parameter to compare\n * @param s second parameter to compare\n */\nexport function isEqual<T>(f: T, s: T): boolean {\n    const s1: string = JSON.stringify(f).split('').sort().join('');\n    const s2: string = JSON.stringify(s).split('').sort().join('');\n    return s1 === s2;\n}\n\n/**\n * Indicates if the content of two arrays is identical\n *\n * @param f first array\n * @param s second array\n */\nexport function areArraysEqual<T>(f: T[], s: T[]): boolean {\n    if (!Array.isArray(f) || !Array.isArray(s)) {\n        return false;\n    }\n\n    if (f.length !== s.length) {\n        return false;\n    }\n\n    for (let i: number = 0; i < f.length; i++) {\n        const valueF: T = f[i];\n        const valueS: T = s[i];\n\n        if (Array.isArray(valueF) && Array.isArray(valueS)) {\n            if (!areArraysEqual(valueF, valueS)) {\n                return false;\n            }\n        }\n\n        if (typeof valueF === 'object' && valueF != null && typeof valueS === 'object' && valueS != null) {\n            // eslint-disable-next-line @typescript-eslint/no-use-before-define\n            if (!areObjectsEqual(valueF, valueS)) {\n                return false;\n            }\n        } else if (valueF !== valueS) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Indicates if the content of two objects is identical\n *\n * @param f first object\n * @param s second object\n */\nexport function areObjectsEqual<T>(f: T, s: T): boolean {\n    /** If it's just the same object - no need to compare */\n    if (f === s) {\n        return true;\n    }\n\n    if (Array.isArray(f) && Array.isArray(s)) {\n        return areArraysEqual(f, s);\n    }\n\n    /** If one of the objects is null or undefined - no need to compare */\n    if (typeof f === 'object' && f != null && typeof s === 'object' && s != null) {\n        const keysF: string[] = Object.keys(f);\n        const keysS: string[] = Object.keys(s);\n\n        if (keysF.length != keysS.length) {\n            return false;\n        }\n\n        for (const key in f) {\n            if (!areObjectsEqual(f[key], s[key])) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * Checks whether two arrays are equal regardless of the order of their elements.\n * Supports deep comparison of nested arrays and objects.\n *\n * @template T The type of elements in the arrays\n * @param f first array\n * @param s second array\n * @returns True if the arrays contain the same elements in any order, false otherwise\n */\nexport function areArraysEqualUnordered<T>(f: T[], s: T[]): boolean {\n    if (!Array.isArray(f) || !Array.isArray(s)) {\n        return false;\n    }\n\n    if (f.length !== s.length) {\n        return false;\n    }\n\n    const used: boolean[] = new Array<boolean>(s.length).fill(false);\n\n    for (const valueF of f) {\n        let found: boolean = false;\n\n        for (let i: number = 0; i < s.length; i++) {\n            if (used[i]) {\n                continue;\n            }\n\n            const valueS: T = s[i];\n\n            if (Array.isArray(valueF) && Array.isArray(valueS)) {\n                if (areArraysEqualUnordered(valueF, valueS)) {\n                    used[i] = true;\n                    found = true;\n                    break;\n                }\n            } else if (typeof valueF === 'object' && valueF != null && typeof valueS === 'object' && valueS != null) {\n                if (areObjectsEqual(valueF, valueS)) {\n                    used[i] = true;\n                    found = true;\n                    break;\n                }\n            } else if (valueF === valueS) {\n                used[i] = true;\n                found = true;\n                break;\n            }\n        }\n\n        if (!found) {\n            return false;\n        }\n    }\n\n    return true;\n}\n","export function isNumber<T>(value: T | number | unknown | undefined): value is number {\n    return typeof value === 'number';\n}\n","export function isRecord(value: unknown): value is Record<string, unknown> {\n    return value?.constructor === Object;\n}\n","export function isString<T>(value: T | null | undefined | unknown): value is string {\n    return typeof value === 'string';\n}\n","export function initToday(): Date {\n    const today: Date = new Date();\n    today.setHours(0, 0, 0, 0);\n\n    return today;\n}\n\nexport function isToday(date: Date): boolean {\n    const today: Date = initToday();\n\n    return date.getDate() === today.getDate() && date.getMonth() === today.getMonth() && date.getFullYear() === today.getFullYear();\n}\n","/** Makes shallow copy of passed object */\nexport function removeFieldFromObject<T extends object, K extends string>(obj: T, key: K): Omit<T, K> {\n    const result: T = { ...obj };\n\n    if (key in obj) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        delete (result as any)[key];\n    }\n\n    return result;\n}\n","export type ComparatorType<T> = (aa: T, bb: T) => number;\n\n/**\n * Allow to compare two values by provided comparator\n *\n * @param a - T\n * @param b - T\n * @param comparator - ComparatorType<T>\n */\nexport function safeCompare<T>(a: T, b: T, comparator: ComparatorType<T>): number {\n    if (a == null) {\n        if (b == null) {\n            return 0;\n        } else {\n            return 1;\n        }\n    } else {\n        if (b == null) {\n            return -1;\n        } else {\n            return comparator(a, b);\n        }\n    }\n}\n\n/**\n * Allow to safely compare two string values\n *\n * @param a string\n * @param b string\n */\nexport function safeStrCompare(a: string, b: string): number {\n    return safeCompare(a, b, () => a.localeCompare(b));\n}\n\n/**\n * Allow to safely compare two number values\n *\n * @param a number\n * @param b number\n */\nexport function safeNumCompare(a: number, b: number): number {\n    return safeCompare(a, b, () => a - b);\n}\n\n/**\n * Allow composing comparison chain of several comparators\n * that delegate comparison by the chain to the next comparators if current comparator returns 0\n *\n * @param comparators - Array<() => number>\n */\nexport function safeComparatorPipe(...comparators: Array<() => number>): number {\n    let result: number = 0;\n\n    for (let i: number = 0, len: number = comparators.length; i < len; i++) {\n        result = comparators[i]();\n\n        if (result !== 0) {\n            break;\n        }\n    }\n\n    return result;\n}\n","export const sortByAlphabet: <T extends object>(a: T, b: T, field: keyof T) => number = <T extends object>(\n    a: T,\n    b: T,\n    field: keyof T\n): number => {\n    if (a[field] && typeof a[field] === 'string' && b[field] && typeof b[field] === 'string') {\n        if ((a[field] as string).toLowerCase() < (b[field] as string).toLowerCase()) {\n            return -1;\n        }\n        if ((a[field] as string).toLowerCase() > (b[field] as string).toLowerCase()) {\n            return 1;\n        }\n    }\n\n    return 0;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const sortByDate: (a: { [field: string]: any }, b: { [field: string]: any }, field: string) => number = (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    a: { [field: string]: any },\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    b: { [field: string]: any },\n    field: string\n) => new Date(a[field]).getTime() - new Date(b[field]).getTime();\n","export function stringifyHttpLikeParams<T extends object>(params: T): { [param: string]: string | string[] } {\n    return Object.keys(params).reduce(\n        (stringParams: { [param: string]: string | string[] }, key: string) => ({\n            ...stringParams,\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            [key]: encodeURI((params as any)[key]),\n        }),\n        {}\n    );\n}\n","export function transformArrayInput<T>(array: unknown): T[] {\n    if (Array.isArray(array) && array.length) {\n        return array as T[];\n    } else {\n        return [];\n    }\n}\n","import { isString } from './is-string';\n\nexport function transformStringInput(value: unknown): string {\n    return isString(value) ? value : '';\n}\n","export function checkIsEntityInArrayByKey<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>>(\n    selectedEntities: ENTITY[],\n    entity: ENTITY,\n    keyExp: KEY\n): boolean {\n    return !!selectedEntities.find((selectedEntity: ENTITY) => {\n        return (\n            Object.prototype.hasOwnProperty.call(selectedEntity, keyExp) &&\n            Object.prototype.hasOwnProperty.call(entity, keyExp) &&\n            selectedEntity[keyExp] === entity[keyExp]\n        );\n    });\n}\n","export function isNil<T>(entity: T | null | undefined): entity is null | undefined {\n    return entity === null || entity === undefined;\n}\n","import { ConnectedPosition } from '@angular/cdk/overlay';\n\nexport const OVERLAY_POSITIONS: Readonly<ConnectedPosition[]> = Object.freeze([\n    {\n        originX: 'start',\n        originY: 'bottom',\n        overlayX: 'start',\n        overlayY: 'top',\n    },\n    {\n        originX: 'end',\n        originY: 'bottom',\n        overlayX: 'end',\n        overlayY: 'top',\n    },\n    {\n        originX: 'start',\n        originY: 'bottom',\n        overlayX: 'start',\n        overlayY: 'top',\n    },\n    {\n        originX: 'start',\n        originY: 'top',\n        overlayX: 'start',\n        overlayY: 'bottom',\n    },\n]);\n","export const DASH: string = '—';\n","import { DASH } from '../const';\nimport { isNil } from './is-nil';\n\nexport function emptyToDash<T>(value: T | null | undefined): T | string {\n    return isNil(value) || value === '' ? DASH : value;\n}\n","import { FormControl, Validators } from '@angular/forms';\n\n/**\n * Check if the email is valid\n * @param email\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isEmail(email: any): boolean {\n    return !Boolean(Validators.email(new FormControl(email)));\n}\n","export function isEmptyArray<T>(value: T[]): boolean {\n    return value.length === 0;\n}\n","import { isEmptyArray } from './is-empty-array';\n\nexport function isEmptyObject(value: Record<string, unknown>): boolean {\n    return isEmptyArray(Object.keys(value));\n}\n","export function isEmptyString(value: string): boolean {\n    return value.length === 0;\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n    return typeof value === 'object';\n}\n","import { isEmptyArray } from './is-empty-array';\nimport { isEmptyObject } from './is-empty-object';\nimport { isEmptyString } from './is-empty-string';\nimport { isNil } from './is-nil';\nimport { isObject } from './is-object';\nimport { isString } from './is-string';\n\nexport function isEmpty(value: unknown): boolean {\n    if (isNil(value)) {\n        return true;\n    }\n\n    if (isObject(value)) {\n        if (Array.isArray(value)) {\n            return isEmptyArray(value);\n        }\n\n        if (!(value instanceof Date)) {\n            return isEmptyObject(value);\n        }\n    }\n\n    if (isString(value)) {\n        return isEmptyString(value);\n    }\n\n    return false;\n}\n","import { Nullable } from '../interfaces';\n\nexport function debounce(timeout: number = 300): MethodDecorator {\n    return function (_target: object, _key: string | symbol, descriptor: PropertyDescriptor) {\n        const timeoutRefs: WeakMap<object, ReturnType<typeof setTimeout>> = new WeakMap<object, ReturnType<typeof setTimeout>>();\n        const { value } = descriptor;\n\n        descriptor.value = function (...args: unknown[]): void {\n            const timeoutRef: Nullable<ReturnType<typeof setTimeout>> = timeoutRefs.get(this);\n            if (timeoutRef !== undefined) {\n                clearTimeout(timeoutRef);\n            }\n            timeoutRefs.set(\n                this,\n                setTimeout(() => value.apply(this, args), timeout)\n            );\n        };\n\n        return descriptor;\n    };\n}\n","import { Nullable } from '../interfaces';\n\nexport enum HAS_OWN_SCOPE_ENUM {\n    ANY = 'any',\n    OWN = 'own',\n    INHERITED = 'inherited',\n}\n\nexport type IHasScopeType = HAS_OWN_SCOPE_ENUM.ANY | HAS_OWN_SCOPE_ENUM.OWN | HAS_OWN_SCOPE_ENUM.INHERITED;\n\n/** Internal: cross-runtime own-property check (uses Object.hasOwn if available, otherwise falls back to hasOwnProperty.call). */\ntype HasOwnFn = (o: object, k: PropertyKey) => boolean;\nconst safetyHasOwn: HasOwnFn = (o: object, k: PropertyKey) => {\n    const native: Nullable<HasOwnFn> = (Object as unknown as { hasOwn?: HasOwnFn }).hasOwn;\n    return typeof native === 'function' ? native(o, k) : Object.prototype.hasOwnProperty.call(o, k);\n};\n\n/**\n * Safe property existence check with configurable scope.\n *\n * - Returns `false` for `null`/`undefined`.\n * - Boxes primitives (e.g., strings, numbers) so prototype checks work.\n * - Does **not** invoke getters; relies on `in` and an own-check helper.\n * - Uses `Object.hasOwn` when available; **falls back** to\n *   `Object.prototype.hasOwnProperty.call` on older runtimes.\n *\n * @param obj {unknown} - Value to check. `null`/`undefined` short-circuit to `false`.\n * @param key {PropertyKey} - Property key (string | number | symbol).\n * @param scope {IHasScopeType} - Check mode: `'any'` (default), `'own'`, or `'inherited'`.\n *\n * @returns `true` if the property exists under the selected scope.\n *\n * @example\n * hasPropertyInChain({ a: 1 }, 'a'); // true (ANY)\n * hasPropertyInChain(Object.create({ a: 1 }), 'a', HAS_OWN_SCOPE_ENUM.INHERITED); // true\n * hasPropertyInChain({ a: 1 }, 'b', HAS_OWN_SCOPE_ENUM.OWN); // false\n */\nexport function hasPropertyInChain(obj: unknown, key: PropertyKey, scope: IHasScopeType = HAS_OWN_SCOPE_ENUM.OWN): boolean {\n    if (obj === undefined || obj === null) {\n        return false;\n    }\n    const o: object = Object(obj);\n\n    switch (scope) {\n        case HAS_OWN_SCOPE_ENUM.OWN:\n            return safetyHasOwn(o, key);\n\n        case HAS_OWN_SCOPE_ENUM.INHERITED:\n            return key in o && !safetyHasOwn(o, key);\n\n        default:\n            return key in o;\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { DASH } from '../const';\nimport { isNil, isString } from '../functions';\nimport { Nullable } from '../interfaces/nullable.type';\n\n@Pipe({\n    name: 'breakString',\n})\nexport class BreakStringPipe implements PipeTransform {\n    public transform(value: Nullable<string>): string {\n        if (isNil(value)) {\n            return DASH;\n        }\n\n        if (value && isString(value)) {\n            if (/\\s/.test(value) || /^[A-Z0-9\\s]+$/.test(value) || /\\d/.test(value) || /[^\\w\\s]/.test(value)) {\n                return value;\n            }\n\n            return value.split(/(?=[A-Z])/).join(' ');\n        }\n\n        return value.toString();\n    }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n    name: 'sanitize',\n    pure: true,\n})\nexport class SanitizePipe implements PipeTransform {\n    readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n    public transform(value: string): SafeHtml {\n        return this.#sanitizer.bypassSecurityTrustHtml(value);\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { DASH } from '../const';\nimport { isNumber, isString } from '../functions';\n\n@Pipe({\n    name: 'entityToString',\n    pure: true,\n})\nexport class EntityToStringPipe implements PipeTransform {\n    public transform<T>(value: T): string {\n        if (isString(value)) {\n            return value;\n        }\n\n        if (isNumber(value)) {\n            return value.toString();\n        }\n\n        return DASH;\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { emptyToDash } from '../functions';\n\n@Pipe({\n    name: 'emptyToDash',\n    pure: true,\n})\nexport class EmptyToDashPipe implements PipeTransform {\n    public transform<T>(value: T | null | undefined): T | string {\n        return emptyToDash(value);\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to compare equality to any of items with provided value\n * @example\n *\n * Direct usage\n * ```ts\n *   equalPipe.transform(100, 1, 10, 100) // => true\n * ```\n *\n * Template usage\n *\n * ```html\n *   <div *ngIf=\"100 | equal:1:10:100\">Visible</div>\n * ```\n */\n@Pipe({\n    name: 'equal',\n})\nexport class EqualPipe implements PipeTransform {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public transform(value: any, ...compares: any[]): boolean {\n        return compares.reduce((equal: boolean, compare: boolean) => equal || value === compare, false);\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to access to the deep object state for comparison\n * @example\n *  {a: {b: true}} | equalChain:'a':'b':true => true\n */\n@Pipe({\n    name: 'equalChain',\n})\nexport class EqualChainPipe implements PipeTransform {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public transform(obj: object, ...args: any[]): boolean {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const compared: any = args.pop();\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return Boolean(obj) && args.reduce((inner: any, arg: string) => inner[arg], obj) === compared;\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to compare not equality to all items with provided value\n * @example\n *\n * Direct usage\n * ```ts\n *   notEqualPipe.transform(100, 1, 10, 100) // => false\n * ```\n *\n * Template usage\n *\n * ```html\n *   <div *ngIf=\"100 | notEqual:1:10:100\">Invisible</div>\n * ```\n */\n@Pipe({\n    name: 'notEqual',\n})\nexport class NotEqualPipe implements PipeTransform {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public transform(value: any, ...compares: any[]): boolean {\n        return compares.reduce((notEqual: boolean, compare: boolean) => notEqual && value !== compare, true);\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to access to the deep object state for comparison\n * @example\n *  {a: {b: true}} | equalChain:'a':'b':false => true\n */\n@Pipe({\n    name: 'notEqualChain',\n})\nexport class NotEqualChainPipe implements PipeTransform {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public transform(obj: object, ...args: any[]): boolean {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const compared: any = args.pop();\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return Boolean(obj) && args.reduce((inner: any, arg: string) => inner[arg], obj) !== compared;\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'ternary',\n})\nexport class TernaryPipe implements PipeTransform {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public transform(value: any, option1: any, option2: any): any {\n        return Boolean(value) ? option1 : option2;\n    }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\n\n/**\n * A service for detecting the platform on which the application is running.\n * This service is useful for checking if the application is running in a browser\n * environment or on the server-side.\n *\n * @Injectable\n */\n@Injectable()\nexport class PlatformService {\n    readonly #platformId: object = inject(PLATFORM_ID);\n    public readonly isPlatformBrowser: boolean;\n\n    constructor() {\n        this.isPlatformBrowser = isPlatformBrowser(this.#platformId);\n    }\n}\n","import { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nexport interface MessageBusEvent<T = string> {\n    readonly type: T;\n}\n\nexport class MessageBus<M> {\n    readonly #eventSource: Subject<MessageBusEvent<M>> = new Subject<MessageBusEvent<M>>();\n\n    public emit(event: MessageBusEvent<M>): void {\n        this.#eventSource.next(event);\n    }\n\n    public onEmit(): Observable<MessageBusEvent<M>> {\n        return this.#eventSource.asObservable();\n    }\n\n    public ofType(eventType: M): Observable<MessageBusEvent<M>> {\n        return this.onEmit().pipe(\n            filter((event: MessageBusEvent<M>): event is MessageBusEvent<M> => event.type === eventType),\n            map((event: MessageBusEvent<M>) => event)\n        );\n    }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { InjectionToken, inject } from '@angular/core';\n\nexport const WINDOW: InjectionToken<Window> = new InjectionToken<Window>('An injection token for global window object', {\n    factory: (): Window => {\n        const { defaultView }: Document = inject(DOCUMENT);\n\n        if (!defaultView) {\n            throw new Error('Window is not available');\n        }\n\n        return defaultView;\n    },\n});\n","import { ComponentType, OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nexport type AsidePositions = 'left' | 'right';\n\nexport class AsideRef<DATA, ANSWER> {\n    constructor(\n        private answer: Subject<ANSWER | null>,\n        public overlayRef: OverlayRef,\n        public component: ComponentType<unknown>,\n        public position: AsidePositions,\n        public data: DATA\n    ) {}\n\n    public close(answer?: ANSWER): void {\n        this.answer.next(answer ?? null);\n    }\n}\n\nexport const ASIDE_REF: InjectionToken<AsideRef<object, object>> = new InjectionToken<AsideRef<object, object>>('ASIDE_REF');\n\nexport const ddServices: Array<{ provide: string; useValue: unknown }> = [\n    { provide: 'ddData', useValue: undefined },\n    { provide: 'ddAnswer', useValue: undefined },\n    { provide: 'ddOverlay', useValue: undefined },\n];\n","import { DOCUMENT } from '@angular/common';\nimport { InjectionToken, inject } from '@angular/core';\n\nexport const NAVIGATOR: InjectionToken<Navigator> = new InjectionToken<Navigator>('An injection token for global navigator object', {\n    factory: (): Navigator => {\n        const { defaultView }: Document = inject(DOCUMENT);\n\n        if (!defaultView || !defaultView?.navigator) {\n            throw new Error('Navigator is not available');\n        }\n\n        return defaultView.navigator;\n    },\n});\n","import { Injectable, inject } from '@angular/core';\n\nimport { Nullable } from '../interfaces';\nimport { NAVIGATOR, WINDOW } from '../tokens';\nimport { PlatformService } from './platform.service';\n\nexport namespace OSTypes {\n    export const WINDOWS: string = 'Windows';\n    export const MAC_OS: string = 'Mac OS';\n    export const LINUX: string = 'Linux';\n    export const ANDROID: string = 'Android';\n    export const IOS: string = 'iOS';\n    export const UNKNOWN: string = 'Unknown';\n}\n\n@Injectable()\nexport class DeviceDetectorService {\n    readonly #windowRef: Window = inject(WINDOW);\n    readonly #navigatorRef: Navigator = inject(NAVIGATOR);\n    readonly #platformService: PlatformService = inject(PlatformService);\n\n    public userAgent: Nullable<string> = null;\n\n    constructor() {\n        if (\n            this.#platformService.isPlatformBrowser &&\n            typeof this.#windowRef !== 'undefined' &&\n            typeof this.#navigatorRef !== 'undefined' &&\n            this.#navigatorRef?.userAgent\n        ) {\n            this.userAgent = this.#navigatorRef.userAgent;\n        }\n    }\n\n    public isMobile(): boolean {\n        return this.userAgent ? /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(this.userAgent) : false;\n    }\n\n    public isTablet(): boolean {\n        return this.userAgent ? /iPad|Android|Tablet/i.test(this.userAgent) : false;\n    }\n\n    public isDesktop(): boolean {\n        return !this.isMobile() && !this.isTablet();\n    }\n\n    public getOS(): string {\n        let os: string;\n\n        if (this.userAgent && /Windows/i.test(this.userAgent)) {\n            os = OSTypes.WINDOWS;\n        } else if (this.userAgent && /Macintosh|Mac OS/i.test(this.userAgent)) {\n            os = OSTypes.MAC_OS;\n        } else if (this.userAgent && /Linux/i.test(this.userAgent)) {\n            os = OSTypes.LINUX;\n        } else if (this.userAgent && /Android/i.test(this.userAgent)) {\n            os = OSTypes.ANDROID;\n        } else if (this.userAgent && /iOS/i.test(this.userAgent)) {\n            os = OSTypes.IOS;\n        } else {\n            os = OSTypes.UNKNOWN;\n        }\n\n        return os;\n    }\n}\n","import { IBreakpoints } from './breakpoints.model';\n\nexport class Breakpoints implements IBreakpoints {\n    public readonly xl: string = '1920px';\n    public readonly lg: string = '1280px';\n    public readonly md: string = '960px';\n    public readonly sm: string = '720px';\n    public readonly xs: string = '600px';\n}\n","import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\nimport { Injectable, Signal, inject, WritableSignal, signal, computed, Injector } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\n\nimport { distinctUntilChanged, map, switchMap } from 'rxjs/operators';\n\nimport { Nullable } from '../../util/interfaces/nullable.type';\nimport { Breakpoints } from './breakpoints';\nimport { IBreakpoints } from './breakpoints.model';\n\n/**\n * A service that manages responsive design breakpoints using Angular's `BreakpointObserver`.\n * This service provides signals for different screen sizes and allows dynamic\n * breakpoint management.\n *\n * @Injectable\n */\n@Injectable()\nexport class BreakpointService {\n    /**\n     * Private instance of BreakpointObserver used to observe screen size changes.\n     */\n    readonly #breakpointObserver: BreakpointObserver = inject(BreakpointObserver);\n    /**\n     * Private instance of Injector.\n     */\n    readonly #injector: Injector = inject(Injector);\n\n    /**\n     * Instance of a lass containing the breakpoint values for different screen sizes.\n     */\n    readonly #breakpoints: WritableSignal<IBreakpoints> = signal(new Breakpoints());\n\n    readonly #desktopQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().xl})`);\n    readonly #smallDesktopQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().lg})`);\n    readonly #tabletQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().md})`);\n    readonly #smallTabletQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().sm})`);\n    readonly #mobileQuery: Signal<string> = computed(() => `(max-width: ${this.decrementOnePixel(this.#breakpoints().xs)})`);\n\n    public readonly isDesktop: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n        toObservable(this.#desktopQuery, { injector: this.#injector }).pipe(\n            distinctUntilChanged(),\n            switchMap((query: string) => this.#breakpointObserver.observe(query)),\n            map(({ matches }: BreakpointState) => matches)\n        )\n    );\n\n    public readonly isSmallDesktop: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n        toObservable(this.#smallDesktopQuery, { injector: this.#injector }).pipe(\n            distinctUntilChanged(),\n            switchMap((query: string) => this.#breakpointObserver.observe(query)),\n            map(({ matches }: BreakpointState) => matches)\n        )\n    );\n\n    public readonly isMobile: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n        toObservable(this.#mobileQuery, { injector: this.#injector }).pipe(\n            distinctUntilChanged(),\n            switchMap((query: string) => this.#breakpointObserver.observe(query)),\n            map(({ matches }: BreakpointState) => matches)\n        )\n    );\n\n    public readonly isTablet: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n        toObservable(this.#tabletQuery, { injector: this.#injector }).pipe(\n            distinctUntilChanged(),\n            switchMap((query: string) => this.#breakpointObserver.observe(query)),\n            map(({ matches }: BreakpointState) => !matches)\n        )\n    );\n\n    public readonly isSmallTablet: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n        toObservable(this.#smallTabletQuery, { injector: this.#injector }).pipe(\n            distinctUntilChanged(),\n            switchMap((query: string) => this.#breakpointObserver.observe(query)),\n            map(({ matches }: BreakpointState) => matches)\n        )\n    );\n\n    /**\n     * Allows setting custom breakpoints for different screen sizes.\n     *\n     * @param breakpoints - The custom breakpoints to apply.\n     */\n    public setBreakpoints(breakpoints: IBreakpoints): void {\n        this.#breakpoints.set(breakpoints);\n    }\n\n    /**\n     * Helper function to decrement the pixel value by 1.\n     * Used to exclude the exact pixel value in media queries.\n     *\n     * @usageNotes\n     *\n     * This function is useful for setting correct media queries.\n     * E.g. for mobile devices: media query should be `(max-width: 599px)`,\n     * and from `(min-width: 600px)` it should be considered as a tablet.\n     *\n     * @param value - The pixel value to decrement.\n     * @returns The adjusted pixel value as a string.\n     */\n    public decrementOnePixel(value: string): string {\n        return Number(value.split('px')[0]) - 1 + 'px';\n    }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function checkIsMatchingValues(sample: string): ValidatorFn {\n    return (control: AbstractControl): { [key: string]: boolean } | null => {\n        return sample && control.value && control.value.localeCompare(sample) === 0 ? null : { notEquivalent: true };\n    };\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport function arraysNotEmptyValidator(control: AbstractControl): ValidationErrors | null {\n    if (control.value instanceof Object) {\n        const arrays: unknown[][] = Object.values(control.value);\n        const allArraysEmpty: boolean = arrays.every((array: unknown[]) => !array.length);\n        return allArraysEmpty ? { allArraysEmpty: true } : null;\n    } else if (Array.isArray(control.value)) {\n        const array: unknown[] = control.value;\n        return !array.length ? { arrayEmpty: true } : null;\n    } else {\n        return { invalidType: true };\n    }\n}\n","export enum MODAL_WINDOW_SIZE_ENUM {\n    SM = '25rem',\n    MD = '45rem',\n    LG = '65rem',\n    FULL = '100%',\n}\n\nexport type ModalWindowSizeType =\n    | MODAL_WINDOW_SIZE_ENUM.SM\n    | MODAL_WINDOW_SIZE_ENUM.MD\n    | MODAL_WINDOW_SIZE_ENUM.LG\n    | MODAL_WINDOW_SIZE_ENUM.FULL;\n","export enum ASIDE_BUTTONS_ENUM {\n    USER_ACTIVE = 'User active',\n    USER_INACTIVE = 'User inactive',\n    DELETE = 'Delete',\n    RESET = 'Reset',\n}\n\nexport type AsideButtonsType =\n    | ASIDE_BUTTONS_ENUM.USER_ACTIVE\n    | ASIDE_BUTTONS_ENUM.USER_INACTIVE\n    | ASIDE_BUTTONS_ENUM.DELETE\n    | ASIDE_BUTTONS_ENUM.RESET;\n","import { Directive, HostBinding, input, InputSignalWithTransform } from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\n@Directive({\n    selector: 'mat-icon[rtIconOutlined]',\n})\nexport class RtIconOutlinedDirective {\n    public isOutlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        alias: 'rtIconOutlined',\n        transform: (value: BooleanInput) => {\n            return Boolean(value);\n        },\n    });\n\n    @HostBinding('style.fontVariationSettings')\n    public get fontVariationSettings(): string {\n        // eslint-disable-next-line quotes\n        return this.isOutlined() ? \"'FILL' 0, 'wght' 700, 'GRAD' 0, 'opsz' 48\" : \"'FILL' 1, 'wght' 700, 'GRAD' 0, 'opsz' 48\";\n    }\n}\n","import { Directive, effect, input, InputSignal, InputSignalWithTransform } from '@angular/core';\n\nimport { transformArrayInput } from '../functions';\nimport { Nullable } from '../interfaces';\n\n@Directive({\n    selector: '[rtScrollToElement]',\n})\nexport class RtScrollToElementDirective {\n    public rtScrollToElement: InputSignal<string | number> = input.required<string | number>();\n    public elements: InputSignalWithTransform<unknown[], unknown[]> = input.required<unknown[], unknown[]>({\n        transform: (value: unknown[]) => transformArrayInput(value),\n    });\n\n    constructor() {\n        effect(() => {\n            if (this.elements()?.length && this.rtScrollToElement()) {\n                this.#scrollToTarget();\n            }\n        });\n    }\n\n    #scrollToTarget(): void {\n        const targetId: string | number = this.rtScrollToElement();\n        const targetElement: Nullable<HTMLElement> = document.getElementById(targetId.toString());\n        targetElement?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n}\n","import { AfterViewInit, booleanAttribute, Directive, effect, inject, input, InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n@Directive({\n    selector: '[rtHideTooltipDirective]',\n})\nexport class RtHideTooltipDirective implements AfterViewInit {\n    #matTooltip: MatTooltip = inject(MatTooltip);\n\n    /** Current HTMLElement */\n    public element: InputSignal<HTMLElement> = input.required<HTMLElement>({\n        alias: 'rtHideTooltipDirective',\n    });\n    /** Indicates is tooltip shown */\n    public isTooltipShown: InputSignalWithTransform<boolean, boolean> = input.required<boolean, boolean>({\n        transform: booleanAttribute,\n    });\n\n    /** Set tooltip state by 'isTooltipShown' */\n    constructor() {\n        effect(() => {\n            if (this.isTooltipShown()) {\n                this.#setTooltipState();\n            } else {\n                this.#matTooltip.disabled = true;\n            }\n        });\n    }\n\n    public ngAfterViewInit(): void {\n        const element: HTMLElement = this.element();\n\n        /** Set tooltip state when HTMLElement changed */\n        if (element) {\n            const observer: MutationObserver = new MutationObserver(() => {\n                if (this.isTooltipShown()) {\n                    this.#setTooltipState();\n                }\n            });\n\n            observer.observe(element, {\n                childList: true,\n                characterData: true,\n                subtree: true,\n            });\n\n            if (this.isTooltipShown()) {\n                this.#setTooltipState();\n            }\n        }\n    }\n\n    /** Set tooltip state by container and content width */\n    #setTooltipState(): void {\n        this.#matTooltip.disabled = this.element()?.offsetWidth === this.element()?.scrollWidth;\n    }\n}\n","import { Directive, HostListener, inject, input, InputSignal } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { Nullable } from '../interfaces';\nimport { PlatformService } from '../services';\nimport { WINDOW } from '../tokens';\n\n@Directive({\n    selector: '[rtNavigationDirective]',\n    providers: [PlatformService],\n})\nexport class RtNavigationDirective {\n    readonly #router: Router = inject(Router);\n    readonly #windowRef: Window = inject(WINDOW);\n    readonly #platformService: PlatformService = inject(PlatformService);\n\n    public link: InputSignal<Nullable<string>> = input.required({ alias: 'rtNavigationDirective' });\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent): void {\n        if (this.link()) {\n            if (this.#platformService.isPlatformBrowser && (event.ctrlKey || event.metaKey)) {\n                this.#windowRef.open(this.link() as string);\n            } else {\n                void this.#router.navigate([this.link()]);\n            }\n        }\n    }\n}\n","import { DestroyRef, Directive, inject, OnInit, Signal, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\nimport { filter, map, take } from 'rxjs/operators';\n\n@Directive()\nexport abstract class RtTabQueryParamDirective implements OnInit {\n    readonly #router: Router = inject(Router);\n    readonly #route: ActivatedRoute = inject(ActivatedRoute);\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n    readonly #currentTabIndex: WritableSignal<number> = signal(0);\n    public readonly currentTabIndex: Signal<number> = this.#currentTabIndex.asReadonly();\n\n    public ngOnInit(): void {\n        this.#route.queryParamMap\n            .pipe(\n                filter((params: ParamMap) => params.has('tab')),\n                take(1),\n                map((params: ParamMap) => Number(params.get('tab'))),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe((tabIndex: number) => {\n                this.#setTabIndex(tabIndex);\n            });\n    }\n\n    public setQueryTab(index: number): void {\n        void this.#router.navigate([], {\n            relativeTo: this.#route,\n            queryParams: {\n                tab: index,\n            },\n            queryParamsHandling: 'merge',\n        });\n        this.#setTabIndex(index);\n    }\n\n    #setTabIndex(index: number): void {\n        this.#currentTabIndex.set(index);\n    }\n}\n","import { Directive, inject, input, InputSignal, OnDestroy, OnInit, output, OutputEmitterRef } from '@angular/core';\n\nimport { PlatformService } from '../services';\nimport { WINDOW } from '../tokens';\n\n@Directive({\n    selector: '[rtScrollDirective]',\n})\nexport class RtScrollDirective implements OnInit, OnDestroy {\n    readonly #windowRef: Window = inject(WINDOW);\n    readonly #platformService: PlatformService = inject(PlatformService);\n\n    public active: InputSignal<boolean> = input<boolean>(true);\n    public multiplier: InputSignal<number> = input<number>(0.5);\n\n    public readonly scrollAction: OutputEmitterRef<void> = output<void>();\n\n    public ngOnInit(): void {\n        if (this.#platformService.isPlatformBrowser) {\n            this.#windowRef.addEventListener('scroll', this.scroll, true);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.#windowRef.removeEventListener('scroll', this.scroll, true);\n    }\n\n    public scroll: EventListener = (event: Event): void => {\n        const target: HTMLElement = event.target as HTMLElement;\n\n        if (this.active() && target.offsetHeight + target.scrollTop >= target.scrollHeight * this.multiplier()) {\n            this.scrollAction.emit();\n        }\n    };\n}\n","import { Directive, HostListener, output, OutputEmitterRef } from '@angular/core';\n\n@Directive({\n    selector: '[rtEscapeKey]',\n})\nexport class RtEscapeKeyDirective {\n    public readonly escapeKeyAction: OutputEmitterRef<void> = output<void>();\n\n    @HostListener('document:keydown', ['$event'])\n    public handleKeyboardEvent(event: KeyboardEvent): void {\n        if (event.key === 'Escape') {\n            this.escapeKeyAction.emit();\n        }\n    }\n}\n","import { formatDate, isDate, parseDate, parseISO } from '../functions/date-format';\nimport { isNil } from '../functions';\n\nexport class TypeCastHelper {\n    public getAsString(data: unknown, defaultValue: string = ''): string {\n        return !isNil(data) && !Number.isNaN(data) ? String(data) : defaultValue;\n    }\n\n    public getAsNumber(data: unknown, defaultValue?: number): number {\n        const result: number = Number(data);\n\n        return data === null || Number.isNaN(result) ? (defaultValue ?? NaN) : result;\n    }\n\n    public getAsBoolean(data: unknown): boolean {\n        const stringExceptions: string[] = ['false', '0', 'null'];\n\n        if (typeof data === 'string' && stringExceptions.includes(data)) {\n            return false;\n        }\n\n        return Boolean(data);\n    }\n\n    public getAsNull<T = unknown, R = T>(data: T, handler?: (data: T) => R): T | R | null {\n        if (!isNil(data) && !Number.isNaN(data)) {\n            return handler ? handler(data) : data;\n        }\n\n        return null;\n    }\n\n    // eslint-disable-next-line\n    public getAsType(value: unknown, type: NonNullable<unknown>): any {\n        if (!!value && !Object.values(type).includes(value)) {\n            // eslint-disable-next-line no-console\n            console.error(`getAsTyped: the value \"${value}\" was not found in the specified type`);\n            return 'unknown';\n        }\n\n        return value;\n    }\n\n    public getAsTypedArray<T>(data: unknown[], cb: (item: unknown) => T, showError: boolean = true): T[] {\n        if (!Array.isArray(data)) {\n            if (showError) {\n                // eslint-disable-next-line no-console\n                console.error(\n                    'getAsTypedArray: Given data must be an array (now it is ' +\n                        typeof data +\n                        '). Incorrect data will be defined as array of data (data => [data]).'\n                );\n            }\n\n            data = [data];\n        }\n\n        if (!data.length) {\n            return [];\n        }\n\n        return data.map(cb);\n    }\n\n    public getAsDate(date: string | number | Date, asString?: boolean, parseFormatOptions?: string, formatOptions?: string): Date | string {\n        formatOptions = formatOptions ?? 'dd.MM.yyyy';\n        asString = asString ?? true;\n\n        const type: string | number | object = typeof date;\n\n        switch (type) {\n            case 'number':\n                date = new Date(date);\n                break;\n\n            case 'string':\n                date = !!parseFormatOptions ? parseDate(date as string, parseFormatOptions, new Date()) : parseISO(date as string);\n                break;\n        }\n\n        if (!isDate(date)) {\n            return '';\n        }\n\n        return asString ? formatDate(date, formatOptions) : date;\n    }\n}\n","import { IBaseMapper } from '../interfaces';\nimport { TypeCastHelper } from './type-cast.helper';\n\nexport abstract class BaseMapper<M> implements IBaseMapper<M> {\n    public readonly typeCast: TypeCastHelper = new TypeCastHelper();\n\n    // eslint-disable-next-line\n    public mapFrom(data: NonNullable<unknown>, ...args: unknown[]): M {\n        return { ...data } as M;\n    }\n\n    public mapFromArray(data: NonNullable<unknown>[], ...args: unknown[]): M[] {\n        if (!Array.isArray(data)) {\n            // eslint-disable-next-line no-console\n            console.error(\n                'mapFromArray: Given data must be an array (now it is ' + typeof data + '). Incorrect data will be defined as empty array.'\n            );\n            data = [];\n        }\n\n        return data.map((entry: NonNullable<unknown>) => this.mapFrom(entry, ...args));\n    }\n\n    // eslint-disable-next-line\n    public mapTo(model: M, ...args: unknown[]): unknown {\n        return { ...model };\n    }\n\n    public mapToArray(models: M[], ...args: unknown[]): unknown[] {\n        if (!Array.isArray(models)) {\n            // eslint-disable-next-line no-console\n            console.error(\n                'mapToArray: Given data must be an array (now it is ' + typeof models + '). Incorrect data will be defined as empty array.'\n            );\n            models = [];\n        }\n\n        return models.map((model: M) => this.mapTo(model, ...args));\n    }\n}\n","import { animate, AnimationBuilder, AnimationFactory, AnimationPlayer, style } from '@angular/animations';\nimport { afterNextRender, ChangeDetectionStrategy, Component, ElementRef, HostListener, inject, Signal, viewChild } from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { Nullable, RtIconOutlinedDirective } from '../../util';\nimport { IRtSnackBar } from './snack-bar-config.interface';\n\n@Component({\n    selector: 'rtui-snack-bar',\n    templateUrl: './snack-bar.component.html',\n    styleUrls: ['./snack-bar.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [MatButton, MatIconButton, MatIcon, ElemDirective, BlockDirective, RtIconOutlinedDirective],\n})\nexport class RtuiSnackBarComponent {\n    public readonly data: IRtSnackBar.Data = inject(MAT_SNACK_BAR_DATA);\n    readonly #snackBarRef: MatSnackBarRef<RtuiSnackBarComponent> = inject(MatSnackBarRef<RtuiSnackBarComponent>);\n    readonly #animationBuilder: AnimationBuilder = inject(AnimationBuilder);\n\n    public player: AnimationPlayer | undefined;\n\n    public readonly progressTplRef: Signal<Nullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('progressTpl');\n\n    constructor() {\n        afterNextRender(() => {\n            if (this.data.isProgressBarShown && this.data.duration) {\n                this.#startAnimation();\n            }\n        });\n    }\n\n    @HostListener('mouseover')\n    public onMouseOver(): void {\n        this.#pauseAnimation();\n    }\n\n    @HostListener('mouseout')\n    public onMouseOut(): void {\n        this.#resumeAnimation();\n    }\n\n    public dismiss(): void {\n        this.#snackBarRef.dismissWithAction();\n    }\n\n    public close(): void {\n        this.#snackBarRef.dismiss();\n    }\n\n    #startAnimation(): void {\n        const element: HTMLElement | undefined = this.progressTplRef()?.nativeElement;\n\n        if (element) {\n            const factory: AnimationFactory = this.#animationBuilder.build([\n                style({ width: '100%', 'clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)' }),\n                animate('{{ time }} linear', style({ width: '0', 'clip-path': 'polygon(0 0, 0 0, 0 100%, 0 100%)' })),\n            ]);\n\n            this.player = factory.create(element, { params: { time: this.data.duration + 'ms' } });\n            this.player.onDone(() => this.close());\n            this.player.play();\n        }\n    }\n\n    #pauseAnimation(): void {\n        this.player?.pause();\n    }\n\n    #resumeAnimation(): void {\n        this.player?.play();\n    }\n}\n","<ng-container rtBlock=\"rt-snack-bar\">\n    <div rtElem=\"content\">\n        @if (data.icon) {\n            <div rtElem=\"content-icon-wrapper\">\n                <mat-icon rtElem=\"content-icon\" rtIconOutlined>{{ data.icon }}</mat-icon>\n            </div>\n        }\n\n        <div rtElem=\"content-message\">{{ data.message }}</div>\n    </div>\n\n    @if (data.action) {\n        <button rtElem=\"action-button\" mat-button (click)=\"dismiss()\">{{ data.action }}</button>\n    }\n\n    <button rtElem=\"close-button\" color=\"accent\" mat-icon-button type=\"button\" (click)=\"close()\">\n        <mat-icon rtElem=\"close-button-icon\">close</mat-icon>\n    </button>\n\n    @if (data.isProgressBarShown && data.duration) {\n        <div #progressTpl rtElem=\"progress\"></div>\n    }\n</ng-container>\n","import { Injectable, inject } from '@angular/core';\nimport { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';\n\nimport { IRtSnackBar } from './snack-bar-config.interface';\nimport { RtuiSnackBarComponent } from './snack-bar.compontent';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class RtSnackBarService {\n    readonly #snackBar: MatSnackBar = inject(MatSnackBar);\n    private readonly defaultConfig: Readonly<IRtSnackBar.Config> = {\n        duration: 5000,\n    };\n\n    public default(message: string, config: IRtSnackBar.Config = {}): MatSnackBarRef<RtuiSnackBarComponent> {\n        const fullConfig: IRtSnackBar.Config = { ...this.defaultConfig, ...config };\n        return this.#snackBar.openFromComponent(RtuiSnackBarComponent, {\n            ...config,\n            duration: fullConfig?.isProgressBarShown ? undefined : fullConfig.duration,\n            data: { message, ...fullConfig },\n        });\n    }\n\n    public warning(message: string, config: IRtSnackBar.Config = {}): MatSnackBarRef<RtuiSnackBarComponent> {\n        const fullConfig: IRtSnackBar.Config = { ...this.defaultConfig, ...config };\n        return this.#snackBar.openFromComponent(RtuiSnackBarComponent, {\n            ...config,\n            duration: fullConfig?.isProgressBarShown ? undefined : fullConfig.duration,\n            panelClass: config.isColoredBackground ? 'snack-bar-warning-colored' : 'snack-bar-warning',\n            data: { message, ...fullConfig, icon: config.icon || 'warning' },\n        });\n    }\n\n    public danger(message: string, config: IRtSnackBar.Config = {}): MatSnackBarRef<RtuiSnackBarComponent> {\n        const fullConfig: IRtSnackBar.Config = { ...this.defaultConfig, ...config };\n        return this.#snackBar.openFromComponent(RtuiSnackBarComponent, {\n            ...config,\n            duration: fullConfig?.isProgressBarShown ? undefined : fullConfig.duration,\n            panelClass: config.isColoredBackground ? 'snack-bar-danger-colored' : 'snack-bar-danger',\n            data: { message, ...fullConfig, icon: config.icon || 'error' },\n        });\n    }\n\n    public success(message: string, config: IRtSnackBar.Config = {}): MatSnackBarRef<RtuiSnackBarComponent> {\n        const fullConfig: IRtSnackBar.Config = { ...this.defaultConfig, ...config };\n        return this.#snackBar.openFromComponent(RtuiSnackBarComponent, {\n            ...config,\n            duration: fullConfig?.isProgressBarShown ? undefined : fullConfig.duration,\n            panelClass: config.isColoredBackground ? 'snack-bar-success-colored' : 'snack-bar-success',\n            data: { message, ...fullConfig, icon: config.icon || 'check' },\n        });\n    }\n\n    public dismiss(): void {\n        this.#snackBar.dismiss();\n    }\n}\n","import { Provider } from '@angular/core';\n\nimport { RtSnackBarService } from '../ui-kit/snack-bar';\nimport { BreakpointService, PlatformService } from './services';\n\n/**\n * Returns a set of dependency injection providers for utility services.\n *\n * @usageNotes\n *\n * This function provides utility services that are commonly used across\n * an Angular application. Specifically, it provides the `BreakpointService`\n * for managing responsive design breakpoints and the `PlatformService` for\n * detecting the platform on which the application is running (e.g., browser or server).\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideRtUtils()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtUtils(): Provider[] {\n    return [BreakpointService, PlatformService, RtSnackBarService];\n}\n","// utils\nexport * from './functions';\nexport * from './interfaces';\nexport * from './pipes';\nexport * from './services';\nexport * from './tokens';\nexport * from './validators';\nexport * from './enums';\nexport * from './directives';\nexport * from './helpers';\nexport * from './const';\n\nexport * from './providers';\n","import { inject } from '@angular/core';\n\nimport { PlatformService } from '../util';\nimport { Nullable } from '../util/interfaces/nullable.type';\nimport { InMemoryStorageService } from './in-memory-storage.service';\n\n/**\n * Factory for creating or returning `localStorage`.\n * Returns `localStorage` global object if the application is running in a browser,\n * otherwise returns null.\n *\n * @returns localStorage or null\n */\nexport function localStorageFactory(): Nullable<Storage> {\n    return inject(PlatformService).isPlatformBrowser ? localStorage : null;\n}\n\n/**\n * Factory for creating or returning `sessionStorage`.\n * Returns `sessionStorage` global object if the application is running in a browser,\n * otherwise returns null.\n *\n * @returns sessionStorage or null\n */\nexport function sessionStorageFactory(): Nullable<Storage> {\n    return inject(PlatformService).isPlatformBrowser ? sessionStorage : null;\n}\n\n/**\n * Factory for creating `InMemoryStorageService`.\n * Returns a new instance of InMemoryStorageService.\n *\n * @returns a new instance of InMemoryStorageService\n */\nexport function inMemoryStorageFactory(): Storage {\n    return new InMemoryStorageService();\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CUSTOM_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('CUSTOM_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const IN_MEMORY_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('IN_MEMORY_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const LOCAL_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('LOCAL_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const SESSION_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('SESSION_STORAGE');\n","import { inject, Injectable } from '@angular/core';\n\nimport { PlatformService } from '../util';\nimport { Nullable } from '../util/interfaces/nullable.type';\nimport { STORAGE_TYPES_ENUM, StorageType } from './enums/storage-types.enum';\nimport { IStorageConfig } from './interfaces/storage-config';\nimport { JsonConverter } from './json-converter';\nimport { CUSTOM_STORAGE } from './tokens/custom-storage.token';\nimport { IN_MEMORY_STORAGE } from './tokens/in-memory-storage.token';\nimport { LOCAL_STORAGE } from './tokens/local-storage.token';\nimport { SESSION_STORAGE } from './tokens/session-storage.token';\n\nconst defaultStorageConfig: IStorageConfig = {\n    ctx: STORAGE_TYPES_ENUM.LOCAL,\n    storageRef: null,\n    converter: new JsonConverter(),\n};\n\n/**\n * A service for managing data storage across different storage types,\n * including `localStorage`, `sessionStorage`, and an in-memory storage fallback.\n * The service supports custom storage types and data conversion through configurable converters.\n *\n * @Injectable\n */\n@Injectable()\nexport class StorageService {\n    readonly #platformService: PlatformService = inject(PlatformService);\n    readonly #localStorageRef: Storage = inject(LOCAL_STORAGE);\n    readonly #sessionStorageRef: Storage = inject(SESSION_STORAGE);\n    readonly #inMemoryStorageRef: Storage = inject(IN_MEMORY_STORAGE);\n    readonly #customStorageRef: Nullable<Storage> = inject(CUSTOM_STORAGE, { optional: true });\n\n    /**\n     * Retrieves an item from the specified storage context.\n     *\n     * @param key - The key of the item to retrieve.\n     * @param config - Optional configuration for the storage context and data conversion.\n     * @returns The retrieved item, converted from storage if a converter is provided, or `null` if the item does not exist.\n     */\n    public getItem<T>(key: string, config?: Partial<IStorageConfig>): Nullable<T> {\n        const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n        const item: Nullable<T> = this.#storage(fullConfig.ctx)?.getItem(key) as T;\n        return fullConfig.converter?.convertFrom(item) ?? item ?? null;\n    }\n\n    /**\n     * Stores an item in the specified storage context.\n     *\n     * @param key - The key to associate with the stored item.\n     * @param data - The data to store, which will be converted if a converter is provided.\n     * @param config - Optional configuration for the storage context and data conversion.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public setItem(key: string, data: any, config?: Partial<IStorageConfig>): void {\n        const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n        const parsedValue: string = fullConfig.converter?.convertTo(data) ?? data;\n        this.#storage(fullConfig.ctx)?.setItem(key, parsedValue);\n    }\n\n    /**\n     * Checks if a given key exists in the specified storage context.\n     *\n     * @param key - The key to check for.\n     * @param ctx - The storage context to search in (local, session, or in-memory).\n     * @returns `true` if the key exists, `false` otherwise.\n     */\n    public hasKey(key: string, ctx: Nullable<StorageType> = defaultStorageConfig.ctx): boolean {\n        return Object.prototype.hasOwnProperty.call(this.#storage(ctx), key);\n    }\n\n    /**\n     * Executes callback functions based on whether a key exists in the specified storage context.\n     *\n     * @param key - The key to check for.\n     * @param onHas - The callback to execute if the key exists.\n     * @param onHasNot - The optional callback to execute if the key does not exist.\n     * @param config - Optional configuration for the storage context and data conversion.\n     */\n    public onHasKey<T>(key: string, onHas: (value: Nullable<T>) => void, onHasNot?: () => void, config?: Partial<IStorageConfig>): void {\n        const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n\n        if (this.hasKey(key, fullConfig.ctx)) {\n            onHas(this.getItem<T>(key, fullConfig));\n        } else if (onHasNot !== void 0) {\n            onHasNot();\n        }\n    }\n\n    /**\n     * Removes an item from the specified storage context.\n     *\n     * @param key - The key of the item to remove.\n     * @param ctx - The storage context from which to remove the item.\n     */\n    public removeItem(key: string, ctx: Nullable<StorageType> = defaultStorageConfig.ctx): void {\n        this.#storage(ctx)?.removeItem(key);\n    }\n\n    /**\n     * Clears all items from the specified storage context.\n     *\n     * @param ctx - The storage context to clear.\n     */\n    public clear(ctx: Nullable<StorageType> = defaultStorageConfig.ctx): void {\n        this.#storage(ctx)?.clear();\n    }\n\n    /**\n     * Returns the appropriate storage reference based on the storage context and platform.\n     *\n     * @param ctx - The storage context to use (local, session, custom, or in-memory).\n     * @returns The corresponding `Storage` object, or `null` if not available.\n     */\n    #storage(ctx: Nullable<StorageType>): Nullable<Storage> {\n        if (this.#platformService.isPlatformBrowser) {\n            switch (ctx) {\n                case 'local':\n                    return this.#localStorageRef;\n\n                case 'session':\n                    return this.#sessionStorageRef;\n\n                case 'custom':\n                    return this.#customStorageRef;\n            }\n        }\n\n        /**\n         * Fallback to in-memory storage when the platform is not a browser (e.g., SSR).\n         */\n        return this.#inMemoryStorageRef;\n    }\n}\n","import { Provider } from '@angular/core';\n\nimport { InMemoryStorageService } from './in-memory-storage.service';\nimport { inMemoryStorageFactory, localStorageFactory, sessionStorageFactory } from './storage.factory';\nimport { StorageService } from './storage.service';\nimport { IN_MEMORY_STORAGE } from './tokens/in-memory-storage.token';\nimport { LOCAL_STORAGE } from './tokens/local-storage.token';\nimport { SESSION_STORAGE } from './tokens/session-storage.token';\n\n/**\n * Returns the set of dependency-injection providers\n * required to setup storages in an application.\n *\n * @usageNotes\n *\n * This function sets up the essential storage services needed for\n * working with `localStorage`, `sessionStorage`, and an in-memory storage solution.\n * It includes providers for each type of storage, ensuring that the appropriate\n * storage service is injected based on the platform or specific use case.\n *\n * The function is particularly useful in scenarios where the application may be\n * running on the server-side (SSR). In such cases, instead of using `localStorage`\n * and `sessionStorage`, which are only available in the browser, the `InMemoryStorageService`\n * can be used as a fallback, ensuring that the application still functions correctly.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideRtStorage()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtStorage(): Provider[] {\n    return [\n        InMemoryStorageService,\n        {\n            provide: LOCAL_STORAGE,\n            useFactory: localStorageFactory,\n        },\n        {\n            provide: SESSION_STORAGE,\n            useFactory: sessionStorageFactory,\n        },\n        {\n            provide: IN_MEMORY_STORAGE,\n            useFactory: inMemoryStorageFactory,\n        },\n        StorageService,\n    ];\n}\n","import { Signal, signal, WritableSignal } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { MessageBus } from '../util/services/message-bus';\nimport { IAction } from './interfaces/action.interface';\nimport { IBaseStoreService } from './interfaces/base-store-service.interface';\n\nexport abstract class BaseStoreService<STATE_TYPE extends object, MSG_TYPE extends string> implements IBaseStoreService<\n    STATE_TYPE,\n    MSG_TYPE\n> {\n    readonly #store: WritableSignal<STATE_TYPE> = signal({} as STATE_TYPE);\n    public readonly store: Signal<STATE_TYPE> = this.#store.asReadonly();\n\n    readonly #msgBus: MessageBus<MSG_TYPE> = new MessageBus<MSG_TYPE>();\n    readonly #subscriptions: Set<Subscription> = new Set<Subscription>();\n\n    public dispatch(event: IAction<MSG_TYPE>): void {\n        this.#msgBus.emit(event);\n    }\n\n    public onDispatch(msg: MSG_TYPE): Observable<IAction<MSG_TYPE>> {\n        return this.#msgBus.ofType(msg);\n    }\n\n    public patchState(callbackFn: (state: STATE_TYPE) => STATE_TYPE): void {\n        this.#store.update((currState: STATE_TYPE) => callbackFn(currState));\n    }\n\n    protected unsubscribe(): void {\n        this.#subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe());\n        this.#subscriptions.clear();\n    }\n}\n","/**\n * @description Enumeration indicates the current state of a request.\n * @value ModelStatus.Success - The request was successful.\n * @value ModelStatus.Error - The request failed.\n * @value ModelStatus.Init - The request has not been made yet.\n * @value ModelStatus.Pending - The request is in progress.\n */\nexport enum ModelStatus {\n    Init,\n    Pending,\n    Success,\n    Error,\n}\n","import { ModelStatus } from '../enums/async-state-status.enum';\nimport { IStateBase } from '../interfaces/state-base.interface';\n\nexport namespace BASE_INITIAL_STATE {\n    export const ASYNC: Readonly<IStateBase.Async> = Object.freeze({\n        loading: false,\n        fetching: false,\n        pending: false,\n\n        requestStatus: ModelStatus.Init,\n        loadingStatus: ModelStatus.Init,\n        fetchingStatus: ModelStatus.Init,\n        upsertStatus: ModelStatus.Init,\n        deleteStatus: ModelStatus.Init,\n        detailsStatus: ModelStatus.Init,\n    });\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { computed, Signal } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\n\nimport { BaseStoreService } from './base-store.service';\nimport { BASE_INITIAL_STATE } from './constants/base-initial-state.const';\nimport { ModelStatus } from './enums/async-state-status.enum';\nimport { IBaseAsyncStoreService, ISetPropertiesConfig } from './interfaces/async-store-service.interface';\nimport { IStateBase } from './interfaces/state-base.interface';\n\nexport abstract class BaseAsyncStoreService<STATE_TYPE extends IStateBase.Async, MSG_TYPE extends string>\n    extends BaseStoreService<STATE_TYPE, MSG_TYPE>\n    implements IBaseAsyncStoreService<STATE_TYPE, MSG_TYPE>\n{\n    // ================================\n    // Selectors\n    // ================================\n\n    public readonly loading: Signal<boolean> = computed(() => this.store().loading);\n    public readonly fetching: Signal<boolean> = computed(() => this.store().fetching);\n    public readonly pending: Signal<boolean> = computed(() => this.loading() || this.fetching());\n    public readonly requestStatus: Signal<ModelStatus> = computed(() => this.store().requestStatus || ModelStatus.Init);\n    public readonly loadingStatus: Signal<ModelStatus> = computed(() => this.store().loadingStatus || ModelStatus.Init);\n    public readonly fetchingStatus: Signal<ModelStatus> = computed(() => this.store().fetchingStatus || ModelStatus.Init);\n    public readonly upsertStatus: Signal<ModelStatus> = computed(() => this.store().upsertStatus || ModelStatus.Init);\n    public readonly deleteStatus: Signal<ModelStatus> = computed(() => this.store().deleteStatus || ModelStatus.Init);\n\n    protected constructor() {\n        super();\n    }\n\n    // ================================\n    // Actions\n    // ================================\n\n    public handleError(error?: HttpErrorResponse, callbackFn?: () => void): void {\n        if (error) {\n            // eslint-disable-next-line no-console\n            console.error(error);\n\n            if (callbackFn) {\n                callbackFn();\n            }\n        }\n    }\n\n    public resetAsyncState(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                ...BASE_INITIAL_STATE.ASYNC,\n            })\n        );\n    }\n\n    // ================================\n    // region Load Actions\n    // ================================\n\n    public startLoading(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                loading: true,\n                requestStatus: ModelStatus.Pending,\n                loadingStatus: ModelStatus.Pending,\n            })\n        );\n    }\n\n    public setLoadingSuccess(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                loading: false,\n                requestStatus: ModelStatus.Success,\n                loadingStatus: ModelStatus.Success,\n            })\n        );\n    }\n\n    public setLoadingFailure(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): Observable<never> {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                loading: false,\n                requestStatus: ModelStatus.Error,\n                loadingStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n        return throwError(() => error);\n    }\n\n    public setLoadingFailureVoid(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                loading: false,\n                requestStatus: ModelStatus.Error,\n                loadingStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n    }\n\n    // endregion\n\n    // ================================\n    // region Fetch Actions\n    // ================================\n\n    public startFetching(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                fetching: true,\n                requestStatus: ModelStatus.Pending,\n                fetchingStatus: ModelStatus.Pending,\n            })\n        );\n    }\n\n    public setFetchingSuccess(): void {\n        this.patchState(\n            (store: STATE_TYPE): STATE_TYPE => ({\n                ...store,\n                fetching: false,\n                requestStatus: ModelStatus.Success,\n                fetchingStatus: ModelStatus.Success,\n            })\n        );\n    }\n\n    public setFetchingFailure(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): Observable<never> {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                fetching: false,\n                requestStatus: ModelStatus.Error,\n                fetchingStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n        return throwError(() => error);\n    }\n\n    public setFetchingFailureVoid(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                fetching: false,\n                requestStatus: ModelStatus.Error,\n                fetchingStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n    }\n\n    // endregion\n\n    // ================================\n    // region Upsert Actions\n    // ================================\n\n    public resetUpsertStatus(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Init,\n                upsertStatus: ModelStatus.Init,\n            })\n        );\n    }\n\n    public startUpsert(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Pending,\n                upsertStatus: ModelStatus.Pending,\n            })\n        );\n    }\n\n    public setUpsertSuccess(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Success,\n                upsertStatus: ModelStatus.Success,\n            })\n        );\n    }\n\n    public setUpsertFailure(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): Observable<never> {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Error,\n                upsertStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n        return throwError(() => error);\n    }\n\n    public setUpsertFailureVoid(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Error,\n                upsertStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n    }\n\n    // endregion\n\n    // ================================\n    // region Delete Actions\n    // ================================\n\n    public resetDeleteStatus(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Init,\n                deleteStatus: ModelStatus.Init,\n            })\n        );\n    }\n\n    public startDelete(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Pending,\n                deleteStatus: ModelStatus.Pending,\n            })\n        );\n    }\n\n    public setDeleteSuccess(): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Success,\n                deleteStatus: ModelStatus.Success,\n            })\n        );\n    }\n\n    public setDeleteFailure(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): Observable<never> {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Error,\n                deleteStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n        return throwError(() => error);\n    }\n\n    public setDeleteFailureVoid(error: HttpErrorResponse, config: ISetPropertiesConfig = { showNotification: true }): void {\n        this.patchState(\n            (state: STATE_TYPE): STATE_TYPE => ({\n                ...state,\n                requestStatus: ModelStatus.Error,\n                deleteStatus: ModelStatus.Error,\n            })\n        );\n\n        if (config.showNotification) {\n            this.handleError(error);\n        }\n    }\n\n    // endregion\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, Observer, Subscriber } from 'rxjs';\n\nimport { WINDOW } from '../util';\nimport { IIDBStorageServiceInterface } from './interfaces/idb-storage-service.interface';\n\n@Injectable()\nexport class IDBStorageService<ENTITY_TYPE> implements IIDBStorageServiceInterface<ENTITY_TYPE> {\n    readonly #windowRef: Window = inject(WINDOW);\n\n    #context: Observable<IDBDatabase>;\n\n    constructor() {\n        this.#context = new Observable<IDBDatabase>((observer: Observer<IDBDatabase>) => {\n            if ('indexedDB' in this.#windowRef && 'open' in this.#windowRef.indexedDB) {\n                const openRequest: IDBOpenDBRequest = this.#windowRef.indexedDB.open('use-idb', 1);\n                openRequest.onerror = (): void => observer.error(openRequest.error);\n                openRequest.onsuccess = (): void => observer.next(openRequest.result);\n                openRequest.onupgradeneeded = (): IDBObjectStore => openRequest.result.createObjectStore('idb');\n            } else {\n                observer.error('IndexedDB not supported');\n            }\n        });\n    }\n\n    public get(key: string): Observable<ENTITY_TYPE | undefined> {\n        return new Observable<ENTITY_TYPE | undefined>((observer: Subscriber<ENTITY_TYPE | undefined>) => {\n            this.#context.subscribe((db: IDBDatabase) => {\n                const transaction: IDBTransaction = db.transaction('idb', 'readonly');\n                const store: IDBObjectStore = transaction.objectStore('idb');\n                const request: IDBRequest<ENTITY_TYPE> = store.get(key);\n\n                request.onsuccess = (): void => observer.next(request.result);\n                request.onerror = (): void => observer.error(request.error);\n            });\n        });\n    }\n\n    public set(key: string, value: ENTITY_TYPE): Observable<void> {\n        return new Observable<void>((observer: Subscriber<void>) => {\n            this.#context.subscribe((db: IDBDatabase) => {\n                const transaction: IDBTransaction = db.transaction('idb', 'readwrite');\n                const store: IDBObjectStore = transaction.objectStore('idb');\n                const request: IDBRequest<IDBValidKey> = store.put(value, key);\n\n                request.onsuccess = (): void => observer.next();\n                request.onerror = (): void => observer.error(request.error);\n            });\n        });\n    }\n\n    public remove(key: string): Observable<void> {\n        return new Observable<void>((observer: Subscriber<void>) => {\n            this.#context.subscribe((db: IDBDatabase) => {\n                const transaction: IDBTransaction = db.transaction('idb', 'readwrite');\n                const store: IDBObjectStore = transaction.objectStore('idb');\n                const request: IDBRequest<undefined> = store.delete(key);\n\n                request.onsuccess = (): void => observer.next();\n                request.onerror = (): void => observer.error(request.error);\n            });\n        });\n    }\n}\n","import { IDBStorageService } from './idb-storage-service';\n\n/**\n * Factory for creating `IDBStorageService`.\n * Returns a new instance of IDBStorageService.\n *\n * @returns a new instance of IDBStorageService\n */\nexport function iDBStorageFactory(): IDBStorageService<Record<string, unknown>> {\n    return new IDBStorageService();\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { IDBStorageService } from '../idb-storage-service';\n\n/**\n * Injection token for IDBStorageService.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const IDB_STORAGE_SERVICE_TOKEN: InjectionToken<IDBStorageService<any>> = new InjectionToken<IDBStorageService<any>>(\n    'IDB_STORAGE_SERVICE_TOKEN'\n);\n","import { Provider } from '@angular/core';\n\nimport { iDBStorageFactory } from './idb-storage.factory';\nimport { IDBStorageService } from './idb-storage-service';\nimport { IDB_STORAGE_SERVICE_TOKEN } from './token/idb-storage.token';\n\n/**\n * Returns the set of dependency-injection providers\n * required to set up storages in an application.\n *\n * @usageNotes\n *\n * This function sets up the essential storage services needed for\n * working with `idb storage` solution.\n * It includes providers for each type of storage, ensuring that the appropriate\n * storage service is injected based on the platform or specific use case.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideRtIDBStorage()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtIDBStorage(): Provider[] {\n    return [\n        {\n            provide: IDB_STORAGE_SERVICE_TOKEN,\n            useFactory: iDBStorageFactory,\n        },\n        IDBStorageService,\n    ];\n}\n","import { NgClass, NgComponentOutlet, NgStyle } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, inject, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { SanitizePipe } from '../../util/pipes/sanitize.pipe';\nimport { checkIsMatchingValues } from '../../util/validators/comparison.validator';\nimport { IModal } from './modal.types';\n\n@Component({\n    selector: 'rtui-modal',\n    templateUrl: './modal.component.html',\n    styleUrls: ['./modal.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: { class: 'rtui-modal' },\n    imports: [\n        NgStyle,\n        NgClass,\n        NgComponentOutlet,\n        ReactiveFormsModule,\n        SanitizePipe,\n\n        // material\n        MatDialogModule,\n        MatInputModule,\n        MatSelectModule,\n        MatButtonModule,\n        MatIcon,\n\n        // BEM\n        BlockDirective,\n        ElemDirective,\n    ],\n})\nexport class RtuiModalComponent<T> implements OnInit {\n    public readonly data: IModal.Data<T> = inject(MAT_DIALOG_DATA);\n    readonly #dialogRef: MatDialogRef<RtuiModalComponent<T>> = inject(MatDialogRef<RtuiModalComponent<T>>);\n\n    public control: FormControl | undefined;\n    public selectControl: FormControl | undefined;\n\n    public readonly bemBlock: string = 'rtui-modal';\n\n    @HostBinding('class')\n    public get hostClasses(): Record<string, boolean> {\n        return {\n            [this.bemBlock]: true,\n        };\n    }\n\n    public ngOnInit(): void {\n        if (Boolean(this.data.select)) {\n            this.selectControl = new FormControl(null, Validators.required);\n        }\n\n        if (Boolean(this.data.textArea)) {\n            this.control = new FormControl(this.data.textArea?.value);\n        }\n\n        if (Boolean(this.data.input)) {\n            this.control = new FormControl(this.data.input?.value, Validators.required);\n\n            if (this.data.input?.sample) {\n                this.control.addValidators(checkIsMatchingValues(this.data.input.sample));\n            }\n        }\n    }\n\n    public onClose(button: IModal.Button<T>): void {\n        this.#dialogRef.close({\n            value: Boolean(this.data.select) && button.assignSelectedValue ? this.selectControl?.value : button.value,\n            message: Boolean(this.control) ? this.control?.value : null,\n        });\n    }\n}\n","<ng-container rtBlock=\"rtui-modal\">\n    @if (data.title) {\n        <div rtElem=\"title\" mat-dialog-title>\n            @if (data.icon) {\n                <h2>\n                    <mat-icon [ngStyle]=\"data.icon.style\">\n                        {{ data.icon.value }}\n                    </mat-icon>\n                </h2>\n            }\n\n            <h1>{{ data.title }}</h1>\n        </div>\n    }\n\n    <mat-dialog-content>\n        @if (data.text) {\n            <div rtElem=\"text\" [innerHTML]=\"data.text | sanitize\"></div>\n        }\n\n        @if (data.confirmation) {\n            <div rtElem=\"confirmation\" [innerHTML]=\"data.confirmation | sanitize\"></div>\n        }\n\n        @if (data.input) {\n            <div rtElem=\"input\">{{ data.input.label }}</div>\n\n            <mat-form-field [appearance]=\"'outline'\">\n                <input matInput type=\"text\" autocomplete=\"off\" [formControl]=\"control!\" />\n            </mat-form-field>\n        }\n\n        @if (data.textArea) {\n            <mat-form-field rtElem=\"textarea\">\n                <textarea matInput [formControl]=\"control!\" [placeholder]=\"data.textArea.placeholder\"></textarea>\n            </mat-form-field>\n        }\n\n        @if (data.select) {\n            <mat-form-field rtElem=\"select\">\n                @if (data.select.label) {\n                    <mat-label>{{ data.select.label }}</mat-label>\n                }\n\n                <mat-select required [formControl]=\"selectControl!\">\n                    <mat-option>--</mat-option>\n                    @for (option of data.select.value; track option?.name ?? option) {\n                        <mat-option [value]=\"option?.value\">\n                            {{ option?.name }}\n                        </mat-option>\n                    }\n                </mat-select>\n\n                @if (data.select.hint && selectControl?.hasError('required')) {\n                    <mat-error>{{ data.select.hint }}</mat-error>\n                }\n            </mat-form-field>\n        }\n\n        @if (data?.component) {\n            <ng-container *ngComponentOutlet=\"data!.component!\" />\n        }\n    </mat-dialog-content>\n\n    <mat-dialog-actions [attr.align]=\"data.buttonsAlign\">\n        @for (button of data.buttons; track button.text) {\n            @switch (button.appearance) {\n                @case ('raised') {\n                    <button\n                        mat-flat-button\n                        type=\"button\"\n                        [ngClass]=\"button.className\"\n                        [color]=\"button.color\"\n                        [disabled]=\"button.validateSelect && (selectControl?.invalid || control?.invalid)\"\n                        [ngStyle]=\"button.style\"\n                        (click)=\"onClose(button)\">\n                        {{ button.text }}\n                    </button>\n                }\n\n                @case ('flat') {\n                    <button\n                        mat-flat-button\n                        type=\"button\"\n                        [color]=\"button.color\"\n                        [disabled]=\"button.validateSelect && (selectControl?.invalid || control?.invalid)\"\n                        [ngStyle]=\"button.style\"\n                        (click)=\"onClose(button)\">\n                        {{ button.text }}\n                    </button>\n                }\n\n                @case ('stroked') {\n                    <button\n                        mat-stroked-button\n                        type=\"button\"\n                        [color]=\"button.color\"\n                        [disabled]=\"button.validateSelect && (selectControl?.invalid || control?.invalid)\"\n                        [ngStyle]=\"button.style\"\n                        (click)=\"onClose(button)\">\n                        {{ button.text }}\n                    </button>\n                }\n\n                @case ('fab') {\n                    <button\n                        mat-fab\n                        type=\"button\"\n                        [color]=\"button.color\"\n                        [disabled]=\"button.validateSelect && (selectControl?.invalid || control?.invalid)\"\n                        [ngStyle]=\"button.style\"\n                        (click)=\"onClose(button)\">\n                        {{ button.text }}\n                    </button>\n                }\n\n                @case ('mini-fab') {\n                    <button\n                        mat-mini-fab\n                        type=\"button\"\n                        [color]=\"button.color\"\n                        [disabled]=\"button.validateSelect && (selectControl?.invalid || control?.invalid)\"\n                        [ngStyle]=\"button.style\"\n                        (click)=\"onClose(button)\">\n                        {{ button.text }}\n                    </button>\n                }\n\n                @default {\n                    <button\n                        mat-button\n                        type=\"button\"\n                        [color]=\"button.color\"\n                        [disabled]=\"button.validateSelect && (selectControl?.invalid || control?.invalid)\"\n                        [ngStyle]=\"button.style\"\n                        (click)=\"onClose(button)\">\n                        {{ button.text }}\n                    </button>\n                }\n            }\n        }\n    </mat-dialog-actions>\n</ng-container>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Observable, ReplaySubject, share } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { MODAL_WINDOW_SIZE_ENUM } from '../../util/enums/modal-window-size.enum';\nimport { Nullable } from '../../util/interfaces/nullable.type';\nimport { RtuiModalComponent } from './modal.component';\nimport { IModal } from './modal.types';\n\n@Injectable()\nexport class RtModalService {\n    readonly #dialogRef: MatDialog = inject(MatDialog);\n    readonly #defaultConfig: MatDialogConfig = {\n        width: MODAL_WINDOW_SIZE_ENUM.MD,\n        autoFocus: false,\n        closeOnNavigation: true,\n    };\n\n    public confirm<T>(data: IModal.Data<T>, config?: MatDialogConfig): Observable<Nullable<IModal.DataAnswer<T>>> {\n        const dialogRef: MatDialogRef<RtuiModalComponent<T>, IModal.DataAnswer<T>> = this.#dialogRef.open<\n            RtuiModalComponent<T>,\n            IModal.Data<T>,\n            IModal.DataAnswer<T>\n        >(RtuiModalComponent, {\n            ...this.#defaultConfig,\n            ...config,\n            data,\n        });\n\n        return dialogRef.afterClosed();\n    }\n\n    public with<T>(data: IModal.Data<T>, config?: MatDialogConfig): IModal.ConfirmResponse<T> {\n        /** Replacement for deprecated multicasting operators (https://github.com/ReactiveX/rxjs/issues/6452) */\n        const subject$: ReplaySubject<Nullable<IModal.DataAnswer<T>>> = new ReplaySubject<Nullable<IModal.DataAnswer<T>>>(1);\n        const result$: Observable<Nullable<IModal.DataAnswer<T>>> = this.confirm(data, config).pipe(\n            share({\n                connector: () => subject$,\n                resetOnError: false,\n                resetOnComplete: false,\n                resetOnRefCountZero: true,\n            })\n        );\n\n        const defaultCancel: IModal.ConfirmResponsePredicate<T> = (answer: Nullable<IModal.DataAnswer<T>>) =>\n            !(Boolean(answer) && Boolean(answer?.value));\n\n        const defaultConfirm: IModal.ConfirmResponsePredicate<T> = (answer: Nullable<IModal.DataAnswer<T>>) =>\n            Boolean(answer) && Boolean(answer?.value);\n\n        return {\n            onCancel: (cancel: IModal.ConfirmResponsePredicate<T> = defaultCancel) =>\n                result$.pipe(filter((answer: Nullable<IModal.DataAnswer<T>>) => cancel(answer))),\n            onConfirm: (confirm: IModal.ConfirmResponsePredicate<T> = defaultConfirm) =>\n                result$.pipe(filter((answer: Nullable<IModal.DataAnswer<T>>) => confirm(answer))),\n            on: (predicate: IModal.ConfirmResponsePredicate<T>) =>\n                result$.pipe(filter((answer: Nullable<IModal.DataAnswer<T>>) => predicate(answer))),\n        };\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, contentChild, Directive, Signal, TemplateRef, Type } from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { Nullable } from '../../util';\n\n@Directive({\n    selector: '[rtuiScrollableHeader]',\n})\nexport class RtuiScrollableContainerHeaderDirective {}\n\n@Directive({\n    selector: '[rtuiScrollableContent]',\n})\nexport class RtuiScrollableContainerContentDirective {}\n\n@Directive({\n    selector: '[rtuiScrollableFooter]',\n})\nexport class RtuiScrollableContainerFooterDirective {}\n\n@Component({\n    selector: 'rtui-scrollable',\n    templateUrl: './scrollable-container.component.html',\n    styleUrls: ['./scrollable-container.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [BlockDirective, ElemDirective, NgTemplateOutlet],\n})\nexport class RtuiScrollableContainerComponent {\n    public readonly headerTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerHeaderDirective, {\n        read: TemplateRef,\n    });\n    public readonly contentTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerContentDirective, {\n        read: TemplateRef,\n    });\n    public readonly footerTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerFooterDirective, {\n        read: TemplateRef,\n    });\n}\n","<ng-container rtBlock=\"rtui-scrollable\">\n    @if (headerTpl()) {\n        <div rtElem=\"header\">\n            <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n        </div>\n    }\n\n    @if (contentTpl()) {\n        <div rtElem=\"content\">\n            <ng-container *ngTemplateOutlet=\"contentTpl() ?? null\" />\n        </div>\n    }\n\n    @if (footerTpl()) {\n        <div rtElem=\"footer\">\n            <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n        </div>\n    }\n</ng-container>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    inject,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n} from '@angular/core';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatListItem, MatListItemIcon, MatListItemTitle, MatNavList } from '@angular/material/list';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective } from '../../../bem';\nimport { Nullable, RtHideTooltipDirective, RtIconOutlinedDirective } from '../../../util';\nimport { ISideMenu } from '../../../util/interfaces/side-menu.interface';\nimport { RtuiSideMenuComponent } from '../menu/rtui-side-menu.component';\n\n@Component({\n    selector: 'rtui-side-menu-sub-item',\n    templateUrl: './rtui-side-menu-sub-item.component.html',\n    styleUrls: ['./rtui-side-menu-sub-item.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n        MatIcon,\n        MatListItem,\n        MatNavList,\n        MatListItemIcon,\n        MatListItemTitle,\n        MatExpansionModule,\n        MatTooltip,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        RtIconOutlinedDirective,\n        RtHideTooltipDirective,\n    ],\n    providers: [\n        {\n            provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n            useValue: {\n                disableTooltipInteractivity: true,\n            },\n        },\n    ],\n})\nexport class RtuiSideMenuSubItemComponent {\n    public readonly menuRef: RtuiSideMenuComponent = inject(RtuiSideMenuComponent);\n\n    public item: InputSignal<ISideMenu.Item> = input.required<ISideMenu.Item>();\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, Nullable<boolean>> = input<Nullable<boolean>, Nullable<boolean>>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuXScrollEnabled: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuIconsOutlined: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuButtonIconsOutlined: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuTooltipsShown: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n\n    public readonly clickSubMenuAction: OutputEmitterRef<{ item: ISideMenu.Item; event: MouseEvent }> = output<{\n        item: ISideMenu.Item;\n        event: MouseEvent;\n    }>();\n    public readonly clickSubMenuAdditionalAction: OutputEmitterRef<{ data: ISideMenu.ItemData; event: MouseEvent }> = output<{\n        data: ISideMenu.ItemData;\n        event: MouseEvent;\n    }>();\n\n    public onClickSubMenu(item: ISideMenu.Item, event: MouseEvent): void {\n        this.clickSubMenuAction.emit({ item, event });\n    }\n\n    public onClickSubMenuAdditional(data: ISideMenu.ItemData, event: MouseEvent): void {\n        this.clickSubMenuAdditionalAction.emit({ data, event });\n    }\n}\n","@if (item()) {\n    <ng-container *ngTemplateOutlet=\"listElemTpl; context: { $implicit: item() }\" />\n}\n\n<ng-template #listElemTpl let-item>\n    @if (item?.link) {\n        <mat-list-item\n            rtBlock=\"rtui-side-menu-sub-item\"\n            [rtMod]=\"{ fixed: isSubMenuXScrollEnabled() }\"\n            [id]=\"item.id\"\n            [activated]=\"menuRef.activeMenuIds().includes(item.id)\"\n            (click)=\"onClickSubMenu(item, $event)\">\n            @if (item?.icon) {\n                <mat-icon matListItemIcon rtElem=\"icon\" [rtIconOutlined]=\"isSubMenuIconsOutlined()\">{{ item.icon }}</mat-icon>\n            }\n\n            @if (item?.name) {\n                <div rtBlock=\"rtui-side-menu-sub-item-title\">\n                    <div\n                        #titleTpl\n                        rtElem=\"text\"\n                        matTooltipPosition=\"above\"\n                        [matTooltip]=\"item.name\"\n                        [matTooltipDisabled]=\"!isSubMenuTooltipsShown() || isMobile()\"\n                        [rtHideTooltipDirective]=\"titleTpl\"\n                        [isTooltipShown]=\"isSubMenuTooltipsShown() && !isMobile()\">\n                        {{ item.name }}\n                    </div>\n\n                    @if (item?.iconButton?.icon) {\n                        <div rtBlock=\"rtui-side-menu-sub-item-title-button\">\n                            <mat-icon\n                                rtElem=\"icon\"\n                                [rtIconOutlined]=\"isSubMenuButtonIconsOutlined()\"\n                                (click)=\"onClickSubMenuAdditional(item.iconButton?.data, $event); $event.stopPropagation()\">\n                                {{ item.iconButton.icon }}\n                            </mat-icon>\n                        </div>\n                    }\n                </div>\n            }\n        </mat-list-item>\n    } @else if (item?.submenu?.length) {\n        <mat-expansion-panel\n            #panel\n            rtBlock=\"rtui-side-menu-expand-sub-item\"\n            [rtMod]=\"{ fixed: isSubMenuXScrollEnabled() }\"\n            [expanded]=\"menuRef.activeMenuIds().includes(item.id)\">\n            <mat-expansion-panel-header\n                rtBlock=\"rtui-side-menu-expand-sub-item-header\"\n                [rtMod]=\"{ activated: menuRef.activeMenuIds().includes(item.id) }\">\n                @if (item?.icon) {\n                    <mat-icon matListItemIcon rtElem=\"icon\" [rtIconOutlined]=\"isSubMenuIconsOutlined()\">{{ item.icon }}</mat-icon>\n                }\n\n                @if (item?.name) {\n                    <div\n                        #headerTitleTpl\n                        matListItemTitle\n                        rtElem=\"title\"\n                        matTooltipPosition=\"above\"\n                        [matTooltip]=\"item.name\"\n                        [matTooltipDisabled]=\"!isSubMenuTooltipsShown() || isMobile()\"\n                        [rtHideTooltipDirective]=\"headerTitleTpl\"\n                        [isTooltipShown]=\"isSubMenuTooltipsShown() && !isMobile()\">\n                        {{ item.name }}\n                    </div>\n                }\n            </mat-expansion-panel-header>\n\n            @if (panel?.expanded) {\n                <mat-nav-list>\n                    @for (item of item?.submenu; track i; let i = $index) {\n                        <ng-container *ngTemplateOutlet=\"listElemTpl; context: { $implicit: item }\" />\n                    }\n                </mat-nav-list>\n            }\n        </mat-expansion-panel>\n    }\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    contentChild,\n    Directive,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n    Signal,\n    signal,\n    TemplateRef,\n    Type,\n    viewChild,\n    WritableSignal,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatListItem, MatListItemIcon, MatNavList } from '@angular/material/list';\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\n\nimport { BlockDirective, ElemDirective } from '../../../bem';\nimport { Nullable, RtIconOutlinedDirective, RtNavigationDirective, RtScrollToElementDirective, transformArrayInput } from '../../../util';\nimport { ISideMenu } from '../../../util/interfaces/side-menu.interface';\nimport {\n    RtuiScrollableContainerComponent,\n    RtuiScrollableContainerContentDirective,\n    RtuiScrollableContainerFooterDirective,\n    RtuiScrollableContainerHeaderDirective,\n} from '../../scrollable';\nimport { RtuiSideMenuSubItemComponent } from '../menu-sub-item/rtui-side-menu-sub-item.component';\n\n@Directive({\n    selector: '[rtuiSideMenuHeader]',\n})\nexport class RtuiSideMenuHeaderDirective {}\n\n@Directive({\n    selector: '[rtuiSideMenuFooter]',\n})\nexport class RtuiSideMenuFooterDirective {}\n\n@Component({\n    selector: 'rtui-side-menu',\n    templateUrl: './rtui-side-menu.component.html',\n    styleUrls: ['./rtui-side-menu.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n        MatSidenavModule,\n        MatIcon,\n        MatListItem,\n        MatNavList,\n        MatListItemIcon,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        RtuiScrollableContainerHeaderDirective,\n        RtuiScrollableContainerContentDirective,\n        RtuiScrollableContainerFooterDirective,\n        RtScrollToElementDirective,\n        RtIconOutlinedDirective,\n        RtNavigationDirective,\n\n        // components\n        RtuiScrollableContainerComponent,\n        RtuiSideMenuSubItemComponent,\n    ],\n})\nexport class RtuiSideMenuComponent {\n    public readonly headerTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiSideMenuHeaderDirective, {\n        read: TemplateRef,\n    });\n    public readonly footerTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiSideMenuFooterDirective, {\n        read: TemplateRef,\n    });\n    public readonly subMenuRef: Signal<Nullable<MatDrawer>> = viewChild(MatDrawer);\n\n    public readonly backToMainMenuButton: Signal<ISideMenu.Item> = signal({ id: 0, icon: 'arrow_back', name: 'Main Menu', link: ' ' });\n    public readonly selectedItem: WritableSignal<Nullable<ISideMenu.Item>> = signal(null);\n    public readonly selectedSubMenu: WritableSignal<Nullable<ISideMenu.Item[]>> = signal(null);\n\n    public activeMenuIds: InputSignal<Array<string | number>> = input.required();\n    public menuItems: InputSignalWithTransform<ISideMenu.Item[], ISideMenu.Item[]> = input<ISideMenu.Item[], ISideMenu.Item[]>([], {\n        transform: (value: ISideMenu.Item[]) => transformArrayInput(value),\n    });\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, Nullable<boolean>> = input<Nullable<boolean>, Nullable<boolean>>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuXScrollEnabled: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    public isMainMenuIconsOutlined: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuIconsOutlined: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuButtonIconsOutlined: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isSubMenuTooltipsShown: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n\n    public activeMenuId: Signal<number | string> = computed(() => {\n        return this.activeMenuIds()?.length ? this.activeMenuIds()[this.activeMenuIds()?.length - 1] : '';\n    });\n\n    public readonly closeMobileMenuAction: OutputEmitterRef<void> = output<void>();\n    public readonly clickSubMenuAction: OutputEmitterRef<{ item: ISideMenu.Item; event: MouseEvent }> = output<{\n        item: ISideMenu.Item;\n        event: MouseEvent;\n    }>();\n    public readonly clickSubMenuAdditionalAction: OutputEmitterRef<{ data: ISideMenu.ItemData; event: MouseEvent }> = output<{\n        data: ISideMenu.ItemData;\n        event: MouseEvent;\n    }>();\n\n    public onClickMenu(item: ISideMenu.Item): void {\n        this.selectedItem.set(item);\n\n        if (item?.submenu) {\n            this.selectedSubMenu.set(item.submenu);\n            this.#openSubMenu();\n        } else if (this.selectedSubMenu()) {\n            this.closeSubMenu();\n        }\n\n        if (item?.link) {\n            this.closeMobileMenu();\n        }\n    }\n\n    public onClickSubMenu({ item, event }: { item: ISideMenu.Item; event: MouseEvent }): void {\n        if (item?.link) {\n            this.clickSubMenuAction.emit({ item, event });\n            this.closeSubMenu();\n            this.closeMobileMenu();\n        }\n    }\n\n    public onBackToMainMenu(): void {\n        this.selectedItem.set(null);\n        this.selectedSubMenu.set(null);\n    }\n\n    public toggleSubMenu(item?: ISideMenu.Item): void {\n        if (item?.submenu) {\n            this.selectedSubMenu.set(item.submenu);\n            this.#openSubMenu();\n        } else if (this.selectedItem()?.submenu) {\n            this.selectedSubMenu.set(this.selectedItem()?.submenu);\n        } else {\n            this.closeSubMenu();\n        }\n    }\n\n    public closeSubMenu(): void {\n        this.selectedItem.set(null);\n        this.selectedSubMenu.set(null);\n        this.subMenuRef()?.close().then();\n    }\n\n    public closeMobileMenu(): void {\n        if (this.isMobile()) {\n            this.closeMobileMenuAction.emit();\n        }\n    }\n\n    public clickSubMenuAdditional({ data, event }: { data: ISideMenu.ItemData; event: MouseEvent }): void {\n        this.clickSubMenuAdditionalAction.emit({ data, event });\n    }\n\n    #openSubMenu(): void {\n        this.subMenuRef()?.open().then();\n    }\n}\n","@if (isMobile()) {\n    <rtui-scrollable rtBlock=\"rtui-mobile-side-menu\">\n        @if (headerTpl()) {\n            <ng-container *rtuiScrollableHeader>\n                <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n            </ng-container>\n        }\n\n        @if (menuItems().length) {\n            <ng-container *rtuiScrollableContent>\n                <mat-nav-list\n                    rtBlock=\"rtui-mobile-side-menu-list\"\n                    [rtMod]=\"{ scrollable: selectedSubMenu()?.length && isSubMenuXScrollEnabled() }\">\n                    @if (selectedSubMenu()?.length) {\n                        <div rtElem=\"sub\" [rtScrollToElement]=\"activeMenuId()\" [elements]=\"selectedSubMenu() ?? []\">\n                            <rtui-side-menu-sub-item\n                                [item]=\"backToMainMenuButton()\"\n                                [isMobile]=\"isMobile()\"\n                                (clickSubMenuAction)=\"onBackToMainMenu()\" />\n\n                            @for (item of selectedSubMenu(); track i; let i = $index) {\n                                <rtui-side-menu-sub-item\n                                    [item]=\"item\"\n                                    [isMobile]=\"isMobile()\"\n                                    [isSubMenuXScrollEnabled]=\"isSubMenuXScrollEnabled()\"\n                                    [isSubMenuIconsOutlined]=\"isSubMenuIconsOutlined()\"\n                                    [isSubMenuButtonIconsOutlined]=\"isSubMenuButtonIconsOutlined()\"\n                                    [isSubMenuTooltipsShown]=\"isSubMenuTooltipsShown()\"\n                                    (clickSubMenuAction)=\"onClickSubMenu($event)\"\n                                    (clickSubMenuAdditionalAction)=\"clickSubMenuAdditional($event)\" />\n                            }\n                        </div>\n                    } @else {\n                        <div rtBlock=\"rtui-mobile-side-menu-list-main\">\n                            @for (item of menuItems(); track i; let i = $index) {\n                                <mat-list-item\n                                    rtBlock=\"rtui-mobile-side-menu-item\"\n                                    [rtNavigationDirective]=\"item?.link\"\n                                    [activated]=\"selectedItem() === item || (!selectedItem() && activeMenuIds().includes(item.id))\"\n                                    (click)=\"onClickMenu(item)\">\n                                    @if (item?.icon) {\n                                        <mat-icon matListItemIcon rtElem=\"icon\" [rtIconOutlined]=\"isMainMenuIconsOutlined()\">\n                                            {{ item.icon }}\n                                        </mat-icon>\n                                    }\n\n                                    @if (item?.name) {\n                                        <div rtBlock=\"rtui-mobile-side-menu-item-title\">\n                                            <div rtElem=\"text\">{{ item.name }}</div>\n\n                                            @if (item?.iconButton?.icon) {\n                                                <div rtBlock=\"rtui-mobile-side-menu-item-title-button\">\n                                                    <mat-icon rtElem=\"icon\">{{ item.iconButton?.icon }}</mat-icon>\n                                                </div>\n                                            }\n                                        </div>\n                                    }\n                                </mat-list-item>\n                            }\n                        </div>\n                    }\n                </mat-nav-list>\n            </ng-container>\n        }\n\n        @if (footerTpl()) {\n            <ng-container *rtuiScrollableFooter>\n                <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n            </ng-container>\n        }\n    </rtui-scrollable>\n} @else {\n    <rtui-scrollable rtBlock=\"rtui-side-menu\">\n        @if (headerTpl()) {\n            <ng-container *rtuiScrollableHeader>\n                <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n            </ng-container>\n        }\n\n        @if (menuItems().length) {\n            <ng-container *rtuiScrollableContent>\n                <mat-nav-list rtElem=\"list\">\n                    @for (item of menuItems(); track i; let i = $index) {\n                        <a\n                            rtBlock=\"rtui-side-menu-item\"\n                            [rtNavigationDirective]=\"item?.link\"\n                            (mouseenter)=\"toggleSubMenu(item)\"\n                            (click)=\"onClickMenu(item)\">\n                            @if (item?.icon) {\n                                <mat-list-item\n                                    rtBlock=\"rtui-side-menu-item-button\"\n                                    [activated]=\"selectedItem() === item || (!selectedItem() && activeMenuIds().includes(item.id))\">\n                                    <div rtElem=\"icon\">\n                                        <mat-icon [rtIconOutlined]=\"isMainMenuIconsOutlined()\">{{ item.icon }}</mat-icon>\n                                    </div>\n                                </mat-list-item>\n                            }\n\n                            @if (item?.name) {\n                                <div rtElem=\"title\">{{ item.name }}</div>\n                            }\n                        </a>\n                    }\n                </mat-nav-list>\n            </ng-container>\n        }\n\n        @if (footerTpl()) {\n            <ng-container *rtuiScrollableFooter>\n                <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n            </ng-container>\n        }\n    </rtui-scrollable>\n\n    <mat-drawer-container\n        rtBlock=\"rtui-sub-side-menu\"\n        [rtMod]=\"{ opened: subMenuRef()?.opened }\"\n        [hasBackdrop]=\"true\"\n        (backdropClick)=\"closeSubMenu()\">\n        <mat-drawer rtBlock=\"rtui-sub-side-menu-content\" mode=\"side\" position=\"start\" (mouseleave)=\"toggleSubMenu()\">\n            <rtui-scrollable>\n                <ng-container *rtuiScrollableContent>\n                    @if (subMenuRef()?.opened && selectedSubMenu()?.length) {\n                        <mat-nav-list\n                            rtElem=\"list\"\n                            [rtMod]=\"{ scrollable: isSubMenuXScrollEnabled() }\"\n                            [rtScrollToElement]=\"activeMenuId()\"\n                            [elements]=\"selectedSubMenu() ?? []\">\n                            @for (item of selectedSubMenu(); track i; let i = $index) {\n                                <rtui-side-menu-sub-item\n                                    [item]=\"item\"\n                                    [isMobile]=\"isMobile()\"\n                                    [isSubMenuXScrollEnabled]=\"isSubMenuXScrollEnabled()\"\n                                    [isSubMenuIconsOutlined]=\"isSubMenuIconsOutlined()\"\n                                    [isSubMenuButtonIconsOutlined]=\"isSubMenuButtonIconsOutlined()\"\n                                    [isSubMenuTooltipsShown]=\"isSubMenuTooltipsShown()\"\n                                    (clickSubMenuAction)=\"onClickSubMenu($event)\"\n                                    (clickSubMenuAdditionalAction)=\"clickSubMenuAdditional($event)\" />\n                            }\n                        </mat-nav-list>\n                    }\n                </ng-container>\n            </rtui-scrollable>\n        </mat-drawer>\n    </mat-drawer-container>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, InputSignalWithTransform, numberAttribute } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n    selector: 'rtui-spinner',\n    templateUrl: './spinner.component.html',\n    styleUrls: ['./spinner.component.scss'],\n    imports: [MatProgressSpinnerModule],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiSpinnerComponent {\n    public diameter: InputSignalWithTransform<number, number> = input<number, number>(32, {\n        transform: numberAttribute,\n    });\n    public showBox: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    public showBackground: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n}\n","<div class=\"c-spinner c-spinner__container\" [class.c-spinner__container--bgr-color]=\"showBackground()\">\n    <div class=\"c-spinner__wrapper\" [class.c-spinner__wrapper--bgr-color]=\"showBox()\">\n        <mat-spinner [diameter]=\"diameter()\" />\n    </div>\n</div>\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, HostBinding, inject, Injector, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ASIDE_REF, AsidePositions, AsideRef } from '../../../../util';\n\n@Component({\n    selector: 'rtui-aside-panel',\n    templateUrl: './aside-panel.component.html',\n    styleUrls: ['./aside-panel.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    imports: [AsyncPipe, PortalModule],\n    animations: [\n        trigger('aside', [\n            state('enter-left', style({ transform: 'none' })),\n            transition('* => enter-left', [\n                style({ transform: 'translateX(-100%)' }),\n                animate('200ms ease-in', style({ transform: 'translateX(0%)' })),\n            ]),\n            transition('enter-left => *', animate('200ms ease-in', style({ transform: 'translateX(-100%)' }))),\n            state('enter-right', style({ transform: 'none' })),\n            transition('* => enter-right', [\n                style({ transform: 'translateX(100%)' }),\n                animate('200ms ease-in', style({ transform: 'translateX(0%)' })),\n            ]),\n            transition('enter-right => *', animate('200ms ease-in', style({ transform: 'translateX(100%)' }))),\n        ]),\n    ],\n})\nexport class RtuiAsidePanelComponent {\n    readonly #asideRef: AsideRef<object, object> = inject(ASIDE_REF);\n    readonly #breakpointObserver: BreakpointObserver = inject(BreakpointObserver);\n\n    @HostBinding('@aside') protected _state: string = `enter-${this.#asideRef.position}`;\n\n    public portal: ComponentPortal<unknown> = this.#createPortal(this.#asideRef);\n    public position: AsidePositions = this.#asideRef.position;\n    public isSmall$: Observable<boolean> = this.#breakpointObserver\n        .observe(['(max-width: 1023px)'])\n        .pipe(map((result: BreakpointState) => result.matches));\n\n    public close(): void {\n        this.#asideRef.close();\n    }\n\n    public startExitAnimation(): void {\n        this._state = `exit-${this.#asideRef.position}`;\n    }\n\n    #createPortal<D, R>(asideRef: AsideRef<D, R>): ComponentPortal<unknown> {\n        const injector: Injector = Injector.create({\n            providers: [\n                {\n                    provide: ASIDE_REF,\n                    useValue: asideRef,\n                },\n            ],\n        });\n\n        return new ComponentPortal(asideRef.component, null, injector);\n    }\n}\n","<div\n    class=\"c-aside\"\n    [class.position-left]=\"position === 'left'\"\n    [class.position-right]=\"position === 'right'\"\n    [class.full-screen]=\"isSmall$ | async\">\n    <ng-container *cdkPortalOutlet=\"portal\" />\n</div>\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\nimport { ComponentRef, inject, Injectable, Injector } from '@angular/core';\nimport { Event, NavigationEnd, Router } from '@angular/router';\nimport { merge, Observable, of, Subject } from 'rxjs';\nimport { delay, filter, tap } from 'rxjs/operators';\n\nimport { ASIDE_REF, AsidePositions, AsideRef } from '../../util';\nimport { RtuiAsidePanelComponent } from './components/panel/aside-panel.component';\n\n@Injectable()\nexport class RtAsideService {\n    readonly #overlay: Overlay = inject(Overlay);\n    readonly #router: Router = inject(Router);\n\n    /**\n     * Opens an aside panel with a specified component, position, and data.\n     *\n     * @template COMPONENT - The type of the component to display in the aside panel.\n     * @template DATA - The type of the data to pass to the component.\n     * @template ANSWER - The type of the response expected from the aside panel.\n     *\n     * @param component - The component to render inside the aside panel.\n     * @param position - The position (left or right) where the aside panel should appear.\n     * @param data - The data to pass to the component in the aside panel.\n     *\n     * @returns An observable that emits the response from the aside panel when it is closed.\n     */\n    public Open<COMPONENT = null, DATA = null, ANSWER = null>(\n        component: ComponentType<COMPONENT>,\n        position: AsidePositions,\n        data: DATA\n    ): Observable<ANSWER | null> {\n        const answer: Subject<ANSWER | null> = new Subject<ANSWER | null>();\n        const overlayRef: OverlayRef = this.#createOverlay(position);\n        const asideRef: AsideRef<DATA, ANSWER> = new AsideRef<DATA, ANSWER>(answer, overlayRef, component, position, data);\n        const portal: ComponentPortal<RtuiAsidePanelComponent> = this.#createPortal(asideRef);\n        const componentRef: ComponentRef<RtuiAsidePanelComponent> = overlayRef.attach(portal);\n\n        merge(\n            overlayRef.backdropClick(),\n            overlayRef.keydownEvents().pipe(filter((keyEvent: KeyboardEvent): boolean => keyEvent.key === 'Escape')),\n            this.#router.events.pipe(filter((e: Event): boolean => e instanceof NavigationEnd)),\n            answer.pipe(delay(10))\n        )\n            .pipe(\n                tap((): void => {\n                    componentRef.instance.startExitAnimation();\n                    overlayRef.detach();\n                    answer.complete();\n                }),\n                delay(300)\n            )\n            .subscribe(() => {\n                overlayRef.dispose();\n            });\n\n        return answer ? answer.asObservable() : of(null);\n    }\n\n    /**\n     * Creates an `OverlayConfig` object to configure the overlay's position, scroll behavior, and backdrop.\n     *\n     * @param position - The position (left or right) where the aside panel should appear.\n     *\n     * @returns An `OverlayConfig` object with the specified settings.\n     */\n    #createOverlayConfig(position: AsidePositions): OverlayConfig {\n        const config: Partial<OverlayConfig> = {\n            width: 'auto',\n            scrollStrategy: this.#overlay.scrollStrategies.block(),\n            positionStrategy: this.#overlay.position().global().left(),\n            hasBackdrop: true,\n        };\n\n        if (position === 'left') {\n            config.positionStrategy = this.#overlay.position().global().left();\n        } else if (position === 'right') {\n            config.positionStrategy = this.#overlay.position().global().right();\n        }\n\n        return new OverlayConfig(config);\n    }\n\n    /**\n     * Creates and returns an `OverlayRef` object that represents the overlay to be displayed.\n     *\n     * @param position - The position (left or right) where the aside panel should appear.\n     *\n     * @returns An `OverlayRef` object that manages the overlay's lifecycle.\n     */\n    #createOverlay(position: AsidePositions): OverlayRef {\n        const overlayConfig: OverlayConfig = this.#createOverlayConfig(position);\n        return this.#overlay.create(overlayConfig);\n    }\n\n    /**\n     * Creates a `ComponentPortal` for the `RtuiAsidePanelComponent`, injecting the `AsideRef` instance.\n     *\n     * @template D - The type of data passed to the aside component.\n     * @template R - The type of the response expected from the aside component.\n     *\n     * @param asideRef - The `AsideRef` instance containing the data and component for the aside panel.\n     *\n     * @returns A `ComponentPortal` that can be attached to an overlay.\n     */\n    #createPortal<D, R>(asideRef: AsideRef<D, R>): ComponentPortal<RtuiAsidePanelComponent> {\n        const injector: Injector = Injector.create({\n            providers: [\n                {\n                    provide: ASIDE_REF,\n                    useValue: asideRef,\n                },\n            ],\n        });\n\n        return new ComponentPortal(RtuiAsidePanelComponent, null, injector);\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChild,\n    Directive,\n    input,\n    InputSignalWithTransform,\n    Signal,\n    TemplateRef,\n    Type,\n} from '@angular/core';\nimport { MatToolbar } from '@angular/material/toolbar';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { Nullable } from '../../util';\n\n@Directive({\n    selector: '[rtuiToolbarLeft]',\n})\nexport class RtuiToolbarLeftDirective {}\n\n@Directive({\n    selector: '[rtuiToolbarCenter]',\n})\nexport class RtuiToolbarCenterDirective {}\n\n@Directive({\n    selector: '[rtuiToolbarRight]',\n})\nexport class RtuiToolbarRightDirective {}\n\n@Component({\n    selector: 'rtui-toolbar',\n    templateUrl: './toolbar.component.html',\n    styleUrls: ['./toolbar.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [MatToolbar, NgTemplateOutlet, BlockDirective, ElemDirective],\n})\nexport class RtuiToolbarComponent {\n    public isVisibleToolbar: Signal<boolean> = input(true);\n\n    public readonly leftToolTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarLeftDirective, {\n        read: TemplateRef,\n    });\n    public readonly centerToolTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarCenterDirective, {\n        read: TemplateRef,\n    });\n    public readonly rightToolTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarRightDirective, {\n        read: TemplateRef,\n    });\n    public sticky: InputSignalWithTransform<Nullable<boolean>, boolean> = input<Nullable<boolean>, boolean>(false, {\n        transform: booleanAttribute,\n    });\n}\n","@if ((leftToolTpl() || centerToolTpl() || rightToolTpl()) && isVisibleToolbar()) {\n    <mat-toolbar rtBlock=\"toolbar\" [rtMod]=\"{ sticky: sticky() }\">\n        <div rtBlock=\"bars\">\n            @if (leftToolTpl()) {\n                <div rtElem=\"bar\" rtMod=\"left\">\n                    <ng-template *ngTemplateOutlet=\"leftToolTpl() ?? null\" />\n                </div>\n            }\n\n            <div rtElem=\"bar\" rtMod=\"center\">\n                <ng-template *ngTemplateOutlet=\"centerToolTpl() ?? null\" />\n            </div>\n\n            @if (rightToolTpl()) {\n                <div rtElem=\"bar\" rtMod=\"right\">\n                    <ng-template *ngTemplateOutlet=\"rightToolTpl() ?? null\" />\n                </div>\n            }\n        </div>\n    </mat-toolbar>\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, input, InputSignal, signal, WritableSignal } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { Nullable } from '../../../../util';\n\n@Component({\n    selector: 'rtui-aside-error-box',\n    templateUrl: './aside-error-box.component.html',\n    styleUrls: ['./aside-error-box.component.scss'],\n    imports: [\n        MatIcon,\n        MatButton,\n\n        // bem\n        BlockDirective,\n        ElemDirective,\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AsideErrorBoxComponent {\n    readonly #clipboard: Clipboard = inject(Clipboard);\n\n    public error: InputSignal<Nullable<HttpErrorResponse>> = input.required();\n\n    public isErrorCopied: WritableSignal<boolean> = signal(false);\n\n    public onCopyToClipboard(): void {\n        const errorTime: string = `Error time: ${new Date().toDateString()}_${new Date().toTimeString()};`;\n        this.#clipboard.copy(errorTime + 'Error info: ' + JSON.stringify(this.error()));\n        this.isErrorCopied.set(true);\n        setTimeout(() => this.isErrorCopied.set(false), 1000);\n    }\n}\n","<div rtBlock=\"aside-error-box\">\n    <div rtElem=\"title\">Request Error</div>\n\n    <button\n        type=\"button\"\n        rtBlock=\"aside-error-box-button\"\n        class=\"c-button c-button--txt-base--size-sm\"\n        [class.--complete]=\"isErrorCopied()\"\n        (click)=\"onCopyToClipboard()\">\n        @if (isErrorCopied()) {\n            <mat-icon rtElem=\"icon\">done</mat-icon>\n        }\n\n        <div rtElem=\"title\">{{ isErrorCopied() ? 'Copied' : 'Copy error info' }}</div>\n    </button>\n</div>\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChild,\n    Directive,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n    Signal,\n    TemplateRef,\n    Type,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { AsideButtonsType, IAside, Nullable, transformArrayInput } from '../../../../util';\nimport {\n    RtuiScrollableContainerComponent,\n    RtuiScrollableContainerContentDirective,\n    RtuiScrollableContainerFooterDirective,\n    RtuiScrollableContainerHeaderDirective,\n} from '../../../scrollable';\nimport { RtuiSpinnerComponent } from '../../../spinner';\nimport { RtuiToolbarCenterDirective, RtuiToolbarComponent, RtuiToolbarLeftDirective, RtuiToolbarRightDirective } from '../../../toolbar';\nimport { AsideErrorBoxComponent } from '../error-notification/aside-error-box.component';\n\n@Directive({\n    selector: '[rtuiAsideHeader]',\n})\nexport class RtuiAsideContainerHeaderDirective {}\n\n@Component({\n    selector: 'rtui-aside-container',\n    templateUrl: './aside-container.component.html',\n    styleUrls: ['./aside-container.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        RouterLink,\n        NgTemplateOutlet,\n\n        // material\n        MatIcon,\n        CdkTrapFocus,\n        MatIconButton,\n        MatTooltip,\n        MatButton,\n\n        // standalone components\n        AsideErrorBoxComponent,\n        RtuiSpinnerComponent,\n        RtuiScrollableContainerComponent,\n        RtuiToolbarComponent,\n\n        // directives\n        RtuiScrollableContainerHeaderDirective,\n        RtuiScrollableContainerContentDirective,\n        RtuiScrollableContainerFooterDirective,\n        RtuiToolbarLeftDirective,\n        RtuiToolbarCenterDirective,\n        RtuiToolbarRightDirective,\n\n        // bem\n        BlockDirective,\n        ElemDirective,\n    ],\n    host: {\n        class: 'c-aside',\n    },\n})\nexport class RtuiAsideContainerComponent {\n    public title: InputSignal<Nullable<string>> = input<Nullable<string>>(null);\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, boolean> = input.required<Nullable<boolean>, boolean>({\n        transform: booleanAttribute,\n    });\n    public isSubmitButtonDisabled: InputSignalWithTransform<boolean, boolean> = input.required<boolean, boolean>({\n        transform: booleanAttribute,\n    });\n    public isFooterShown: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n\n    public pending: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isRequestErrorShown: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public headerActionsButtons: InputSignalWithTransform<IAside.HeaderActionButton[], IAside.HeaderActionButton[]> = input<\n        IAside.HeaderActionButton[],\n        IAside.HeaderActionButton[]\n    >([], {\n        transform: (value: IAside.HeaderActionButton[]) => transformArrayInput(value),\n    });\n\n    public requestError: InputSignal<Nullable<HttpErrorResponse>> = input<Nullable<HttpErrorResponse>>(null);\n    public submitButtonTitle: InputSignal<string> = input<string>('Save');\n    public cancelButtonTitle: InputSignal<string> = input<string>('Discard Changes');\n    public submitButtonTooltip: InputSignal<string> = input<string>('');\n\n    public readonly submitAction: OutputEmitterRef<void> = output<void>();\n    public readonly cancelAction: OutputEmitterRef<void> = output<void>();\n    public readonly headerAction: OutputEmitterRef<AsideButtonsType> = output<AsideButtonsType>();\n\n    public readonly headerTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiAsideContainerHeaderDirective, {\n        read: TemplateRef,\n    });\n\n    public onSubmit(): void {\n        this.submitAction.emit();\n    }\n\n    public onCancel(): void {\n        this.cancelAction.emit();\n    }\n\n    public onHeaderActionClick(buttonName: AsideButtonsType): void {\n        this.headerAction.emit(buttonName);\n    }\n}\n","@if (pending()) {\n    <rtui-spinner [showBackground]=\"true\" />\n}\n\n<rtui-scrollable cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n    <ng-container *rtuiScrollableHeader>\n        <div rtBlock=\"c-aside-header\">\n            <rtui-toolbar>\n                <ng-container *rtuiToolbarLeft>\n                    <button\n                        rtBlock=\"back-button\"\n                        aria-label=\"Icon-button\"\n                        mat-icon-button\n                        matTooltip=\"Go back\"\n                        matTooltipClass=\"custom-tooltip\"\n                        matTooltipPosition=\"below\"\n                        [matTooltipDisabled]=\"isMobile()\"\n                        [disableRipple]=\"true\"\n                        (click)=\"onCancel()\">\n                        <mat-icon>arrow_back</mat-icon>\n                    </button>\n                </ng-container>\n\n                <ng-container *rtuiToolbarCenter>\n                    <div rtBlock=\"c-aside-title\">\n                        @if (headerTpl()) {\n                            <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n                        } @else {\n                            {{ title() }}\n                        }\n                    </div>\n                </ng-container>\n\n                <ng-container *rtuiToolbarRight>\n                    <div rtBlock=\"c-aside-actions\">\n                        @if (headerActionsButtons()?.length) {\n                            @for (button of headerActionsButtons(); track button) {\n                                <button\n                                    rtElem=\"action\"\n                                    aria-label=\"Icon-button\"\n                                    mat-icon-button\n                                    matTooltipClass=\"custom-tooltip\"\n                                    matTooltipPosition=\"left\"\n                                    [matTooltip]=\"button.tooltip\"\n                                    [matTooltipDisabled]=\"isMobile()\"\n                                    [disableRipple]=\"true\"\n                                    [disabled]=\"button?.disabled\"\n                                    (click)=\"onHeaderActionClick(button.name)\">\n                                    <mat-icon [style.color]=\"button.color\">{{ button.icon }}</mat-icon>\n                                </button>\n                            }\n                        }\n                    </div>\n                </ng-container>\n            </rtui-toolbar>\n\n            @if (isRequestErrorShown()) {\n                <rtui-aside-error-box [error]=\"requestError()\" />\n            }\n        </div>\n    </ng-container>\n\n    <ng-container *rtuiScrollableContent>\n        <div rtBlock=\"c-aside-content\">\n            <ng-content />\n        </div>\n    </ng-container>\n\n    @if (isFooterShown()) {\n        <ng-container *rtuiScrollableFooter>\n            <div rtBlock=\"c-aside-footer\">\n                <div rtBlock=\"c-aside-footer-btn\">\n                    <button cdkFocusInitial mat-button type=\"button\" (click)=\"onCancel()\">\n                        {{ cancelButtonTitle() }}\n                    </button>\n                </div>\n\n                <div rtBlock=\"c-aside-footer-btn\">\n                    <button\n                        mat-flat-button\n                        type=\"button\"\n                        matTooltipClass=\"custom-tooltip\"\n                        matTooltipPosition=\"left\"\n                        [matTooltip]=\"submitButtonTooltip()\"\n                        [matTooltipDisabled]=\"!isSubmitButtonDisabled() || isMobile()\"\n                        [disabled]=\"isSubmitButtonDisabled()\"\n                        (click)=\"onSubmit()\">\n                        <div rtElem=\"title\">{{ submitButtonTitle() }}</div>\n                    </button>\n                </div>\n            </div>\n        </ng-container>\n    }\n</rtui-scrollable>\n","import { ChangeDetectionStrategy, Component, input, InputSignal } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { BlockDirective, ElemDirective } from '../../../bem';\n\n@Component({\n    selector: 'rtui-round-icon-button',\n    templateUrl: './rtui-round-icon-button.component.html',\n    styleUrls: ['./rtui-round-icon-button.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        MatIcon,\n\n        // bem\n        BlockDirective,\n        ElemDirective,\n    ],\n})\nexport class RtuiRoundIconButtonComponent {\n    public icon: InputSignal<string> = input.required<string>();\n}\n","<div rtBlock=\"round-icon-button\">\n    <mat-icon rtElem=\"icon\">{{ icon() }}</mat-icon>\n</div>\n","import { ChangeDetectionStrategy, Component, InputSignal, Signal, computed, input } from '@angular/core';\n\nimport { Nullable } from '../../../util';\n\nexport enum BUTTON_SIZE {\n    SMALL = 'sm',\n    MEDIUM = 'md',\n    LARGE = 'lg',\n    FULL = 'full',\n}\nexport type ButtonSizeType = BUTTON_SIZE.SMALL | BUTTON_SIZE.MEDIUM | BUTTON_SIZE.LARGE | BUTTON_SIZE.FULL;\nexport enum BUTTON_COLOR {\n    ACCENT = 'accent',\n    SUCCESS = 'success',\n    SECONDARY = 'secondary',\n    ERROR = 'error',\n    WARNING = 'warning',\n}\nexport type ButtonColorType =\n    | BUTTON_COLOR.ACCENT\n    | BUTTON_COLOR.SUCCESS\n    | BUTTON_COLOR.ERROR\n    | BUTTON_COLOR.WARNING\n    | BUTTON_COLOR.SECONDARY;\nexport enum BUTTON_APPEARANCE {\n    OUTLINE = 'outline',\n    LIGHT = 'light',\n}\nexport type ButtonAppearanceType = BUTTON_APPEARANCE.OUTLINE | BUTTON_APPEARANCE.LIGHT;\n\n@Component({\n    selector: 'a[rtui-btn], button[rtui-btn]',\n    template: `\n        <ng-content />\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'rtui-btn',\n        '[class.rtui-btn-sm]': 'size() === \"sm\"',\n        '[class.rtui-btn-md]': 'size() === \"md\"',\n        '[class.rtui-btn-lg]': 'size() === \"lg\"',\n        '[class.rtui-btn-full]': 'size() === \"full\"',\n        '[class]': 'modifierClass()',\n    },\n})\nexport class RtuiButtonComponent {\n    public readonly size: InputSignal<ButtonSizeType> = input<ButtonSizeType>(BUTTON_SIZE.MEDIUM);\n    public readonly color: InputSignal<ButtonColorType> = input<ButtonColorType>(BUTTON_COLOR.ACCENT);\n    public readonly appearance: InputSignal<Nullable<ButtonAppearanceType>> = input();\n\n    public readonly modifierClass: Signal<string> = computed(() => {\n        const modifiers: string[] = [];\n\n        if (this.color()) {\n            modifiers.push(this.color());\n        }\n\n        if (this.appearance()) {\n            modifiers.push(this.appearance() as string);\n        }\n\n        return modifiers.length ? `rtui-btn-${modifiers.join('-')}` : '';\n    });\n}\n","import { TitleCasePipe } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    InputSignalWithTransform,\n    ModelSignal,\n    OutputEmitterRef,\n    input,\n    model,\n    output,\n} from '@angular/core';\nimport { BlockDirective, ElemDirective } from '../../../bem';\nimport { transformArrayInput } from '../../../util';\n\n@Component({\n    selector: 'rtui-multi-button',\n    templateUrl: 'rtui-multi-button.component.html',\n    styleUrls: ['rtui-multi-button.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        // pipes\n        TitleCasePipe,\n        // rt-tools\n        BlockDirective,\n        ElemDirective,\n    ],\n})\nexport class RtuiMultiButtonComponent {\n    public actions: InputSignalWithTransform<string[], string[]> = input<string[], string[]>([], {\n        transform: (value: string[]) => transformArrayInput(value),\n    });\n    public activeAction: ModelSignal<string> = model<string>('');\n\n    public readonly changeActiveAction: OutputEmitterRef<string> = output<string>();\n\n    public onSetActiveAction(action: string): void {\n        if (action !== this.activeAction()) {\n            this.activeAction.set(action);\n            this.changeActiveAction.emit(this.activeAction());\n        }\n    }\n}\n","@if (actions()?.length) {\n    <div rtBlock=\"rtui-multibutton-actions\">\n        @for (action of actions(); track action) {\n            <button rtElem=\"action\" type=\"button\" [rtMod]=\"{ active: action === activeAction() }\" (click)=\"onSetActiveAction(action)\">\n                {{ action | titlecase }}\n            </button>\n        }\n    </div>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChild,\n    Directive,\n    input,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n    Signal,\n    TemplateRef,\n    Type,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatToolbar } from '@angular/material/toolbar';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { Nullable } from '../../util';\nimport { RtuiToolbarCenterDirective, RtuiToolbarComponent, RtuiToolbarLeftDirective, RtuiToolbarRightDirective } from '../toolbar';\n\n@Directive({\n    selector: '[rtuiHeaderLeft]',\n})\nexport class RtuiHeaderLeftDirective {}\n\n@Directive({\n    selector: '[rtuiHeaderCenter]',\n})\nexport class RtuiHeaderCenterDirective {}\n\n@Directive({\n    selector: '[rtuiHeaderRight]',\n})\nexport class RtuiHeaderRightDirective {}\n\n@Component({\n    selector: 'rtui-header',\n    templateUrl: './header.component.html',\n    styleUrls: ['./header.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n\n        // Material\n        MatToolbar,\n        MatIconButton,\n        MatIcon,\n\n        // BEM\n        BlockDirective,\n        ElemDirective,\n\n        // Ui-kit\n        RtuiToolbarComponent,\n        RtuiToolbarLeftDirective,\n        RtuiToolbarCenterDirective,\n        RtuiToolbarRightDirective,\n    ],\n})\nexport class RtuiHeaderComponent {\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, Nullable<boolean>> = input<Nullable<boolean>, Nullable<boolean>>(false, {\n        transform: booleanAttribute,\n    });\n    public isMobileMenuButtonShown: InputSignalWithTransform<Nullable<boolean>, Nullable<boolean>> = input<\n        Nullable<boolean>,\n        Nullable<boolean>\n    >(true, {\n        transform: booleanAttribute,\n    });\n\n    public readonly leftHeaderTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiHeaderLeftDirective, {\n        read: TemplateRef,\n    });\n    public readonly centerHeaderTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiHeaderCenterDirective, {\n        read: TemplateRef,\n    });\n    public readonly rightHeaderTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiHeaderRightDirective, {\n        read: TemplateRef,\n    });\n\n    public readonly openMobileMenuAction: OutputEmitterRef<void> = output<void>();\n\n    public openSideMenu(): void {\n        if (this.isMobile() && this.isMobileMenuButtonShown()) {\n            this.openMobileMenuAction.emit();\n        }\n    }\n}\n","<rtui-toolbar>\n    <ng-container *rtuiToolbarLeft>\n        @if (isMobile() && isMobileMenuButtonShown()) {\n            <button mat-icon-button rtBlock=\"mobile-menu-button\" (click)=\"openSideMenu()\">\n                <mat-icon>menu</mat-icon>\n            </button>\n        }\n\n        @if (leftHeaderTpl()) {\n            <ng-template *ngTemplateOutlet=\"leftHeaderTpl() ?? null\" />\n        }\n    </ng-container>\n\n    @if (centerHeaderTpl()) {\n        <ng-container *rtuiToolbarCenter>\n            <ng-template *ngTemplateOutlet=\"centerHeaderTpl() ?? null\" />\n        </ng-container>\n    }\n\n    @if (rightHeaderTpl()) {\n        <ng-container *rtuiToolbarRight>\n            <ng-template *ngTemplateOutlet=\"rightHeaderTpl() ?? null\" />\n        </ng-container>\n    }\n</rtui-toolbar>\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip, TooltipPosition } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { isString, Nullable } from '../../../../util';\n\n@Component({\n    selector: 'rtui-clear-button',\n    templateUrl: './rtui-clear-button.component.html',\n    styleUrls: ['./rtui-clear-button.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        // Material\n        MatIcon,\n        MatIconButton,\n        MatTooltip,\n\n        // BEM\n        BlockDirective,\n        ElemDirective,\n    ],\n})\nexport class RtuiClearButtonComponent {\n    readonly #defaultTooltipPosition: TooltipPosition = 'above';\n\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, boolean> = input<Nullable<boolean>, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isButtonShown: InputSignalWithTransform<Nullable<boolean>, boolean> = input<Nullable<boolean>, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    public tooltip: InputSignalWithTransform<Nullable<string>, string> = input<Nullable<string>, string>(null, {\n        transform: (value: Nullable<string>) => (isString(value) ? value.trim() : ''),\n    });\n    public tooltipPosition: InputSignal<TooltipPosition> = input(this.#defaultTooltipPosition);\n\n    public readonly keydownAction: OutputEmitterRef<void> = output<void>();\n    public readonly clickAction: OutputEmitterRef<void> = output<void>();\n\n    public onKeydown(): void {\n        this.keydownAction.emit();\n    }\n\n    public onClick(): void {\n        this.clickAction.emit();\n    }\n}\n","<button\n    rtBlock=\"rtui-clear-button\"\n    [rtMod]=\"{ invisible: !isButtonShown() }\"\n    [matTooltip]=\"tooltip() ?? ''\"\n    [matTooltipPosition]=\"tooltipPosition()\"\n    [matTooltipDisabled]=\"isMobile()\"\n    (keydown)=\"onKeydown()\"\n    (click)=\"onClick()\">\n    <mat-icon rtElem=\"icon\">close</mat-icon>\n</button>\n","import { PageModel } from './lists.interface';\n\nexport const DEFAULT_PAGE_SIZE: number = 20;\n\nexport const DEFAULT_PAGE_MODEL: Readonly<PageModel> = Object.freeze({\n    pageNumber: 1,\n    pageSize: DEFAULT_PAGE_SIZE,\n    totalCount: 0,\n\n    hasNext: false,\n    hasPrev: false,\n});\n","import {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    DestroyRef,\n    effect,\n    ElementRef,\n    HostListener,\n    inject,\n    Injector,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    OnInit,\n    output,\n    OutputEmitterRef,\n    Signal,\n    signal,\n    viewChild,\n    WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { isNumber, Nullable, WINDOW } from '../../../../util';\nimport { DEFAULT_PAGE_SIZE } from '../../util/default-pagination';\nimport { PageModel } from '../../util/lists.interface';\n\n@Component({\n    selector: 'rtui-pagination',\n    templateUrl: './rtui-pagination.component.html',\n    styleUrls: ['./rtui-pagination.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [ReactiveFormsModule, BlockDirective, ElemDirective],\n})\nexport class RtuiPaginationComponent implements OnInit, AfterViewInit {\n    readonly #injector: Injector = inject(Injector);\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #fb: FormBuilder = inject(FormBuilder);\n    readonly #windowRef: Window = inject(WINDOW);\n\n    /** Current Page Model */\n    public currentPageModel: InputSignal<PageModel> = input.required();\n    /** Indicates is mobile view */\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, boolean> = input.required<Nullable<boolean>, boolean>({\n        transform: booleanAttribute,\n    });\n\n    /** Output action when Page Model changed */\n    public readonly pageModelChange: OutputEmitterRef<Partial<PageModel>> = output<Partial<PageModel>>();\n\n    /** Form control for selected page size */\n    public control: FormControl<number> = this.#fb.nonNullable.control(DEFAULT_PAGE_SIZE);\n    public readonly divider: Signal<string> = signal('...');\n    /** Page size options */\n    public readonly pageSizes: Signal<number[]> = computed(() => {\n        return [10, 20, 40, 50].filter(\n            (el: number) => el / 2 <= this.currentPageModel()?.totalCount || el === this.currentPageModel()?.pageSize\n        );\n    });\n    /** Array of current page numbers */\n    public readonly numbers: WritableSignal<Array<number | string>> = signal([]);\n    /** Page Model for compare */\n    public readonly previousPageModel: WritableSignal<Nullable<PageModel>> = signal(null);\n    /** Value of full content width */\n    public readonly minContentFitWidth: WritableSignal<number> = signal(0);\n    /** Indicates is content clipped */\n    public readonly isContentClipped: WritableSignal<boolean> = signal(false);\n\n    /** Container template ref */\n    public readonly containerRef: Signal<Nullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('containerRef');\n\n    /** Set 'isContentClipped' when widow resize */\n    @HostListener('window:resize')\n    public onResize(): void {\n        if (this.isContentClipped() && this.#windowRef?.innerWidth && this.minContentFitWidth() + 36 < this.#windowRef.innerWidth) {\n            this.isContentClipped.set(false);\n        } else if (!this.isContentClipped() && this.#windowRef.innerWidth && this.minContentFitWidth() + 36 > this.#windowRef.innerWidth) {\n            this.isContentClipped.set(true);\n        }\n        this.#setMinContentFitWidth();\n    }\n\n    public ngOnInit(): void {\n        this.numbers.set(this.#fillArray());\n        this.control.patchValue(this.currentPageModel()?.pageSize ?? DEFAULT_PAGE_SIZE, { emitEvent: false });\n\n        this.control.valueChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((value: number) => {\n            this.changePageSize(value);\n        });\n\n        /** Update Page Model */\n        effect(\n            () => {\n                if (Boolean(this.currentPageModel()) && Boolean(this.previousPageModel())) {\n                    this.numbers.set(this.#fillArray());\n                    this.#setMinContentFitWidth();\n                }\n                this.previousPageModel.set(this.currentPageModel());\n            },\n            { injector: this.#injector }\n        );\n    }\n\n    /** Set 'isContentClipped' on init */\n    public ngAfterViewInit(): void {\n        const currentContainerWidth: Nullable<number> = this.containerRef()?.nativeElement?.scrollWidth;\n\n        if (currentContainerWidth && this.#windowRef?.innerWidth) {\n            this.minContentFitWidth.set(currentContainerWidth);\n            this.isContentClipped.set(currentContainerWidth > this.#windowRef.innerWidth);\n        }\n    }\n\n    /** Action for change Page Model */\n    public changePageSize(pageSize: number): void {\n        const current_total: number = Math.ceil(this.currentPageModel().totalCount / pageSize);\n        const previous_total: number = Math.ceil(this.currentPageModel().totalCount / this.currentPageModel().pageSize);\n        const correction: number = Math.floor(\n            ((previous_total - this.currentPageModel().pageNumber) * this.currentPageModel().pageSize) / pageSize\n        );\n\n        this.pageModelChange.emit({ pageNumber: current_total - correction, pageSize });\n    }\n\n    /** Action for select page */\n    public onChangePageNumber(pageNumber: string | number): void {\n        if (isNumber(pageNumber)) {\n            if (!this.currentPageModel().hasNext && this.currentPageModel().pageNumber <= pageNumber) {\n                return;\n            }\n\n            if (!this.currentPageModel().hasPrev && this.currentPageModel().pageNumber >= pageNumber) {\n                return;\n            }\n\n            this.pageModelChange.emit({ pageNumber });\n        }\n    }\n\n    /** Fill the array width current page numbers */\n    #fillArray(): Array<number | string> {\n        const current: number = this.currentPageModel().pageNumber;\n        const total: number = Math.ceil(this.currentPageModel().totalCount / this.currentPageModel().pageSize);\n        const result: Array<number | string> = Array(total)\n            .fill(0, 0, total)\n            .map((x: number | string, i: number) => i + 1);\n\n        if (total <= 6) {\n            return result;\n        } else {\n            if (current < 3 || current > total - 2) {\n                return result.slice(0, 3).concat(this.divider(), ...result.slice(total - 3, total));\n            }\n\n            if (current === 3) {\n                return result.slice(0, 4).concat(this.divider(), ...result.slice(total - 2, total));\n            }\n\n            if (current === 4) {\n                return result.slice(0, 5).concat(this.divider(), ...result.slice(total - 1, total));\n            }\n\n            if (current > 4 && current <= total - 4) {\n                return result\n                    .slice(0, 1)\n                    .concat(this.divider(), current - 1, current, current + 1, this.divider(), ...result.slice(total - 1, total));\n            }\n\n            if (current === total - 3) {\n                return result.slice(0, 1).concat(this.divider(), ...result.slice(total - 5, total));\n            }\n\n            if (current === total - 2) {\n                return result.slice(0, 2).concat(this.divider(), ...result.slice(total - 4, total));\n            }\n\n            return [];\n        }\n    }\n\n    /** Set 'isContentClipped' when content changed */\n    #setMinContentFitWidth(): void {\n        const currentContainerWidth: Nullable<number> = this.containerRef()?.nativeElement?.scrollWidth;\n\n        if (currentContainerWidth && this.minContentFitWidth() && this.minContentFitWidth() < currentContainerWidth) {\n            this.minContentFitWidth.set(currentContainerWidth);\n        }\n    }\n}\n","@if (currentPageModel().totalCount > pageSizes()[0]) {\n    <div #containerRef rtBlock=\"pagination-container\" [rtMod]=\"{ clipped: isContentClipped() && !isMobile() }\">\n        <div rtBlock=\"paging\" [rtMod]=\"{ clipped: isContentClipped() && !isMobile() }\">\n            <div\n                rtElem=\"item\"\n                role=\"button\"\n                tabindex=\"0\"\n                [rtMod]=\"{ enabled: currentPageModel()?.hasPrev }\"\n                [class.c-pagination__paging-item--disabled]=\"!currentPageModel().hasPrev\"\n                (click)=\"onChangePageNumber(currentPageModel().pageNumber - 1)\"\n                (keydown)=\"onChangePageNumber(currentPageModel().pageNumber - 1)\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M15.5 8.5H0.5\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                    <path\n                        d=\"M5.5 3.5L0.5 8.5L5.5 13.5\"\n                        stroke=\"currentColor\"\n                        stroke-miterlimit=\"10\"\n                        stroke-linecap=\"round\"\n                        stroke-linejoin=\"round\" />\n                </svg>\n            </div>\n\n            @if (isMobile()) {\n                <div rtElem=\"item\" rtMod=\"active\" role=\"button\" tabindex=\"1\">\n                    <span rtElem=\"item-label\">{{ currentPageModel().pageNumber }}</span>\n                </div>\n            } @else {\n                @for (number of numbers(); track $index) {\n                    <div\n                        rtElem=\"item\"\n                        role=\"button\"\n                        tabindex=\"1\"\n                        [rtMod]=\"{\n                            active: currentPageModel().pageNumber === number,\n                            divider: number === divider(),\n                            enabled: number !== divider() && currentPageModel().pageNumber !== number,\n                        }\"\n                        (click)=\"onChangePageNumber(number)\"\n                        (keydown)=\"onChangePageNumber(number)\">\n                        <span rtElem=\"item-label\">{{ number }}</span>\n                    </div>\n                }\n            }\n\n            <div\n                rtElem=\"item\"\n                role=\"button\"\n                tabindex=\"3\"\n                [rtMod]=\"{ enabled: currentPageModel()?.hasNext }\"\n                (click)=\"onChangePageNumber(currentPageModel().pageNumber + 1)\"\n                (keydown)=\"onChangePageNumber(currentPageModel().pageNumber + 1)\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M0.5 8.5H15.5\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                    <path\n                        d=\"M10.5 3.5L15.5 8.5L10.5 13.5\"\n                        stroke=\"currentColor\"\n                        stroke-miterlimit=\"10\"\n                        stroke-linecap=\"round\"\n                        stroke-linejoin=\"round\" />\n                </svg>\n            </div>\n        </div>\n\n        <div rtBlock=\"page-size-toggle\" [rtMod]=\"{ clipped: isContentClipped() && !isMobile() }\">\n            @if (!isMobile()) {\n                <div rtElem=\"title\">Items per page:</div>\n            }\n\n            <select rtElem=\"selector\" [formControl]=\"control\">\n                @for (size of pageSizes(); track $index) {\n                    <option [value]=\"size\">{{ size }}</option>\n                }\n            </select>\n        </div>\n    </div>\n}\n","export const RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE: string = 'rtui-table-stop-row-click-attribute';\n","export enum LIST_SORT_ORDER_ENUM {\n    ASC = 'asc',\n    DESC = 'desc',\n}\n\nexport type ListSortOrderType = LIST_SORT_ORDER_ENUM.ASC | LIST_SORT_ORDER_ENUM.DESC;\n","import { ListSortOrderType } from './list-sort-order.enum';\n\nexport interface ListState<T extends string, M extends object> {\n    pageModel: PageModel;\n    sortModel: SortModel<T>;\n    filterModel: M;\n    searchTerm: string;\n}\n\nexport interface SortModel<T = string> {\n    propertyName: T;\n    sortDirection: ListSortOrderType;\n}\n\nexport interface PageModel {\n    pageNumber: number;\n    pageSize: number;\n    totalCount: number;\n\n    endIndex?: number;\n    hasNext?: boolean;\n    hasPrev?: boolean;\n    isFirstPage?: boolean;\n    isLastPage?: boolean;\n    startIndex?: number;\n}\n\nexport interface FilterModel<M = string> {\n    operatorType: FilterOperatorType;\n    propertyName: M;\n    value?: string | number | boolean;\n    values?: Array<string | number>;\n}\n\nexport enum FILTER_OPERATOR_TYPE_ENUM {\n    EQUALS = 'equals',\n    NOT_EQUALS = 'notEquals',\n    STARTS_WITH = 'startsWith',\n    ENDS_WITH = 'endsWith',\n    CONTAINS = 'contains',\n    GREATER_THAN = 'greaterThan',\n    LESS_THAN = 'lessThan',\n}\n\nexport type FilterOperatorType =\n    | FILTER_OPERATOR_TYPE_ENUM.EQUALS\n    | FILTER_OPERATOR_TYPE_ENUM.NOT_EQUALS\n    | FILTER_OPERATOR_TYPE_ENUM.STARTS_WITH\n    | FILTER_OPERATOR_TYPE_ENUM.ENDS_WITH\n    | FILTER_OPERATOR_TYPE_ENUM.CONTAINS\n    | FILTER_OPERATOR_TYPE_ENUM.GREATER_THAN\n    | FILTER_OPERATOR_TYPE_ENUM.LESS_THAN;\n\nexport const FILTER_OPERATORS: ReadonlyArray<FilterOperatorType> = Object.freeze([\n    FILTER_OPERATOR_TYPE_ENUM.EQUALS,\n    FILTER_OPERATOR_TYPE_ENUM.NOT_EQUALS,\n    FILTER_OPERATOR_TYPE_ENUM.STARTS_WITH,\n    FILTER_OPERATOR_TYPE_ENUM.ENDS_WITH,\n    FILTER_OPERATOR_TYPE_ENUM.CONTAINS,\n    FILTER_OPERATOR_TYPE_ENUM.GREATER_THAN,\n    FILTER_OPERATOR_TYPE_ENUM.LESS_THAN,\n]);\n","import { FormControl } from '@angular/forms';\n\nimport { FilterOperatorType, SortModel } from './lists.interface';\n\nexport enum TABLE_COLUMN_TYPES_ENUM {\n    DATE = 'date',\n    PERCENT = 'percent',\n    ARRAY = 'array',\n    BOOLEAN = 'boolean',\n    TEXT = 'text',\n    CURRENCY = 'currency',\n    CUSTOM = 'custom',\n}\n\nexport enum TABLE_COLUMN_FILTER_TYPES_ENUM {\n    TEXT = 'text',\n    NUMBER = 'number',\n    SELECT = 'select',\n    DATE = 'date',\n}\n\nexport enum TEXT_CELL_COLOR_ENUM {\n    NEUTRAL = 'neutral',\n    DANGER = 'danger',\n    WARNING = 'warning',\n    SUCCESS = 'success',\n    EMPTY = 'empty',\n}\n\nexport namespace ITable {\n    export type TextCellColor =\n        | TEXT_CELL_COLOR_ENUM.NEUTRAL\n        | TEXT_CELL_COLOR_ENUM.DANGER\n        | TEXT_CELL_COLOR_ENUM.WARNING\n        | TEXT_CELL_COLOR_ENUM.SUCCESS\n        | TEXT_CELL_COLOR_ENUM.EMPTY;\n\n    export type Type =\n        | TABLE_COLUMN_TYPES_ENUM.DATE\n        | TABLE_COLUMN_TYPES_ENUM.PERCENT\n        | TABLE_COLUMN_TYPES_ENUM.ARRAY\n        | TABLE_COLUMN_TYPES_ENUM.BOOLEAN\n        | TABLE_COLUMN_TYPES_ENUM.TEXT\n        | TABLE_COLUMN_TYPES_ENUM.CURRENCY\n        | TABLE_COLUMN_TYPES_ENUM.CUSTOM;\n\n    export type FilterType =\n        | TABLE_COLUMN_FILTER_TYPES_ENUM.TEXT\n        | TABLE_COLUMN_FILTER_TYPES_ENUM.NUMBER\n        | TABLE_COLUMN_FILTER_TYPES_ENUM.SELECT\n        | TABLE_COLUMN_FILTER_TYPES_ENUM.DATE;\n\n    export interface Column<T = Record<string, unknown>> extends Record<string, unknown> {\n        align: 'right' | 'left' | 'center';\n        propName: keyof T;\n        type: Type;\n        copyable: boolean;\n        header: Header;\n\n        sorting?: SortModel<NonNullable<Extract<keyof T, string>>>;\n        filtering?: boolean;\n        filteringMultiple?: boolean;\n        copyBtnAlign?: 'right' | 'left';\n\n        width?: string;\n        minWidth?: string;\n\n        icon?: Icon;\n        iconTransform?: (value: T[keyof T]) => string;\n        href?: string;\n        className?: string;\n        tooltip?: string;\n        transform?: (value: T[keyof T]) => string | number;\n\n        // Additional properties for filters\n        filterType?: FilterType;\n        defaultFilterOperator?: FilterOperatorType;\n        filterOperators?: FilterOperatorType[];\n        filterSelectOptions?: string[];\n\n        // Additional properties for table configuration service\n        displayName?: string;\n        orderIndex?: number;\n        hidden?: boolean;\n        fixed?: boolean;\n    }\n\n    export interface ColumnFilter {\n        propName: string;\n        value: string;\n    }\n\n    export interface Header {\n        align: 'right' | 'left' | 'center';\n        label: string;\n\n        className?: string;\n        tooltip?: string;\n        icon?: Icon;\n    }\n\n    export interface Icon {\n        glyph: string;\n\n        color?: TextCellColor;\n        tooltip?: string;\n        visible?: boolean;\n        placement?: 'left' | 'right';\n        outlined?: boolean;\n    }\n\n    export namespace Config {\n        export interface Data<T> {\n            isVerticalScrollbarShown: boolean;\n            isHorizontalScrollbarShown: boolean;\n            columns: Array<ITable.Column<T>>;\n        }\n\n        export interface Form<T> {\n            isVerticalScrollbarShown: FormControl<boolean>;\n            isHorizontalScrollbarShown: FormControl<boolean>;\n            columns: FormControl<(keyof T)[]>;\n        }\n    }\n}\n","import { InjectionToken, Signal, TemplateRef, WritableSignal } from '@angular/core';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { Nullable } from '../../../util';\nimport { FilterModel, ITable, SortModel } from './index';\n\nexport const RTUI_TABLE_COMPONENT_TOKEN: InjectionToken<IRtuiTable<Record<string, unknown>, string, string>> = new InjectionToken<\n    IRtuiTable<Record<string, unknown>, Extract<keyof Record<string, unknown>, string>, Extract<keyof Record<string, unknown>, string>>\n>('RtuiTableComponent');\n\nexport interface IRtuiTable<\n    ENTITY_TYPE extends Record<string, unknown>,\n    SORT_PROPERTY extends Extract<keyof ENTITY_TYPE, string>,\n    KEY extends Extract<keyof ENTITY_TYPE, string>,\n> {\n    columns: Signal<Array<ITable.Column<ENTITY_TYPE>>>;\n    customCellsTpl: Signal<\n        Nullable<{\n            getTemplateByPropName(propName: keyof ENTITY_TYPE): TemplateRef<{ $implicit: ENTITY_TYPE }>;\n        }>\n    >;\n    rowActionsTpl: Signal<Nullable<TemplateRef<{ $implicit: ENTITY_TYPE }>>>;\n    additionalRowActionsTpl: Signal<Nullable<TemplateRef<unknown>>>;\n\n    isMobile: Signal<boolean>;\n    isTableRowsClickable: Signal<boolean>;\n    keyExp: Signal<NonNullable<KEY>>;\n    entities: Signal<ENTITY_TYPE[]>;\n    currentSortModel: Signal<Nullable<SortModel<SORT_PROPERTY>>>;\n    appearance: Signal<MatFormFieldAppearance>;\n    filterAppearance: Signal<MatFormFieldAppearance>;\n    filterModel: Signal<FilterModel<KEY>[]>;\n    isFiltersShown: Signal<boolean>;\n    selectedEntitiesIds: WritableSignal<ENTITY_TYPE[KEY][]>;\n    isPageEntitiesSelected: WritableSignal<boolean>;\n    isPageEntitiesIndeterminate: WritableSignal<boolean>;\n    isMultiSelect: WritableSignal<boolean>;\n    isSelectorsColumnShown: WritableSignal<boolean>;\n    isSelectorsColumnDisabled: WritableSignal<boolean>;\n    activeRowIndex: WritableSignal<Nullable<number>>;\n\n    onSortChange(sortModel: SortModel): void;\n    onFilterChange(filterModel: FilterModel<KEY>[]): void;\n    onMenuOpen(index: number): void;\n    onMenuClose(): void;\n    onRowClick(row: ENTITY_TYPE, event: MouseEvent): void;\n    onRowDoubleClick(row: ENTITY_TYPE): void;\n    onToggleEntity(entity: ENTITY_TYPE, checked: boolean): void;\n    onTogglePageEntities(checked: boolean): void;\n}\n","import { DestroyRef, Injectable, Signal, WritableSignal, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { take } from 'rxjs/operators';\n\nimport { IDBStorageService } from '../../../idb-storage';\nimport { Nullable, areArraysEqual } from '../../../util';\nimport { ITable } from './index';\n\n@Injectable()\nexport class RtTableConfigService<ENTITY_TYPE> {\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #iDBStorageService: IDBStorageService<{\n        isVerticalScrollbarShown: boolean;\n        isHorizontalScrollbarShown: boolean;\n        columns: Array<Partial<ITable.Column<ENTITY_TYPE>>>;\n    }> = inject(IDBStorageService);\n\n    #tableConfig: WritableSignal<ITable.Config.Data<ENTITY_TYPE>> = signal({\n        isVerticalScrollbarShown: false,\n        isHorizontalScrollbarShown: false,\n        columns: [],\n    });\n    public readonly tableConfig: Signal<ITable.Config.Data<ENTITY_TYPE>> = this.#tableConfig.asReadonly();\n\n    public initConfig(storageKey: string, config: Array<ITable.Column<ENTITY_TYPE>>): void {\n        this.#iDBStorageService\n            .get(storageKey)\n            .pipe(take(1), takeUntilDestroyed(this.#destroyRef))\n            .subscribe(\n                (\n                    savedConfig: Nullable<{\n                        isVerticalScrollbarShown: boolean;\n                        isHorizontalScrollbarShown: boolean;\n                        columns: Array<Partial<ITable.Column<ENTITY_TYPE>>>;\n                    }>\n                ) => {\n                    if (savedConfig?.columns && this.#checkIsSavedConfigConsistent(config, savedConfig.columns)) {\n                        const updatedColumns: Array<ITable.Column<ENTITY_TYPE> & { orderIndex: number }> = savedConfig?.columns.map(\n                            (el: Partial<ITable.Column<ENTITY_TYPE> & { orderIndex: number }>) => {\n                                const oldConfigIem: Nullable<ITable.Column<ENTITY_TYPE>> = config.find(\n                                    (item: ITable.Column<ENTITY_TYPE>) => el.propName === item.propName\n                                );\n                                return {\n                                    ...(oldConfigIem as ITable.Column<ENTITY_TYPE>),\n                                    displayName: oldConfigIem?.header?.label?.length ? oldConfigIem.header.label : el?.propName?.toString(),\n                                    propName: el.propName as keyof ENTITY_TYPE,\n                                    width: el?.width ?? 'auto',\n                                    orderIndex: el?.orderIndex ?? 0,\n                                    hidden: !!el?.hidden,\n                                    fixed: !!el?.fixed,\n                                };\n                            }\n                        );\n                        this.#tableConfig.set({\n                            isVerticalScrollbarShown: !!savedConfig?.isVerticalScrollbarShown,\n                            isHorizontalScrollbarShown: !!savedConfig?.isHorizontalScrollbarShown,\n                            columns: updatedColumns,\n                        });\n                    } else {\n                        this.#tableConfig.set({\n                            isVerticalScrollbarShown: false,\n                            isHorizontalScrollbarShown: true,\n                            columns: config.map((el: ITable.Column<ENTITY_TYPE>, index: number) => ({\n                                ...el,\n                                orderIndex: index,\n                                displayName: el?.header?.label?.length ? el.header.label : el.propName.toString(),\n                            })),\n                        });\n                    }\n                }\n            );\n    }\n\n    public updateConfig(storageKey: string, config: ITable.Config.Data<ENTITY_TYPE>): void {\n        const idbConfigColumns: Array<Partial<ITable.Column<ENTITY_TYPE>>> = config.columns.map((el: ITable.Column<ENTITY_TYPE>) => ({\n            displayName: el.header.label ?? el.propName.toString(),\n            propName: el.propName,\n            width: el?.width ?? 'auto',\n            orderIndex: el?.orderIndex ?? 0,\n            hidden: !!el?.hidden,\n            fixed: !!el?.fixed,\n        }));\n        this.#iDBStorageService\n            .set(storageKey, { ...config, columns: idbConfigColumns })\n            .pipe(take(1), takeUntilDestroyed(this.#destroyRef))\n            .subscribe();\n        this.#tableConfig.set(config);\n    }\n\n    public deleteConfig(storageKey: string): void {\n        this.#iDBStorageService.remove(storageKey).pipe(take(1), takeUntilDestroyed(this.#destroyRef)).subscribe();\n    }\n\n    #checkIsSavedConfigConsistent(\n        defaultConfig: Array<ITable.Column<ENTITY_TYPE>>,\n        savedConfig: Array<Partial<ITable.Column<ENTITY_TYPE>>>\n    ): boolean {\n        return (\n            !!defaultConfig?.length &&\n            !!savedConfig?.length &&\n            defaultConfig.length === savedConfig.length &&\n            areArraysEqual(\n                defaultConfig.map((el: ITable.Column<ENTITY_TYPE>) => el.propName).sort(),\n                savedConfig.map((el: Partial<ITable.Column<ENTITY_TYPE>>) => el.propName).sort()\n            )\n        );\n    }\n}\n","import { booleanAttribute, Directive, input, InputSignalWithTransform, signal, WritableSignal } from '@angular/core';\n\nimport { transformArrayInput } from '../../../util';\n\n@Directive()\nexport class RtCommonSelectorsDirective<ENTITY_TYPE extends Record<string, unknown>, KEY extends Extract<keyof ENTITY_TYPE, string>> {\n    /** Indicates is multiselect available */\n    public isMultiSelect: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is 'Select all' checkbox shown  */\n    public isSelectorColumnShown: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is selectors column disabled */\n    public isSelectorsColumnDisabled: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    /** Selected entities Ids on init */\n    public selectedEntitiesKeys: InputSignalWithTransform<ENTITY_TYPE[KEY][], ENTITY_TYPE[KEY][]> = input<\n        ENTITY_TYPE[KEY][],\n        ENTITY_TYPE[KEY][]\n    >([], {\n        transform: (value: ENTITY_TYPE[KEY][]) => transformArrayInput(value),\n    });\n\n    /** Key of ENTITY_TYPE for compare entities */\n    public readonly keyExp: WritableSignal<NonNullable<KEY>> = signal('id' as NonNullable<KEY>);\n    /** Current list of entities */\n    public readonly entities: WritableSignal<ENTITY_TYPE[]> = signal([]);\n\n    /** Add page entities to list exclude duplicates */\n    public addPageEntitiesToListExcludeDuplicates(list: ENTITY_TYPE[]): ENTITY_TYPE[] {\n        return [...list, ...this.entities()].filter((el: ENTITY_TYPE, index: number, self: ENTITY_TYPE[]) => {\n            return index === self.findIndex((_: ENTITY_TYPE) => _[this.keyExp()] === el[this.keyExp()]);\n        });\n    }\n\n    /** Remove page entities from list */\n    public removePageEntitiesFromList(list: ENTITY_TYPE[]): ENTITY_TYPE[] {\n        const removedEntitiesIds: ENTITY_TYPE[KEY][] = this.entities().map((el: ENTITY_TYPE) => el[this.keyExp()]);\n        return list.filter((el: ENTITY_TYPE) => !removedEntitiesIds.includes(el[this.keyExp()]));\n    }\n\n    /** Check is one of page entities exist in selected entities */\n    public isOneExistOnPage(selectedEntitiesIds: ENTITY_TYPE[KEY][]): boolean {\n        return !!this.entities().find((el: ENTITY_TYPE) => selectedEntitiesIds.includes(el[this.keyExp()]));\n    }\n\n    /** Check is all page entities exist in selected entities */\n    public isAllExistOnPage(selectedEntitiesIds: ENTITY_TYPE[KEY][]): boolean {\n        return !this.entities().find((el: ENTITY_TYPE) => !selectedEntitiesIds.includes(el[this.keyExp()]));\n    }\n}\n","import {\n    booleanAttribute,\n    computed,\n    DestroyRef,\n    Directive,\n    effect,\n    inject,\n    Injector,\n    input,\n    InputSignalWithTransform,\n    OnInit,\n    Signal,\n    signal,\n    WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, switchMap, take } from 'rxjs/operators';\n\nimport { RtuiDynamicListComponent } from '../dynamic-list.component';\nimport { RtCommonSelectorsDirective } from './common-selectors.directive';\n\n@Directive({\n    selector: 'rtui-dynamic-list[rtDynamicListSelectorsDirective]',\n})\nexport class RtDynamicListSelectorsDirective<\n    ENTITY_TYPE extends Record<string, unknown>,\n    SORT_PROPERTY extends Extract<keyof ENTITY_TYPE, string>,\n    KEY extends Extract<keyof ENTITY_TYPE, string>,\n>\n    extends RtCommonSelectorsDirective<ENTITY_TYPE, KEY>\n    implements OnInit\n{\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #injector: Injector = inject(Injector);\n    readonly #dynamicListRef: RtuiDynamicListComponent<ENTITY_TYPE, SORT_PROPERTY, KEY> =\n        inject<RtuiDynamicListComponent<ENTITY_TYPE, SORT_PROPERTY, KEY>>(RtuiDynamicListComponent);\n\n    /** Indicates is multiselect extended mod available (use selected and excluded lists) */\n    public isMultiSelectExtendedMod: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is 'Select all' checkbox shown  */\n    public isSelectAllSelectorShown: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n\n    /** List of selected entities for processing */\n    #selectedEntities: WritableSignal<ENTITY_TYPE[]> = signal([]);\n    /** List of excluded entities for processing */\n    #excludedEntities: WritableSignal<ENTITY_TYPE[]> = signal([]);\n    /** Indicates is 'Select all' checkbox selected  for processing */\n    #isAllEntitiesSelected: WritableSignal<boolean> = signal(false);\n    /** Indicates is all page entities checkbox selected  for processing */\n    #isPageEntitiesSelected: WritableSignal<boolean> = signal(false);\n    /** Indicates is page entities checkbox indeterminate  for processing */\n    #isPageEntitiesIndeterminate: WritableSignal<boolean> = signal(false);\n    /** Indicates is multi select extended mod enabled  for processing */\n    #isMultiSelectExtendedModEnabled: WritableSignal<boolean> = signal(false);\n\n    /** List of selected entities */\n    public readonly selectedEntities: Signal<ENTITY_TYPE[]> = this.#selectedEntities.asReadonly();\n    /** List of excluded entities */\n    public readonly excludedEntities: Signal<ENTITY_TYPE[]> = this.#excludedEntities.asReadonly();\n    /** List of selected entities ids */\n    public readonly selectedEntitiesIds: Signal<ENTITY_TYPE[KEY][]> = computed(() => {\n        return this.selectedEntities().map((el: ENTITY_TYPE) => el[this.keyExp()]);\n    });\n    /** List of excluded entities ids */\n    public readonly excludedEntitiesIds: Signal<ENTITY_TYPE[KEY][]> = computed(() => {\n        return this.excludedEntities().map((el: ENTITY_TYPE) => el[this.keyExp()]);\n    });\n    /** Indicates is 'Select All' checkbox selected */\n    public readonly isAllEntitiesSelected: Signal<boolean> = this.#isAllEntitiesSelected.asReadonly();\n    /** Indicates is all page entities checkbox selected */\n    public readonly isPageEntitiesSelected: Signal<boolean> = this.#isPageEntitiesSelected.asReadonly();\n    /** Indicates is page entities checkbox indeterminate */\n    public readonly isPageEntitiesIndeterminate: Signal<boolean> = this.#isPageEntitiesIndeterminate.asReadonly();\n    /** Indicates is multi select extended mod enabled */\n    public readonly isMultiSelectExtendedModEnabled: Signal<boolean> = this.#isMultiSelectExtendedModEnabled.asReadonly();\n\n    public ngOnInit(): void {\n        /** Set current key */\n        this.keyExp.set(this.#dynamicListRef.keyExp());\n\n        /** Set current, selected and excluded entities lists and update selectors states */\n        toObservable(this.#dynamicListRef?.entities, { injector: this.#injector })\n            .pipe(takeUntilDestroyed(this.#destroyRef))\n            .subscribe((list: ENTITY_TYPE[]) => {\n                this.entities.set(list);\n\n                if (this.isMultiSelectExtendedModEnabled()) {\n                    this.#selectedEntities.update((selected: ENTITY_TYPE[]) => {\n                        return this.addPageEntitiesToListExcludeDuplicates(selected).filter(\n                            (el: ENTITY_TYPE) => !this.excludedEntitiesIds().includes(el[this.keyExp()])\n                        );\n                    });\n                    this.#isAllEntitiesSelected.set(!this.excludedEntities().length);\n                }\n\n                this.setExistingEntitiesState();\n            });\n\n        /** Set initial selected entities */\n        toObservable(this.entities, { injector: this.#injector })\n            .pipe(\n                filter((list: ENTITY_TYPE[]) => !!list?.length),\n                take(1),\n                switchMap(() =>\n                    toObservable(this.selectedEntitiesKeys, { injector: this.#injector }).pipe(\n                        filter((list: ENTITY_TYPE[KEY][]) => !!list?.length),\n                        take(1)\n                    )\n                ),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe(() => {\n                this.#selectedEntities.set(\n                    this.entities().filter((el: ENTITY_TYPE) => this.selectedEntitiesKeys().includes(el[this.keyExp()]))\n                );\n                this.setExistingEntitiesState();\n            });\n\n        /** Update selectors states and list of selected entities ids in children components */\n        effect(\n            () => {\n                if (this.#dynamicListRef?.tableContainerTpl() && this.#dynamicListRef?.tableTpl() && this.selectedEntities()) {\n                    this.#dynamicListRef?.tableContainerTpl()?.isAllEntitiesSelected.set(this.isAllEntitiesSelected());\n                    this.#dynamicListRef?.tableContainerTpl()?.isAllEntitiesIndeterminate.set(!!this.selectedEntities()?.length);\n                    this.#dynamicListRef?.tableContainerTpl()?.selectedEntitiesCount.set(this.selectedEntities()?.length);\n                    this.#dynamicListRef?.tableTpl()?.selectedEntitiesIds.set(this.selectedEntitiesIds());\n                    this.#dynamicListRef?.tableTpl()?.isPageEntitiesSelected.set(this.isPageEntitiesSelected());\n                    this.#dynamicListRef?.tableTpl()?.isPageEntitiesIndeterminate.set(this.isPageEntitiesIndeterminate());\n                }\n            },\n            { injector: this.#injector }\n        );\n\n        /** Table container config */\n        effect(\n            () => {\n                /** Set 'onToggleAllEntities' method in TableContainerComponent  */\n                if (this.#dynamicListRef.tableContainerTpl()?.onToggleAllEntities) {\n                    this.#dynamicListRef.tableContainerTpl()!.onToggleAllEntities = (checked: boolean): void =>\n                        this.toggleAllEntities(checked);\n                }\n            },\n            { injector: this.#injector }\n        );\n        effect(\n            () => {\n                /** Set 'isMultiSelect' indicator state in TableContainerComponent  */\n                if (\n                    this.#dynamicListRef?.tableContainerTpl() &&\n                    this.#dynamicListRef?.tableContainerTpl()?.isMultiSelect() !== this.isMultiSelect()\n                ) {\n                    this.#dynamicListRef?.tableContainerTpl()?.isMultiSelect.set(this.isMultiSelect());\n                }\n            },\n            { injector: this.#injector }\n        );\n        effect(\n            () => {\n                /** Set 'isSelectAllSelectorShown' indicator state in TableContainerComponent  */\n                if (\n                    this.#dynamicListRef?.tableContainerTpl() &&\n                    this.#dynamicListRef?.tableContainerTpl()?.isSelectAllSelectorShown() !== this.isSelectAllSelectorShown()\n                ) {\n                    this.#dynamicListRef?.tableContainerTpl()?.isSelectAllSelectorShown.set(this.isSelectAllSelectorShown());\n                }\n            },\n            { injector: this.#injector }\n        );\n\n        effect(\n            () => {\n                /** Set 'isSelectAllSelectorDisabled' indicator state in TableContainerComponent  */\n                if (\n                    this.#dynamicListRef?.tableContainerTpl() &&\n                    this.#dynamicListRef?.tableContainerTpl()?.isSelectAllSelectorDisabled() !== this.isSelectorsColumnDisabled()\n                ) {\n                    this.#dynamicListRef?.tableContainerTpl()?.isSelectAllSelectorDisabled.set(this.isSelectorsColumnDisabled());\n                }\n            },\n            { injector: this.#injector }\n        );\n\n        /** Table config */\n        effect(\n            () => {\n                /** Set 'isMultiSelect' indicator state in TableComponent  */\n                if (this.#dynamicListRef?.tableTpl()?.isMultiSelect() !== this.isMultiSelect()) {\n                    this.#dynamicListRef?.tableTpl()?.isMultiSelect.set(this.isMultiSelect());\n                }\n            },\n            { injector: this.#injector }\n        );\n        effect(\n            () => {\n                /** Set 'onToggleExistingEntities' and 'onToggleEntity' methods and 'isSelectorsColumnShown' indicator state in TableComponent  */\n                if (this.#dynamicListRef.tableTpl()) {\n                    this.#dynamicListRef.tableTpl()?.isSelectorsColumnShown.set(true);\n\n                    this.#dynamicListRef.tableTpl()!.onToggleEntity = (entity: ENTITY_TYPE, checked: boolean): void =>\n                        this.toggleEntity(entity, checked);\n\n                    this.#dynamicListRef.tableTpl()!.onTogglePageEntities = (checked: boolean): void => this.togglePageEntities(checked);\n                }\n            },\n            { injector: this.#injector }\n        );\n        effect(\n            () => {\n                /** Set 'isSelectorsColumnDisabled' indicator state in TableComponent  */\n                if (\n                    this.#dynamicListRef?.tableTpl() &&\n                    this.#dynamicListRef?.tableTpl()?.isSelectorsColumnDisabled() !== this.isSelectorsColumnDisabled()\n                ) {\n                    this.#dynamicListRef?.tableTpl()?.isSelectorsColumnDisabled.set(this.isSelectorsColumnDisabled());\n                }\n            },\n            { injector: this.#injector }\n        );\n    }\n\n    /** Change selected entities list and 'isAllEntitiesSelected' indicator state */\n    public toggleAllEntities(checked: boolean): void {\n        this.#isAllEntitiesSelected.set(checked);\n\n        if (this.isMultiSelectExtendedMod()) {\n            this.#isMultiSelectExtendedModEnabled.set(checked);\n        }\n\n        if (checked) {\n            this.#selectedEntities.set(this.entities());\n            this.#isPageEntitiesSelected.set(true);\n            this.#isPageEntitiesIndeterminate.set(true);\n        } else {\n            this.#selectedEntities.set([]);\n            this.#isPageEntitiesSelected.set(false);\n            this.#isPageEntitiesIndeterminate.set(false);\n        }\n    }\n\n    /** Change selected and excluded lists, set 'isPageEntitiesSelected' and 'isAllEntitiesSelected' indicators states */\n    public togglePageEntities(checked: boolean): void {\n        /** Set 'isPageEntitiesSelected' indicator state */\n        this.#isPageEntitiesSelected.set(checked);\n\n        if (checked) {\n            /** Add page entities to selected list */\n            this.#selectedEntities.update((selected: ENTITY_TYPE[]) => this.addPageEntitiesToListExcludeDuplicates(selected));\n\n            /** Remove page entities from excluded list */\n            if (this.isMultiSelectExtendedModEnabled()) {\n                this.#excludedEntities.update((selected: ENTITY_TYPE[]) => this.removePageEntitiesFromList(selected));\n\n                /** Set 'isAllEntitiesSelected' indicator state */\n                this.#isAllEntitiesSelected.set(!this.excludedEntities()?.length);\n            }\n        } else {\n            /** Remove page entities from selected list */\n            this.#selectedEntities.update((selected: ENTITY_TYPE[]) => this.removePageEntitiesFromList(selected));\n\n            /** Add page entities to excluded list */\n            if (this.isMultiSelectExtendedModEnabled()) {\n                this.#excludedEntities.update((selected: ENTITY_TYPE[]) => this.addPageEntitiesToListExcludeDuplicates(selected));\n            }\n            /** Set 'isAllEntitiesSelected' indicator state */\n            this.#isAllEntitiesSelected.set(false);\n        }\n\n        /** Set 'isPageEntitiesIndeterminate' indicator state */\n        this.#isPageEntitiesIndeterminate.set(this.isOneExistOnPage(this.selectedEntitiesIds()));\n    }\n\n    /** Change selected and excluded lists and set is existing selected and is all selected states */\n    public toggleEntity(entity: ENTITY_TYPE, checked: boolean): void {\n        /** Set one entity in selected list if not multi select mod */\n        if (!this.isMultiSelect()) {\n            this.#selectedEntities.set([entity]);\n            return;\n        }\n\n        const updatedSelectedList: ENTITY_TYPE[] = [];\n        const updatedExcludedList: ENTITY_TYPE[] = [];\n\n        /** Fill updatedSelectedList  */\n        this.selectedEntities().forEach((el: ENTITY_TYPE) => updatedSelectedList.push(el));\n\n        /** Fill updatedExcludedList  */\n        if (this.isMultiSelectExtendedModEnabled()) {\n            this.excludedEntities().forEach((el: ENTITY_TYPE) => updatedExcludedList.push(el));\n        }\n\n        if (checked) {\n            /** Add entity to selected list */\n            updatedSelectedList.push(entity);\n\n            /** Remove entity from excluded list */\n            if (this.isMultiSelectExtendedModEnabled()) {\n                const index: number = this.excludedEntitiesIds().indexOf(entity[this.keyExp()]);\n                updatedExcludedList.splice(index, 1);\n            }\n        } else {\n            /** Remove entity from selected list */\n            const index: number = this.selectedEntitiesIds().indexOf(entity[this.keyExp()]);\n            updatedSelectedList.splice(index, 1);\n\n            /** Add entity to excluded list */\n            if (this.isMultiSelectExtendedModEnabled()) {\n                updatedExcludedList.push(entity);\n            }\n\n            /** Set 'isAllEntitiesSelected' indicator state */\n            this.#isAllEntitiesSelected.set(false);\n        }\n\n        /** Change selected list  */\n        this.#selectedEntities.set(updatedSelectedList);\n\n        /** Change excluded list  */\n        if (this.isMultiSelectExtendedModEnabled()) {\n            this.#excludedEntities.set(updatedExcludedList);\n\n            /** Set 'isAllEntitiesSelected' indicator state */\n            this.#isAllEntitiesSelected.set(!this.excludedEntities()?.length);\n        }\n\n        /** Set 'isPageEntitiesSelected' and 'isPageEntitiesIndeterminate' indicators states */\n        if (updatedSelectedList?.length) {\n            this.#isPageEntitiesSelected.set(this.isAllExistOnPage(this.selectedEntitiesIds()));\n            this.#isPageEntitiesIndeterminate.set(true);\n        } else {\n            this.#isPageEntitiesSelected.set(false);\n            this.#isPageEntitiesIndeterminate.set(this.isOneExistOnPage(this.selectedEntitiesIds()));\n        }\n    }\n\n    /** Clear selected list */\n    public clearSelectedList(): void {\n        this.#selectedEntities.set([]);\n        this.#isPageEntitiesSelected.set(false);\n        this.#isPageEntitiesIndeterminate.set(false);\n        this.#isAllEntitiesSelected.set(false);\n    }\n\n    /** Clear excluded list */\n    public clearExcludedList(): void {\n        this.#excludedEntities.set([]);\n    }\n\n    /** Set is existing selected and indeterminate state */\n    public setExistingEntitiesState(): void {\n        this.#isPageEntitiesSelected.set(this.isAllExistOnPage(this.selectedEntitiesIds()));\n        this.#isPageEntitiesIndeterminate.set(this.isOneExistOnPage(this.selectedEntitiesIds()));\n    }\n}\n","import { computed, DestroyRef, Directive, effect, inject, Injector, OnInit, Signal, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, switchMap, take } from 'rxjs/operators';\n\nimport { RtuiTableComponent } from '../components';\nimport { RtCommonSelectorsDirective } from './common-selectors.directive';\n\n@Directive({\n    selector: 'rtui-table[rtTableSelectorsDirective]',\n})\nexport class RtTableSelectorsDirective<\n    ENTITY_TYPE extends Record<string, unknown>,\n    SORT_PROPERTY extends Extract<keyof ENTITY_TYPE, string>,\n    KEY extends Extract<keyof ENTITY_TYPE, string>,\n>\n    extends RtCommonSelectorsDirective<ENTITY_TYPE, KEY>\n    implements OnInit\n{\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #injector: Injector = inject(Injector);\n    readonly #tableRef: RtuiTableComponent<ENTITY_TYPE, SORT_PROPERTY, KEY> =\n        inject<RtuiTableComponent<ENTITY_TYPE, SORT_PROPERTY, KEY>>(RtuiTableComponent);\n\n    /** List of selected entities for processing */\n    #selectedEntities: WritableSignal<ENTITY_TYPE[]> = signal([]);\n    /** List of excluded entities for processing */\n    /** Indicates is all page entities checkbox selected  for processing */\n    #isPageEntitiesSelected: WritableSignal<boolean> = signal(false);\n    /** Indicates is page entities checkbox indeterminate  for processing */\n    #isPageEntitiesIndeterminate: WritableSignal<boolean> = signal(false);\n\n    /** List of selected entities */\n    public readonly selectedEntities: Signal<ENTITY_TYPE[]> = this.#selectedEntities.asReadonly();\n    /** List of selected entities ids */\n    public readonly selectedEntitiesIds: Signal<ENTITY_TYPE[KEY][]> = computed(() => {\n        return this.selectedEntities().map((el: ENTITY_TYPE) => el[this.keyExp()]);\n    });\n    /** Indicates is all page entities checkbox selected */\n    public readonly isPageEntitiesSelected: Signal<boolean> = this.#isPageEntitiesSelected.asReadonly();\n    /** Indicates is page entities checkbox indeterminate */\n    public readonly isPageEntitiesIndeterminate: Signal<boolean> = this.#isPageEntitiesIndeterminate.asReadonly();\n\n    public ngOnInit(): void {\n        /** Set current key */\n        this.keyExp.set(this.#tableRef.keyExp());\n\n        /** Set current, selected and excluded entities lists and update selectors states */\n        toObservable(this.#tableRef?.entities, { injector: this.#injector })\n            .pipe(takeUntilDestroyed(this.#destroyRef))\n            .subscribe((list: ENTITY_TYPE[]) => {\n                this.entities.set(list);\n            });\n\n        /** Set initial selected entities */\n        toObservable(this.entities, { injector: this.#injector })\n            .pipe(\n                filter((list: ENTITY_TYPE[]) => !!list?.length),\n                take(1),\n                switchMap(() =>\n                    toObservable(this.selectedEntitiesKeys, { injector: this.#injector }).pipe(\n                        filter((list: ENTITY_TYPE[KEY][]) => !!list?.length),\n                        take(1)\n                    )\n                ),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe(() => {\n                this.#selectedEntities.set(\n                    this.entities().filter((el: ENTITY_TYPE) => this.selectedEntitiesKeys().includes(el[this.keyExp()]))\n                );\n                this.setExistingEntitiesState();\n            });\n\n        /** Update selectors states and list of selected entities ids in children components */\n        effect(\n            () => {\n                if (this.#tableRef && this.selectedEntities()) {\n                    this.#tableRef?.selectedEntitiesIds.set(this.selectedEntitiesIds());\n                    this.#tableRef?.isPageEntitiesSelected.set(this.isPageEntitiesSelected());\n                    this.#tableRef?.isPageEntitiesIndeterminate.set(this.isPageEntitiesIndeterminate());\n                }\n            },\n            { injector: this.#injector }\n        );\n\n        /** Table config */\n        effect(\n            () => {\n                /** Set 'isMultiSelect' indicator state in TableComponent  */\n                if (this.#tableRef?.isMultiSelect() !== this.isMultiSelect()) {\n                    this.#tableRef?.isMultiSelect.set(this.isMultiSelect());\n                }\n            },\n            { injector: this.#injector }\n        );\n        effect(\n            () => {\n                /** Set 'onToggleExistingEntities' and 'onToggleEntity' methods and 'isSelectorsColumnShown' indicator state in TableComponent  */\n                if (this.#tableRef) {\n                    this.#tableRef?.isSelectorsColumnShown.set(this.isSelectorColumnShown());\n                    this.#tableRef.onToggleEntity = (entity: ENTITY_TYPE, checked: boolean): void => this.toggleEntity(entity, checked);\n                    this.#tableRef.onTogglePageEntities = (checked: boolean): void => this.togglePageEntities(checked);\n                }\n            },\n            { injector: this.#injector }\n        );\n        effect(\n            () => {\n                /** Set 'isSelectorsColumnDisabled' indicator state in TableComponent  */\n                if (this.#tableRef?.isSelectorsColumnDisabled() !== this.isSelectorsColumnDisabled()) {\n                    this.#tableRef?.isSelectorsColumnDisabled.set(this.isSelectorsColumnDisabled());\n                }\n            },\n            { injector: this.#injector }\n        );\n    }\n\n    /** Change selected and excluded lists, set 'isPageEntitiesSelected' and 'isAllEntitiesSelected' indicators states */\n    public togglePageEntities(checked: boolean): void {\n        /** Set 'isPageEntitiesSelected' indicator state */\n        this.#isPageEntitiesSelected.set(checked);\n\n        if (checked) {\n            /** Add page entities to selected list */\n            this.#selectedEntities.update((selected: ENTITY_TYPE[]) => this.addPageEntitiesToListExcludeDuplicates(selected));\n        } else {\n            /** Remove page entities from selected list */\n            this.#selectedEntities.update((selected: ENTITY_TYPE[]) => this.removePageEntitiesFromList(selected));\n        }\n\n        /** Set 'isPageEntitiesIndeterminate' indicator state */\n        this.#isPageEntitiesIndeterminate.set(this.isOneExistOnPage(this.selectedEntitiesIds()));\n    }\n\n    /** Change selected and excluded lists and set is existing selected and is all selected states */\n    public toggleEntity(entity: ENTITY_TYPE, checked: boolean): void {\n        /** Set one entity in selected list if not multi select mod */\n        if (!this.isMultiSelect()) {\n            this.#selectedEntities.set([entity]);\n            return;\n        }\n\n        const updatedSelectedList: ENTITY_TYPE[] = [];\n\n        /** Fill updatedSelectedList  */\n        this.selectedEntities().forEach((el: ENTITY_TYPE) => updatedSelectedList.push(el));\n\n        if (checked) {\n            /** Add entity to selected list */\n            updatedSelectedList.push(entity);\n        } else {\n            /** Remove entity from selected list */\n            const index: number = this.selectedEntitiesIds().indexOf(entity[this.keyExp()]);\n            updatedSelectedList.splice(index, 1);\n        }\n\n        /** Change selected list  */\n        this.#selectedEntities.set(updatedSelectedList);\n\n        /** Set 'isPageEntitiesSelected' and 'isPageEntitiesIndeterminate' indicators states */\n        if (updatedSelectedList?.length) {\n            this.#isPageEntitiesSelected.set(this.isAllExistOnPage(this.selectedEntitiesIds()));\n            this.#isPageEntitiesIndeterminate.set(true);\n        } else {\n            this.#isPageEntitiesSelected.set(false);\n            this.#isPageEntitiesIndeterminate.set(this.isOneExistOnPage(this.selectedEntitiesIds()));\n        }\n    }\n\n    /** Clear selected list */\n    public clearSelectedList(): void {\n        this.#selectedEntities.set([]);\n        this.#isPageEntitiesSelected.set(false);\n        this.#isPageEntitiesIndeterminate.set(false);\n    }\n\n    /** Set is existing selected and indeterminate state */\n    public setExistingEntitiesState(): void {\n        this.#isPageEntitiesSelected.set(this.isAllExistOnPage(this.selectedEntitiesIds()));\n        this.#isPageEntitiesIndeterminate.set(this.isOneExistOnPage(this.selectedEntitiesIds()));\n    }\n}\n","// const\nexport * from './table-stop-row-click-attribute.const';\n\n// enums\nexport * from './list-sort-order.enum';\n\n// models\nexport * from './default-pagination';\nexport * from './lists.interface';\nexport * from './table-column.interface';\nexport * from './table-component.interface';\n\n// services\nexport * from './table-config.service';\n\n// directives\nexport * from './dynamic-list-selectors.directive';\nexport * from './table-selectors.directive';\n","import { Clipboard } from '@angular/cdk/clipboard';\n\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    HostBinding,\n    HostListener,\n    inject,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    Signal,\n    signal,\n    WritableSignal,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '../../../../bem';\nimport { EmptyToDashPipe, isNumber, isString, Nullable, RtHideTooltipDirective, RtIconOutlinedDirective } from '../../../../util';\nimport { ITable } from '../../util/table-column.interface';\n\n@Component({\n    selector: 'rtui-table-base-cell',\n    templateUrl: './table-base-cell.component.html',\n    styleUrls: ['./table-base-cell.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        // material\n        MatIcon,\n        MatTooltip,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        ModDirective,\n        RtIconOutlinedDirective,\n        RtHideTooltipDirective,\n\n        // pipes\n        EmptyToDashPipe,\n    ],\n})\nexport class TableBaseCellComponent<T = { [key: string]: unknown }> {\n    readonly #clipboard: Clipboard = inject(Clipboard);\n    readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n    protected readonly cellValue: Signal<T[keyof T] | string | number> = computed(() => {\n        const transformFn: Nullable<(value: T[keyof T]) => string | number> = this.column()?.transform;\n        return transformFn ? transformFn(this.row()[this.column().propName]) : this.row()[this.column().propName];\n    });\n    protected readonly cellIconStyle: Signal<SafeStyle | undefined> = computed(() => {\n        const transformFn: ((value: T[keyof T]) => string) | undefined = this.column()?.iconTransform;\n        return transformFn ? this.#sanitizer.bypassSecurityTrustStyle(transformFn(this.row()[this.column().propName])) : undefined;\n    });\n    protected readonly tooltipValue: Signal<string> = computed(() => this.#covertCellValueToString(this.cellValue()));\n    protected readonly isMouseOver: WritableSignal<boolean> = signal(false);\n    protected readonly isCopied: WritableSignal<boolean> = signal(false);\n\n    public row: InputSignal<T> = input.required();\n    public column: InputSignal<ITable.Column<T>> = input.required();\n    public isMobile: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n\n    @HostBinding('style')\n    public get style(): SafeStyle | undefined {\n        let style: string = '';\n\n        if (this.column().width !== undefined) {\n            style += `width: ${this.column().width};`;\n        }\n\n        if (this.column().minWidth !== undefined) {\n            style += `min-width: ${this.column().minWidth};`;\n        }\n\n        return !!style.length ? this.#sanitizer.bypassSecurityTrustStyle(style) : undefined;\n    }\n\n    public get copyBtnPosition(): string {\n        const { copyBtnAlign, align } = this.column();\n        return copyBtnAlign || (align === 'right' ? 'left' : 'right');\n    }\n\n    @HostListener('mouseover')\n    public onMouseOver(): void {\n        this.isMouseOver.set(true);\n    }\n\n    @HostListener('mouseout')\n    public onMouseOut(): void {\n        this.isMouseOver.set(false);\n    }\n\n    public onCopyToClipboard(): void {\n        if (this.column().copyable) {\n            this.#clipboard.copy(this.#covertCellValueToString(this.cellValue()));\n            this.isCopied.set(true);\n            setTimeout(() => this.isCopied.set(false), 2000);\n        }\n    }\n\n    #covertCellValueToString(value: T[keyof T] | string | number): string {\n        if (isString(value)) {\n            return value;\n        } else if (isNumber(value)) {\n            return value.toString();\n        } else {\n            return JSON.stringify(value);\n        }\n    }\n}\n","<ng-container rtBlock=\"base-cell\">\n    @if (column()?.icon?.placement === 'left') {\n        <mat-icon rtElem=\"prefix\" [rtIconOutlined]=\"!!column().icon?.outlined\" [style]=\"cellIconStyle()\">\n            {{ column().icon?.glyph }}\n        </mat-icon>\n    }\n\n    <!-- class=\"base-cell base-cell__title base-cell__title--visible\" -->\n    <div rtElem=\"title\" [rtMod]=\"{ align: column().align }\">\n        <div\n            #titleTpl\n            rtElem=\"title-text\"\n            matTooltipClass=\"custom-tooltip\"\n            matTooltipPosition=\"above\"\n            [rtHideTooltipDirective]=\"titleTpl\"\n            [isTooltipShown]=\"!isMobile()\"\n            [matTooltip]=\"column()?.tooltip ?? tooltipValue()\"\n            [matTooltipDisabled]=\"isMobile()\">\n            {{ cellValue() | emptyToDash }}\n        </div>\n    </div>\n\n    @if (column()?.icon?.placement === 'right') {\n        <mat-icon rtElem=\"suffix\" [rtIconOutlined]=\"!!column().icon?.outlined\" [style]=\"cellIconStyle()\">\n            {{ column().icon?.glyph }}\n        </mat-icon>\n    }\n\n    @if (column()?.copyable) {\n        <button\n            type=\"button\"\n            rtBlock=\"base-cell\"\n            rtElem=\"copy-button\"\n            class=\"c-button c-button--txt-base\"\n            matTooltipPosition=\"above\"\n            [rtMod]=\"{\n                position: copyBtnPosition,\n                complete: isCopied(),\n                visible: isMobile() || isMouseOver(),\n            }\"\n            [matTooltip]=\"isCopied() ? 'Copied!' : 'Copy'\"\n            [matTooltipDisabled]=\"isMobile()\"\n            (mousedown)=\"onCopyToClipboard(); $event.stopPropagation()\">\n            <mat-icon rtElem=\"copy-icon\" [rtIconOutlined]=\"true\">{{ isCopied() ? 'done' : 'content_copy' }}</mat-icon>\n        </button>\n    }\n</ng-container>\n","import { NgClass } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    HostBinding,\n    HostListener,\n    inject,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    numberAttribute,\n    output,\n    OutputEmitterRef,\n    Signal,\n} from '@angular/core';\nimport { MatIconButton, MatMiniFabButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '../../../../bem';\nimport { Nullable, RtIconOutlinedDirective } from '../../../../util';\nimport { LIST_SORT_ORDER_ENUM, ListSortOrderType } from '../../util/list-sort-order.enum';\nimport { SortModel } from '../../util/lists.interface';\nimport { ITable } from '../../util/table-column.interface';\n\n@Component({\n    selector: 'rtui-table-header-cell',\n    templateUrl: './table-header-cell.component.html',\n    styleUrls: ['./table-header-cell.component.scss'],\n    imports: [\n        NgClass,\n\n        // Material\n        MatIcon,\n        MatIconButton,\n        MatTooltip,\n        MatMiniFabButton,\n\n        // Bem\n        BlockDirective,\n        ElemDirective,\n        ModDirective,\n\n        // Directives\n        RtIconOutlinedDirective,\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiTableHeaderCellComponent {\n    readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n    protected readonly sortOrderTypes: typeof LIST_SORT_ORDER_ENUM = LIST_SORT_ORDER_ENUM;\n\n    public headerModel: InputSignal<ITable.Header> = input.required<ITable.Header>();\n    public sortModel: InputSignal<Nullable<SortModel<string>>> = input.required<Nullable<SortModel<string>>>();\n    public currentSortModel: InputSignal<Nullable<SortModel<string>>> = input.required<Nullable<SortModel<string>>>();\n    public headerDataEllipsisMaxLines: InputSignalWithTransform<number, number> = input<number, number>(1, {\n        transform: numberAttribute,\n    });\n\n    public readonly sortChange: OutputEmitterRef<SortModel<string>> = output<SortModel<string>>();\n\n    public readonly active: Signal<boolean> = computed(() => {\n        return (\n            !!this.currentSortModel()?.propertyName &&\n            !!this.sortModel()?.propertyName &&\n            this.currentSortModel()?.propertyName === this.sortModel()?.propertyName\n        );\n    });\n\n    @HostBinding('style')\n    protected get style(): SafeStyle {\n        return this.#sanitizer.bypassSecurityTrustStyle(`text-align: ${this.headerModel().align};`);\n    }\n\n    @HostListener('click')\n    protected handleClick(): void {\n        const sortPropertyName: Nullable<string> = this.sortModel()?.propertyName;\n\n        if (sortPropertyName) {\n            this.sortChange.emit({\n                propertyName: sortPropertyName,\n                sortDirection: this.getNextSortOrder(),\n            });\n        }\n    }\n\n    private getNextSortOrder(): ListSortOrderType {\n        if (this.currentSortModel()?.sortDirection?.toLowerCase() === LIST_SORT_ORDER_ENUM.ASC) {\n            return LIST_SORT_ORDER_ENUM.DESC;\n        }\n\n        return LIST_SORT_ORDER_ENUM.ASC;\n    }\n}\n","<div rtBlock=\"header-cell-label\" [rtMod]=\"{ align: headerModel().align }\">\n    @if (headerModel()?.icon?.placement === 'left') {\n        <mat-icon rtElem=\"prefix\" [rtIconOutlined]=\"!!headerModel().icon?.outlined\" [style.color]=\"headerModel().icon?.color\">\n            {{ headerModel().icon?.glyph }}\n        </mat-icon>\n    }\n\n    <div rtElem=\"text\" [matTooltip]=\"headerModel()?.tooltip ?? ''\" [ngClass]=\"headerModel()?.className\">\n        {{ headerModel().label }}\n    </div>\n\n    @if (headerModel()?.icon?.placement === 'right') {\n        <mat-icon rtElem=\"suffix\" [rtIconOutlined]=\"!!headerModel().icon?.outlined\" [style.color]=\"headerModel().icon?.color\">\n            {{ headerModel().icon?.glyph }}\n        </mat-icon>\n    }\n</div>\n\n@if (sortModel()) {\n    <div rtBlock=\"header-cell-icons\" [rtMod]=\"{ active: active() }\">\n        <div\n            rtElem=\"icon\"\n            [rtMod]=\"{\n                active: active() && currentSortModel()?.sortDirection?.toLowerCase() === sortOrderTypes.DESC,\n                first: true,\n            }\"></div>\n\n        <div\n            rtElem=\"icon\"\n            [rtMod]=\"{\n                active: active() && currentSortModel()?.sortDirection?.toLowerCase() === sortOrderTypes.ASC,\n                second: true,\n            }\"></div>\n    </div>\n}\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    DestroyRef,\n    inject,\n    Injector,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    OnInit,\n    output,\n    OutputEmitterRef,\n    signal,\n    WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerModule, MatDatepickerToggle } from '@angular/material/datepicker';\n\nimport { RtIconOutlinedDirective, transformArrayInput, isString } from '../../../../util';\nimport { FILTER_OPERATOR_TYPE_ENUM, FILTER_OPERATORS, FilterModel, FilterOperatorType } from '../../util/lists.interface';\nimport { ITable, TABLE_COLUMN_FILTER_TYPES_ENUM } from '../../util/table-column.interface';\nimport { MatFormField, MatFormFieldAppearance, MatSuffix } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatOption, provideNativeDateAdapter } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { TitleCasePipe } from '@angular/common';\nimport { isDate } from '../../../../util';\nimport { RtuiClearButtonComponent } from '../clear-search-button/rtui-clear-button.component';\nimport { BlockDirective } from '../../../../bem';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n@Component({\n    selector: 'rtui-table-header-filter-cell',\n    templateUrl: './table-header-filter-cell.component.html',\n    styleUrls: ['./table-header-filter-cell.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [provideNativeDateAdapter()],\n    imports: [\n        FormsModule,\n\n        // Material\n        MatIcon,\n        MatIconButton,\n        MatSuffix,\n        MatDatepickerModule,\n        MatFormField,\n        MatInput,\n        MatMenu,\n        MatMenuTrigger,\n        MatMenuItem,\n        MatDatepickerToggle,\n        MatDatepicker,\n        MatDatepickerInput,\n        MatSelect,\n        MatOption,\n        MatTooltip,\n\n        // Pipes\n        TitleCasePipe,\n\n        // Directives\n        RtIconOutlinedDirective,\n        BlockDirective,\n\n        // Components\n        RtuiClearButtonComponent,\n    ],\n})\nexport class RtuiTableHeaderFilterCellComponent<\n    ENTITY_TYPE extends Record<string, unknown>,\n    KEY extends Extract<keyof ENTITY_TYPE, string>,\n> implements OnInit {\n    readonly #injector: Injector = inject(Injector);\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n    protected readonly filterTypes: typeof TABLE_COLUMN_FILTER_TYPES_ENUM = TABLE_COLUMN_FILTER_TYPES_ENUM;\n    protected readonly filterOperatorTypes: typeof FILTER_OPERATOR_TYPE_ENUM = FILTER_OPERATOR_TYPE_ENUM;\n\n    /** Current elements appearance */\n    public appearance: InputSignal<MatFormFieldAppearance> = input.required();\n    /** Filter property */\n    public filterProperty: InputSignalWithTransform<KEY, unknown> = input.required<KEY, unknown>({\n        transform: (value: unknown): KEY => (isString(value) ? value : value?.toString) as KEY,\n    });\n    /** Filter cell type */\n    public filterType: InputSignal<ITable.FilterType> = input.required();\n    /** Current filter model from store */\n    public filterModel: InputSignalWithTransform<FilterModel<KEY>[], FilterModel<KEY>[]> = input.required<\n        FilterModel<KEY>[],\n        FilterModel<KEY>[]\n    >({\n        transform: (value: FilterModel<KEY>[]) => transformArrayInput(value),\n    });\n    /** Filter property */\n    public defaultFilterOperator: InputSignalWithTransform<FilterOperatorType, FilterOperatorType> = input.required<\n        FilterOperatorType,\n        FilterOperatorType\n    >({\n        transform: (value: FilterOperatorType): FilterOperatorType =>\n            value && FILTER_OPERATORS.includes(value) ? value : FILTER_OPERATOR_TYPE_ENUM.EQUALS,\n    });\n    /** Available filter operators */\n    public filterOperators: InputSignalWithTransform<FilterOperatorType[], FilterOperatorType[]> = input<\n        FilterOperatorType[],\n        FilterOperatorType[]\n    >([], {\n        transform: (value: FilterOperatorType[]) => transformArrayInput(value),\n    });\n    /** List of selected filter models */\n    public filterSelectOptions: InputSignalWithTransform<string[], string[]> = input<string[], string[]>([], {\n        transform: (value: string[]) => transformArrayInput(value),\n    });\n    /** Indicates is mobile view */\n    public isMobile: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n\n    /** Filter change output action */\n    public readonly filterChange: OutputEmitterRef<FilterModel<KEY>[]> = output<FilterModel<KEY>[]>();\n\n    public readonly currentFilter: WritableSignal<FilterModel<KEY>> = signal({\n        propertyName: '' as KEY,\n        operatorType: FILTER_OPERATOR_TYPE_ENUM.EQUALS,\n        value: '',\n    });\n\n    public ngOnInit(): void {\n        toObservable(this.filterModel, { injector: this.#injector })\n            .pipe(takeUntilDestroyed(this.#destroyRef))\n            .subscribe((filterModel: FilterModel<KEY>[]) => {\n                this.currentFilter.set(\n                    filterModel?.length && filterModel.find((el: FilterModel<KEY>) => el.propertyName === this.filterProperty())\n                        ? (filterModel.find((el: FilterModel<KEY>) => el.propertyName === this.filterProperty()) as FilterModel<KEY>)\n                        : {\n                              operatorType: this.defaultFilterOperator(),\n                              propertyName: this.filterProperty(),\n                              value: '',\n                          }\n                );\n            });\n    }\n\n    /** Change filter value */\n    public onFilterValueChange(value: number | string | Date): void {\n        if (value === this.currentFilter().value) {\n            return;\n        }\n\n        let updatedFilterModel: FilterModel<KEY>[] = this.filterModel();\n\n        if (updatedFilterModel.find((el: FilterModel<KEY>) => el.propertyName === this.filterProperty())) {\n            if (value) {\n                updatedFilterModel = updatedFilterModel.map((el: FilterModel<KEY>) =>\n                    el.propertyName === this.filterProperty()\n                        ? {\n                              ...el,\n                              value: isDate(value) ? value.toISOString() : value,\n                          }\n                        : el\n                );\n            } else {\n                updatedFilterModel = updatedFilterModel.filter((el: FilterModel<KEY>) => el.propertyName !== this.filterProperty());\n            }\n            this.filterChange.emit(updatedFilterModel);\n        } else if (value) {\n            updatedFilterModel.push({\n                propertyName: this.filterProperty(),\n                operatorType: this.currentFilter().operatorType,\n                value: isDate(value) ? value.toISOString() : value,\n            });\n            this.filterChange.emit(updatedFilterModel);\n        }\n\n        this.currentFilter.update((filter: FilterModel<KEY>) => ({\n            ...filter,\n            value: isDate(value) ? value.toISOString() : value,\n        }));\n    }\n\n    /** Change filter operator */\n    public onFilterOperatorChange(operatorType: FilterOperatorType): void {\n        if (operatorType === this.currentFilter().operatorType) {\n            return;\n        }\n\n        let updatedFilterModel: FilterModel<KEY>[] = this.filterModel();\n\n        if (updatedFilterModel.find((el: FilterModel<KEY>) => el.propertyName === this.filterProperty())) {\n            updatedFilterModel = updatedFilterModel.map((el: FilterModel<KEY>) =>\n                el.propertyName === this.filterProperty()\n                    ? {\n                          ...el,\n                          operatorType,\n                      }\n                    : el\n            );\n            this.filterChange.emit(updatedFilterModel);\n        } else if (this.currentFilter().value) {\n            updatedFilterModel.push({\n                propertyName: this.filterProperty(),\n                operatorType: operatorType,\n                value: this.currentFilter().value,\n            });\n            this.filterChange.emit(updatedFilterModel);\n        }\n\n        this.currentFilter.update((filter: FilterModel<KEY>) => ({ ...filter, operatorType }));\n    }\n}\n","@if (filterOperators()?.length) {\n    <button\n        aria-label=\"Icon-button for a context menu\"\n        mat-icon-button\n        matTooltipPosition=\"left\"\n        [matTooltip]=\"currentFilter().operatorType | titlecase\"\n        [matTooltipDisabled]=\"isMobile()\"\n        [matMenuTriggerFor]=\"menuTpl\"\n        (click)=\"$event.stopPropagation()\"\n        (mousedown)=\"$event.stopPropagation()\">\n        <mat-icon [rtIconOutlined]=\"true\">\n            @switch (currentFilter().operatorType) {\n                @case (filterOperatorTypes.EQUALS) {\n                    drag_handle\n                }\n                @case (filterOperatorTypes.NOT_EQUALS) {\n                    block\n                }\n                @case (filterOperatorTypes.CONTAINS) {\n                    more_horiz\n                }\n                @case (filterOperatorTypes.GREATER_THAN) {\n                    chevron_right\n                }\n                @case (filterOperatorTypes.LESS_THAN) {\n                    chevron_left\n                }\n            }\n        </mat-icon>\n    </button>\n\n    <mat-menu #menuTpl=\"matMenu\" xPosition=\"before\">\n        @if (filterOperators().includes(filterOperatorTypes.EQUALS) && currentFilter()?.operatorType !== filterOperatorTypes.EQUALS) {\n            <div mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.EQUALS)\">\n                <mat-icon class=\"material-icons-outlined\" rtIconOutlined>drag_handle</mat-icon>\n                <span>Equal</span>\n            </div>\n        }\n        @if (\n            filterOperators().includes(filterOperatorTypes.NOT_EQUALS) && currentFilter()?.operatorType !== filterOperatorTypes.NOT_EQUALS\n        ) {\n            <div mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.NOT_EQUALS)\">\n                <mat-icon [rtIconOutlined]=\"true\">block</mat-icon>\n                <span>Not equal</span>\n            </div>\n        }\n        @if (filterOperators().includes(filterOperatorTypes.CONTAINS) && currentFilter()?.operatorType !== filterOperatorTypes.CONTAINS) {\n            <div mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.CONTAINS)\">\n                <mat-icon [rtIconOutlined]=\"true\">more_horiz</mat-icon>\n                <span>Contains</span>\n            </div>\n        }\n        @if (\n            filterOperators().includes(filterOperatorTypes.GREATER_THAN) &&\n            currentFilter()?.operatorType !== filterOperatorTypes.GREATER_THAN\n        ) {\n            <div mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.GREATER_THAN)\">\n                <mat-icon [rtIconOutlined]=\"true\">chevron_right</mat-icon>\n                <span>More than</span>\n            </div>\n        }\n        @if (filterOperators().includes(filterOperatorTypes.LESS_THAN) && currentFilter()?.operatorType !== filterOperatorTypes.LESS_THAN) {\n            <div mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.LESS_THAN)\">\n                <mat-icon [rtIconOutlined]=\"true\">chevron_left</mat-icon>\n                <span>Less than</span>\n            </div>\n        }\n    </mat-menu>\n}\n\n@switch (filterType()) {\n    @case (filterTypes.TEXT) {\n        <mat-form-field rtBlock=\"table-header-cell-filter-input\" subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n            <input\n                #input\n                matInput\n                type=\"text\"\n                placeholder=\"Type in filter value\"\n                [value]=\"currentFilter().value\"\n                (keydown.enter)=\"onFilterValueChange(input.value)\"\n                (focusout)=\"onFilterValueChange(input.value)\" />\n\n            <rtui-clear-button matSuffix [isButtonShown]=\"!!currentFilter().value\" (clickAction)=\"onFilterValueChange('')\" />\n        </mat-form-field>\n    }\n    @case (filterTypes.NUMBER) {\n        <mat-form-field rtBlock=\"table-header-cell-filter-input\" subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n            <input\n                #input\n                matInput\n                type=\"number\"\n                placeholder=\"Type in filter value\"\n                [value]=\"currentFilter().value\"\n                (keydown.enter)=\"onFilterValueChange(input.value)\"\n                (focusout)=\"onFilterValueChange(input.value)\" />\n\n            <rtui-clear-button matSuffix [isButtonShown]=\"!!currentFilter().value\" (clickAction)=\"onFilterValueChange('')\" />\n        </mat-form-field>\n    }\n    @case (filterTypes.DATE) {\n        <button\n            aria-label=\"Icon-button for clear filter\"\n            mat-icon-button\n            matTooltipPosition=\"left\"\n            matTooltip=\"Clear filter\"\n            [matTooltipDisabled]=\"isMobile()\"\n            [disabled]=\"!currentFilter().value\"\n            (click)=\"onFilterValueChange('')\">\n            <mat-icon [rtIconOutlined]=\"true\">close</mat-icon>\n        </button>\n\n        <mat-form-field rtBlock=\"table-header-cell-filter-input\" subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n            <input\n                matInput\n                placeholder=\"1/1/2025\"\n                [matDatepicker]=\"picker\"\n                [ngModel]=\"currentFilter().value\"\n                (ngModelChange)=\"onFilterValueChange($event)\" />\n            <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n            <mat-datepicker #picker></mat-datepicker>\n        </mat-form-field>\n    }\n    @case (filterTypes.SELECT) {\n        <button\n            aria-label=\"Icon-button for clear filter\"\n            mat-icon-button\n            matTooltipPosition=\"left\"\n            matTooltip=\"Clear filter\"\n            [matTooltipDisabled]=\"isMobile()\"\n            [disabled]=\"!currentFilter().value\"\n            (click)=\"onFilterValueChange('')\">\n            <mat-icon [rtIconOutlined]=\"true\">close</mat-icon>\n        </button>\n\n        <mat-form-field rtBlock=\"table-header-cell-filter-input\" subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n            <mat-select placeholder=\"Chose filter\" [value]=\"currentFilter().value\" (selectionChange)=\"onFilterValueChange($event.value)\">\n                @for (item of filterSelectOptions(); track item) {\n                    <mat-option [value]=\"item\">{{ item | titlecase }}</mat-option>\n                } @empty {\n                    <mat-option [value]=\"null\">No options available</mat-option>\n                }\n            </mat-select>\n        </mat-form-field>\n    }\n}\n","import { Directive, ElementRef, inject, OnInit } from '@angular/core';\n\nimport { RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE } from '../util';\nimport { PlatformService } from '../../../util';\n\n@Directive({\n    standalone: true,\n    selector: '[rtStopTableRowClick]',\n})\nexport class RtuiStopTableRowClickDirective implements OnInit {\n    readonly #platformService: PlatformService = inject(PlatformService);\n    readonly #elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\n\n    public ngOnInit(): void {\n        if (this.#platformService.isPlatformBrowser) {\n            this.#elementRef.nativeElement.setAttribute(RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE, '');\n        }\n    }\n}\n","import { Directive, inject, input, InputSignal, InputSignalWithTransform, HostListener, booleanAttribute } from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nimport { IRtuiTable, RTUI_TABLE_COMPONENT_TOKEN, RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE } from '../util';\n\n@Directive({\n    selector: '[rtuiTableRowClickDirective]',\n})\nexport class RtuiTableRowClickDirective<\n    ENTITY_TYPE extends Record<string, unknown>,\n    SORT_PROPERTY extends Extract<keyof ENTITY_TYPE, string>,\n    KEY extends Extract<keyof ENTITY_TYPE, string>,\n> {\n    readonly #tableComponent: IRtuiTable<ENTITY_TYPE, SORT_PROPERTY, KEY> = inject(RTUI_TABLE_COMPONENT_TOKEN) as IRtuiTable<\n        ENTITY_TYPE,\n        SORT_PROPERTY,\n        KEY\n    >;\n\n    /** Row entity */\n    public readonly entity: InputSignal<ENTITY_TYPE> = input.required({\n        alias: 'rtuiTableRowClickDirective',\n    });\n\n    /** Enabled flag */\n    public isTableRowClickable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n\n    @HostListener('mousedown', ['$event'])\n    public onMouseDown(event: MouseEvent): void {\n        if (!this.isTableRowClickable() || (event.target as HTMLElement).closest(`[${RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE}]`)) {\n            event.stopPropagation();\n            return;\n        }\n        this.#tableComponent.onRowClick(this.entity(), event);\n    }\n\n    @HostListener('dblclick', ['$event'])\n    public onDoubleClick(event: MouseEvent): void {\n        if (!this.isTableRowClickable() || (event.target as HTMLElement).closest(`[${RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE}]`)) {\n            event.stopPropagation();\n            return;\n        }\n        this.#tableComponent.onRowDoubleClick(this.entity());\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewChecked,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    contentChild,\n    Directive,\n    ElementRef,\n    forwardRef,\n    inject,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n    Signal,\n    signal,\n    TemplateRef,\n    viewChild,\n    WritableSignal,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { MatRadioButton } from '@angular/material/radio';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { Nullable, RtIconOutlinedDirective, transformArrayInput } from '../../../../util';\nimport {\n    FILTER_OPERATOR_TYPE_ENUM,\n    FilterModel,\n    IRtuiTable,\n    ITable,\n    RTUI_TABLE_COMPONENT_TOKEN,\n    SortModel,\n    TABLE_COLUMN_TYPES_ENUM,\n} from '../../util';\nimport { RtTableConfigService } from '../../util/table-config.service';\nimport { TableBaseCellComponent } from '../table-base-cell/table-base-cell.component';\nimport { RtuiTableHeaderCellComponent } from '../table-header-cell/table-header-cell.component';\nimport { RtuiTableHeaderFilterCellComponent } from '../table-header-filter-cell/table-header-filter-cell.component';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { RtuiTableRowClickDirective } from '../../directives';\n\n/** Directive for custom table cells */\n@Directive({\n    selector: '[rtuiCustomTableCellsDirective]',\n})\nexport class RtuiCustomTableCellsDirective<ENTITY_TYPE> {\n    public cellsTemplates: InputSignal<{\n        [K in keyof ENTITY_TYPE]: TemplateRef<{ $implicit: ENTITY_TYPE }>;\n    }> = input.required({\n        alias: 'rtuiCustomTableCellsDirective',\n    });\n\n    public getTemplateByPropName(propName: keyof ENTITY_TYPE): TemplateRef<{ $implicit: ENTITY_TYPE }> {\n        return this.cellsTemplates()[propName];\n    }\n}\n\n/** Directive for row actions located inside a row menu button */\n@Directive({\n    selector: '[rtuiTabletRowActionsDirective]',\n})\nexport class RtuiTableRowActionsDirective {}\n\n/** Directive for row actions located outside a row menu button */\n@Directive({\n    selector: '[rtuiTableAdditionalRowActionsDirective]',\n})\nexport class RtuiTableAdditionalRowActionsDirective {}\n\n@Component({\n    selector: 'rtui-table',\n    templateUrl: './rtui-table.component.html',\n    styleUrls: ['./rtui-table.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n\n        // material\n        MatIconButton,\n        MatMenuTrigger,\n        MatIcon,\n        MatMenu,\n        MatCheckbox,\n        MatRadioButton,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        RtIconOutlinedDirective,\n        RtuiTableRowClickDirective,\n\n        // components\n        RtuiTableHeaderCellComponent,\n        TableBaseCellComponent,\n        RtuiTableHeaderFilterCellComponent,\n    ],\n    providers: [\n        {\n            provide: RTUI_TABLE_COMPONENT_TOKEN,\n            useExisting: forwardRef(() => RtuiTableComponent),\n        },\n    ],\n})\nexport class RtuiTableComponent<\n    ENTITY_TYPE extends Record<string, unknown>,\n    SORT_PROPERTY extends Extract<keyof ENTITY_TYPE, string>,\n    KEY extends Extract<keyof ENTITY_TYPE, string>,\n>\n    implements IRtuiTable<ENTITY_TYPE, SORT_PROPERTY, KEY>, AfterViewChecked\n{\n    protected readonly rowActions: Signal<Nullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('rowActions');\n    protected readonly rowActionsHeaderPaddingHelper: Signal<Nullable<ElementRef<HTMLElement>>> =\n        viewChild<ElementRef<HTMLElement>>('rowActionsHeaderPaddingHelper');\n    protected readonly rowActionsPaddingHelper: Signal<Nullable<ElementRef<HTMLElement>>> =\n        viewChild<ElementRef<HTMLElement>>('rowActionsRowPaddingHelper');\n\n    readonly #tableConfigService: RtTableConfigService<ENTITY_TYPE> = inject(RtTableConfigService);\n\n    protected readonly columnTypes: typeof TABLE_COLUMN_TYPES_ENUM = TABLE_COLUMN_TYPES_ENUM;\n    protected readonly filterOperators: typeof FILTER_OPERATOR_TYPE_ENUM = FILTER_OPERATOR_TYPE_ENUM;\n\n    /** Indicates is mobile view */\n    public isMobile: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates are table rows clickable */\n    public isTableRowsClickable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Key of ENTITY_TYPE for compare entities */\n    public keyExp: InputSignal<NonNullable<KEY>> = input('id' as NonNullable<KEY>);\n\n    /** List of entities */\n    public entities: InputSignalWithTransform<ENTITY_TYPE[], ENTITY_TYPE[]> = input.required<ENTITY_TYPE[], ENTITY_TYPE[]>({\n        transform: (value: ENTITY_TYPE[]) => transformArrayInput(value),\n    });\n    /** Current page model from store */\n    public currentSortModel: InputSignal<Nullable<SortModel<SORT_PROPERTY>>> = input.required();\n    /** Current elements appearance */\n    public appearance: InputSignal<MatFormFieldAppearance> = input.required({\n        transform: (value: MatFormFieldAppearance) => (value === 'fill' ? 'fill' : 'outline'),\n    });\n    /** Filter inputs appearance */\n    public filterAppearance: InputSignal<MatFormFieldAppearance> = input<MatFormFieldAppearance>('outline');\n    /** Current filter model from store */\n    public filterModel: InputSignalWithTransform<FilterModel<KEY>[], FilterModel<KEY>[]> = input<FilterModel<KEY>[], FilterModel<KEY>[]>(\n        [],\n        {\n            transform: (value: FilterModel<KEY>[]) => transformArrayInput(value),\n        }\n    );\n    /** Indicates is filters shown */\n    public isFiltersShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n\n    /** Row click output action */\n    public readonly rowClick: OutputEmitterRef<NonNullable<{ row: ENTITY_TYPE; event: MouseEvent }>> =\n        output<NonNullable<{ row: ENTITY_TYPE; event: MouseEvent }>>();\n    /** Row doubleClick output action */\n    public readonly rowDoubleClick: OutputEmitterRef<NonNullable<ENTITY_TYPE>> = output<NonNullable<ENTITY_TYPE>>();\n    /** Sort change output action */\n    public readonly sortChange: OutputEmitterRef<SortModel<SORT_PROPERTY>> = output<SortModel<SORT_PROPERTY>>();\n    /** Filter change output action */\n    public readonly filterChange: OutputEmitterRef<FilterModel<KEY>[]> = output<FilterModel<KEY>[]>();\n\n    /** Columns config for table */\n    public columns: Signal<Array<ITable.Column<ENTITY_TYPE>>> = computed(() => {\n        return this.#tableConfigService.tableConfig().columns;\n    });\n\n    /** Custom cells template */\n    public readonly customCellsTpl: Signal<Nullable<RtuiCustomTableCellsDirective<ENTITY_TYPE>>> =\n        contentChild(RtuiCustomTableCellsDirective);\n    /** Row actions template */\n    public readonly rowActionsTpl: Signal<\n        Nullable<\n            TemplateRef<{\n                $implicit: ENTITY_TYPE;\n            }>\n        >\n    > = contentChild(RtuiTableRowActionsDirective, {\n        read: TemplateRef,\n    });\n    /** Additional row actions template */\n    public readonly additionalRowActionsTpl: Signal<Nullable<TemplateRef<RtuiTableAdditionalRowActionsDirective>>> = contentChild(\n        RtuiTableAdditionalRowActionsDirective,\n        {\n            read: TemplateRef,\n        }\n    );\n\n    /** Fields specified by the directive */\n    /** List of selected entities ids */\n    public readonly selectedEntitiesIds: WritableSignal<ENTITY_TYPE[KEY][]> = signal([]);\n    /** Indicates are all page entities selected */\n    public readonly isPageEntitiesSelected: WritableSignal<boolean> = signal(false);\n    /** Indicates are some page entities selected */\n    public readonly isPageEntitiesIndeterminate: WritableSignal<boolean> = signal(false);\n    /** Indicates is multiselect mod enabled */\n    public readonly isMultiSelect: WritableSignal<boolean> = signal(true);\n    /** Indicates is selectors column shown */\n    public readonly isSelectorsColumnShown: WritableSignal<boolean> = signal(false);\n    /** Indicates is selectors column disabled */\n    public readonly isSelectorsColumnDisabled: WritableSignal<boolean> = signal(false);\n    /** Current row index */\n    public readonly activeRowIndex: WritableSignal<Nullable<number>> = signal(null);\n\n    public ngAfterViewChecked(): void {\n        this.#setPaddingHelperWidth();\n    }\n\n    /** Sort change output action */\n    public onSortChange(sortModel: SortModel<string>): void {\n        // TODO: add type guard\n        this.sortChange.emit(sortModel as SortModel<SORT_PROPERTY>);\n    }\n\n    /** Filter change output action */\n    public onFilterChange(filterModel: FilterModel<KEY>[]): void {\n        this.filterChange.emit(filterModel);\n    }\n\n    /** Open row actions menu */\n    public onMenuOpen(index: number): void {\n        this.activeRowIndex.set(index);\n    }\n\n    /** Close the row actions menu */\n    public onMenuClose(): void {\n        this.activeRowIndex.set(null);\n    }\n\n    /** Row click output actions */\n    public onRowClick(row: NonNullable<ENTITY_TYPE>, event: MouseEvent): void {\n        this.rowClick.emit({ row, event });\n    }\n\n    /** Row doubleClick output action */\n    public onRowDoubleClick(row: NonNullable<ENTITY_TYPE>): void {\n        this.rowDoubleClick.emit(row);\n    }\n\n    /** Empty methods set in selectors directive */\n    public onToggleEntity: (entity: ENTITY_TYPE, checked: boolean) => void = (): void => {\n        return;\n    };\n    public onTogglePageEntities: (checked: boolean) => void = (): void => {\n        return;\n    };\n\n    /**\n     * Updates the width of padding helpers dynamically to match the width of `rowActions`.\n     * Ensures that the width of `rowActionsHeaderPaddingHelper` and `rowActionsPaddingHelper`\n     * is consistent with the current `rowActions` width.\n     */\n    #setPaddingHelperWidth(): void {\n        if (this.rowActions()) {\n            const rowActionsWidth: number = this.rowActions()?.nativeElement.offsetWidth || 0;\n\n            const headerWidth: number = parseInt(this.rowActionsHeaderPaddingHelper()?.nativeElement?.style.width || '0', 10);\n            const paddingWidth: number = parseInt(this.rowActionsPaddingHelper()?.nativeElement?.style.width || '0', 10);\n\n            if (rowActionsWidth !== headerWidth || rowActionsWidth !== paddingWidth) {\n                const headerEl: Nullable<HTMLElement> = this.rowActionsHeaderPaddingHelper()?.nativeElement;\n                const paddingEl: Nullable<HTMLElement> = this.rowActionsPaddingHelper()?.nativeElement;\n\n                if (headerEl) {\n                    headerEl.style.width = `${rowActionsWidth}px`;\n                }\n\n                if (paddingEl) {\n                    paddingEl.style.width = `${rowActionsWidth}px`;\n                }\n            }\n        }\n    }\n}\n","<table rtBlock=\"c-table\">\n    <thead>\n        <tr>\n            @if (isSelectorsColumnShown()) {\n                <th\n                    rtElem=\"cell\"\n                    rtMod=\"selectable\"\n                    (mousedown)=\"$event.stopPropagation()\"\n                    (click)=\"$event.stopPropagation()\"\n                    (dblclick)=\"$event.stopPropagation()\">\n                    @if (isMultiSelect()) {\n                        <mat-checkbox\n                            [disabled]=\"isSelectorsColumnDisabled()\"\n                            [checked]=\"isPageEntitiesSelected()\"\n                            [indeterminate]=\"isPageEntitiesIndeterminate() && !isPageEntitiesSelected()\"\n                            (change)=\"onTogglePageEntities($event.checked)\" />\n                    }\n                </th>\n            }\n\n            @for (column of columns(); track column.propName) {\n                @if (!column?.hidden) {\n                    <th\n                        rtElem=\"cell\"\n                        [rtMod]=\"{ sortable: column?.sorting }\"\n                        (mousedown)=\"$event.stopPropagation()\"\n                        (click)=\"$event.stopPropagation()\"\n                        (dblclick)=\"$event.stopPropagation()\">\n                        <rtui-table-header-cell\n                            [headerModel]=\"column.header\"\n                            [sortModel]=\"column?.sorting\"\n                            [currentSortModel]=\"currentSortModel()\"\n                            (sortChange)=\"onSortChange($event)\" />\n                    </th>\n                }\n            }\n\n            @if (rowActionsTpl() || additionalRowActionsTpl()) {\n                <th\n                    #rowActionsHeaderPaddingHelper\n                    rtElem=\"cell\"\n                    (mousedown)=\"$event.stopPropagation()\"\n                    (click)=\"$event.stopPropagation()\"\n                    (dblclick)=\"$event.stopPropagation()\">\n                    Actions\n                </th>\n            }\n        </tr>\n\n        @if (isFiltersShown()) {\n            <tr>\n                @if (isSelectorsColumnShown()) {\n                    <th rtElem=\"cell\" rtMod=\"filterable, empty\"></th>\n                }\n\n                @for (column of columns(); track column.propName) {\n                    @if (!column?.hidden && column.filterType) {\n                        <th rtElem=\"cell\" rtMod=\"filterable\">\n                            <rtui-table-header-filter-cell\n                                [appearance]=\"filterAppearance()\"\n                                [filterProperty]=\"column.propName\"\n                                [filterType]=\"column.filterType\"\n                                [defaultFilterOperator]=\"column?.defaultFilterOperator || filterOperators.EQUALS\"\n                                [filterOperators]=\"column.filterOperators || []\"\n                                [filterSelectOptions]=\"column.filterSelectOptions || []\"\n                                [filterModel]=\"filterModel()\"\n                                (filterChange)=\"onFilterChange($event)\" />\n                        </th>\n                    } @else if (!column?.hidden) {\n                        <th rtElem=\"cell\" rtMod=\"filterable\"></th>\n                    }\n                }\n\n                @if (rowActionsTpl() || additionalRowActionsTpl()) {\n                    <th rtElem=\"cell\" rtMod=\"filterable\"></th>\n                }\n            </tr>\n        }\n    </thead>\n\n    <tbody>\n        @for (row of entities(); track i; let i = $index) {\n            <tr\n                rtElem=\"row\"\n                [rtuiTableRowClickDirective]=\"row\"\n                [isTableRowClickable]=\"isTableRowsClickable()\"\n                [rtMod]=\"{\n                    clickable: isTableRowsClickable(),\n                    active: activeRowIndex() === i,\n                }\">\n                @if (isSelectorsColumnShown()) {\n                    <td\n                        rtElem=\"cell\"\n                        (click)=\"$event.stopPropagation()\"\n                        (mousedown)=\"$event.stopPropagation()\"\n                        (dblclick)=\"$event.stopPropagation()\">\n                        @if (isMultiSelect()) {\n                            <mat-checkbox\n                                [disabled]=\"isSelectorsColumnDisabled()\"\n                                [checked]=\"selectedEntitiesIds().includes(row[keyExp()])\"\n                                (change)=\"onToggleEntity(row, $event.checked)\" />\n                        } @else {\n                            <mat-radio-button\n                                [disabled]=\"isSelectorsColumnDisabled()\"\n                                [checked]=\"selectedEntitiesIds().includes(row[keyExp()])\"\n                                (change)=\"onToggleEntity(row, true)\" />\n                        }\n                    </td>\n                }\n\n                @for (column of columns(); track column.propName) {\n                    @if (!column?.hidden) {\n                        <td rtElem=\"cell\" [rtMod]=\"{ copyable: column?.copyable }\">\n                            @switch (column?.type) {\n                                @case (columnTypes.CUSTOM) {\n                                    @if (customCellsTpl() && customCellsTpl()?.getTemplateByPropName(column.propName)) {\n                                        <ng-template\n                                            *ngTemplateOutlet=\"\n                                                customCellsTpl()?.getTemplateByPropName(column.propName) || null;\n                                                context: { $implicit: row }\n                                            \" />\n                                    }\n                                }\n                                @default {\n                                    <rtui-table-base-cell [row]=\"row\" [column]=\"column\" [isMobile]=\"isMobile()\" />\n                                }\n                            }\n                        </td>\n                    }\n                }\n\n                @if (rowActionsTpl() || additionalRowActionsTpl()) {\n                    <div rtBlock=\"c-table-actions\" [rtMod]=\"{ hidden: activeRowIndex() !== i }\">\n                        <div rtElem=\"container\" #rowActions>\n                            @if (additionalRowActionsTpl()) {\n                                <ng-template *ngTemplateOutlet=\"additionalRowActionsTpl() || null; context: { $implicit: row }\" />\n                            }\n\n                            @if (rowActionsTpl()) {\n                                <button\n                                    rtElem=\"action\"\n                                    aria-label=\"Icon-button for a context menu\"\n                                    mat-icon-button\n                                    [disableRipple]=\"true\"\n                                    [matMenuTriggerFor]=\"menuTpl\"\n                                    (menuOpened)=\"onMenuOpen(i)\"\n                                    (menuClosed)=\"onMenuClose()\"\n                                    (click)=\"$event.stopPropagation()\"\n                                    (mousedown)=\"$event.stopPropagation()\">\n                                    <mat-icon [rtIconOutlined]=\"true\">more_vert</mat-icon>\n                                </button>\n\n                                <mat-menu #menuTpl=\"matMenu\" xPosition=\"before\">\n                                    <ng-template *ngTemplateOutlet=\"rowActionsTpl() || null; context: { $implicit: row }\" />\n                                </mat-menu>\n                            }\n                        </div>\n                    </div>\n\n                    <div #rowActionsRowPaddingHelper></div>\n                }\n            </tr>\n        }\n    </tbody>\n</table>\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    input,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { Nullable, RtIconOutlinedDirective } from '../../../../util';\n\n@Component({\n    selector: 'rtui-dynamic-selector-list-actions',\n    templateUrl: './rtui-dynamic-selector-list-actions.component.html',\n    styleUrls: ['./rtui-dynamic-selector-list-actions.component.scss'],\n    imports: [MatIcon, MatButton, RtIconOutlinedDirective, BlockDirective, ElemDirective, MatIconButton, MatTooltip],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiDynamicSelectorListActionsComponent {\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, Nullable<boolean>> = input.required<Nullable<boolean>, Nullable<boolean>>({\n        transform: booleanAttribute,\n    });\n    public isResetButtonDisabled: InputSignalWithTransform<boolean, boolean> = input.required<boolean, boolean>({\n        transform: booleanAttribute,\n    });\n    public isClearButtonDisabled: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public disabled: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n\n    public readonly resetAction: OutputEmitterRef<void> = output<void>();\n    public readonly clearAction: OutputEmitterRef<void> = output<void>();\n\n    public onReset(): void {\n        this.resetAction.emit();\n    }\n\n    public onClear(): void {\n        this.clearAction.emit();\n    }\n}\n","<ng-container rtBlock=\"rtui-dynamic-selector-list-actions\">\n    <div rtElem=\"control\">\n        <button\n            mat-icon-button\n            type=\"button\"\n            rtElem=\"item\"\n            matTooltip=\"Reset to initial list\"\n            matTooltipClass=\"custom-tooltip\"\n            matTooltipPosition=\"left\"\n            [rtMod]=\"{ active: !isResetButtonDisabled() && !disabled() }\"\n            [disabled]=\"isResetButtonDisabled() || disabled()\"\n            [matTooltipDisabled]=\"isMobile()\"\n            (click)=\"onReset()\">\n            <mat-icon rtElem=\"item-icon\" [rtIconOutlined]=\"true\">refresh</mat-icon>\n        </button>\n    </div>\n\n    <div rtElem=\"control\">\n        <button\n            mat-icon-button\n            type=\"button\"\n            rtElem=\"item\"\n            matTooltip=\"Clear list\"\n            matTooltipClass=\"custom-tooltip\"\n            matTooltipPosition=\"above\"\n            [rtMod]=\"{ active: !disabled() && !isClearButtonDisabled() }\"\n            [matTooltipDisabled]=\"isMobile()\"\n            [disabled]=\"disabled() || isClearButtonDisabled()\"\n            (click)=\"onClear()\">\n            <mat-icon rtElem=\"item-icon\" [rtIconOutlined]=\"true\">delete_forever</mat-icon>\n        </button>\n    </div>\n</ng-container>\n","import { booleanAttribute, Directive, input, InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { Nullable, transformStringInput } from '../../../util';\n\n@Directive()\nexport abstract class RtuiDynamicSelectorsDirective {\n    /** Indicates if mobile view */\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, boolean> = input.required<Nullable<boolean>, boolean>({\n        transform: booleanAttribute,\n    });\n    /** Selections control button title */\n    public buttonTitle: InputSignalWithTransform<string, string> = input<string, string>('Add', {\n        transform: transformStringInput,\n    });\n    /** Indicates if only one option can be chosen */\n    public isSingleSelection: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is selector disabled */\n    public disabled: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is break string pipe used */\n    public useNameBreaking: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is title case pipe used */\n    public useTitleCase: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isPlaceholderIconOutlined: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is delete entity button from the selected list shown */\n    public isDeleteButtonShown: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is list of items draggable */\n    public isListDraggable: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    /** Placeholder icon */\n    public placeholderIcon: InputSignalWithTransform<string, string> = input<string, string>('', {\n        transform: transformStringInput,\n    });\n    /** Placeholder description */\n    public placeholderDescription: InputSignalWithTransform<string, string> = input<string, string>('', {\n        transform: transformStringInput,\n    });\n    /** Material elements appearance */\n    public appearance: InputSignal<MatFormFieldAppearance> = input('fill' as MatFormFieldAppearance);\n}\n","export enum TOGGLE_SIZE_TYPE_ENUM {\n    SM = 'sm',\n    MD = 'md',\n}\n\nexport type ToggleSizeType = TOGGLE_SIZE_TYPE_ENUM.SM | TOGGLE_SIZE_TYPE_ENUM.MD;\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    effect,\n    forwardRef,\n    inject,\n    Injector,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    OnInit,\n    Signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatTooltip, TooltipPosition } from '@angular/material/tooltip';\nimport { noop } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { BreakpointService, Nullable } from '../../util';\nimport { TOGGLE_SIZE_TYPE_ENUM, ToggleSizeType } from './toggle-size.type.enum';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\n@Component({\n    selector: 'rtui-toggle',\n    templateUrl: './rtui-toggle.component.html',\n    styleUrls: ['./rtui-toggle.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => RtuiToggleComponent),\n            multi: true,\n        },\n        BreakpointService,\n    ],\n    imports: [\n        ReactiveFormsModule,\n        MatTooltip,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n    ],\n})\nexport class RtuiToggleComponent implements OnInit, ControlValueAccessor {\n    readonly #injector: Injector = inject(Injector);\n    readonly #cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #breakpointService: BreakpointService = inject(BreakpointService);\n\n    public formControl: FormControl<boolean> = new FormControl<boolean>(false, { nonNullable: true });\n\n    public label: InputSignal<Nullable<string>> = input();\n    public tooltip: InputSignal<string> = input('');\n    public size: InputSignal<ToggleSizeType> = input<ToggleSizeType>(TOGGLE_SIZE_TYPE_ENUM.MD);\n    public tooltipPosition: InputSignal<TooltipPosition> = input<TooltipPosition>('above');\n    public isDisabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    public tooltipDisabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n\n    public readonly isMobile: Signal<Nullable<boolean>> = this.#breakpointService.isMobile;\n\n    #onTouched: () => void = noop;\n    #onChanged: (value: boolean) => void = noop;\n\n    public ngOnInit(): void {\n        this.formControl.valueChanges\n            .pipe(\n                filter(() => typeof this.#onChanged === 'function'),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe((value: boolean) => {\n                this.#onChanged(value);\n            });\n\n        this.formControl.statusChanges\n            .pipe(\n                filter(() => typeof this.#onTouched === 'function'),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe(() => this.#onTouched());\n\n        effect(\n            () => {\n                if (this.formControl.disabled !== this.isDisabled()) {\n                    this.setDisabledState();\n                }\n            },\n            { injector: this.#injector }\n        );\n    }\n\n    // ––––––––––––– Value Accessor –––––––––––––––\n    public writeValue(value: boolean): void {\n        this.formControl.patchValue(value, { emitEvent: false });\n        this.#cdr.markForCheck();\n    }\n\n    public registerOnChange(fn: () => void): void {\n        this.#onChanged = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.#onTouched = fn;\n    }\n\n    public setDisabledState(): void {\n        if (this.isDisabled()) {\n            this.formControl.disable();\n        } else {\n            this.formControl.enable();\n        }\n\n        this.#cdr.markForCheck();\n    }\n}\n","<label\n    rtBlock=\"rtui-toggle-container\"\n    [rtMod]=\"{ disabled: isDisabled() }\"\n    [matTooltipPosition]=\"tooltipPosition()\"\n    [matTooltip]=\"tooltip()\"\n    [matTooltipDisabled]=\"!tooltip() || isMobile() || tooltipDisabled()\">\n    <div rtBlock=\"rtui-toggle\" rtMod=\"{{ size() }}\">\n        <input type=\"checkbox\" rtElem=\"check\" [formControl]=\"formControl\" />\n\n        <b rtElem=\"switch\"></b>\n\n        <b rtElem=\"track\"></b>\n    </div>\n\n    @if (label()) {\n        <div rtElem=\"label\" [rtMod]=\"{ active: formControl.value }\">{{ label() }}</div>\n    }\n</label>\n","import {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    DestroyRef,\n    effect,\n    ElementRef,\n    inject,\n    Injector,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    OnInit,\n    output,\n    OutputEmitterRef,\n    Signal,\n    signal,\n    untracked,\n    viewChild,\n    WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatFormField, MatFormFieldAppearance, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatRadioButton } from '@angular/material/radio';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport {\n    BreakStringPipe,\n    DeviceDetectorService,\n    EntityToStringPipe,\n    Nullable,\n    OSTypes,\n    RtIconOutlinedDirective,\n    RtScrollDirective,\n    transformArrayInput,\n} from '../../../../util';\nimport { RtuiSpinnerComponent } from '../../../spinner';\nimport { RtuiClearButtonComponent } from '../../../table';\nimport { RtuiToggleComponent } from '../../../toggle';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\n@Component({\n    selector: 'rtui-multi-selector-popup',\n    templateUrl: './rtui-multi-selector-popup.component.html',\n    styleUrls: ['./rtui-multi-selector-popup.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        // Material\n        MatButton,\n        MatTooltip,\n        MatFormField,\n        MatIcon,\n        MatInput,\n        MatPrefix,\n        MatSuffix,\n        MatCheckbox,\n        MatRadioButton,\n        MatProgressSpinner,\n        BreakStringPipe,\n        ReactiveFormsModule,\n        RouterLink,\n        FormsModule,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        RtScrollDirective,\n        RtIconOutlinedDirective,\n\n        // components\n        RtuiClearButtonComponent,\n        RtuiToggleComponent,\n        RtuiSpinnerComponent,\n        EntityToStringPipe,\n    ],\n    providers: [DeviceDetectorService],\n})\nexport class RtuiMultiSelectorPopupComponent<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>>\n    implements OnInit, AfterViewInit\n{\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #injector: Injector = inject(Injector);\n    readonly #deviceService: DeviceDetectorService = inject(DeviceDetectorService);\n\n    protected readonly oSTypes: typeof OSTypes = OSTypes;\n\n    /** Indicates is mobile view */\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, Nullable<boolean>> = input.required<Nullable<boolean>, Nullable<boolean>>({\n        transform: booleanAttribute,\n    });\n    public entitiesToSelect: InputSignalWithTransform<ENTITY[], ENTITY[]> = input.required<ENTITY[], ENTITY[]>({\n        transform: (value: unknown) => transformArrayInput(value),\n    });\n    /** Material elements appearance */\n    public appearance: InputSignal<MatFormFieldAppearance> = input.required();\n    /** A model's field which should be used for http-requests */\n    public keyExp: InputSignal<KEY> = input.required();\n    /** A model's field which should be shown in ui */\n    public displayExp: InputSignal<KEY> = input.required();\n    /** Init search term value */\n    public searchTerm: InputSignal<string> = input<string>('');\n    /** Navigation button title */\n    public navigateButtonTitle: InputSignal<string> = input<string>('');\n    /** Navigation button link */\n    public navigateLink: InputSignal<string> = input<string>('');\n    /** Indicates if only one option can be chosen */\n    public isSingleSelection: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is change multi select mode toggle shown */\n    public isMultiToggleShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is Select all button shown */\n    public isSelectAllButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates that a list of entities is being loading */\n    public loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates that a list of entities is being fetching */\n    public fetching: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is BreakStringPipe used */\n    public useNameBreaking: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates lazy loading is used */\n    public isLazyLoad: InputSignalWithTransform<Nullable<boolean>, boolean> = input<Nullable<boolean>, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates local search is used */\n    public isLocalSearch: InputSignalWithTransform<Nullable<boolean>, boolean> = input<Nullable<boolean>, boolean>(true, {\n        transform: booleanAttribute,\n    });\n\n    /** Send output selected entities ids */\n    public readonly submitAction: OutputEmitterRef<ENTITY[KEY][]> = output<ENTITY[KEY][]>();\n    /** Close popup action */\n    public readonly closeAction: OutputEmitterRef<void> = output<void>();\n    /** Output search action */\n    public readonly searchAction: OutputEmitterRef<string> = output<string>();\n    /** Output scroll action, needed for lazy loading */\n    public readonly scrollAction: OutputEmitterRef<void> = output<void>();\n    /** Output temporary selection action, needed for store values */\n    public readonly temporarySelectAction: OutputEmitterRef<ENTITY[]> = output<ENTITY[]>();\n\n    /** Search input Ref for set focus on init */\n    public readonly searchInputRef: Signal<Nullable<ElementRef<HTMLInputElement>>> =\n        viewChild<ElementRef<HTMLInputElement>>('searchInputTpl');\n\n    /** Form control for search */\n    public readonly searchControl: FormControl<Nullable<string>> = new FormControl('');\n    /** Form control for select */\n    public readonly selectionControl: FormControl<ENTITY[KEY][]> = new FormControl<ENTITY[KEY][]>([], { nonNullable: true });\n    /** Entities filtered by local search */\n    public readonly filteredEntities: WritableSignal<ENTITY[]> = signal([]);\n    /** Selected entities */\n    public readonly selectedEntities: WritableSignal<ENTITY[]> = signal([]);\n    /** Indicates is all available entities has been selected */\n    public readonly isAllSelected: WritableSignal<boolean> = signal(false);\n    /** Indicates is multi selection mode enabled */\n    public readonly isMultiSelection: WritableSignal<boolean> = signal(true);\n    /** Indicates is macOS used */\n    public readonly isMacOS: Signal<boolean> = signal(this.#deviceService.getOS() === this.oSTypes.MAC_OS);\n\n    public ngOnInit(): void {\n        /** Clear previous temp selection  */\n        this.temporarySelectAction.emit([]);\n\n        if (this.searchTerm()) {\n            this.onClearSearch();\n        }\n\n        /** Filter list of entities by search  */\n        this.searchControl.valueChanges\n            .pipe(debounceTime(this.isLocalSearch() ? 0 : 500), takeUntilDestroyed(this.#destroyRef))\n            .subscribe((value: Nullable<string>): void => {\n                const selectedEntities: ENTITY[] = this.entitiesToSelect().filter((el: ENTITY) => {\n                    return this.selectionControl.value.includes(el[this.keyExp()]);\n                });\n                this.selectedEntities.set(selectedEntities);\n                this.temporarySelectAction.emit(selectedEntities);\n\n                if (value && this.isLocalSearch()) {\n                    const searchTerms: string[] = value.toLowerCase().trim().split(' ');\n\n                    this.filteredEntities.set(\n                        this.entitiesToSelect().filter((el: ENTITY) => {\n                            return (\n                                (typeof el[this.displayExp()] === 'string' || typeof el[this.displayExp()] === 'number') &&\n                                searchTerms.every(\n                                    (term: string) =>\n                                        el[this.displayExp()]?.toString().toLowerCase().includes(term) &&\n                                        !this.selectedEntities().includes(el)\n                                )\n                            );\n                        })\n                    );\n                } else if (this.isLocalSearch()) {\n                    this.filteredEntities.set(this.entitiesToSelect());\n                } else if (value !== null && typeof value === 'string') {\n                    this.searchAction.emit(value);\n                }\n            });\n\n        /** Set entitiesToSelect list and isAllSelected checkbox state  */\n        effect(\n            () => {\n                if (this.entitiesToSelect() && Array.isArray(this.entitiesToSelect())) {\n                    if (this.searchControl?.value) {\n                        const filteredEntities: ENTITY[] = this.entitiesToSelect().filter((el: ENTITY) => {\n                            return !this.selectionControl.value.includes(el[this.keyExp()]);\n                        });\n                        this.filteredEntities.set(filteredEntities);\n                    } else {\n                        this.filteredEntities.set(this.entitiesToSelect());\n                    }\n\n                    this.isAllSelected.set(\n                        this.searchControl?.value\n                            ? this.selectionControl.value?.length - untracked(() => this.selectedEntities()?.length) ===\n                                  untracked(() => this.filteredEntities()?.length)\n                            : this.selectionControl.value?.length === untracked(() => this.filteredEntities()?.length)\n                    );\n                }\n            },\n            { injector: this.#injector }\n        );\n    }\n\n    /** Set focus on search input  */\n    public ngAfterViewInit(): void {\n        if (this.searchInputRef) {\n            this.searchInputRef()?.nativeElement.focus();\n        }\n    }\n\n    /** Change Multi election mode  */\n    public toggleMultiSelection(): void {\n        this.isMultiSelection.update((value: boolean) => !value);\n    }\n\n    /** Toggle select all */\n    public toggleSelectAll(value: boolean): void {\n        this.isAllSelected.set(value);\n\n        if (this.isAllSelected() && this.searchControl.value) {\n            this.selectionControl.patchValue([\n                ...this.selectedEntities().map((el: ENTITY) => el[this.keyExp()]),\n                ...this.filteredEntities().map((el: ENTITY) => el[this.keyExp()]),\n            ]);\n        } else if (this.isAllSelected()) {\n            this.selectionControl.patchValue(this.filteredEntities().map((el: ENTITY) => el[this.keyExp()]));\n        } else {\n            this.selectionControl.patchValue([]);\n        }\n    }\n\n    /** Update selectionControl and isAllSelected checkbox state */\n    public itemToggle(entity: ENTITY, checked: boolean): void {\n        if (checked) {\n            this.selectionControl.patchValue([...this.selectionControl.value, entity[this.keyExp()]]);\n        } else {\n            this.selectionControl.patchValue(\n                this.selectionControl.value.filter((el: ENTITY[KEY]): boolean => {\n                    return el !== entity[this.keyExp()];\n                })\n            );\n        }\n\n        this.isAllSelected.set(\n            this.searchControl.value\n                ? this.selectionControl.value?.length - this.selectedEntities()?.length === this.filteredEntities()?.length\n                : this.selectionControl.value?.length === this.filteredEntities()?.length\n        );\n    }\n\n    /** Proceed select action in multi selection mode  */\n    public onToggleItem(event: MouseEvent, entity: ENTITY, checked: boolean): void {\n        const multipleSelectionEnabled: boolean = this.isMacOS() ? event.metaKey : event.ctrlKey;\n\n        if ((!this.isMultiSelection() && !multipleSelectionEnabled) || this.isSingleSelection()) {\n            this.toggleSelectAll(false);\n        }\n\n        this.itemToggle(entity, checked);\n    }\n\n    /** Proceed select action in single selection mode  */\n    public onToggleSingleItem(entity: ENTITY, checked: boolean): void {\n        this.toggleSelectAll(false);\n        this.itemToggle(entity, checked);\n    }\n\n    /** Output action, selected entities ids */\n    public onSubmit(): void {\n        if (this.selectionControl.value?.length) {\n            this.submitAction.emit(this.selectionControl.value);\n        }\n    }\n\n    /** Close popup */\n    public onClose(): void {\n        this.closeAction.emit();\n    }\n\n    /** Clear search */\n    public onClearSearch(): void {\n        if (!this.isLocalSearch()) {\n            this.searchAction.emit('');\n        }\n        this.searchControl.patchValue(null);\n    }\n\n    /** Scroll action, needed for lazy loading mode */\n    public scroll(): void {\n        this.scrollAction.emit();\n    }\n}\n","<div\n    rtBlock=\"rtui-multi-selector-header\"\n    [rtMod]=\"{ simple: isSingleSelection() || !filteredEntities().length || filteredEntities().length <= 1 }\">\n    <mat-form-field subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n        <input #searchInputTpl matInput placeholder=\"Search...\" type=\"text\" [formControl]=\"searchControl\" />\n\n        <mat-icon matPrefix rtIconOutlined>search</mat-icon>\n\n        <rtui-clear-button matSuffix [isButtonShown]=\"!!searchControl.value\" (clickAction)=\"onClearSearch()\" />\n    </mat-form-field>\n\n    @if (!isSingleSelection() && filteredEntities().length > 1 && !loading()) {\n        <div rtElem=\"controls\">\n            @if (isMultiToggleShown()) {\n                <div rtElem=\"controls-item\" rtMod=\"first\">\n                    <rtui-toggle label=\"Multi selection\" [ngModel]=\"this.isMultiSelection()\" (ngModelChange)=\"toggleMultiSelection()\" />\n\n                    @if (!isMobile()) {\n                        <mat-icon\n                            rtElem=\"controls-item-icon\"\n                            matTooltipPosition=\"above\"\n                            [rtIconOutlined]=\"true\"\n                            [matTooltip]=\"\n                                isMacOS() ? 'Also for multi selection use COMMAND button' : 'Also for multi selection use CTRL button'\n                            \">\n                            info\n                        </mat-icon>\n                    }\n\n                    @if (isMobile()) {\n                        <div rtElem=\"controls-item-info\">\n                            {{ isMacOS() ? 'Also for multi selection use COMMAND button' : 'Also for multi selection use CTRL button' }}\n                        </div>\n                    }\n                </div>\n            }\n\n            @if (isSelectAllButtonShown()) {\n                <div rtElem=\"controls-item\" rtMod=\"last\">\n                    <mat-checkbox\n                        [checked]=\"isAllSelected()\"\n                        [indeterminate]=\"!isAllSelected() && selectionControl.value.length > 0\"\n                        (change)=\"toggleSelectAll($event.checked)\">\n                        <div rtElem=\"controls-item-title\">Select all</div>\n                    </mat-checkbox>\n                </div>\n            }\n        </div>\n    }\n</div>\n\n@if ((filteredEntities()?.length || selectedEntities().length) && !loading()) {\n    <div rtBlock=\"rtui-multi-selector-options\" rtScrollDirective [active]=\"!!isLazyLoad() && !fetching()\" (scrollAction)=\"scroll()\">\n        @if (searchControl.value && selectedEntities()) {\n            @for (entity of selectedEntities(); track entity[displayExp()]; let i = $index) {\n                @if (isSingleSelection()) {\n                    <mat-radio-button\n                        rtElem=\"item\"\n                        [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n                        [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n                        (change)=\"onToggleSingleItem(entity, !selectionControl.value.includes(entity[keyExp()]))\">\n                        <div rtElem=\"item-title\">\n                            @if (useNameBreaking()) {\n                                {{ entity[displayExp()] | entityToString | breakString }}\n                            } @else {\n                                {{ entity[displayExp()] }}\n                            }\n                        </div>\n                    </mat-radio-button>\n                } @else {\n                    <mat-checkbox\n                        rtElem=\"item\"\n                        [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n                        [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n                        (click)=\"onToggleItem($event, entity, !selectionControl.value.includes(entity[keyExp()]))\">\n                        <div rtElem=\"item-title\">\n                            @if (useNameBreaking()) {\n                                {{ entity[displayExp()] | entityToString | breakString }}\n                            } @else {\n                                {{ entity[displayExp()] }}\n                            }\n                        </div>\n                    </mat-checkbox>\n                }\n            }\n        }\n\n        @if (filteredEntities()) {\n            @for (entity of filteredEntities(); track entity[displayExp()]) {\n                @if (isSingleSelection()) {\n                    <mat-radio-button\n                        rtElem=\"item\"\n                        [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n                        (change)=\"onToggleSingleItem(entity, !selectionControl.value.includes(entity[keyExp()]))\">\n                        <div rtElem=\"item-title\">\n                            @if (useNameBreaking()) {\n                                {{ entity[displayExp()] | entityToString | breakString }}\n                            } @else {\n                                {{ entity[displayExp()] }}\n                            }\n                        </div>\n                    </mat-radio-button>\n                } @else {\n                    <mat-checkbox\n                        rtElem=\"item\"\n                        [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n                        (click)=\"onToggleItem($event, entity, !selectionControl.value.includes(entity[keyExp()]))\">\n                        <div rtElem=\"item-title\">\n                            @if (useNameBreaking()) {\n                                {{ entity[displayExp()] | entityToString | breakString }}\n                            } @else {\n                                {{ entity[displayExp()] }}\n                            }\n                        </div>\n                    </mat-checkbox>\n                }\n            }\n        }\n\n        @if (fetching()) {\n            <div rtElem=\"loader\">\n                <mat-spinner [diameter]=\"20\" />\n            </div>\n        }\n    </div>\n} @else {\n    <div rtBlock=\"rtui-multi-selector-placeholder\">\n        @if (loading()) {\n            <rtui-spinner />\n        } @else {\n            <mat-icon rtElem=\"icon\" rtIconOutlined>search</mat-icon>\n\n            <div rtElem=\"title\">No Results</div>\n        }\n    </div>\n}\n\n<div rtBlock=\"rtui-multi-selector-footer\" [rtMod]=\"{ full: !!navigateLink() && !!navigateButtonTitle() }\">\n    @if (navigateLink() && navigateButtonTitle()) {\n        <a rtElem=\"nav-action\" [routerLink]=\"navigateLink()\">{{ navigateButtonTitle() }}</a>\n    }\n\n    <div rtElem=\"base-actions\">\n        <button mat-button type=\"button\" rtBlock=\"c-button\" (click)=\"onClose()\">Cancel</button>\n\n        <button\n            mat-flat-button\n            type=\"button\"\n            rtBlock=\"c-button\"\n            [disabled]=\"!selectionControl.value?.length || loading()\"\n            (click)=\"onSubmit()\">\n            SUBMIT\n        </button>\n    </div>\n</div>\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    input,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { RtIconOutlinedDirective, transformStringInput } from '../../../../util';\n\n@Component({\n    selector: 'rtui-dynamic-selector-placeholder',\n    templateUrl: './rtui-dynamic-selector-placeholder.component.html',\n    styleUrls: ['./rtui-dynamic-selector-placeholder.component.scss'],\n    imports: [MatIcon, MatButton, CdkOverlayOrigin, RtIconOutlinedDirective, BlockDirective, ElemDirective],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiDynamicSelectorPlaceholderComponent {\n    public icon: InputSignalWithTransform<string, string> = input<string, string>('', {\n        transform: transformStringInput,\n    });\n    public description: InputSignalWithTransform<string, string> = input<string, string>('', {\n        transform: transformStringInput,\n    });\n    public buttonTitle: InputSignalWithTransform<string, string> = input<string, string>('Add', {\n        transform: transformStringInput,\n    });\n    public isButtonShow: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(true, {\n        transform: booleanAttribute,\n    });\n    public disabled: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n    public isIconOutlined: InputSignalWithTransform<boolean, boolean> = input<boolean, boolean>(false, {\n        transform: booleanAttribute,\n    });\n\n    public readonly submitAction: OutputEmitterRef<CdkOverlayOrigin> = output<CdkOverlayOrigin>();\n\n    public onSubmit(trigger: CdkOverlayOrigin): void {\n        this.submitAction.emit(trigger);\n    }\n}\n","<ng-container rtBlock=\"rtui-dynamic-selector-placeholder\">\n    @if (icon()) {\n        <mat-icon rtElem=\"icon\" [rtMod]=\"{ warn: !isButtonShow() }\" [rtIconOutlined]=\"isIconOutlined()\">{{ icon() }}</mat-icon>\n    }\n\n    @if (description()) {\n        <div rtElem=\"description\">{{ description() }}</div>\n    }\n\n    @if (isButtonShow()) {\n        <button\n            #trigger=\"cdkOverlayOrigin\"\n            cdkOverlayOrigin\n            mat-flat-button\n            type=\"button\"\n            rtBlock=\"c-button\"\n            [disabled]=\"disabled()\"\n            (click)=\"onSubmit(trigger)\">\n            <mat-icon rtIconOutlined>add</mat-icon>\n\n            {{ buttonTitle() }}\n        </button>\n    }\n</ng-container>\n","import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet, TitleCasePipe } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChild,\n    Directive,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n    signal,\n    Signal,\n    TemplateRef,\n    viewChild,\n    WritableSignal,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport {\n    BreakStringPipe,\n    EntityToStringPipe,\n    Nullable,\n    RtHideTooltipDirective,\n    RtIconOutlinedDirective,\n    transformArrayInput,\n} from '../../../../util';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormField, MatInput } from '@angular/material/input';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\n/** Directive for row actions located outside a row menu button */\n@Directive({\n    selector: '[rtuiDynamicSelectorItemAdditionalControlDirective]',\n})\nexport class RtuiDynamicSelectorItemAdditionalControlDirective {}\n\n@Component({\n    selector: 'rtui-dynamic-selector-selected-list',\n    templateUrl: './rtui-dynamic-selector-selected-list.component.html',\n    styleUrls: ['./rtui-dynamic-selector-selected-list.component.scss'],\n    imports: [\n        NgTemplateOutlet,\n        FormsModule,\n        ReactiveFormsModule,\n\n        // material\n        MatIconButton,\n        MatIcon,\n        MatTooltip,\n        MatInput,\n        MatFormField,\n\n        // drag and drop\n        CdkDropList,\n        CdkDrag,\n        CdkDragHandle,\n\n        // directives\n        RtIconOutlinedDirective,\n        RtHideTooltipDirective,\n        BlockDirective,\n        ElemDirective,\n\n        // pipes\n        EntityToStringPipe,\n        BreakStringPipe,\n        TitleCasePipe,\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiDynamicSelectorSelectedListComponent<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>> {\n    protected readonly editedItemIndex: WritableSignal<Nullable<number>> = signal(null);\n\n    public readonly inputRef: Signal<Nullable<MatInput>> = viewChild(MatInput);\n\n    /** Indicates if mobile view */\n    public isMobile: InputSignalWithTransform<boolean, BooleanInput> = input.required<boolean, BooleanInput>({\n        transform: booleanAttribute,\n    });\n    /** A model's field, which should be used for http-requests */\n    public keyExp: InputSignal<KEY> = input.required();\n    /** A model's field, which should be shown in ui */\n    public displayExp: InputSignal<KEY> = input.required();\n    /** Array of selected entities */\n    public selectedEntities: InputSignalWithTransform<ENTITY[], ENTITY[]> = input.required<ENTITY[], ENTITY[]>({\n        transform: (value: unknown) => transformArrayInput(value),\n    });\n    /** Entity keys that can't be changed */\n    public readonlyEntitiesKeys: InputSignalWithTransform<ENTITY[KEY][], ENTITY[KEY][]> = input<ENTITY[KEY][], ENTITY[KEY][]>([], {\n        transform: (value: ENTITY[KEY][]) => transformArrayInput(value),\n    });\n    /** Indicates is a list of items draggable */\n    public isListDraggable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is break string pipe used */\n    public useNameBreaking: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is title case pipe used */\n    public useTitleCase: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is deleting entity button from the selected list shown */\n    public isDeleteButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is items editable */\n    public isItemsEditable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Material elements appearance */\n    public appearance: InputSignal<MatFormFieldAppearance> = input('fill' as MatFormFieldAppearance);\n\n    public readonly deleteFromSelectedAction: OutputEmitterRef<ENTITY[KEY]> = output<ENTITY[KEY]>();\n    public readonly dropAction: OutputEmitterRef<CdkDragDrop<ENTITY[]>> = output<CdkDragDrop<ENTITY[]>>();\n    public readonly changeValueAction: OutputEmitterRef<{ prev: ENTITY[KEY]; new: string }> = output<{ prev: ENTITY[KEY]; new: string }>();\n\n    /** Additional control for entity */\n    public readonly additionalControlTpl: Signal<Nullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n        RtuiDynamicSelectorItemAdditionalControlDirective,\n        {\n            read: TemplateRef,\n        }\n    );\n\n    protected onDelete(value: ENTITY[KEY]): void {\n        this.deleteFromSelectedAction.emit(value);\n    }\n\n    protected onDrop(event: CdkDragDrop<ENTITY[]>): void {\n        if (event.currentIndex !== event.previousIndex) {\n            this.dropAction.emit(event);\n        }\n    }\n\n    protected changeValue(prev: ENTITY[KEY]): void {\n        this.changeValueAction.emit({ prev, new: this.inputRef()?.value || '' });\n        this.setEditModState(null);\n    }\n\n    protected setEditModState(index: Nullable<number>): void {\n        this.editedItemIndex.set(index);\n    }\n}\n","<ng-container rtBlock=\"rtui-dynamic-selector\">\n    <div rtElem=\"list\" cdkDropList (cdkDropListDropped)=\"onDrop($event)\">\n        @for (entity of selectedEntities(); track entity[displayExp()]; let i = $index) {\n            <div cdkDrag rtElem=\"item\" [rtMod]=\"{ draggable: isListDraggable() }\" [cdkDragDisabled]=\"!isListDraggable()\">\n                @if (isListDraggable()) {\n                    <div rtElem=\"item-mover\">\n                        <div rtElem=\"item-control\">\n                            <button\n                                cdkDragHandle\n                                mat-icon-button\n                                type=\"button\"\n                                rtElem=\"item-control-button\"\n                                rtMod=\"draggable\"\n                                matTooltip=\"Hold button to drag\"\n                                matTooltipPosition=\"right\"\n                                [matTooltipDisabled]=\"isMobile()\">\n                                <mat-icon [rtIconOutlined]=\"true\">open_with</mat-icon>\n                            </button>\n                        </div>\n                    </div>\n                }\n\n                @if (editedItemIndex() === i) {\n                    <mat-form-field rtElem=\"item-input\" subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n                        <input matInput type=\"text\" [value]=\"entity[displayExp()]\" (keydown.enter)=\"changeValue(entity[displayExp()])\" />\n                    </mat-form-field>\n                } @else {\n                    <span\n                        #titleTpl\n                        rtElem=\"item-title\"\n                        matTooltipPosition=\"above\"\n                        [rtHideTooltipDirective]=\"titleTpl\"\n                        [isTooltipShown]=\"!isMobile()\"\n                        [matTooltip]=\"\n                            useNameBreaking()\n                                ? (entity[displayExp()] | entityToString | breakString)\n                                : (entity[displayExp()] | entityToString)\n                        \"\n                        [matTooltipDisabled]=\"isMobile()\">\n                        @if (useNameBreaking()) {\n                            {{\n                                useTitleCase()\n                                    ? (entity[displayExp()] | entityToString | breakString | titlecase)\n                                    : (entity[displayExp()] | entityToString | breakString)\n                            }}\n                        } @else {\n                            {{ useTitleCase() ? (entity[displayExp()] | entityToString | titlecase) : entity[displayExp()] }}\n                        }\n                    </span>\n                }\n\n                <div rtElem=\"item-controls\">\n                    @if (additionalControlTpl()) {\n                        <ng-container *ngTemplateOutlet=\"additionalControlTpl() || null; context: { $implicit: entity }\" />\n                    }\n\n                    @if (isItemsEditable()) {\n                        @if (editedItemIndex() === i) {\n                            <div rtElem=\"item-control\">\n                                <button\n                                    mat-icon-button\n                                    type=\"button\"\n                                    rtElem=\"item-control-button\"\n                                    matTooltipPosition=\"left\"\n                                    matTooltip=\"Reset\"\n                                    [matTooltipDisabled]=\"isMobile()\"\n                                    (click)=\"setEditModState(null)\">\n                                    <mat-icon [rtIconOutlined]=\"true\">refresh</mat-icon>\n                                </button>\n                            </div>\n                        }\n\n                        <div rtElem=\"item-control\">\n                            <button\n                                mat-icon-button\n                                type=\"button\"\n                                rtElem=\"item-control-button\"\n                                matTooltipPosition=\"right\"\n                                [matTooltip]=\"editedItemIndex() === i ? 'Apply' : 'Edit item'\"\n                                [matTooltipDisabled]=\"isMobile()\"\n                                (click)=\"editedItemIndex() === i ? changeValue(entity[displayExp()]) : setEditModState(i)\">\n                                <mat-icon [rtIconOutlined]=\"true\">{{ editedItemIndex() === i ? 'done' : 'edit' }}</mat-icon>\n                            </button>\n                        </div>\n                    }\n\n                    @if (isDeleteButtonShown()) {\n                        <div rtElem=\"item-control\">\n                            <button\n                                mat-icon-button\n                                type=\"button\"\n                                rtElem=\"item-control-button\"\n                                matTooltip=\"Remove the Item from the List\"\n                                matTooltipPosition=\"left\"\n                                [rtMod]=\"{ active: !readonlyEntitiesKeys().includes(entity[keyExp()]) }\"\n                                [matTooltipDisabled]=\"isMobile()\"\n                                [disabled]=\"readonlyEntitiesKeys().includes(entity[keyExp()])\"\n                                (click)=\"onDelete(entity[keyExp()])\">\n                                <mat-icon [rtIconOutlined]=\"true\">delete</mat-icon>\n                            </button>\n                        </div>\n                    }\n                </div>\n            </div>\n        }\n    </div>\n</ng-container>\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    contentChild,\n    DestroyRef,\n    Directive,\n    effect,\n    forwardRef,\n    inject,\n    Injector,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    model,\n    ModelSignal,\n    OnInit,\n    output,\n    OutputEmitterRef,\n    Signal,\n    signal,\n    TemplateRef,\n    untracked,\n    WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n    ControlValueAccessor,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ReactiveFormsModule,\n    ValidationErrors,\n    Validator,\n} from '@angular/forms';\nimport { noop } from 'rxjs';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport {\n    areArraysEqual,\n    areArraysEqualUnordered,\n    checkIsEntityInArrayByKey,\n    Nullable,\n    OVERLAY_POSITIONS,\n    RtEscapeKeyDirective,\n    sortByAlphabet,\n    transformArrayInput,\n} from '../../../../util';\nimport { RtuiDynamicSelectorListActionsComponent } from '../actions/rtui-dynamic-selector-list-actions.component';\nimport { RtuiDynamicSelectorsDirective } from '../dynamic-selectors-directive';\nimport { RtuiMultiSelectorPopupComponent } from '../multi-selector-popup/rtui-multi-selector-popup.component';\nimport { RtuiDynamicSelectorPlaceholderComponent } from '../placeholder/rtui-dynamic-selector-placeholder.component';\nimport {\n    RtuiDynamicSelectorItemAdditionalControlDirective,\n    RtuiDynamicSelectorSelectedListComponent,\n} from '../selected-list/rtui-dynamic-selector-selected-list.component';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\ninterface FormModel {\n    autocompleteControl: FormControl<Nullable<string>>;\n}\n\n/** Directive for row actions located outside a row menu button */\n@Directive({\n    selector: '[rtuiDynamicSelectorAdditionalControlDirective]',\n})\nexport class RtuiDynamicSelectorAdditionalControlDirective {}\n\n@Component({\n    selector: 'rtui-dynamic-selector',\n    templateUrl: './rtui-dynamic-selector.component.html',\n    styleUrls: ['./rtui-dynamic-selector.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        ReactiveFormsModule,\n        NgTemplateOutlet,\n        CdkOverlayOrigin,\n        CdkConnectedOverlay,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        RtEscapeKeyDirective,\n        RtuiDynamicSelectorItemAdditionalControlDirective,\n\n        // components\n        RtuiMultiSelectorPopupComponent,\n        RtuiDynamicSelectorPlaceholderComponent,\n        RtuiDynamicSelectorListActionsComponent,\n        RtuiDynamicSelectorSelectedListComponent,\n    ],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => RtuiDynamicSelectorComponent),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: RtuiDynamicSelectorComponent,\n            multi: true,\n        },\n    ],\n})\nexport class RtuiDynamicSelectorComponent<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>>\n    extends RtuiDynamicSelectorsDirective\n    implements ControlValueAccessor, Validator, OnInit\n{\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #injector: Injector = inject(Injector);\n    readonly #fb: FormBuilder = inject(FormBuilder);\n\n    /** Config for overlay selector */\n    protected readonly connectedOverlayPositions: ConnectedPosition[] = [...OVERLAY_POSITIONS];\n\n    public form: FormGroup<FormModel> = this.#fb.group<FormModel>({\n        autocompleteControl: this.#fb.control<Nullable<string>>(null), // used only for UI\n    });\n    /** Target element for overlay selector */\n    public selectedOverlayTrigger: Nullable<CdkOverlayOrigin> = null;\n\n    /** A model's field which should be used for http-requests */\n    public keyExp: InputSignal<KEY> = input.required();\n    /** A model's field which should be shown in ui */\n    public displayExp: InputSignal<KEY> = input.required();\n    /** All entities available entities */\n    public entities: InputSignalWithTransform<ENTITY[], ENTITY[]> = input.required<ENTITY[], ENTITY[]>({\n        transform: (value: unknown) => transformArrayInput(value),\n    });\n    /** Navigation button title for popup actions */\n    public navigateButtonTitle: InputSignal<string> = input<string>('');\n    /** Navigation button link for popup actions */\n    public navigateLink: InputSignal<string> = input<string>('');\n    /** Entity keys that can't be changed */\n    public readonlyEntitiesKeys: InputSignalWithTransform<ENTITY[KEY][], ENTITY[KEY][]> = input<ENTITY[KEY][], ENTITY[KEY][]>([], {\n        transform: (value: ENTITY[KEY][]) => transformArrayInput(value),\n    });\n    /** Selected entities */\n    public chosenEntities: ModelSignal<ENTITY[]> = model<ENTITY[]>([]);\n    /** Indicates is selection available */\n    public isSelectionAvailable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is placeholder shown */\n    public isPlaceholderShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates that a list of entities is being loading */\n    public loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates that a list of entities is being pending */\n    public pending: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates that a list of entities is being fetching */\n    public fetching: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates lazy loading is used */\n    public isLazyLoad: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates local search is used */\n    public isLocalSearch: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is change multi select mode toggle shown */\n    public isMultiToggleShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is Select all button shown */\n    public isSelectAllButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is Open popup button shown */\n    public isOpenPopupButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Init search term value */\n    public searchTerm: InputSignal<string> = input('');\n    /** Indicates that an additional control has been changed */\n    public additionalControlChanged: InputSignal<boolean> = input(false);\n\n    /** Output search action */\n    public readonly searchAction: OutputEmitterRef<string> = output<string>();\n    /** Output scroll action, needed for lazy loading */\n    public readonly scrollAction: OutputEmitterRef<void> = output<void>();\n    /** Output temporary selection action, needed for store values */\n    public readonly temporarySelectAction: OutputEmitterRef<ENTITY[]> = output<ENTITY[]>();\n    /** Output reset list to initial value action */\n    public readonly resetAction: OutputEmitterRef<void> = output<void>();\n    /** Output selection change action */\n    public readonly selectionChangeAction: OutputEmitterRef<ENTITY[]> = output<ENTITY[]>();\n\n    /** List of entities for local processing */\n    readonly #entities: WritableSignal<ENTITY[]> = signal([]);\n    readonly #autocompleteControlValue: WritableSignal<string> = signal('');\n    /** Initial entities ids */\n    readonly #initialEntityIds: WritableSignal<Array<ENTITY[KEY]>> = signal([]);\n    /** Current selected entities ids */\n    readonly #selectedEntityIds: WritableSignal<Array<ENTITY[KEY]>> = signal([]);\n    /** Current selected entities */\n    public readonly selectedEntities: Signal<ENTITY[]> = computed(() => {\n        return this.#selectedEntityIds()\n            .map((id: ENTITY[KEY]) => this.entities().find((el: ENTITY) => id === el[this.keyExp()]))\n            .filter((el: Nullable<ENTITY>): el is ENTITY => !!el);\n    });\n    /** Indicates is popup selector visible */\n    public readonly isSelectionControlShown: WritableSignal<boolean> = signal(false);\n    /** Indicates is no data */\n    public readonly isNoDataPlaceholderShown: Signal<boolean> = computed(() => {\n        return !this.selectedEntities().length && !this.searchTerm() && (!this.entitiesToSelect()?.length || !this.isSelectionAvailable());\n    });\n    /** Indicates reset selected button is disabled */\n    public readonly isResetButtonDisabled: Signal<boolean> = computed(() => {\n        return areArraysEqual(this.#selectedEntityIds(), this.#initialEntityIds()) && !this.additionalControlChanged();\n    });\n    /** Indicates clear selected button is disabled */\n    public readonly isClearButtonDisabled: Signal<boolean> = computed(() => {\n        return areArraysEqualUnordered(this.#selectedEntityIds(), this.readonlyEntitiesKeys()) && !this.additionalControlChanged();\n    });\n    /** Entities can be chosen, except selected on init */\n    public readonly entitiesToSelect: Signal<ENTITY[]> = computed(() => {\n        return this.#entities()\n            .filter((entity: ENTITY) => !checkIsEntityInArrayByKey<ENTITY, KEY>(this.selectedEntities(), entity, this.keyExp()))\n            .filter((entity: ENTITY) => {\n                return (\n                    (typeof entity[this.displayExp()] === 'string' || typeof entity[this.displayExp()] === 'number') &&\n                    entity[this.displayExp()]?.toString().toLowerCase().includes(this.#autocompleteControlValue().toLowerCase())\n                );\n            })\n            .sort((a: ENTITY, b: ENTITY) => {\n                return sortByAlphabet(a, b, this.displayExp());\n            });\n    });\n\n    /** Additional control for entity */\n    public readonly additionalControlTpl: Signal<Nullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n        RtuiDynamicSelectorAdditionalControlDirective,\n        {\n            read: TemplateRef,\n        }\n    );\n\n    /** Selected entities ids for compare */\n    #selectedEntityIdsForCompare: Array<ENTITY[KEY]> = [];\n    /** Indicates is selector init */\n    #isFormInit: boolean = false;\n\n    /** Value accessor actions */\n    #onTouched: () => void = noop;\n    #onChanged: (value: Array<ENTITY[KEY]>) => void = noop;\n\n    public ngOnInit(): void {\n        this.form.controls.autocompleteControl.valueChanges\n            .pipe(distinctUntilChanged(), takeUntilDestroyed(this.#destroyRef))\n            .subscribe((value: Nullable<string>): void => {\n                this.#autocompleteControlValue.set(value || '');\n            });\n\n        this.form.statusChanges\n            .pipe(\n                filter(() => typeof this.#onTouched === 'function'),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe((): void => {\n                this.#onTouched();\n            });\n\n        /** Set list of selected entities if parent use ModelSignal instead of FormControl */\n        toObservable(this.chosenEntities, { injector: this.#injector })\n            .pipe(\n                filter((list: ENTITY[]) => !!list?.length),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe((list: ENTITY[]) => {\n                const chosenListIds: ReadonlyArray<ENTITY[KEY]> = list.map((entity: ENTITY) => entity[this.keyExp()]);\n                const selectedEntityIds: ReadonlyArray<ENTITY[KEY]> = this.#selectedEntityIds();\n                const chosenListIdsForCompare: ENTITY[KEY][] = [...chosenListIds].sort();\n                const selectedEntityIdsForCompare: ENTITY[KEY][] = [...selectedEntityIds].sort();\n\n                if (!areArraysEqual(chosenListIdsForCompare, selectedEntityIdsForCompare)) {\n                    this.#selectedEntityIds.set([...chosenListIds]);\n                    this.#initialEntityIds.set([...chosenListIds]);\n                }\n            });\n\n        /** Set list of selected entities ids for compare */\n        effect(\n            () => {\n                const selectedEntityIds: Array<ENTITY[KEY]> = this.selectedEntities().map((entity: ENTITY) => {\n                    return entity[this.keyExp()];\n                });\n\n                if (!areArraysEqual(this.#selectedEntityIdsForCompare, selectedEntityIds) && this.#isFormInit) {\n                    this.#selectedEntityIdsForCompare = selectedEntityIds;\n                    this.#changeControlValue(selectedEntityIds);\n                    this.chosenEntities.set(untracked(() => this.selectedEntities()));\n                    this.selectionChangeAction.emit(untracked(() => this.selectedEntities()));\n                } else if (!this.#isFormInit && this.#entities().length) {\n                    this.#selectedEntityIdsForCompare = selectedEntityIds;\n                    this.#isFormInit = true;\n                }\n            },\n            { injector: this.#injector }\n        );\n\n        /** Set list of values */\n        effect(\n            () => {\n                if (this.entities() && Array.isArray(this.entities())) {\n                    if (!areArraysEqual(this.entities(), this.#entities())) {\n                        this.#entities.set(this.entities());\n                    }\n                }\n            },\n            { injector: this.#injector }\n        );\n    }\n\n    // ––––––––––––– Value Accessor –––––––––––––––\n\n    public writeValue(value: Array<ENTITY[KEY]>): void {\n        if (Array.isArray(value)) {\n            if (value.length) {\n                this.#selectedEntityIds.set(value);\n                this.#initialEntityIds.set(value);\n            }\n        }\n    }\n\n    public registerOnChange(fn: (value: Array<ENTITY[KEY]>) => void): void {\n        this.#onChanged = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.#onTouched = fn;\n    }\n\n    public validate(): ValidationErrors | null {\n        return this.form.valid ? null : { formInvalid: true };\n    }\n\n    public registerOnValidatorChange(fn: () => void): void {\n        this.#onTouched = fn;\n    }\n\n    // ––––––––––––– Actions –––––––––––––––\n\n    /** Show popup selector */\n    public showSelectionControl(trigger: CdkOverlayOrigin): void {\n        this.selectedOverlayTrigger = trigger;\n        this.isSelectionControlShown.set(true);\n    }\n\n    /** Hide popup selector */\n    public hideSelectionControl(): void {\n        this.isSelectionControlShown.set(false);\n    }\n\n    /** Add entity to or delete entity from list of selected */\n    public toggleEntity(keyValue: ENTITY[KEY]): void {\n        const entity: Nullable<ENTITY> = this.entities().find((entity: ENTITY) => {\n            return entity[this.keyExp()] === keyValue;\n        });\n\n        if (!entity) {\n            return;\n        }\n\n        const isRemoveSelected: boolean = !!this.selectedEntities().find((selectedEntity: ENTITY) => {\n            return selectedEntity[this.keyExp()] === keyValue;\n        });\n\n        if (isRemoveSelected) {\n            this.#selectedEntityIds.update((selectedEntityIds: ENTITY[KEY][]) => {\n                return selectedEntityIds.filter((id: ENTITY[KEY]) => {\n                    return id !== keyValue;\n                });\n            });\n        } else {\n            this.#selectedEntityIds.update((selectedEntityIds: ENTITY[KEY][]) => {\n                return [...selectedEntityIds, entity[this.keyExp()]];\n            });\n\n            this.form.controls.autocompleteControl.setValue(null);\n            this.hideSelectionControl();\n        }\n    }\n\n    /** Clear list of selected entities ids */\n    public clearList(): void {\n        this.#selectedEntityIds.update((list: ENTITY[KEY][]) => {\n            return list.filter((el: ENTITY[KEY]) => this.readonlyEntitiesKeys().includes(el));\n        });\n    }\n\n    /** Reset list of selected entities ids to init value */\n    public resetList(): void {\n        this.#selectedEntityIds.set([...this.#initialEntityIds()]);\n        this.resetAction.emit();\n    }\n\n    /** Proceed selected entities ids */\n    public select(values: ENTITY[KEY][]): void {\n        if (this.isSingleSelection()) {\n            const entity: Nullable<ENTITY> = this.entities().find((entity: ENTITY) => {\n                return entity[this.keyExp()] === values[0];\n            });\n\n            if (entity) {\n                this.#selectedEntityIds.set([entity[this.keyExp()]]);\n                this.hideSelectionControl();\n            }\n        } else {\n            values.forEach((value: ENTITY[KEY]) => this.toggleEntity(value));\n        }\n    }\n\n    /** Scroll action, needed for lazy load mode */\n    public scroll(): void {\n        this.scrollAction.emit();\n    }\n\n    /** Search action */\n    public search(searchTerm: string): void {\n        this.searchAction.emit(searchTerm);\n    }\n\n    /** Set temporary selection, needed for lazy load mode */\n    public setTemporarySelection(values: ENTITY[]): void {\n        this.temporarySelectAction.emit(values);\n    }\n\n    /** Proceed move items in list */\n    public onDrop(event: CdkDragDrop<ENTITY[]>): void {\n        const updatedList: ENTITY[] = untracked(() => this.selectedEntities());\n        moveItemInArray(updatedList, event.previousIndex, event.currentIndex);\n        this.#entities.set(updatedList);\n        this.#selectedEntityIds.set(updatedList.map((el: ENTITY) => el[this.keyExp()]));\n    }\n\n    // ––––––––––––– Private Methods –––––––––––––––\n\n    /** Emit change control action */\n    #changeControlValue(selectedEntityIds: Array<ENTITY[KEY]>): void {\n        if (Array.isArray(selectedEntityIds) && typeof this.#onChanged === 'function') {\n            this.#onChanged(selectedEntityIds);\n        }\n    }\n}\n","<form [formGroup]=\"form\">\n    <ng-container rtBlock=\"rtui-dynamic-selector\">\n        @if (isNoDataPlaceholderShown()) {\n            <rtui-dynamic-selector-placeholder\n                description=\"There are no available items to choose\"\n                icon=\"warning\"\n                [isButtonShow]=\"false\"\n                [isIconOutlined]=\"true\" />\n        } @else {\n            <rtui-dynamic-selector-selected-list\n                [isMobile]=\"isMobile()\"\n                [keyExp]=\"keyExp()\"\n                [displayExp]=\"displayExp()\"\n                [selectedEntities]=\"selectedEntities()\"\n                [readonlyEntitiesKeys]=\"readonlyEntitiesKeys()\"\n                [isListDraggable]=\"isListDraggable()\"\n                [useNameBreaking]=\"useNameBreaking()\"\n                [useTitleCase]=\"useTitleCase()\"\n                [isDeleteButtonShown]=\"isDeleteButtonShown()\"\n                (dropAction)=\"onDrop($event)\"\n                (deleteFromSelectedAction)=\"toggleEntity($event)\">\n                @if (additionalControlTpl()) {\n                    <ng-container *rtuiDynamicSelectorItemAdditionalControlDirective=\"let entity\">\n                        <ng-template *ngTemplateOutlet=\"additionalControlTpl() || null; context: { $implicit: entity }\" />\n                    </ng-container>\n                }\n            </rtui-dynamic-selector-selected-list>\n\n            @if ((entitiesToSelect()?.length || !isLocalSearch()) && isSelectionAvailable()) {\n                @if (isPlaceholderShown()) {\n                    <rtui-dynamic-selector-placeholder\n                        [icon]=\"placeholderIcon()\"\n                        [description]=\"placeholderDescription()\"\n                        [buttonTitle]=\"buttonTitle()\"\n                        [disabled]=\"disabled()\"\n                        [isIconOutlined]=\"isPlaceholderIconOutlined()\"\n                        (submitAction)=\"showSelectionControl($event)\" />\n                } @else {\n                    <div rtElem=\"actions\">\n                        @if (isOpenPopupButtonShown() && this.entitiesToSelect()?.length) {\n                            <button\n                                #trigger=\"cdkOverlayOrigin\"\n                                cdkOverlayOrigin\n                                type=\"button\"\n                                class=\"c-button c-button--txt-base--size-sm\"\n                                [class.--disabled]=\"disabled()\"\n                                [disabled]=\"disabled()\"\n                                (click)=\"showSelectionControl(trigger)\">\n                                {{ buttonTitle() }}\n                            </button>\n                        }\n\n                        <ng-template [ngTemplateOutlet]=\"listActionsTpl\" />\n                    </div>\n                }\n\n                @if (selectedOverlayTrigger) {\n                    <ng-template\n                        rtEscapeKey\n                        cdkConnectedOverlay\n                        cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n                        [cdkConnectedOverlayHasBackdrop]=\"true\"\n                        [cdkConnectedOverlayOpen]=\"isSelectionControlShown()\"\n                        [cdkConnectedOverlayDisableClose]=\"true\"\n                        [cdkConnectedOverlayOrigin]=\"selectedOverlayTrigger\"\n                        [cdkConnectedOverlayPositions]=\"connectedOverlayPositions\"\n                        (backdropClick)=\"hideSelectionControl()\"\n                        (escapeKeyAction)=\"hideSelectionControl()\">\n                        <rtui-multi-selector-popup\n                            [navigateButtonTitle]=\"navigateButtonTitle()\"\n                            [navigateLink]=\"navigateLink()\"\n                            [entitiesToSelect]=\"entitiesToSelect()\"\n                            [appearance]=\"appearance()\"\n                            [keyExp]=\"keyExp()\"\n                            [displayExp]=\"displayExp()\"\n                            [isMobile]=\"isMobile()\"\n                            [isSingleSelection]=\"isSingleSelection()\"\n                            [isSelectAllButtonShown]=\"isSelectAllButtonShown()\"\n                            [loading]=\"loading()\"\n                            [fetching]=\"fetching()\"\n                            [useNameBreaking]=\"useNameBreaking()\"\n                            [searchTerm]=\"searchTerm()\"\n                            [isLazyLoad]=\"isLazyLoad()\"\n                            [isLocalSearch]=\"isLocalSearch()\"\n                            [isMultiToggleShown]=\"isMultiToggleShown()\"\n                            (searchAction)=\"search($event)\"\n                            (scrollAction)=\"scroll()\"\n                            (temporarySelectAction)=\"setTemporarySelection($event)\"\n                            (closeAction)=\"hideSelectionControl()\"\n                            (submitAction)=\"select($event)\" />\n                    </ng-template>\n                }\n            } @else if (isSelectionAvailable()) {\n                <div rtElem=\"actions\">\n                    <ng-template [ngTemplateOutlet]=\"listActionsTpl\" />\n                </div>\n            }\n        }\n    </ng-container>\n</form>\n\n<ng-template #listActionsTpl>\n    <rtui-dynamic-selector-list-actions\n        [isMobile]=\"isMobile()\"\n        [disabled]=\"disabled()\"\n        [isResetButtonDisabled]=\"isResetButtonDisabled()\"\n        [isClearButtonDisabled]=\"isClearButtonDisabled()\"\n        (resetAction)=\"resetList()\"\n        (clearAction)=\"clearList()\" />\n</ng-template>\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChild,\n    DestroyRef,\n    Directive,\n    forwardRef,\n    inject,\n    input,\n    InputSignalWithTransform,\n    model,\n    ModelSignal,\n    OnInit,\n    Signal,\n    signal,\n    TemplateRef,\n    untracked,\n    WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n    ControlValueAccessor,\n    FormBuilder,\n    FormControl,\n    FormGroup,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ReactiveFormsModule,\n    ValidationErrors,\n    Validator,\n} from '@angular/forms';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatInput, MatLabel } from '@angular/material/input';\nimport { noop } from 'rxjs';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { areArraysEqual, Nullable, transformArrayInput, transformStringInput } from '../../../../util';\nimport {\n    RtuiDynamicSelectorItemAdditionalControlDirective,\n    RtuiDynamicSelectorListActionsComponent,\n    RtuiDynamicSelectorPlaceholderComponent,\n    RtuiDynamicSelectorSelectedListComponent,\n} from '../.';\nimport { RtuiDynamicSelectorsDirective } from '../dynamic-selectors-directive';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\ninterface FormModel {\n    control: FormControl<string[]>;\n    controlForUi: FormControl<Nullable<string>>;\n}\n\n/** Directive for row actions located outside a row menu button */\n@Directive({\n    selector: '[rtuiDynamicInputAdditionalControlDirective]',\n})\nexport class RtuiDynamicInputAdditionalControlDirective {}\n\n@Component({\n    selector: 'rtui-dynamic-input',\n    templateUrl: './rtui-dynamic-input.component.html',\n    styleUrls: ['./rtui-dynamic-input.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n        ReactiveFormsModule,\n\n        // material\n        MatFormField,\n        MatLabel,\n        MatInput,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        RtuiDynamicSelectorItemAdditionalControlDirective,\n\n        // components\n        RtuiDynamicSelectorPlaceholderComponent,\n        RtuiDynamicSelectorListActionsComponent,\n        RtuiDynamicSelectorSelectedListComponent,\n    ],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => RtuiDynamicInputComponent),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: RtuiDynamicInputComponent,\n            multi: true,\n        },\n    ],\n})\nexport class RtuiDynamicInputComponent extends RtuiDynamicSelectorsDirective implements ControlValueAccessor, Validator, OnInit {\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #fb: FormBuilder = inject(FormBuilder);\n\n    public form: FormGroup<FormModel> = this.#fb.group<FormModel>({\n        control: this.#fb.nonNullable.control<string[]>([]),\n        controlForUi: this.#fb.control<Nullable<string>>(null), // used only for UI\n    });\n\n    /** Indicates is placeholder shown */\n    public isPlaceholderShown: ModelSignal<Nullable<boolean>> = model<Nullable<boolean>>(true);\n    /** Indicates is inputs-editable */\n    public isInputsEditable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Input label */\n    public inputLabel: InputSignalWithTransform<string, unknown> = input<string, unknown>('', {\n        transform: transformStringInput,\n    });\n    /** Input placeholder */\n    public inputPlaceholder: InputSignalWithTransform<string, unknown> = input<string, unknown>('', {\n        transform: transformStringInput,\n    });\n    /** Entity keys that can't be changed */\n    public readonlyEntitiesKeys: InputSignalWithTransform<string[], string[]> = input<string[], string[]>([], {\n        transform: (value: string[]) => transformArrayInput(value),\n    });\n\n    /** Array of selected entities */\n    public readonly selectedEntities: WritableSignal<Array<{ id: string }>> = signal([]);\n    /** Indicates is input control shown */\n    public readonly isInputControlShown: WritableSignal<boolean> = signal(false);\n    /** Indicates the reset changes button is disabled */\n    public readonly isResetButtonDisabled: WritableSignal<boolean> = signal(false);\n\n    /** Initial entities */\n    readonly #initialEntities: WritableSignal<string[]> = signal([]);\n\n    /** Additional control for entity */\n    public readonly additionalControlTpl: Signal<Nullable<TemplateRef<{ $implicit: string }>>> = contentChild(\n        RtuiDynamicInputAdditionalControlDirective,\n        {\n            read: TemplateRef,\n        }\n    );\n\n    #onTouched: () => void = noop;\n    #onChanged: (value: string[]) => void = noop;\n\n    public ngOnInit(): void {\n        this.form.controls.control.valueChanges\n            .pipe(\n                filter((value: string[]) => Array.isArray(value) && typeof this.#onChanged === 'function'),\n                distinctUntilChanged(),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe((value: string[]): void => {\n                this.#onChanged(value);\n                this.#setResetListButtonState(value);\n                this.selectedEntities.set(value.map((el: string) => ({ id: el })));\n            });\n\n        this.form.controls.control.statusChanges\n            .pipe(\n                filter(() => typeof this.#onTouched === 'function'),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe((): void => {\n                this.#onTouched();\n            });\n    }\n\n    // ––––––––––––– Value Accessor –––––––––––––––\n\n    public writeValue(value: string[]): void {\n        if (Array.isArray(value)) {\n            if (value.length) {\n                this.hideSelectionControl();\n                this.form.controls.control.setValue(value, { emitEvent: false });\n                this.#initialEntities.set(value);\n                this.selectedEntities.set(value.map((el: string) => ({ id: el })));\n                this.#setResetListButtonState(value);\n            } else {\n                this.showSelectionControl();\n            }\n        }\n    }\n\n    public registerOnChange(fn: (value: string[]) => void): void {\n        this.#onChanged = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.#onTouched = fn;\n    }\n\n    public validate(): ValidationErrors | null {\n        return this.form.valid ? null : { formInvalid: true };\n    }\n\n    public registerOnValidatorChange(fn: () => void): void {\n        this.#onTouched = fn;\n    }\n\n    // ––––––––––––– Actions –––––––––––––––\n\n    /** Hide placeholder */\n    public hidePlaceholder(): void {\n        this.showSelectionControl();\n        this.isPlaceholderShown.set(false);\n    }\n\n    /** Show control */\n    public showSelectionControl(): void {\n        this.isInputControlShown.set(true);\n    }\n\n    /** Hide control */\n    public hideSelectionControl(): void {\n        this.isInputControlShown.set(false);\n    }\n\n    /** Clear list of selected entities ids */\n    public clearList(): void {\n        this.form.controls.control.setValue([]);\n    }\n\n    /** Reset a list of selected entities ids to init value */\n    public resetList(): void {\n        this.form.controls.control.setValue(this.#initialEntities());\n        this.hideSelectionControl();\n    }\n\n    /** Add or delete entity */\n    public toggleEntity(keyValue: string): void {\n        if (keyValue) {\n            const selectedEntityIds: string[] = this.form.value.control || [];\n\n            if (selectedEntityIds.includes(keyValue)) {\n                this.form.controls.control.setValue(selectedEntityIds.filter((id: string) => id !== keyValue));\n            } else {\n                this.form.controls.control.setValue([...selectedEntityIds, keyValue]);\n            }\n        }\n    }\n\n    /** Change entity value */\n    public changeEntity(data: { prev: string; new: string }): void {\n        this.form.controls.control.setValue(this.form.controls.control.value.map((el: string) => (el === data.prev ? data.new : el)));\n    }\n\n    /** Add new item */\n    public onAddEntity(): void {\n        if (this.form.controls.controlForUi.value && this.form.controls.control.value.includes(this.form.controls.controlForUi.value)) {\n            this.form.controls.controlForUi.setValue(null);\n            this.hideSelectionControl();\n        } else if (this.form.controls.controlForUi.value) {\n            this.toggleEntity(this.form.controls.controlForUi.value);\n            this.form.controls.controlForUi.setValue(null);\n            this.hideSelectionControl();\n        }\n    }\n\n    /** Process move items in a list */\n    public onDrop(event: CdkDragDrop<Array<{ id: string }>>): void {\n        const updatedList: Array<{ id: string }> = untracked(() => this.selectedEntities());\n        moveItemInArray(updatedList, event.previousIndex, event.currentIndex);\n        this.form.controls.control.patchValue(updatedList.map((el: { id: string }) => el.id));\n    }\n\n    /** Set the reset list button state */\n    #setResetListButtonState(value: string[]): void {\n        this.isResetButtonDisabled.set(areArraysEqual(this.#initialEntities(), value));\n    }\n}\n","<form [formGroup]=\"form\">\n    <ng-container rtBlock=\"rtui-dynamic-selector\">\n        @if (isPlaceholderShown()) {\n            <rtui-dynamic-selector-placeholder\n                [icon]=\"placeholderIcon()\"\n                [description]=\"placeholderDescription()\"\n                [buttonTitle]=\"buttonTitle()\"\n                [isIconOutlined]=\"isPlaceholderIconOutlined()\"\n                (submitAction)=\"hidePlaceholder()\" />\n        } @else {\n            <rtui-dynamic-selector-selected-list\n                keyExp=\"id\"\n                displayExp=\"id\"\n                [appearance]=\"appearance()\"\n                [isMobile]=\"isMobile()\"\n                [selectedEntities]=\"selectedEntities()\"\n                [readonlyEntitiesKeys]=\"readonlyEntitiesKeys()\"\n                [isListDraggable]=\"isListDraggable()\"\n                [useNameBreaking]=\"useNameBreaking()\"\n                [isDeleteButtonShown]=\"isDeleteButtonShown()\"\n                [isItemsEditable]=\"isInputsEditable()\"\n                (changeValueAction)=\"changeEntity($event)\"\n                (dropAction)=\"onDrop($event)\"\n                (deleteFromSelectedAction)=\"toggleEntity($event)\">\n                @if (additionalControlTpl()) {\n                    <ng-container *rtuiDynamicSelectorItemAdditionalControlDirective=\"let entity\">\n                        <ng-template *ngTemplateOutlet=\"additionalControlTpl() || null; context: { $implicit: entity }\" />\n                    </ng-container>\n                }\n            </rtui-dynamic-selector-selected-list>\n\n            @if (isInputControlShown()) {\n                <mat-form-field [appearance]=\"appearance()\" [style.width.%]=\"100\">\n                    <mat-label>{{ inputLabel() }}</mat-label>\n\n                    <input\n                        matInput\n                        type=\"text\"\n                        formControlName=\"controlForUi\"\n                        [placeholder]=\"inputPlaceholder()\"\n                        (keydown.enter)=\"onAddEntity()\"\n                        (focusout)=\"onAddEntity()\" />\n                </mat-form-field>\n            }\n\n            <div rtElem=\"actions\">\n                @if (!isInputControlShown() && !isSingleSelection()) {\n                    <button type=\"button\" class=\"c-button c-button--txt-base--size-sm\" (click)=\"showSelectionControl()\">\n                        {{ buttonTitle() }}\n                    </button>\n                }\n\n                <rtui-dynamic-selector-list-actions\n                    [isMobile]=\"isMobile()\"\n                    [isResetButtonDisabled]=\"isResetButtonDisabled()\"\n                    [isClearButtonDisabled]=\"!form.controls.control.value?.length\"\n                    (resetAction)=\"resetList()\"\n                    (clearAction)=\"clearList()\" />\n            </div>\n        }\n    </ng-container>\n</form>\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, OnInit, Signal, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { areArraysEqual, ASIDE_REF, AsideRef, BreakpointService, Nullable, RtIconOutlinedDirective } from '../../../../util';\nimport { RtuiAsideContainerComponent, RtuiAsideContainerHeaderDirective } from '../../../aside';\nimport { RtuiDynamicSelectorAdditionalControlDirective, RtuiDynamicSelectorComponent } from '../../../dynamic-selectors';\nimport { RtuiToggleComponent } from '../../../toggle';\nimport { ITable } from '../../util';\n\n@Component({\n    selector: 'rtui-test-aside',\n    templateUrl: './rt-table-config-aside.component.html',\n    styleUrls: ['./rt-table-config-aside.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        ReactiveFormsModule,\n        MatTooltip,\n        MatIcon,\n        MatIconButton,\n\n        // directives\n        BlockDirective,\n        ElemDirective,\n        RtuiAsideContainerHeaderDirective,\n        RtuiDynamicSelectorAdditionalControlDirective,\n        RtIconOutlinedDirective,\n\n        // standalone components\n        RtuiAsideContainerComponent,\n        RtuiDynamicSelectorComponent,\n        RtuiToggleComponent,\n    ],\n    providers: [BreakpointService],\n})\nexport class RtTableConfigAsideComponent<ENTITY_TYPE> implements OnInit {\n    readonly #breakpointService: BreakpointService = inject(BreakpointService);\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #fb: FormBuilder = inject(FormBuilder);\n\n    public form: FormGroup<ITable.Config.Form<ENTITY_TYPE>> = this.#fb.group({\n        isVerticalScrollbarShown: this.#fb.nonNullable.control<boolean>(false),\n        isHorizontalScrollbarShown: this.#fb.nonNullable.control<boolean>(false),\n        columns: this.#fb.nonNullable.control<(keyof ENTITY_TYPE)[]>([]),\n    });\n\n    public readonly asideRef: AsideRef<ITable.Config.Data<ENTITY_TYPE>, ITable.Config.Data<ENTITY_TYPE>> = inject(ASIDE_REF) as AsideRef<\n        ITable.Config.Data<ENTITY_TYPE>,\n        ITable.Config.Data<ENTITY_TYPE>\n    >;\n\n    public readonly selectedColumns: WritableSignal<ITable.Column<ENTITY_TYPE>[]> = signal(this.asideRef.data.columns);\n    public readonly isMobile: Signal<boolean> = computed(() => {\n        return !!this.#breakpointService.isMobile();\n    });\n    public readonly isVisibilityChanged: Signal<boolean> = computed(() => {\n        const initValues: (keyof ENTITY_TYPE)[] = this.asideRef.data.columns\n            .filter((el: ITable.Column<ENTITY_TYPE>) => el.hidden)\n            .map((el: ITable.Column<ENTITY_TYPE>) => el.propName);\n        const currentValues: (keyof ENTITY_TYPE)[] = this.selectedColumns()\n            .filter((el: ITable.Column<ENTITY_TYPE>) => el.hidden)\n            .map((el: ITable.Column<ENTITY_TYPE>) => el.propName);\n        return !areArraysEqual(initValues.sort(), currentValues.sort());\n    });\n    public readonly isOrderChanged: Signal<boolean> = computed(() => {\n        const initValues: (keyof ENTITY_TYPE)[] = this.asideRef.data.columns.map((el: ITable.Column<ENTITY_TYPE>) => el.propName);\n        const currentValues: (keyof ENTITY_TYPE)[] = this.selectedColumns().map((el: ITable.Column<ENTITY_TYPE>) => el.propName);\n        return !areArraysEqual(initValues, currentValues);\n    });\n\n    public ngOnInit(): void {\n        this.form.patchValue(\n            {\n                isVerticalScrollbarShown: this.asideRef.data?.isVerticalScrollbarShown,\n                isHorizontalScrollbarShown: this.asideRef.data?.isHorizontalScrollbarShown,\n                columns: this.asideRef.data.columns.map((el: ITable.Column<ENTITY_TYPE>) => el.propName),\n            },\n            { emitEvent: false }\n        );\n        this.form.valueChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(\n            (\n                value: Partial<{\n                    isVerticalScrollbarShown: boolean;\n                    isHorizontalScrollbarShown: boolean;\n                    columns: (keyof ENTITY_TYPE)[];\n                }>\n            ) => {\n                const updatedList: (ITable.Column<ENTITY_TYPE> & { orderIndex: number })[] = [];\n                value?.columns?.forEach((item: keyof ENTITY_TYPE, index: number) => {\n                    const currentItem: Nullable<ITable.Column<ENTITY_TYPE>> = this.selectedColumns().find(\n                        (el: ITable.Column<ENTITY_TYPE>) => el.propName === item\n                    );\n                    if (currentItem) {\n                        updatedList.push({ ...currentItem, orderIndex: index });\n                    }\n                });\n                this.selectedColumns.set(\n                    updatedList.sort(\n                        (a: ITable.Column<ENTITY_TYPE> & { orderIndex: number }, b: ITable.Column<ENTITY_TYPE> & { orderIndex: number }) =>\n                            a.orderIndex - b.orderIndex\n                    )\n                );\n            }\n        );\n    }\n\n    public save(): void {\n        this.asideRef.close({\n            isVerticalScrollbarShown: this.form.controls.isVerticalScrollbarShown.value,\n            isHorizontalScrollbarShown: this.form.controls.isHorizontalScrollbarShown.value,\n            columns: this.selectedColumns(),\n        });\n    }\n\n    public cancel(): void {\n        this.asideRef.close();\n    }\n\n    public visibilityChange(entity: ITable.Column<ENTITY_TYPE>): void {\n        this.selectedColumns.update((list: ITable.Column<ENTITY_TYPE>[]) => {\n            return list.map((el: ITable.Column<ENTITY_TYPE>) => {\n                return entity.propName === el.propName ? { ...el, hidden: !el.hidden } : el;\n            });\n        });\n    }\n}\n","<rtui-aside-container\n    [isMobile]=\"isMobile()\"\n    [pending]=\"false\"\n    [isSubmitButtonDisabled]=\"!isVisibilityChanged() && !isOrderChanged() && !form.dirty\"\n    (submitAction)=\"save()\"\n    (cancelAction)=\"cancel()\">\n    <ng-container *rtuiAsideHeader rtBlock=\"c-aside-title\">\n        <div rtElem=\"txt\">Edit table configuration</div>\n        <div rtElem=\"addition\">Change columns visibility and order, show(hide) scrollbar</div>\n    </ng-container>\n    <form rtBlock=\"c-form\" [formGroup]=\"form\">\n        <div rtElem=\"item\">\n            <div rtElem=\"controls\">\n                <!-- Vertical scrollbar -->\n                <div rtElem=\"control-item\">\n                    <rtui-toggle formControlName=\"isVerticalScrollbarShown\" label=\"Vertical scrollbar shown\" />\n                </div>\n            </div>\n\n            <div rtElem=\"controls\">\n                <!-- Horizontal scrollbar -->\n                <div rtElem=\"control-item\">\n                    <rtui-toggle formControlName=\"isHorizontalScrollbarShown\" label=\"Horizontal scrollbar shown\" />\n                </div>\n            </div>\n\n            <div rtElem=\"controls\">\n                <!-- Columns config -->\n                <div rtElem=\"control-item\">\n                    <rtui-dynamic-selector\n                        keyExp=\"propName\"\n                        displayExp=\"displayName\"\n                        formControlName=\"columns\"\n                        [entities]=\"selectedColumns()\"\n                        [isMobile]=\"isMobile()\"\n                        [useNameBreaking]=\"true\"\n                        [useTitleCase]=\"true\"\n                        [isSelectionAvailable]=\"false\"\n                        [isDeleteButtonShown]=\"false\"\n                        [isListDraggable]=\"true\">\n                        <ng-container *rtuiDynamicSelectorAdditionalControlDirective=\"let entity\" rtBlock=\"rtui-dynamic-selector\">\n                            <div rtElem=\"item-control\">\n                                <button\n                                    mat-icon-button\n                                    type=\"button\"\n                                    aria-label=\"Icon-button for visibility indication\"\n                                    rtElem=\"item-control-button\"\n                                    matTooltip=\"{{ entity.hidden ? 'Hidden, click to show' : 'Shown, click to hide' }}\"\n                                    matTooltipPosition=\"left\"\n                                    [matTooltipDisabled]=\"isMobile()\"\n                                    (click)=\"visibilityChange(entity)\">\n                                    <mat-icon [rtIconOutlined]=\"true\">\n                                        {{ entity.hidden ? 'visibility_off' : 'visibility' }}\n                                    </mat-icon>\n                                </button>\n                            </div>\n                        </ng-container>\n                    </rtui-dynamic-selector>\n                </div>\n            </div>\n        </div>\n    </form>\n</rtui-aside-container>\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChild,\n    DestroyRef,\n    Directive,\n    effect,\n    inject,\n    Injector,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    OnInit,\n    output,\n    OutputEmitterRef,\n    Signal,\n    signal,\n    TemplateRef,\n    Type,\n    WritableSignal,\n} from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatMiniFabButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatFormField, MatFormFieldAppearance, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '../../../../bem';\nimport {\n    BreakpointService,\n    isString,\n    Nullable,\n    PlatformService,\n    RtIconOutlinedDirective,\n    transformStringInput,\n    WINDOW,\n} from '../../../../util';\nimport { RtAsideService } from '../../../aside';\nimport { RtuiHeaderCenterDirective } from '../../../header';\nimport {\n    RtuiScrollableContainerComponent,\n    RtuiScrollableContainerContentDirective,\n    RtuiScrollableContainerHeaderDirective,\n} from '../../../scrollable';\nimport { RtuiSpinnerComponent } from '../../../spinner';\nimport { RtuiToolbarComponent, RtuiToolbarLeftDirective, RtuiToolbarRightDirective } from '../../../toolbar';\nimport { ITable, RtTableConfigService } from '../../util';\nimport { PageModel } from '../../util/lists.interface';\nimport { RtuiClearButtonComponent } from '../clear-search-button/rtui-clear-button.component';\nimport { RtuiPaginationComponent } from '../pagination-view/rtui-pagination.component';\nimport { RtTableConfigAsideComponent } from '../table-config-aside/rt-table-config-aside.component';\n\n@Directive({\n    selector: '[rtuiTableToolbarSelectorsDirective]',\n})\nexport class RtuiTableToolbarSelectorsDirective {}\n\n@Directive({\n    selector: '[rtuiTableToolbarActionsDirective]',\n})\nexport class RtuiTableToolbarActionsDirective {}\n\n@Component({\n    selector: 'rtui-table-container',\n    templateUrl: './table-container.component.html',\n    styleUrls: ['./table-container.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        ReactiveFormsModule,\n        NgTemplateOutlet,\n\n        // Material\n        MatIcon,\n        MatFormField,\n        MatInput,\n        MatPrefix,\n        MatSuffix,\n        MatMiniFabButton,\n        MatTooltip,\n        MatCheckbox,\n\n        // Standalone components\n        RtuiPaginationComponent,\n        RtuiClearButtonComponent,\n        RtuiToolbarComponent,\n        RtuiScrollableContainerComponent,\n        RtuiSpinnerComponent,\n\n        // Bem\n        BlockDirective,\n        ElemDirective,\n        ModDirective,\n\n        // Directives\n        RtuiToolbarRightDirective,\n        RtuiHeaderCenterDirective,\n        RtuiScrollableContainerContentDirective,\n        RtuiScrollableContainerHeaderDirective,\n        RtIconOutlinedDirective,\n        RtuiToolbarLeftDirective,\n    ],\n    providers: [BreakpointService, RtAsideService, PlatformService],\n})\nexport class RtuiTableContainerComponent<ENTITY_TYPE> implements OnInit {\n    readonly #documentRef: Document = inject(DOCUMENT);\n    readonly #windowRef: Window = inject(WINDOW);\n    readonly #platformService: PlatformService = inject(PlatformService);\n    readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n    readonly #injector: Injector = inject(Injector);\n    readonly #destroyRef: DestroyRef = inject(DestroyRef);\n    readonly #breakpointService: BreakpointService = inject(BreakpointService);\n    readonly #asideService: RtAsideService = inject(RtAsideService);\n    readonly #tableConfigService: RtTableConfigService<ENTITY_TYPE> = inject(RtTableConfigService);\n\n    readonly #style: Nullable<CSSStyleDeclaration> = this.#documentRef?.documentElement?.style;\n\n    public appearance: InputSignal<MatFormFieldAppearance> = input.required();\n    /** Table config storage key */\n    public tableConfigStorageKey: InputSignalWithTransform<string, string> = input.required<string, string>({\n        transform: transformStringInput,\n    });\n    /** Current page model from store */\n    public pageModel: InputSignal<PageModel> = input.required();\n    /** Indicates is mobile view */\n    public isMobile: InputSignalWithTransform<boolean, BooleanInput> = input.required<boolean, BooleanInput>({\n        transform: booleanAttribute,\n    });\n    /** Indicates is loading in progress */\n    public loading: InputSignalWithTransform<boolean, BooleanInput> = input.required<boolean, BooleanInput>({\n        transform: booleanAttribute,\n    });\n    /** Indicates is fetching in progress */\n    public fetching: InputSignalWithTransform<boolean, BooleanInput> = input.required<boolean, BooleanInput>({\n        transform: booleanAttribute,\n    });\n    /** Indicates is placeholder shown */\n    public isPlaceholderShown: InputSignalWithTransform<boolean, BooleanInput> = input.required<boolean, BooleanInput>({\n        transform: booleanAttribute,\n    });\n    /** Indicates is pagination shown */\n    public isPaginationShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is the refresh button shown */\n    public isRefreshButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is a table config button shown */\n    public isTableConfigButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is toolbar buttons outlined */\n    public isToolbarActionsIconsOutlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is filters shown */\n    public isFiltersShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is filters empty */\n    public isFiltersEmpty: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Current search term from store */\n    public searchTerm: InputSignalWithTransform<Nullable<string>, Nullable<string>> = input<Nullable<string>, Nullable<string>>('', {\n        transform: (value: Nullable<string>) => (isString(value) ? value.trim() : ''),\n    });\n\n    /** Current placeholder icon */\n    public placeholderIcon: InputSignal<string> = input<string>('search');\n    /** Current placeholder title */\n    public placeholderTitle: InputSignal<string> = input<string>('No Data Found');\n\n    /** Indicates is a small tablet view */\n    public readonly isSmallTablet: Signal<Nullable<boolean>> = this.#breakpointService.isSmallTablet;\n    /** Config for table */\n    public readonly tableConfig: Signal<ITable.Config.Data<ENTITY_TYPE>> = this.#tableConfigService.tableConfig;\n\n    /** Page model change output action */\n    public readonly pageModelChange: OutputEmitterRef<Partial<PageModel>> = output<Partial<PageModel>>();\n    /** Search change output action */\n    public readonly searchChange: OutputEmitterRef<Nullable<string>> = output<Nullable<string>>();\n    /** Refresh output action */\n    public readonly refreshAction: OutputEmitterRef<void> = output<void>();\n    /** Clear filters output action */\n    public readonly clearFiltersAction: OutputEmitterRef<void> = output<void>();\n\n    /** Toolbar selectors template */\n    public readonly toolbarSelectorsTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiTableToolbarSelectorsDirective, {\n        read: TemplateRef,\n    });\n    /** Toolbar actions template */\n    public readonly toolbarActionsTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiTableToolbarActionsDirective, {\n        read: TemplateRef,\n    });\n\n    /** Fields specified by the directive */\n    /** Indicates is multiselect mod enabled */\n    public readonly isMultiSelect: WritableSignal<boolean> = signal(false);\n    /** Indicates is 'Select All' selector shown */\n    public readonly isSelectAllSelectorShown: WritableSignal<boolean> = signal(true);\n    /** Indicates is 'Select All' selector disabled */\n    public readonly isSelectAllSelectorDisabled: WritableSignal<boolean> = signal(false);\n    /** Indicates is all entities selected */\n    public readonly isAllEntitiesSelected: WritableSignal<boolean> = signal(false);\n    /** Indicates is all entities indeterminate */\n    public readonly isAllEntitiesIndeterminate: WritableSignal<boolean> = signal(false);\n    /** Current selected entities count */\n    public readonly selectedEntitiesCount: WritableSignal<number> = signal(0);\n\n    /** Control for search */\n    public readonly searchControl: FormControl<Nullable<string>> = new FormControl(null);\n\n    public ngOnInit(): void {\n        /** Set scrollbar initial styles by config */\n        effect(\n            () => {\n                if (this.tableConfig().columns.length) {\n                    this.#setScrollbarsVisibility();\n                }\n            },\n            { injector: this.#injector }\n        );\n\n        this.searchControl.patchValue(this.searchTerm(), { emitEvent: false });\n\n        this.searchControl.valueChanges\n            .pipe(\n                debounceTime(500),\n                distinctUntilChanged(),\n                map((value: Nullable<string>) => (!!value ? value.trim() : value)),\n                takeUntilDestroyed(this.#destroyRef)\n            )\n            .subscribe((value: Nullable<string>) => {\n                if (value !== null) {\n                    this.searchChange.emit(value);\n                }\n            });\n    }\n\n    /** Page model change output action */\n    public onPageModelChange(pageModel: Partial<PageModel>): void {\n        this.pageModelChange.emit(pageModel);\n    }\n\n    /** Clear search control and search change output action */\n    public onClearSearch(): void {\n        this.searchControl.patchValue(null);\n        this.searchChange.emit('');\n    }\n\n    /** Refresh output action */\n    public onRefresh(): void {\n        if (!this.isPaginationShown()) {\n            this.onClearSearch();\n        }\n\n        this.refreshAction.emit();\n    }\n\n    /** Clear filters output action */\n    public onClearFilters(): void {\n        this.clearFiltersAction.emit();\n    }\n\n    /** Open table config aside */\n    public onOpenConfigAside(): void {\n        this.#asideService\n            .Open<RtTableConfigAsideComponent<ENTITY_TYPE>, ITable.Config.Data<ENTITY_TYPE>, ITable.Config.Data<ENTITY_TYPE>>(\n                RtTableConfigAsideComponent,\n                'right',\n                this.tableConfig()\n            )\n            .pipe(filter(Boolean), takeUntilDestroyed(this.#destroyRef))\n            .subscribe((value: ITable.Config.Data<ENTITY_TYPE>) => {\n                /** Save updated table config */\n                this.#tableConfigService.updateConfig(this.tableConfigStorageKey(), value);\n                this.#setScrollbarsVisibility();\n            });\n    }\n\n    /** Empty method, set in selectors directive */\n    public onToggleAllEntities: (checked: boolean) => void = (): void => {\n        return;\n    };\n\n    /** Set scrollbar styles by config */\n    #setScrollbarsVisibility(): void {\n        const vertical: string = this.tableConfig().isVerticalScrollbarShown ? '12px' : '0';\n        const horizontal: string = this.tableConfig().isHorizontalScrollbarShown ? '12px' : '0';\n\n        if (this.#platformService?.isPlatformBrowser && this.#windowRef && this.#style) {\n            const safeVerticalValue: Nullable<string> = this.#sanitizer.sanitize(0, vertical);\n            const safeHorizontalValue: Nullable<string> = this.#sanitizer.sanitize(0, horizontal);\n            this.#style.setProperty('--rt-table-container-content-scrollbar-vertical-width', safeVerticalValue);\n            this.#style.setProperty('--rt-table-container-content-scrollbar-horizontal-height', safeHorizontalValue);\n        }\n    }\n}\n","@if (loading()) {\n    <rtui-spinner />\n} @else {\n    @if (fetching()) {\n        <rtui-spinner [showBackground]=\"true\" />\n    }\n    <ng-container rtBlock=\"table-container\">\n        <rtui-scrollable>\n            <ng-container *rtuiScrollableHeader>\n                <rtui-toolbar>\n                    @if (isSmallTablet() && !isPlaceholderShown() && (isMultiSelect() || toolbarSelectorsTpl())) {\n                        <ng-container *rtuiToolbarLeft>\n                            <ng-template *ngTemplateOutlet=\"selectorsTpl\" />\n                        </ng-container>\n                    }\n\n                    <ng-container *rtuiToolbarRight>\n                        <div rtElem=\"toolbar\">\n                            <div rtElem=\"toolbar-actions\" [rtMod]=\"{ end: isMultiSelect() ?? toolbarSelectorsTpl() }\">\n                                @if (!isSmallTablet() && !isPlaceholderShown() && (isMultiSelect() || toolbarSelectorsTpl())) {\n                                    <ng-template *ngTemplateOutlet=\"selectorsTpl\" />\n                                }\n\n                                @if (toolbarActionsTpl()) {\n                                    <ng-template *ngTemplateOutlet=\"toolbarActionsTpl() ?? null\" />\n\n                                    <div rtElem=\"toolbar-actions-divider\"></div>\n                                }\n\n                                @if (isFiltersShown()) {\n                                    <button\n                                        mat-mini-fab\n                                        type=\"button\"\n                                        aria-label=\"Icon-button for clear filters\"\n                                        class=\"c-button c-button--fab\"\n                                        matTooltip=\"Clear filters\"\n                                        matTooltipPosition=\"below\"\n                                        [matTooltipDisabled]=\"isMobile()\"\n                                        [disabled]=\"isFiltersEmpty()\"\n                                        (click)=\"onClearFilters()\">\n                                        <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">block</mat-icon>\n                                    </button>\n                                }\n\n                                @if (isRefreshButtonShown()) {\n                                    <button\n                                        mat-mini-fab\n                                        type=\"button\"\n                                        aria-label=\"Icon-button for table refresh\"\n                                        class=\"c-button c-button--fab\"\n                                        matTooltip=\"Refresh\"\n                                        matTooltipPosition=\"below\"\n                                        [matTooltipDisabled]=\"isMobile()\"\n                                        (click)=\"onRefresh()\">\n                                        <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">sync</mat-icon>\n                                    </button>\n                                }\n\n                                @if (isTableConfigButtonShown()) {\n                                    <button\n                                        mat-mini-fab\n                                        type=\"button\"\n                                        aria-label=\"Icon-button for table config\"\n                                        class=\"c-button c-button--fab\"\n                                        matTooltip=\"Table configuration\"\n                                        matTooltipPosition=\"below\"\n                                        [matTooltipDisabled]=\"isMobile()\"\n                                        (click)=\"onOpenConfigAside()\">\n                                        <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">view_column</mat-icon>\n                                    </button>\n                                }\n                            </div>\n\n                            @if ((isPlaceholderShown() && searchControl.value) || !isPlaceholderShown() || searchControl.dirty) {\n                                <div rtElem=\"toolbar-search\">\n                                    <mat-form-field subscriptSizing=\"dynamic\" [appearance]=\"appearance()\" [style.width.%]=\"100\">\n                                        <input matInput placeholder=\"Search...\" type=\"text\" [formControl]=\"searchControl\" />\n\n                                        <mat-icon matPrefix [rtIconOutlined]=\"true\">search</mat-icon>\n\n                                        <rtui-clear-button\n                                            matSuffix\n                                            [isButtonShown]=\"!!searchControl.value\"\n                                            (clickAction)=\"onClearSearch()\" />\n                                    </mat-form-field>\n                                </div>\n                            }\n                        </div>\n                    </ng-container>\n                </rtui-toolbar>\n            </ng-container>\n\n            <ng-container *rtuiScrollableContent>\n                @if (!isPlaceholderShown() || pageModel()?.totalCount) {\n                    <div rtElem=\"content\">\n                        <ng-content />\n                    </div>\n\n                    @if (isPaginationShown()) {\n                        <div rtElem=\"pagination\">\n                            <rtui-pagination\n                                [isMobile]=\"!!isMobile()\"\n                                [currentPageModel]=\"pageModel()\"\n                                (pageModelChange)=\"onPageModelChange($event)\" />\n                        </div>\n                    }\n                } @else {\n                    <div rtElem=\"placeholder\">\n                        <mat-icon rtElem=\"placeholder-icon\" [rtIconOutlined]=\"true\">{{ placeholderIcon() }}</mat-icon>\n\n                        <div rtElem=\"placeholder-title\">{{ placeholderTitle() }}</div>\n                    </div>\n                }\n            </ng-container>\n        </rtui-scrollable>\n\n        <ng-template #selectorsTpl>\n            <div rtElem=\"selectors\">\n                @if (isMultiSelect()) {\n                    @if (isSelectAllSelectorShown()) {\n                        <mat-checkbox\n                            [checked]=\"isAllEntitiesSelected()\"\n                            [indeterminate]=\"!isAllEntitiesSelected() && isAllEntitiesIndeterminate()\"\n                            [disabled]=\"isSelectAllSelectorDisabled()\"\n                            (click)=\"$event.stopPropagation()\"\n                            (change)=\"onToggleAllEntities($event.checked)\">\n                            <div rtElem=\"selectors-label\">Select all</div>\n                        </mat-checkbox>\n                    } @else {\n                        <div rtElem=\"selectors-counter\">Selected: {{ selectedEntitiesCount() }}</div>\n                    }\n                }\n\n                @if (toolbarSelectorsTpl()) {\n                    <ng-template *ngTemplateOutlet=\"toolbarSelectorsTpl() ?? null\" />\n                }\n            </div>\n        </ng-template>\n    </ng-container>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChild,\n    Directive,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    output,\n    OutputEmitterRef,\n    Signal,\n    TemplateRef,\n    Type,\n    viewChild,\n} from '@angular/core';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { Nullable, transformArrayInput, transformStringInput } from '../../util';\nimport {\n    RtuiCustomTableCellsDirective,\n    RtuiTableAdditionalRowActionsDirective,\n    RtuiTableComponent,\n    RtuiTableRowActionsDirective,\n} from './components';\nimport {\n    RtuiTableContainerComponent,\n    RtuiTableToolbarActionsDirective,\n    RtuiTableToolbarSelectorsDirective,\n} from './components/table-container/table-container.component';\nimport { PageModel, SortModel, FilterModel } from './util/lists.interface';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\n/** Directive for selectors of the toolbar located on the left side */\n@Directive({\n    selector: '[rtuiDynamicListToolbarSelectorsDirective]',\n})\nexport class RtuiDynamicListToolbarSelectorsDirective {}\n\n/** Directive for actions of the toolbar located on the right side */\n@Directive({\n    selector: '[rtuiDynamicListToolbarActionsDirective]',\n})\nexport class RtuiDynamicListToolbarActionsDirective {}\n\n/** Directive for custom table cells */\n@Directive({\n    selector: '[rtuiDynamicListCustomTableCellsDirective]',\n})\nexport class RtuiDynamicListCustomTableCellsDirective<ENTITY_TYPE> {\n    public cellsTemplates: InputSignal<{ [K in keyof ENTITY_TYPE]: TemplateRef<{ $implicit: ENTITY_TYPE }> }> = input.required({\n        alias: 'rtuiDynamicListCustomTableCellsDirective',\n    });\n}\n\n/** Directive for row actions located inside a row menu button */\n@Directive({\n    selector: '[rtuiDynamicListRowActionsDirective]',\n})\nexport class RtuiDynamicListRowActionsDirective {}\n\n/** Directive for row actions located outside a row menu button */\n@Directive({\n    selector: '[rtuiDynamicListRowAdditionalActionsDirective]',\n})\nexport class RtuiDynamicListRowAdditionalActionsDirective {}\n\n@Component({\n    selector: 'rtui-dynamic-list',\n    templateUrl: './dynamic-list.component.html',\n    styleUrls: ['./dynamic-list.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n\n        // Directives\n        RtuiTableToolbarActionsDirective,\n        RtuiTableRowActionsDirective,\n        RtuiTableToolbarSelectorsDirective,\n        RtuiTableAdditionalRowActionsDirective,\n\n        // Ui-kit\n        RtuiTableContainerComponent,\n        RtuiTableComponent,\n        RtuiCustomTableCellsDirective,\n    ],\n})\nexport class RtuiDynamicListComponent<\n    ENTITY_TYPE extends Record<string, unknown>,\n    SORT_PROPERTY extends Extract<keyof ENTITY_TYPE, string>,\n    KEY extends Extract<keyof ENTITY_TYPE, string>,\n> {\n    /** Table config storage key */\n    public tableConfigStorageKey: InputSignalWithTransform<string, unknown> = input.required<string, unknown>({\n        transform: transformStringInput,\n    });\n    /** Indicates is mobile view */\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, BooleanInput> = input<Nullable<boolean>, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is loading in progress */\n    public loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is fetching in progress */\n    public fetching: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates are table rows clickable */\n    public isTableRowsClickable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is pagination shown */\n    public isPaginationShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is the refresh button shown */\n    public isRefreshButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is a table config button shown */\n    public isTableConfigButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Indicates is toolbar buttons outlined */\n    public isToolbarActionsIconsOutlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    /** Key of ENTITY_TYPE for compare entities */\n    public keyExp: InputSignal<NonNullable<KEY>> = input('id' as NonNullable<KEY>);\n    /** List of entities */\n    public entities: InputSignalWithTransform<ENTITY_TYPE[], ENTITY_TYPE[]> = input.required<ENTITY_TYPE[], ENTITY_TYPE[]>({\n        transform: (value: ENTITY_TYPE[]) => transformArrayInput(value),\n    });\n\n    /** Current page model from store */\n    public pageModel: InputSignal<PageModel> = input.required();\n    /** Current search term from store */\n    public searchTerm: InputSignal<Nullable<string>> = input.required();\n    /** Current sort model from store */\n    public currentSortModel: InputSignal<Nullable<SortModel<NonNullable<KEY>>>> = input.required();\n    /** Inputs appearance */\n    public appearance: InputSignal<MatFormFieldAppearance> = input.required({\n        transform: (value: MatFormFieldAppearance) => (value === 'fill' ? 'fill' : 'outline'),\n    });\n    /** Filter inputs appearance */\n    public filterAppearance: InputSignal<MatFormFieldAppearance> = input<MatFormFieldAppearance>('outline');\n    /** Current filter model from store */\n    public filterModel: InputSignalWithTransform<FilterModel<KEY>[], FilterModel<KEY>[]> = input<FilterModel<KEY>[], FilterModel<KEY>[]>(\n        [],\n        {\n            transform: (value: FilterModel<KEY>[]) => transformArrayInput(value),\n        }\n    );\n    /** Indicates is filters shown */\n    public isFiltersShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n\n    /** Sort model change output action */\n    public readonly sortChange: OutputEmitterRef<SortModel<NonNullable<KEY>>> = output<SortModel<NonNullable<KEY>>>();\n    /** Page model change output action */\n    public readonly pageModelChange: OutputEmitterRef<Partial<PageModel>> = output<Partial<PageModel>>();\n    /** Search change output action */\n    public readonly searchChange: OutputEmitterRef<Nullable<string>> = output<Nullable<string>>();\n    /** Refresh output action */\n    public readonly refresh: OutputEmitterRef<void> = output<void>();\n    /** Clear filters output action */\n    public readonly clearFiltersAction: OutputEmitterRef<void> = output<void>();\n    /** Row click output action */\n    public readonly rowClick: OutputEmitterRef<NonNullable<{ row: ENTITY_TYPE; event: MouseEvent }>> =\n        output<NonNullable<{ row: ENTITY_TYPE; event: MouseEvent }>>();\n    /** Row doubleClick output action */\n    public readonly rowDoubleClick: OutputEmitterRef<NonNullable<ENTITY_TYPE>> = output<NonNullable<ENTITY_TYPE>>();\n    /** Filter change output action */\n    public readonly filterChange: OutputEmitterRef<FilterModel<KEY>[]> = output<FilterModel<KEY>[]>();\n\n    /** Toolbar selectors template */\n    public readonly toolbarSelectorsTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(\n        RtuiDynamicListToolbarSelectorsDirective,\n        {\n            read: TemplateRef,\n        }\n    );\n    /** Toolbar actions template */\n    public readonly toolbarActionsTpl: Signal<Nullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiDynamicListToolbarActionsDirective, {\n        read: TemplateRef,\n    });\n    /** Custom cells template */\n    public readonly customCellsTpl: Signal<Nullable<RtuiDynamicListCustomTableCellsDirective<{ $implicit: ENTITY_TYPE }>>> = contentChild(\n        RtuiDynamicListCustomTableCellsDirective\n    );\n    /** Row actions template */\n    public readonly rowActionsTpl: Signal<Nullable<TemplateRef<{ $implicit: ENTITY_TYPE }>>> = contentChild(\n        RtuiDynamicListRowActionsDirective,\n        {\n            read: TemplateRef,\n        }\n    );\n    /** Additional row actions template */\n    public readonly additionalRowActionsTpl: Signal<Nullable<TemplateRef<{ $implicit: ENTITY_TYPE }>>> = contentChild(\n        RtuiDynamicListRowAdditionalActionsDirective,\n        {\n            read: TemplateRef,\n        }\n    );\n\n    /** Table container for selectors directive usage */\n    public readonly tableContainerTpl: Signal<Nullable<RtuiTableContainerComponent<ENTITY_TYPE>>> =\n        viewChild<RtuiTableContainerComponent<ENTITY_TYPE>>(RtuiTableContainerComponent);\n    /** Table selector for selectors directive usage */\n    public readonly tableTpl: Signal<Nullable<RtuiTableComponent<ENTITY_TYPE, SORT_PROPERTY, KEY>>> =\n        viewChild<RtuiTableComponent<ENTITY_TYPE, SORT_PROPERTY, KEY>>(RtuiTableComponent);\n\n    /** Search change output action */\n    public onSearchChange(value: Nullable<string>): void {\n        this.searchChange.emit(value);\n    }\n\n    /** Sort change output action */\n    public onSortChange(sortModel: SortModel<NonNullable<KEY>>): void {\n        this.sortChange.emit(sortModel);\n    }\n\n    /** Page model change output action */\n    public onPageModelChange(pageModel: Partial<PageModel>): void {\n        this.pageModelChange.emit(pageModel);\n    }\n\n    /** Filter change output action */\n    public onFilterChange(filterModel: FilterModel<KEY>[]): void {\n        this.filterChange.emit(filterModel);\n    }\n\n    /** Refresh output action */\n    public onRefresh(): void {\n        this.refresh.emit();\n    }\n\n    /** Clear filters output action */\n    public onClearFilters(): void {\n        this.clearFiltersAction.emit();\n    }\n\n    /** Row click output action */\n    public onRowClick({ row, event }: { row: ENTITY_TYPE; event: MouseEvent }): void {\n        this.rowClick.emit({ row, event });\n    }\n\n    /** Row doubleClick output action */\n    public onRowDoubleClick(row: ENTITY_TYPE): void {\n        this.rowDoubleClick.emit(row);\n    }\n}\n","<rtui-table-container\n    [tableConfigStorageKey]=\"tableConfigStorageKey()\"\n    [loading]=\"loading()\"\n    [fetching]=\"fetching()\"\n    [isMobile]=\"isMobile()\"\n    [pageModel]=\"pageModel()\"\n    [isPlaceholderShown]=\"!entities()?.length && !filterModel()?.length\"\n    [isToolbarActionsIconsOutlined]=\"isToolbarActionsIconsOutlined()\"\n    [isRefreshButtonShown]=\"isRefreshButtonShown()\"\n    [isTableConfigButtonShown]=\"isTableConfigButtonShown()\"\n    [isFiltersShown]=\"isFiltersShown()\"\n    [isFiltersEmpty]=\"!filterModel()?.length\"\n    [appearance]=\"appearance()\"\n    [searchTerm]=\"searchTerm()\"\n    (refreshAction)=\"onRefresh()\"\n    (clearFiltersAction)=\"onClearFilters()\"\n    (pageModelChange)=\"onPageModelChange($event)\"\n    (searchChange)=\"onSearchChange($event)\">\n    @if (toolbarSelectorsTpl()) {\n        <ng-container *rtuiTableToolbarSelectorsDirective>\n            <ng-template *ngTemplateOutlet=\"toolbarSelectorsTpl() || null\" />\n        </ng-container>\n    }\n\n    @if (toolbarActionsTpl()) {\n        <ng-container *rtuiTableToolbarActionsDirective>\n            <ng-template *ngTemplateOutlet=\"toolbarActionsTpl() || null\" />\n        </ng-container>\n    }\n\n    <rtui-table\n        [appearance]=\"appearance()\"\n        [keyExp]=\"keyExp()\"\n        [entities]=\"entities()\"\n        [isMobile]=\"isMobile()\"\n        [filterModel]=\"filterModel()\"\n        [isTableRowsClickable]=\"isTableRowsClickable()\"\n        [currentSortModel]=\"currentSortModel()\"\n        [isFiltersShown]=\"isFiltersShown()\"\n        (filterChange)=\"onFilterChange($event)\"\n        (rowClick)=\"onRowClick($event)\"\n        (rowDoubleClick)=\"onRowDoubleClick($event)\"\n        (sortChange)=\"onSortChange($event)\">\n        @if (customCellsTpl() && customCellsTpl()?.cellsTemplates()) {\n            <ng-container *rtuiCustomTableCellsDirective=\"customCellsTpl()?.cellsTemplates()!\" />\n        }\n\n        @if (additionalRowActionsTpl()) {\n            <ng-container *rtuiTableAdditionalRowActionsDirective=\"let row\">\n                <ng-template *ngTemplateOutlet=\"additionalRowActionsTpl() || null; context: { $implicit: row }\" />\n            </ng-container>\n        }\n\n        @if (rowActionsTpl()) {\n            <ng-container *rtuiTabletRowActionsDirective=\"let row\">\n                <ng-template *ngTemplateOutlet=\"rowActionsTpl() || null; context: { $implicit: row }\" />\n            </ng-container>\n        }\n    </rtui-table>\n</rtui-table-container>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, inject, input, InputSignalWithTransform, TemplateRef } from '@angular/core';\nimport { DomSanitizer, SafeValue } from '@angular/platform-browser';\n\nimport { isString, Nullable } from '../../util';\n\n@Component({\n    selector: 'rtui-popover-container',\n    templateUrl: './rtui-popover-container.component.html',\n    styleUrls: ['./rtui-popover-container.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [NgTemplateOutlet],\n})\nexport class RtuiPopoverContainerComponent {\n    readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n    public popoverTemplate: InputSignalWithTransform<Nullable<TemplateRef<HTMLElement>>, Nullable<TemplateRef<HTMLElement>>> = input<\n        Nullable<TemplateRef<HTMLElement>>,\n        Nullable<TemplateRef<HTMLElement>>\n    >(undefined, {\n        transform: (value: Nullable<TemplateRef<HTMLElement>>) => value ?? null,\n    });\n\n    public popoverClass: InputSignalWithTransform<Nullable<string>, string | undefined> = input<Nullable<string>, string | undefined>(\n        undefined,\n        {\n            transform: (value: unknown) => (isString(value) ? value : undefined),\n        }\n    );\n\n    @HostBinding('class')\n    public get className(): SafeValue {\n        return this.#sanitizer.sanitize(1, this.popoverClass() as string) as SafeValue;\n    }\n}\n","<ng-container *ngTemplateOutlet=\"popoverTemplate() || null\" />\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport {\n    booleanAttribute,\n    ComponentRef,\n    Directive,\n    ElementRef,\n    HostListener,\n    inject,\n    Injector,\n    input,\n    InputSignalWithTransform,\n    numberAttribute,\n    OnDestroy,\n    OnInit,\n    TemplateRef,\n    ViewContainerRef,\n} from '@angular/core';\nimport { computePosition, ComputePositionReturn, flip, offset, shift } from '@floating-ui/dom';\n\nimport { Nullable, PlatformService, WINDOW } from '../../util';\nimport { RtuiPopoverContainerComponent } from './rtui-popover-container.component';\n\nexport type MenuItemTrigger = 'click' | 'hover';\n\n@Directive({\n    selector: '[rtPopover]',\n    providers: [PlatformService],\n})\nexport class RtPopoverDirective implements OnInit, OnDestroy {\n    readonly #windowRef: Window = inject(WINDOW);\n    readonly #injector: Injector = inject(Injector);\n    readonly #hostRef: ElementRef = inject(ElementRef);\n    readonly #documentRef: Document = inject(DOCUMENT);\n    readonly #platformService: PlatformService = inject(PlatformService);\n    readonly #componentFactoryResolver: ViewContainerRef = inject(ViewContainerRef);\n\n    #popoverContainerRef?: ComponentRef<RtuiPopoverContainerComponent> | null;\n    #popoverElement?: HTMLElement;\n    #hasPopoverHover: boolean = false;\n    #hasHostHover: boolean = false;\n\n    public xOffset: InputSignalWithTransform<number, NumberInput> = input<number, NumberInput>(0, { transform: numberAttribute });\n    public yOffset: InputSignalWithTransform<number, NumberInput> = input<number, NumberInput>(-20, { transform: numberAttribute });\n    public trigger: InputSignalWithTransform<MenuItemTrigger, MenuItemTrigger> = input<MenuItemTrigger, MenuItemTrigger>('hover', {\n        transform: (value: unknown) => (value === 'click' ? 'click' : 'hover'),\n    });\n    public template: InputSignalWithTransform<Nullable<TemplateRef<HTMLElement>>, Nullable<TemplateRef<HTMLElement>>> = input<\n        Nullable<TemplateRef<HTMLElement>>,\n        Nullable<TemplateRef<HTMLElement>>\n    >(null, {\n        transform: (value: Nullable<TemplateRef<HTMLElement>>) => value || null,\n    });\n    public isMouseHoverAllowed: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n\n    @HostListener('document:click', ['$event.target'])\n    public onClick(element: EventTarget | null): void {\n        if (this.trigger() === 'click') {\n            if (this.#hostRef.nativeElement.contains(element)) {\n                this.#show();\n            } else {\n                this.#hide();\n            }\n        }\n    }\n\n    @HostListener('mouseenter')\n    public onMouseEnter(): void {\n        if (this.trigger() === 'hover') {\n            this.#hasHostHover = true;\n            this.#show();\n        }\n    }\n\n    @HostListener('mouseleave')\n    public onMouseLeave(): void {\n        this.#hasHostHover = false;\n        this.#handleMouseLeave();\n    }\n\n    public ngOnInit(): void {\n        if (this.#platformService.isPlatformBrowser) {\n            this.#windowRef.addEventListener('scroll', this.#hide.bind(this));\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.onMouseLeave();\n    }\n\n    #show(): void {\n        if (!this.#platformService.isPlatformBrowser || this.#popoverContainerRef) {\n            return;\n        }\n        this.#popoverContainerRef = this.#componentFactoryResolver.createComponent(RtuiPopoverContainerComponent, {\n            injector: this.#injector,\n        });\n\n        this.#popoverContainerRef.instance.popoverTemplate = this.template || null;\n\n        this.#popoverElement = this.#popoverContainerRef.location.nativeElement;\n\n        if (this.#popoverElement) {\n            this.#documentRef.body.appendChild(this.#popoverElement);\n            this.#popoverElement.addEventListener('mouseenter', () => {\n                this.#hasPopoverHover = true;\n            });\n            this.#popoverElement.addEventListener('mouseleave', () => {\n                this.#hasPopoverHover = false;\n                this.#handleMouseLeave();\n            });\n        }\n        this.#updateTooltipPosition();\n        this.#popoverContainerRef.hostView.detectChanges();\n    }\n\n    #updateTooltipPosition(): void {\n        if (!this.#hostRef?.nativeElement || !this.#popoverElement) {\n            return;\n        }\n\n        computePosition(this.#hostRef.nativeElement, this.#popoverElement, {\n            placement: 'bottom-start',\n            middleware: [offset(14), flip(), shift({ padding: 0 })],\n        }).then((computePosition: ComputePositionReturn) => {\n            const x: number = computePosition.x + this.xOffset();\n            const y: number = computePosition.y + this.yOffset();\n\n            if (this.#popoverElement) {\n                Object.assign(this.#popoverElement.style, {\n                    left: `${x}px`,\n                    top: `${y}px`,\n                    opacity: 1,\n                    visibility: 'visible',\n                    'z-index': 2,\n                });\n            }\n        });\n    }\n\n    #handleMouseLeave(): void {\n        if (this.trigger() === 'hover') {\n            if (!this.#popoverContainerRef) {\n                return;\n            }\n            if (!this.isMouseHoverAllowed()) {\n                this.#hide();\n                return;\n            }\n            setTimeout(() => {\n                this.#hide();\n            }, 50);\n        }\n    }\n\n    #hide(): void {\n        if (!this.#hasPopoverHover && !this.#hasHostHover && this.#popoverContainerRef) {\n            Object.assign(this.#popoverContainerRef.location.nativeElement.style, {\n                opacity: 0,\n            });\n            this.#popoverContainerRef.destroy();\n            this.#popoverContainerRef = null;\n        }\n    }\n}\n","import { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, InputSignal, output, OutputEmitterRef, Signal } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { BlockDirective, ElemDirective } from '../../../../bem';\nimport { BreakpointService, EmptyToDashPipe, RtIconOutlinedDirective } from '../../../../util';\nimport { RtPopoverDirective } from '../../../popover/rt-popover.directive';\nimport { IRtActionBar } from '../../action-bar-config.interface';\n\n@Component({\n    selector: 'rtui-action-bar',\n    templateUrl: 'rtui-action-bar.component.html',\n    styleUrls: ['rtui-action-bar.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n        NgStyle,\n        // material\n        MatIcon,\n        // rt-tools\n        BlockDirective,\n        ElemDirective,\n        EmptyToDashPipe,\n        RtIconOutlinedDirective,\n        RtPopoverDirective,\n    ],\n    providers: [BreakpointService],\n})\nexport class RtuiActionBarComponent {\n    readonly #breakpointService: BreakpointService = inject(BreakpointService);\n\n    public config: InputSignal<IRtActionBar.Config> = input.required();\n\n    public readonly closeAction: OutputEmitterRef<void> = output<void>();\n\n    public readonly isTablet: Signal<boolean> = computed(() => !!this.#breakpointService.isTablet());\n\n    public onClose(): void {\n        this.closeAction.emit();\n    }\n\n    public onAction(button: IRtActionBar.Button): void {\n        if (button?.action) {\n            button.action();\n            this.onClose();\n        }\n    }\n}\n","<div rtBlock=\"rtui-action-bar\">\n    <div rtElem=\"counter\">\n        {{ 'Selected: ' + config().selected + ' out of ' + config().total | emptyToDash }}\n    </div>\n\n    @if (config().buttons?.length) {\n        <div rtElem=\"actions\">\n            @for (btn of config().buttons; track i; let i = $index) {\n                @if (btn?.menu) {\n                    @let menu = btn.menu;\n                    <ng-template #actionMenuWrapperTpl>\n                        <ng-container *ngTemplateOutlet=\"actionMenuTpl; context: { $implicit: menu }\" />\n                    </ng-template>\n\n                    <div rtPopover rtElem=\"action\" [trigger]=\"'click'\" [template]=\"actionMenuWrapperTpl\" [ngStyle]=\"btn?.styles\">\n                        <ng-template *ngTemplateOutlet=\"buttonContentTpl; context: { $implicit: btn }\" />\n                    </div>\n                } @else {\n                    <div rtElem=\"action\" [ngStyle]=\"btn?.styles\" (click)=\"onAction(btn)\">\n                        <ng-template *ngTemplateOutlet=\"buttonContentTpl; context: { $implicit: btn }\" />\n                    </div>\n                }\n            }\n        </div>\n    }\n\n    <div rtElem=\"close-button\" (click)=\"onClose()\">\n        <svg width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n                d=\"M10.7071 0.293C10.5196 0.105529 10.2652 0.000213623 10.0001 0.000213623C9.73492 0.000213623 9.48061 0.105529 9.29308 0.293L6.00008 3.586L2.70708 0.293C2.51848 0.110842 2.26588 0.0100477 2.00368 0.0123261C1.74148 0.0146045 1.49067 0.119773 1.30526 0.305182C1.11985 0.49059 1.01469 0.741402 1.01241 1.0036C1.01013 1.2658 1.11092 1.5184 1.29308 1.707L4.58608 5L1.29308 8.293C1.19757 8.38525 1.12139 8.49559 1.06898 8.6176C1.01657 8.7396 0.988985 8.87082 0.987831 9.0036C0.986677 9.13638 1.01198 9.26806 1.06226 9.39095C1.11254 9.51385 1.18679 9.6255 1.28069 9.71939C1.37458 9.81329 1.48623 9.88754 1.60913 9.93782C1.73202 9.9881 1.8637 10.0134 1.99648 10.0123C2.12926 10.0111 2.26048 9.98351 2.38249 9.9311C2.50449 9.87869 2.61483 9.80251 2.70708 9.707L6.00008 6.414L9.29308 9.707C9.48168 9.88916 9.73429 9.98995 9.99648 9.98767C10.2587 9.9854 10.5095 9.88023 10.6949 9.69482C10.8803 9.50941 10.9855 9.2586 10.9878 8.9964C10.99 8.7342 10.8892 8.4816 10.7071 8.293L7.41408 5L10.7071 1.707C10.8946 1.51947 10.9999 1.26516 10.9999 1C10.9999 0.734836 10.8946 0.480528 10.7071 0.293Z\"\n                fill=\"currentColor\" />\n        </svg>\n    </div>\n</div>\n\n<ng-template #actionMenuTpl let-menu>\n    <div rtBlock=\"rtui-action-bar-action-menu\">\n        @for (btn of menu; track i; let i = $index) {\n            <div rtElem=\"action\" (click)=\"onAction(btn)\">\n                <ng-template *ngTemplateOutlet=\"buttonContentTpl; context: { $implicit: btn }\" />\n            </div>\n        }\n    </div>\n</ng-template>\n\n<ng-template #buttonContentTpl let-btn>\n    @if (btn?.icon) {\n        <mat-icon [rtIconOutlined]=\"true\">{{ btn.icon }}</mat-icon>\n    }\n\n    @if (!isTablet() || (isTablet() && !btn?.icon)) {\n        <div>{{ btn.title }}</div>\n    }\n</ng-template>\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\nimport { IRtActionBar } from './action-bar-config.interface';\n\n@Injectable()\nexport class RtActionBarService {\n    public config: WritableSignal<IRtActionBar.Config> = signal({ buttons: [] });\n\n    public setActions(buttons: IRtActionBar.Button[]): void {\n        this.config.set({ buttons });\n    }\n\n    public setCounts(selected: number, total: number): void {\n        this.config.set({ ...this.config(), selected, total });\n    }\n\n    public closeActionBar(): void {\n        this.config.set({ ...this.config(), selected: 0, total: 0 });\n    }\n}\n","import { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport { Component, inject, Signal } from '@angular/core';\n\nimport { IRtActionBar } from '../../action-bar-config.interface';\nimport { RtActionBarService } from '../../rt-action-bar.service';\nimport { RtuiActionBarComponent } from '../bar/rtui-action-bar.component';\n\n@Component({\n    selector: 'rtui-action-bar-container',\n    templateUrl: 'rtui-action-bar-container.component.html',\n    styleUrls: ['rtui-action-bar-container.component.scss'],\n    imports: [RtuiActionBarComponent],\n    animations: [\n        trigger('barState', [\n            state('opened', style({ transform: 'translateY(0)' })),\n            transition('void => *', [\n                animate(\n                    300,\n                    keyframes([\n                        style({ opacity: 0, transform: 'translateY(100%)', offset: 0 }),\n                        style({ opacity: 1, transform: 'translateY(-15px)', offset: 0.3 }),\n                        style({ opacity: 1, transform: 'translateY(0)', offset: 1.0 }),\n                    ])\n                ),\n            ]),\n            transition('* => void', [\n                animate(\n                    300,\n                    keyframes([\n                        style({ opacity: 1, transform: 'translateY(0)', offset: 0 }),\n                        style({ opacity: 1, transform: 'translateY(-15px)', offset: 0.7 }),\n                        style({ opacity: 0, transform: 'translateY(100%)', offset: 1.0 }),\n                    ])\n                ),\n            ]),\n        ]),\n    ],\n})\nexport class RtuiActionBarContainerComponent {\n    readonly #actionBarService: RtActionBarService = inject(RtActionBarService);\n\n    public readonly config: Signal<IRtActionBar.Config> = this.#actionBarService.config;\n\n    public closeBar(): void {\n        this.#actionBarService.closeActionBar();\n    }\n}\n","@if (config()?.selected) {\n    <rtui-action-bar [@barState]=\"'opened'\" [config]=\"config()\" (closeAction)=\"closeBar()\" />\n}\n","import { Provider } from '@angular/core';\n\nimport { RtActionBarService } from './action-bar';\nimport { RtAsideService } from './aside';\n\n/**\n * Returns a set of the necessary dependency injection providers for managing the UI.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideRtUi()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtUi(): Provider[] {\n    return [RtAsideService, RtActionBarService];\n}\n","import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\nexport const progressIncreaseAnimation: AnimationTriggerMetadata[] = [\n    trigger('progressIncreaseAnimation', [\n        state(\n            'start',\n            style({\n                width: '100%',\n            })\n        ),\n        state(\n            'end',\n            style({\n                width: '0',\n            })\n        ),\n        transition('start => end', [animate('0ms')]),\n        transition('end => start', [animate('{{ time }}')]),\n    ]),\n];\n\nexport const progressDecreaseAnimation: AnimationTriggerMetadata[] = [\n    trigger('progressDecreaseAnimation', [\n        state(\n            'start',\n            style({\n                width: '0',\n            })\n        ),\n        state(\n            'end',\n            style({\n                width: '100%',\n            })\n        ),\n        transition('start => end', [animate('0ms')]),\n        transition('end => start', [animate('{{ time }}')]),\n    ]),\n];\n","export enum INFO_BADGE_SIZE_ENUM {\n    LARGE = 'l',\n    MEDIUM = 'm',\n    SMALL = 's',\n}\n\nexport type IInfoBadgeSizeType = INFO_BADGE_SIZE_ENUM.LARGE | INFO_BADGE_SIZE_ENUM.MEDIUM | INFO_BADGE_SIZE_ENUM.SMALL;\n","export function darkenHexColor(hex: string, percent: number): string {\n    /**\n     * returns a darkened color depending on the color and percentage\n     */\n    hex = hex.replace(/^#/, '');\n\n    if (hex.length === 3) {\n        hex = hex\n            .split('')\n            .map((char: string) => char + char)\n            .join('');\n    }\n\n    let r: number = parseInt(hex.substring(0, 2), 16);\n    let g: number = parseInt(hex.substring(2, 4), 16);\n    let b: number = parseInt(hex.substring(4, 6), 16);\n\n    r = Math.floor(r * (1 - percent / 100));\n    g = Math.floor(g * (1 - percent / 100));\n    b = Math.floor(b * (1 - percent / 100));\n\n    return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nexport function getColorBasedOnBackground(backgroundColor: string): string {\n    backgroundColor = backgroundColor.substring(1);\n    const r: number = parseInt(backgroundColor.substring(0, 2), 16);\n    const g: number = parseInt(backgroundColor.substring(2, 4), 16);\n    const b: number = parseInt(backgroundColor.substring(4, 6), 16);\n\n    const srgb: number[] = [r / 255, g / 255, b / 255];\n    const x: number[] = srgb.map((i: number): number => {\n        if (i <= 0.04045) {\n            return i / 12.92;\n        } else {\n            return Math.pow((i + 0.055) / 1.055, 2.4);\n        }\n    });\n\n    const L: number = 0.2126 * x[0] + 0.7152 * x[1] + 0.0722 * x[2];\n\n    /**\n     * if the background color is light, it returns a darkened value, otherwise it is light\n     */\n\n    if (L > 0.179) {\n        return darkenHexColor(backgroundColor, 50);\n    }\n    return '#fff';\n}\n","export enum POSITION_ENUM {\n    LEFT = 'left',\n    RIGHT = 'right',\n    TOP = 'top',\n    BOTTOM = 'bottom',\n    START = 'start',\n    END = 'end',\n    CENTER = 'center',\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n    AfterContentChecked,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    Signal,\n    signal,\n    viewChild,\n    WritableSignal,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { Nullable } from '../../util';\nimport { POSITION_ENUM } from '../../util/enums/position.enum';\nimport { IInfoBadgeSizeType, INFO_BADGE_SIZE_ENUM } from './badge-info-enum';\nimport { IconSideType } from './icon-side.type';\n\n@Component({\n    selector: 'rtui-info-badge',\n    templateUrl: './info-badge.component.html',\n    styleUrl: './info-badge.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [MatTooltip, NgClass, MatIcon, NgStyle, BlockDirective, ElemDirective],\n})\nexport class RtuiInfoBadgeComponent implements AfterContentChecked {\n    public size: InputSignal<IInfoBadgeSizeType> = input.required();\n    public text: InputSignal<string> = input.required();\n    public glyph: InputSignal<string> = input('');\n    public iconSide: InputSignal<IconSideType> = input<IconSideType>(POSITION_ENUM.RIGHT);\n    public isFontBold: InputSignal<boolean> = input(false);\n    public isMobile: InputSignalWithTransform<Nullable<boolean>, boolean> = input.required<Nullable<boolean>, boolean>({\n        transform: booleanAttribute,\n    });\n    public isTitleCollapsed: WritableSignal<boolean> = signal(false);\n    public readonly contentRef: Signal<ElementRef<HTMLElement> | undefined> = viewChild('content');\n\n    public get badgeClass(): { [key: string]: boolean | string } {\n        return {\n            'size-l': this.size() === INFO_BADGE_SIZE_ENUM.LARGE,\n            'size-m': this.size() === INFO_BADGE_SIZE_ENUM.MEDIUM,\n            'size-s': this.size() === INFO_BADGE_SIZE_ENUM.SMALL,\n            bold: this.isFontBold(),\n        };\n    }\n\n    public get iconStyles(): { [key: string]: string } {\n        return {\n            order: this.iconSide() === POSITION_ENUM.LEFT ? '-1' : '0',\n            'min-width': 'fit-content',\n        };\n    }\n\n    public ngAfterContentChecked(): void {\n        setTimeout(() => {\n            this.checkEllipsis();\n        }, 500);\n    }\n\n    public checkEllipsis(): void {\n        const element: HTMLElement | undefined = this.contentRef()?.nativeElement;\n\n        if (element) {\n            if (element.scrollWidth > element.offsetWidth) {\n                this.isTitleCollapsed.set(true);\n            }\n        }\n    }\n}\n","<div\n    rtBlock=\"c-info-badge\"\n    matTooltipClass=\"custom-tooltip\"\n    matTooltipPosition=\"above\"\n    [matTooltip]=\"text()\"\n    [ngClass]=\"badgeClass\"\n    [matTooltipDisabled]=\"!isTitleCollapsed() || isMobile()\">\n    <div rtElem=\"content\" #content>{{ text() }}</div>\n    @if (glyph()) {\n        <mat-icon [ngStyle]=\"iconStyles\">{{ glyph() }}</mat-icon>\n    }\n</div>\n","export enum INFO_BADGE_TYPE_ENUM {\n    SUCCESS = 'success',\n    INFO = 'info',\n    WARNING = 'warning',\n    PRIMARY = 'primary',\n    DISABLED = 'disabled',\n}\n\nexport type InfoBadgeType =\n    | INFO_BADGE_TYPE_ENUM.SUCCESS\n    | INFO_BADGE_TYPE_ENUM.INFO\n    | INFO_BADGE_TYPE_ENUM.WARNING\n    | INFO_BADGE_TYPE_ENUM.PRIMARY\n    | INFO_BADGE_TYPE_ENUM.DISABLED;\n","import { ChangeDetectionStrategy, Component, input, InputSignal, output, OutputEmitterRef, signal, WritableSignal } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { BlockDirective, ElemDirective } from '../../bem';\nimport { RtIconOutlinedDirective } from '../../util';\n\n@Component({\n    selector: 'rtui-file-upload',\n    templateUrl: './rtui-file-upload.component.html',\n    styleUrls: ['./rtui-file-upload.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        MatButton,\n        MatIcon,\n\n        // directives\n        ElemDirective,\n        BlockDirective,\n        RtIconOutlinedDirective,\n    ],\n    host: {\n        '[class.--dragged]': 'isDragOver()',\n        '(dragover)': 'onDragOver($event)',\n        '(dragleave)': 'onDragLeave($event)',\n        '(drop)': 'onDrop($event)',\n    },\n})\nexport class RtuiFileUploadComponent {\n    public isIconOutlined: InputSignal<boolean> = input(true);\n\n    public readonly uploadFile: OutputEmitterRef<File> = output<File>();\n\n    public readonly isDragOver: WritableSignal<boolean> = signal(false);\n\n    public onDragOver(event: DragEvent): void {\n        event?.preventDefault();\n        this.isDragOver.set(true);\n    }\n\n    public onDragLeave(event: DragEvent): void {\n        event?.preventDefault();\n        this.isDragOver.set(false);\n    }\n\n    public onDrop(event: DragEvent): void {\n        event?.preventDefault();\n        this.isDragOver.set(false);\n        if (event.dataTransfer && event.dataTransfer.files.length > 0) {\n            this.uploadFile.emit(event.dataTransfer.files[0]);\n        }\n    }\n\n    public onFileSelect(event: Event): void {\n        const input: HTMLInputElement = event.target as HTMLInputElement;\n        if (input.files && input.files.length > 0) {\n            this.uploadFile.emit(input.files[0]);\n        }\n    }\n}\n","<ng-container rtBlock=\"file-upload\">\n    <mat-icon rtElem=\"icon\" [rtIconOutlined]=\"isIconOutlined()\">backup</mat-icon>\n\n    <div rtElem=\"title\">Drag and drop your file here or</div>\n\n    <input #uploadInput hidden type=\"file\" (change)=\"onFileSelect($event)\" />\n\n    <button rtBlock=\"c-button\" mat-button color=\"accent\" (click)=\"uploadInput.click()\">Choose file</button>\n</ng-container>\n","import { DOCUMENT } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    inject,\n    input,\n    InputSignal,\n    InputSignalWithTransform,\n    model,\n    ModelSignal,\n    output,\n    OutputEmitterRef,\n    signal,\n    WritableSignal,\n    computed,\n    Signal,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip, TooltipPosition } from '@angular/material/tooltip';\nimport { ImageCroppedEvent, ImageCropperComponent } from 'ngx-image-cropper';\n\nimport { BlockDirective, ElemDirective } from '../../../bem';\nimport { Nullable, RtIconOutlinedDirective, transformStringInput } from '../../../util';\nimport { RtuiFileUploadComponent } from '../../file-uploader';\nimport { RtuiSpinnerComponent } from '../../spinner';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nexport type IImageUploadFormat = 'png' | 'jpeg' | 'webp';\n\n@Component({\n    selector: 'rtui-image-upload',\n    templateUrl: './rtui-image-upload.component.html',\n    styleUrls: ['./rtui-image-upload.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        // material\n        MatIcon,\n        MatButton,\n        MatIconButton,\n        MatTooltip,\n\n        // cropper\n        ImageCropperComponent,\n\n        // rt-tools\n        ElemDirective,\n        BlockDirective,\n        RtuiSpinnerComponent,\n        RtuiFileUploadComponent,\n        RtIconOutlinedDirective,\n    ],\n})\nexport class RtuiImageUploadComponent {\n    readonly #documentRef: Document = inject(DOCUMENT);\n\n    readonly #formats: Record<string, IImageUploadFormat> = {\n        ['png']: 'png',\n        ['jpg']: 'jpeg',\n        ['jpeg']: 'jpeg',\n        ['webp']: 'webp',\n    };\n    readonly #originalMimeType: WritableSignal<string | null> = signal(null);\n    protected readonly imageFormat: Signal<IImageUploadFormat> = computed((): IImageUploadFormat => {\n        const type: Nullable<string> = this.#originalMimeType();\n        return this.#formats[type?.toLowerCase() || ''] || 'png';\n    });\n\n    public imageUrl: ModelSignal<Nullable<string>> = model.required<Nullable<string>>();\n    public isMobile: InputSignalWithTransform<boolean, boolean> = input.required<boolean, boolean>({\n        transform: booleanAttribute,\n    });\n    public fileName: InputSignalWithTransform<string, string> = input<string, string>('image', {\n        transform: transformStringInput,\n    });\n    public isActive: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    public isSaveButtonShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    public isDownloadButtonEnabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    public isTooltipDisabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    public isActionsShown: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n        transform: booleanAttribute,\n    });\n    public loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n        transform: booleanAttribute,\n    });\n    public tooltip: InputSignal<string> = input<string>('');\n    public tooltipPosition: InputSignal<TooltipPosition> = input<TooltipPosition>('above');\n    public imageQuality: InputSignal<number> = input<number>(92);\n\n    public originalImage: WritableSignal<File | undefined> = signal(undefined);\n    public croppedImage: WritableSignal<Nullable<File>> = signal(null);\n    public tempImage: WritableSignal<Nullable<string>> = signal(null);\n\n    public readonly imageChanged: OutputEmitterRef<File> = output<File>();\n    public readonly save: OutputEmitterRef<void> = output<void>();\n\n    public onFileSelect(event: Event): void {\n        const input: HTMLInputElement = event.target as HTMLInputElement;\n\n        if (input?.files?.length) {\n            this.#originalMimeType.set(input.files[0].type);\n            this.originalImage.set(input.files[0]);\n        }\n    }\n\n    public onImageCropped(event: ImageCroppedEvent): void {\n        if (event?.blob) {\n            const croppedFile: File = new File([event.blob], this.fileName(), {\n                type: event.blob.type,\n            });\n\n            this.croppedImage.set(croppedFile);\n            this.tempImage.set(event.objectUrl);\n\n            if (!this.isActionsShown() && event?.objectUrl) {\n                this.imageChanged.emit(croppedFile);\n                this.imageUrl.set(event.objectUrl);\n            }\n        }\n    }\n\n    public onFileUpload(file: File): void {\n        this.#originalMimeType.set(file.type);\n        this.originalImage.set(file);\n    }\n\n    public onApply(): void {\n        if (this.croppedImage()) {\n            this.imageChanged.emit(this.croppedImage() as File);\n        }\n\n        this.imageUrl.set(this.tempImage());\n        this.originalImage.set(undefined);\n    }\n\n    public onCancel(): void {\n        this.originalImage.set(undefined);\n        this.croppedImage.set(null);\n        this.tempImage.set(null);\n    }\n\n    public onDownloadImage(): void {\n        if (this.imageUrl() && this.isDownloadButtonEnabled()) {\n            const imageUrl: string = this.imageUrl() as string;\n            const link: HTMLAnchorElement = this.#documentRef.createElement('a');\n            link.href = imageUrl;\n            link.download = 'Image';\n            this.#documentRef.body.appendChild(link);\n            link.click();\n            this.#documentRef.body.removeChild(link);\n        }\n\n        this.save.emit();\n    }\n}\n","@if (loading()) {\n    <rtui-spinner />\n} @else if (originalImage()) {\n    <div rtBlock=\"rtui-image-cropper\">\n        <image-cropper\n            alignImage=\"center\"\n            [format]=\"imageFormat()\"\n            [imageQuality]=\"imageQuality()\"\n            [allowMoveImage]=\"true\"\n            [maintainAspectRatio]=\"false\"\n            [imageFile]=\"originalImage()\"\n            (imageCropped)=\"onImageCropped($event)\" />\n\n        @if (isActionsShown()) {\n            <div rtElem=\"actions\">\n                <button rtBlock=\"c-button\" mat-button color=\"accent\" (click)=\"onCancel()\">Cancel</button>\n                <button mat-flat-button (click)=\"onApply()\">Apply</button>\n            </div>\n        }\n    </div>\n} @else {\n    <input #uploadInput hidden type=\"file\" accept=\".jpg,.jpeg,.png,.webp\" (change)=\"onFileSelect($event)\" />\n\n    @if (imageUrl()) {\n        <div rtBlock=\"rtui-image-container\">\n            <img\n                rtElem=\"image\"\n                role=\"button\"\n                tabindex=\"0\"\n                alt=\"img\"\n                matTooltipClass=\"custom-tooltip\"\n                [matTooltip]=\"tooltip()\"\n                [matTooltipPosition]=\"tooltipPosition()\"\n                [matTooltipDisabled]=\"isMobile() || !tooltip() || !isActive() || isTooltipDisabled()\"\n                [rtMod]=\"{ active: isActive() }\"\n                [src]=\"imageUrl()\"\n                (click)=\"uploadInput.click()\"\n                (keydown.enter)=\"uploadInput.click()\" />\n\n            @if (isSaveButtonShown()) {\n                <button\n                    rtElem=\"action\"\n                    mat-icon-button\n                    aria-label=\"Download image\"\n                    matTooltip=\"Download image\"\n                    matTooltipPosition=\"above\"\n                    [matTooltipDisabled]=\"isMobile()\"\n                    (click)=\"onDownloadImage()\">\n                    <mat-icon rtIconOutlined>download</mat-icon>\n                </button>\n            }\n        </div>\n    } @else {\n        <rtui-file-upload (uploadFile)=\"onFileUpload($event)\" />\n    }\n}\n","/**\n * Public API Surface of @rt/tools\n */\n\n// tools\nexport * from './lib/bem';\nexport * from './lib/storage';\nexport * from './lib/store';\nexport * from './lib/idb-storage';\n\n// ui-kit\nexport * from './lib/ui-kit/modal';\nexport * from './lib/ui-kit/scrollable';\nexport * from './lib/ui-kit/side-menu';\nexport * from './lib/ui-kit/spinner';\nexport * from './lib/ui-kit/aside';\nexport * from './lib/ui-kit/buttons';\nexport * from './lib/ui-kit/toolbar';\nexport * from './lib/ui-kit/header';\nexport * from './lib/ui-kit/table';\nexport * from './lib/ui-kit/providers';\nexport * from './lib/ui-kit/snack-bar';\nexport * from './lib/ui-kit/animation';\nexport * from './lib/ui-kit/info-badge';\nexport * from './lib/ui-kit/toggle';\nexport * from './lib/ui-kit/file-uploader';\nexport * from './lib/ui-kit/dynamic-selectors';\nexport * from './lib/ui-kit/image-uploader';\nexport * from './lib/ui-kit/popover';\nexport * from './lib/ui-kit/action-bar';\n\n// utils\nexport * from './lib/util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BlockDirective","i1","i2","MatFormField"],"mappings":"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"}