@rt-tools/ui-kit 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/rt-tools-ui-kit.mjs +105 -17
- package/fesm2022/rt-tools-ui-kit.mjs.map +1 -1
- package/package.json +5 -5
- package/rt-tools-ui-kit-0.6.0.tgz +0 -0
- package/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.scss +46 -5
- package/types/rt-tools-ui-kit.d.ts +36 -4
- package/rt-tools-ui-kit-0.5.0.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit.mjs","sources":["../../../projects/ui-kit/src/lib/ui-kit/modal/modal.component.ts","../../../projects/ui-kit/src/lib/ui-kit/modal/modal.component.html","../../../projects/ui-kit/src/lib/ui-kit/modal/modal.types.ts","../../../projects/ui-kit/src/lib/ui-kit/modal/modal.service.ts","../../../projects/ui-kit/src/lib/ui-kit/scrollable/scrollable-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/scrollable/scrollable-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/side-menu/side-menu.types.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/side-menu.logic.ts","../../../projects/ui-kit/src/lib/ui-kit/config/rt-ui-config.ts","../../../projects/ui-kit/src/lib/ui-kit/icon/rtui-icon.component.ts","../../../projects/ui-kit/src/lib/ui-kit/icon/rtui-icon.component.html","../../../projects/ui-kit/src/lib/ui-kit/spinner/spinner.component.ts","../../../projects/ui-kit/src/lib/ui-kit/spinner/spinner.component.html","../../../projects/ui-kit/src/lib/ui-kit/buttons/unified-button/rtui-button.component.ts","../../../projects/ui-kit/src/lib/ui-kit/buttons/unified-button/rtui-button.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/clear-search-button/rtui-clear-button.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/clear-search-button/rtui-clear-button.component.html","../../../projects/ui-kit/src/lib/ui-kit/tooltip/hide-tooltip.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu-sub-item/sub-menu-title-parts.pipe.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.html","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/aside.types.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/aside.enums.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/panel/aside-panel.component.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/panel/aside-panel.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/aside.service.ts","../../../projects/ui-kit/src/lib/ui-kit/toolbar/toolbar.component.ts","../../../projects/ui-kit/src/lib/ui-kit/toolbar/toolbar.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/components/container/aside-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/container/aside-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/buttons/multi-button/rtui-multi-button.component.ts","../../../projects/ui-kit/src/lib/ui-kit/buttons/multi-button/rtui-multi-button.component.html","../../../projects/ui-kit/src/lib/ui-kit/header/header.component.ts","../../../projects/ui-kit/src/lib/ui-kit/header/header.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-column.interface.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-component.interface.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/compare-prop-names.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-config.service.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-cell/table-header-cell.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-cell/table-header-cell.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-filter-cell/table-header-filter-cell.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-filter-cell/table-header-filter-cell.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-stop-row-click-attribute.const.ts","../../../projects/ui-kit/src/lib/ui-kit/table/directives/rtui-table-row-click-directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table/rtui-table.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table/rtui-table.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/default-pagination.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/actions/rtui-dynamic-selector-list-actions.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/actions/rtui-dynamic-selector-list-actions.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-selectors-directive.ts","../../../projects/ui-kit/src/lib/ui-kit/toggle/toggle-size.type.enum.ts","../../../projects/ui-kit/src/lib/ui-kit/toggle/rtui-toggle.component.ts","../../../projects/ui-kit/src/lib/ui-kit/toggle/rtui-toggle.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/multi-selector-popup/rtui-multi-selector-popup.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/multi-selector-popup/rtui-multi-selector-popup.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/placeholder/rtui-dynamic-selector-placeholder.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/placeholder/rtui-dynamic-selector-placeholder.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/selected-list/rtui-dynamic-selector-selected-list.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/selected-list/rtui-dynamic-selector-selected-list.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-config-aside/rt-table-config-aside.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-config-aside/rt-table-config-aside.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-container/table-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-container/table-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/dynamic-list.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/dynamic-list.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/common-selectors.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/dynamic-list-selectors.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-selectors.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/index.ts","../../../projects/ui-kit/src/lib/ui-kit/table/directives/rtui-stop-table-row-click.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/popover/rtui-popover-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/popover/rtui-popover-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/popover/rt-popover.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.html","../../../projects/ui-kit/src/lib/ui-kit/action-bar/rt-action-bar.service.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/container/rtui-action-bar-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/container/rtui-action-bar-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/providers.ts","../../../projects/ui-kit/src/lib/ui-kit/snack-bar/snack-bar.compontent.ts","../../../projects/ui-kit/src/lib/ui-kit/snack-bar/snack-bar.component.html","../../../projects/ui-kit/src/lib/ui-kit/snack-bar/rt-snack-bar.service.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/badge-info-enum.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/calculate-text-color-based-on-back.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/info-badge.component.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/info-badge.component.html","../../../projects/ui-kit/src/lib/ui-kit/info-badge/info-badge-types.enum.ts","../../../projects/ui-kit/src/lib/ui-kit/file-uploader/rtui-file-upload.component.ts","../../../projects/ui-kit/src/lib/ui-kit/file-uploader/rtui-file-upload.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-input/rtui-dynamic-input.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-input/rtui-dynamic-input.component.html","../../../projects/ui-kit/src/lib/ui-kit/image-uploader/image-uploader/rtui-image-upload.component.ts","../../../projects/ui-kit/src/lib/ui-kit/image-uploader/image-uploader/rtui-image-upload.component.html","../../../projects/ui-kit/src/lib/ui-kit/theme/rtui-theme.types.ts","../../../projects/ui-kit/src/lib/ui-kit/theme/rtui-theme.service.ts","../../../projects/ui-kit/src/lib/ui-kit/theme/rtui-theme.directive.ts","../../../projects/ui-kit/src/public-api.ts","../../../projects/ui-kit/src/rt-tools-ui-kit.ts"],"sourcesContent":["import { 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, ConcatClassesPipe, ElemDirective } from '@rt-tools/core';\nimport { checkIsMatchingValues, SanitizePipe } from '@rt-tools/core';\nimport { IModal } from './modal.types';\n\nconst BEM_BLOCK: string = 'rtui-modal';\n\n@Component({\n selector: BEM_BLOCK,\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: BEM_BLOCK },\n imports: [\n NgStyle,\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 ConcatClassesPipe,\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 = BEM_BLOCK;\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 [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 [class]=\"[button.className] | concatClasses\"\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 { Type } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { Observable } from 'rxjs';\n\nimport { TNullable } from '@rt-tools/utils';\n\n// Modal enums\nexport enum EModalWindowSize {\n SM = '25rem',\n MD = '45rem',\n LG = '65rem',\n FULL = '100%',\n}\n\nexport type TModalWindowSizeType = EModalWindowSize.SM | EModalWindowSize.MD | EModalWindowSize.LG | EModalWindowSize.FULL;\n\n/** Вид кнопки окна — набор Material, перечисленный один раз. */\nexport type TModalButtonAppearance = 'standard' | 'raised' | 'flat' | 'stroked' | 'fab' | 'mini-fab';\n\n// Modal data interfaces\nexport interface IModalIcon {\n value: string;\n style?: { [className: string]: string };\n}\n\nexport interface INameValueType<N = string, V = string> {\n name: N;\n value: V;\n}\n\nexport interface ISelect<T> {\n value: Array<INameValueType<string, T>>;\n label?: string;\n hint?: string;\n}\n\nexport namespace IModal {\n export interface Button<T> {\n text: string;\n color?: ThemePalette;\n value: TNullable<T>;\n appearance?: TModalButtonAppearance;\n validateSelect?: boolean;\n assignSelectedValue?: boolean;\n style?: { [className: string]: string };\n className?: string;\n }\n\n export interface Data<T> {\n buttonsAlign: 'start' | 'center' | 'end';\n buttons: Array<Button<T>>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component?: Type<any>;\n icon?: IModalIcon;\n title?: string;\n text?: string;\n confirmation?: string;\n input?: {\n label: string;\n placeholder: string;\n value: string;\n sample?: string;\n };\n textArea?: {\n value: string;\n placeholder: string;\n };\n select?: ISelect<T>;\n }\n\n export interface DataAnswer<T> {\n value: T;\n message: string;\n }\n\n export type ConfirmResponsePredicate<T> = (answer: TNullable<IModal.DataAnswer<T>>) => boolean;\n\n export interface ConfirmResponse<T> {\n on(predicate: ConfirmResponsePredicate<T>): Observable<TNullable<IModal.DataAnswer<T>>>;\n\n onCancel(cancel?: ConfirmResponsePredicate<T>): Observable<TNullable<IModal.DataAnswer<T>>>;\n\n onConfirm(confirm?: ConfirmResponsePredicate<T>): Observable<TNullable<IModal.DataAnswer<T>>>;\n }\n}\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 { TNullable } from '@rt-tools/utils';\nimport { EModalWindowSize } from './modal.types';\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: EModalWindowSize.MD,\n autoFocus: false,\n closeOnNavigation: true,\n };\n\n public confirm<T>(data: IModal.Data<T>, config?: MatDialogConfig): Observable<TNullable<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<TNullable<IModal.DataAnswer<T>>> = new ReplaySubject<TNullable<IModal.DataAnswer<T>>>(1);\n const result$: Observable<TNullable<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: TNullable<IModal.DataAnswer<T>>) =>\n !(Boolean(answer) && Boolean(answer?.value));\n\n const defaultConfirm: IModal.ConfirmResponsePredicate<T> = (answer: TNullable<IModal.DataAnswer<T>>) =>\n Boolean(answer) && Boolean(answer?.value);\n\n return {\n onCancel: (cancel: IModal.ConfirmResponsePredicate<T> = defaultCancel) =>\n result$.pipe(filter((answer: TNullable<IModal.DataAnswer<T>>) => cancel(answer))),\n onConfirm: (confirm: IModal.ConfirmResponsePredicate<T> = defaultConfirm) =>\n result$.pipe(filter((answer: TNullable<IModal.DataAnswer<T>>) => confirm(answer))),\n on: (predicate: IModal.ConfirmResponsePredicate<T>) =>\n result$.pipe(filter((answer: TNullable<IModal.DataAnswer<T>>) => predicate(answer))),\n };\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n InputSignal,\n signal,\n Signal,\n TemplateRef,\n Type,\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 '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\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\nconst BEM_BLOCK: string = 'rtui-scrollable';\n\n@Component({\n selector: 'rtui-scrollable',\n host: { class: BEM_BLOCK },\n templateUrl: './scrollable-container.component.html',\n styleUrls: ['./scrollable-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [BlockDirective, ElemDirective, NgTemplateOutlet, MatIcon, MatTooltip],\n})\nexport class RtuiScrollableContainerComponent {\n /** Подпись значка. Словаря у кита нет, и подпись зашита по-английски, как соседние. */\n protected readonly scrollHintLabel: string = 'Scroll down';\n\n protected readonly bodyRef: Signal<TNullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('body');\n protected readonly footerRef: Signal<TNullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('foot');\n\n /**\n * Ниже окна области ещё есть содержимое. Считается по трём числам самого узла, а не по числу\n * пунктов: область не знает, что ей подали, и высота строки у каждого потребителя своя.\n */\n protected readonly hasMoreBelow: WritableSignal<boolean> = signal(false);\n\n /**\n * На сколько полоса растушёвки поднята над низом области. Она обязана кончиться там, где\n * начинается содержимое подвала: разделитель потребитель рисует первой его строкой, и полоса,\n * оборвавшаяся выше, оставляет до него чистый фон. Считается замером — верхний отступ подвала\n * потребитель пишет как хочет, и вычесть его в стилях не из чего. Без подвала полоса стоит у\n * самого низа.\n */\n protected readonly hintBottom: WritableSignal<number> = signal(0);\n\n public readonly headerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerHeaderDirective, {\n read: TemplateRef,\n });\n public readonly contentTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerContentDirective, {\n read: TemplateRef,\n });\n public readonly footerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerFooterDirective, {\n read: TemplateRef,\n });\n\n /**\n * Признак того, что снизу осталось непоказанное. Выключен по умолчанию: область рисуют\n * десятки экранов, и признак, поставленный безусловно, сдвинул бы вид каждому из них.\n */\n public readonly isScrollHintShown: InputSignal<boolean> = input<boolean>(false);\n\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Наблюдатель за размером тела. Событие прокрутки приходит только после движения руки, а\n * список не влезает уже в первую минуту показа: без наблюдателя признак появлялся бы у того,\n * кто и так догадался прокрутить, и молчал у того, кому он нужен.\n */\n #sizeWatch: TNullable<ResizeObserver> = null;\n\n constructor() {\n afterRenderEffect((): void => {\n const body: TNullable<ElementRef<HTMLElement>> = this.bodyRef();\n\n this.onBodyScroll();\n\n if (!body || this.#sizeWatch) {\n return;\n }\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.#sizeWatch = new ResizeObserver((): void => this.onBodyScroll());\n this.#sizeWatch.observe(body.nativeElement);\n\n const footer: TNullable<ElementRef<HTMLElement>> = this.footerRef();\n\n // Подвал наблюдается наравне с телом: его высота меняется своим содержимым, а от неё\n // считается подъём полосы. Не наблюдавшаяся, она осталась бы стоять по прежней высоте\n // подвала и наехала бы на его первую строку.\n if (footer) {\n this.#sizeWatch.observe(footer.nativeElement);\n }\n });\n\n this.#destroyRef.onDestroy((): void => {\n this.#sizeWatch?.disconnect();\n this.#sizeWatch = null;\n });\n }\n\n /**\n * Нажатие на значок уводит список к самому низу. Нажатие останавливается здесь и в список под\n * значком не уходит: под ним живой пункт, и человек, целившийся в подсказку, уехал бы на\n * чужой экран.\n */\n public onScrollHintClick(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n const body: TNullable<ElementRef<HTMLElement>> = this.bodyRef();\n\n if (!body) {\n return;\n }\n\n body.nativeElement.scrollTo({ top: body.nativeElement.scrollHeight, behavior: 'smooth' });\n }\n\n public onBodyScroll(): void {\n this.#measureHintBottom();\n\n const body: TNullable<ElementRef<HTMLElement>> = this.bodyRef();\n\n if (!body) {\n this.hasMoreBelow.set(false);\n\n return;\n }\n\n const node: HTMLElement = body.nativeElement;\n\n // Целый пиксель запаса: дробная высота строки оставляет остаток, при котором прокрутка\n // уже в самом низу, а разность всё ещё больше нуля — признак висел бы навсегда.\n this.hasMoreBelow.set(node.scrollHeight - node.scrollTop - node.clientHeight > 1);\n }\n\n /**\n * Подъём полосы над низом области: высота подвала без его верхнего отступа. Ровно на этом\n * месте начинается содержимое подвала, и до него полоса и должна доходить.\n */\n #measureHintBottom(): void {\n const footer: TNullable<ElementRef<HTMLElement>> = this.footerRef();\n\n if (!footer) {\n this.hintBottom.set(0);\n\n return;\n }\n\n const node: HTMLElement = footer.nativeElement;\n const paddingTop: number = parseFloat(getComputedStyle(node).paddingTop) || 0;\n\n this.hintBottom.set(Math.max(node.offsetHeight - paddingTop, 0));\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 #body rtElem=\"content\" (scroll)=\"onBodyScroll()\">\n <ng-container *ngTemplateOutlet=\"contentTpl() ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div #foot rtElem=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </div>\n }\n\n <!--\n Признак того, что снизу осталось непоказанное: край списка, ровно обрезанный подвалом,\n читается как конец списка, и человек считает, что пункт пропал. Полоса живёт на хосте, а\n не внутри тела: тело обрезает всё по своему краю, и полоса обрывалась на верхнем отступе\n подвала — между ней и разделителем, который потребитель рисует первой строкой подвала,\n оставалась полоса чистого фона. Отступ этот берётся замером: потребитель пишет его как\n хочет — одним значением, двумя, четырьмя, — и вычесть его в стилях не из чего.\n -->\n @if (isScrollHintShown() && hasMoreBelow()) {\n <div rtElem=\"scroll-hint\" qa-dataid=\"scrollable-scroll-hint\" [attr.aria-label]=\"scrollHintLabel\" [style.bottom.px]=\"hintBottom()\">\n <mat-icon\n rtElem=\"scroll-hint-icon\"\n role=\"button\"\n tabindex=\"0\"\n matTooltipPosition=\"above\"\n [matTooltip]=\"scrollHintLabel\"\n (click)=\"onScrollHintClick($event)\"\n (keydown.enter)=\"onScrollHintClick($event)\">\n keyboard_arrow_down\n </mat-icon>\n </div>\n }\n</ng-container>\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Меню, в котором стоит подпункт. Токен вместо самого компонента: подпункт брал его классом, а\n * меню объявляет подпункт в своих импортах — получался круг «меню → подпункт → меню».\n *\n * Подпункту нужно от меню два значения: какие пункты сейчас раскрыты и что набрано в поиске —\n * второе затем, чтобы отметить в подписи то, чем она совпала.\n */\nexport interface IRtuiSideMenuHost {\n readonly activeMenuIds: Signal<Array<string | number>>;\n readonly subMenuQuery: Signal<string>;\n}\n\nexport const RTUI_SIDE_MENU: InjectionToken<IRtuiSideMenuHost> = new InjectionToken<IRtuiSideMenuHost>('RTUI_SIDE_MENU');\n\nexport namespace ISideMenu {\n export type ItemData = string | number | object;\n\n /**\n * Чем подменю держится открытым: наведением, как было всегда, или закреплением — тогда оно\n * стоит открытым, пока человек сам его не свернёт.\n */\n export type SubMenuMode = 'hover' | 'pinned';\n\n export interface Item {\n id: string | number;\n\n icon?: string;\n name?: string;\n link?: string;\n submenu?: Item[];\n iconButton?: {\n icon: string;\n data?: ItemData;\n };\n }\n}\n","import { ISideMenu } from './side-menu.types';\n\n/**\n * Отбор пунктов подменю по подстроке подписи.\n *\n * Считается здесь, а не в шаблоне: разметка меню держит две раскладки разом, и ветвление отбора\n * в ней читается хуже вызова.\n */\nexport function filterSubMenuItems(items: ReadonlyArray<ISideMenu.Item>, query: string): ISideMenu.Item[] {\n const needle: string = query.trim().toLowerCase();\n\n if (needle === '') {\n return [...items];\n }\n\n return items.filter((item: ISideMenu.Item): boolean => !!item.name?.toLowerCase().includes(needle));\n}\n\n/**\n * Ключ, под которым хранится выбор человека.\n *\n * Назван приставкой кита: хранилище браузера общее на весь адрес, и короткое имя вроде `mode`\n * столкнулось бы с ключом потребителя молча — оба пишут в одно место.\n */\nexport const SUB_MENU_MODE_KEY: string = 'rtui-side-menu-sub-menu-mode';\n\n/**\n * Чтение сохранённого выбора.\n *\n * Мода подменю — настройка человека, а не состояние экрана: она обязана переживать перезагрузку.\n * Хранит её потребитель — кит не знает, где у приложения лежат настройки человека, — а эти две\n * функции дают ему готовый и одинаковый способ, чтобы ключ не расходился от приложения к\n * приложению.\n *\n * Отказ хранилища работу не останавливает: браузер отдаёт его закрытым в приватном окне и при\n * запрете данных сайта, и упавшее чтение оставило бы человека без меню вовсе. Незнакомое значение\n * читается так же, как пустое, — прежней модой.\n */\nexport function readSubMenuMode(storage: Storage | null): ISideMenu.SubMenuMode {\n if (storage === null) {\n return 'hover';\n }\n\n try {\n return storage.getItem(SUB_MENU_MODE_KEY) === 'pinned' ? 'pinned' : 'hover';\n } catch {\n return 'hover';\n }\n}\n\n/** Запись выбора. Отказ хранилища глушится по той же причине, что и при чтении. */\nexport function writeSubMenuMode(storage: Storage | null, mode: ISideMenu.SubMenuMode): void {\n if (storage === null) {\n return;\n }\n\n try {\n storage.setItem(SUB_MENU_MODE_KEY, mode);\n } catch {\n // хранилище закрыто настройками браузера — выбор просто не переживёт перезагрузку\n }\n}\n\n/** Ключ ширины закреплённого подменю. Назван приставкой кита по той же причине, что и ключ моды. */\nexport const SUB_MENU_WIDTH_KEY: string = 'rtui-side-menu-sub-menu-width';\n\n/**\n * Пределы ширины подменю в пикселях.\n *\n * Взяты половиной и двойным от оформления по умолчанию: уже нижнего не помещается ни одна подпись\n * пункта, шире верхнего подменю закрывает содержимое страницы, ради которого меню и открывали.\n */\nexport const SUB_MENU_WIDTH_MIN: number = 120;\nexport const SUB_MENU_WIDTH_MAX: number = 480;\n\n/** Приведение ширины к пределам. Тянут её мышью, и рука уходит за край экрана раньше, чем за предел. */\nexport function clampSubMenuWidth(width: number): number {\n return Math.min(SUB_MENU_WIDTH_MAX, Math.max(SUB_MENU_WIDTH_MIN, width));\n}\n\n/**\n * Чтение сохранённой ширины.\n *\n * Ширины нет — возвращается пустота, и ширину ставит оформление: своё число здесь подменило бы\n * значение из набора токенов, и правка токена перестала бы что-либо менять.\n *\n * Отказ хранилища и нечисловое значение читаются одинаково — как отсутствие выбора, по той же\n * причине, что и при чтении моды.\n */\nexport function readSubMenuWidth(storage: Storage | null): number | null {\n if (storage === null) {\n return null;\n }\n\n try {\n const stored: string | null = storage.getItem(SUB_MENU_WIDTH_KEY);\n\n if (stored === null || stored.trim() === '') {\n return null;\n }\n\n const width: number = Number(stored);\n\n return Number.isFinite(width) ? clampSubMenuWidth(width) : null;\n } catch {\n return null;\n }\n}\n\n/** Запись ширины. Пишется приведённая: за пределы её уводит и рука, и чужая правка ключа. */\nexport function writeSubMenuWidth(storage: Storage | null, width: number): void {\n if (storage === null) {\n return;\n }\n\n try {\n storage.setItem(SUB_MENU_WIDTH_KEY, String(clampSubMenuWidth(width)));\n } catch {\n // хранилище закрыто настройками браузера — ширина просто не переживёт перезагрузку\n }\n}\n\n/** Кусок подписи: отмеченный — тот, которым она совпала с запросом. */\nexport interface ISubMenuTitlePart {\n text: string;\n matched: boolean;\n}\n\n/**\n * Резка подписи на совпавшие и несовпавшие куски.\n *\n * Отмечается найденное, а не вся подпись: подсвеченная целиком, она говорит ровно то же, что и её\n * присутствие в списке. Отмечаются все вхождения — подпись раздела повторяет слово в себе чаще,\n * чем кажется, и отмеченное одно первое читается как «второго нет».\n *\n * Сравнение регистронезависимое, как и отбор, а куски режутся из оригинала: приведение к нижнему\n * регистру переписало бы чужие названия разделов.\n */\nexport function splitSubMenuTitle(name: string, query: string): ISubMenuTitlePart[] {\n if (name === '') {\n return [];\n }\n\n const needle: string = query.trim().toLowerCase();\n\n if (needle === '') {\n return [{ text: name, matched: false }];\n }\n\n const haystack: string = name.toLowerCase();\n const parts: ISubMenuTitlePart[] = [];\n let from: number = 0;\n\n for (let at: number = haystack.indexOf(needle, from); at !== -1; at = haystack.indexOf(needle, from)) {\n if (at > from) {\n parts.push({ text: name.slice(from, at), matched: false });\n }\n\n parts.push({ text: name.slice(at, at + needle.length), matched: true });\n from = at + needle.length;\n }\n\n if (from < name.length) {\n parts.push({ text: name.slice(from), matched: false });\n }\n\n return parts;\n}\n","import { InjectionToken } from '@angular/core';\n\nimport type { IRtuiButton } from '../buttons/unified-button/rtui-button.types';\nimport type { TRtThemeType } from '../theme/rtui-theme.types';\n\n/**\n * Design system a control renders with:\n * - `'custom'` — the rt-tools look (design tokens, pill shapes). The default.\n * - `'material'` — the control renders a NATIVE Angular Material component\n * (e.g. the button pill becomes a real `matButton`), for apps that have not\n * migrated their visual language yet or need to match surrounding Material controls.\n */\nexport type TRtUiDesign = 'material' | 'custom';\n\nexport namespace IRtUiConfig {\n /** Global defaults applied app-wide unless a component-level setting or an input overrides them. */\n export interface Global {\n /** Initial theme used when the user has no persisted preference. */\n theme?: TRtThemeType;\n /** Initial brand color scheme (see `RtThemeService.registerColorScheme`) when none is persisted. */\n colorScheme?: string;\n /** Default design for every design-aware control. */\n design?: TRtUiDesign;\n }\n\n /** Per-instance-overridable defaults for `rtui-button`. */\n export interface Button {\n design?: TRtUiDesign;\n size?: IRtuiButton.Size;\n radius?: IRtuiButton.Radius;\n appearance?: IRtuiButton.Appearance;\n }\n\n /** Component-level settings. Each entry overrides `global` for that component only. */\n export interface Components {\n button?: Button;\n }\n\n export interface Config {\n global?: Global;\n components?: Components;\n }\n}\n\n/**\n * Application-wide UI configuration for rt-tools components.\n *\n * Resolution order (most specific wins):\n * 1. the component input on a concrete instance,\n * 2. `components.<name>` in this config,\n * 3. `global` in this config,\n * 4. the library default.\n *\n * Provide it via {@link provideRtUi}:\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtUi({\n * global: { theme: 'auto', design: 'custom' },\n * components: { button: { design: 'material' } },\n * }),\n * ],\n * });\n * ```\n *\n * @publicApi\n */\nexport const RT_UI_CONFIG: InjectionToken<IRtUiConfig.Config> = new InjectionToken<IRtUiConfig.Config>('RT_UI_CONFIG', {\n providedIn: 'root',\n factory: (): IRtUiConfig.Config => ({}),\n});\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { transformStringInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nexport type TRtuiIconSizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | '3xl';\nexport type TRtuiIconThemeType =\n 'inherit' | 'primary' | 'primary-strong' | 'neutral' | 'disabled' | 'muted' | 'white' | 'danger' | 'success';\n\nconst BEM_BLOCK: string = 'rtui-icon';\nconst MATERIAL_SYMBOLS_FONT: string = 'Material Symbols Outlined';\nconst fontLoaded: WritableSignal<boolean> = signal<boolean>(false);\n\n@Component({\n selector: 'rtui-icon',\n templateUrl: './rtui-icon.component.html',\n styleUrl: './rtui-icon.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // material\n MatIcon,\n\n // directives\n RtIconOutlinedDirective,\n ],\n hostDirectives: [\n {\n directive: MatTooltip,\n inputs: ['matTooltip: tooltip', 'matTooltipPosition: tooltipPosition', 'matTooltipDisabled: tooltipDisabled'],\n },\n ],\n host: {\n class: BEM_BLOCK,\n '[class]': 'hostClasses()',\n },\n})\nexport class RtuiIconComponent {\n readonly #document: Document = inject(DOCUMENT);\n\n protected readonly fontLoaded: Signal<boolean> = fontLoaded.asReadonly();\n protected readonly hostClasses: Signal<string> = computed(() => {\n const classes: string[] = [`rtui-icon--size-${this.size()}`, `rtui-icon--theme-${this.theme()}`];\n\n if (this.rotate()) {\n classes.push('rtui-icon--rotate');\n }\n\n if (!this.fontLoaded()) {\n classes.push('rtui-icon--loading');\n }\n\n return classes.join(' ');\n });\n\n public readonly size: InputSignal<TRtuiIconSizeType> = input<TRtuiIconSizeType>('md');\n public readonly theme: InputSignal<TRtuiIconThemeType> = input<TRtuiIconThemeType>('inherit');\n public readonly glyph: InputSignalWithTransform<string, unknown> = input<string, unknown>('', { transform: transformStringInput });\n public readonly outlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly rotate: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n constructor() {\n if (!fontLoaded()) {\n this.#checkFontLoaded();\n }\n }\n\n #checkFontLoaded(): void {\n const fonts: FontFaceSet = this.#document.fonts;\n\n if (fonts.check(`1rem \"${MATERIAL_SYMBOLS_FONT}\"`)) {\n fontLoaded.set(true);\n return;\n }\n\n fonts.ready.then(() => {\n fontLoaded.set(true);\n });\n }\n}\n","<mat-icon [rtIconOutlined]=\"outlined()\">\n @if (glyph()) {\n {{ glyph() }}\n } @else {\n <ng-content />\n }\n</mat-icon>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n inject,\n input,\n InputSignalWithTransform,\n numberAttribute,\n OnInit,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-spinner';\n\n@Component({\n selector: 'rtui-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n imports: [MatProgressSpinnerModule, BlockDirective, ElemDirective, ModDirective],\n host: { class: BEM_BLOCK },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiSpinnerComponent implements OnInit {\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #shown: WritableSignal<boolean> = signal(false);\n\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 * Сколько миллисекунд спиннер ждёт, прежде чем стать видимым.\n *\n * Умолчание — ноль: спиннер, вставленный без задержки, ведёт себя как прежде. Ожидание,\n * кончившееся раньше срока, спиннера не показывает вовсе — вспышки на экране не случается.\n */\n public delay: InputSignalWithTransform<number, number> = input<number, number>(0, {\n transform: numberAttribute,\n });\n\n /** Спиннер виден: задержки не назначали или её срок вышел. */\n public readonly visible: Signal<boolean> = this.#shown.asReadonly();\n\n /**\n * Отсчёт начинается на вставке, а не в конструкторе: до первого крючка вход держит своё\n * умолчание, и задержка, названная потребителем, конструктору ещё не видна.\n */\n public ngOnInit(): void {\n const wait: number = this.delay();\n\n if (wait <= 0) {\n this.#shown.set(true);\n\n return;\n }\n\n const timer: ReturnType<typeof setTimeout> = setTimeout(() => this.#shown.set(true), wait);\n\n // Снятый до срока спиннер счётчик за собой убирает: отложенный показ иначе рисовал бы\n // кружок поверх готового экрана.\n this.#destroyRef.onDestroy(() => clearTimeout(timer));\n }\n}\n","@if (visible()) {\n <ng-container rtBlock=\"rtui-spinner\">\n <div rtElem=\"container\" [rtMod]=\"{ 'bgr-color': showBackground() }\">\n <div rtElem=\"wrapper\" [rtMod]=\"{ 'bgr-color': showBox() }\">\n <mat-spinner [diameter]=\"diameter()\" />\n </div>\n </div>\n </ng-container>\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n OutputEmitterRef,\n Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { MatButton, MatButtonAppearance } from '@angular/material/button';\nimport { MatRipple } from '@angular/material/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { transformStringInput } from '@rt-tools/utils';\n\nimport { IRtUiConfig, RT_UI_CONFIG, TRtUiDesign } from '../../config';\nimport { IRtuiButton } from './rtui-button.types';\nimport { RtuiIconComponent, TRtuiIconSizeType } from '../../icon';\nimport { RtuiSpinnerComponent } from '../../spinner';\n\nconst BEM_BLOCK: string = 'rtui-button';\n\n@Component({\n selector: 'rtui-button',\n templateUrl: './rtui-button.component.html',\n styleUrl: './rtui-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // rt-tools\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtuiSpinnerComponent,\n\n // components\n RtuiIconComponent,\n\n // material\n MatButton,\n MatRipple,\n ],\n hostDirectives: [\n {\n directive: MatTooltip,\n inputs: [\n 'matTooltip: tooltip',\n 'matTooltipPosition: tooltipPosition',\n 'matTooltipDisabled: tooltipDisabled',\n 'matTooltipClass: tooltipClass',\n ],\n },\n ],\n host: {\n class: BEM_BLOCK,\n '[class]': 'hostModifiers()',\n '[class.rtui-button-full]': 'fullWidth()',\n },\n})\nexport class RtuiButtonComponent {\n /** App-wide defaults; the resolution order is: instance input → `components.button` → `global` → library default. */\n readonly #config: IRtUiConfig.Config = inject(RT_UI_CONFIG);\n readonly #buttonConfig: IRtUiConfig.Button | undefined = this.#config.components?.button;\n\n /** Design system the button renders with — see {@link TRtUiDesign}. */\n protected readonly resolvedDesign: Signal<TRtUiDesign> = computed(\n () => this.design() ?? this.#buttonConfig?.design ?? this.#config.global?.design ?? 'custom'\n );\n protected readonly resolvedSize: Signal<IRtuiButton.Size> = computed(() => this.size() ?? this.#buttonConfig?.size ?? 'md');\n protected readonly resolvedRadius: Signal<IRtuiButton.Radius> = computed(() => this.radius() ?? this.#buttonConfig?.radius ?? 'full');\n protected readonly resolvedAppearance: Signal<IRtuiButton.Appearance | undefined> = computed(\n () => this.appearance() ?? this.#buttonConfig?.appearance\n );\n /** Native Material button appearance the pill renders with under `design: 'material'`. */\n protected readonly materialAppearance: Signal<MatButtonAppearance> = computed(() => {\n const appearanceMap: Record<IRtuiButton.Appearance, MatButtonAppearance> = {\n solid: 'filled',\n outline: 'outlined',\n light: 'tonal',\n text: 'text',\n };\n return appearanceMap[this.resolvedAppearance() ?? 'solid'];\n });\n protected readonly resolvedIconSize: Signal<TRtuiIconSizeType> = computed(() => {\n const iconSize: TRtuiIconSizeType | undefined = this.iconSize();\n\n if (iconSize) {\n return iconSize;\n }\n\n const sizeMap: Record<IRtuiButton.Size, TRtuiIconSizeType> = {\n xs: 'xs',\n sm: 'sm',\n md: 'sm',\n lg: 'md',\n };\n return sizeMap[this.resolvedSize()];\n });\n protected readonly spinnerSize: Signal<number> = computed(() => {\n const sizeMap: Record<IRtuiButton.Size, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n };\n return this.spinnerDiameter() ?? sizeMap[this.resolvedSize()];\n });\n protected readonly modifiers: Signal<Record<string, boolean>> = computed(() => ({\n [`type-${this.type()}`]: true,\n [`design-${this.resolvedDesign()}`]: true,\n [`variant-${this.variant()}`]: true,\n [`size-${this.resolvedSize()}`]: true,\n [`radius-${this.resolvedRadius()}`]: true,\n [`appearance-${this.resolvedAppearance()}`]: !!this.resolvedAppearance(),\n loading: this.loading(),\n disabled: this.disabled(),\n }));\n /**\n * Те же модификаторы строкой — они висят на хосте, потому что описывают блок целиком.\n * Директива модификатора сюда не дотянется: хост объявлен декоратором, а не разметкой.\n */\n protected readonly hostModifiers: Signal<string> = computed(() =>\n Object.entries(this.modifiers())\n .filter(([, isOn]: [string, boolean]) => isOn)\n .map(([name]: [string, boolean]) => `${BEM_BLOCK}--${name}`)\n .join(' ')\n );\n\n public readonly type: InputSignal<IRtuiButton.Type> = input<IRtuiButton.Type>('icon');\n public readonly design: InputSignal<TRtUiDesign | undefined> = input<TRtUiDesign>();\n public readonly variant: InputSignal<IRtuiButton.Variant> = input<IRtuiButton.Variant>('default');\n public readonly appearance: InputSignal<IRtuiButton.Appearance | undefined> = input<IRtuiButton.Appearance>();\n public readonly size: InputSignal<IRtuiButton.Size | undefined> = input<IRtuiButton.Size>();\n public readonly radius: InputSignal<IRtuiButton.Radius | undefined> = input<IRtuiButton.Radius>();\n public readonly icon: InputSignalWithTransform<string, unknown> = input<string, unknown>('', { transform: transformStringInput });\n public readonly iconPosition: InputSignal<IRtuiButton.IconPosition> = input<IRtuiButton.IconPosition>('start');\n public readonly iconSize: InputSignal<TRtuiIconSizeType | undefined> = input<TRtuiIconSizeType>();\n public readonly text: InputSignalWithTransform<string, unknown> = input<string, unknown>('', { transform: transformStringInput });\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly outlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly fullWidth: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly spinnerDiameter: InputSignal<number | undefined> = input<number>();\n\n public readonly clicked: OutputEmitterRef<void> = output<void>();\n\n protected onClick(): void {\n if (!this.loading() && !this.disabled()) {\n this.clicked.emit();\n }\n }\n}\n","<!-- Projected content is declared once and outlet-rendered per design branch: duplicating\n <ng-content /> across @if branches assigns the projected nodes to the first slot only. -->\n<ng-template #projectedContent>\n <ng-content />\n</ng-template>\n\n<!-- Блок объявлен контейнером: класс он не ставит (узел комментария), а только даёт имя\n потомкам. Сам класс блока и его модификаторы висят на хосте — см. `host` в компоненте. -->\n<ng-container rtBlock=\"rtui-button\">\n @switch (type()) {\n @case ('pill') {\n @if (resolvedDesign() === 'material') {\n <!-- design: material — a native Material button; its look is owned by the Material theme -->\n <button\n type=\"button\"\n rtElem=\"material\"\n [matButton]=\"materialAppearance()\"\n [rtMod]=\"{ danger: variant() === 'danger' }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onClick()\">\n @if (loading()) {\n <rtui-spinner [diameter]=\"spinnerSize()\" [showBox]=\"false\" />\n } @else {\n @if (icon() && iconPosition() === 'start') {\n <rtui-icon matButtonIcon [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n @if (text()) {\n <span>{{ text() }}</span>\n }\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n @if (icon() && iconPosition() === 'end') {\n <rtui-icon matButtonIcon iconPositionEnd [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n }\n </button>\n } @else {\n <button\n type=\"button\"\n rtElem=\"control\"\n matRipple\n [matRippleDisabled]=\"disabled() || loading()\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onClick()\">\n @if (loading()) {\n <rtui-spinner rtElem=\"spinner\" [diameter]=\"spinnerSize()\" [showBox]=\"false\" />\n } @else {\n @if (icon() && iconPosition() === 'start') {\n <rtui-icon rtElem=\"icon\" [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n @if (text()) {\n <span rtElem=\"text\">{{ text() }}</span>\n }\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n @if (icon() && iconPosition() === 'end') {\n <rtui-icon rtElem=\"icon\" [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n }\n </button>\n }\n }\n @default {\n <button\n type=\"button\"\n rtElem=\"control\"\n matRipple\n [matRippleDisabled]=\"disabled() || loading()\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onClick()\">\n @if (loading()) {\n <rtui-spinner rtElem=\"spinner\" [diameter]=\"spinnerSize()\" [showBox]=\"false\" />\n } @else {\n <rtui-icon rtElem=\"icon\" [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n </button>\n }\n }\n</ng-container>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isString } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-clear-button';\n\n@Component({\n selector: 'rtui-clear-button',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-clear-button.component.html',\n styleUrls: ['./rtui-clear-button.component.scss'],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // Material\n MatIcon,\n MatIconButton,\n MatTooltip,\n\n // BEM\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n})\nexport class RtuiClearButtonComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n readonly #defaultTooltipPosition: TooltipPosition = 'above';\n\n public isButtonShown: InputSignalWithTransform<TNullable<boolean>, boolean> = input<TNullable<boolean>, boolean>(true, {\n transform: booleanAttribute,\n });\n public tooltip: InputSignalWithTransform<TNullable<string>, string> = input<TNullable<string>, string>(null, {\n transform: (value: TNullable<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]=\"narrow()\"\n (keydown)=\"onKeydown()\"\n (click)=\"onClick()\">\n <mat-icon rtElem=\"icon\">close</mat-icon>\n</button>\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 { Pipe, PipeTransform } from '@angular/core';\n\nimport { ISubMenuTitlePart, splitSubMenuTitle } from '../side-menu.logic';\n\n/**\n * Резка подписи подпункта на совпавшие с запросом куски.\n *\n * Пайп, а не метод компонента: тот же шаблон рисует и вложенные пункты, у которых своя подпись,\n * не входная, — а вызов метода в разметке пересчитывается на каждом круге проверки.\n */\n@Pipe({\n name: 'rtuiSubMenuTitleParts',\n})\nexport class RtuiSubMenuTitlePartsPipe implements PipeTransform {\n public transform(name: string, query: string): ISubMenuTitlePart[] {\n return splitSubMenuTitle(name, query);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtHideTooltipDirective } from '../../tooltip';\nimport { RtuiSubMenuTitlePartsPipe } from './sub-menu-title-parts.pipe';\nimport { IRtuiSideMenuHost, ISideMenu, RTUI_SIDE_MENU } from '../side-menu.types';\n\nconst BEM_BLOCK: string = 'rtui-side-menu-sub-item';\n\n@Component({\n selector: 'rtui-side-menu-sub-item',\n host: { class: BEM_BLOCK },\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 ModDirective,\n RtIconOutlinedDirective,\n RtHideTooltipDirective,\n\n // pipes\n RtuiSubMenuTitlePartsPipe,\n ],\n providers: [\n BreakpointService,\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n disableTooltipInteractivity: true,\n },\n },\n ],\n})\nexport class RtuiSideMenuSubItemComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public readonly menuRef: IRtuiSideMenuHost = inject(RTUI_SIDE_MENU);\n\n public item: InputSignal<ISideMenu.Item> = input.required<ISideMenu.Item>();\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() || narrow()\"\n [rtHideTooltipDirective]=\"titleTpl\"\n [isTooltipShown]=\"isSubMenuTooltipsShown() && !narrow()\">\n <!--\n Подпись рисуется кусками: отмечено ровно то, чем она совпала с\n запросом. Отмеченное помечено своим элементом, а не разметкой\n выделения браузера — та красит мимо набора токенов.\n -->\n @for (part of item.name | rtuiSubMenuTitleParts: menuRef.subMenuQuery(); track $index) {\n @if (part.matched) {\n <span rtElem=\"match\">{{ part.text }}</span>\n } @else {\n <!--\n Кусок без отметки тоже узел: интерполяция, стоящая в разметке\n сама по себе, приезжает вместе с переносами строк вокруг неё\n и разрывает подпись пробелами.\n -->\n <span>{{ part.text }}</span>\n }\n }\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() || narrow()\"\n [rtHideTooltipDirective]=\"headerTitleTpl\"\n [isTooltipShown]=\"isSubMenuTooltipsShown() && !narrow()\">\n @for (part of item.name | rtuiSubMenuTitleParts: menuRef.subMenuQuery(); track $index) {\n @if (part.matched) {\n <span rtElem=\"match\">{{ part.text }}</span>\n } @else {\n <span>{{ part.text }}</span>\n }\n }\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 ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Renderer2,\n Signal,\n signal,\n TemplateRef,\n Type,\n viewChild,\n WritableSignal,\n} from '@angular/core';\nimport { MatFormField, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatListItem, MatListItemIcon, MatNavList } from '@angular/material/list';\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\n\nimport { BlockDirective, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective, RtNavigationDirective, RtScrollToElementDirective } from '@rt-tools/core';\nimport { clampSubMenuWidth, SUB_MENU_WIDTH_MIN } from '../side-menu.logic';\nimport { filterSubMenuItems } from '../side-menu.logic';\nimport { ISideMenu, RTUI_SIDE_MENU } from '../side-menu.types';\nimport {\n RtuiScrollableContainerComponent,\n RtuiScrollableContainerContentDirective,\n RtuiScrollableContainerFooterDirective,\n RtuiScrollableContainerHeaderDirective,\n} from '../../scrollable';\nimport { RtuiButtonComponent } from '../../buttons/unified-button/rtui-button.component';\nimport { RtuiClearButtonComponent } from '../../table/components/clear-search-button/rtui-clear-button.component';\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\nconst BEM_BLOCK: string = 'rtui-side-menu';\n\n@Component({\n selector: 'rtui-side-menu',\n host: {\n class: BEM_BLOCK,\n // Раскладка хоста меняется только у закреплённой моды: у всех, кто ставит меню\n // по-старому, она обязана остаться прежней до пикселя.\n '[class.rtui-side-menu--pinned]': 'isPinned()',\n // Ширина подменю приходит переменной оформления: правило стилей стоит на ней в трёх\n // местах разом, и правка одной переменной двигает их все.\n '[style.--rt-side-menu-sub-menu-dragged-width]': 'subMenuWidthStyle()',\n },\n templateUrl: './rtui-side-menu.component.html',\n styleUrls: ['./rtui-side-menu.component.scss'],\n providers: [BreakpointService, { provide: RTUI_SIDE_MENU, useExisting: RtuiSideMenuComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n MatSidenavModule,\n MatFormField,\n MatPrefix,\n MatSuffix,\n MatIcon,\n MatInput,\n MatListItem,\n MatNavList,\n MatListItemIcon,\n\n // directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtuiScrollableContainerHeaderDirective,\n RtuiScrollableContainerContentDirective,\n RtuiScrollableContainerFooterDirective,\n RtScrollToElementDirective,\n RtIconOutlinedDirective,\n RtNavigationDirective,\n\n // components\n RtuiScrollableContainerComponent,\n RtuiButtonComponent,\n RtuiClearButtonComponent,\n RtuiSideMenuSubItemComponent,\n ],\n})\nexport class RtuiSideMenuComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #renderer: Renderer2 = inject(Renderer2);\n\n /**\n * Ширина, пока край держат указателем. Наружу она уходит одной просьбой на отпускании: вход\n * потребителя за каждым движением мыши не угнаться, а хранилище незачем писать сотней раз.\n */\n readonly #draggedWidth: WritableSignal<number | null> = signal(null);\n /** Снятие слушателей документа. Ведут и отпускают за пределами самой ручки. */\n #stopDrag: (() => void) | null = null;\n\n /** Подменю открыл указатель. У закреплённой моды открытость считается не так. */\n readonly #hoverOpened: WritableSignal<boolean> = signal(false);\n\n /**\n * Человек работает с полем поиска, и подменю держится открытым, пока он не уйдёт нажатием\n * наружу.\n *\n * Заведено потому, что незакреплённое подменю живёт наведением: увести указатель к полю и\n * набрать в нём запрос — движение той же руки, и на полпути список исчезал. Уход фокуса\n * удержания не снимает: человек переходит от поля к пунктам того же подменю.\n */\n readonly #searchHeld: WritableSignal<boolean> = signal(false);\n\n /**\n * Что показывает закреплённое подменю: пункт активного адреса, а если активного нет — то,\n * что открыто сейчас. Закрепление содержимого не меняет: человек закрепляет то подменю,\n * которое перед ним, и потерять его нажатием он не должен.\n */\n readonly #pinnedSubMenu: Signal<ISideMenu.Item[]> = computed((): ISideMenu.Item[] => {\n if (!this.isPinned()) {\n return [];\n }\n\n const active: Array<string | number> = this.activeMenuIds();\n const activeItem: TNullable<ISideMenu.Item> =\n this.menuItems().find((item: ISideMenu.Item): boolean => active.includes(item.id) && !!item.submenu?.length) ?? null;\n\n return activeItem?.submenu ?? this.selectedSubMenu() ?? [];\n });\n\n /**\n * Ширина подменю в оформлении. Своего выбора нет — переменная не ставится вовсе, и ширину\n * берёт набор токенов: своё число здесь подменило бы его молча.\n */\n /**\n * Натянутая ширина панели. Кладётся своим свойством, а не тем, каким ширину задаёт\n * потребитель: панель берёт наибольшее из двух, и заданная оформлением ширина остаётся нижним\n * пределом сама по себе. Числом в ките этот предел назвать нечем — ширину знает потребитель.\n */\n protected readonly subMenuWidthStyle: Signal<string | null> = computed((): string | null => {\n const width: number | null = this.#draggedWidth() ?? this.subMenuWidth();\n\n return width === null ? null : `${clampSubMenuWidth(width)}px`;\n });\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n /** Подписи зашиты: словаря у кита нет, и кнопка возврата рядом названа тем же способом. */\n protected readonly searchLabel: string = 'Search';\n protected readonly pinLabel: string = 'Pin submenu';\n protected readonly unpinLabel: string = 'Unpin submenu';\n protected readonly nothingFoundLabel: string = 'Nothing found';\n protected readonly resizeLabel: string = 'Resize submenu';\n\n /**\n * Закрепление действует. На узком экране подменю занимает экран целиком, закреплять там\n * нечего — и переключателя в узкой разметке нет.\n */\n protected readonly isPinned: Signal<boolean> = computed((): boolean => this.subMenuMode() === 'pinned' && !this.narrow());\n\n /**\n * Подменю держится набором запроса: на это время оно шире и уходом указателя не закрывается.\n * Читает это оформление — модификатор на контейнере, — и разметка меню.\n */\n protected readonly isSearchHeld: Signal<boolean> = computed((): boolean => this.#searchHeld() && !this.isPinned());\n\n /** Закреплённое подменю открыто, пока ему есть что показать: указатель на это не влияет. */\n protected readonly subMenuOpened: Signal<boolean> = computed((): boolean =>\n this.isPinned() ? this.#pinnedSubMenu().length > 0 : this.#hoverOpened()\n );\n\n /** Что видно в подменю: отобранные пункты того набора, который его сейчас наполняет. */\n protected readonly visibleSubMenuItems: Signal<ISideMenu.Item[]> = computed((): ISideMenu.Item[] =>\n filterSubMenuItems(this.isPinned() ? this.#pinnedSubMenu() : (this.selectedSubMenu() ?? []), this.subMenuQuery())\n );\n public readonly headerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiSideMenuHeaderDirective, {\n read: TemplateRef,\n });\n public readonly footerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiSideMenuFooterDirective, {\n read: TemplateRef,\n });\n /** Что набрано в поиске. Публично: подпункт берёт запрос отсюда, чтобы отметить совпавшее. */\n public readonly subMenuQuery: WritableSignal<string> = signal('');\n public readonly subMenuRef: Signal<TNullable<MatDrawer>> = viewChild(MatDrawer);\n public readonly subMenuPanelRef: Signal<TNullable<ElementRef<HTMLElement>>> = viewChild('subMenuPanel', { read: ElementRef });\n\n public readonly backToMainMenuButton: Signal<ISideMenu.Item> = signal({ id: 0, icon: 'arrow_back', name: 'Main Menu', link: ' ' });\n public readonly selectedItem: WritableSignal<TNullable<ISideMenu.Item>> = signal(null);\n public readonly selectedSubMenu: WritableSignal<TNullable<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 /** Мода подменю. Умолчание — сегодняшнее поведение: открывается наведением. */\n public subMenuMode: InputSignal<ISideMenu.SubMenuMode> = input<ISideMenu.SubMenuMode>('hover');\n /**\n * Ширина закреплённого подменю в пикселях. Пустая — ширину ставит оформление; хранит выбор\n * потребитель, как и моду.\n */\n public subMenuWidth: InputSignal<number | null> = input<number | null>(null);\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 this.activeMenuIds()?.length ? this.activeMenuIds()[this.activeMenuIds()?.length - 1] : ''\n );\n\n /**\n * Просьба о моде, а не смена моды: предпочтение хранит потребитель кита и возвращает его\n * входом. Своего состояния о нём меню не заводит.\n */\n public readonly subMenuModeChange: OutputEmitterRef<ISideMenu.SubMenuMode> = output<ISideMenu.SubMenuMode>();\n /** Просьба о ширине — по той же причине, что и просьба о моде: своего состояния меню не держит. */\n public readonly subMenuWidthChange: OutputEmitterRef<number> = output<number>();\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 if (this.isPinned()) {\n // Закреплённое подменю ведёт вход активности: нажатие пункта его не переставляет.\n this.closeMobileMenu();\n\n return;\n }\n\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 } else {\n // У пункта нет подменю, и открытого подменю тоже нет — закрывать нечего.\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 return;\n }\n\n this.clickSubMenuAction.emit({ item, event });\n\n if (!this.isPinned()) {\n this.closeSubMenu();\n }\n\n this.closeMobileMenu();\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 (this.isPinned()) {\n // Закреплённое подменю не открывается и не закрывается указателем.\n return;\n }\n\n if (item === undefined && this.#searchHeld()) {\n // Указатель ушёл с панели, а человек работает с полем: закрывать нечего.\n return;\n }\n\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.subMenuQuery.set('');\n this.#hoverOpened.set(false);\n this.#searchHeld.set(false);\n }\n\n /**\n * Человек взялся за поле поиска. Дальше подменю держится открытым, и увести его уходом\n * указателя нельзя — закрывает нажатие снаружи, то есть подложка под незакреплённой панелью.\n */\n public onSearchHold(): void {\n if (!this.isPinned()) {\n this.#searchHeld.set(true);\n }\n }\n\n /** Нажат переключатель моды: наружу уходит просьба, вход остаётся прежним. */\n public onSubMenuModeToggle(): void {\n this.subMenuModeChange.emit(this.isPinned() ? 'hover' : 'pinned');\n }\n\n /**\n * Взята ручка правого края. Слушатели вешаются на документ: рука уходит с узкой полоски\n * ручки в первое же движение, и слушатель на ней самой терял бы тягу сразу.\n */\n public onResizeStart(event: MouseEvent): void {\n if (!this.isPinned() || this.#stopDrag !== null) {\n return;\n }\n\n // Иначе указатель выделяет подписи пунктов, и тяга выглядит выделением текста.\n event.preventDefault();\n\n const startX: number = event.clientX;\n const startWidth: number = this.subMenuWidth() ?? this.#measureSubMenuWidth();\n\n const stopMove: () => void = this.#renderer.listen('document', 'mousemove', (moveEvent: MouseEvent): void => {\n this.#draggedWidth.set(clampSubMenuWidth(startWidth + moveEvent.clientX - startX));\n });\n const stopUp: () => void = this.#renderer.listen('document', 'mouseup', (): void => this.#finishResize());\n\n this.#stopDrag = (): void => {\n stopMove();\n stopUp();\n this.#stopDrag = null;\n };\n }\n\n public onSubMenuSearch(query: string): void {\n this.subMenuQuery.set(query);\n this.onSearchHold();\n }\n\n public closeMobileMenu(): void {\n if (this.narrow()) {\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.#hoverOpened.set(true);\n }\n\n /** Отпускание: слушатели снимаются, а ширина уходит просьбой наружу. */\n /**\n * Конец тяги. Наружу уходит натянутая ширина, а не та, что получилась на экране: нижний\n * предел держит оформление — панель не бывает уже той ширины, какую задал потребитель, — и\n * замерить применённое можно только там, где раскладка уже посчитана. Хранит потребитель\n * выбор человека; вид от этого не меняется, потому что предел стоит в самом оформлении.\n */\n #finishResize(): void {\n const width: number | null = this.#draggedWidth();\n\n this.#stopDrag?.();\n this.#draggedWidth.set(null);\n\n if (width !== null) {\n this.subMenuWidthChange.emit(width);\n }\n }\n\n /** Ширина, от которой отсчитывается тяга, когда своего выбора ещё нет: та, что нарисована. */\n #measureSubMenuWidth(): number {\n const panel: ElementRef<HTMLElement> | null = this.subMenuPanelRef() ?? null;\n const width: number = panel?.nativeElement.getBoundingClientRect().width ?? 0;\n\n return width > 0 ? width : SUB_MENU_WIDTH_MIN;\n }\n}\n","@if (narrow()) {\n <rtui-scrollable rtBlock=\"rtui-mobile-side-menu\" [isScrollHintShown]=\"true\">\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]=\"visibleSubMenuItems()\">\n <rtui-side-menu-sub-item [item]=\"backToMainMenuButton()\" (clickSubMenuAction)=\"onBackToMainMenu()\" />\n\n <mat-form-field rtBlock=\"rtui-side-menu-search\" subscriptSizing=\"dynamic\" appearance=\"outline\">\n <input\n #mobileSubMenuSearch\n matInput\n type=\"search\"\n qa-dataid=\"side-menu-search\"\n [attr.aria-label]=\"searchLabel\"\n [placeholder]=\"searchLabel\"\n [value]=\"subMenuQuery()\"\n (focus)=\"onSearchHold()\"\n (input)=\"onSubMenuSearch(mobileSubMenuSearch.value)\" />\n\n <mat-icon matPrefix [rtIconOutlined]=\"true\">search</mat-icon>\n\n <rtui-clear-button matSuffix [isButtonShown]=\"subMenuQuery() !== ''\" (clickAction)=\"onSubMenuSearch('')\" />\n </mat-form-field>\n\n @if (subMenuQuery() !== '' && !visibleSubMenuItems().length) {\n <div rtBlock=\"rtui-side-menu-empty\" qa-dataid=\"side-menu-empty\">{{ nothingFoundLabel }}</div>\n }\n\n @for (item of visibleSubMenuItems(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\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\" [isScrollHintShown]=\"true\">\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 tabindex=\"0\"\n [rtNavigationDirective]=\"item?.link\"\n (mouseenter)=\"toggleSubMenu(item)\"\n (click)=\"onClickMenu(item)\"\n (keydown.enter)=\"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: subMenuOpened(), pinned: isPinned(), held: isSearchHeld() }\"\n [hasBackdrop]=\"!isPinned()\"\n (backdropClick)=\"closeSubMenu()\">\n <mat-drawer\n #subMenuPanel\n rtBlock=\"rtui-sub-side-menu-content\"\n mode=\"side\"\n position=\"start\"\n [opened]=\"subMenuOpened()\"\n (mouseleave)=\"toggleSubMenu()\">\n <rtui-scrollable [isScrollHintShown]=\"true\">\n <ng-container *rtuiScrollableHeader>\n @if (subMenuOpened()) {\n <div rtBlock=\"rtui-sub-side-menu-head\">\n <!--\n Поле берётся готовым кита — тем же, каким рисует поиск тулбар\n таблицы: своя разметка расходится с ним при первой же правке\n кита, и заметить это некому. Форма пилюли задана ручкой\n оформления поля, а не рамкой поверх готового.\n -->\n <mat-form-field rtElem=\"search\" subscriptSizing=\"dynamic\" appearance=\"outline\">\n <input\n #subMenuSearch\n matInput\n type=\"search\"\n qa-dataid=\"side-menu-search\"\n [attr.aria-label]=\"searchLabel\"\n [placeholder]=\"searchLabel\"\n [value]=\"subMenuQuery()\"\n (focus)=\"onSearchHold()\"\n (input)=\"onSubMenuSearch(subMenuSearch.value)\" />\n\n <mat-icon matPrefix [rtIconOutlined]=\"true\">search</mat-icon>\n\n <rtui-clear-button matSuffix [isButtonShown]=\"subMenuQuery() !== ''\" (clickAction)=\"onSubMenuSearch('')\" />\n </mat-form-field>\n\n <!--\n Кнопка берётся готовой кита. Закреплённое подменю помечено\n цветным значком, незакреплённое — спокойным: вид ведёт вход\n `variant`. Заливкой самого значка это не показать — её ведёт ось\n переменного шрифта, а потребитель волен зарегистрировать\n статический набор, и тогда оба состояния рисуются одним глифом.\n -->\n <rtui-button\n rtElem=\"pin\"\n type=\"icon\"\n icon=\"push_pin\"\n qa-dataid=\"side-menu-pin\"\n [variant]=\"isPinned() ? 'primary' : 'default'\"\n [attr.aria-label]=\"isPinned() ? unpinLabel : pinLabel\"\n [attr.aria-pressed]=\"isPinned()\"\n (clicked)=\"onSubMenuModeToggle()\" />\n </div>\n }\n </ng-container>\n\n <ng-container *rtuiScrollableContent>\n @if (subMenuOpened() && subMenuQuery() !== '' && !visibleSubMenuItems().length) {\n <div rtElem=\"empty\" qa-dataid=\"side-menu-empty\">{{ nothingFoundLabel }}</div>\n }\n\n @if (subMenuOpened() && visibleSubMenuItems().length) {\n <mat-nav-list\n rtElem=\"list\"\n [rtMod]=\"{ scrollable: isSubMenuXScrollEnabled() }\"\n [rtScrollToElement]=\"activeMenuId()\"\n [elements]=\"visibleSubMenuItems()\">\n @for (item of visibleSubMenuItems(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\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 @if (isPinned()) {\n <!--\n Ручка есть только у закреплённого подменю: незакреплённое живёт наведением и уходит с\n экрана раньше, чем до её края доедет рука.\n\n Лежит она вне ящика и вне его контейнера: панель скруглена по правому краю и режет по\n этой дуге всё, что внутри неё, а всё, что кладут в контейнер рядом с панелью, Material\n уносит в свою область содержимого — правее панели и ниже её. Снаружи ручка стоит там,\n где её ставят, и идёт от края экрана до края.\n -->\n <div\n rtBlock=\"rtui-side-menu-resizer\"\n qa-dataid=\"side-menu-resize\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n [attr.aria-label]=\"resizeLabel\"\n (mousedown)=\"onResizeStart($event)\"></div>\n }\n}\n","import { ComponentType, OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nexport type TAsidePositions = 'left' | 'right';\n\n/**\n * Чем шторке позволено закрываться. Клавиша по умолчанию не закрывает: её жмут, чтобы снять\n * подсказку или выйти из поля, а закрывалась вся панель вместе с введённым.\n */\nexport interface IAsideConfig {\n /** Закрывать ли шторку клавишей Esc. По умолчанию — нет. */\n readonly closeOnEscape?: boolean;\n /** Закрывать ли шторку кликом по подложке. По умолчанию — да. */\n readonly closeOnBackdropClick?: boolean;\n}\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: TAsidePositions,\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","export enum EAsideButtons {\n USER_ACTIVE = 'User active',\n USER_INACTIVE = 'User inactive',\n DELETE = 'Delete',\n RESET = 'Reset',\n}\n\nexport type TAsideButtonsType = EAsideButtons.USER_ACTIVE | EAsideButtons.USER_INACTIVE | EAsideButtons.DELETE | EAsideButtons.RESET;\n","import { ComponentPortal } from '@angular/cdk/portal';\nimport { PortalModule } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n afterNextRender,\n inject,\n signal,\n} from '@angular/core';\n\nimport { BlockDirective } from '@rt-tools/core';\nimport { ASIDE_REF, TAsidePositions, AsideRef } from '../../aside.types';\n\nconst BEM_BLOCK: string = 'rtui-aside-panel';\n\n@Component({\n selector: 'rtui-aside-panel',\n host: {\n class: BEM_BLOCK,\n '[class.rtui-aside-panel--left]': \"position === 'left'\",\n '[class.rtui-aside-panel--right]': \"position === 'right'\",\n '[class.rtui-aside-panel--open]': 'opened()',\n },\n templateUrl: './aside-panel.component.html',\n styleUrls: ['./aside-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [PortalModule, BlockDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiAsidePanelComponent {\n readonly #asideRef: AsideRef<object, object> = inject(ASIDE_REF);\n\n /**\n * Выехала ли шторка на своё место.\n *\n * Ложь стоит до первой отрисовки нарочно: переход считает путь от того, что браузер уже\n * нарисовал, и шторка, выставленная на место сразу, приехала бы без движения.\n */\n readonly #opened: WritableSignal<boolean> = signal(false);\n\n public readonly opened: Signal<boolean> = this.#opened.asReadonly();\n\n public portal: ComponentPortal<unknown> = this.#createPortal(this.#asideRef);\n public position: TAsidePositions = this.#asideRef.position;\n\n constructor() {\n afterNextRender(() => this.#opened.set(true));\n }\n\n public close(): void {\n this.#asideRef.close();\n }\n\n /**\n * Уход шторки за свою кромку.\n *\n * Ждать его конца компоненту нечем и не нужно: снимает шторку служба, и её отсчёт длиннее\n * времени ухода.\n */\n public startExitAnimation(): void {\n this.#opened.set(false);\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 rtBlock=\"c-aside\">\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, DestroyRef, inject, Injectable, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Event, NavigationEnd, Router } from '@angular/router';\nimport { EMPTY, merge, Observable, of, Subject } from 'rxjs';\nimport { delay, filter, mergeAll, take, tap } from 'rxjs/operators';\n\nimport { ASIDE_REF, IAsideConfig, TAsidePositions, AsideRef } from './aside.types';\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 readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Источник открытий: метод толкает сюда поток закрытия новой панели, и больше ничего. */\n readonly #closesSource: Subject<Observable<unknown>> = new Subject<Observable<unknown>>();\n\n /**\n * Закрытие каждой открытой панели объявлено один раз, а не заводится вызовом открытия.\n *\n * Потоки сливаются, а не сменяют друг друга: панели живут порознь, и оборванный поток\n * предыдущей оставил бы её на экране — снять её после этого нечем.\n */\n constructor() {\n this.#closesSource.pipe(mergeAll(), takeUntilDestroyed(this.#destroyRef)).subscribe();\n }\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: TAsidePositions,\n data: DATA,\n config: IAsideConfig = {}\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 this.#closesSource.next(this.#closeOnFirstEvent(overlayRef, componentRef, answer, config));\n\n return answer ? answer.asObservable() : of(null);\n }\n\n /**\n * Закрытие одной панели по первому же из её событий.\n *\n * `take(1)` обрывает поток: слитые в него горячие источники — маршрутизатор, подложка,\n * нажатия — иначе держали бы подписку живой и после того, как панель снята.\n */\n #closeOnFirstEvent<ANSWER>(\n overlayRef: OverlayRef,\n componentRef: ComponentRef<RtuiAsidePanelComponent>,\n answer: Subject<ANSWER | null>,\n config: IAsideConfig\n ): Observable<unknown> {\n return merge(\n this.#closesOf(overlayRef, config),\n this.#router.events.pipe(filter((e: Event): boolean => e instanceof NavigationEnd)),\n answer.pipe(delay(10))\n ).pipe(\n take(1),\n tap((): void => {\n componentRef.instance.startExitAnimation();\n overlayRef.detach();\n answer.complete();\n }),\n delay(300),\n tap((): void => {\n overlayRef.dispose();\n })\n );\n }\n\n /**\n * Источники закрытия, которые потребитель разрешил настройкой открытия.\n *\n * Запрещённый источник не подписывается вовсе: подписка, которая приходит и ничего не\n * делает, читается работающей и оживает при первой правке рядом.\n */\n #closesOf(overlayRef: OverlayRef, config: IAsideConfig): Observable<unknown> {\n const backdrop$: Observable<MouseEvent> = config.closeOnBackdropClick === false ? EMPTY : overlayRef.backdropClick();\n const escape$: Observable<KeyboardEvent> = config.closeOnEscape\n ? overlayRef.keydownEvents().pipe(filter((keyEvent: KeyboardEvent): boolean => keyEvent.key === 'Escape'))\n : EMPTY;\n\n return merge(backdrop$, escape$);\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: TAsidePositions): 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 === '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: TAsidePositions): 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, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\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\nconst BEM_BLOCK: string = 'rtui-toolbar';\n\n@Component({\n selector: 'rtui-toolbar',\n host: { class: BEM_BLOCK },\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatToolbar, NgTemplateOutlet, BlockDirective, ElemDirective, ModDirective],\n})\nexport class RtuiToolbarComponent {\n public isVisibleToolbar: Signal<boolean> = input(true);\n\n public readonly leftToolTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarLeftDirective, {\n read: TemplateRef,\n });\n public readonly centerToolTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarCenterDirective, {\n read: TemplateRef,\n });\n public readonly rightToolTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarRightDirective, {\n read: TemplateRef,\n });\n public sticky: InputSignalWithTransform<TNullable<boolean>, boolean> = input<TNullable<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 { 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, ConcatClassesPipe, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-aside-error-box';\n\n@Component({\n selector: 'rtui-aside-error-box',\n host: { class: BEM_BLOCK },\n templateUrl: './aside-error-box.component.html',\n styleUrls: ['./aside-error-box.component.scss'],\n imports: [\n ModDirective,\n MatIcon,\n MatButton,\n\n // bem\n BlockDirective,\n ElemDirective,\n ConcatClassesPipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AsideErrorBoxComponent {\n readonly #clipboard: Clipboard = inject(Clipboard);\n\n public error: InputSignal<TNullable<unknown>> = input.required<TNullable<unknown>>();\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]=\"['rtui-btn', 'rtui-btn-secondary-text'] | concatClasses\"\n [rtMod]=\"{ 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 {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n inject,\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, BreakpointService, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport { TAsideButtonsType } from '../../aside.enums';\nimport { IAside } from '../../aside.interfaces';\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\nconst BEM_BLOCK: string = 'c-aside';\n\n@Component({\n selector: 'rtui-aside-container',\n templateUrl: './aside-container.component.html',\n styleUrls: ['./aside-container.component.scss'],\n providers: [BreakpointService],\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: BEM_BLOCK,\n },\n})\nexport class RtuiAsideContainerComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public title: InputSignal<TNullable<string>> = input<TNullable<string>>(null);\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<TNullable<unknown>> = input<TNullable<unknown>>(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<TAsideButtonsType> = output<TAsideButtonsType>();\n\n public readonly headerTpl: Signal<TNullable<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: TAsideButtonsType): 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]=\"narrow()\"\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]=\"narrow()\"\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() || narrow()\"\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 { 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, ModDirective } from '@rt-tools/core';\nimport { transformArrayInput } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-multi-button';\n\n@Component({\n selector: 'rtui-multi-button',\n host: { class: BEM_BLOCK },\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 ModDirective,\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 computed,\n contentChild,\n Directive,\n inject,\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, BreakpointService, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\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\nconst BEM_BLOCK: string = 'rtui-header';\n\n@Component({\n selector: 'rtui-header',\n host: { class: BEM_BLOCK },\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n providers: [BreakpointService],\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 readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public isMobileMenuButtonShown: InputSignalWithTransform<TNullable<boolean>, TNullable<boolean>> = input<\n TNullable<boolean>,\n TNullable<boolean>\n >(true, {\n transform: booleanAttribute,\n });\n\n public readonly leftHeaderTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiHeaderLeftDirective, {\n read: TemplateRef,\n });\n public readonly centerHeaderTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiHeaderCenterDirective, {\n read: TemplateRef,\n });\n public readonly rightHeaderTpl: Signal<TNullable<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.narrow() && this.isMobileMenuButtonShown()) {\n this.openMobileMenuAction.emit();\n }\n }\n}\n","<rtui-toolbar>\n <ng-container *rtuiToolbarLeft>\n @if (narrow() && 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 { FormControl } from '@angular/forms';\n\nimport { TFilterOperatorType, ISortModel } from '@rt-tools/utils';\n\nexport enum ETableColumnTypes {\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 ETableColumnFilterTypes {\n TEXT = 'text',\n NUMBER = 'number',\n SELECT = 'select',\n DATE = 'date',\n}\n\nexport enum ETextCellColor {\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 ETextCellColor.NEUTRAL | ETextCellColor.DANGER | ETextCellColor.WARNING | ETextCellColor.SUCCESS | ETextCellColor.EMPTY;\n\n export type Type =\n | ETableColumnTypes.DATE\n | ETableColumnTypes.PERCENT\n | ETableColumnTypes.ARRAY\n | ETableColumnTypes.BOOLEAN\n | ETableColumnTypes.TEXT\n | ETableColumnTypes.CURRENCY\n | ETableColumnTypes.CUSTOM;\n\n export type FilterType =\n ETableColumnFilterTypes.TEXT | ETableColumnFilterTypes.NUMBER | ETableColumnFilterTypes.SELECT | ETableColumnFilterTypes.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?: ISortModel<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?: TFilterOperatorType;\n filterOperators?: TFilterOperatorType[];\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 { TNullable } from '@rt-tools/utils';\nimport { IFilterModel, ISortModel } from '@rt-tools/utils';\nimport { ITable } from './table-column.interface';\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 TNullable<{\n getTemplateByPropName(propName: keyof ENTITY_TYPE): TemplateRef<{ $implicit: ENTITY_TYPE }>;\n }>\n >;\n rowActionsTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY_TYPE }>>>;\n additionalRowActionsTpl: Signal<TNullable<TemplateRef<unknown>>>;\n\n narrow: Signal<boolean>;\n isTableRowsClickable: Signal<boolean>;\n keyExp: Signal<NonNullable<KEY>>;\n entities: Signal<ENTITY_TYPE[]>;\n currentSortModel: Signal<TNullable<ISortModel<SORT_PROPERTY>>>;\n appearance: Signal<MatFormFieldAppearance>;\n filterAppearance: Signal<MatFormFieldAppearance>;\n filterModel: Signal<IFilterModel<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<TNullable<number>>;\n\n onSortChange(sortModel: ISortModel): void;\n onFilterChange(filterModel: IFilterModel<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","/**\n * Порядок имён колонок для сверки двух наборов.\n *\n * Какой именно порядок, значения не имеет: оба набора выстраиваются одним и тем же и сравниваются\n * на равенство. Важно лишь, чтобы порядок был один и не зависел от вида значения, — умолчание\n * `sort()` приводит элементы к строке по-своему и на числовых ключах даёт лексикографический.\n */\nexport function comparePropNames(a: PropertyKey | undefined, b: PropertyKey | undefined): number {\n return String(a).localeCompare(String(b));\n}\n","import { DestroyRef, Injectable, Signal, WritableSignal, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { Observable, Subject } from 'rxjs';\nimport { concatMap, map, switchMap, take } from 'rxjs/operators';\n\nimport { IDBStorageService } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual } from '@rt-tools/utils';\nimport { ITable } from './table-column.interface';\nimport { comparePropNames } from './compare-prop-names';\n\n/** Настройка, как её держит хранилище: столбцы там лежат частичными. */\ninterface IStoredConfig<ENTITY_TYPE> {\n isVerticalScrollbarShown: boolean;\n isHorizontalScrollbarShown: boolean;\n columns: Array<Partial<ITable.Column<ENTITY_TYPE>>>;\n}\n\n/** Просьба чтения: с каким составом столбцов сверять прочитанное. */\ninterface IConfigRead<ENTITY_TYPE> {\n readonly storageKey: string;\n readonly config: Array<ITable.Column<ENTITY_TYPE>>;\n}\n\n/** Просьба записи или снятия: обе идут одним потоком, чтобы не разойтись порядком. */\ntype TConfigWrite<ENTITY_TYPE> =\n | { readonly kind: 'set'; readonly storageKey: string; readonly config: ITable.Config.Data<ENTITY_TYPE> }\n | { readonly kind: 'remove'; readonly storageKey: string };\n\n@Injectable()\nexport class RtTableConfigService<ENTITY_TYPE> {\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #iDBStorageService: IDBStorageService<IStoredConfig<ENTITY_TYPE>> = inject(IDBStorageService);\n\n /** Просьбы прочитать сохранённую настройку. */\n readonly #readSource: Subject<IConfigRead<ENTITY_TYPE>> = new Subject<IConfigRead<ENTITY_TYPE>>();\n\n /** Просьбы записать и снять настройку — один источник на оба действия. */\n readonly #writeSource: Subject<TConfigWrite<ENTITY_TYPE>> = new Subject<TConfigWrite<ENTITY_TYPE>>();\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 /**\n * Потоки чтения и записи объявлены один раз, а методы только толкают в них просьбы.\n *\n * Чтение — `switchMap`: отвечает последний вызов, потому что настройка, прочитанная под\n * прежний состав столбцов, к нынешнему уже не относится. Запись и снятие — один поток и\n * `concatMap`: разведённые по двум, они теряют порядок между собой, и снятие, обогнавшее\n * запись, оставляет в хранилище снятое.\n */\n constructor() {\n this.#readSource\n .pipe(\n switchMap((read: IConfigRead<ENTITY_TYPE>): Observable<ITable.Config.Data<ENTITY_TYPE>> =>\n this.#iDBStorageService.get(read.storageKey).pipe(\n take(1),\n map((savedConfig: TNullable<IStoredConfig<ENTITY_TYPE>>): ITable.Config.Data<ENTITY_TYPE> =>\n this.#configOf(read.config, savedConfig)\n )\n )\n ),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((config: ITable.Config.Data<ENTITY_TYPE>) => {\n this.#tableConfig.set(config);\n });\n\n this.#writeSource\n .pipe(\n concatMap((write: TConfigWrite<ENTITY_TYPE>): Observable<unknown> => this.#writeOf(write).pipe(take(1))),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe();\n }\n\n public initConfig(storageKey: string, config: Array<ITable.Column<ENTITY_TYPE>>): void {\n this.#readSource.next({ storageKey, config });\n }\n\n public updateConfig(storageKey: string, config: ITable.Config.Data<ENTITY_TYPE>): void {\n this.#writeSource.next({ kind: 'set', storageKey, config });\n this.#tableConfig.set(config);\n }\n\n public deleteConfig(storageKey: string): void {\n this.#writeSource.next({ kind: 'remove', storageKey });\n }\n\n /** Обращение к хранилищу под просьбу записи или снятия. */\n #writeOf(write: TConfigWrite<ENTITY_TYPE>): Observable<unknown> {\n if (write.kind === 'remove') {\n return this.#iDBStorageService.remove(write.storageKey);\n }\n\n const idbConfigColumns: Array<Partial<ITable.Column<ENTITY_TYPE>>> = write.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\n return this.#iDBStorageService.set(write.storageKey, { ...write.config, columns: idbConfigColumns });\n }\n\n /**\n * Настройка, которую показывает таблица: сохранённая, если она сходится с нынешним составом\n * столбцов, иначе — собранная из самого состава.\n */\n #configOf(\n config: Array<ITable.Column<ENTITY_TYPE>>,\n savedConfig: TNullable<IStoredConfig<ENTITY_TYPE>>\n ): ITable.Config.Data<ENTITY_TYPE> {\n if (!savedConfig?.columns || !this.#checkIsSavedConfigConsistent(config, savedConfig.columns)) {\n return {\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 const updatedColumns: Array<ITable.Column<ENTITY_TYPE> & { orderIndex: number }> = savedConfig.columns.map(\n (el: Partial<ITable.Column<ENTITY_TYPE> & { orderIndex: number }>) => {\n const oldConfigIem: TNullable<ITable.Column<ENTITY_TYPE>> = config.find(\n (item: ITable.Column<ENTITY_TYPE>) => el.propName === item.propName\n );\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\n return {\n isVerticalScrollbarShown: !!savedConfig?.isVerticalScrollbarShown,\n isHorizontalScrollbarShown: !!savedConfig?.isHorizontalScrollbarShown,\n columns: updatedColumns,\n };\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).toSorted(comparePropNames),\n savedConfig.map((el: Partial<ITable.Column<ENTITY_TYPE>>) => el.propName).toSorted(comparePropNames)\n )\n );\n }\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n HostListener,\n inject,\n input,\n InputSignal,\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, BreakpointService, ConcatClassesPipe, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isEmpty, isNumber, isString } from '@rt-tools/utils';\nimport { EmptyToDashPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtHideTooltipDirective } from '../../../tooltip';\nimport { ITable } from '../../util/table-column.interface';\n\nconst BEM_BLOCK: string = 'rtui-table-base-cell';\n\n@Component({\n selector: 'rtui-table-base-cell',\n host: { class: BEM_BLOCK },\n templateUrl: './table-base-cell.component.html',\n styleUrls: ['./table-base-cell.component.scss'],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // material\n MatIcon,\n MatTooltip,\n\n // directives\n BlockDirective,\n ElemDirective,\n ConcatClassesPipe,\n ModDirective,\n RtIconOutlinedDirective,\n RtHideTooltipDirective,\n\n // pipes\n EmptyToDashPipe,\n ],\n})\nexport class TableBaseCellComponent<T = { [key: string]: unknown }> {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #clipboard: Clipboard = inject(Clipboard);\n readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n protected readonly cellValue: Signal<T[keyof T] | string | number> = computed(() => {\n const transformFn: TNullable<(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 // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization -- строка стиля собрана китом из настройки колонок, а не из значения, введённого пользователем\n return transformFn ? this.#sanitizer.bypassSecurityTrustStyle(transformFn(this.row()[this.column().propName])) : undefined;\n });\n /**\n * Копировать нечего: значение ячейки пусто. Считается той же утилитой, что рисует прочерк\n * вместо значения, — второй ответ на этот вопрос разошёлся бы с прочерком молча.\n */\n protected readonly isCellEmpty: Signal<boolean> = computed(() => isEmpty(this.cellValue()));\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\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 // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization -- строка стиля собрана китом из настройки колонок, а не из значения, введённого пользователем\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 <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]=\"!narrow()\"\n [matTooltip]=\"column()?.tooltip ?? tooltipValue()\"\n [matTooltipDisabled]=\"narrow()\">\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 && !isCellEmpty()) {\n <button\n type=\"button\"\n rtBlock=\"base-cell\"\n rtElem=\"copy-button\"\n matTooltipPosition=\"above\"\n [rtMod]=\"{\n position: copyBtnPosition,\n complete: isCopied(),\n visible: isMouseOver(),\n }\"\n [matTooltip]=\"isCopied() ? 'Copied!' : 'Copy'\"\n [matTooltipDisabled]=\"narrow()\"\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, ConcatClassesPipe, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { EListSortOrder, TListSortOrderType, ISortModel } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ITable } from '../../util/table-column.interface';\n\nconst BEM_BLOCK: string = 'rtui-table-header-cell';\n\n@Component({\n selector: 'rtui-table-header-cell',\n host: { class: BEM_BLOCK },\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 ConcatClassesPipe,\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 EListSortOrder = EListSortOrder;\n\n public headerModel: InputSignal<ITable.Header> = input.required<ITable.Header>();\n public sortModel: InputSignal<TNullable<ISortModel<string>>> = input.required<TNullable<ISortModel<string>>>();\n public currentSortModel: InputSignal<TNullable<ISortModel<string>>> = input.required<TNullable<ISortModel<string>>>();\n public headerDataEllipsisMaxLines: InputSignalWithTransform<number, number> = input<number, number>(1, {\n transform: numberAttribute,\n });\n\n public readonly sortChange: OutputEmitterRef<ISortModel<string>> = output<ISortModel<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 // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization -- строка стиля собрана китом из настройки колонок, а не из значения, введённого пользователем\n return this.#sanitizer.bypassSecurityTrustStyle(`text-align: ${this.headerModel().align};`);\n }\n\n @HostListener('click')\n protected handleClick(): void {\n const sortPropertyName: TNullable<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(): TListSortOrderType {\n if (this.currentSortModel()?.sortDirection?.toLowerCase() === EListSortOrder.ASC) {\n return EListSortOrder.DESC;\n }\n\n return EListSortOrder.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 ?? ''\" [class]=\"[headerModel()?.className] | concatClasses\">\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 ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n output,\n OutputEmitterRef,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerModule, MatDatepickerToggle } from '@angular/material/datepicker';\n\nimport { EFilterOperatorType, FILTER_OPERATORS, TFilterOperatorType, IFilterModel, isString, transformArrayInput } from '@rt-tools/utils';\nimport { BreakpointService, ConcatClassesPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ITable, ETableColumnFilterTypes } 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 '@rt-tools/utils';\nimport { RtuiClearButtonComponent } from '../clear-search-button/rtui-clear-button.component';\nimport { BlockDirective } from '@rt-tools/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nconst BEM_BLOCK: string = 'rtui-table-header-filter-cell';\n\n@Component({\n selector: 'rtui-table-header-filter-cell',\n host: { class: BEM_BLOCK },\n templateUrl: './table-header-filter-cell.component.html',\n styleUrls: ['./table-header-filter-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [BreakpointService, provideNativeDateAdapter()],\n imports: [\n ConcatClassesPipe,\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 #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #injector: Injector = inject(Injector);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n protected readonly filterTypes: typeof ETableColumnFilterTypes = ETableColumnFilterTypes;\n protected readonly filterOperatorTypes: typeof EFilterOperatorType = EFilterOperatorType;\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<IFilterModel<KEY>[], IFilterModel<KEY>[]> = input.required<\n IFilterModel<KEY>[],\n IFilterModel<KEY>[]\n >({\n transform: (value: IFilterModel<KEY>[]) => transformArrayInput(value),\n });\n /** Filter property */\n public defaultFilterOperator: InputSignalWithTransform<TFilterOperatorType, TFilterOperatorType> = input.required<\n TFilterOperatorType,\n TFilterOperatorType\n >({\n transform: (value: TFilterOperatorType): TFilterOperatorType =>\n value && FILTER_OPERATORS.includes(value) ? value : EFilterOperatorType.EQUALS,\n });\n /** Available filter operators */\n public filterOperators: InputSignalWithTransform<TFilterOperatorType[], TFilterOperatorType[]> = input<\n TFilterOperatorType[],\n TFilterOperatorType[]\n >([], {\n transform: (value: TFilterOperatorType[]) => 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\n /** Filter change output action */\n public readonly filterChange: OutputEmitterRef<IFilterModel<KEY>[]> = output<IFilterModel<KEY>[]>();\n\n public readonly currentFilter: WritableSignal<IFilterModel<KEY>> = signal({\n propertyName: '' as KEY,\n operatorType: EFilterOperatorType.EQUALS,\n value: '',\n });\n\n public ngOnInit(): void {\n toObservable(this.filterModel, { injector: this.#injector })\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((filterModel: IFilterModel<KEY>[]) => {\n this.currentFilter.set(\n filterModel?.length && filterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty())\n ? (filterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty()) as IFilterModel<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 // Дата хранится строкой, и сверять её надо в том же виде: `Date` не равен строке никогда,\n // и без приведения повторный выбор той же даты каждый раз считался бы новым значением.\n const nextValue: string | number | boolean = isDate(value) ? value.toISOString() : value;\n\n if (nextValue === this.currentFilter().value) {\n return;\n }\n\n let updatedFilterModel: IFilterModel<KEY>[] = this.filterModel();\n\n if (updatedFilterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty())) {\n if (nextValue) {\n updatedFilterModel = updatedFilterModel.map((el: IFilterModel<KEY>) =>\n el.propertyName === this.filterProperty() ? { ...el, value: nextValue } : el\n );\n } else {\n updatedFilterModel = updatedFilterModel.filter((el: IFilterModel<KEY>) => el.propertyName !== this.filterProperty());\n }\n this.filterChange.emit(updatedFilterModel);\n } else if (nextValue) {\n updatedFilterModel.push({\n propertyName: this.filterProperty(),\n operatorType: this.currentFilter().operatorType,\n value: nextValue,\n });\n this.filterChange.emit(updatedFilterModel);\n } else {\n // Отбора по этой колонке ещё нет, и значения тоже — списку отбора менять нечего.\n }\n\n this.currentFilter.update((filter: IFilterModel<KEY>) => ({ ...filter, value: nextValue }));\n }\n\n /** Change filter operator */\n public onFilterOperatorChange(operatorType: TFilterOperatorType): void {\n if (operatorType === this.currentFilter().operatorType) {\n return;\n }\n\n let updatedFilterModel: IFilterModel<KEY>[] = this.filterModel();\n\n if (updatedFilterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty())) {\n updatedFilterModel = updatedFilterModel.map((el: IFilterModel<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 } else {\n // Отбора по этой колонке нет и значения тоже — менять вид сравнения не у чего.\n }\n\n this.currentFilter.update((filter: IFilterModel<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]=\"narrow()\"\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 <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.EQUALS)\">\n <mat-icon rtIconOutlined [class]=\"['material-icons-outlined'] | concatClasses\">drag_handle</mat-icon>\n <span>Equal</span>\n </button>\n }\n @if (\n filterOperators().includes(filterOperatorTypes.NOT_EQUALS) && currentFilter()?.operatorType !== filterOperatorTypes.NOT_EQUALS\n ) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.NOT_EQUALS)\">\n <mat-icon [rtIconOutlined]=\"true\">block</mat-icon>\n <span>Not equal</span>\n </button>\n }\n @if (filterOperators().includes(filterOperatorTypes.CONTAINS) && currentFilter()?.operatorType !== filterOperatorTypes.CONTAINS) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.CONTAINS)\">\n <mat-icon [rtIconOutlined]=\"true\">more_horiz</mat-icon>\n <span>Contains</span>\n </button>\n }\n @if (\n filterOperators().includes(filterOperatorTypes.GREATER_THAN) &&\n currentFilter()?.operatorType !== filterOperatorTypes.GREATER_THAN\n ) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.GREATER_THAN)\">\n <mat-icon [rtIconOutlined]=\"true\">chevron_right</mat-icon>\n <span>More than</span>\n </button>\n }\n @if (filterOperators().includes(filterOperatorTypes.LESS_THAN) && currentFilter()?.operatorType !== filterOperatorTypes.LESS_THAN) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.LESS_THAN)\">\n <mat-icon [rtIconOutlined]=\"true\">chevron_left</mat-icon>\n <span>Less than</span>\n </button>\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]=\"narrow()\"\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\" />\n <mat-datepicker #picker />\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]=\"narrow()\"\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","export const RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE: string = 'rtui-table-stop-row-click-attribute';\n","import { Directive, inject, input, InputSignal, InputSignalWithTransform, HostListener, booleanAttribute } from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nimport { RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE } from '../util/table-stop-row-click-attribute.const';\nimport { IRtuiTable, RTUI_TABLE_COMPONENT_TOKEN } from '../util/table-component.interface';\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { EFilterOperatorType, IFilterModel, ISortModel, transformArrayInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ETableColumnTypes, ITable } from '../../util/table-column.interface';\nimport { IRtuiTable, RTUI_TABLE_COMPONENT_TOKEN } from '../../util/table-component.interface';\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/rtui-table-row-click-directive';\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\nconst BEM_BLOCK: string = 'rtui-table';\n\n@Component({\n selector: 'rtui-table',\n host: { class: BEM_BLOCK },\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 ModDirective,\n RtIconOutlinedDirective,\n RtuiTableRowClickDirective,\n\n // components\n RtuiTableHeaderCellComponent,\n TableBaseCellComponent,\n RtuiTableHeaderFilterCellComponent,\n ],\n providers: [\n BreakpointService,\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<TNullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('rowActions');\n protected readonly rowActionsHeaderPaddingHelper: Signal<TNullable<ElementRef<HTMLElement>>> =\n viewChild<ElementRef<HTMLElement>>('rowActionsHeaderPaddingHelper');\n protected readonly rowActionsPaddingHelper: Signal<TNullable<ElementRef<HTMLElement>>> =\n viewChild<ElementRef<HTMLElement>>('rowActionsRowPaddingHelper');\n\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n readonly #tableConfigService: RtTableConfigService<ENTITY_TYPE> = inject(RtTableConfigService);\n\n protected readonly columnTypes: typeof ETableColumnTypes = ETableColumnTypes;\n protected readonly filterOperators: typeof EFilterOperatorType = EFilterOperatorType;\n\n /** Indicates is mobile view */\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n public readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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<TNullable<ISortModel<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<IFilterModel<KEY>[], IFilterModel<KEY>[]> = input<\n IFilterModel<KEY>[],\n IFilterModel<KEY>[]\n >([], {\n transform: (value: IFilterModel<KEY>[]) => transformArrayInput(value),\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<ISortModel<SORT_PROPERTY>> = output<ISortModel<SORT_PROPERTY>>();\n /** Filter change output action */\n public readonly filterChange: OutputEmitterRef<IFilterModel<KEY>[]> = output<IFilterModel<KEY>[]>();\n\n /** Columns config for table */\n public columns: Signal<Array<ITable.Column<ENTITY_TYPE>>> = computed(() => this.#tableConfigService.tableConfig().columns);\n\n /** Custom cells template */\n public readonly customCellsTpl: Signal<TNullable<RtuiCustomTableCellsDirective<ENTITY_TYPE>>> =\n contentChild(RtuiCustomTableCellsDirective);\n /** Row actions template */\n public readonly rowActionsTpl: Signal<\n TNullable<\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<TNullable<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<TNullable<number>> = signal(null);\n\n public ngAfterViewChecked(): void {\n this.#setPaddingHelperWidth();\n }\n\n /**\n * Sort change output action.\n *\n * Имя колонки приходит строкой, а наружу уходит ключом домена. Приведение здесь принимало\n * любую строку: колонка, которой в наборе нет, уезжала потребителю законным значением, и\n * ни сборка, ни типы этого не видели. Сверяется оно с тем же набором колонок, который\n * рисует таблица, — второго списка имён у неё нет; несовпавшее не отдаётся вовсе.\n */\n public onSortChange(sortModel: ISortModel<string>): void {\n const known: ISortModel<SORT_PROPERTY> | null = this.#sortOfKnownColumn(sortModel);\n\n if (known !== null) {\n this.sortChange.emit(known);\n }\n }\n\n /** Модель сортировки с ключом домена — либо `null`, если такой колонки у таблицы нет. */\n #sortOfKnownColumn(sortModel: ISortModel<string>): ISortModel<SORT_PROPERTY> | null {\n const names: Array<string> = this.columns().map((column: ITable.Column<ENTITY_TYPE>) => String(column.propName));\n\n if (!names.includes(sortModel.propertyName)) {\n return null;\n }\n\n return { ...sortModel, propertyName: sortModel.propertyName as SORT_PROPERTY };\n }\n\n /** Filter change output action */\n public onFilterChange(filterModel: IFilterModel<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: TNullable<HTMLElement> = this.rowActionsHeaderPaddingHelper()?.nativeElement;\n const paddingEl: TNullable<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\" />\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 { IPageModel } from '@rt-tools/utils';\n\nexport const DEFAULT_PAGE_SIZE: number = 20;\n\nexport const DEFAULT_PAGE_MODEL: Readonly<IPageModel> = 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 ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n InputSignal,\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, BreakpointService, ElemDirective, ModDirective, WINDOW } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isNumber, IPageModel } from '@rt-tools/utils';\nimport { DEFAULT_PAGE_SIZE } from '../../util/default-pagination';\n\nconst BEM_BLOCK: string = 'rtui-pagination';\n\n@Component({\n selector: 'rtui-pagination',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-pagination.component.html',\n styleUrls: ['./rtui-pagination.component.scss'],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, BlockDirective, ElemDirective, ModDirective],\n})\nexport class RtuiPaginationComponent implements OnInit, AfterViewInit {\n readonly #injector: Injector = inject(Injector);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #fb: FormBuilder = inject(FormBuilder);\n readonly #windowRef: Window = inject(WINDOW);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n /** Current Page Model */\n public currentPageModel: InputSignal<IPageModel> = input.required();\n\n /** Output action when Page Model changed */\n public readonly pageModelChange: OutputEmitterRef<Partial<IPageModel>> = output<Partial<IPageModel>>();\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<TNullable<IPageModel>> = 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<TNullable<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 } else {\n // Ширина порога не пересекла — признак усечения остаётся прежним.\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: TNullable<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 currentTotal: number = Math.ceil(this.currentPageModel().totalCount / pageSize);\n const previousTotal: number = Math.ceil(this.currentPageModel().totalCount / this.currentPageModel().pageSize);\n const correction: number = Math.floor(\n ((previousTotal - this.currentPageModel().pageNumber) * this.currentPageModel().pageSize) / pageSize\n );\n\n this.pageModelChange.emit({ pageNumber: currentTotal - 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((_value: number | string, index: number) => index + 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: TNullable<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() }\">\n <div rtBlock=\"paging\" [rtMod]=\"{ clipped: isContentClipped() }\">\n <div\n rtElem=\"item\"\n role=\"button\"\n tabindex=\"0\"\n [rtMod]=\"{ enabled: 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 (narrow()) {\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() }\">\n @if (!narrow()) {\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","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector-list-actions';\n\n@Component({\n selector: 'rtui-dynamic-selector-list-actions',\n host: { class: BEM_BLOCK },\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, ModDirective, MatIconButton, MatTooltip],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiDynamicSelectorListActionsComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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]=\"narrow()\"\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]=\"narrow()\"\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, computed, Directive, inject, input, InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { transformStringInput } from '@rt-tools/utils';\nimport { BreakpointService } from '@rt-tools/core';\n\n@Directive()\nexport abstract class RtuiDynamicSelectorsDirective {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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 EToggleSizeType {\n SM = 'sm',\n MD = 'md',\n}\n\nexport type TToggleSizeType = EToggleSizeType.SM | EToggleSizeType.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, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { BreakpointService } from '@rt-tools/core';\nimport { EToggleSizeType, TToggleSizeType } from './toggle-size.type.enum';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nconst BEM_BLOCK: string = 'rtui-toggle';\n\n@Component({\n selector: 'rtui-toggle',\n host: { class: BEM_BLOCK },\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 ModDirective,\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 /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<TNullable<boolean>> = this.#breakpointService.isMobile;\n\n public formControl: FormControl<boolean> = new FormControl<boolean>(false, { nonNullable: true });\n\n public label: InputSignal<TNullable<string>> = input();\n public tooltip: InputSignal<string> = input('');\n public size: InputSignal<TToggleSizeType> = input<TToggleSizeType>(EToggleSizeType.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 #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() || narrow() || 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 computed,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport {\n BreakStringPipe,\n DeviceDetectorService,\n EntityToStringPipe,\n OSTypes,\n RtIconOutlinedDirective,\n RtScrollDirective,\n} from '@rt-tools/core';\nimport { RtuiSpinnerComponent } from '../../../spinner';\nimport { RtuiClearButtonComponent } from '../../../table/components/clear-search-button/rtui-clear-button.component';\nimport { RtuiToggleComponent } from '../../../toggle';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nconst BEM_BLOCK: string = 'rtui-multi-selector-popup';\n\n@Component({\n selector: 'rtui-multi-selector-popup',\n host: { class: BEM_BLOCK },\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 ModDirective,\n RtScrollDirective,\n RtIconOutlinedDirective,\n\n // components\n RtuiClearButtonComponent,\n RtuiToggleComponent,\n RtuiSpinnerComponent,\n EntityToStringPipe,\n ],\n providers: [BreakpointService, DeviceDetectorService],\n})\nexport class RtuiMultiSelectorPopupComponent<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>>\n implements OnInit, AfterViewInit\n{\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #injector: Injector = inject(Injector);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n readonly #deviceService: DeviceDetectorService = inject(DeviceDetectorService);\n\n protected readonly oSTypes: typeof OSTypes = OSTypes;\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<TNullable<boolean>, boolean> = input<TNullable<boolean>, boolean>(false, {\n transform: booleanAttribute,\n });\n /** Indicates local search is used */\n public isLocalSearch: InputSignalWithTransform<TNullable<boolean>, boolean> = input<TNullable<boolean>, boolean>(true, {\n transform: booleanAttribute,\n });\n /** Keys of a pinned group kept at the top of the list — a trailing divider is drawn after the last visible one */\n public pinnedKeys: InputSignalWithTransform<ENTITY[KEY][], ENTITY[KEY][]> = input<ENTITY[KEY][], ENTITY[KEY][]>([], {\n transform: (value: unknown) => transformArrayInput(value),\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<TNullable<ElementRef<HTMLInputElement>>> =\n viewChild<ElementRef<HTMLInputElement>>('searchInputTpl');\n\n /** Form control for search */\n public readonly searchControl: FormControl<TNullable<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 /** Key of the last visible pinned option — its row gets a trailing divider */\n public readonly lastSeparatedKey: Signal<TNullable<ENTITY[KEY]>> = computed(() => {\n const keys: ENTITY[KEY][] = this.pinnedKeys();\n\n if (!keys.length) {\n return null;\n }\n\n const list: ENTITY[] = this.filteredEntities();\n\n for (let i: number = list.length - 1; i >= 0; i--) {\n const key: ENTITY[KEY] = list[i][this.keyExp()];\n\n if (keys.includes(key)) {\n return key;\n }\n }\n\n return null;\n });\n\n public ngOnInit(): void {\n /** Clear previous temp selection */\n this.temporarySelectAction.emit([]);\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: TNullable<string>): void => {\n const selectedEntities: ENTITY[] = this.entitiesToSelect().filter((el: ENTITY) =>\n 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(\n (el: ENTITY) =>\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 } else if (this.isLocalSearch()) {\n this.filteredEntities.set(this.entitiesToSelect());\n } else if (value !== null && typeof value === 'string') {\n this.searchAction.emit(value);\n } else {\n // Строка пуста, а поиск не местный — запрашивать нечего.\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(\n (el: ENTITY) => !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 * Reset search term left over from a previous open. Deferred from `ngOnInit` to\n * `ngAfterViewInit` because emitting `searchAction` synchronously in `ngOnInit`\n * triggers a parent state update during the same change-detection tick in which\n * the host `cdkConnectedOverlay` is attaching. The cascade detaches/reattaches\n * the overlay's origin reference before its position strategy has computed the\n * connected coordinates, leaving the popup pinned at (0, 0). By the time\n * `ngAfterViewInit` runs the overlay is positioned, so a downstream re-fetch is\n * safe.\n */\n if (this.searchTerm()) {\n this.onClearSearch();\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 => el !== entity[this.keyExp()])\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 (!narrow()) {\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 (narrow()) {\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>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 [rtMod]=\"{ separated: entity[keyExp()] === lastSeparatedKey() }\"\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: entity[keyExp()] === lastSeparatedKey() }\"\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\" (click)=\"onClose()\">Cancel</button>\n\n <button mat-flat-button type=\"button\" [disabled]=\"!selectionControl.value?.length || loading()\" (click)=\"onSubmit()\">SUBMIT</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, ModDirective } from '@rt-tools/core';\nimport { transformStringInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector-placeholder';\n\n@Component({\n selector: 'rtui-dynamic-selector-placeholder',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-dynamic-selector-placeholder.component.html',\n styleUrls: ['./rtui-dynamic-selector-placeholder.component.scss'],\n imports: [MatIcon, MatButton, CdkOverlayOrigin, RtIconOutlinedDirective, BlockDirective, ElemDirective, ModDirective],\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 [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 computed,\n contentChild,\n Directive,\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 { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport { BreakStringPipe, EntityToStringPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtHideTooltipDirective } from '../../../tooltip';\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/** Directive for custom item title template */\n@Directive({\n selector: '[rtuiDynamicSelectorItemTitleDirective]',\n})\nexport class RtuiDynamicSelectorItemTitleDirective {}\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector-selected-list';\n\n@Component({\n selector: 'rtui-dynamic-selector-selected-list',\n host: { class: BEM_BLOCK },\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 ModDirective,\n\n // pipes\n EntityToStringPipe,\n BreakStringPipe,\n TitleCasePipe,\n ],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiDynamicSelectorSelectedListComponent<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>> {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n protected readonly editedItemIndex: WritableSignal<TNullable<number>> = signal(null);\n\n public readonly inputRef: Signal<TNullable<MatInput>> = viewChild(MatInput);\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<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorItemAdditionalControlDirective,\n {\n read: TemplateRef,\n }\n );\n /** Custom item title template */\n public readonly itemTitleTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorItemTitleDirective,\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: TNullable<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]=\"narrow()\">\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 if (itemTitleTpl()) {\n <ng-container *ngTemplateOutlet=\"itemTitleTpl() || null; context: { $implicit: entity }\" />\n } @else {\n <span\n #titleTpl\n rtElem=\"item-title\"\n matTooltipPosition=\"above\"\n [rtHideTooltipDirective]=\"titleTpl\"\n [isTooltipShown]=\"!narrow()\"\n [matTooltip]=\"\n useNameBreaking()\n ? (entity[displayExp()] | entityToString | breakString)\n : (entity[displayExp()] | entityToString)\n \"\n [matTooltipDisabled]=\"narrow()\">\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]=\"narrow()\"\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]=\"narrow()\"\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]=\"narrow()\"\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, BreakpointService, ConcatClassesPipe, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual, areArraysEqualUnordered, checkIsEntityInArrayByKey, sortByAlphabet, transformArrayInput } from '@rt-tools/utils';\nimport { OVERLAY_POSITIONS, RtEscapeKeyDirective } from '@rt-tools/core';\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 RtuiDynamicSelectorItemTitleDirective,\n RtuiDynamicSelectorSelectedListComponent,\n} from '../selected-list/rtui-dynamic-selector-selected-list.component';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\n/**\n * Порядок ключей для сверки двух списков.\n *\n * Какой именно порядок, значения не имеет — оба списка выстраиваются одним и тем же, и сравнивают их\n * на равенство. Важно лишь, чтобы порядок был один: умолчание `sort()` зависит от вида значения и на\n * числах даёт лексикографический.\n */\nfunction compareKeys(a: unknown, b: unknown): number {\n return String(a).localeCompare(String(b));\n}\n\ninterface IFormModel {\n autocompleteControl: FormControl<TNullable<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/** Directive for custom item title template, projected from rtui-dynamic-selector down to selected-list */\n@Directive({\n selector: '[rtuiDynamicSelectorItemTitleProjectionDirective]',\n})\nexport class RtuiDynamicSelectorItemTitleProjectionDirective {}\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector';\n\n@Component({\n selector: 'rtui-dynamic-selector',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-dynamic-selector.component.html',\n styleUrls: ['./rtui-dynamic-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ConcatClassesPipe,\n ReactiveFormsModule,\n NgTemplateOutlet,\n CdkOverlayOrigin,\n CdkConnectedOverlay,\n\n // directives\n BlockDirective,\n ElemDirective,\n RtEscapeKeyDirective,\n RtuiDynamicSelectorItemAdditionalControlDirective,\n RtuiDynamicSelectorItemTitleDirective,\n\n // components\n RtuiMultiSelectorPopupComponent,\n RtuiDynamicSelectorPlaceholderComponent,\n RtuiDynamicSelectorListActionsComponent,\n RtuiDynamicSelectorSelectedListComponent,\n ],\n providers: [\n BreakpointService,\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<IFormModel> = this.#fb.group<IFormModel>({\n autocompleteControl: this.#fb.control<TNullable<string>>(null), // used only for UI\n });\n /** Target element for overlay selector */\n public selectedOverlayTrigger: TNullable<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 /** Custom sort function for entities list in popup */\n public sortFn: InputSignal<TNullable<(a: ENTITY, b: ENTITY) => number>> = input<TNullable<(a: ENTITY, b: ENTITY) => number>>(null);\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 this.#selectedEntityIds()\n .map((id: ENTITY[KEY]) => this.entities().find((el: ENTITY) => id === el[this.keyExp()]))\n .filter((el: TNullable<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 () => !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 () => areArraysEqual(this.#selectedEntityIds(), this.#initialEntityIds()) && !this.additionalControlChanged()\n );\n /** Indicates clear selected button is disabled */\n public readonly isClearButtonDisabled: Signal<boolean> = computed(\n () => 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 this.#entities()\n .filter((entity: ENTITY) => !checkIsEntityInArrayByKey<ENTITY, KEY>(this.selectedEntities(), entity, this.keyExp()))\n .filter(\n (entity: ENTITY) =>\n (typeof entity[this.displayExp()] === 'string' || typeof entity[this.displayExp()] === 'number') &&\n entity[this.displayExp()]?.toString().toLowerCase().includes(this.#autocompleteControlValue().toLowerCase())\n )\n .sort((a: ENTITY, b: ENTITY) => {\n const sortFn: TNullable<(a: ENTITY, b: ENTITY) => number> = this.sortFn();\n\n return sortFn ? sortFn(a, b) : sortByAlphabet(a, b, this.displayExp());\n })\n );\n\n /** Additional control for entity */\n public readonly additionalControlTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorAdditionalControlDirective,\n {\n read: TemplateRef,\n }\n );\n /** Custom item title template */\n public readonly itemTitleTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorItemTitleProjectionDirective,\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: TNullable<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(compareKeys);\n const selectedEntityIdsForCompare: ENTITY[KEY][] = [...selectedEntityIds].sort(compareKeys);\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) => entity[this.keyExp()]);\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 } else {\n // Форма уже собрана, а список выбранного не менялся — сообщать ей нечего.\n }\n },\n { injector: this.#injector }\n );\n\n /** Set list of values */\n effect(\n () => {\n if (Array.isArray(this.entities()) && !areArraysEqual(this.entities(), this.#entities())) {\n this.#entities.set(this.entities());\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) && value.length) {\n this.#selectedEntityIds.set(value);\n this.#initialEntityIds.set(value);\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: TNullable<ENTITY> = this.entities().find((entity: ENTITY) => entity[this.keyExp()] === keyValue);\n\n if (!entity) {\n return;\n }\n\n const isRemoveSelected: boolean = !!this.selectedEntities().find(\n (selectedEntity: ENTITY) => selectedEntity[this.keyExp()] === keyValue\n );\n\n if (isRemoveSelected) {\n this.#selectedEntityIds.update((selectedEntityIds: ENTITY[KEY][]) =>\n selectedEntityIds.filter((id: ENTITY[KEY]) => id !== keyValue)\n );\n } else {\n this.#selectedEntityIds.update((selectedEntityIds: ENTITY[KEY][]) => [...selectedEntityIds, entity[this.keyExp()]]);\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][]) => list.filter((el: ENTITY[KEY]) => this.readonlyEntitiesKeys().includes(el)));\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: TNullable<ENTITY> = this.entities().find((entity: ENTITY) => entity[this.keyExp()] === values[0]);\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 [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\n @if (itemTitleTpl()) {\n <ng-container *rtuiDynamicSelectorItemTitleDirective=\"let entity\">\n <ng-template *ngTemplateOutlet=\"itemTitleTpl() || 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]=\"['rtui-btn', 'rtui-btn-secondary-text'] | concatClasses\"\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 [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 [disabled]=\"disabled()\"\n [isResetButtonDisabled]=\"isResetButtonDisabled()\"\n [isClearButtonDisabled]=\"isClearButtonDisabled()\"\n (resetAction)=\"resetList()\"\n (clearAction)=\"clearList()\" />\n</ng-template>\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 '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual } from '@rt-tools/utils';\nimport { BreakpointService, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ASIDE_REF, AsideRef } from '../../../aside/aside.types';\nimport { RtuiAsideContainerComponent, RtuiAsideContainerHeaderDirective } from '../../../aside';\nimport {\n RtuiDynamicSelectorAdditionalControlDirective,\n RtuiDynamicSelectorComponent,\n} from '../../../dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component';\nimport { RtuiToggleComponent } from '../../../toggle';\nimport { ITable } from '../../util/table-column.interface';\nimport { comparePropNames } from '../../util/compare-prop-names';\n\nconst BEM_BLOCK: string = 'rtui-test-aside';\n\n@Component({\n selector: 'rtui-test-aside',\n host: { class: BEM_BLOCK },\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 /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpointService.isMobile());\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 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.toSorted(comparePropNames), currentValues.toSorted(comparePropNames));\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: TNullable<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.toSorted(\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 list.map((el: ITable.Column<ENTITY_TYPE>) => (entity.propName === el.propName ? { ...el, hidden: !el.hidden } : el))\n );\n }\n}\n","<rtui-aside-container\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 [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]=\"narrow()\"\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 computed,\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 { Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, exhaustMap, filter, map } from 'rxjs/operators';\n\nimport { BlockDirective, ConcatClassesPipe, ElemDirective, ModDirective, PlatformService, WINDOW } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isString, IPageModel, transformStringInput } from '@rt-tools/utils';\nimport { BreakpointService, RtIconOutlinedDirective } from '@rt-tools/core';\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 } from '../../util/table-column.interface';\nimport { RtTableConfigService } from '../../util/table-config.service';\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\nconst BEM_BLOCK: string = 'rtui-table-container';\n\n@Component({\n selector: 'rtui-table-container',\n host: { class: BEM_BLOCK },\n templateUrl: './table-container.component.html',\n styleUrls: ['./table-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ConcatClassesPipe,\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 #breakpoints: BreakpointService = inject(BreakpointService);\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: TNullable<CSSStyleDeclaration> = this.#documentRef?.documentElement?.style;\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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<IPageModel> = input.required();\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<TNullable<string>, TNullable<string>> = input<TNullable<string>, TNullable<string>>('', {\n transform: (value: TNullable<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<TNullable<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<IPageModel>> = output<Partial<IPageModel>>();\n /** Search change output action */\n public readonly searchChange: OutputEmitterRef<TNullable<string>> = output<TNullable<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<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiTableToolbarSelectorsDirective, {\n read: TemplateRef,\n });\n /** Toolbar actions template */\n public readonly toolbarActionsTpl: Signal<TNullable<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<TNullable<string>> = new FormControl(null);\n\n /** Нажатия на «настроить столбцы»: сама панель открывается объявленным потоком в `ngOnInit`. */\n readonly #openConfigAsideSource: Subject<void> = new Subject<void>();\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 /**\n * Открытие панели настройки столбцов.\n *\n * `exhaustMap`: пока панель открыта, второе нажатие открывать нечего — прежде каждое\n * заводило свою подписку, и настройку сохраняла та панель, что закрылась последней.\n */\n this.#openConfigAsideSource\n .pipe(\n exhaustMap((): Observable<TNullable<ITable.Config.Data<ENTITY_TYPE>>> =>\n this.#asideService.open<\n RtTableConfigAsideComponent<ENTITY_TYPE>,\n ITable.Config.Data<ENTITY_TYPE>,\n ITable.Config.Data<ENTITY_TYPE>\n >(RtTableConfigAsideComponent, 'right', this.tableConfig())\n ),\n filter(Boolean),\n takeUntilDestroyed(this.#destroyRef)\n )\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 this.searchControl.valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n map((value: TNullable<string>) => (!!value ? value.trim() : value)),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((value: TNullable<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<IPageModel>): 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.#openConfigAsideSource.next();\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: TNullable<string> = this.#sanitizer.sanitize(0, vertical);\n const safeHorizontalValue: TNullable<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 matTooltip=\"Clear filters\"\n matTooltipPosition=\"below\"\n rtElem=\"toolbar-action\"\n [matTooltipDisabled]=\"narrow()\"\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 matTooltip=\"Refresh\"\n matTooltipPosition=\"below\"\n rtElem=\"toolbar-action\"\n [matTooltipDisabled]=\"narrow()\"\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 matTooltip=\"Table configuration\"\n matTooltipPosition=\"below\"\n rtElem=\"toolbar-action\"\n [matTooltipDisabled]=\"narrow()\"\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>\n <rtui-pagination [currentPageModel]=\"pageModel()\" (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 computed,\n contentChild,\n Directive,\n inject,\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 { TNullable } from '@rt-tools/utils';\nimport { IFilterModel, IPageModel, ISortModel, transformArrayInput, transformStringInput } from '@rt-tools/utils';\nimport {\n RtuiCustomTableCellsDirective,\n RtuiTableAdditionalRowActionsDirective,\n RtuiTableComponent,\n RtuiTableRowActionsDirective,\n} from './components/table/rtui-table.component';\nimport {\n RtuiTableContainerComponent,\n RtuiTableToolbarActionsDirective,\n RtuiTableToolbarSelectorsDirective,\n} from './components/table-container/table-container.component';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { BreakpointService } from '@rt-tools/core';\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\nconst BEM_BLOCK: string = 'rtui-dynamic-list';\n\n@Component({\n selector: 'rtui-dynamic-list',\n host: { class: BEM_BLOCK },\n templateUrl: './dynamic-list.component.html',\n styleUrls: ['./dynamic-list.component.scss'],\n providers: [BreakpointService],\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 readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Table config storage key */\n public tableConfigStorageKey: InputSignalWithTransform<string, unknown> = input.required<string, unknown>({\n transform: transformStringInput,\n });\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n public readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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<IPageModel> = input.required();\n /** Current search term from store */\n public searchTerm: InputSignal<TNullable<string>> = input.required();\n /** Current sort model from store */\n public currentSortModel: InputSignal<TNullable<ISortModel<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<IFilterModel<KEY>[], IFilterModel<KEY>[]> = input<\n IFilterModel<KEY>[],\n IFilterModel<KEY>[]\n >([], {\n transform: (value: IFilterModel<KEY>[]) => transformArrayInput(value),\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<ISortModel<NonNullable<KEY>>> = output<ISortModel<NonNullable<KEY>>>();\n /** Page model change output action */\n public readonly pageModelChange: OutputEmitterRef<Partial<IPageModel>> = output<Partial<IPageModel>>();\n /** Search change output action */\n public readonly searchChange: OutputEmitterRef<TNullable<string>> = output<TNullable<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<IFilterModel<KEY>[]> = output<IFilterModel<KEY>[]>();\n\n /** Toolbar selectors template */\n public readonly toolbarSelectorsTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(\n RtuiDynamicListToolbarSelectorsDirective,\n {\n read: TemplateRef,\n }\n );\n /** Toolbar actions template */\n public readonly toolbarActionsTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(\n RtuiDynamicListToolbarActionsDirective,\n {\n read: TemplateRef,\n }\n );\n /** Custom cells template */\n public readonly customCellsTpl: Signal<TNullable<RtuiDynamicListCustomTableCellsDirective<{ $implicit: ENTITY_TYPE }>>> = contentChild(\n RtuiDynamicListCustomTableCellsDirective\n );\n /** Row actions template */\n public readonly rowActionsTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY_TYPE }>>> = contentChild(\n RtuiDynamicListRowActionsDirective,\n {\n read: TemplateRef,\n }\n );\n /** Additional row actions template */\n public readonly additionalRowActionsTpl: Signal<TNullable<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<TNullable<RtuiTableContainerComponent<ENTITY_TYPE>>> =\n viewChild<RtuiTableContainerComponent<ENTITY_TYPE>>(RtuiTableContainerComponent);\n /** Table selector for selectors directive usage */\n public readonly tableTpl: Signal<TNullable<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: TNullable<string>): void {\n this.searchChange.emit(value);\n }\n\n /** Sort change output action */\n public onSortChange(sortModel: ISortModel<NonNullable<KEY>>): void {\n this.sortChange.emit(sortModel);\n }\n\n /** Page model change output action */\n public onPageModelChange(pageModel: Partial<IPageModel>): void {\n this.pageModelChange.emit(pageModel);\n }\n\n /** Filter change output action */\n public onFilterChange(filterModel: IFilterModel<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 [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 [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 { booleanAttribute, Directive, input, InputSignalWithTransform, signal, WritableSignal } from '@angular/core';\n\nimport { transformArrayInput } from '@rt-tools/utils';\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(\n (el: ENTITY_TYPE, index: number, self: ENTITY_TYPE[]) =>\n 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 { TNullable } from '@rt-tools/utils';\n\nimport { RtuiTableContainerComponent } from '../components/table-container/table-container.component';\nimport { RtuiTableComponent } from '../components/table/rtui-table.component';\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 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 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 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 const containerTpl: TNullable<RtuiTableContainerComponent<ENTITY_TYPE>> = this.#dynamicListRef.tableContainerTpl();\n\n if (containerTpl?.onToggleAllEntities) {\n containerTpl.onToggleAllEntities = (checked: boolean): void => 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 const tableTpl: TNullable<RtuiTableComponent<ENTITY_TYPE, SORT_PROPERTY, KEY>> = this.#dynamicListRef.tableTpl();\n\n if (tableTpl) {\n tableTpl.isSelectorsColumnShown.set(true);\n tableTpl.onToggleEntity = (entity: ENTITY_TYPE, checked: boolean): void => this.toggleEntity(entity, checked);\n 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/table/rtui-table.component';\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 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// functions\nexport * from './compare-prop-names';\n\n// models\nexport * from './default-pagination';\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 { Directive, ElementRef, inject, OnInit } from '@angular/core';\n\nimport { PlatformService } from '@rt-tools/core';\nimport { RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE } from '../util/table-stop-row-click-attribute.const';\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 { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, inject, input, InputSignalWithTransform, TemplateRef } from '@angular/core';\nimport { DomSanitizer, SafeValue } from '@angular/platform-browser';\n\nimport { TNullable } from '@rt-tools/utils';\nimport { isString } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-popover-container';\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 host: { class: BEM_BLOCK },\n})\nexport class RtuiPopoverContainerComponent {\n readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n public popoverTemplate: InputSignalWithTransform<TNullable<TemplateRef<HTMLElement>>, TNullable<TemplateRef<HTMLElement>>> = input<\n TNullable<TemplateRef<HTMLElement>>,\n TNullable<TemplateRef<HTMLElement>>\n >(undefined, {\n transform: (value: TNullable<TemplateRef<HTMLElement>>) => value ?? null,\n });\n\n public popoverClass: InputSignalWithTransform<TNullable<string>, string | undefined> = input<TNullable<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 { PlatformService, WINDOW } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { RtuiPopoverContainerComponent } from './rtui-popover-container.component';\n\nexport type TMenuItemTrigger = '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<TMenuItemTrigger, TMenuItemTrigger> = input<TMenuItemTrigger, TMenuItemTrigger>('hover', {\n transform: (value: unknown) => (value === 'click' ? 'click' : 'hover'),\n });\n public template: InputSignalWithTransform<TNullable<TemplateRef<HTMLElement>>, TNullable<TemplateRef<HTMLElement>>> = input<\n TNullable<TemplateRef<HTMLElement>>,\n TNullable<TemplateRef<HTMLElement>>\n >(null, {\n transform: (value: TNullable<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 '@rt-tools/core';\nimport { BreakpointService, EmptyToDashPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtPopoverDirective } from '../../../popover/rt-popover.directive';\nimport { IRtActionBar } from '../../action-bar-config.interface';\n\nconst BEM_BLOCK: string = 'rtui-action-bar';\n\n@Component({\n selector: 'rtui-action-bar',\n host: { class: BEM_BLOCK },\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 <button type=\"button\" rtElem=\"action\" [ngStyle]=\"btn?.styles\" (click)=\"onAction(btn)\">\n <ng-template *ngTemplateOutlet=\"buttonContentTpl; context: { $implicit: btn }\" />\n </button>\n }\n }\n </div>\n }\n\n <button type=\"button\" 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 </button>\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 <button type=\"button\" rtElem=\"action\" (click)=\"onAction(btn)\">\n <ng-template *ngTemplateOutlet=\"buttonContentTpl; context: { $implicit: btn }\" />\n </button>\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 {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Signal,\n WritableSignal,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { IRtActionBar } from '../../action-bar-config.interface';\nimport { RtActionBarService } from '../../rt-action-bar.service';\nimport { RtuiActionBarComponent } from '../bar/rtui-action-bar.component';\n\nconst BEM_BLOCK: string = 'rtui-action-bar-container';\n\n/**\n * Сколько панель держится в разметке после закрытия — ровно длительность ухода из стилей.\n *\n * Число живёт здесь, а не только в стилях: разметка снимает панель сама, и, разойдясь с\n * правилом стилей, она обрывает уход на полпути.\n */\nconst LEAVE_DURATION_MS: number = 300;\n\n@Component({\n selector: 'rtui-action-bar-container',\n host: { class: BEM_BLOCK },\n templateUrl: 'rtui-action-bar-container.component.html',\n styleUrls: ['rtui-action-bar-container.component.scss'],\n imports: [RtuiActionBarComponent, BlockDirective, ElemDirective, ModDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiActionBarContainerComponent {\n readonly #actionBarService: RtActionBarService = inject(RtActionBarService);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Уходит ли панель прямо сейчас: разметка держит её, пока правило стилей не доиграет. */\n readonly #leaving: WritableSignal<boolean> = signal(false);\n\n #leaveTimer: ReturnType<typeof setTimeout> | null = null;\n\n public readonly config: Signal<IRtActionBar.Config> = this.#actionBarService.config;\n\n /** Выбрано ли что-нибудь: этим панель и открывается. */\n public readonly opened: Signal<boolean> = computed(() => !!this.config()?.selected);\n\n /** Стоит ли панель в разметке: она остаётся в ней и на время ухода. */\n public readonly shown: Signal<boolean> = computed(() => this.opened() || this.#leaving());\n\n public readonly leaving: Signal<boolean> = this.#leaving.asReadonly();\n\n constructor() {\n effect(() => {\n const opened: boolean = this.opened();\n\n untracked(() => {\n this.#clearLeaveTimer();\n\n if (opened) {\n this.#leaving.set(false);\n\n return;\n }\n\n if (!this.#leaving() && this.shown()) {\n this.#startLeaving();\n }\n });\n });\n\n this.#destroyRef.onDestroy(() => this.#clearLeaveTimer());\n }\n\n public closeBar(): void {\n this.#actionBarService.closeActionBar();\n }\n\n /** Панель остаётся в разметке на время ухода и снимается по его концу. */\n #startLeaving(): void {\n this.#leaving.set(true);\n this.#leaveTimer = setTimeout(() => {\n this.#leaving.set(false);\n this.#leaveTimer = null;\n }, LEAVE_DURATION_MS);\n }\n\n #clearLeaveTimer(): void {\n if (this.#leaveTimer !== null) {\n clearTimeout(this.#leaveTimer);\n this.#leaveTimer = null;\n }\n }\n}\n","<ng-container rtBlock=\"rtui-action-bar-container\">\n @if (shown()) {\n <rtui-action-bar rtElem=\"bar\" [rtMod]=\"{ leaving: leaving() }\" [config]=\"config()\" (closeAction)=\"closeBar()\" />\n }\n</ng-container>\n","import { Provider } from '@angular/core';\n\nimport { RtActionBarService } from './action-bar';\nimport { RtAsideService } from './aside';\nimport { IRtUiConfig, RT_UI_CONFIG } from './config';\n\n/**\n * Returns a set of the necessary dependency injection providers for managing the UI.\n *\n * Optionally accepts an application-wide {@link RT_UI_CONFIG UI configuration} with\n * global theme/design defaults and per-component settings:\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtUi({\n * global: { theme: 'auto', design: 'custom' },\n * components: { button: { design: 'material' } },\n * })\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtUi(config?: IRtUiConfig.Config): Provider[] {\n return [RtAsideService, RtActionBarService, { provide: RT_UI_CONFIG, useValue: config ?? {} }];\n}\n","import { ChangeDetectionStrategy, Component, Signal, computed, inject } 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 '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { IRtSnackBar } from './snack-bar-config.interface';\n\nconst BEM_BLOCK: string = 'rtui-snack-bar';\n\n@Component({\n selector: 'rtui-snack-bar',\n host: {\n class: BEM_BLOCK,\n '[style.--rt-snack-bar-progress-duration]': 'progressDuration()',\n },\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\n /** Сколько идёт полоса: то же время, что живёт само сообщение. */\n public readonly progressDuration: Signal<string> = computed(() => `${this.data.duration ?? 0}ms`);\n\n public dismiss(): void {\n this.#snackBarRef.dismissWithAction();\n }\n\n public close(): void {\n this.#snackBarRef.dismiss();\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 rtElem=\"progress\" (animationend)=\"close()\"></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","export enum EInfoBadgeSize {\n LARGE = 'l',\n MEDIUM = 'm',\n SMALL = 's',\n}\n\nexport type TInfoBadgeSizeType = EInfoBadgeSize.LARGE | EInfoBadgeSize.MEDIUM | EInfoBadgeSize.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","import { NgStyle } from '@angular/common';\nimport {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n InputSignal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { EPosition } from '@rt-tools/core';\nimport { TInfoBadgeSizeType, EInfoBadgeSize } from './badge-info-enum';\nimport { TIconSideType } from './icon-side.type';\n\nconst BEM_BLOCK: string = 'rtui-info-badge';\n\n@Component({\n selector: 'rtui-info-badge',\n host: { class: BEM_BLOCK },\n templateUrl: './info-badge.component.html',\n styleUrl: './info-badge.component.scss',\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatTooltip, MatIcon, NgStyle, BlockDirective, ElemDirective, ModDirective],\n})\nexport class RtuiInfoBadgeComponent implements AfterContentChecked {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public size: InputSignal<TInfoBadgeSizeType> = input.required();\n public text: InputSignal<string> = input.required();\n public glyph: InputSignal<string> = input('');\n public iconSide: InputSignal<TIconSideType> = input<TIconSideType>(EPosition.RIGHT);\n public isFontBold: InputSignal<boolean> = input(false);\n public isTitleCollapsed: WritableSignal<boolean> = signal(false);\n public readonly contentRef: Signal<ElementRef<HTMLElement> | undefined> = viewChild('content');\n\n /** Модификаторы блока значка: ставятся директивой, а не строкой в атрибуте. */\n public readonly badgeModifiers: Signal<Record<string, boolean>> = computed(() => ({\n 'size-l': this.size() === EInfoBadgeSize.LARGE,\n 'size-m': this.size() === EInfoBadgeSize.MEDIUM,\n 'size-s': this.size() === EInfoBadgeSize.SMALL,\n bold: this.isFontBold(),\n }));\n\n public get iconStyles(): { [key: string]: string } {\n return {\n order: this.iconSide() === EPosition.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 && element.scrollWidth > element.offsetWidth) {\n this.isTitleCollapsed.set(true);\n }\n }\n}\n","<div\n rtBlock=\"c-info-badge\"\n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"above\"\n [matTooltip]=\"text()\"\n [rtMod]=\"badgeModifiers()\"\n [matTooltipDisabled]=\"!isTitleCollapsed() || narrow()\">\n <div rtElem=\"content\" #content>{{ text() }}</div>\n @if (glyph()) {\n <mat-icon [ngStyle]=\"iconStyles\">{{ glyph() }}</mat-icon>\n }\n</div>\n","export enum EInfoBadgeType {\n SUCCESS = 'success',\n INFO = 'info',\n WARNING = 'warning',\n PRIMARY = 'primary',\n DISABLED = 'disabled',\n}\n\nexport type TInfoBadgeType =\n EInfoBadgeType.SUCCESS | EInfoBadgeType.INFO | EInfoBadgeType.WARNING | EInfoBadgeType.PRIMARY | EInfoBadgeType.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 '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-file-upload';\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: BEM_BLOCK,\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 mat-button color=\"accent\" (click)=\"uploadInput.click()\">Choose file</button>\n</ng-container>\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, BreakpointService, ConcatClassesPipe, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual, transformArrayInput, transformStringInput } from '@rt-tools/utils';\nimport { RtuiDynamicSelectorListActionsComponent } from '../actions/rtui-dynamic-selector-list-actions.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 { RtuiDynamicSelectorsDirective } from '../dynamic-selectors-directive';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\ninterface IFormModel {\n control: FormControl<string[]>;\n controlForUi: FormControl<TNullable<string>>;\n}\n\n/** Directive for row actions located outside a row menu button */\n@Directive({\n selector: '[rtuiDynamicInputAdditionalControlDirective]',\n})\nexport class RtuiDynamicInputAdditionalControlDirective {}\n\nconst BEM_BLOCK: string = 'rtui-dynamic-input';\n\n@Component({\n selector: 'rtui-dynamic-input',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-dynamic-input.component.html',\n styleUrls: ['./rtui-dynamic-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ConcatClassesPipe,\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 BreakpointService,\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<IFormModel> = this.#fb.group<IFormModel>({\n control: this.#fb.nonNullable.control<string[]>([]),\n controlForUi: this.#fb.control<TNullable<string>>(null), // used only for UI\n });\n\n /** Indicates is placeholder shown */\n public isPlaceholderShown: ModelSignal<TNullable<boolean>> = model<TNullable<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<TNullable<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 } else {\n // Строка пуста — ни добавлять, ни снимать нечего.\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 [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\n type=\"button\"\n [class]=\"['rtui-btn', 'rtui-btn-secondary-text'] | concatClasses\"\n (click)=\"showSelectionControl()\">\n {{ buttonTitle() }}\n </button>\n }\n\n <rtui-dynamic-selector-list-actions\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 { 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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformStringInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtuiFileUploadComponent } from '../../file-uploader';\nimport { RtuiSpinnerComponent } from '../../spinner';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nexport type TImageUploadFormat = 'png' | 'jpeg' | 'webp';\n\nconst BEM_BLOCK: string = 'rtui-image-upload';\n\n@Component({\n selector: 'rtui-image-upload',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-image-upload.component.html',\n styleUrls: ['./rtui-image-upload.component.scss'],\n providers: [BreakpointService],\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 ModDirective,\n BlockDirective,\n RtuiSpinnerComponent,\n RtuiFileUploadComponent,\n RtIconOutlinedDirective,\n ],\n})\nexport class RtuiImageUploadComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #documentRef: Document = inject(DOCUMENT);\n\n readonly #formats: Record<string, TImageUploadFormat> = {\n ['png']: 'png',\n ['jpg']: 'jpeg',\n ['jpeg']: 'jpeg',\n ['webp']: 'webp',\n };\n readonly #originalMimeType: WritableSignal<string | null> = signal(null);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n protected readonly imageFormat: Signal<TImageUploadFormat> = computed((): TImageUploadFormat => {\n const type: TNullable<string> = this.#originalMimeType();\n return this.#formats[type?.toLowerCase() || ''] || 'png';\n });\n\n public imageUrl: ModelSignal<TNullable<string>> = model.required<TNullable<string>>();\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<TNullable<File>> = signal(null);\n public tempImage: WritableSignal<TNullable<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 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]=\"narrow() || !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]=\"narrow()\"\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","export enum ERtTheme {\n LIGHT = 'light',\n DARK = 'dark',\n AUTO = 'auto',\n}\n\nexport type TRtThemeType = `${ERtTheme}`;\n\nexport const RT_THEME_STORAGE_KEY: string = 'rt-theme';\nexport const RT_DARK_CLASS: string = 'rt-dark';\nexport const RT_THEME_AUTO_CLASS: string = 'rt-theme-auto';\nexport const RT_THEME_ATTRIBUTE: string = 'data-rt-theme';\n\n/**\n * Accent roles whose `--rt-color-{role}-{0..100}` indirection rows a custom\n * color scheme may override. The semantic accent tier\n * (`--rt-bg/text/icon/border-accent-*`) derives entirely from these rows.\n */\nexport enum ERtAccentRole {\n PRIMARY = 'primary',\n INFO = 'info',\n SUCCESS = 'success',\n WARNING = 'warning',\n DANGER = 'danger',\n BRAND = 'brand',\n}\n\nexport type TRtAccentRole = `${ERtAccentRole}`;\n\n/**\n * A brand palette: per accent role, a tonal ramp mapping tone step (0–100)\n * to a CSS color. One ramp serves both light and dark (the mode picks the tone).\n * Partial ramps are allowed — unset tones keep the rt-tools defaults.\n *\n * @example\n * const teal: TRtColorSchemeRamp = {\n * primary: { 20: '#b3e3e1', 40: '#5cb8b5', 60: '#1a9d99', 100: '#008582' },\n * brand: { 20: '#e8e8e8', 100: '#008582' },\n * };\n */\nexport type TRtColorSchemeRamp = Partial<Record<TRtAccentRole, Record<number, string>>>;\n\n/** `'default'`/`null` clears the active scheme (back to the rt-tools palette). */\nexport const RT_DEFAULT_SCHEME: string = 'default';\nexport const RT_COLOR_SCHEME_STORAGE_KEY: string = 'rt-color-scheme';\nexport const RT_SCHEME_ATTRIBUTE: string = 'data-rt-scheme';\n","import { DOCUMENT } from '@angular/common';\nimport { effect, inject, Injectable, Signal, signal, WritableSignal } from '@angular/core';\n\nimport { LOCAL_STORAGE, PlatformService } from '@rt-tools/core';\n\nimport { IRtUiConfig, RT_UI_CONFIG } from '../config';\nimport {\n ERtAccentRole,\n RT_COLOR_SCHEME_STORAGE_KEY,\n RT_DARK_CLASS,\n RT_DEFAULT_SCHEME,\n RT_SCHEME_ATTRIBUTE,\n RT_THEME_AUTO_CLASS,\n ERtTheme,\n RT_THEME_STORAGE_KEY,\n TRtColorSchemeRamp,\n TRtThemeType,\n} from './rtui-theme.types';\n\n/**\n * Global theme + color-scheme switcher for the rt-tools design tokens.\n *\n * **Theme** (`light`/`dark`/`auto`): applies `.rt-dark` / `.rt-theme-auto` to\n * `<html>`; semantic tokens (`--rt-*`) adapt through `color-scheme` + `light-dark()`.\n * Persisted to localStorage (`rt-theme`). `auto` follows the OS preference.\n *\n * **Color scheme** (brand palette): toggles `data-rt-scheme=\"<name>\"` on `<html>`,\n * which activates a `[data-rt-scheme]` block (emitted by the `rt.color-scheme` Sass\n * mixin or injected at runtime via {@link registerColorScheme}). It overrides only\n * the accent-role rows `--rt-color-{role}-{N}`, so the whole accent layer recolors\n * while semantic token names stay stable. Orthogonal to light/dark; persisted to\n * localStorage (`rt-color-scheme`).\n */\n@Injectable({ providedIn: 'root' })\nexport class RtThemeService {\n readonly #document: Document = inject(DOCUMENT);\n readonly #platformService: PlatformService = inject(PlatformService);\n // falls back to the native localStorage when the app does not call provideRtStorage()\n readonly #storage: Storage | null = inject(LOCAL_STORAGE, { optional: true }) ?? this.#document.defaultView?.localStorage ?? null;\n // app-wide defaults (provideRtUi(config)); a persisted user choice always wins over them\n readonly #config: IRtUiConfig.Config = inject(RT_UI_CONFIG);\n\n readonly #theme: WritableSignal<TRtThemeType> = signal<TRtThemeType>(this.#restore());\n readonly #colorScheme: WritableSignal<string | null> = signal<string | null>(this.#restoreScheme());\n\n public readonly theme: Signal<TRtThemeType> = this.#theme.asReadonly();\n public readonly colorScheme: Signal<string | null> = this.#colorScheme.asReadonly();\n\n constructor() {\n effect((): void => {\n this.#apply(this.#theme());\n });\n\n effect((): void => {\n this.#applyScheme(this.#colorScheme());\n });\n }\n\n public setTheme(theme: TRtThemeType): void {\n this.#theme.set(theme);\n\n if (this.#platformService.isPlatformBrowser && this.#storage) {\n this.#storage.setItem(RT_THEME_STORAGE_KEY, theme);\n }\n }\n\n /** Toggles between light and dark (auto resolves to its opposite visual state). */\n public toggle(): void {\n this.setTheme(this.#isDarkApplied() ? ERtTheme.LIGHT : ERtTheme.DARK);\n }\n\n /**\n * Activates a registered color scheme by name, or clears it with `null`/`'default'`.\n * Orthogonal to the light/dark theme; persisted to localStorage.\n */\n public setColorScheme(name: string | null): void {\n const normalized: string | null = !name || name === RT_DEFAULT_SCHEME ? null : name;\n this.#colorScheme.set(normalized);\n\n if (this.#platformService.isPlatformBrowser && this.#storage) {\n if (normalized) {\n this.#storage.setItem(RT_COLOR_SCHEME_STORAGE_KEY, normalized);\n } else {\n this.#storage.removeItem(RT_COLOR_SCHEME_STORAGE_KEY);\n }\n }\n }\n\n /**\n * Injects (or replaces) a color scheme's `[data-rt-scheme]` block at runtime —\n * the JS twin of the `rt.color-scheme` Sass mixin. Browser-only (no-op on server;\n * for SSR/brand-critical schemes prefer the Sass path). Does not activate the\n * scheme — call {@link setColorScheme} afterwards.\n */\n public registerColorScheme(name: string, ramp: TRtColorSchemeRamp): void {\n this.#validateRamp(name, ramp);\n\n if (!this.#platformService.isPlatformBrowser) {\n return;\n }\n\n const id: string = `rt-color-scheme-${name}`;\n const existing: HTMLElement | null = this.#document.getElementById(id);\n const style: HTMLStyleElement = (existing as HTMLStyleElement | null) ?? this.#document.createElement('style');\n\n style.id = id;\n style.textContent = this.#buildSchemeCss(name, ramp);\n\n if (!existing) {\n this.#document.head.appendChild(style);\n }\n }\n\n #restore(): TRtThemeType {\n const fallback: TRtThemeType = this.#config.global?.theme ?? ERtTheme.LIGHT;\n\n if (!this.#platformService.isPlatformBrowser || !this.#storage) {\n return fallback;\n }\n\n const stored: string | null = this.#storage.getItem(RT_THEME_STORAGE_KEY);\n\n return Object.values(ERtTheme).includes(stored as ERtTheme) ? (stored as TRtThemeType) : fallback;\n }\n\n #restoreScheme(): string | null {\n const fallback: string | null = this.#config.global?.colorScheme ?? null;\n\n if (!this.#platformService.isPlatformBrowser || !this.#storage) {\n return fallback;\n }\n\n const stored: string | null = this.#storage.getItem(RT_COLOR_SCHEME_STORAGE_KEY);\n\n return stored && stored !== RT_DEFAULT_SCHEME ? stored : fallback;\n }\n\n #apply(theme: TRtThemeType): void {\n if (!this.#platformService.isPlatformBrowser) {\n return;\n }\n\n const classList: DOMTokenList = this.#document.documentElement.classList;\n\n classList.toggle(RT_DARK_CLASS, theme === ERtTheme.DARK);\n classList.toggle(RT_THEME_AUTO_CLASS, theme === ERtTheme.AUTO);\n }\n\n #applyScheme(name: string | null): void {\n if (!this.#platformService.isPlatformBrowser) {\n return;\n }\n\n const root: HTMLElement = this.#document.documentElement;\n\n if (name) {\n root.setAttribute(RT_SCHEME_ATTRIBUTE, name);\n } else {\n root.removeAttribute(RT_SCHEME_ATTRIBUTE);\n }\n }\n\n /**\n * Validates a ramp the same way the `rt.color-scheme` Sass mixin does — unknown\n * role or out-of-range tone (must be an integer 0–100) throws. Keeps the JS twin\n * at parity with the build-time generator instead of silently emitting bad rows.\n */\n #validateRamp(name: string, ramp: TRtColorSchemeRamp): void {\n if (!name || name === RT_DEFAULT_SCHEME) {\n throw new Error(`registerColorScheme: name must be a non-empty string other than '${RT_DEFAULT_SCHEME}'.`);\n }\n\n const roles: string[] = Object.values(ERtAccentRole);\n\n for (const role of Object.keys(ramp)) {\n if (!roles.includes(role)) {\n throw new Error(`registerColorScheme(\"${name}\"): unknown role \"${role}\". Allowed roles: ${roles.join(', ')}.`);\n }\n\n for (const tone of Object.keys(ramp[role as ERtAccentRole] ?? {})) {\n const step: number = Number(tone);\n\n if (!Number.isInteger(step) || step < 0 || step > 100) {\n throw new Error(`registerColorScheme(\"${name}\"): role \"${role}\" tone \"${tone}\" must be an integer 0–100.`);\n }\n }\n }\n }\n\n /** Builds the `:root[data-rt-scheme=\"<name>\"] { --rt-color-{role}-{N}: … }` block (mirrors the Sass mixin). */\n #buildSchemeCss(name: string, ramp: TRtColorSchemeRamp): string {\n const declarations: string = Object.entries(ramp)\n .flatMap(([role, tones]: [string, Record<number, string> | undefined]): string[] =>\n Object.entries(tones ?? {}).map(([tone, value]: [string, string]): string => `--rt-color-${role}-${tone}:${value};`)\n )\n .join('');\n\n return `:root[${RT_SCHEME_ATTRIBUTE}=\"${name}\"]{${declarations}}`;\n }\n\n #isDarkApplied(): boolean {\n if (this.#theme() === ERtTheme.AUTO) {\n return this.#platformService.isPlatformBrowser && this.#document.defaultView\n ? this.#document.defaultView.matchMedia('(prefers-color-scheme: dark)').matches\n : false;\n }\n\n return this.#theme() === ERtTheme.DARK;\n }\n}\n","import { Directive, input, InputSignal } from '@angular/core';\n\nimport { TRtThemeType } from './rtui-theme.types';\n\n/**\n * Local theme context (GMT `data-theme` analogue).\n *\n * Sets `data-rt-theme` on the host, re-scoping all adaptive `--rt-*` tokens\n * inside the subtree through `color-scheme` + `light-dark()`:\n *\n * ```html\n * <!-- dark promo card inside a light page -->\n * <section [rtTheme]=\"'dark'\">…</section>\n * ```\n *\n * Note: `color` is inherited as a resolved value — re-apply text tokens\n * on elements inside the context (e.g. `color: var(--rt-text-base-primary)`).\n */\n@Directive({\n standalone: true,\n selector: '[rtTheme]',\n host: {\n '[attr.data-rt-theme]': 'rtTheme() || null',\n },\n})\nexport class RtThemeDirective {\n public readonly rtTheme: InputSignal<TRtThemeType | ''> = input<TRtThemeType | ''>('');\n}\n","/**\n * Public API Surface of rt-tools\n */\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/icon';\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/config';\nexport * from './lib/ui-kit/snack-bar';\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';\nexport * from './lib/ui-kit/theme';\nexport * from './lib/ui-kit/tooltip';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BEM_BLOCK","i1","i2","MatFormField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit.mjs","sources":["../../../projects/ui-kit/src/lib/ui-kit/modal/modal.component.ts","../../../projects/ui-kit/src/lib/ui-kit/modal/modal.component.html","../../../projects/ui-kit/src/lib/ui-kit/modal/modal.types.ts","../../../projects/ui-kit/src/lib/ui-kit/modal/modal.service.ts","../../../projects/ui-kit/src/lib/ui-kit/scrollable/scrollable-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/scrollable/scrollable-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/side-menu/side-menu.types.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/side-menu.logic.ts","../../../projects/ui-kit/src/lib/ui-kit/config/rt-ui-config.ts","../../../projects/ui-kit/src/lib/ui-kit/icon/rtui-icon.component.ts","../../../projects/ui-kit/src/lib/ui-kit/icon/rtui-icon.component.html","../../../projects/ui-kit/src/lib/ui-kit/spinner/spinner.component.ts","../../../projects/ui-kit/src/lib/ui-kit/spinner/spinner.component.html","../../../projects/ui-kit/src/lib/ui-kit/buttons/unified-button/rtui-button.component.ts","../../../projects/ui-kit/src/lib/ui-kit/buttons/unified-button/rtui-button.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/clear-search-button/rtui-clear-button.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/clear-search-button/rtui-clear-button.component.html","../../../projects/ui-kit/src/lib/ui-kit/tooltip/hide-tooltip.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu-sub-item/sub-menu-title-parts.pipe.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.html","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.ts","../../../projects/ui-kit/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/aside.types.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/aside.enums.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/panel/aside-panel.component.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/panel/aside-panel.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/aside.service.ts","../../../projects/ui-kit/src/lib/ui-kit/toolbar/toolbar.component.ts","../../../projects/ui-kit/src/lib/ui-kit/toolbar/toolbar.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.html","../../../projects/ui-kit/src/lib/ui-kit/aside/components/container/aside-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/aside/components/container/aside-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/buttons/multi-button/rtui-multi-button.component.ts","../../../projects/ui-kit/src/lib/ui-kit/buttons/multi-button/rtui-multi-button.component.html","../../../projects/ui-kit/src/lib/ui-kit/header/header.component.ts","../../../projects/ui-kit/src/lib/ui-kit/header/header.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-column.interface.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-component.interface.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/compare-prop-names.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-config.service.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-cell/table-header-cell.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-cell/table-header-cell.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-filter-cell/table-header-filter-cell.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-header-filter-cell/table-header-filter-cell.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-stop-row-click-attribute.const.ts","../../../projects/ui-kit/src/lib/ui-kit/table/directives/rtui-table-row-click-directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table/rtui-table.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table/rtui-table.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/default-pagination.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/actions/rtui-dynamic-selector-list-actions.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/actions/rtui-dynamic-selector-list-actions.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-selectors-directive.ts","../../../projects/ui-kit/src/lib/ui-kit/toggle/toggle-size.type.enum.ts","../../../projects/ui-kit/src/lib/ui-kit/toggle/rtui-toggle.component.ts","../../../projects/ui-kit/src/lib/ui-kit/toggle/rtui-toggle.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/multi-selector-popup/rtui-multi-selector-popup.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/multi-selector-popup/rtui-multi-selector-popup.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/placeholder/rtui-dynamic-selector-placeholder.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/placeholder/rtui-dynamic-selector-placeholder.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/selected-list/rtui-dynamic-selector-selected-list.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/selected-list/rtui-dynamic-selector-selected-list.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-config-aside/rt-table-config-aside.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-config-aside/rt-table-config-aside.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-container/table-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/components/table-container/table-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/dynamic-list.component.ts","../../../projects/ui-kit/src/lib/ui-kit/table/dynamic-list.component.html","../../../projects/ui-kit/src/lib/ui-kit/table/util/common-selectors.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/dynamic-list-selectors.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/table-selectors.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/table/util/index.ts","../../../projects/ui-kit/src/lib/ui-kit/table/directives/rtui-stop-table-row-click.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/popover/rtui-popover-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/popover/rtui-popover-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/popover/rt-popover.directive.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.html","../../../projects/ui-kit/src/lib/ui-kit/action-bar/rt-action-bar.service.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/container/rtui-action-bar-container.component.ts","../../../projects/ui-kit/src/lib/ui-kit/action-bar/components/container/rtui-action-bar-container.component.html","../../../projects/ui-kit/src/lib/ui-kit/providers.ts","../../../projects/ui-kit/src/lib/ui-kit/snack-bar/snack-bar.compontent.ts","../../../projects/ui-kit/src/lib/ui-kit/snack-bar/snack-bar.component.html","../../../projects/ui-kit/src/lib/ui-kit/snack-bar/rt-snack-bar.service.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/badge-info-enum.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/calculate-text-color-based-on-back.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/info-badge.component.ts","../../../projects/ui-kit/src/lib/ui-kit/info-badge/info-badge.component.html","../../../projects/ui-kit/src/lib/ui-kit/info-badge/info-badge-types.enum.ts","../../../projects/ui-kit/src/lib/ui-kit/file-uploader/rtui-file-upload.component.ts","../../../projects/ui-kit/src/lib/ui-kit/file-uploader/rtui-file-upload.component.html","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-input/rtui-dynamic-input.component.ts","../../../projects/ui-kit/src/lib/ui-kit/dynamic-selectors/components/dynamic-input/rtui-dynamic-input.component.html","../../../projects/ui-kit/src/lib/ui-kit/image-uploader/image-uploader/rtui-image-upload.component.ts","../../../projects/ui-kit/src/lib/ui-kit/image-uploader/image-uploader/rtui-image-upload.component.html","../../../projects/ui-kit/src/lib/ui-kit/theme/rtui-theme.types.ts","../../../projects/ui-kit/src/lib/ui-kit/theme/rtui-theme.service.ts","../../../projects/ui-kit/src/lib/ui-kit/theme/rtui-theme.directive.ts","../../../projects/ui-kit/src/public-api.ts","../../../projects/ui-kit/src/rt-tools-ui-kit.ts"],"sourcesContent":["import { 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, ConcatClassesPipe, ElemDirective } from '@rt-tools/core';\nimport { checkIsMatchingValues, SanitizePipe } from '@rt-tools/core';\nimport { IModal } from './modal.types';\n\nconst BEM_BLOCK: string = 'rtui-modal';\n\n@Component({\n selector: BEM_BLOCK,\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: BEM_BLOCK },\n imports: [\n NgStyle,\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 ConcatClassesPipe,\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 = BEM_BLOCK;\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 [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 [class]=\"[button.className] | concatClasses\"\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 { Type } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { Observable } from 'rxjs';\n\nimport { TNullable } from '@rt-tools/utils';\n\n// Modal enums\nexport enum EModalWindowSize {\n SM = '25rem',\n MD = '45rem',\n LG = '65rem',\n FULL = '100%',\n}\n\nexport type TModalWindowSizeType = EModalWindowSize.SM | EModalWindowSize.MD | EModalWindowSize.LG | EModalWindowSize.FULL;\n\n/** Вид кнопки окна — набор Material, перечисленный один раз. */\nexport type TModalButtonAppearance = 'standard' | 'raised' | 'flat' | 'stroked' | 'fab' | 'mini-fab';\n\n// Modal data interfaces\nexport interface IModalIcon {\n value: string;\n style?: { [className: string]: string };\n}\n\nexport interface INameValueType<N = string, V = string> {\n name: N;\n value: V;\n}\n\nexport interface ISelect<T> {\n value: Array<INameValueType<string, T>>;\n label?: string;\n hint?: string;\n}\n\nexport namespace IModal {\n export interface Button<T> {\n text: string;\n color?: ThemePalette;\n value: TNullable<T>;\n appearance?: TModalButtonAppearance;\n validateSelect?: boolean;\n assignSelectedValue?: boolean;\n style?: { [className: string]: string };\n className?: string;\n }\n\n export interface Data<T> {\n buttonsAlign: 'start' | 'center' | 'end';\n buttons: Array<Button<T>>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component?: Type<any>;\n icon?: IModalIcon;\n title?: string;\n text?: string;\n confirmation?: string;\n input?: {\n label: string;\n placeholder: string;\n value: string;\n sample?: string;\n };\n textArea?: {\n value: string;\n placeholder: string;\n };\n select?: ISelect<T>;\n }\n\n export interface DataAnswer<T> {\n value: T;\n message: string;\n }\n\n export type ConfirmResponsePredicate<T> = (answer: TNullable<IModal.DataAnswer<T>>) => boolean;\n\n export interface ConfirmResponse<T> {\n on(predicate: ConfirmResponsePredicate<T>): Observable<TNullable<IModal.DataAnswer<T>>>;\n\n onCancel(cancel?: ConfirmResponsePredicate<T>): Observable<TNullable<IModal.DataAnswer<T>>>;\n\n onConfirm(confirm?: ConfirmResponsePredicate<T>): Observable<TNullable<IModal.DataAnswer<T>>>;\n }\n}\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 { TNullable } from '@rt-tools/utils';\nimport { EModalWindowSize } from './modal.types';\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: EModalWindowSize.MD,\n autoFocus: false,\n closeOnNavigation: true,\n };\n\n public confirm<T>(data: IModal.Data<T>, config?: MatDialogConfig): Observable<TNullable<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<TNullable<IModal.DataAnswer<T>>> = new ReplaySubject<TNullable<IModal.DataAnswer<T>>>(1);\n const result$: Observable<TNullable<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: TNullable<IModal.DataAnswer<T>>) =>\n !(Boolean(answer) && Boolean(answer?.value));\n\n const defaultConfirm: IModal.ConfirmResponsePredicate<T> = (answer: TNullable<IModal.DataAnswer<T>>) =>\n Boolean(answer) && Boolean(answer?.value);\n\n return {\n onCancel: (cancel: IModal.ConfirmResponsePredicate<T> = defaultCancel) =>\n result$.pipe(filter((answer: TNullable<IModal.DataAnswer<T>>) => cancel(answer))),\n onConfirm: (confirm: IModal.ConfirmResponsePredicate<T> = defaultConfirm) =>\n result$.pipe(filter((answer: TNullable<IModal.DataAnswer<T>>) => confirm(answer))),\n on: (predicate: IModal.ConfirmResponsePredicate<T>) =>\n result$.pipe(filter((answer: TNullable<IModal.DataAnswer<T>>) => predicate(answer))),\n };\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n InputSignal,\n signal,\n Signal,\n TemplateRef,\n Type,\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 '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\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\nconst BEM_BLOCK: string = 'rtui-scrollable';\n\n@Component({\n selector: 'rtui-scrollable',\n host: { class: BEM_BLOCK },\n templateUrl: './scrollable-container.component.html',\n styleUrls: ['./scrollable-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [BlockDirective, ElemDirective, NgTemplateOutlet, MatIcon, MatTooltip],\n})\nexport class RtuiScrollableContainerComponent {\n /** Подпись значка. Словаря у кита нет, и подпись зашита по-английски, как соседние. */\n protected readonly scrollHintLabel: string = 'Scroll down';\n\n protected readonly bodyRef: Signal<TNullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('body');\n protected readonly footerRef: Signal<TNullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('foot');\n\n /**\n * Ниже окна области ещё есть содержимое. Считается по трём числам самого узла, а не по числу\n * пунктов: область не знает, что ей подали, и высота строки у каждого потребителя своя.\n */\n protected readonly hasMoreBelow: WritableSignal<boolean> = signal(false);\n\n /**\n * На сколько полоса растушёвки поднята над низом области. Она обязана кончиться там, где\n * начинается содержимое подвала: разделитель потребитель рисует первой его строкой, и полоса,\n * оборвавшаяся выше, оставляет до него чистый фон. Считается замером — верхний отступ подвала\n * потребитель пишет как хочет, и вычесть его в стилях не из чего. Без подвала полоса стоит у\n * самого низа.\n */\n protected readonly hintBottom: WritableSignal<number> = signal(0);\n\n public readonly headerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerHeaderDirective, {\n read: TemplateRef,\n });\n public readonly contentTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerContentDirective, {\n read: TemplateRef,\n });\n public readonly footerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiScrollableContainerFooterDirective, {\n read: TemplateRef,\n });\n\n /**\n * Признак того, что снизу осталось непоказанное. Выключен по умолчанию: область рисуют\n * десятки экранов, и признак, поставленный безусловно, сдвинул бы вид каждому из них.\n */\n public readonly isScrollHintShown: InputSignal<boolean> = input<boolean>(false);\n\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Наблюдатель за размером тела. Событие прокрутки приходит только после движения руки, а\n * список не влезает уже в первую минуту показа: без наблюдателя признак появлялся бы у того,\n * кто и так догадался прокрутить, и молчал у того, кому он нужен.\n */\n #sizeWatch: TNullable<ResizeObserver> = null;\n\n constructor() {\n afterRenderEffect((): void => {\n const body: TNullable<ElementRef<HTMLElement>> = this.bodyRef();\n\n this.onBodyScroll();\n\n if (!body || this.#sizeWatch) {\n return;\n }\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.#sizeWatch = new ResizeObserver((): void => this.onBodyScroll());\n this.#sizeWatch.observe(body.nativeElement);\n\n const footer: TNullable<ElementRef<HTMLElement>> = this.footerRef();\n\n // Подвал наблюдается наравне с телом: его высота меняется своим содержимым, а от неё\n // считается подъём полосы. Не наблюдавшаяся, она осталась бы стоять по прежней высоте\n // подвала и наехала бы на его первую строку.\n if (footer) {\n this.#sizeWatch.observe(footer.nativeElement);\n }\n });\n\n this.#destroyRef.onDestroy((): void => {\n this.#sizeWatch?.disconnect();\n this.#sizeWatch = null;\n });\n }\n\n /**\n * Нажатие на значок уводит список к самому низу. Нажатие останавливается здесь и в список под\n * значком не уходит: под ним живой пункт, и человек, целившийся в подсказку, уехал бы на\n * чужой экран.\n */\n public onScrollHintClick(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n const body: TNullable<ElementRef<HTMLElement>> = this.bodyRef();\n\n if (!body) {\n return;\n }\n\n body.nativeElement.scrollTo({ top: body.nativeElement.scrollHeight, behavior: 'smooth' });\n }\n\n public onBodyScroll(): void {\n this.#measureHintBottom();\n\n const body: TNullable<ElementRef<HTMLElement>> = this.bodyRef();\n\n if (!body) {\n this.hasMoreBelow.set(false);\n\n return;\n }\n\n const node: HTMLElement = body.nativeElement;\n\n // Целый пиксель запаса: дробная высота строки оставляет остаток, при котором прокрутка\n // уже в самом низу, а разность всё ещё больше нуля — признак висел бы навсегда.\n this.hasMoreBelow.set(node.scrollHeight - node.scrollTop - node.clientHeight > 1);\n }\n\n /**\n * Подъём полосы над низом области: высота подвала без его верхнего отступа. Ровно на этом\n * месте начинается содержимое подвала, и до него полоса и должна доходить.\n */\n #measureHintBottom(): void {\n const footer: TNullable<ElementRef<HTMLElement>> = this.footerRef();\n\n if (!footer) {\n this.hintBottom.set(0);\n\n return;\n }\n\n const node: HTMLElement = footer.nativeElement;\n const paddingTop: number = parseFloat(getComputedStyle(node).paddingTop) || 0;\n\n this.hintBottom.set(Math.max(node.offsetHeight - paddingTop, 0));\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 #body rtElem=\"content\" (scroll)=\"onBodyScroll()\">\n <ng-container *ngTemplateOutlet=\"contentTpl() ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div #foot rtElem=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </div>\n }\n\n <!--\n Признак того, что снизу осталось непоказанное: край списка, ровно обрезанный подвалом,\n читается как конец списка, и человек считает, что пункт пропал. Полоса живёт на хосте, а\n не внутри тела: тело обрезает всё по своему краю, и полоса обрывалась на верхнем отступе\n подвала — между ней и разделителем, который потребитель рисует первой строкой подвала,\n оставалась полоса чистого фона. Отступ этот берётся замером: потребитель пишет его как\n хочет — одним значением, двумя, четырьмя, — и вычесть его в стилях не из чего.\n -->\n @if (isScrollHintShown() && hasMoreBelow()) {\n <div rtElem=\"scroll-hint\" qa-dataid=\"scrollable-scroll-hint\" [attr.aria-label]=\"scrollHintLabel\" [style.bottom.px]=\"hintBottom()\">\n <mat-icon\n rtElem=\"scroll-hint-icon\"\n role=\"button\"\n tabindex=\"0\"\n matTooltipPosition=\"above\"\n [matTooltip]=\"scrollHintLabel\"\n (click)=\"onScrollHintClick($event)\"\n (keydown.enter)=\"onScrollHintClick($event)\">\n keyboard_arrow_down\n </mat-icon>\n </div>\n }\n</ng-container>\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Меню, в котором стоит подпункт. Токен вместо самого компонента: подпункт брал его классом, а\n * меню объявляет подпункт в своих импортах — получался круг «меню → подпункт → меню».\n *\n * Подпункту нужно от меню два значения: какие пункты сейчас раскрыты и что набрано в поиске —\n * второе затем, чтобы отметить в подписи то, чем она совпала.\n */\nexport interface IRtuiSideMenuHost {\n readonly activeMenuIds: Signal<Array<string | number>>;\n readonly subMenuQuery: Signal<string>;\n}\n\nexport const RTUI_SIDE_MENU: InjectionToken<IRtuiSideMenuHost> = new InjectionToken<IRtuiSideMenuHost>('RTUI_SIDE_MENU');\n\nexport namespace ISideMenu {\n export type ItemData = string | number | object;\n\n /**\n * Чем подменю держится открытым: наведением, как было всегда, или закреплением — тогда оно\n * стоит открытым, пока человек сам его не свернёт.\n */\n export type SubMenuMode = 'hover' | 'pinned';\n\n export interface Item {\n id: string | number;\n\n icon?: string;\n name?: string;\n link?: string;\n submenu?: Item[];\n iconButton?: {\n icon: string;\n data?: ItemData;\n };\n }\n}\n","import { ISideMenu } from './side-menu.types';\n\n/**\n * Отбор пунктов подменю по подстроке подписи.\n *\n * Считается здесь, а не в шаблоне: разметка меню держит две раскладки разом, и ветвление отбора\n * в ней читается хуже вызова.\n */\nexport function filterSubMenuItems(items: ReadonlyArray<ISideMenu.Item>, query: string): ISideMenu.Item[] {\n const needle: string = query.trim().toLowerCase();\n\n if (needle === '') {\n return [...items];\n }\n\n return items.filter((item: ISideMenu.Item): boolean => !!item.name?.toLowerCase().includes(needle));\n}\n\n/**\n * Ключ, под которым хранится выбор человека.\n *\n * Назван приставкой кита: хранилище браузера общее на весь адрес, и короткое имя вроде `mode`\n * столкнулось бы с ключом потребителя молча — оба пишут в одно место.\n */\nexport const SUB_MENU_MODE_KEY: string = 'rtui-side-menu-sub-menu-mode';\n\n/**\n * Чтение сохранённого выбора.\n *\n * Мода подменю — настройка человека, а не состояние экрана: она обязана переживать перезагрузку.\n * Хранит её потребитель — кит не знает, где у приложения лежат настройки человека, — а эти две\n * функции дают ему готовый и одинаковый способ, чтобы ключ не расходился от приложения к\n * приложению.\n *\n * Отказ хранилища работу не останавливает: браузер отдаёт его закрытым в приватном окне и при\n * запрете данных сайта, и упавшее чтение оставило бы человека без меню вовсе. Незнакомое значение\n * читается так же, как пустое, — прежней модой.\n */\nexport function readSubMenuMode(storage: Storage | null): ISideMenu.SubMenuMode {\n if (storage === null) {\n return 'hover';\n }\n\n try {\n return storage.getItem(SUB_MENU_MODE_KEY) === 'pinned' ? 'pinned' : 'hover';\n } catch {\n return 'hover';\n }\n}\n\n/** Запись выбора. Отказ хранилища глушится по той же причине, что и при чтении. */\nexport function writeSubMenuMode(storage: Storage | null, mode: ISideMenu.SubMenuMode): void {\n if (storage === null) {\n return;\n }\n\n try {\n storage.setItem(SUB_MENU_MODE_KEY, mode);\n } catch {\n // хранилище закрыто настройками браузера — выбор просто не переживёт перезагрузку\n }\n}\n\n/** Ключ ширины закреплённого подменю. Назван приставкой кита по той же причине, что и ключ моды. */\nexport const SUB_MENU_WIDTH_KEY: string = 'rtui-side-menu-sub-menu-width';\n\n/**\n * Пределы ширины подменю в пикселях.\n *\n * Взяты половиной и двойным от оформления по умолчанию: уже нижнего не помещается ни одна подпись\n * пункта, шире верхнего подменю закрывает содержимое страницы, ради которого меню и открывали.\n */\nexport const SUB_MENU_WIDTH_MIN: number = 120;\nexport const SUB_MENU_WIDTH_MAX: number = 480;\n\n/** Приведение ширины к пределам. Тянут её мышью, и рука уходит за край экрана раньше, чем за предел. */\nexport function clampSubMenuWidth(width: number): number {\n return Math.min(SUB_MENU_WIDTH_MAX, Math.max(SUB_MENU_WIDTH_MIN, width));\n}\n\n/**\n * Чтение сохранённой ширины.\n *\n * Ширины нет — возвращается пустота, и ширину ставит оформление: своё число здесь подменило бы\n * значение из набора токенов, и правка токена перестала бы что-либо менять.\n *\n * Отказ хранилища и нечисловое значение читаются одинаково — как отсутствие выбора, по той же\n * причине, что и при чтении моды.\n */\nexport function readSubMenuWidth(storage: Storage | null): number | null {\n if (storage === null) {\n return null;\n }\n\n try {\n const stored: string | null = storage.getItem(SUB_MENU_WIDTH_KEY);\n\n if (stored === null || stored.trim() === '') {\n return null;\n }\n\n const width: number = Number(stored);\n\n return Number.isFinite(width) ? clampSubMenuWidth(width) : null;\n } catch {\n return null;\n }\n}\n\n/** Запись ширины. Пишется приведённая: за пределы её уводит и рука, и чужая правка ключа. */\nexport function writeSubMenuWidth(storage: Storage | null, width: number): void {\n if (storage === null) {\n return;\n }\n\n try {\n storage.setItem(SUB_MENU_WIDTH_KEY, String(clampSubMenuWidth(width)));\n } catch {\n // хранилище закрыто настройками браузера — ширина просто не переживёт перезагрузку\n }\n}\n\n/** Кусок подписи: отмеченный — тот, которым она совпала с запросом. */\nexport interface ISubMenuTitlePart {\n text: string;\n matched: boolean;\n}\n\n/**\n * Резка подписи на совпавшие и несовпавшие куски.\n *\n * Отмечается найденное, а не вся подпись: подсвеченная целиком, она говорит ровно то же, что и её\n * присутствие в списке. Отмечаются все вхождения — подпись раздела повторяет слово в себе чаще,\n * чем кажется, и отмеченное одно первое читается как «второго нет».\n *\n * Сравнение регистронезависимое, как и отбор, а куски режутся из оригинала: приведение к нижнему\n * регистру переписало бы чужие названия разделов.\n */\nexport function splitSubMenuTitle(name: string, query: string): ISubMenuTitlePart[] {\n if (name === '') {\n return [];\n }\n\n const needle: string = query.trim().toLowerCase();\n\n if (needle === '') {\n return [{ text: name, matched: false }];\n }\n\n const haystack: string = name.toLowerCase();\n const parts: ISubMenuTitlePart[] = [];\n let from: number = 0;\n\n for (let at: number = haystack.indexOf(needle, from); at !== -1; at = haystack.indexOf(needle, from)) {\n if (at > from) {\n parts.push({ text: name.slice(from, at), matched: false });\n }\n\n parts.push({ text: name.slice(at, at + needle.length), matched: true });\n from = at + needle.length;\n }\n\n if (from < name.length) {\n parts.push({ text: name.slice(from), matched: false });\n }\n\n return parts;\n}\n","import { InjectionToken } from '@angular/core';\nimport type { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport type { IRtuiButton } from '../buttons/unified-button/rtui-button.types';\nimport type { TRtThemeType } from '../theme/rtui-theme.types';\n\n/**\n * Design system a control renders with:\n * - `'custom'` — the rt-tools look (design tokens, pill shapes). The default.\n * - `'material'` — the control renders a NATIVE Angular Material component\n * (e.g. the button pill becomes a real `matButton`), for apps that have not\n * migrated their visual language yet or need to match surrounding Material controls.\n */\nexport type TRtUiDesign = 'material' | 'custom';\n\nexport namespace IRtUiConfig {\n /** Global defaults applied app-wide unless a component-level setting or an input overrides them. */\n export interface Global {\n /** Initial theme used when the user has no persisted preference. */\n theme?: TRtThemeType;\n /** Initial brand color scheme (see `RtThemeService.registerColorScheme`) when none is persisted. */\n colorScheme?: string;\n /** Default design for every design-aware control. */\n design?: TRtUiDesign;\n }\n\n /** Per-instance-overridable defaults for `rtui-button`. */\n export interface Button {\n design?: TRtUiDesign;\n size?: IRtuiButton.Size;\n radius?: IRtuiButton.Radius;\n appearance?: IRtuiButton.Appearance;\n }\n\n /** Per-instance-overridable defaults for the dynamic selectors family. */\n export interface DynamicSelectors {\n /**\n * Appearance every form field of the family renders with.\n *\n * The family nests: a selector holds an input, an input opens a popup, a popup holds a\n * list. Set once here, the look reaches all of them; passed as an input, it has to be\n * repeated at every use, and the one that was missed differs from the rest.\n */\n appearance?: MatFormFieldAppearance;\n }\n\n /** Component-level settings. Each entry overrides `global` for that component only. */\n export interface Components {\n button?: Button;\n dynamicSelectors?: DynamicSelectors;\n }\n\n export interface Config {\n global?: Global;\n components?: Components;\n }\n}\n\n/**\n * Application-wide UI configuration for rt-tools components.\n *\n * Resolution order (most specific wins):\n * 1. the component input on a concrete instance,\n * 2. `components.<name>` in this config,\n * 3. `global` in this config,\n * 4. the library default.\n *\n * Provide it via {@link provideRtUi}:\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtUi({\n * global: { theme: 'auto', design: 'custom' },\n * components: { button: { design: 'material' } },\n * }),\n * ],\n * });\n * ```\n *\n * @publicApi\n */\nexport const RT_UI_CONFIG: InjectionToken<IRtUiConfig.Config> = new InjectionToken<IRtUiConfig.Config>('RT_UI_CONFIG', {\n providedIn: 'root',\n factory: (): IRtUiConfig.Config => ({}),\n});\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { transformStringInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nexport type TRtuiIconSizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | '3xl';\nexport type TRtuiIconThemeType =\n 'inherit' | 'primary' | 'primary-strong' | 'neutral' | 'disabled' | 'muted' | 'white' | 'danger' | 'success';\n\nconst BEM_BLOCK: string = 'rtui-icon';\nconst MATERIAL_SYMBOLS_FONT: string = 'Material Symbols Outlined';\nconst fontLoaded: WritableSignal<boolean> = signal<boolean>(false);\n\n@Component({\n selector: 'rtui-icon',\n templateUrl: './rtui-icon.component.html',\n styleUrl: './rtui-icon.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // material\n MatIcon,\n\n // directives\n RtIconOutlinedDirective,\n ],\n hostDirectives: [\n {\n directive: MatTooltip,\n inputs: ['matTooltip: tooltip', 'matTooltipPosition: tooltipPosition', 'matTooltipDisabled: tooltipDisabled'],\n },\n ],\n host: {\n class: BEM_BLOCK,\n '[class]': 'hostClasses()',\n },\n})\nexport class RtuiIconComponent {\n readonly #document: Document = inject(DOCUMENT);\n\n protected readonly fontLoaded: Signal<boolean> = fontLoaded.asReadonly();\n protected readonly hostClasses: Signal<string> = computed(() => {\n const classes: string[] = [`rtui-icon--size-${this.size()}`, `rtui-icon--theme-${this.theme()}`];\n\n if (this.rotate()) {\n classes.push('rtui-icon--rotate');\n }\n\n if (!this.fontLoaded()) {\n classes.push('rtui-icon--loading');\n }\n\n return classes.join(' ');\n });\n\n public readonly size: InputSignal<TRtuiIconSizeType> = input<TRtuiIconSizeType>('md');\n public readonly theme: InputSignal<TRtuiIconThemeType> = input<TRtuiIconThemeType>('inherit');\n public readonly glyph: InputSignalWithTransform<string, unknown> = input<string, unknown>('', { transform: transformStringInput });\n public readonly outlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly rotate: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n constructor() {\n if (!fontLoaded()) {\n this.#checkFontLoaded();\n }\n }\n\n #checkFontLoaded(): void {\n const fonts: FontFaceSet = this.#document.fonts;\n\n if (fonts.check(`1rem \"${MATERIAL_SYMBOLS_FONT}\"`)) {\n fontLoaded.set(true);\n return;\n }\n\n fonts.ready.then(() => {\n fontLoaded.set(true);\n });\n }\n}\n","<mat-icon [rtIconOutlined]=\"outlined()\">\n @if (glyph()) {\n {{ glyph() }}\n } @else {\n <ng-content />\n }\n</mat-icon>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n inject,\n input,\n InputSignalWithTransform,\n numberAttribute,\n OnInit,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-spinner';\n\n@Component({\n selector: 'rtui-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n imports: [MatProgressSpinnerModule, BlockDirective, ElemDirective, ModDirective],\n host: { class: BEM_BLOCK },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiSpinnerComponent implements OnInit {\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #shown: WritableSignal<boolean> = signal(false);\n\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 * Сколько миллисекунд спиннер ждёт, прежде чем стать видимым.\n *\n * Умолчание — ноль: спиннер, вставленный без задержки, ведёт себя как прежде. Ожидание,\n * кончившееся раньше срока, спиннера не показывает вовсе — вспышки на экране не случается.\n */\n public delay: InputSignalWithTransform<number, number> = input<number, number>(0, {\n transform: numberAttribute,\n });\n\n /** Спиннер виден: задержки не назначали или её срок вышел. */\n public readonly visible: Signal<boolean> = this.#shown.asReadonly();\n\n /**\n * Отсчёт начинается на вставке, а не в конструкторе: до первого крючка вход держит своё\n * умолчание, и задержка, названная потребителем, конструктору ещё не видна.\n */\n public ngOnInit(): void {\n const wait: number = this.delay();\n\n if (wait <= 0) {\n this.#shown.set(true);\n\n return;\n }\n\n const timer: ReturnType<typeof setTimeout> = setTimeout(() => this.#shown.set(true), wait);\n\n // Снятый до срока спиннер счётчик за собой убирает: отложенный показ иначе рисовал бы\n // кружок поверх готового экрана.\n this.#destroyRef.onDestroy(() => clearTimeout(timer));\n }\n}\n","@if (visible()) {\n <ng-container rtBlock=\"rtui-spinner\">\n <div rtElem=\"container\" [rtMod]=\"{ 'bgr-color': showBackground() }\">\n <div rtElem=\"wrapper\" [rtMod]=\"{ 'bgr-color': showBox() }\">\n <mat-spinner [diameter]=\"diameter()\" />\n </div>\n </div>\n </ng-container>\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n OutputEmitterRef,\n Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { MatButton, MatButtonAppearance } from '@angular/material/button';\nimport { MatRipple } from '@angular/material/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { transformStringInput } from '@rt-tools/utils';\n\nimport { IRtUiConfig, RT_UI_CONFIG, TRtUiDesign } from '../../config';\nimport { IRtuiButton } from './rtui-button.types';\nimport { RtuiIconComponent, TRtuiIconSizeType } from '../../icon';\nimport { RtuiSpinnerComponent } from '../../spinner';\n\nconst BEM_BLOCK: string = 'rtui-button';\n\n@Component({\n selector: 'rtui-button',\n templateUrl: './rtui-button.component.html',\n styleUrl: './rtui-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // rt-tools\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtuiSpinnerComponent,\n\n // components\n RtuiIconComponent,\n\n // material\n MatButton,\n MatRipple,\n ],\n hostDirectives: [\n {\n directive: MatTooltip,\n inputs: [\n 'matTooltip: tooltip',\n 'matTooltipPosition: tooltipPosition',\n 'matTooltipDisabled: tooltipDisabled',\n 'matTooltipClass: tooltipClass',\n ],\n },\n ],\n host: {\n class: BEM_BLOCK,\n '[class]': 'hostModifiers()',\n '[class.rtui-button-full]': 'fullWidth()',\n },\n})\nexport class RtuiButtonComponent {\n /** App-wide defaults; the resolution order is: instance input → `components.button` → `global` → library default. */\n readonly #config: IRtUiConfig.Config = inject(RT_UI_CONFIG);\n readonly #buttonConfig: IRtUiConfig.Button | undefined = this.#config.components?.button;\n\n /** Design system the button renders with — see {@link TRtUiDesign}. */\n protected readonly resolvedDesign: Signal<TRtUiDesign> = computed(\n () => this.design() ?? this.#buttonConfig?.design ?? this.#config.global?.design ?? 'custom'\n );\n protected readonly resolvedSize: Signal<IRtuiButton.Size> = computed(() => this.size() ?? this.#buttonConfig?.size ?? 'md');\n protected readonly resolvedRadius: Signal<IRtuiButton.Radius> = computed(() => this.radius() ?? this.#buttonConfig?.radius ?? 'full');\n protected readonly resolvedAppearance: Signal<IRtuiButton.Appearance | undefined> = computed(\n () => this.appearance() ?? this.#buttonConfig?.appearance\n );\n /** Native Material button appearance the pill renders with under `design: 'material'`. */\n protected readonly materialAppearance: Signal<MatButtonAppearance> = computed(() => {\n const appearanceMap: Record<IRtuiButton.Appearance, MatButtonAppearance> = {\n solid: 'filled',\n outline: 'outlined',\n light: 'tonal',\n text: 'text',\n };\n return appearanceMap[this.resolvedAppearance() ?? 'solid'];\n });\n protected readonly resolvedIconSize: Signal<TRtuiIconSizeType> = computed(() => {\n const iconSize: TRtuiIconSizeType | undefined = this.iconSize();\n\n if (iconSize) {\n return iconSize;\n }\n\n const sizeMap: Record<IRtuiButton.Size, TRtuiIconSizeType> = {\n xs: 'xs',\n sm: 'sm',\n md: 'sm',\n lg: 'md',\n };\n return sizeMap[this.resolvedSize()];\n });\n protected readonly spinnerSize: Signal<number> = computed(() => {\n const sizeMap: Record<IRtuiButton.Size, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n };\n return this.spinnerDiameter() ?? sizeMap[this.resolvedSize()];\n });\n protected readonly modifiers: Signal<Record<string, boolean>> = computed(() => ({\n [`type-${this.type()}`]: true,\n [`design-${this.resolvedDesign()}`]: true,\n [`variant-${this.variant()}`]: true,\n [`size-${this.resolvedSize()}`]: true,\n [`radius-${this.resolvedRadius()}`]: true,\n [`appearance-${this.resolvedAppearance()}`]: !!this.resolvedAppearance(),\n loading: this.loading(),\n disabled: this.disabled(),\n }));\n /**\n * Те же модификаторы строкой — они висят на хосте, потому что описывают блок целиком.\n * Директива модификатора сюда не дотянется: хост объявлен декоратором, а не разметкой.\n */\n protected readonly hostModifiers: Signal<string> = computed(() =>\n Object.entries(this.modifiers())\n .filter(([, isOn]: [string, boolean]) => isOn)\n .map(([name]: [string, boolean]) => `${BEM_BLOCK}--${name}`)\n .join(' ')\n );\n\n public readonly type: InputSignal<IRtuiButton.Type> = input<IRtuiButton.Type>('icon');\n public readonly design: InputSignal<TRtUiDesign | undefined> = input<TRtUiDesign>();\n public readonly variant: InputSignal<IRtuiButton.Variant> = input<IRtuiButton.Variant>('default');\n public readonly appearance: InputSignal<IRtuiButton.Appearance | undefined> = input<IRtuiButton.Appearance>();\n public readonly size: InputSignal<IRtuiButton.Size | undefined> = input<IRtuiButton.Size>();\n public readonly radius: InputSignal<IRtuiButton.Radius | undefined> = input<IRtuiButton.Radius>();\n public readonly icon: InputSignalWithTransform<string, unknown> = input<string, unknown>('', { transform: transformStringInput });\n public readonly iconPosition: InputSignal<IRtuiButton.IconPosition> = input<IRtuiButton.IconPosition>('start');\n public readonly iconSize: InputSignal<TRtuiIconSizeType | undefined> = input<TRtuiIconSizeType>();\n public readonly text: InputSignalWithTransform<string, unknown> = input<string, unknown>('', { transform: transformStringInput });\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly outlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly fullWidth: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly spinnerDiameter: InputSignal<number | undefined> = input<number>();\n\n public readonly clicked: OutputEmitterRef<void> = output<void>();\n\n protected onClick(): void {\n if (!this.loading() && !this.disabled()) {\n this.clicked.emit();\n }\n }\n}\n","<!-- Projected content is declared once and outlet-rendered per design branch: duplicating\n <ng-content /> across @if branches assigns the projected nodes to the first slot only. -->\n<ng-template #projectedContent>\n <ng-content />\n</ng-template>\n\n<!-- Блок объявлен контейнером: класс он не ставит (узел комментария), а только даёт имя\n потомкам. Сам класс блока и его модификаторы висят на хосте — см. `host` в компоненте. -->\n<ng-container rtBlock=\"rtui-button\">\n @switch (type()) {\n @case ('pill') {\n @if (resolvedDesign() === 'material') {\n <!-- design: material — a native Material button; its look is owned by the Material theme -->\n <button\n type=\"button\"\n rtElem=\"material\"\n [matButton]=\"materialAppearance()\"\n [rtMod]=\"{ danger: variant() === 'danger' }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onClick()\">\n @if (loading()) {\n <rtui-spinner [diameter]=\"spinnerSize()\" [showBox]=\"false\" />\n } @else {\n @if (icon() && iconPosition() === 'start') {\n <rtui-icon matButtonIcon [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n @if (text()) {\n <span>{{ text() }}</span>\n }\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n @if (icon() && iconPosition() === 'end') {\n <rtui-icon matButtonIcon iconPositionEnd [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n }\n </button>\n } @else {\n <button\n type=\"button\"\n rtElem=\"control\"\n matRipple\n [matRippleDisabled]=\"disabled() || loading()\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onClick()\">\n @if (loading()) {\n <rtui-spinner rtElem=\"spinner\" [diameter]=\"spinnerSize()\" [showBox]=\"false\" />\n } @else {\n @if (icon() && iconPosition() === 'start') {\n <rtui-icon rtElem=\"icon\" [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n @if (text()) {\n <span rtElem=\"text\">{{ text() }}</span>\n }\n <ng-container [ngTemplateOutlet]=\"projectedContent\" />\n @if (icon() && iconPosition() === 'end') {\n <rtui-icon rtElem=\"icon\" [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n }\n </button>\n }\n }\n @default {\n <button\n type=\"button\"\n rtElem=\"control\"\n matRipple\n [matRippleDisabled]=\"disabled() || loading()\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onClick()\">\n @if (loading()) {\n <rtui-spinner rtElem=\"spinner\" [diameter]=\"spinnerSize()\" [showBox]=\"false\" />\n } @else {\n <rtui-icon rtElem=\"icon\" [glyph]=\"icon()\" [size]=\"resolvedIconSize()\" [outlined]=\"outlined()\" />\n }\n </button>\n }\n }\n</ng-container>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isString } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-clear-button';\n\n@Component({\n selector: 'rtui-clear-button',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-clear-button.component.html',\n styleUrls: ['./rtui-clear-button.component.scss'],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // Material\n MatIcon,\n MatIconButton,\n MatTooltip,\n\n // BEM\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n})\nexport class RtuiClearButtonComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n readonly #defaultTooltipPosition: TooltipPosition = 'above';\n\n public isButtonShown: InputSignalWithTransform<TNullable<boolean>, boolean> = input<TNullable<boolean>, boolean>(true, {\n transform: booleanAttribute,\n });\n public tooltip: InputSignalWithTransform<TNullable<string>, string> = input<TNullable<string>, string>(null, {\n transform: (value: TNullable<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]=\"narrow()\"\n (keydown)=\"onKeydown()\"\n (click)=\"onClick()\">\n <mat-icon rtElem=\"icon\">close</mat-icon>\n</button>\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 { Pipe, PipeTransform } from '@angular/core';\n\nimport { ISubMenuTitlePart, splitSubMenuTitle } from '../side-menu.logic';\n\n/**\n * Резка подписи подпункта на совпавшие с запросом куски.\n *\n * Пайп, а не метод компонента: тот же шаблон рисует и вложенные пункты, у которых своя подпись,\n * не входная, — а вызов метода в разметке пересчитывается на каждом круге проверки.\n */\n@Pipe({\n name: 'rtuiSubMenuTitleParts',\n})\nexport class RtuiSubMenuTitlePartsPipe implements PipeTransform {\n public transform(name: string, query: string): ISubMenuTitlePart[] {\n return splitSubMenuTitle(name, query);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtHideTooltipDirective } from '../../tooltip';\nimport { RtuiSubMenuTitlePartsPipe } from './sub-menu-title-parts.pipe';\nimport { IRtuiSideMenuHost, ISideMenu, RTUI_SIDE_MENU } from '../side-menu.types';\n\nconst BEM_BLOCK: string = 'rtui-side-menu-sub-item';\n\n@Component({\n selector: 'rtui-side-menu-sub-item',\n host: { class: BEM_BLOCK },\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 ModDirective,\n RtIconOutlinedDirective,\n RtHideTooltipDirective,\n\n // pipes\n RtuiSubMenuTitlePartsPipe,\n ],\n providers: [\n BreakpointService,\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n disableTooltipInteractivity: true,\n },\n },\n ],\n})\nexport class RtuiSideMenuSubItemComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public readonly menuRef: IRtuiSideMenuHost = inject(RTUI_SIDE_MENU);\n\n public item: InputSignal<ISideMenu.Item> = input.required<ISideMenu.Item>();\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() || narrow()\"\n [rtHideTooltipDirective]=\"titleTpl\"\n [isTooltipShown]=\"isSubMenuTooltipsShown() && !narrow()\">\n <!--\n Подпись рисуется кусками: отмечено ровно то, чем она совпала с\n запросом. Отмеченное помечено своим элементом, а не разметкой\n выделения браузера — та красит мимо набора токенов.\n -->\n @for (part of item.name | rtuiSubMenuTitleParts: menuRef.subMenuQuery(); track $index) {\n @if (part.matched) {\n <span rtElem=\"match\">{{ part.text }}</span>\n } @else {\n <!--\n Кусок без отметки тоже узел: интерполяция, стоящая в разметке\n сама по себе, приезжает вместе с переносами строк вокруг неё\n и разрывает подпись пробелами.\n -->\n <span>{{ part.text }}</span>\n }\n }\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() || narrow()\"\n [rtHideTooltipDirective]=\"headerTitleTpl\"\n [isTooltipShown]=\"isSubMenuTooltipsShown() && !narrow()\">\n @for (part of item.name | rtuiSubMenuTitleParts: menuRef.subMenuQuery(); track $index) {\n @if (part.matched) {\n <span rtElem=\"match\">{{ part.text }}</span>\n } @else {\n <span>{{ part.text }}</span>\n }\n }\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 ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Renderer2,\n Signal,\n signal,\n TemplateRef,\n Type,\n viewChild,\n WritableSignal,\n} from '@angular/core';\nimport { MatFormField, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatListItem, MatListItemIcon, MatNavList } from '@angular/material/list';\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\n\nimport { BlockDirective, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective, RtNavigationDirective, RtScrollToElementDirective } from '@rt-tools/core';\nimport { clampSubMenuWidth, SUB_MENU_WIDTH_MIN } from '../side-menu.logic';\nimport { filterSubMenuItems } from '../side-menu.logic';\nimport { ISideMenu, RTUI_SIDE_MENU } from '../side-menu.types';\nimport {\n RtuiScrollableContainerComponent,\n RtuiScrollableContainerContentDirective,\n RtuiScrollableContainerFooterDirective,\n RtuiScrollableContainerHeaderDirective,\n} from '../../scrollable';\nimport { RtuiButtonComponent } from '../../buttons/unified-button/rtui-button.component';\nimport { RtuiClearButtonComponent } from '../../table/components/clear-search-button/rtui-clear-button.component';\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\nconst BEM_BLOCK: string = 'rtui-side-menu';\n\n@Component({\n selector: 'rtui-side-menu',\n host: {\n class: BEM_BLOCK,\n // Раскладка хоста меняется только у закреплённой моды: у всех, кто ставит меню\n // по-старому, она обязана остаться прежней до пикселя.\n '[class.rtui-side-menu--pinned]': 'isPinned()',\n // Ширина подменю приходит переменной оформления: правило стилей стоит на ней в трёх\n // местах разом, и правка одной переменной двигает их все.\n '[style.--rt-side-menu-sub-menu-dragged-width]': 'subMenuWidthStyle()',\n },\n templateUrl: './rtui-side-menu.component.html',\n styleUrls: ['./rtui-side-menu.component.scss'],\n providers: [BreakpointService, { provide: RTUI_SIDE_MENU, useExisting: RtuiSideMenuComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n MatSidenavModule,\n MatFormField,\n MatPrefix,\n MatSuffix,\n MatIcon,\n MatInput,\n MatListItem,\n MatNavList,\n MatListItemIcon,\n\n // directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtuiScrollableContainerHeaderDirective,\n RtuiScrollableContainerContentDirective,\n RtuiScrollableContainerFooterDirective,\n RtScrollToElementDirective,\n RtIconOutlinedDirective,\n RtNavigationDirective,\n\n // components\n RtuiScrollableContainerComponent,\n RtuiButtonComponent,\n RtuiClearButtonComponent,\n RtuiSideMenuSubItemComponent,\n ],\n})\nexport class RtuiSideMenuComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #renderer: Renderer2 = inject(Renderer2);\n\n /**\n * Ширина, пока край держат указателем. Наружу она уходит одной просьбой на отпускании: вход\n * потребителя за каждым движением мыши не угнаться, а хранилище незачем писать сотней раз.\n */\n readonly #draggedWidth: WritableSignal<number | null> = signal(null);\n /** Снятие слушателей документа. Ведут и отпускают за пределами самой ручки. */\n #stopDrag: (() => void) | null = null;\n\n /** Подменю открыл указатель. У закреплённой моды открытость считается не так. */\n readonly #hoverOpened: WritableSignal<boolean> = signal(false);\n\n /**\n * Человек работает с полем поиска, и подменю держится открытым, пока он не уйдёт нажатием\n * наружу.\n *\n * Заведено потому, что незакреплённое подменю живёт наведением: увести указатель к полю и\n * набрать в нём запрос — движение той же руки, и на полпути список исчезал. Уход фокуса\n * удержания не снимает: человек переходит от поля к пунктам того же подменю.\n */\n readonly #searchHeld: WritableSignal<boolean> = signal(false);\n\n /**\n * Что показывает закреплённое подменю: выбранный человеком раздел, а пока выбора нет —\n * раздел активного адреса. Само закрепление содержимого не меняет: человек закрепляет то\n * подменю, которое перед ним, и нажатие переключателя его не отнимает.\n *\n * Выбор стоит впереди активности, а не позади неё, потому что иначе до соседнего раздела не\n * добраться вовсе: пока активный пункт несёт своё подменю, оно возвращалось на любое нажатие\n * полосы, и закреплённый человек оставался запертым в том разделе, с которого начал. Ставит и\n * снимает выбор `#pickPinnedSubMenu`.\n */\n readonly #pinnedSubMenu: Signal<ISideMenu.Item[]> = computed((): ISideMenu.Item[] => {\n if (!this.isPinned()) {\n return [];\n }\n\n const picked: TNullable<ISideMenu.Item[]> = this.selectedSubMenu();\n\n if (picked?.length) {\n return picked;\n }\n\n const active: Array<string | number> = this.activeMenuIds();\n const activeItem: TNullable<ISideMenu.Item> =\n this.menuItems().find((item: ISideMenu.Item): boolean => active.includes(item.id) && !!item.submenu?.length) ?? null;\n\n return activeItem?.submenu ?? [];\n });\n\n /**\n * Ширина подменю в оформлении. Своего выбора нет — переменная не ставится вовсе, и ширину\n * берёт набор токенов: своё число здесь подменило бы его молча.\n */\n /**\n * Натянутая ширина панели. Кладётся своим свойством, а не тем, каким ширину задаёт\n * потребитель: панель берёт наибольшее из двух, и заданная оформлением ширина остаётся нижним\n * пределом сама по себе. Числом в ките этот предел назвать нечем — ширину знает потребитель.\n */\n protected readonly subMenuWidthStyle: Signal<string | null> = computed((): string | null => {\n const width: number | null = this.#draggedWidth() ?? this.subMenuWidth();\n\n return width === null ? null : `${clampSubMenuWidth(width)}px`;\n });\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n /** Подписи зашиты: словаря у кита нет, и кнопка возврата рядом названа тем же способом. */\n protected readonly searchLabel: string = 'Search';\n protected readonly pinLabel: string = 'Pin submenu';\n protected readonly unpinLabel: string = 'Unpin submenu';\n protected readonly nothingFoundLabel: string = 'Nothing found';\n protected readonly resizeLabel: string = 'Resize submenu';\n\n /**\n * Закрепление действует. На узком экране подменю занимает экран целиком, закреплять там\n * нечего — и переключателя в узкой разметке нет.\n */\n protected readonly isPinned: Signal<boolean> = computed((): boolean => this.subMenuMode() === 'pinned' && !this.narrow());\n\n /**\n * Подменю держится набором запроса: на это время оно шире и уходом указателя не закрывается.\n * Читает это оформление — модификатор на контейнере, — и разметка меню.\n */\n protected readonly isSearchHeld: Signal<boolean> = computed((): boolean => this.#searchHeld() && !this.isPinned());\n\n /** Закреплённое подменю открыто, пока ему есть что показать: указатель на это не влияет. */\n protected readonly subMenuOpened: Signal<boolean> = computed((): boolean =>\n this.isPinned() ? this.#pinnedSubMenu().length > 0 : this.#hoverOpened()\n );\n\n /** Что видно в подменю: отобранные пункты того набора, который его сейчас наполняет. */\n protected readonly visibleSubMenuItems: Signal<ISideMenu.Item[]> = computed((): ISideMenu.Item[] =>\n filterSubMenuItems(this.isPinned() ? this.#pinnedSubMenu() : (this.selectedSubMenu() ?? []), this.subMenuQuery())\n );\n public readonly headerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiSideMenuHeaderDirective, {\n read: TemplateRef,\n });\n public readonly footerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiSideMenuFooterDirective, {\n read: TemplateRef,\n });\n /** Что набрано в поиске. Публично: подпункт берёт запрос отсюда, чтобы отметить совпавшее. */\n public readonly subMenuQuery: WritableSignal<string> = signal('');\n public readonly subMenuRef: Signal<TNullable<MatDrawer>> = viewChild(MatDrawer);\n public readonly subMenuPanelRef: Signal<TNullable<ElementRef<HTMLElement>>> = viewChild('subMenuPanel', { read: ElementRef });\n\n public readonly backToMainMenuButton: Signal<ISideMenu.Item> = signal({ id: 0, icon: 'arrow_back', name: 'Main Menu', link: ' ' });\n public readonly selectedItem: WritableSignal<TNullable<ISideMenu.Item>> = signal(null);\n public readonly selectedSubMenu: WritableSignal<TNullable<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 /** Мода подменю. Умолчание — сегодняшнее поведение: открывается наведением. */\n public subMenuMode: InputSignal<ISideMenu.SubMenuMode> = input<ISideMenu.SubMenuMode>('hover');\n /**\n * Ширина закреплённого подменю в пикселях. Пустая — ширину ставит оформление; хранит выбор\n * потребитель, как и моду.\n */\n public subMenuWidth: InputSignal<number | null> = input<number | null>(null);\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 this.activeMenuIds()?.length ? this.activeMenuIds()[this.activeMenuIds()?.length - 1] : ''\n );\n\n /**\n * Просьба о моде, а не смена моды: предпочтение хранит потребитель кита и возвращает его\n * входом. Своего состояния о нём меню не заводит.\n */\n public readonly subMenuModeChange: OutputEmitterRef<ISideMenu.SubMenuMode> = output<ISideMenu.SubMenuMode>();\n /** Просьба о ширине — по той же причине, что и просьба о моде: своего состояния меню не держит. */\n public readonly subMenuWidthChange: OutputEmitterRef<number> = output<number>();\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 if (this.isPinned()) {\n this.#pickPinnedSubMenu(item);\n this.closeMobileMenu();\n\n return;\n }\n\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 } else {\n // У пункта нет подменю, и открытого подменю тоже нет — закрывать нечего.\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 return;\n }\n\n this.clickSubMenuAction.emit({ item, event });\n\n if (!this.isPinned()) {\n this.closeSubMenu();\n }\n\n this.closeMobileMenu();\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 (this.isPinned()) {\n // Закреплённое подменю не открывается и не закрывается указателем.\n return;\n }\n\n if (item === undefined && this.#searchHeld()) {\n // Указатель ушёл с панели, а человек работает с полем: закрывать нечего.\n return;\n }\n\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.subMenuQuery.set('');\n this.#hoverOpened.set(false);\n this.#searchHeld.set(false);\n }\n\n /**\n * Человек взялся за поле поиска. Дальше подменю держится открытым, и увести его уходом\n * указателя нельзя — закрывает нажатие снаружи, то есть подложка под незакреплённой панелью.\n */\n public onSearchHold(): void {\n if (!this.isPinned()) {\n this.#searchHeld.set(true);\n }\n }\n\n /** Нажат переключатель моды: наружу уходит просьба, вход остаётся прежним. */\n public onSubMenuModeToggle(): void {\n this.subMenuModeChange.emit(this.isPinned() ? 'hover' : 'pinned');\n }\n\n /**\n * Взята ручка правого края. Слушатели вешаются на документ: рука уходит с узкой полоски\n * ручки в первое же движение, и слушатель на ней самой терял бы тягу сразу.\n */\n public onResizeStart(event: MouseEvent): void {\n if (!this.isPinned() || this.#stopDrag !== null) {\n return;\n }\n\n // Иначе указатель выделяет подписи пунктов, и тяга выглядит выделением текста.\n event.preventDefault();\n\n const startX: number = event.clientX;\n const startWidth: number = this.subMenuWidth() ?? this.#measureSubMenuWidth();\n\n const stopMove: () => void = this.#renderer.listen('document', 'mousemove', (moveEvent: MouseEvent): void => {\n this.#draggedWidth.set(clampSubMenuWidth(startWidth + moveEvent.clientX - startX));\n });\n const stopUp: () => void = this.#renderer.listen('document', 'mouseup', (): void => this.#finishResize());\n\n this.#stopDrag = (): void => {\n stopMove();\n stopUp();\n this.#stopDrag = null;\n };\n }\n\n public onSubMenuSearch(query: string): void {\n this.subMenuQuery.set(query);\n this.onSearchHold();\n }\n\n public closeMobileMenu(): void {\n if (this.narrow()) {\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.#hoverOpened.set(true);\n }\n\n /**\n * Нажат пункт полосы, пока подменю закреплено. Наведение здесь по-прежнему не делает ничего:\n * рука идёт вдоль полосы к подвалу и к самой панели, и переставленное наведением подменю\n * мелькало бы разделами по дороге. Нажатие — выбор человека, и для раздела без своего адреса\n * это единственный способ его открыть.\n *\n * Пункт со своим адресом и без разделов выбор снимает: человек ушёл на страницу, разделов у\n * которой нет, и оставленная от прежнего раздела панель врала бы о том, где он стоит.\n */\n #pickPinnedSubMenu(item: ISideMenu.Item): void {\n if (item?.submenu?.length) {\n this.selectedItem.set(item);\n this.selectedSubMenu.set(item.submenu);\n this.subMenuQuery.set('');\n } else if (item?.link) {\n this.selectedItem.set(null);\n this.selectedSubMenu.set(null);\n this.subMenuQuery.set('');\n } else {\n // Пункт без разделов и без своего адреса: нажимать в нём нечего, и выбор остаётся прежним.\n }\n }\n\n /** Отпускание: слушатели снимаются, а ширина уходит просьбой наружу. */\n /**\n * Конец тяги. Наружу уходит натянутая ширина, а не та, что получилась на экране: нижний\n * предел держит оформление — панель не бывает уже той ширины, какую задал потребитель, — и\n * замерить применённое можно только там, где раскладка уже посчитана. Хранит потребитель\n * выбор человека; вид от этого не меняется, потому что предел стоит в самом оформлении.\n */\n #finishResize(): void {\n const width: number | null = this.#draggedWidth();\n\n this.#stopDrag?.();\n this.#draggedWidth.set(null);\n\n if (width !== null) {\n this.subMenuWidthChange.emit(width);\n }\n }\n\n /** Ширина, от которой отсчитывается тяга, когда своего выбора ещё нет: та, что нарисована. */\n #measureSubMenuWidth(): number {\n const panel: ElementRef<HTMLElement> | null = this.subMenuPanelRef() ?? null;\n const width: number = panel?.nativeElement.getBoundingClientRect().width ?? 0;\n\n return width > 0 ? width : SUB_MENU_WIDTH_MIN;\n }\n}\n","@if (narrow()) {\n <rtui-scrollable rtBlock=\"rtui-mobile-side-menu\" [isScrollHintShown]=\"true\">\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]=\"visibleSubMenuItems()\">\n <rtui-side-menu-sub-item [item]=\"backToMainMenuButton()\" (clickSubMenuAction)=\"onBackToMainMenu()\" />\n\n <mat-form-field rtBlock=\"rtui-side-menu-search\" subscriptSizing=\"dynamic\" appearance=\"outline\">\n <input\n #mobileSubMenuSearch\n matInput\n type=\"search\"\n qa-dataid=\"side-menu-search\"\n [attr.aria-label]=\"searchLabel\"\n [placeholder]=\"searchLabel\"\n [value]=\"subMenuQuery()\"\n (focus)=\"onSearchHold()\"\n (input)=\"onSubMenuSearch(mobileSubMenuSearch.value)\" />\n\n <mat-icon matPrefix [rtIconOutlined]=\"true\">search</mat-icon>\n\n <rtui-clear-button matSuffix [isButtonShown]=\"subMenuQuery() !== ''\" (clickAction)=\"onSubMenuSearch('')\" />\n </mat-form-field>\n\n @if (subMenuQuery() !== '' && !visibleSubMenuItems().length) {\n <div rtBlock=\"rtui-side-menu-empty\" qa-dataid=\"side-menu-empty\">{{ nothingFoundLabel }}</div>\n }\n\n @for (item of visibleSubMenuItems(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\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\" [isScrollHintShown]=\"true\">\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 tabindex=\"0\"\n [rtNavigationDirective]=\"item?.link\"\n (mouseenter)=\"toggleSubMenu(item)\"\n (click)=\"onClickMenu(item)\"\n (keydown.enter)=\"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: subMenuOpened(), pinned: isPinned(), held: isSearchHeld() }\"\n [hasBackdrop]=\"!isPinned()\"\n (backdropClick)=\"closeSubMenu()\">\n <mat-drawer\n #subMenuPanel\n rtBlock=\"rtui-sub-side-menu-content\"\n mode=\"side\"\n position=\"start\"\n [opened]=\"subMenuOpened()\"\n (mouseleave)=\"toggleSubMenu()\">\n <rtui-scrollable [isScrollHintShown]=\"true\">\n <ng-container *rtuiScrollableHeader>\n @if (subMenuOpened()) {\n <div rtBlock=\"rtui-sub-side-menu-head\">\n <!--\n Поле берётся готовым кита — тем же, каким рисует поиск тулбар\n таблицы: своя разметка расходится с ним при первой же правке\n кита, и заметить это некому. Форма пилюли задана ручкой\n оформления поля, а не рамкой поверх готового.\n -->\n <mat-form-field rtElem=\"search\" subscriptSizing=\"dynamic\" appearance=\"outline\">\n <input\n #subMenuSearch\n matInput\n type=\"search\"\n qa-dataid=\"side-menu-search\"\n [attr.aria-label]=\"searchLabel\"\n [placeholder]=\"searchLabel\"\n [value]=\"subMenuQuery()\"\n (focus)=\"onSearchHold()\"\n (input)=\"onSubMenuSearch(subMenuSearch.value)\" />\n\n <mat-icon matPrefix [rtIconOutlined]=\"true\">search</mat-icon>\n\n <rtui-clear-button matSuffix [isButtonShown]=\"subMenuQuery() !== ''\" (clickAction)=\"onSubMenuSearch('')\" />\n </mat-form-field>\n\n <!--\n Кнопка берётся готовой кита. Закреплённое подменю помечено цветным\n значком, незакреплённое — спокойным: это ведёт вход `variant`, и\n он же остаётся единственным признаком там, где потребитель\n зарегистрировал статический набор значков — заливку рисует ось\n переменного шрифта, и у статического набора её нет. Где ось есть,\n заливка идёт поверх цвета, а не вместо него.\n -->\n <rtui-button\n rtElem=\"pin\"\n type=\"icon\"\n icon=\"push_pin\"\n qa-dataid=\"side-menu-pin\"\n [outlined]=\"!isPinned()\"\n [variant]=\"isPinned() ? 'primary' : 'default'\"\n [attr.aria-label]=\"isPinned() ? unpinLabel : pinLabel\"\n [attr.aria-pressed]=\"isPinned()\"\n (clicked)=\"onSubMenuModeToggle()\" />\n </div>\n }\n </ng-container>\n\n <ng-container *rtuiScrollableContent>\n @if (subMenuOpened() && subMenuQuery() !== '' && !visibleSubMenuItems().length) {\n <div rtElem=\"empty\" qa-dataid=\"side-menu-empty\">{{ nothingFoundLabel }}</div>\n }\n\n @if (subMenuOpened() && visibleSubMenuItems().length) {\n <mat-nav-list\n rtElem=\"list\"\n [rtMod]=\"{ scrollable: isSubMenuXScrollEnabled() }\"\n [rtScrollToElement]=\"activeMenuId()\"\n [elements]=\"visibleSubMenuItems()\">\n @for (item of visibleSubMenuItems(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\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 @if (isPinned() && subMenuOpened()) {\n <!--\n Ручка есть только у закреплённого подменю, и только пока панель на экране: тянуть\n край у панели, которой нечего показать, не за что. Незакреплённое подменю живёт\n наведением и уходит с экрана раньше, чем до её края доедет рука.\n\n Лежит она вне ящика и вне его контейнера: панель скруглена по правому краю и режет по\n этой дуге всё, что внутри неё, а всё, что кладут в контейнер рядом с панелью, Material\n уносит в свою область содержимого — правее панели и ниже её. Снаружи ручка стоит там,\n где её ставят, и идёт от края экрана до края.\n -->\n <div\n rtBlock=\"rtui-side-menu-resizer\"\n qa-dataid=\"side-menu-resize\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n [attr.aria-label]=\"resizeLabel\"\n (mousedown)=\"onResizeStart($event)\"></div>\n }\n}\n","import { ComponentType, OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nexport type TAsidePositions = 'left' | 'right';\n\n/**\n * Чем шторке позволено закрываться. Клавиша по умолчанию не закрывает: её жмут, чтобы снять\n * подсказку или выйти из поля, а закрывалась вся панель вместе с введённым.\n */\nexport interface IAsideConfig {\n /** Закрывать ли шторку клавишей Esc. По умолчанию — нет. */\n readonly closeOnEscape?: boolean;\n /** Закрывать ли шторку кликом по подложке. По умолчанию — да. */\n readonly closeOnBackdropClick?: boolean;\n}\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: TAsidePositions,\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","export enum EAsideButtons {\n USER_ACTIVE = 'User active',\n USER_INACTIVE = 'User inactive',\n DELETE = 'Delete',\n RESET = 'Reset',\n}\n\nexport type TAsideButtonsType = EAsideButtons.USER_ACTIVE | EAsideButtons.USER_INACTIVE | EAsideButtons.DELETE | EAsideButtons.RESET;\n","import { ComponentPortal } from '@angular/cdk/portal';\nimport { PortalModule } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n afterNextRender,\n inject,\n signal,\n} from '@angular/core';\n\nimport { BlockDirective } from '@rt-tools/core';\nimport { ASIDE_REF, TAsidePositions, AsideRef } from '../../aside.types';\n\nconst BEM_BLOCK: string = 'rtui-aside-panel';\n\n@Component({\n selector: 'rtui-aside-panel',\n host: {\n class: BEM_BLOCK,\n '[class.rtui-aside-panel--left]': \"position === 'left'\",\n '[class.rtui-aside-panel--right]': \"position === 'right'\",\n '[class.rtui-aside-panel--open]': 'opened()',\n },\n templateUrl: './aside-panel.component.html',\n styleUrls: ['./aside-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [PortalModule, BlockDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiAsidePanelComponent {\n readonly #asideRef: AsideRef<object, object> = inject(ASIDE_REF);\n\n /**\n * Выехала ли шторка на своё место.\n *\n * Ложь стоит до первой отрисовки нарочно: переход считает путь от того, что браузер уже\n * нарисовал, и шторка, выставленная на место сразу, приехала бы без движения.\n */\n readonly #opened: WritableSignal<boolean> = signal(false);\n\n public readonly opened: Signal<boolean> = this.#opened.asReadonly();\n\n public portal: ComponentPortal<unknown> = this.#createPortal(this.#asideRef);\n public position: TAsidePositions = this.#asideRef.position;\n\n constructor() {\n afterNextRender(() => this.#opened.set(true));\n }\n\n public close(): void {\n this.#asideRef.close();\n }\n\n /**\n * Уход шторки за свою кромку.\n *\n * Ждать его конца компоненту нечем и не нужно: снимает шторку служба, и её отсчёт длиннее\n * времени ухода.\n */\n public startExitAnimation(): void {\n this.#opened.set(false);\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 rtBlock=\"c-aside\">\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, DestroyRef, inject, Injectable, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Event, NavigationEnd, Router } from '@angular/router';\nimport { EMPTY, merge, Observable, of, Subject } from 'rxjs';\nimport { delay, filter, mergeAll, take, tap } from 'rxjs/operators';\n\nimport { ASIDE_REF, IAsideConfig, TAsidePositions, AsideRef } from './aside.types';\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 readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Источник открытий: метод толкает сюда поток закрытия новой панели, и больше ничего. */\n readonly #closesSource: Subject<Observable<unknown>> = new Subject<Observable<unknown>>();\n\n /** Открытые сейчас панели: по гибели того, кто службу выдал, снимать нужно каждую. */\n readonly #open: Set<OverlayRef> = new Set<OverlayRef>();\n\n /**\n * Закрытие каждой открытой панели объявлено один раз, а не заводится вызовом открытия.\n *\n * Потоки сливаются, а не сменяют друг друга: панели живут порознь, и оборванный поток\n * предыдущей оставил бы её на экране — снять её после этого нечем.\n */\n constructor() {\n this.#closesSource.pipe(mergeAll(), takeUntilDestroyed(this.#destroyRef)).subscribe();\n this.#destroyRef.onDestroy((): void => this.#closeOpened());\n }\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: TAsidePositions,\n data: DATA,\n config: IAsideConfig = {}\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 this.#open.add(overlayRef);\n this.#closesSource.next(this.#closeOnFirstEvent(overlayRef, componentRef, answer, config));\n\n return answer ? answer.asObservable() : of(null);\n }\n\n /**\n * Закрытие одной панели по первому же из её событий.\n *\n * `take(1)` обрывает поток: слитые в него горячие источники — маршрутизатор, подложка,\n * нажатия — иначе держали бы подписку живой и после того, как панель снята.\n */\n #closeOnFirstEvent<ANSWER>(\n overlayRef: OverlayRef,\n componentRef: ComponentRef<RtuiAsidePanelComponent>,\n answer: Subject<ANSWER | null>,\n config: IAsideConfig\n ): Observable<unknown> {\n return merge(\n this.#closesOf(overlayRef, config),\n this.#router.events.pipe(filter((e: Event): boolean => e instanceof NavigationEnd)),\n answer.pipe(delay(10))\n ).pipe(\n take(1),\n tap((): void => {\n this.#open.delete(overlayRef);\n componentRef.instance.startExitAnimation();\n overlayRef.detach();\n answer.complete();\n }),\n delay(300),\n tap((): void => {\n overlayRef.dispose();\n })\n );\n }\n\n /**\n * Снятие всех открытых панелей по гибели того, кто службу выдал.\n *\n * Службу кладут в компонент экрана, и маршрутизатор гасит компонент раньше, чем издаёт смену\n * маршрута: подписка на закрытия рвётся вместе с ним, событие приходит некому, а панель с\n * подложкой остаётся поверх нового экрана — ни подложка, ни клавиша, ни кнопка внутри уже не\n * работают. Здесь панель снимается прямо гибелью владельца, не дожидаясь события.\n *\n * Без выхода анимацией: содержимое панели гибнет вместе с тем, кто её открыл, и показывать\n * выход уже нечем.\n */\n #closeOpened(): void {\n for (const overlayRef of this.#open) {\n overlayRef.detach();\n overlayRef.dispose();\n }\n\n this.#open.clear();\n }\n\n /**\n * Источники закрытия, которые потребитель разрешил настройкой открытия.\n *\n * Запрещённый источник не подписывается вовсе: подписка, которая приходит и ничего не\n * делает, читается работающей и оживает при первой правке рядом.\n */\n #closesOf(overlayRef: OverlayRef, config: IAsideConfig): Observable<unknown> {\n const backdrop$: Observable<MouseEvent> = config.closeOnBackdropClick === false ? EMPTY : overlayRef.backdropClick();\n const escape$: Observable<KeyboardEvent> = config.closeOnEscape\n ? overlayRef.keydownEvents().pipe(filter((keyEvent: KeyboardEvent): boolean => keyEvent.key === 'Escape'))\n : EMPTY;\n\n return merge(backdrop$, escape$);\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: TAsidePositions): 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 === '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: TAsidePositions): 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, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\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\nconst BEM_BLOCK: string = 'rtui-toolbar';\n\n@Component({\n selector: 'rtui-toolbar',\n host: { class: BEM_BLOCK },\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatToolbar, NgTemplateOutlet, BlockDirective, ElemDirective, ModDirective],\n})\nexport class RtuiToolbarComponent {\n public isVisibleToolbar: Signal<boolean> = input(true);\n\n public readonly leftToolTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarLeftDirective, {\n read: TemplateRef,\n });\n public readonly centerToolTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarCenterDirective, {\n read: TemplateRef,\n });\n public readonly rightToolTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiToolbarRightDirective, {\n read: TemplateRef,\n });\n public sticky: InputSignalWithTransform<TNullable<boolean>, boolean> = input<TNullable<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 { 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, ConcatClassesPipe, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-aside-error-box';\n\n@Component({\n selector: 'rtui-aside-error-box',\n host: { class: BEM_BLOCK },\n templateUrl: './aside-error-box.component.html',\n styleUrls: ['./aside-error-box.component.scss'],\n imports: [\n ModDirective,\n MatIcon,\n MatButton,\n\n // bem\n BlockDirective,\n ElemDirective,\n ConcatClassesPipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AsideErrorBoxComponent {\n readonly #clipboard: Clipboard = inject(Clipboard);\n\n public error: InputSignal<TNullable<unknown>> = input.required<TNullable<unknown>>();\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]=\"['rtui-btn', 'rtui-btn-secondary-text'] | concatClasses\"\n [rtMod]=\"{ 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 {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n inject,\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, BreakpointService, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport { TAsideButtonsType } from '../../aside.enums';\nimport { IAside } from '../../aside.interfaces';\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\nconst BEM_BLOCK: string = 'c-aside';\n\n@Component({\n selector: 'rtui-aside-container',\n templateUrl: './aside-container.component.html',\n styleUrls: ['./aside-container.component.scss'],\n providers: [BreakpointService],\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: BEM_BLOCK,\n },\n})\nexport class RtuiAsideContainerComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public title: InputSignal<TNullable<string>> = input<TNullable<string>>(null);\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<TNullable<unknown>> = input<TNullable<unknown>>(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<TAsideButtonsType> = output<TAsideButtonsType>();\n\n public readonly headerTpl: Signal<TNullable<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: TAsideButtonsType): 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]=\"narrow()\"\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]=\"narrow()\"\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() || narrow()\"\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 { 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, ModDirective } from '@rt-tools/core';\nimport { transformArrayInput } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-multi-button';\n\n@Component({\n selector: 'rtui-multi-button',\n host: { class: BEM_BLOCK },\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 ModDirective,\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 computed,\n contentChild,\n Directive,\n inject,\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, BreakpointService, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\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\nconst BEM_BLOCK: string = 'rtui-header';\n\n@Component({\n selector: 'rtui-header',\n host: { class: BEM_BLOCK },\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n providers: [BreakpointService],\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 readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public isMobileMenuButtonShown: InputSignalWithTransform<TNullable<boolean>, TNullable<boolean>> = input<\n TNullable<boolean>,\n TNullable<boolean>\n >(true, {\n transform: booleanAttribute,\n });\n\n public readonly leftHeaderTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiHeaderLeftDirective, {\n read: TemplateRef,\n });\n public readonly centerHeaderTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiHeaderCenterDirective, {\n read: TemplateRef,\n });\n public readonly rightHeaderTpl: Signal<TNullable<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.narrow() && this.isMobileMenuButtonShown()) {\n this.openMobileMenuAction.emit();\n }\n }\n}\n","<rtui-toolbar>\n <ng-container *rtuiToolbarLeft>\n @if (narrow() && 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 { FormControl } from '@angular/forms';\n\nimport { TFilterOperatorType, ISortModel } from '@rt-tools/utils';\n\nexport enum ETableColumnTypes {\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 ETableColumnFilterTypes {\n TEXT = 'text',\n NUMBER = 'number',\n SELECT = 'select',\n DATE = 'date',\n}\n\nexport enum ETextCellColor {\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 ETextCellColor.NEUTRAL | ETextCellColor.DANGER | ETextCellColor.WARNING | ETextCellColor.SUCCESS | ETextCellColor.EMPTY;\n\n export type Type =\n | ETableColumnTypes.DATE\n | ETableColumnTypes.PERCENT\n | ETableColumnTypes.ARRAY\n | ETableColumnTypes.BOOLEAN\n | ETableColumnTypes.TEXT\n | ETableColumnTypes.CURRENCY\n | ETableColumnTypes.CUSTOM;\n\n export type FilterType =\n ETableColumnFilterTypes.TEXT | ETableColumnFilterTypes.NUMBER | ETableColumnFilterTypes.SELECT | ETableColumnFilterTypes.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?: ISortModel<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?: TFilterOperatorType;\n filterOperators?: TFilterOperatorType[];\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 { TNullable } from '@rt-tools/utils';\nimport { IFilterModel, ISortModel } from '@rt-tools/utils';\nimport { ITable } from './table-column.interface';\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 TNullable<{\n getTemplateByPropName(propName: keyof ENTITY_TYPE): TemplateRef<{ $implicit: ENTITY_TYPE }>;\n }>\n >;\n rowActionsTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY_TYPE }>>>;\n additionalRowActionsTpl: Signal<TNullable<TemplateRef<unknown>>>;\n\n narrow: Signal<boolean>;\n isTableRowsClickable: Signal<boolean>;\n keyExp: Signal<NonNullable<KEY>>;\n entities: Signal<ENTITY_TYPE[]>;\n currentSortModel: Signal<TNullable<ISortModel<SORT_PROPERTY>>>;\n appearance: Signal<MatFormFieldAppearance>;\n filterAppearance: Signal<MatFormFieldAppearance>;\n filterModel: Signal<IFilterModel<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<TNullable<number>>;\n\n onSortChange(sortModel: ISortModel): void;\n onFilterChange(filterModel: IFilterModel<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","/**\n * Порядок имён колонок для сверки двух наборов.\n *\n * Какой именно порядок, значения не имеет: оба набора выстраиваются одним и тем же и сравниваются\n * на равенство. Важно лишь, чтобы порядок был один и не зависел от вида значения, — умолчание\n * `sort()` приводит элементы к строке по-своему и на числовых ключах даёт лексикографический.\n */\nexport function comparePropNames(a: PropertyKey | undefined, b: PropertyKey | undefined): number {\n return String(a).localeCompare(String(b));\n}\n","import { DestroyRef, Injectable, Signal, WritableSignal, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { Observable, Subject } from 'rxjs';\nimport { concatMap, map, switchMap, take } from 'rxjs/operators';\n\nimport { IDBStorageService } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual } from '@rt-tools/utils';\nimport { ITable } from './table-column.interface';\nimport { comparePropNames } from './compare-prop-names';\n\n/** Настройка, как её держит хранилище: столбцы там лежат частичными. */\ninterface IStoredConfig<ENTITY_TYPE> {\n isVerticalScrollbarShown: boolean;\n isHorizontalScrollbarShown: boolean;\n columns: Array<Partial<ITable.Column<ENTITY_TYPE>>>;\n}\n\n/** Просьба чтения: с каким составом столбцов сверять прочитанное. */\ninterface IConfigRead<ENTITY_TYPE> {\n readonly storageKey: string;\n readonly config: Array<ITable.Column<ENTITY_TYPE>>;\n}\n\n/** Просьба записи или снятия: обе идут одним потоком, чтобы не разойтись порядком. */\ntype TConfigWrite<ENTITY_TYPE> =\n | { readonly kind: 'set'; readonly storageKey: string; readonly config: ITable.Config.Data<ENTITY_TYPE> }\n | { readonly kind: 'remove'; readonly storageKey: string };\n\n@Injectable()\nexport class RtTableConfigService<ENTITY_TYPE> {\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #iDBStorageService: IDBStorageService<IStoredConfig<ENTITY_TYPE>> = inject(IDBStorageService);\n\n /** Просьбы прочитать сохранённую настройку. */\n readonly #readSource: Subject<IConfigRead<ENTITY_TYPE>> = new Subject<IConfigRead<ENTITY_TYPE>>();\n\n /** Просьбы записать и снять настройку — один источник на оба действия. */\n readonly #writeSource: Subject<TConfigWrite<ENTITY_TYPE>> = new Subject<TConfigWrite<ENTITY_TYPE>>();\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 /**\n * Потоки чтения и записи объявлены один раз, а методы только толкают в них просьбы.\n *\n * Чтение — `switchMap`: отвечает последний вызов, потому что настройка, прочитанная под\n * прежний состав столбцов, к нынешнему уже не относится. Запись и снятие — один поток и\n * `concatMap`: разведённые по двум, они теряют порядок между собой, и снятие, обогнавшее\n * запись, оставляет в хранилище снятое.\n */\n constructor() {\n this.#readSource\n .pipe(\n switchMap((read: IConfigRead<ENTITY_TYPE>): Observable<ITable.Config.Data<ENTITY_TYPE>> =>\n this.#iDBStorageService.get(read.storageKey).pipe(\n take(1),\n map((savedConfig: TNullable<IStoredConfig<ENTITY_TYPE>>): ITable.Config.Data<ENTITY_TYPE> =>\n this.#configOf(read.config, savedConfig)\n )\n )\n ),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((config: ITable.Config.Data<ENTITY_TYPE>) => {\n this.#tableConfig.set(config);\n });\n\n this.#writeSource\n .pipe(\n concatMap((write: TConfigWrite<ENTITY_TYPE>): Observable<unknown> => this.#writeOf(write).pipe(take(1))),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe();\n }\n\n public initConfig(storageKey: string, config: Array<ITable.Column<ENTITY_TYPE>>): void {\n this.#readSource.next({ storageKey, config });\n }\n\n public updateConfig(storageKey: string, config: ITable.Config.Data<ENTITY_TYPE>): void {\n this.#writeSource.next({ kind: 'set', storageKey, config });\n this.#tableConfig.set(config);\n }\n\n public deleteConfig(storageKey: string): void {\n this.#writeSource.next({ kind: 'remove', storageKey });\n }\n\n /** Обращение к хранилищу под просьбу записи или снятия. */\n #writeOf(write: TConfigWrite<ENTITY_TYPE>): Observable<unknown> {\n if (write.kind === 'remove') {\n return this.#iDBStorageService.remove(write.storageKey);\n }\n\n const idbConfigColumns: Array<Partial<ITable.Column<ENTITY_TYPE>>> = write.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\n return this.#iDBStorageService.set(write.storageKey, { ...write.config, columns: idbConfigColumns });\n }\n\n /**\n * Настройка, которую показывает таблица: сохранённая, если она сходится с нынешним составом\n * столбцов, иначе — собранная из самого состава.\n */\n #configOf(\n config: Array<ITable.Column<ENTITY_TYPE>>,\n savedConfig: TNullable<IStoredConfig<ENTITY_TYPE>>\n ): ITable.Config.Data<ENTITY_TYPE> {\n if (!savedConfig?.columns || !this.#checkIsSavedConfigConsistent(config, savedConfig.columns)) {\n return {\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 const updatedColumns: Array<ITable.Column<ENTITY_TYPE> & { orderIndex: number }> = savedConfig.columns.map(\n (el: Partial<ITable.Column<ENTITY_TYPE> & { orderIndex: number }>) => {\n const oldConfigIem: TNullable<ITable.Column<ENTITY_TYPE>> = config.find(\n (item: ITable.Column<ENTITY_TYPE>) => el.propName === item.propName\n );\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\n return {\n isVerticalScrollbarShown: !!savedConfig?.isVerticalScrollbarShown,\n isHorizontalScrollbarShown: !!savedConfig?.isHorizontalScrollbarShown,\n columns: updatedColumns,\n };\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).toSorted(comparePropNames),\n savedConfig.map((el: Partial<ITable.Column<ENTITY_TYPE>>) => el.propName).toSorted(comparePropNames)\n )\n );\n }\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n HostListener,\n inject,\n input,\n InputSignal,\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, BreakpointService, ConcatClassesPipe, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isEmpty, isNumber, isString } from '@rt-tools/utils';\nimport { EmptyToDashPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtHideTooltipDirective } from '../../../tooltip';\nimport { ITable } from '../../util/table-column.interface';\n\nconst BEM_BLOCK: string = 'rtui-table-base-cell';\n\n@Component({\n selector: 'rtui-table-base-cell',\n host: { class: BEM_BLOCK },\n templateUrl: './table-base-cell.component.html',\n styleUrls: ['./table-base-cell.component.scss'],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // material\n MatIcon,\n MatTooltip,\n\n // directives\n BlockDirective,\n ElemDirective,\n ConcatClassesPipe,\n ModDirective,\n RtIconOutlinedDirective,\n RtHideTooltipDirective,\n\n // pipes\n EmptyToDashPipe,\n ],\n})\nexport class TableBaseCellComponent<T = { [key: string]: unknown }> {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #clipboard: Clipboard = inject(Clipboard);\n readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n protected readonly cellValue: Signal<T[keyof T] | string | number> = computed(() => {\n const transformFn: TNullable<(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 // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization -- строка стиля собрана китом из настройки колонок, а не из значения, введённого пользователем\n return transformFn ? this.#sanitizer.bypassSecurityTrustStyle(transformFn(this.row()[this.column().propName])) : undefined;\n });\n /**\n * Копировать нечего: значение ячейки пусто. Считается той же утилитой, что рисует прочерк\n * вместо значения, — второй ответ на этот вопрос разошёлся бы с прочерком молча.\n */\n protected readonly isCellEmpty: Signal<boolean> = computed(() => isEmpty(this.cellValue()));\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\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 // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization -- строка стиля собрана китом из настройки колонок, а не из значения, введённого пользователем\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 <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]=\"!narrow()\"\n [matTooltip]=\"column()?.tooltip ?? tooltipValue()\"\n [matTooltipDisabled]=\"narrow()\">\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 && !isCellEmpty()) {\n <button\n type=\"button\"\n rtBlock=\"base-cell\"\n rtElem=\"copy-button\"\n matTooltipPosition=\"above\"\n [rtMod]=\"{\n position: copyBtnPosition,\n complete: isCopied(),\n visible: isMouseOver(),\n }\"\n [matTooltip]=\"isCopied() ? 'Copied!' : 'Copy'\"\n [matTooltipDisabled]=\"narrow()\"\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, ConcatClassesPipe, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { EListSortOrder, TListSortOrderType, ISortModel } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ITable } from '../../util/table-column.interface';\n\nconst BEM_BLOCK: string = 'rtui-table-header-cell';\n\n@Component({\n selector: 'rtui-table-header-cell',\n host: { class: BEM_BLOCK },\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 ConcatClassesPipe,\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 EListSortOrder = EListSortOrder;\n\n public headerModel: InputSignal<ITable.Header> = input.required<ITable.Header>();\n public sortModel: InputSignal<TNullable<ISortModel<string>>> = input.required<TNullable<ISortModel<string>>>();\n public currentSortModel: InputSignal<TNullable<ISortModel<string>>> = input.required<TNullable<ISortModel<string>>>();\n public headerDataEllipsisMaxLines: InputSignalWithTransform<number, number> = input<number, number>(1, {\n transform: numberAttribute,\n });\n\n public readonly sortChange: OutputEmitterRef<ISortModel<string>> = output<ISortModel<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 // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization -- строка стиля собрана китом из настройки колонок, а не из значения, введённого пользователем\n return this.#sanitizer.bypassSecurityTrustStyle(`text-align: ${this.headerModel().align};`);\n }\n\n @HostListener('click')\n protected handleClick(): void {\n const sortPropertyName: TNullable<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(): TListSortOrderType {\n if (this.currentSortModel()?.sortDirection?.toLowerCase() === EListSortOrder.ASC) {\n return EListSortOrder.DESC;\n }\n\n return EListSortOrder.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 ?? ''\" [class]=\"[headerModel()?.className] | concatClasses\">\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 ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n output,\n OutputEmitterRef,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerModule, MatDatepickerToggle } from '@angular/material/datepicker';\n\nimport { EFilterOperatorType, FILTER_OPERATORS, TFilterOperatorType, IFilterModel, isString, transformArrayInput } from '@rt-tools/utils';\nimport { BreakpointService, ConcatClassesPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ITable, ETableColumnFilterTypes } 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 '@rt-tools/utils';\nimport { RtuiClearButtonComponent } from '../clear-search-button/rtui-clear-button.component';\nimport { BlockDirective } from '@rt-tools/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nconst BEM_BLOCK: string = 'rtui-table-header-filter-cell';\n\n@Component({\n selector: 'rtui-table-header-filter-cell',\n host: { class: BEM_BLOCK },\n templateUrl: './table-header-filter-cell.component.html',\n styleUrls: ['./table-header-filter-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [BreakpointService, provideNativeDateAdapter()],\n imports: [\n ConcatClassesPipe,\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 #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #injector: Injector = inject(Injector);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n protected readonly filterTypes: typeof ETableColumnFilterTypes = ETableColumnFilterTypes;\n protected readonly filterOperatorTypes: typeof EFilterOperatorType = EFilterOperatorType;\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<IFilterModel<KEY>[], IFilterModel<KEY>[]> = input.required<\n IFilterModel<KEY>[],\n IFilterModel<KEY>[]\n >({\n transform: (value: IFilterModel<KEY>[]) => transformArrayInput(value),\n });\n /** Filter property */\n public defaultFilterOperator: InputSignalWithTransform<TFilterOperatorType, TFilterOperatorType> = input.required<\n TFilterOperatorType,\n TFilterOperatorType\n >({\n transform: (value: TFilterOperatorType): TFilterOperatorType =>\n value && FILTER_OPERATORS.includes(value) ? value : EFilterOperatorType.EQUALS,\n });\n /** Available filter operators */\n public filterOperators: InputSignalWithTransform<TFilterOperatorType[], TFilterOperatorType[]> = input<\n TFilterOperatorType[],\n TFilterOperatorType[]\n >([], {\n transform: (value: TFilterOperatorType[]) => 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\n /** Filter change output action */\n public readonly filterChange: OutputEmitterRef<IFilterModel<KEY>[]> = output<IFilterModel<KEY>[]>();\n\n public readonly currentFilter: WritableSignal<IFilterModel<KEY>> = signal({\n propertyName: '' as KEY,\n operatorType: EFilterOperatorType.EQUALS,\n value: '',\n });\n\n public ngOnInit(): void {\n toObservable(this.filterModel, { injector: this.#injector })\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((filterModel: IFilterModel<KEY>[]) => {\n this.currentFilter.set(\n filterModel?.length && filterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty())\n ? (filterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty()) as IFilterModel<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 // Дата хранится строкой, и сверять её надо в том же виде: `Date` не равен строке никогда,\n // и без приведения повторный выбор той же даты каждый раз считался бы новым значением.\n const nextValue: string | number | boolean = isDate(value) ? value.toISOString() : value;\n\n if (nextValue === this.currentFilter().value) {\n return;\n }\n\n let updatedFilterModel: IFilterModel<KEY>[] = this.filterModel();\n\n if (updatedFilterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty())) {\n if (nextValue) {\n updatedFilterModel = updatedFilterModel.map((el: IFilterModel<KEY>) =>\n el.propertyName === this.filterProperty() ? { ...el, value: nextValue } : el\n );\n } else {\n updatedFilterModel = updatedFilterModel.filter((el: IFilterModel<KEY>) => el.propertyName !== this.filterProperty());\n }\n this.filterChange.emit(updatedFilterModel);\n } else if (nextValue) {\n updatedFilterModel.push({\n propertyName: this.filterProperty(),\n operatorType: this.currentFilter().operatorType,\n value: nextValue,\n });\n this.filterChange.emit(updatedFilterModel);\n } else {\n // Отбора по этой колонке ещё нет, и значения тоже — списку отбора менять нечего.\n }\n\n this.currentFilter.update((filter: IFilterModel<KEY>) => ({ ...filter, value: nextValue }));\n }\n\n /** Change filter operator */\n public onFilterOperatorChange(operatorType: TFilterOperatorType): void {\n if (operatorType === this.currentFilter().operatorType) {\n return;\n }\n\n let updatedFilterModel: IFilterModel<KEY>[] = this.filterModel();\n\n if (updatedFilterModel.find((el: IFilterModel<KEY>) => el.propertyName === this.filterProperty())) {\n updatedFilterModel = updatedFilterModel.map((el: IFilterModel<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 } else {\n // Отбора по этой колонке нет и значения тоже — менять вид сравнения не у чего.\n }\n\n this.currentFilter.update((filter: IFilterModel<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]=\"narrow()\"\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 <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.EQUALS)\">\n <mat-icon rtIconOutlined [class]=\"['material-icons-outlined'] | concatClasses\">drag_handle</mat-icon>\n <span>Equal</span>\n </button>\n }\n @if (\n filterOperators().includes(filterOperatorTypes.NOT_EQUALS) && currentFilter()?.operatorType !== filterOperatorTypes.NOT_EQUALS\n ) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.NOT_EQUALS)\">\n <mat-icon [rtIconOutlined]=\"true\">block</mat-icon>\n <span>Not equal</span>\n </button>\n }\n @if (filterOperators().includes(filterOperatorTypes.CONTAINS) && currentFilter()?.operatorType !== filterOperatorTypes.CONTAINS) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.CONTAINS)\">\n <mat-icon [rtIconOutlined]=\"true\">more_horiz</mat-icon>\n <span>Contains</span>\n </button>\n }\n @if (\n filterOperators().includes(filterOperatorTypes.GREATER_THAN) &&\n currentFilter()?.operatorType !== filterOperatorTypes.GREATER_THAN\n ) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.GREATER_THAN)\">\n <mat-icon [rtIconOutlined]=\"true\">chevron_right</mat-icon>\n <span>More than</span>\n </button>\n }\n @if (filterOperators().includes(filterOperatorTypes.LESS_THAN) && currentFilter()?.operatorType !== filterOperatorTypes.LESS_THAN) {\n <button type=\"button\" mat-menu-item (click)=\"onFilterOperatorChange(filterOperatorTypes.LESS_THAN)\">\n <mat-icon [rtIconOutlined]=\"true\">chevron_left</mat-icon>\n <span>Less than</span>\n </button>\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]=\"narrow()\"\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\" />\n <mat-datepicker #picker />\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]=\"narrow()\"\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","export const RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE: string = 'rtui-table-stop-row-click-attribute';\n","import { Directive, inject, input, InputSignal, InputSignalWithTransform, HostListener, booleanAttribute } from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nimport { RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE } from '../util/table-stop-row-click-attribute.const';\nimport { IRtuiTable, RTUI_TABLE_COMPONENT_TOKEN } from '../util/table-component.interface';\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { EFilterOperatorType, IFilterModel, ISortModel, transformArrayInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ETableColumnTypes, ITable } from '../../util/table-column.interface';\nimport { IRtuiTable, RTUI_TABLE_COMPONENT_TOKEN } from '../../util/table-component.interface';\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/rtui-table-row-click-directive';\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\nconst BEM_BLOCK: string = 'rtui-table';\n\n@Component({\n selector: 'rtui-table',\n host: { class: BEM_BLOCK },\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 ModDirective,\n RtIconOutlinedDirective,\n RtuiTableRowClickDirective,\n\n // components\n RtuiTableHeaderCellComponent,\n TableBaseCellComponent,\n RtuiTableHeaderFilterCellComponent,\n ],\n providers: [\n BreakpointService,\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<TNullable<ElementRef<HTMLElement>>> = viewChild<ElementRef<HTMLElement>>('rowActions');\n protected readonly rowActionsHeaderPaddingHelper: Signal<TNullable<ElementRef<HTMLElement>>> =\n viewChild<ElementRef<HTMLElement>>('rowActionsHeaderPaddingHelper');\n protected readonly rowActionsPaddingHelper: Signal<TNullable<ElementRef<HTMLElement>>> =\n viewChild<ElementRef<HTMLElement>>('rowActionsRowPaddingHelper');\n\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n readonly #tableConfigService: RtTableConfigService<ENTITY_TYPE> = inject(RtTableConfigService);\n\n protected readonly columnTypes: typeof ETableColumnTypes = ETableColumnTypes;\n protected readonly filterOperators: typeof EFilterOperatorType = EFilterOperatorType;\n\n /** Indicates is mobile view */\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n public readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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<TNullable<ISortModel<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<IFilterModel<KEY>[], IFilterModel<KEY>[]> = input<\n IFilterModel<KEY>[],\n IFilterModel<KEY>[]\n >([], {\n transform: (value: IFilterModel<KEY>[]) => transformArrayInput(value),\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<ISortModel<SORT_PROPERTY>> = output<ISortModel<SORT_PROPERTY>>();\n /** Filter change output action */\n public readonly filterChange: OutputEmitterRef<IFilterModel<KEY>[]> = output<IFilterModel<KEY>[]>();\n\n /** Columns config for table */\n public columns: Signal<Array<ITable.Column<ENTITY_TYPE>>> = computed(() => this.#tableConfigService.tableConfig().columns);\n\n /** Custom cells template */\n public readonly customCellsTpl: Signal<TNullable<RtuiCustomTableCellsDirective<ENTITY_TYPE>>> =\n contentChild(RtuiCustomTableCellsDirective);\n /** Row actions template */\n public readonly rowActionsTpl: Signal<\n TNullable<\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<TNullable<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<TNullable<number>> = signal(null);\n\n public ngAfterViewChecked(): void {\n this.#setPaddingHelperWidth();\n }\n\n /**\n * Sort change output action.\n *\n * Имя колонки приходит строкой, а наружу уходит ключом домена. Приведение здесь принимало\n * любую строку: колонка, которой в наборе нет, уезжала потребителю законным значением, и\n * ни сборка, ни типы этого не видели. Сверяется оно с тем же набором колонок, который\n * рисует таблица, — второго списка имён у неё нет; несовпавшее не отдаётся вовсе.\n */\n public onSortChange(sortModel: ISortModel<string>): void {\n const known: ISortModel<SORT_PROPERTY> | null = this.#sortOfKnownColumn(sortModel);\n\n if (known !== null) {\n this.sortChange.emit(known);\n }\n }\n\n /** Модель сортировки с ключом домена — либо `null`, если такой колонки у таблицы нет. */\n #sortOfKnownColumn(sortModel: ISortModel<string>): ISortModel<SORT_PROPERTY> | null {\n const names: Array<string> = this.columns().map((column: ITable.Column<ENTITY_TYPE>) => String(column.propName));\n\n if (!names.includes(sortModel.propertyName)) {\n return null;\n }\n\n return { ...sortModel, propertyName: sortModel.propertyName as SORT_PROPERTY };\n }\n\n /** Filter change output action */\n public onFilterChange(filterModel: IFilterModel<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: TNullable<HTMLElement> = this.rowActionsHeaderPaddingHelper()?.nativeElement;\n const paddingEl: TNullable<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\" />\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 { IPageModel } from '@rt-tools/utils';\n\nexport const DEFAULT_PAGE_SIZE: number = 20;\n\nexport const DEFAULT_PAGE_MODEL: Readonly<IPageModel> = 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 ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n InputSignal,\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, BreakpointService, ElemDirective, ModDirective, WINDOW } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isNumber, IPageModel } from '@rt-tools/utils';\nimport { DEFAULT_PAGE_SIZE } from '../../util/default-pagination';\n\nconst BEM_BLOCK: string = 'rtui-pagination';\n\n@Component({\n selector: 'rtui-pagination',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-pagination.component.html',\n styleUrls: ['./rtui-pagination.component.scss'],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, BlockDirective, ElemDirective, ModDirective],\n})\nexport class RtuiPaginationComponent implements OnInit, AfterViewInit {\n readonly #injector: Injector = inject(Injector);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #fb: FormBuilder = inject(FormBuilder);\n readonly #windowRef: Window = inject(WINDOW);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n\n /** Current Page Model */\n public currentPageModel: InputSignal<IPageModel> = input.required();\n\n /** Output action when Page Model changed */\n public readonly pageModelChange: OutputEmitterRef<Partial<IPageModel>> = output<Partial<IPageModel>>();\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<TNullable<IPageModel>> = 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<TNullable<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 } else {\n // Ширина порога не пересекла — признак усечения остаётся прежним.\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: TNullable<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 currentTotal: number = Math.ceil(this.currentPageModel().totalCount / pageSize);\n const previousTotal: number = Math.ceil(this.currentPageModel().totalCount / this.currentPageModel().pageSize);\n const correction: number = Math.floor(\n ((previousTotal - this.currentPageModel().pageNumber) * this.currentPageModel().pageSize) / pageSize\n );\n\n this.pageModelChange.emit({ pageNumber: currentTotal - 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((_value: number | string, index: number) => index + 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: TNullable<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() }\">\n <div rtBlock=\"paging\" [rtMod]=\"{ clipped: isContentClipped() }\">\n <div\n rtElem=\"item\"\n role=\"button\"\n tabindex=\"0\"\n [rtMod]=\"{ enabled: 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 (narrow()) {\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() }\">\n @if (!narrow()) {\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","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector-list-actions';\n\n@Component({\n selector: 'rtui-dynamic-selector-list-actions',\n host: { class: BEM_BLOCK },\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, ModDirective, MatIconButton, MatTooltip],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiDynamicSelectorListActionsComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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]=\"narrow()\"\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]=\"narrow()\"\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, computed, Directive, inject, input, InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { transformStringInput } from '@rt-tools/utils';\nimport { BreakpointService } from '@rt-tools/core';\n\nimport { IRtUiConfig, RT_UI_CONFIG } from '../../config';\n\n/** Вид поля, с которым семейство рисовалось до того, как настройка появилась. */\nconst DEFAULT_APPEARANCE: MatFormFieldAppearance = 'fill';\n\n@Directive()\nexport abstract class RtuiDynamicSelectorsDirective {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n /** App-wide defaults; the resolution order is: instance input → `components.dynamicSelectors` → library default. */\n readonly #config: IRtUiConfig.Config = inject(RT_UI_CONFIG);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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 /**\n * Material elements appearance.\n *\n * Пустота умолчанием, а не прежнее значение: значение, оставленное умолчанием входа, побеждает\n * настройку всегда — вход задан, и цепочка разрешения на нём кончается, а настройка не\n * срабатывает ни разу и выглядит сломанной.\n */\n public appearance: InputSignal<MatFormFieldAppearance | undefined> = input<MatFormFieldAppearance | undefined>(undefined);\n\n /**\n * Вид поля, с которым семейство рисуется: вход на месте, потом раздел настройки, потом\n * умолчание кита.\n *\n * Считается один раз здесь, а шаблоны читают готовое: повторённая в каждом из пяти шаблонов\n * семейства, эта цепочка разъехалась бы с настройкой в первом же месте, куда забыли заглянуть.\n */\n public readonly resolvedAppearance: Signal<MatFormFieldAppearance> = computed(\n (): MatFormFieldAppearance => this.appearance() ?? this.#config.components?.dynamicSelectors?.appearance ?? DEFAULT_APPEARANCE\n );\n}\n","export enum EToggleSizeType {\n SM = 'sm',\n MD = 'md',\n}\n\nexport type TToggleSizeType = EToggleSizeType.SM | EToggleSizeType.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, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { BreakpointService } from '@rt-tools/core';\nimport { EToggleSizeType, TToggleSizeType } from './toggle-size.type.enum';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nconst BEM_BLOCK: string = 'rtui-toggle';\n\n@Component({\n selector: 'rtui-toggle',\n host: { class: BEM_BLOCK },\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 ModDirective,\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 /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<TNullable<boolean>> = this.#breakpointService.isMobile;\n\n public formControl: FormControl<boolean> = new FormControl<boolean>(false, { nonNullable: true });\n\n public label: InputSignal<TNullable<string>> = input();\n public tooltip: InputSignal<string> = input('');\n public size: InputSignal<TToggleSizeType> = input<TToggleSizeType>(EToggleSizeType.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 #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() || narrow() || 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 computed,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport {\n BreakStringPipe,\n DeviceDetectorService,\n EntityToStringPipe,\n OSTypes,\n RtIconOutlinedDirective,\n RtScrollDirective,\n} from '@rt-tools/core';\nimport { RtuiSpinnerComponent } from '../../../spinner';\nimport { RtuiClearButtonComponent } from '../../../table/components/clear-search-button/rtui-clear-button.component';\nimport { RtuiToggleComponent } from '../../../toggle';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nconst BEM_BLOCK: string = 'rtui-multi-selector-popup';\n\n@Component({\n selector: 'rtui-multi-selector-popup',\n host: { class: BEM_BLOCK },\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 ModDirective,\n RtScrollDirective,\n RtIconOutlinedDirective,\n\n // components\n RtuiClearButtonComponent,\n RtuiToggleComponent,\n RtuiSpinnerComponent,\n EntityToStringPipe,\n ],\n providers: [BreakpointService, DeviceDetectorService],\n})\nexport class RtuiMultiSelectorPopupComponent<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>>\n implements OnInit, AfterViewInit\n{\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n readonly #injector: Injector = inject(Injector);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n readonly #deviceService: DeviceDetectorService = inject(DeviceDetectorService);\n\n protected readonly oSTypes: typeof OSTypes = OSTypes;\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<TNullable<boolean>, boolean> = input<TNullable<boolean>, boolean>(false, {\n transform: booleanAttribute,\n });\n /** Indicates local search is used */\n public isLocalSearch: InputSignalWithTransform<TNullable<boolean>, boolean> = input<TNullable<boolean>, boolean>(true, {\n transform: booleanAttribute,\n });\n /** Keys of a pinned group kept at the top of the list — a trailing divider is drawn after the last visible one */\n public pinnedKeys: InputSignalWithTransform<ENTITY[KEY][], ENTITY[KEY][]> = input<ENTITY[KEY][], ENTITY[KEY][]>([], {\n transform: (value: unknown) => transformArrayInput(value),\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<TNullable<ElementRef<HTMLInputElement>>> =\n viewChild<ElementRef<HTMLInputElement>>('searchInputTpl');\n\n /** Form control for search */\n public readonly searchControl: FormControl<TNullable<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 /** Key of the last visible pinned option — its row gets a trailing divider */\n public readonly lastSeparatedKey: Signal<TNullable<ENTITY[KEY]>> = computed(() => {\n const keys: ENTITY[KEY][] = this.pinnedKeys();\n\n if (!keys.length) {\n return null;\n }\n\n const list: ENTITY[] = this.filteredEntities();\n\n for (let i: number = list.length - 1; i >= 0; i--) {\n const key: ENTITY[KEY] = list[i][this.keyExp()];\n\n if (keys.includes(key)) {\n return key;\n }\n }\n\n return null;\n });\n\n public ngOnInit(): void {\n /** Clear previous temp selection */\n this.temporarySelectAction.emit([]);\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: TNullable<string>): void => {\n const selectedEntities: ENTITY[] = this.entitiesToSelect().filter((el: ENTITY) =>\n 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(\n (el: ENTITY) =>\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 } else if (this.isLocalSearch()) {\n this.filteredEntities.set(this.entitiesToSelect());\n } else if (value !== null && typeof value === 'string') {\n this.searchAction.emit(value);\n } else {\n // Строка пуста, а поиск не местный — запрашивать нечего.\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(\n (el: ENTITY) => !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 * Reset search term left over from a previous open. Deferred from `ngOnInit` to\n * `ngAfterViewInit` because emitting `searchAction` synchronously in `ngOnInit`\n * triggers a parent state update during the same change-detection tick in which\n * the host `cdkConnectedOverlay` is attaching. The cascade detaches/reattaches\n * the overlay's origin reference before its position strategy has computed the\n * connected coordinates, leaving the popup pinned at (0, 0). By the time\n * `ngAfterViewInit` runs the overlay is positioned, so a downstream re-fetch is\n * safe.\n */\n if (this.searchTerm()) {\n this.onClearSearch();\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 => el !== entity[this.keyExp()])\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 (!narrow()) {\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 (narrow()) {\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>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 [rtMod]=\"{ separated: entity[keyExp()] === lastSeparatedKey() }\"\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: entity[keyExp()] === lastSeparatedKey() }\"\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\" (click)=\"onClose()\">Cancel</button>\n\n <button mat-flat-button type=\"button\" [disabled]=\"!selectionControl.value?.length || loading()\" (click)=\"onSubmit()\">SUBMIT</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, ModDirective } from '@rt-tools/core';\nimport { transformStringInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector-placeholder';\n\n@Component({\n selector: 'rtui-dynamic-selector-placeholder',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-dynamic-selector-placeholder.component.html',\n styleUrls: ['./rtui-dynamic-selector-placeholder.component.scss'],\n imports: [MatIcon, MatButton, CdkOverlayOrigin, RtIconOutlinedDirective, BlockDirective, ElemDirective, ModDirective],\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 [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 computed,\n contentChild,\n Directive,\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 { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { BlockDirective, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformArrayInput } from '@rt-tools/utils';\nimport { BreakStringPipe, EntityToStringPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtHideTooltipDirective } from '../../../tooltip';\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/** Directive for custom item title template */\n@Directive({\n selector: '[rtuiDynamicSelectorItemTitleDirective]',\n})\nexport class RtuiDynamicSelectorItemTitleDirective {}\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector-selected-list';\n\n@Component({\n selector: 'rtui-dynamic-selector-selected-list',\n host: { class: BEM_BLOCK },\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 ModDirective,\n\n // pipes\n EntityToStringPipe,\n BreakStringPipe,\n TitleCasePipe,\n ],\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiDynamicSelectorSelectedListComponent<ENTITY extends Record<string, unknown>, KEY extends Extract<keyof ENTITY, string>> {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n protected readonly editedItemIndex: WritableSignal<TNullable<number>> = signal(null);\n\n public readonly inputRef: Signal<TNullable<MatInput>> = viewChild(MatInput);\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 /**\n * Material elements appearance.\n *\n * Значение приходит уже разрешённым — от того, кто список рисует: вложенный компонент,\n * разрешающий вид заново, заводит свою цепочку, и вид поля внутри списка отличается от вида\n * поля под ним. Прежнее умолчание оставлено на случай одиночного употребления списка.\n */\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<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorItemAdditionalControlDirective,\n {\n read: TemplateRef,\n }\n );\n /** Custom item title template */\n public readonly itemTitleTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorItemTitleDirective,\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: TNullable<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]=\"narrow()\">\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 if (itemTitleTpl()) {\n <ng-container *ngTemplateOutlet=\"itemTitleTpl() || null; context: { $implicit: entity }\" />\n } @else {\n <span\n #titleTpl\n rtElem=\"item-title\"\n matTooltipPosition=\"above\"\n [rtHideTooltipDirective]=\"titleTpl\"\n [isTooltipShown]=\"!narrow()\"\n [matTooltip]=\"\n useNameBreaking()\n ? (entity[displayExp()] | entityToString | breakString)\n : (entity[displayExp()] | entityToString)\n \"\n [matTooltipDisabled]=\"narrow()\">\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]=\"narrow()\"\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]=\"narrow()\"\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]=\"narrow()\"\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, BreakpointService, ConcatClassesPipe, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual, areArraysEqualUnordered, checkIsEntityInArrayByKey, sortByAlphabet, transformArrayInput } from '@rt-tools/utils';\nimport { OVERLAY_POSITIONS, RtEscapeKeyDirective } from '@rt-tools/core';\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 RtuiDynamicSelectorItemTitleDirective,\n RtuiDynamicSelectorSelectedListComponent,\n} from '../selected-list/rtui-dynamic-selector-selected-list.component';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\n/**\n * Порядок ключей для сверки двух списков.\n *\n * Какой именно порядок, значения не имеет — оба списка выстраиваются одним и тем же, и сравнивают их\n * на равенство. Важно лишь, чтобы порядок был один: умолчание `sort()` зависит от вида значения и на\n * числах даёт лексикографический.\n */\nfunction compareKeys(a: unknown, b: unknown): number {\n return String(a).localeCompare(String(b));\n}\n\ninterface IFormModel {\n autocompleteControl: FormControl<TNullable<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/** Directive for custom item title template, projected from rtui-dynamic-selector down to selected-list */\n@Directive({\n selector: '[rtuiDynamicSelectorItemTitleProjectionDirective]',\n})\nexport class RtuiDynamicSelectorItemTitleProjectionDirective {}\n\nconst BEM_BLOCK: string = 'rtui-dynamic-selector';\n\n@Component({\n selector: 'rtui-dynamic-selector',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-dynamic-selector.component.html',\n styleUrls: ['./rtui-dynamic-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ConcatClassesPipe,\n ReactiveFormsModule,\n NgTemplateOutlet,\n CdkOverlayOrigin,\n CdkConnectedOverlay,\n\n // directives\n BlockDirective,\n ElemDirective,\n RtEscapeKeyDirective,\n RtuiDynamicSelectorItemAdditionalControlDirective,\n RtuiDynamicSelectorItemTitleDirective,\n\n // components\n RtuiMultiSelectorPopupComponent,\n RtuiDynamicSelectorPlaceholderComponent,\n RtuiDynamicSelectorListActionsComponent,\n RtuiDynamicSelectorSelectedListComponent,\n ],\n providers: [\n BreakpointService,\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<IFormModel> = this.#fb.group<IFormModel>({\n autocompleteControl: this.#fb.control<TNullable<string>>(null), // used only for UI\n });\n /** Target element for overlay selector */\n public selectedOverlayTrigger: TNullable<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 /** Custom sort function for entities list in popup */\n public sortFn: InputSignal<TNullable<(a: ENTITY, b: ENTITY) => number>> = input<TNullable<(a: ENTITY, b: ENTITY) => number>>(null);\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 this.#selectedEntityIds()\n .map((id: ENTITY[KEY]) => this.entities().find((el: ENTITY) => id === el[this.keyExp()]))\n .filter((el: TNullable<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 () => !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 () => areArraysEqual(this.#selectedEntityIds(), this.#initialEntityIds()) && !this.additionalControlChanged()\n );\n /** Indicates clear selected button is disabled */\n public readonly isClearButtonDisabled: Signal<boolean> = computed(\n () => 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 this.#entities()\n .filter((entity: ENTITY) => !checkIsEntityInArrayByKey<ENTITY, KEY>(this.selectedEntities(), entity, this.keyExp()))\n .filter(\n (entity: ENTITY) =>\n (typeof entity[this.displayExp()] === 'string' || typeof entity[this.displayExp()] === 'number') &&\n entity[this.displayExp()]?.toString().toLowerCase().includes(this.#autocompleteControlValue().toLowerCase())\n )\n .sort((a: ENTITY, b: ENTITY) => {\n const sortFn: TNullable<(a: ENTITY, b: ENTITY) => number> = this.sortFn();\n\n return sortFn ? sortFn(a, b) : sortByAlphabet(a, b, this.displayExp());\n })\n );\n\n /** Additional control for entity */\n public readonly additionalControlTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorAdditionalControlDirective,\n {\n read: TemplateRef,\n }\n );\n /** Custom item title template */\n public readonly itemTitleTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY }>>> = contentChild(\n RtuiDynamicSelectorItemTitleProjectionDirective,\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: TNullable<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(compareKeys);\n const selectedEntityIdsForCompare: ENTITY[KEY][] = [...selectedEntityIds].sort(compareKeys);\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) => entity[this.keyExp()]);\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 } else {\n // Форма уже собрана, а список выбранного не менялся — сообщать ей нечего.\n }\n },\n { injector: this.#injector }\n );\n\n /** Set list of values */\n effect(\n () => {\n if (Array.isArray(this.entities()) && !areArraysEqual(this.entities(), this.#entities())) {\n this.#entities.set(this.entities());\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) && value.length) {\n this.#selectedEntityIds.set(value);\n this.#initialEntityIds.set(value);\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: TNullable<ENTITY> = this.entities().find((entity: ENTITY) => entity[this.keyExp()] === keyValue);\n\n if (!entity) {\n return;\n }\n\n const isRemoveSelected: boolean = !!this.selectedEntities().find(\n (selectedEntity: ENTITY) => selectedEntity[this.keyExp()] === keyValue\n );\n\n if (isRemoveSelected) {\n this.#selectedEntityIds.update((selectedEntityIds: ENTITY[KEY][]) =>\n selectedEntityIds.filter((id: ENTITY[KEY]) => id !== keyValue)\n );\n } else {\n this.#selectedEntityIds.update((selectedEntityIds: ENTITY[KEY][]) => [...selectedEntityIds, entity[this.keyExp()]]);\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][]) => list.filter((el: ENTITY[KEY]) => this.readonlyEntitiesKeys().includes(el)));\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: TNullable<ENTITY> = this.entities().find((entity: ENTITY) => entity[this.keyExp()] === values[0]);\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 [appearance]=\"resolvedAppearance()\"\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\n @if (itemTitleTpl()) {\n <ng-container *rtuiDynamicSelectorItemTitleDirective=\"let entity\">\n <ng-template *ngTemplateOutlet=\"itemTitleTpl() || 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]=\"['rtui-btn', 'rtui-btn-secondary-text'] | concatClasses\"\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]=\"resolvedAppearance()\"\n [keyExp]=\"keyExp()\"\n [displayExp]=\"displayExp()\"\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 [disabled]=\"disabled()\"\n [isResetButtonDisabled]=\"isResetButtonDisabled()\"\n [isClearButtonDisabled]=\"isClearButtonDisabled()\"\n (resetAction)=\"resetList()\"\n (clearAction)=\"clearList()\" />\n</ng-template>\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 '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual } from '@rt-tools/utils';\nimport { BreakpointService, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { ASIDE_REF, AsideRef } from '../../../aside/aside.types';\nimport { RtuiAsideContainerComponent, RtuiAsideContainerHeaderDirective } from '../../../aside';\nimport {\n RtuiDynamicSelectorAdditionalControlDirective,\n RtuiDynamicSelectorComponent,\n} from '../../../dynamic-selectors/components/dynamic-selector/rtui-dynamic-selector.component';\nimport { RtuiToggleComponent } from '../../../toggle';\nimport { ITable } from '../../util/table-column.interface';\nimport { comparePropNames } from '../../util/compare-prop-names';\n\nconst BEM_BLOCK: string = 'rtui-test-aside';\n\n@Component({\n selector: 'rtui-test-aside',\n host: { class: BEM_BLOCK },\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 /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpointService.isMobile());\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 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.toSorted(comparePropNames), currentValues.toSorted(comparePropNames));\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: TNullable<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.toSorted(\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 list.map((el: ITable.Column<ENTITY_TYPE>) => (entity.propName === el.propName ? { ...el, hidden: !el.hidden } : el))\n );\n }\n}\n","<rtui-aside-container\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 [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]=\"narrow()\"\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 computed,\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 { Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, exhaustMap, filter, map } from 'rxjs/operators';\n\nimport { BlockDirective, ConcatClassesPipe, ElemDirective, ModDirective, PlatformService, WINDOW } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { isString, IPageModel, transformStringInput } from '@rt-tools/utils';\nimport { BreakpointService, RtIconOutlinedDirective } from '@rt-tools/core';\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 } from '../../util/table-column.interface';\nimport { RtTableConfigService } from '../../util/table-config.service';\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\nconst BEM_BLOCK: string = 'rtui-table-container';\n\n@Component({\n selector: 'rtui-table-container',\n host: { class: BEM_BLOCK },\n templateUrl: './table-container.component.html',\n styleUrls: ['./table-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ConcatClassesPipe,\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 #breakpoints: BreakpointService = inject(BreakpointService);\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: TNullable<CSSStyleDeclaration> = this.#documentRef?.documentElement?.style;\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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<IPageModel> = input.required();\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<TNullable<string>, TNullable<string>> = input<TNullable<string>, TNullable<string>>('', {\n transform: (value: TNullable<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<TNullable<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<IPageModel>> = output<Partial<IPageModel>>();\n /** Search change output action */\n public readonly searchChange: OutputEmitterRef<TNullable<string>> = output<TNullable<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<TNullable<TemplateRef<Type<unknown>>>> = contentChild(RtuiTableToolbarSelectorsDirective, {\n read: TemplateRef,\n });\n /** Toolbar actions template */\n public readonly toolbarActionsTpl: Signal<TNullable<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<TNullable<string>> = new FormControl(null);\n\n /** Нажатия на «настроить столбцы»: сама панель открывается объявленным потоком в `ngOnInit`. */\n readonly #openConfigAsideSource: Subject<void> = new Subject<void>();\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 /**\n * Открытие панели настройки столбцов.\n *\n * `exhaustMap`: пока панель открыта, второе нажатие открывать нечего — прежде каждое\n * заводило свою подписку, и настройку сохраняла та панель, что закрылась последней.\n */\n this.#openConfigAsideSource\n .pipe(\n exhaustMap((): Observable<TNullable<ITable.Config.Data<ENTITY_TYPE>>> =>\n this.#asideService.open<\n RtTableConfigAsideComponent<ENTITY_TYPE>,\n ITable.Config.Data<ENTITY_TYPE>,\n ITable.Config.Data<ENTITY_TYPE>\n >(RtTableConfigAsideComponent, 'right', this.tableConfig())\n ),\n filter(Boolean),\n takeUntilDestroyed(this.#destroyRef)\n )\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 this.searchControl.valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n map((value: TNullable<string>) => (!!value ? value.trim() : value)),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((value: TNullable<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<IPageModel>): 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.#openConfigAsideSource.next();\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: TNullable<string> = this.#sanitizer.sanitize(0, vertical);\n const safeHorizontalValue: TNullable<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 matTooltip=\"Clear filters\"\n matTooltipPosition=\"below\"\n rtElem=\"toolbar-action\"\n [matTooltipDisabled]=\"narrow()\"\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 matTooltip=\"Refresh\"\n matTooltipPosition=\"below\"\n rtElem=\"toolbar-action\"\n [matTooltipDisabled]=\"narrow()\"\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 matTooltip=\"Table configuration\"\n matTooltipPosition=\"below\"\n rtElem=\"toolbar-action\"\n [matTooltipDisabled]=\"narrow()\"\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>\n <rtui-pagination [currentPageModel]=\"pageModel()\" (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 computed,\n contentChild,\n Directive,\n inject,\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 { TNullable } from '@rt-tools/utils';\nimport { IFilterModel, IPageModel, ISortModel, transformArrayInput, transformStringInput } from '@rt-tools/utils';\nimport {\n RtuiCustomTableCellsDirective,\n RtuiTableAdditionalRowActionsDirective,\n RtuiTableComponent,\n RtuiTableRowActionsDirective,\n} from './components/table/rtui-table.component';\nimport {\n RtuiTableContainerComponent,\n RtuiTableToolbarActionsDirective,\n RtuiTableToolbarSelectorsDirective,\n} from './components/table-container/table-container.component';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { BreakpointService } from '@rt-tools/core';\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\nconst BEM_BLOCK: string = 'rtui-dynamic-list';\n\n@Component({\n selector: 'rtui-dynamic-list',\n host: { class: BEM_BLOCK },\n templateUrl: './dynamic-list.component.html',\n styleUrls: ['./dynamic-list.component.scss'],\n providers: [BreakpointService],\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 readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Table config storage key */\n public tableConfigStorageKey: InputSignalWithTransform<string, unknown> = input.required<string, unknown>({\n transform: transformStringInput,\n });\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n public readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\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<IPageModel> = input.required();\n /** Current search term from store */\n public searchTerm: InputSignal<TNullable<string>> = input.required();\n /** Current sort model from store */\n public currentSortModel: InputSignal<TNullable<ISortModel<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<IFilterModel<KEY>[], IFilterModel<KEY>[]> = input<\n IFilterModel<KEY>[],\n IFilterModel<KEY>[]\n >([], {\n transform: (value: IFilterModel<KEY>[]) => transformArrayInput(value),\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<ISortModel<NonNullable<KEY>>> = output<ISortModel<NonNullable<KEY>>>();\n /** Page model change output action */\n public readonly pageModelChange: OutputEmitterRef<Partial<IPageModel>> = output<Partial<IPageModel>>();\n /** Search change output action */\n public readonly searchChange: OutputEmitterRef<TNullable<string>> = output<TNullable<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<IFilterModel<KEY>[]> = output<IFilterModel<KEY>[]>();\n\n /** Toolbar selectors template */\n public readonly toolbarSelectorsTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(\n RtuiDynamicListToolbarSelectorsDirective,\n {\n read: TemplateRef,\n }\n );\n /** Toolbar actions template */\n public readonly toolbarActionsTpl: Signal<TNullable<TemplateRef<Type<unknown>>>> = contentChild(\n RtuiDynamicListToolbarActionsDirective,\n {\n read: TemplateRef,\n }\n );\n /** Custom cells template */\n public readonly customCellsTpl: Signal<TNullable<RtuiDynamicListCustomTableCellsDirective<{ $implicit: ENTITY_TYPE }>>> = contentChild(\n RtuiDynamicListCustomTableCellsDirective\n );\n /** Row actions template */\n public readonly rowActionsTpl: Signal<TNullable<TemplateRef<{ $implicit: ENTITY_TYPE }>>> = contentChild(\n RtuiDynamicListRowActionsDirective,\n {\n read: TemplateRef,\n }\n );\n /** Additional row actions template */\n public readonly additionalRowActionsTpl: Signal<TNullable<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<TNullable<RtuiTableContainerComponent<ENTITY_TYPE>>> =\n viewChild<RtuiTableContainerComponent<ENTITY_TYPE>>(RtuiTableContainerComponent);\n /** Table selector for selectors directive usage */\n public readonly tableTpl: Signal<TNullable<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: TNullable<string>): void {\n this.searchChange.emit(value);\n }\n\n /** Sort change output action */\n public onSortChange(sortModel: ISortModel<NonNullable<KEY>>): void {\n this.sortChange.emit(sortModel);\n }\n\n /** Page model change output action */\n public onPageModelChange(pageModel: Partial<IPageModel>): void {\n this.pageModelChange.emit(pageModel);\n }\n\n /** Filter change output action */\n public onFilterChange(filterModel: IFilterModel<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 [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 [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 { booleanAttribute, Directive, input, InputSignalWithTransform, signal, WritableSignal } from '@angular/core';\n\nimport { transformArrayInput } from '@rt-tools/utils';\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(\n (el: ENTITY_TYPE, index: number, self: ENTITY_TYPE[]) =>\n 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 { TNullable } from '@rt-tools/utils';\n\nimport { RtuiTableContainerComponent } from '../components/table-container/table-container.component';\nimport { RtuiTableComponent } from '../components/table/rtui-table.component';\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 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 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 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 const containerTpl: TNullable<RtuiTableContainerComponent<ENTITY_TYPE>> = this.#dynamicListRef.tableContainerTpl();\n\n if (containerTpl?.onToggleAllEntities) {\n containerTpl.onToggleAllEntities = (checked: boolean): void => 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 const tableTpl: TNullable<RtuiTableComponent<ENTITY_TYPE, SORT_PROPERTY, KEY>> = this.#dynamicListRef.tableTpl();\n\n if (tableTpl) {\n tableTpl.isSelectorsColumnShown.set(true);\n tableTpl.onToggleEntity = (entity: ENTITY_TYPE, checked: boolean): void => this.toggleEntity(entity, checked);\n 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/table/rtui-table.component';\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 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// functions\nexport * from './compare-prop-names';\n\n// models\nexport * from './default-pagination';\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 { Directive, ElementRef, inject, OnInit } from '@angular/core';\n\nimport { PlatformService } from '@rt-tools/core';\nimport { RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE } from '../util/table-stop-row-click-attribute.const';\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 { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, inject, input, InputSignalWithTransform, TemplateRef } from '@angular/core';\nimport { DomSanitizer, SafeValue } from '@angular/platform-browser';\n\nimport { TNullable } from '@rt-tools/utils';\nimport { isString } from '@rt-tools/utils';\n\nconst BEM_BLOCK: string = 'rtui-popover-container';\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 host: { class: BEM_BLOCK },\n})\nexport class RtuiPopoverContainerComponent {\n readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n public popoverTemplate: InputSignalWithTransform<TNullable<TemplateRef<HTMLElement>>, TNullable<TemplateRef<HTMLElement>>> = input<\n TNullable<TemplateRef<HTMLElement>>,\n TNullable<TemplateRef<HTMLElement>>\n >(undefined, {\n transform: (value: TNullable<TemplateRef<HTMLElement>>) => value ?? null,\n });\n\n public popoverClass: InputSignalWithTransform<TNullable<string>, string | undefined> = input<TNullable<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 { PlatformService, WINDOW } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { RtuiPopoverContainerComponent } from './rtui-popover-container.component';\n\nexport type TMenuItemTrigger = '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<TMenuItemTrigger, TMenuItemTrigger> = input<TMenuItemTrigger, TMenuItemTrigger>('hover', {\n transform: (value: unknown) => (value === 'click' ? 'click' : 'hover'),\n });\n public template: InputSignalWithTransform<TNullable<TemplateRef<HTMLElement>>, TNullable<TemplateRef<HTMLElement>>> = input<\n TNullable<TemplateRef<HTMLElement>>,\n TNullable<TemplateRef<HTMLElement>>\n >(null, {\n transform: (value: TNullable<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 '@rt-tools/core';\nimport { BreakpointService, EmptyToDashPipe, RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtPopoverDirective } from '../../../popover/rt-popover.directive';\nimport { IRtActionBar } from '../../action-bar-config.interface';\n\nconst BEM_BLOCK: string = 'rtui-action-bar';\n\n@Component({\n selector: 'rtui-action-bar',\n host: { class: BEM_BLOCK },\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 <button type=\"button\" rtElem=\"action\" [ngStyle]=\"btn?.styles\" (click)=\"onAction(btn)\">\n <ng-template *ngTemplateOutlet=\"buttonContentTpl; context: { $implicit: btn }\" />\n </button>\n }\n }\n </div>\n }\n\n <button type=\"button\" 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 </button>\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 <button type=\"button\" rtElem=\"action\" (click)=\"onAction(btn)\">\n <ng-template *ngTemplateOutlet=\"buttonContentTpl; context: { $implicit: btn }\" />\n </button>\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 {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Signal,\n WritableSignal,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { IRtActionBar } from '../../action-bar-config.interface';\nimport { RtActionBarService } from '../../rt-action-bar.service';\nimport { RtuiActionBarComponent } from '../bar/rtui-action-bar.component';\n\nconst BEM_BLOCK: string = 'rtui-action-bar-container';\n\n/**\n * Сколько панель держится в разметке после закрытия — ровно длительность ухода из стилей.\n *\n * Число живёт здесь, а не только в стилях: разметка снимает панель сама, и, разойдясь с\n * правилом стилей, она обрывает уход на полпути.\n */\nconst LEAVE_DURATION_MS: number = 300;\n\n@Component({\n selector: 'rtui-action-bar-container',\n host: { class: BEM_BLOCK },\n templateUrl: 'rtui-action-bar-container.component.html',\n styleUrls: ['rtui-action-bar-container.component.scss'],\n imports: [RtuiActionBarComponent, BlockDirective, ElemDirective, ModDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RtuiActionBarContainerComponent {\n readonly #actionBarService: RtActionBarService = inject(RtActionBarService);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Уходит ли панель прямо сейчас: разметка держит её, пока правило стилей не доиграет. */\n readonly #leaving: WritableSignal<boolean> = signal(false);\n\n #leaveTimer: ReturnType<typeof setTimeout> | null = null;\n\n public readonly config: Signal<IRtActionBar.Config> = this.#actionBarService.config;\n\n /** Выбрано ли что-нибудь: этим панель и открывается. */\n public readonly opened: Signal<boolean> = computed(() => !!this.config()?.selected);\n\n /** Стоит ли панель в разметке: она остаётся в ней и на время ухода. */\n public readonly shown: Signal<boolean> = computed(() => this.opened() || this.#leaving());\n\n public readonly leaving: Signal<boolean> = this.#leaving.asReadonly();\n\n constructor() {\n effect(() => {\n const opened: boolean = this.opened();\n\n untracked(() => {\n this.#clearLeaveTimer();\n\n if (opened) {\n this.#leaving.set(false);\n\n return;\n }\n\n if (!this.#leaving() && this.shown()) {\n this.#startLeaving();\n }\n });\n });\n\n this.#destroyRef.onDestroy(() => this.#clearLeaveTimer());\n }\n\n public closeBar(): void {\n this.#actionBarService.closeActionBar();\n }\n\n /** Панель остаётся в разметке на время ухода и снимается по его концу. */\n #startLeaving(): void {\n this.#leaving.set(true);\n this.#leaveTimer = setTimeout(() => {\n this.#leaving.set(false);\n this.#leaveTimer = null;\n }, LEAVE_DURATION_MS);\n }\n\n #clearLeaveTimer(): void {\n if (this.#leaveTimer !== null) {\n clearTimeout(this.#leaveTimer);\n this.#leaveTimer = null;\n }\n }\n}\n","<ng-container rtBlock=\"rtui-action-bar-container\">\n @if (shown()) {\n <rtui-action-bar rtElem=\"bar\" [rtMod]=\"{ leaving: leaving() }\" [config]=\"config()\" (closeAction)=\"closeBar()\" />\n }\n</ng-container>\n","import { Provider } from '@angular/core';\n\nimport { RtActionBarService } from './action-bar';\nimport { RtAsideService } from './aside';\nimport { IRtUiConfig, RT_UI_CONFIG } from './config';\n\n/**\n * Returns a set of the necessary dependency injection providers for managing the UI.\n *\n * Optionally accepts an application-wide {@link RT_UI_CONFIG UI configuration} with\n * global theme/design defaults and per-component settings:\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtUi({\n * global: { theme: 'auto', design: 'custom' },\n * components: { button: { design: 'material' } },\n * })\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtUi(config?: IRtUiConfig.Config): Provider[] {\n return [RtAsideService, RtActionBarService, { provide: RT_UI_CONFIG, useValue: config ?? {} }];\n}\n","import { ChangeDetectionStrategy, Component, Signal, computed, inject } 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 '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { IRtSnackBar } from './snack-bar-config.interface';\n\nconst BEM_BLOCK: string = 'rtui-snack-bar';\n\n@Component({\n selector: 'rtui-snack-bar',\n host: {\n class: BEM_BLOCK,\n '[style.--rt-snack-bar-progress-duration]': 'progressDuration()',\n },\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\n /** Сколько идёт полоса: то же время, что живёт само сообщение. */\n public readonly progressDuration: Signal<string> = computed(() => `${this.data.duration ?? 0}ms`);\n\n public dismiss(): void {\n this.#snackBarRef.dismissWithAction();\n }\n\n public close(): void {\n this.#snackBarRef.dismiss();\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 rtElem=\"progress\" (animationend)=\"close()\"></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","export enum EInfoBadgeSize {\n LARGE = 'l',\n MEDIUM = 'm',\n SMALL = 's',\n}\n\nexport type TInfoBadgeSizeType = EInfoBadgeSize.LARGE | EInfoBadgeSize.MEDIUM | EInfoBadgeSize.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","import { NgStyle } from '@angular/common';\nimport {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n InputSignal,\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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { EPosition } from '@rt-tools/core';\nimport { TInfoBadgeSizeType, EInfoBadgeSize } from './badge-info-enum';\nimport { TIconSideType } from './icon-side.type';\n\nconst BEM_BLOCK: string = 'rtui-info-badge';\n\n@Component({\n selector: 'rtui-info-badge',\n host: { class: BEM_BLOCK },\n templateUrl: './info-badge.component.html',\n styleUrl: './info-badge.component.scss',\n providers: [BreakpointService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatTooltip, MatIcon, NgStyle, BlockDirective, ElemDirective, ModDirective],\n})\nexport class RtuiInfoBadgeComponent implements AfterContentChecked {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n public size: InputSignal<TInfoBadgeSizeType> = input.required();\n public text: InputSignal<string> = input.required();\n public glyph: InputSignal<string> = input('');\n public iconSide: InputSignal<TIconSideType> = input<TIconSideType>(EPosition.RIGHT);\n public isFontBold: InputSignal<boolean> = input(false);\n public isTitleCollapsed: WritableSignal<boolean> = signal(false);\n public readonly contentRef: Signal<ElementRef<HTMLElement> | undefined> = viewChild('content');\n\n /** Модификаторы блока значка: ставятся директивой, а не строкой в атрибуте. */\n public readonly badgeModifiers: Signal<Record<string, boolean>> = computed(() => ({\n 'size-l': this.size() === EInfoBadgeSize.LARGE,\n 'size-m': this.size() === EInfoBadgeSize.MEDIUM,\n 'size-s': this.size() === EInfoBadgeSize.SMALL,\n bold: this.isFontBold(),\n }));\n\n public get iconStyles(): { [key: string]: string } {\n return {\n order: this.iconSide() === EPosition.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 && element.scrollWidth > element.offsetWidth) {\n this.isTitleCollapsed.set(true);\n }\n }\n}\n","<div\n rtBlock=\"c-info-badge\"\n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"above\"\n [matTooltip]=\"text()\"\n [rtMod]=\"badgeModifiers()\"\n [matTooltipDisabled]=\"!isTitleCollapsed() || narrow()\">\n <div rtElem=\"content\" #content>{{ text() }}</div>\n @if (glyph()) {\n <mat-icon [ngStyle]=\"iconStyles\">{{ glyph() }}</mat-icon>\n }\n</div>\n","export enum EInfoBadgeType {\n SUCCESS = 'success',\n INFO = 'info',\n WARNING = 'warning',\n PRIMARY = 'primary',\n DISABLED = 'disabled',\n}\n\nexport type TInfoBadgeType =\n EInfoBadgeType.SUCCESS | EInfoBadgeType.INFO | EInfoBadgeType.WARNING | EInfoBadgeType.PRIMARY | EInfoBadgeType.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 '@rt-tools/core';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\n\nconst BEM_BLOCK: string = 'rtui-file-upload';\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: BEM_BLOCK,\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 mat-button color=\"accent\" (click)=\"uploadInput.click()\">Choose file</button>\n</ng-container>\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, BreakpointService, ConcatClassesPipe, ElemDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { areArraysEqual, transformArrayInput, transformStringInput } from '@rt-tools/utils';\nimport { RtuiDynamicSelectorListActionsComponent } from '../actions/rtui-dynamic-selector-list-actions.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 { RtuiDynamicSelectorsDirective } from '../dynamic-selectors-directive';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\ninterface IFormModel {\n control: FormControl<string[]>;\n controlForUi: FormControl<TNullable<string>>;\n}\n\n/** Directive for row actions located outside a row menu button */\n@Directive({\n selector: '[rtuiDynamicInputAdditionalControlDirective]',\n})\nexport class RtuiDynamicInputAdditionalControlDirective {}\n\nconst BEM_BLOCK: string = 'rtui-dynamic-input';\n\n@Component({\n selector: 'rtui-dynamic-input',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-dynamic-input.component.html',\n styleUrls: ['./rtui-dynamic-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ConcatClassesPipe,\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 BreakpointService,\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<IFormModel> = this.#fb.group<IFormModel>({\n control: this.#fb.nonNullable.control<string[]>([]),\n controlForUi: this.#fb.control<TNullable<string>>(null), // used only for UI\n });\n\n /** Indicates is placeholder shown */\n public isPlaceholderShown: ModelSignal<TNullable<boolean>> = model<TNullable<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<TNullable<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 } else {\n // Строка пуста — ни добавлять, ни снимать нечего.\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]=\"resolvedAppearance()\"\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]=\"resolvedAppearance()\" [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\n type=\"button\"\n [class]=\"['rtui-btn', 'rtui-btn-secondary-text'] | concatClasses\"\n (click)=\"showSelectionControl()\">\n {{ buttonTitle() }}\n </button>\n }\n\n <rtui-dynamic-selector-list-actions\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 { 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, BreakpointService, ElemDirective, ModDirective } from '@rt-tools/core';\nimport { TNullable } from '@rt-tools/utils';\nimport { transformStringInput } from '@rt-tools/utils';\nimport { RtIconOutlinedDirective } from '@rt-tools/core';\nimport { RtuiFileUploadComponent } from '../../file-uploader';\nimport { RtuiSpinnerComponent } from '../../spinner';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\nexport type TImageUploadFormat = 'png' | 'jpeg' | 'webp';\n\nconst BEM_BLOCK: string = 'rtui-image-upload';\n\n@Component({\n selector: 'rtui-image-upload',\n host: { class: BEM_BLOCK },\n templateUrl: './rtui-image-upload.component.html',\n styleUrls: ['./rtui-image-upload.component.scss'],\n providers: [BreakpointService],\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 ModDirective,\n BlockDirective,\n RtuiSpinnerComponent,\n RtuiFileUploadComponent,\n RtIconOutlinedDirective,\n ],\n})\nexport class RtuiImageUploadComponent {\n readonly #breakpoints: BreakpointService = inject(BreakpointService);\n readonly #documentRef: Document = inject(DOCUMENT);\n\n readonly #formats: Record<string, TImageUploadFormat> = {\n ['png']: 'png',\n ['jpg']: 'jpeg',\n ['jpeg']: 'jpeg',\n ['webp']: 'webp',\n };\n readonly #originalMimeType: WritableSignal<string | null> = signal(null);\n\n /** Экран узкий: замер кита, и другого источника у этого признака нет. */\n protected readonly narrow: Signal<boolean> = computed(() => !!this.#breakpoints.isMobile());\n protected readonly imageFormat: Signal<TImageUploadFormat> = computed((): TImageUploadFormat => {\n const type: TNullable<string> = this.#originalMimeType();\n return this.#formats[type?.toLowerCase() || ''] || 'png';\n });\n\n public imageUrl: ModelSignal<TNullable<string>> = model.required<TNullable<string>>();\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<TNullable<File>> = signal(null);\n public tempImage: WritableSignal<TNullable<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 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]=\"narrow() || !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]=\"narrow()\"\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","export enum ERtTheme {\n LIGHT = 'light',\n DARK = 'dark',\n AUTO = 'auto',\n}\n\nexport type TRtThemeType = `${ERtTheme}`;\n\nexport const RT_THEME_STORAGE_KEY: string = 'rt-theme';\nexport const RT_DARK_CLASS: string = 'rt-dark';\nexport const RT_THEME_AUTO_CLASS: string = 'rt-theme-auto';\nexport const RT_THEME_ATTRIBUTE: string = 'data-rt-theme';\n\n/**\n * Accent roles whose `--rt-color-{role}-{0..100}` indirection rows a custom\n * color scheme may override. The semantic accent tier\n * (`--rt-bg/text/icon/border-accent-*`) derives entirely from these rows.\n */\nexport enum ERtAccentRole {\n PRIMARY = 'primary',\n INFO = 'info',\n SUCCESS = 'success',\n WARNING = 'warning',\n DANGER = 'danger',\n BRAND = 'brand',\n}\n\nexport type TRtAccentRole = `${ERtAccentRole}`;\n\n/**\n * A brand palette: per accent role, a tonal ramp mapping tone step (0–100)\n * to a CSS color. One ramp serves both light and dark (the mode picks the tone).\n * Partial ramps are allowed — unset tones keep the rt-tools defaults.\n *\n * @example\n * const teal: TRtColorSchemeRamp = {\n * primary: { 20: '#b3e3e1', 40: '#5cb8b5', 60: '#1a9d99', 100: '#008582' },\n * brand: { 20: '#e8e8e8', 100: '#008582' },\n * };\n */\nexport type TRtColorSchemeRamp = Partial<Record<TRtAccentRole, Record<number, string>>>;\n\n/** `'default'`/`null` clears the active scheme (back to the rt-tools palette). */\nexport const RT_DEFAULT_SCHEME: string = 'default';\nexport const RT_COLOR_SCHEME_STORAGE_KEY: string = 'rt-color-scheme';\nexport const RT_SCHEME_ATTRIBUTE: string = 'data-rt-scheme';\n","import { DOCUMENT } from '@angular/common';\nimport { effect, inject, Injectable, Signal, signal, WritableSignal } from '@angular/core';\n\nimport { LOCAL_STORAGE, PlatformService } from '@rt-tools/core';\n\nimport { IRtUiConfig, RT_UI_CONFIG } from '../config';\nimport {\n ERtAccentRole,\n RT_COLOR_SCHEME_STORAGE_KEY,\n RT_DARK_CLASS,\n RT_DEFAULT_SCHEME,\n RT_SCHEME_ATTRIBUTE,\n RT_THEME_AUTO_CLASS,\n ERtTheme,\n RT_THEME_STORAGE_KEY,\n TRtColorSchemeRamp,\n TRtThemeType,\n} from './rtui-theme.types';\n\n/**\n * Global theme + color-scheme switcher for the rt-tools design tokens.\n *\n * **Theme** (`light`/`dark`/`auto`): applies `.rt-dark` / `.rt-theme-auto` to\n * `<html>`; semantic tokens (`--rt-*`) adapt through `color-scheme` + `light-dark()`.\n * Persisted to localStorage (`rt-theme`). `auto` follows the OS preference.\n *\n * **Color scheme** (brand palette): toggles `data-rt-scheme=\"<name>\"` on `<html>`,\n * which activates a `[data-rt-scheme]` block (emitted by the `rt.color-scheme` Sass\n * mixin or injected at runtime via {@link registerColorScheme}). It overrides only\n * the accent-role rows `--rt-color-{role}-{N}`, so the whole accent layer recolors\n * while semantic token names stay stable. Orthogonal to light/dark; persisted to\n * localStorage (`rt-color-scheme`).\n */\n@Injectable({ providedIn: 'root' })\nexport class RtThemeService {\n readonly #document: Document = inject(DOCUMENT);\n readonly #platformService: PlatformService = inject(PlatformService);\n // falls back to the native localStorage when the app does not call provideRtStorage()\n readonly #storage: Storage | null = inject(LOCAL_STORAGE, { optional: true }) ?? this.#document.defaultView?.localStorage ?? null;\n // app-wide defaults (provideRtUi(config)); a persisted user choice always wins over them\n readonly #config: IRtUiConfig.Config = inject(RT_UI_CONFIG);\n\n readonly #theme: WritableSignal<TRtThemeType> = signal<TRtThemeType>(this.#restore());\n readonly #colorScheme: WritableSignal<string | null> = signal<string | null>(this.#restoreScheme());\n\n public readonly theme: Signal<TRtThemeType> = this.#theme.asReadonly();\n public readonly colorScheme: Signal<string | null> = this.#colorScheme.asReadonly();\n\n constructor() {\n effect((): void => {\n this.#apply(this.#theme());\n });\n\n effect((): void => {\n this.#applyScheme(this.#colorScheme());\n });\n }\n\n public setTheme(theme: TRtThemeType): void {\n this.#theme.set(theme);\n\n if (this.#platformService.isPlatformBrowser && this.#storage) {\n this.#storage.setItem(RT_THEME_STORAGE_KEY, theme);\n }\n }\n\n /** Toggles between light and dark (auto resolves to its opposite visual state). */\n public toggle(): void {\n this.setTheme(this.#isDarkApplied() ? ERtTheme.LIGHT : ERtTheme.DARK);\n }\n\n /**\n * Activates a registered color scheme by name, or clears it with `null`/`'default'`.\n * Orthogonal to the light/dark theme; persisted to localStorage.\n */\n public setColorScheme(name: string | null): void {\n const normalized: string | null = !name || name === RT_DEFAULT_SCHEME ? null : name;\n this.#colorScheme.set(normalized);\n\n if (this.#platformService.isPlatformBrowser && this.#storage) {\n if (normalized) {\n this.#storage.setItem(RT_COLOR_SCHEME_STORAGE_KEY, normalized);\n } else {\n this.#storage.removeItem(RT_COLOR_SCHEME_STORAGE_KEY);\n }\n }\n }\n\n /**\n * Injects (or replaces) a color scheme's `[data-rt-scheme]` block at runtime —\n * the JS twin of the `rt.color-scheme` Sass mixin. Browser-only (no-op on server;\n * for SSR/brand-critical schemes prefer the Sass path). Does not activate the\n * scheme — call {@link setColorScheme} afterwards.\n */\n public registerColorScheme(name: string, ramp: TRtColorSchemeRamp): void {\n this.#validateRamp(name, ramp);\n\n if (!this.#platformService.isPlatformBrowser) {\n return;\n }\n\n const id: string = `rt-color-scheme-${name}`;\n const existing: HTMLElement | null = this.#document.getElementById(id);\n const style: HTMLStyleElement = (existing as HTMLStyleElement | null) ?? this.#document.createElement('style');\n\n style.id = id;\n style.textContent = this.#buildSchemeCss(name, ramp);\n\n if (!existing) {\n this.#document.head.appendChild(style);\n }\n }\n\n #restore(): TRtThemeType {\n const fallback: TRtThemeType = this.#config.global?.theme ?? ERtTheme.LIGHT;\n\n if (!this.#platformService.isPlatformBrowser || !this.#storage) {\n return fallback;\n }\n\n const stored: string | null = this.#storage.getItem(RT_THEME_STORAGE_KEY);\n\n return Object.values(ERtTheme).includes(stored as ERtTheme) ? (stored as TRtThemeType) : fallback;\n }\n\n #restoreScheme(): string | null {\n const fallback: string | null = this.#config.global?.colorScheme ?? null;\n\n if (!this.#platformService.isPlatformBrowser || !this.#storage) {\n return fallback;\n }\n\n const stored: string | null = this.#storage.getItem(RT_COLOR_SCHEME_STORAGE_KEY);\n\n return stored && stored !== RT_DEFAULT_SCHEME ? stored : fallback;\n }\n\n #apply(theme: TRtThemeType): void {\n if (!this.#platformService.isPlatformBrowser) {\n return;\n }\n\n const classList: DOMTokenList = this.#document.documentElement.classList;\n\n classList.toggle(RT_DARK_CLASS, theme === ERtTheme.DARK);\n classList.toggle(RT_THEME_AUTO_CLASS, theme === ERtTheme.AUTO);\n }\n\n #applyScheme(name: string | null): void {\n if (!this.#platformService.isPlatformBrowser) {\n return;\n }\n\n const root: HTMLElement = this.#document.documentElement;\n\n if (name) {\n root.setAttribute(RT_SCHEME_ATTRIBUTE, name);\n } else {\n root.removeAttribute(RT_SCHEME_ATTRIBUTE);\n }\n }\n\n /**\n * Validates a ramp the same way the `rt.color-scheme` Sass mixin does — unknown\n * role or out-of-range tone (must be an integer 0–100) throws. Keeps the JS twin\n * at parity with the build-time generator instead of silently emitting bad rows.\n */\n #validateRamp(name: string, ramp: TRtColorSchemeRamp): void {\n if (!name || name === RT_DEFAULT_SCHEME) {\n throw new Error(`registerColorScheme: name must be a non-empty string other than '${RT_DEFAULT_SCHEME}'.`);\n }\n\n const roles: string[] = Object.values(ERtAccentRole);\n\n for (const role of Object.keys(ramp)) {\n if (!roles.includes(role)) {\n throw new Error(`registerColorScheme(\"${name}\"): unknown role \"${role}\". Allowed roles: ${roles.join(', ')}.`);\n }\n\n for (const tone of Object.keys(ramp[role as ERtAccentRole] ?? {})) {\n const step: number = Number(tone);\n\n if (!Number.isInteger(step) || step < 0 || step > 100) {\n throw new Error(`registerColorScheme(\"${name}\"): role \"${role}\" tone \"${tone}\" must be an integer 0–100.`);\n }\n }\n }\n }\n\n /** Builds the `:root[data-rt-scheme=\"<name>\"] { --rt-color-{role}-{N}: … }` block (mirrors the Sass mixin). */\n #buildSchemeCss(name: string, ramp: TRtColorSchemeRamp): string {\n const declarations: string = Object.entries(ramp)\n .flatMap(([role, tones]: [string, Record<number, string> | undefined]): string[] =>\n Object.entries(tones ?? {}).map(([tone, value]: [string, string]): string => `--rt-color-${role}-${tone}:${value};`)\n )\n .join('');\n\n return `:root[${RT_SCHEME_ATTRIBUTE}=\"${name}\"]{${declarations}}`;\n }\n\n #isDarkApplied(): boolean {\n if (this.#theme() === ERtTheme.AUTO) {\n return this.#platformService.isPlatformBrowser && this.#document.defaultView\n ? this.#document.defaultView.matchMedia('(prefers-color-scheme: dark)').matches\n : false;\n }\n\n return this.#theme() === ERtTheme.DARK;\n }\n}\n","import { Directive, input, InputSignal } from '@angular/core';\n\nimport { TRtThemeType } from './rtui-theme.types';\n\n/**\n * Local theme context (GMT `data-theme` analogue).\n *\n * Sets `data-rt-theme` on the host, re-scoping all adaptive `--rt-*` tokens\n * inside the subtree through `color-scheme` + `light-dark()`:\n *\n * ```html\n * <!-- dark promo card inside a light page -->\n * <section [rtTheme]=\"'dark'\">…</section>\n * ```\n *\n * Note: `color` is inherited as a resolved value — re-apply text tokens\n * on elements inside the context (e.g. `color: var(--rt-text-base-primary)`).\n */\n@Directive({\n standalone: true,\n selector: '[rtTheme]',\n host: {\n '[attr.data-rt-theme]': 'rtTheme() || null',\n },\n})\nexport class RtThemeDirective {\n public readonly rtTheme: InputSignal<TRtThemeType | ''> = input<TRtThemeType | ''>('');\n}\n","/**\n * Public API Surface of rt-tools\n */\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/icon';\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/config';\nexport * from './lib/ui-kit/snack-bar';\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';\nexport * from './lib/ui-kit/theme';\nexport * from './lib/ui-kit/tooltip';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BEM_BLOCK","i1","i2","MatFormField"],"mappings":"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"}
|