@rt-tools/ui-kit 0.3.1 → 0.4.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 +405 -156
- package/fesm2022/rt-tools-ui-kit.mjs.map +1 -1
- package/package.json +1 -1
- package/rt-tools-ui-kit-0.4.0.tgz +0 -0
- package/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.scss +14 -0
- package/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.scss +1 -1
- package/src/lib/ui-kit/buttons/unified-button/rtui-button.component.scss +210 -206
- package/src/lib/ui-kit/buttons/unified-button/stories/component/test-button-matrix.component.scss +38 -0
- package/src/lib/ui-kit/icon/rtui-icon.component.scss +43 -24
- package/src/lib/ui-kit/info-badge/info-badge.component.scss +23 -23
- package/src/lib/ui-kit/spinner/spinner.component.scss +1 -1
- package/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.scss +20 -17
- package/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.scss +21 -0
- package/src/lib/ui-kit/table/components/table-container/table-container.component.scss +26 -0
- package/src/lib/ui-kit/table/stories/dynamic-list/test-dynamic-list.component.scss +18 -0
- package/src/styles/TOKENS.md +25 -16
- package/src/styles/base/_base.scss +6 -3
- package/src/styles/base/_tokens.scss +19 -0
- package/src/styles/main.scss +0 -1
- package/styles/tokens.css +9 -0
- package/types/rt-tools-ui-kit.d.ts +150 -33
- package/rt-tools-ui-kit-0.3.1.tgz +0 -0
- package/src/styles/components/_button.scss +0 -372
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { NgStyle,
|
|
1
|
+
import { NgStyle, NgComponentOutlet, NgTemplateOutlet, DOCUMENT, TitleCasePipe, NgClass } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, HostBinding, ChangeDetectionStrategy, Component, Injectable, Directive, contentChild, TemplateRef, input, booleanAttribute, effect, output, viewChild, signal,
|
|
3
|
+
import { inject, HostBinding, ChangeDetectionStrategy, Component, Injectable, Directive, contentChild, TemplateRef, input, booleanAttribute, effect, computed, output, viewChild, signal, numberAttribute, InjectionToken, ChangeDetectorRef, Injector, ViewEncapsulation, model, DestroyRef, HostListener, ElementRef, forwardRef, untracked, ViewContainerRef, afterNextRender } from '@angular/core';
|
|
4
4
|
import * as i1 from '@angular/forms';
|
|
5
5
|
import { FormControl, Validators, ReactiveFormsModule, FormBuilder, FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
6
6
|
import * as i5 from '@angular/material/button';
|
|
@@ -12,9 +12,9 @@ import * as i3 from '@angular/material/input';
|
|
|
12
12
|
import { MatInputModule, MatInput, MatFormField as MatFormField$1, MatLabel } from '@angular/material/input';
|
|
13
13
|
import * as i4 from '@angular/material/select';
|
|
14
14
|
import { MatSelectModule, MatSelect } from '@angular/material/select';
|
|
15
|
-
import { checkIsMatchingValues, BlockDirective, ElemDirective, SanitizePipe, ModDirective, RtIconOutlinedDirective, RtScrollToElementDirective, RtNavigationDirective, WINDOW, IDBStorageService, EmptyToDashPipe, PlatformService,
|
|
15
|
+
import { checkIsMatchingValues, BlockDirective, ElemDirective, SanitizePipe, ConcatClassesPipe, BreakpointService, ModDirective, RtIconOutlinedDirective, RtScrollToElementDirective, RtNavigationDirective, WINDOW, IDBStorageService, EmptyToDashPipe, PlatformService, DeviceDetectorService, OSTypes, RtScrollDirective, BreakStringPipe, EntityToStringPipe, OVERLAY_POSITIONS, RtEscapeKeyDirective, POSITION_ENUM, LOCAL_STORAGE } from '@rt-tools/core';
|
|
16
16
|
import { ReplaySubject, share, Subject, merge, of, noop } from 'rxjs';
|
|
17
|
-
import { filter,
|
|
17
|
+
import { filter, delay, take, tap, switchMap, debounceTime, distinctUntilChanged, map } from 'rxjs/operators';
|
|
18
18
|
import { MatListItem, MatNavList, MatListItemIcon, MatListItemTitle } from '@angular/material/list';
|
|
19
19
|
import * as i1$2 from '@angular/material/sidenav';
|
|
20
20
|
import { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';
|
|
@@ -30,7 +30,6 @@ import * as i1$4 from '@angular/cdk/portal';
|
|
|
30
30
|
import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
|
|
31
31
|
import { Router, NavigationEnd, RouterLink } from '@angular/router';
|
|
32
32
|
import { trigger, state, style, transition, animate, keyframes, AnimationBuilder } from '@angular/animations';
|
|
33
|
-
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
34
33
|
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
35
34
|
import { MatToolbar } from '@angular/material/toolbar';
|
|
36
35
|
import { Clipboard } from '@angular/cdk/clipboard';
|
|
@@ -48,6 +47,7 @@ import { computePosition, offset, flip, shift } from '@floating-ui/dom';
|
|
|
48
47
|
import { MAT_SNACK_BAR_DATA, MatSnackBarRef, MatSnackBar } from '@angular/material/snack-bar';
|
|
49
48
|
import { ImageCropperComponent } from 'ngx-image-cropper';
|
|
50
49
|
|
|
50
|
+
const BEM_BLOCK$z = 'rtui-modal';
|
|
51
51
|
class RtuiModalComponent {
|
|
52
52
|
constructor() {
|
|
53
53
|
this.data = inject(MAT_DIALOG_DATA);
|
|
@@ -81,17 +81,16 @@ class RtuiModalComponent {
|
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
84
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiModalComponent, isStandalone: true, selector: "rtui-modal", host: { properties: { "class": "this.hostClasses" }, classAttribute: "rtui-modal" }, ngImport: i0, template: "<ng-container rtBlock=\"rtui-modal\">\n @if (data.title) {\n <div rtElem=\"title\" mat-dialog-title>\n @if (data.icon) {\n <h2>\n <mat-icon [ngStyle]=\"data.icon.style\">\n {{ data.icon.value }}\n </mat-icon>\n </h2>\n }\n\n <h1>{{ data.title }}</h1>\n </div>\n }\n\n <mat-dialog-content>\n @if (data.text) {\n <div rtElem=\"text\" [innerHTML]=\"data.text | sanitize\"></div>\n }\n\n @if (data.confirmation) {\n <div rtElem=\"confirmation\" [innerHTML]=\"data.confirmation | sanitize\"></div>\n }\n\n @if (data.input) {\n <div rtElem=\"input\">{{ data.input.label }}</div>\n\n <mat-form-field [appearance]=\"'outline'\">\n <input matInput type=\"text\" autocomplete=\"off\" [formControl]=\"control!\" />\n </mat-form-field>\n }\n\n @if (data.textArea) {\n <mat-form-field rtElem=\"textarea\">\n <textarea matInput [formControl]=\"control!\" [placeholder]=\"data.textArea.placeholder\"></textarea>\n </mat-form-field>\n }\n\n @if (data.select) {\n <mat-form-field rtElem=\"select\">\n @if (data.select.label) {\n <mat-label>{{ data.select.label }}</mat-label>\n }\n\n <mat-select required [formControl]=\"selectControl!\">\n <mat-option>--</mat-option>\n @for (option of data.select.value; track option?.name ?? option) {\n <mat-option [value]=\"option?.value\">\n {{ option?.name }}\n </mat-option>\n }\n </mat-select>\n\n @if (data.select.hint && selectControl?.hasError('required')) {\n <mat-error>{{ data.select.hint }}</mat-error>\n }\n </mat-form-field>\n }\n\n @if (data?.component) {\n <ng-container *ngComponentOutlet=\"data!.component!\" />\n }\n </mat-dialog-content>\n\n <mat-dialog-actions [attr.align]=\"data.buttonsAlign\">\n @for (button of data.buttons; track button.text) {\n @switch (button.appearance) {\n @case ('raised') {\n <button\n mat-flat-button\n type=\"button\"\n [
|
|
84
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiModalComponent, isStandalone: true, selector: "rtui-modal", host: { properties: { "class": "this.hostClasses" }, classAttribute: "rtui-modal" }, ngImport: i0, template: "<ng-container rtBlock=\"rtui-modal\">\n @if (data.title) {\n <div rtElem=\"title\" mat-dialog-title>\n @if (data.icon) {\n <h2>\n <mat-icon [ngStyle]=\"data.icon.style\">\n {{ data.icon.value }}\n </mat-icon>\n </h2>\n }\n\n <h1>{{ data.title }}</h1>\n </div>\n }\n\n <mat-dialog-content>\n @if (data.text) {\n <div rtElem=\"text\" [innerHTML]=\"data.text | sanitize\"></div>\n }\n\n @if (data.confirmation) {\n <div rtElem=\"confirmation\" [innerHTML]=\"data.confirmation | sanitize\"></div>\n }\n\n @if (data.input) {\n <div rtElem=\"input\">{{ data.input.label }}</div>\n\n <mat-form-field [appearance]=\"'outline'\">\n <input matInput type=\"text\" autocomplete=\"off\" [formControl]=\"control!\" />\n </mat-form-field>\n }\n\n @if (data.textArea) {\n <mat-form-field rtElem=\"textarea\">\n <textarea matInput [formControl]=\"control!\" [placeholder]=\"data.textArea.placeholder\"></textarea>\n </mat-form-field>\n }\n\n @if (data.select) {\n <mat-form-field rtElem=\"select\">\n @if (data.select.label) {\n <mat-label>{{ data.select.label }}</mat-label>\n }\n\n <mat-select required [formControl]=\"selectControl!\">\n <mat-option>--</mat-option>\n @for (option of data.select.value; track option?.name ?? option) {\n <mat-option [value]=\"option?.value\">\n {{ option?.name }}\n </mat-option>\n }\n </mat-select>\n\n @if (data.select.hint && selectControl?.hasError('required')) {\n <mat-error>{{ data.select.hint }}</mat-error>\n }\n </mat-form-field>\n }\n\n @if (data?.component) {\n <ng-container *ngComponentOutlet=\"data!.component!\" />\n }\n </mat-dialog-content>\n\n <mat-dialog-actions [attr.align]=\"data.buttonsAlign\">\n @for (button of data.buttons; track button.text) {\n @switch (button.appearance) {\n @case ('raised') {\n <button\n mat-flat-button\n type=\"button\"\n [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", styles: ["@charset \"UTF-8\";:host{--rt-modal-title-font-size: 1.25rem;--rt-modal-title-color: var(--rt-text-base-primary);--rt-modal-title-font-weight: 400;--rt-modal-content-padding: 1rem 1.5rem;--rt-modal-content-color: var(--rt-text-base-soft);--rt-modal-content-font-size: .8rem;--rt-modal-content-text-align: center;--rt-modal-content-word-wrap: break-word;--rt-modal-input-margin-top: 1.5rem;--rt-modal-input-font-weight: 600;--rt-modal-input-text-align: left;--rt-modal-textarea-margin-top: 1.5rem;--rt-modal-select-margin-top: 1.5rem;--rt-modal-text-highlited-font-weight: 600;--rt-modal-text-highlited-color: var(--rt-text-base-strong);--rt-modal-text-warn-display: inline;--rt-modal-text-warn-font-size: 1rem;--rt-modal-text-warn-font-weight: 600;--rt-modal-text-warn-color: var(--rt-text-accent-danger)}:host ::ng-deep .--highlighted{display:inline;color:var(--rt-modal-text-highlited-color);font-weight:var(--rt-modal-text-highlited-font-weight)}:host ::ng-deep .--warn{display:inline;color:var(--rt-modal-text-warn-color);font-size:var(--rt-modal-text-warn-font-size);font-weight:var(--rt-modal-text-warn-font-weight)}:host .rtui-modal__title h1{color:var(--rt-modal-title-color);font-size:var(--rt-modal-title-font-size);font-weight:var(--rt-modal-title-font-weight)}:host .rtui-modal__title h1,:host .rtui-modal__title h2{text-align:center}:host .rtui-modal__input{margin-top:var(--rt-modal-input-margin-top);font-weight:var(--rt-modal-input-font-weight);text-align:var(--rt-modal-input-text-align)}:host .rtui-modal__textarea{margin-top:var(--rt-modal-textarea-margin-top)}:host .rtui-modal__select{margin-top:var(--rt-modal-select-margin-top)}:host .mat-icon{width:auto;height:auto}:host .mdc-dialog__title:before{height:100%}:host mat-dialog-content{padding:var(--rt-modal-content-padding);color:var(--rt-modal-content-color);font-size:var(--rt-modal-content-font-size);overflow-wrap:var(--rt-modal-content-word-wrap);text-align:var(--rt-modal-content-text-align)}:host mat-dialog-content mat-form-field{width:100%}:host mat-dialog-content mat-form-field textarea{resize:none}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type:
|
|
85
85
|
// material
|
|
86
86
|
MatDialogModule }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
87
87
|
// BEM
|
|
88
|
-
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "pipe", type: SanitizePipe, name: "sanitize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
88
|
+
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "pipe", type: SanitizePipe, name: "sanitize" }, { kind: "pipe", type: ConcatClassesPipe, name: "concatClasses" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
89
89
|
}
|
|
90
90
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiModalComponent, decorators: [{
|
|
91
91
|
type: Component,
|
|
92
|
-
args: [{ selector: 'rtui-modal', changeDetection: ChangeDetectionStrategy.OnPush, host: { class:
|
|
92
|
+
args: [{ selector: 'rtui-modal', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: BEM_BLOCK$z }, imports: [
|
|
93
93
|
NgStyle,
|
|
94
|
-
NgClass,
|
|
95
94
|
NgComponentOutlet,
|
|
96
95
|
ReactiveFormsModule,
|
|
97
96
|
SanitizePipe,
|
|
@@ -104,7 +103,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
104
103
|
// BEM
|
|
105
104
|
BlockDirective,
|
|
106
105
|
ElemDirective,
|
|
107
|
-
|
|
106
|
+
ConcatClassesPipe,
|
|
107
|
+
], template: "<ng-container rtBlock=\"rtui-modal\">\n @if (data.title) {\n <div rtElem=\"title\" mat-dialog-title>\n @if (data.icon) {\n <h2>\n <mat-icon [ngStyle]=\"data.icon.style\">\n {{ data.icon.value }}\n </mat-icon>\n </h2>\n }\n\n <h1>{{ data.title }}</h1>\n </div>\n }\n\n <mat-dialog-content>\n @if (data.text) {\n <div rtElem=\"text\" [innerHTML]=\"data.text | sanitize\"></div>\n }\n\n @if (data.confirmation) {\n <div rtElem=\"confirmation\" [innerHTML]=\"data.confirmation | sanitize\"></div>\n }\n\n @if (data.input) {\n <div rtElem=\"input\">{{ data.input.label }}</div>\n\n <mat-form-field [appearance]=\"'outline'\">\n <input matInput type=\"text\" autocomplete=\"off\" [formControl]=\"control!\" />\n </mat-form-field>\n }\n\n @if (data.textArea) {\n <mat-form-field rtElem=\"textarea\">\n <textarea matInput [formControl]=\"control!\" [placeholder]=\"data.textArea.placeholder\"></textarea>\n </mat-form-field>\n }\n\n @if (data.select) {\n <mat-form-field rtElem=\"select\">\n @if (data.select.label) {\n <mat-label>{{ data.select.label }}</mat-label>\n }\n\n <mat-select required [formControl]=\"selectControl!\">\n <mat-option>--</mat-option>\n @for (option of data.select.value; track option?.name ?? option) {\n <mat-option [value]=\"option?.value\">\n {{ option?.name }}\n </mat-option>\n }\n </mat-select>\n\n @if (data.select.hint && selectControl?.hasError('required')) {\n <mat-error>{{ data.select.hint }}</mat-error>\n }\n </mat-form-field>\n }\n\n @if (data?.component) {\n <ng-container *ngComponentOutlet=\"data!.component!\" />\n }\n </mat-dialog-content>\n\n <mat-dialog-actions [attr.align]=\"data.buttonsAlign\">\n @for (button of data.buttons; track button.text) {\n @switch (button.appearance) {\n @case ('raised') {\n <button\n mat-flat-button\n type=\"button\"\n [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", styles: ["@charset \"UTF-8\";:host{--rt-modal-title-font-size: 1.25rem;--rt-modal-title-color: var(--rt-text-base-primary);--rt-modal-title-font-weight: 400;--rt-modal-content-padding: 1rem 1.5rem;--rt-modal-content-color: var(--rt-text-base-soft);--rt-modal-content-font-size: .8rem;--rt-modal-content-text-align: center;--rt-modal-content-word-wrap: break-word;--rt-modal-input-margin-top: 1.5rem;--rt-modal-input-font-weight: 600;--rt-modal-input-text-align: left;--rt-modal-textarea-margin-top: 1.5rem;--rt-modal-select-margin-top: 1.5rem;--rt-modal-text-highlited-font-weight: 600;--rt-modal-text-highlited-color: var(--rt-text-base-strong);--rt-modal-text-warn-display: inline;--rt-modal-text-warn-font-size: 1rem;--rt-modal-text-warn-font-weight: 600;--rt-modal-text-warn-color: var(--rt-text-accent-danger)}:host ::ng-deep .--highlighted{display:inline;color:var(--rt-modal-text-highlited-color);font-weight:var(--rt-modal-text-highlited-font-weight)}:host ::ng-deep .--warn{display:inline;color:var(--rt-modal-text-warn-color);font-size:var(--rt-modal-text-warn-font-size);font-weight:var(--rt-modal-text-warn-font-weight)}:host .rtui-modal__title h1{color:var(--rt-modal-title-color);font-size:var(--rt-modal-title-font-size);font-weight:var(--rt-modal-title-font-weight)}:host .rtui-modal__title h1,:host .rtui-modal__title h2{text-align:center}:host .rtui-modal__input{margin-top:var(--rt-modal-input-margin-top);font-weight:var(--rt-modal-input-font-weight);text-align:var(--rt-modal-input-text-align)}:host .rtui-modal__textarea{margin-top:var(--rt-modal-textarea-margin-top)}:host .rtui-modal__select{margin-top:var(--rt-modal-select-margin-top)}:host .mat-icon{width:auto;height:auto}:host .mdc-dialog__title:before{height:100%}:host mat-dialog-content{padding:var(--rt-modal-content-padding);color:var(--rt-modal-content-color);font-size:var(--rt-modal-content-font-size);overflow-wrap:var(--rt-modal-content-word-wrap);text-align:var(--rt-modal-content-text-align)}:host mat-dialog-content mat-form-field{width:100%}:host mat-dialog-content mat-form-field textarea{resize:none}\n"] }]
|
|
108
108
|
}], propDecorators: { hostClasses: [{
|
|
109
109
|
type: HostBinding,
|
|
110
110
|
args: ['class']
|
|
@@ -188,6 +188,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
188
188
|
selector: '[rtuiScrollableFooter]',
|
|
189
189
|
}]
|
|
190
190
|
}] });
|
|
191
|
+
const BEM_BLOCK$y = 'rtui-scrollable';
|
|
191
192
|
class RtuiScrollableContainerComponent {
|
|
192
193
|
constructor() {
|
|
193
194
|
this.headerTpl = contentChild(RtuiScrollableContainerHeaderDirective, { ...(ngDevMode ? { debugName: "headerTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
@@ -195,11 +196,11 @@ class RtuiScrollableContainerComponent {
|
|
|
195
196
|
this.footerTpl = contentChild(RtuiScrollableContainerFooterDirective, { ...(ngDevMode ? { debugName: "footerTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
196
197
|
}
|
|
197
198
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiScrollableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
198
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiScrollableContainerComponent, isStandalone: true, selector: "rtui-scrollable", queries: [{ propertyName: "headerTpl", first: true, predicate: RtuiScrollableContainerHeaderDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "contentTpl", first: true, predicate: RtuiScrollableContainerContentDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "footerTpl", first: true, predicate: RtuiScrollableContainerFooterDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<ng-container rtBlock=\"rtui-scrollable\">\n @if (headerTpl()) {\n <div rtElem=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div rtElem=\"content\">\n <ng-container *ngTemplateOutlet=\"contentTpl() ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div rtElem=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:var(--rt-scrollable-host-display);width:var(--rt-scrollable-host-width);height:var(--rt-scrollable-host-height);flex-direction:var(--rt-scrollable-host-flex-direction);background-color:var(--rt-scrollable-host-background-color);--rt-scrollable-host-height: 100%;--rt-scrollable-host-width: 100%;--rt-scrollable-host-display: flex;--rt-scrollable-host-flex-direction: column;--rt-scrollable-host-background-color: var(--rt-bg-base-base);--rt-scrollable-header-padding: .5rem 1rem;--rt-scrollable-header-background-color: var(--rt-bg-base-base);--rt-scrollable-content-display: flex;--rt-scrollable-content-flex-direction: column;--rt-scrollable-content-flex-grow: 1;--rt-scrollable-content-padding: 1rem;--rt-scrollable-content-background-color: var(--rt-bg-base-base);--rt-scrollable-footer-padding: 1rem;--rt-scrollable-footer-background-color: var(--rt-bg-base-base)}:host .rtui-scrollable__header{padding:var(--rt-scrollable-header-padding);background-color:var(--rt-scrollable-header-background-color)}:host .rtui-scrollable__content{display:var(--rt-scrollable-content-display);overflow:auto;flex-direction:var(--rt-scrollable-content-flex-direction);flex-grow:var(--rt-scrollable-content-flex-grow);padding:var(--rt-scrollable-content-padding);background-color:var(--rt-scrollable-content-background-color)}:host .rtui-scrollable__footer{padding:var(--rt-scrollable-footer-padding);background-color:var(--rt-scrollable-footer-background-color)}\n"], dependencies: [{ kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiScrollableContainerComponent, isStandalone: true, selector: "rtui-scrollable", host: { classAttribute: "rtui-scrollable" }, queries: [{ propertyName: "headerTpl", first: true, predicate: RtuiScrollableContainerHeaderDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "contentTpl", first: true, predicate: RtuiScrollableContainerContentDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "footerTpl", first: true, predicate: RtuiScrollableContainerFooterDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<ng-container rtBlock=\"rtui-scrollable\">\n @if (headerTpl()) {\n <div rtElem=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div rtElem=\"content\">\n <ng-container *ngTemplateOutlet=\"contentTpl() ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div rtElem=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:var(--rt-scrollable-host-display);width:var(--rt-scrollable-host-width);height:var(--rt-scrollable-host-height);flex-direction:var(--rt-scrollable-host-flex-direction);background-color:var(--rt-scrollable-host-background-color);--rt-scrollable-host-height: 100%;--rt-scrollable-host-width: 100%;--rt-scrollable-host-display: flex;--rt-scrollable-host-flex-direction: column;--rt-scrollable-host-background-color: var(--rt-bg-base-base);--rt-scrollable-header-padding: .5rem 1rem;--rt-scrollable-header-background-color: var(--rt-bg-base-base);--rt-scrollable-content-display: flex;--rt-scrollable-content-flex-direction: column;--rt-scrollable-content-flex-grow: 1;--rt-scrollable-content-padding: 1rem;--rt-scrollable-content-background-color: var(--rt-bg-base-base);--rt-scrollable-footer-padding: 1rem;--rt-scrollable-footer-background-color: var(--rt-bg-base-base)}:host .rtui-scrollable__header{padding:var(--rt-scrollable-header-padding);background-color:var(--rt-scrollable-header-background-color)}:host .rtui-scrollable__content{display:var(--rt-scrollable-content-display);overflow:auto;flex-direction:var(--rt-scrollable-content-flex-direction);flex-grow:var(--rt-scrollable-content-flex-grow);padding:var(--rt-scrollable-content-padding);background-color:var(--rt-scrollable-content-background-color)}:host .rtui-scrollable__footer{padding:var(--rt-scrollable-footer-padding);background-color:var(--rt-scrollable-footer-background-color)}\n"], dependencies: [{ kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
199
200
|
}
|
|
200
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiScrollableContainerComponent, decorators: [{
|
|
201
202
|
type: Component,
|
|
202
|
-
args: [{ selector: 'rtui-scrollable', changeDetection: ChangeDetectionStrategy.OnPush, imports: [BlockDirective, ElemDirective, NgTemplateOutlet], template: "<ng-container rtBlock=\"rtui-scrollable\">\n @if (headerTpl()) {\n <div rtElem=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div rtElem=\"content\">\n <ng-container *ngTemplateOutlet=\"contentTpl() ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div rtElem=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:var(--rt-scrollable-host-display);width:var(--rt-scrollable-host-width);height:var(--rt-scrollable-host-height);flex-direction:var(--rt-scrollable-host-flex-direction);background-color:var(--rt-scrollable-host-background-color);--rt-scrollable-host-height: 100%;--rt-scrollable-host-width: 100%;--rt-scrollable-host-display: flex;--rt-scrollable-host-flex-direction: column;--rt-scrollable-host-background-color: var(--rt-bg-base-base);--rt-scrollable-header-padding: .5rem 1rem;--rt-scrollable-header-background-color: var(--rt-bg-base-base);--rt-scrollable-content-display: flex;--rt-scrollable-content-flex-direction: column;--rt-scrollable-content-flex-grow: 1;--rt-scrollable-content-padding: 1rem;--rt-scrollable-content-background-color: var(--rt-bg-base-base);--rt-scrollable-footer-padding: 1rem;--rt-scrollable-footer-background-color: var(--rt-bg-base-base)}:host .rtui-scrollable__header{padding:var(--rt-scrollable-header-padding);background-color:var(--rt-scrollable-header-background-color)}:host .rtui-scrollable__content{display:var(--rt-scrollable-content-display);overflow:auto;flex-direction:var(--rt-scrollable-content-flex-direction);flex-grow:var(--rt-scrollable-content-flex-grow);padding:var(--rt-scrollable-content-padding);background-color:var(--rt-scrollable-content-background-color)}:host .rtui-scrollable__footer{padding:var(--rt-scrollable-footer-padding);background-color:var(--rt-scrollable-footer-background-color)}\n"] }]
|
|
203
|
+
args: [{ selector: 'rtui-scrollable', host: { class: BEM_BLOCK$y }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [BlockDirective, ElemDirective, NgTemplateOutlet], template: "<ng-container rtBlock=\"rtui-scrollable\">\n @if (headerTpl()) {\n <div rtElem=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div rtElem=\"content\">\n <ng-container *ngTemplateOutlet=\"contentTpl() ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div rtElem=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:var(--rt-scrollable-host-display);width:var(--rt-scrollable-host-width);height:var(--rt-scrollable-host-height);flex-direction:var(--rt-scrollable-host-flex-direction);background-color:var(--rt-scrollable-host-background-color);--rt-scrollable-host-height: 100%;--rt-scrollable-host-width: 100%;--rt-scrollable-host-display: flex;--rt-scrollable-host-flex-direction: column;--rt-scrollable-host-background-color: var(--rt-bg-base-base);--rt-scrollable-header-padding: .5rem 1rem;--rt-scrollable-header-background-color: var(--rt-bg-base-base);--rt-scrollable-content-display: flex;--rt-scrollable-content-flex-direction: column;--rt-scrollable-content-flex-grow: 1;--rt-scrollable-content-padding: 1rem;--rt-scrollable-content-background-color: var(--rt-bg-base-base);--rt-scrollable-footer-padding: 1rem;--rt-scrollable-footer-background-color: var(--rt-bg-base-base)}:host .rtui-scrollable__header{padding:var(--rt-scrollable-header-padding);background-color:var(--rt-scrollable-header-background-color)}:host .rtui-scrollable__content{display:var(--rt-scrollable-content-display);overflow:auto;flex-direction:var(--rt-scrollable-content-flex-direction);flex-grow:var(--rt-scrollable-content-flex-grow);padding:var(--rt-scrollable-content-padding);background-color:var(--rt-scrollable-content-background-color)}:host .rtui-scrollable__footer{padding:var(--rt-scrollable-footer-padding);background-color:var(--rt-scrollable-footer-background-color)}\n"] }]
|
|
203
204
|
}], propDecorators: { headerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiScrollableContainerHeaderDirective), { ...{
|
|
204
205
|
read: TemplateRef,
|
|
205
206
|
}, isSignal: true }] }], contentTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiScrollableContainerContentDirective), { ...{
|
|
@@ -259,12 +260,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
259
260
|
}]
|
|
260
261
|
}], ctorParameters: () => [], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "rtHideTooltipDirective", required: true }] }], isTooltipShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isTooltipShown", required: true }] }] } });
|
|
261
262
|
|
|
263
|
+
const BEM_BLOCK$x = 'rtui-side-menu-sub-item';
|
|
262
264
|
class RtuiSideMenuSubItemComponent {
|
|
263
265
|
constructor() {
|
|
266
|
+
this.#breakpoints = inject(BreakpointService);
|
|
267
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
268
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
269
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
264
270
|
this.menuRef = inject(RtuiSideMenuComponent);
|
|
265
271
|
this.item = input.required(/* @ts-ignore */
|
|
266
272
|
...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
|
|
267
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Признак узкого экрана.
|
|
275
|
+
*
|
|
276
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
277
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
278
|
+
*/
|
|
279
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
280
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
268
281
|
this.isSubMenuXScrollEnabled = input(false, { ...(ngDevMode ? { debugName: "isSubMenuXScrollEnabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
269
282
|
this.isSubMenuIconsOutlined = input(false, { ...(ngDevMode ? { debugName: "isSubMenuIconsOutlined" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
270
283
|
this.isSubMenuButtonIconsOutlined = input(false, { ...(ngDevMode ? { debugName: "isSubMenuButtonIconsOutlined" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
@@ -272,6 +285,7 @@ class RtuiSideMenuSubItemComponent {
|
|
|
272
285
|
this.clickSubMenuAction = output();
|
|
273
286
|
this.clickSubMenuAdditionalAction = output();
|
|
274
287
|
}
|
|
288
|
+
#breakpoints;
|
|
275
289
|
onClickSubMenu(item, event) {
|
|
276
290
|
this.clickSubMenuAction.emit({ item, event });
|
|
277
291
|
}
|
|
@@ -279,20 +293,21 @@ class RtuiSideMenuSubItemComponent {
|
|
|
279
293
|
this.clickSubMenuAdditionalAction.emit({ data, event });
|
|
280
294
|
}
|
|
281
295
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSideMenuSubItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
282
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiSideMenuSubItemComponent, isStandalone: true, selector: "rtui-side-menu-sub-item", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuXScrollEnabled: { classPropertyName: "isSubMenuXScrollEnabled", publicName: "isSubMenuXScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuIconsOutlined: { classPropertyName: "isSubMenuIconsOutlined", publicName: "isSubMenuIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuButtonIconsOutlined: { classPropertyName: "isSubMenuButtonIconsOutlined", publicName: "isSubMenuButtonIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuTooltipsShown: { classPropertyName: "isSubMenuTooltipsShown", publicName: "isSubMenuTooltipsShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickSubMenuAction: "clickSubMenuAction", clickSubMenuAdditionalAction: "clickSubMenuAdditionalAction" }, providers: [
|
|
296
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiSideMenuSubItemComponent, isStandalone: true, selector: "rtui-side-menu-sub-item", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuXScrollEnabled: { classPropertyName: "isSubMenuXScrollEnabled", publicName: "isSubMenuXScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuIconsOutlined: { classPropertyName: "isSubMenuIconsOutlined", publicName: "isSubMenuIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuButtonIconsOutlined: { classPropertyName: "isSubMenuButtonIconsOutlined", publicName: "isSubMenuButtonIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuTooltipsShown: { classPropertyName: "isSubMenuTooltipsShown", publicName: "isSubMenuTooltipsShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickSubMenuAction: "clickSubMenuAction", clickSubMenuAdditionalAction: "clickSubMenuAdditionalAction" }, host: { classAttribute: "rtui-side-menu-sub-item" }, providers: [
|
|
297
|
+
BreakpointService,
|
|
283
298
|
{
|
|
284
299
|
provide: MAT_TOOLTIP_DEFAULT_OPTIONS,
|
|
285
300
|
useValue: {
|
|
286
301
|
disableTooltipInteractivity: true,
|
|
287
302
|
},
|
|
288
303
|
},
|
|
289
|
-
], ngImport: i0, template: "@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() ||
|
|
304
|
+
], ngImport: i0, template: "@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 {{ item.name }}\n </div>\n\n @if (item?.iconButton?.icon) {\n <div rtBlock=\"rtui-side-menu-sub-item-title-button\">\n <mat-icon\n rtElem=\"icon\"\n [rtIconOutlined]=\"isSubMenuButtonIconsOutlined()\"\n (click)=\"onClickSubMenuAdditional(item.iconButton?.data, $event); $event.stopPropagation()\">\n {{ item.iconButton.icon }}\n </mat-icon>\n </div>\n }\n </div>\n }\n </mat-list-item>\n } @else if (item?.submenu?.length) {\n <mat-expansion-panel\n #panel\n rtBlock=\"rtui-side-menu-expand-sub-item\"\n [rtMod]=\"{ fixed: isSubMenuXScrollEnabled() }\"\n [expanded]=\"menuRef.activeMenuIds().includes(item.id)\">\n <mat-expansion-panel-header\n rtBlock=\"rtui-side-menu-expand-sub-item-header\"\n [rtMod]=\"{ activated: menuRef.activeMenuIds().includes(item.id) }\">\n @if (item?.icon) {\n <mat-icon matListItemIcon rtElem=\"icon\" [rtIconOutlined]=\"isSubMenuIconsOutlined()\">{{ item.icon }}</mat-icon>\n }\n\n @if (item?.name) {\n <div\n #headerTitleTpl\n matListItemTitle\n rtElem=\"title\"\n matTooltipPosition=\"above\"\n [matTooltip]=\"item.name\"\n [matTooltipDisabled]=\"!isSubMenuTooltipsShown() || narrow()\"\n [rtHideTooltipDirective]=\"headerTitleTpl\"\n [isTooltipShown]=\"isSubMenuTooltipsShown() && !narrow()\">\n {{ item.name }}\n </div>\n }\n </mat-expansion-panel-header>\n\n @if (panel?.expanded) {\n <mat-nav-list>\n @for (item of item?.submenu; track i; let i = $index) {\n <ng-container *ngTemplateOutlet=\"listElemTpl; context: { $implicit: item }\" />\n }\n </mat-nav-list>\n }\n </mat-expansion-panel>\n }\n</ng-template>\n", styles: [":host::ng-deep .mat-expansion-indicator{padding:0 var(--rt-spacing-24)}:host::ng-deep .mat-expansion-panel-body{padding:0 0 0 var(--rt-spacing-16)}:host::ng-deep{--mat-expansion-container-background-color: transparent;--mat-expansion-header-expanded-state-height: var(--mat-expansion-header-collapsed-state-height)}:host .rtui-side-menu-sub-item{max-width:var(--rt-side-menu-sub-menu-item-width)}:host .rtui-side-menu-sub-item--fixed{min-width:var(--rt-side-menu-sub-menu-item-width)}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title{display:flex;align-items:center;justify-content:space-between}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title__text{overflow:hidden;font-size:var(--rt-side-menu-sub-menu-item-title-font-size);text-overflow:ellipsis;white-space:nowrap}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title .rtui-side-menu-sub-item-title-button{display:flex;align-items:center;justify-content:center;padding:var(--rt-spacing-2);border:1.5px solid transparent;border-radius:var(--rt-radius-full);margin-left:var(--rt-spacing-8);cursor:pointer}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title .rtui-side-menu-sub-item-title-button__icon{width:1.25rem;height:1.25rem;font-size:var(--rt-font-size-lg)}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title .rtui-side-menu-sub-item-title-button:hover{border-color:var(--rt-border-neutral-emphasis)}:host .rtui-side-menu-expand-sub-item{padding:0;border-radius:var(--rt-radius-xl);box-shadow:none}:host .rtui-side-menu-expand-sub-item--fixed{min-width:var(--rt-side-menu-sub-menu-item-width)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header{max-width:var(--rt-side-menu-sub-menu-item-width);padding:0}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header--activated{background-color:var(--mat-list-active-indicator-color)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header__icon{color:var(--mdc-list-list-item-leading-icon-color);margin-inline:var(--mat-list-list-item-leading-icon-start-space) var(--mat-list-list-item-leading-icon-end-space)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header__title{font-size:var(--rt-side-menu-sub-menu-item-title-font-size)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header:hover .rtui-side-menu-expand-sub-item-header__icon{color:var(--mdc-list-list-item-hover-leading-icon-color)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i1$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i1$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type:
|
|
290
305
|
// directives
|
|
291
306
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "directive", type: RtHideTooltipDirective, selector: "[rtHideTooltipDirective]", inputs: ["rtHideTooltipDirective", "isTooltipShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
292
307
|
}
|
|
293
308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSideMenuSubItemComponent, decorators: [{
|
|
294
309
|
type: Component,
|
|
295
|
-
args: [{ selector: 'rtui-side-menu-sub-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
310
|
+
args: [{ selector: 'rtui-side-menu-sub-item', host: { class: BEM_BLOCK$x }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
296
311
|
NgTemplateOutlet,
|
|
297
312
|
MatIcon,
|
|
298
313
|
MatListItem,
|
|
@@ -308,13 +323,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
308
323
|
RtIconOutlinedDirective,
|
|
309
324
|
RtHideTooltipDirective,
|
|
310
325
|
], providers: [
|
|
326
|
+
BreakpointService,
|
|
311
327
|
{
|
|
312
328
|
provide: MAT_TOOLTIP_DEFAULT_OPTIONS,
|
|
313
329
|
useValue: {
|
|
314
330
|
disableTooltipInteractivity: true,
|
|
315
331
|
},
|
|
316
332
|
},
|
|
317
|
-
], template: "@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() ||
|
|
333
|
+
], template: "@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 {{ item.name }}\n </div>\n\n @if (item?.iconButton?.icon) {\n <div rtBlock=\"rtui-side-menu-sub-item-title-button\">\n <mat-icon\n rtElem=\"icon\"\n [rtIconOutlined]=\"isSubMenuButtonIconsOutlined()\"\n (click)=\"onClickSubMenuAdditional(item.iconButton?.data, $event); $event.stopPropagation()\">\n {{ item.iconButton.icon }}\n </mat-icon>\n </div>\n }\n </div>\n }\n </mat-list-item>\n } @else if (item?.submenu?.length) {\n <mat-expansion-panel\n #panel\n rtBlock=\"rtui-side-menu-expand-sub-item\"\n [rtMod]=\"{ fixed: isSubMenuXScrollEnabled() }\"\n [expanded]=\"menuRef.activeMenuIds().includes(item.id)\">\n <mat-expansion-panel-header\n rtBlock=\"rtui-side-menu-expand-sub-item-header\"\n [rtMod]=\"{ activated: menuRef.activeMenuIds().includes(item.id) }\">\n @if (item?.icon) {\n <mat-icon matListItemIcon rtElem=\"icon\" [rtIconOutlined]=\"isSubMenuIconsOutlined()\">{{ item.icon }}</mat-icon>\n }\n\n @if (item?.name) {\n <div\n #headerTitleTpl\n matListItemTitle\n rtElem=\"title\"\n matTooltipPosition=\"above\"\n [matTooltip]=\"item.name\"\n [matTooltipDisabled]=\"!isSubMenuTooltipsShown() || narrow()\"\n [rtHideTooltipDirective]=\"headerTitleTpl\"\n [isTooltipShown]=\"isSubMenuTooltipsShown() && !narrow()\">\n {{ item.name }}\n </div>\n }\n </mat-expansion-panel-header>\n\n @if (panel?.expanded) {\n <mat-nav-list>\n @for (item of item?.submenu; track i; let i = $index) {\n <ng-container *ngTemplateOutlet=\"listElemTpl; context: { $implicit: item }\" />\n }\n </mat-nav-list>\n }\n </mat-expansion-panel>\n }\n</ng-template>\n", styles: [":host::ng-deep .mat-expansion-indicator{padding:0 var(--rt-spacing-24)}:host::ng-deep .mat-expansion-panel-body{padding:0 0 0 var(--rt-spacing-16)}:host::ng-deep{--mat-expansion-container-background-color: transparent;--mat-expansion-header-expanded-state-height: var(--mat-expansion-header-collapsed-state-height)}:host .rtui-side-menu-sub-item{max-width:var(--rt-side-menu-sub-menu-item-width)}:host .rtui-side-menu-sub-item--fixed{min-width:var(--rt-side-menu-sub-menu-item-width)}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title{display:flex;align-items:center;justify-content:space-between}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title__text{overflow:hidden;font-size:var(--rt-side-menu-sub-menu-item-title-font-size);text-overflow:ellipsis;white-space:nowrap}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title .rtui-side-menu-sub-item-title-button{display:flex;align-items:center;justify-content:center;padding:var(--rt-spacing-2);border:1.5px solid transparent;border-radius:var(--rt-radius-full);margin-left:var(--rt-spacing-8);cursor:pointer}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title .rtui-side-menu-sub-item-title-button__icon{width:1.25rem;height:1.25rem;font-size:var(--rt-font-size-lg)}:host .rtui-side-menu-sub-item .rtui-side-menu-sub-item-title .rtui-side-menu-sub-item-title-button:hover{border-color:var(--rt-border-neutral-emphasis)}:host .rtui-side-menu-expand-sub-item{padding:0;border-radius:var(--rt-radius-xl);box-shadow:none}:host .rtui-side-menu-expand-sub-item--fixed{min-width:var(--rt-side-menu-sub-menu-item-width)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header{max-width:var(--rt-side-menu-sub-menu-item-width);padding:0}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header--activated{background-color:var(--mat-list-active-indicator-color)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header__icon{color:var(--mdc-list-list-item-leading-icon-color);margin-inline:var(--mat-list-list-item-leading-icon-start-space) var(--mat-list-list-item-leading-icon-end-space)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header__title{font-size:var(--rt-side-menu-sub-menu-item-title-font-size)}:host .rtui-side-menu-expand-sub-item .rtui-side-menu-expand-sub-item-header:hover .rtui-side-menu-expand-sub-item-header__icon{color:var(--mdc-list-list-item-hover-leading-icon-color)}\n"] }]
|
|
318
334
|
}], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], isSubMenuXScrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuXScrollEnabled", required: false }] }], isSubMenuIconsOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuIconsOutlined", required: false }] }], isSubMenuButtonIconsOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuButtonIconsOutlined", required: false }] }], isSubMenuTooltipsShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuTooltipsShown", required: false }] }], clickSubMenuAction: [{ type: i0.Output, args: ["clickSubMenuAction"] }], clickSubMenuAdditionalAction: [{ type: i0.Output, args: ["clickSubMenuAdditionalAction"] }] } });
|
|
319
335
|
|
|
320
336
|
class RtuiSideMenuHeaderDirective {
|
|
@@ -337,8 +353,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
337
353
|
selector: '[rtuiSideMenuFooter]',
|
|
338
354
|
}]
|
|
339
355
|
}] });
|
|
356
|
+
const BEM_BLOCK$w = 'rtui-side-menu';
|
|
340
357
|
class RtuiSideMenuComponent {
|
|
341
358
|
constructor() {
|
|
359
|
+
this.#breakpoints = inject(BreakpointService);
|
|
360
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
361
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
362
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
342
363
|
this.headerTpl = contentChild(RtuiSideMenuHeaderDirective, { ...(ngDevMode ? { debugName: "headerTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
343
364
|
this.footerTpl = contentChild(RtuiSideMenuFooterDirective, { ...(ngDevMode ? { debugName: "footerTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
344
365
|
this.subMenuRef = viewChild(MatDrawer, /* @ts-ignore */
|
|
@@ -352,7 +373,14 @@ class RtuiSideMenuComponent {
|
|
|
352
373
|
this.activeMenuIds = input.required(/* @ts-ignore */
|
|
353
374
|
...(ngDevMode ? [{ debugName: "activeMenuIds" }] : /* istanbul ignore next */ []));
|
|
354
375
|
this.menuItems = input([], { ...(ngDevMode ? { debugName: "menuItems" } : /* istanbul ignore next */ {}), transform: (value) => transformArrayInput(value) });
|
|
355
|
-
|
|
376
|
+
/**
|
|
377
|
+
* Признак узкого экрана.
|
|
378
|
+
*
|
|
379
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
380
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
381
|
+
*/
|
|
382
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
383
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
356
384
|
this.isSubMenuXScrollEnabled = input(true, { ...(ngDevMode ? { debugName: "isSubMenuXScrollEnabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
357
385
|
this.isMainMenuIconsOutlined = input(false, { ...(ngDevMode ? { debugName: "isMainMenuIconsOutlined" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
358
386
|
this.isSubMenuIconsOutlined = input(false, { ...(ngDevMode ? { debugName: "isSubMenuIconsOutlined" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
@@ -366,6 +394,7 @@ class RtuiSideMenuComponent {
|
|
|
366
394
|
this.clickSubMenuAction = output();
|
|
367
395
|
this.clickSubMenuAdditionalAction = output();
|
|
368
396
|
}
|
|
397
|
+
#breakpoints;
|
|
369
398
|
onClickMenu(item) {
|
|
370
399
|
this.selectedItem.set(item);
|
|
371
400
|
if (item?.submenu) {
|
|
@@ -419,7 +448,7 @@ class RtuiSideMenuComponent {
|
|
|
419
448
|
this.subMenuRef()?.open().then();
|
|
420
449
|
}
|
|
421
450
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSideMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
422
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiSideMenuComponent, isStandalone: true, selector: "rtui-side-menu", inputs: { activeMenuIds: { classPropertyName: "activeMenuIds", publicName: "activeMenuIds", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuXScrollEnabled: { classPropertyName: "isSubMenuXScrollEnabled", publicName: "isSubMenuXScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, isMainMenuIconsOutlined: { classPropertyName: "isMainMenuIconsOutlined", publicName: "isMainMenuIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuIconsOutlined: { classPropertyName: "isSubMenuIconsOutlined", publicName: "isSubMenuIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuButtonIconsOutlined: { classPropertyName: "isSubMenuButtonIconsOutlined", publicName: "isSubMenuButtonIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuTooltipsShown: { classPropertyName: "isSubMenuTooltipsShown", publicName: "isSubMenuTooltipsShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeMobileMenuAction: "closeMobileMenuAction", clickSubMenuAction: "clickSubMenuAction", clickSubMenuAdditionalAction: "clickSubMenuAdditionalAction" }, queries: [{ propertyName: "headerTpl", first: true, predicate: RtuiSideMenuHeaderDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "footerTpl", first: true, predicate: RtuiSideMenuFooterDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "subMenuRef", first: true, predicate: MatDrawer, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isMobile()) {\n <rtui-scrollable rtBlock=\"rtui-mobile-side-menu\">\n @if (headerTpl()) {\n <ng-container *rtuiScrollableHeader>\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </ng-container>\n }\n\n @if (menuItems().length) {\n <ng-container *rtuiScrollableContent>\n <mat-nav-list\n rtBlock=\"rtui-mobile-side-menu-list\"\n [rtMod]=\"{ scrollable: selectedSubMenu()?.length && isSubMenuXScrollEnabled() }\">\n @if (selectedSubMenu()?.length) {\n <div rtElem=\"sub\" [rtScrollToElement]=\"activeMenuId()\" [elements]=\"selectedSubMenu() ?? []\">\n <rtui-side-menu-sub-item\n [item]=\"backToMainMenuButton()\"\n [isMobile]=\"isMobile()\"\n (clickSubMenuAction)=\"onBackToMainMenu()\" />\n\n @for (item of selectedSubMenu(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\n [isMobile]=\"isMobile()\"\n [isSubMenuXScrollEnabled]=\"isSubMenuXScrollEnabled()\"\n [isSubMenuIconsOutlined]=\"isSubMenuIconsOutlined()\"\n [isSubMenuButtonIconsOutlined]=\"isSubMenuButtonIconsOutlined()\"\n [isSubMenuTooltipsShown]=\"isSubMenuTooltipsShown()\"\n (clickSubMenuAction)=\"onClickSubMenu($event)\"\n (clickSubMenuAdditionalAction)=\"clickSubMenuAdditional($event)\" />\n }\n </div>\n } @else {\n <div rtBlock=\"rtui-mobile-side-menu-list-main\">\n @for (item of menuItems(); track i; let i = $index) {\n <mat-list-item\n rtBlock=\"rtui-mobile-side-menu-item\"\n [rtNavigationDirective]=\"item?.link\"\n [activated]=\"selectedItem() === item || (!selectedItem() && activeMenuIds().includes(item.id))\"\n (click)=\"onClickMenu(item)\">\n @if (item?.icon) {\n <mat-icon matListItemIcon rtElem=\"icon\" [rtIconOutlined]=\"isMainMenuIconsOutlined()\">\n {{ item.icon }}\n </mat-icon>\n }\n\n @if (item?.name) {\n <div rtBlock=\"rtui-mobile-side-menu-item-title\">\n <div rtElem=\"text\">{{ item.name }}</div>\n\n @if (item?.iconButton?.icon) {\n <div rtBlock=\"rtui-mobile-side-menu-item-title-button\">\n <mat-icon rtElem=\"icon\">{{ item.iconButton?.icon }}</mat-icon>\n </div>\n }\n </div>\n }\n </mat-list-item>\n }\n </div>\n }\n </mat-nav-list>\n </ng-container>\n }\n\n @if (footerTpl()) {\n <ng-container *rtuiScrollableFooter>\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </ng-container>\n }\n </rtui-scrollable>\n} @else {\n <rtui-scrollable rtBlock=\"rtui-side-menu\">\n @if (headerTpl()) {\n <ng-container *rtuiScrollableHeader>\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </ng-container>\n }\n\n @if (menuItems().length) {\n <ng-container *rtuiScrollableContent>\n <mat-nav-list rtElem=\"list\">\n @for (item of menuItems(); track i; let i = $index) {\n <a\n rtBlock=\"rtui-side-menu-item\"\n [rtNavigationDirective]=\"item?.link\"\n (mouseenter)=\"toggleSubMenu(item)\"\n (click)=\"onClickMenu(item)\">\n @if (item?.icon) {\n <mat-list-item\n rtBlock=\"rtui-side-menu-item-button\"\n [activated]=\"selectedItem() === item || (!selectedItem() && activeMenuIds().includes(item.id))\">\n <div rtElem=\"icon\">\n <mat-icon [rtIconOutlined]=\"isMainMenuIconsOutlined()\">{{ item.icon }}</mat-icon>\n </div>\n </mat-list-item>\n }\n\n @if (item?.name) {\n <div rtElem=\"title\">{{ item.name }}</div>\n }\n </a>\n }\n </mat-nav-list>\n </ng-container>\n }\n\n @if (footerTpl()) {\n <ng-container *rtuiScrollableFooter>\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </ng-container>\n }\n </rtui-scrollable>\n\n <mat-drawer-container\n rtBlock=\"rtui-sub-side-menu\"\n [rtMod]=\"{ opened: subMenuRef()?.opened }\"\n [hasBackdrop]=\"true\"\n (backdropClick)=\"closeSubMenu()\">\n <mat-drawer rtBlock=\"rtui-sub-side-menu-content\" mode=\"side\" position=\"start\" (mouseleave)=\"toggleSubMenu()\">\n <rtui-scrollable>\n <ng-container *rtuiScrollableContent>\n @if (subMenuRef()?.opened && selectedSubMenu()?.length) {\n <mat-nav-list\n rtElem=\"list\"\n [rtMod]=\"{ scrollable: isSubMenuXScrollEnabled() }\"\n [rtScrollToElement]=\"activeMenuId()\"\n [elements]=\"selectedSubMenu() ?? []\">\n @for (item of selectedSubMenu(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\n [isMobile]=\"isMobile()\"\n [isSubMenuXScrollEnabled]=\"isSubMenuXScrollEnabled()\"\n [isSubMenuIconsOutlined]=\"isSubMenuIconsOutlined()\"\n [isSubMenuButtonIconsOutlined]=\"isSubMenuButtonIconsOutlined()\"\n [isSubMenuTooltipsShown]=\"isSubMenuTooltipsShown()\"\n (clickSubMenuAction)=\"onClickSubMenu($event)\"\n (clickSubMenuAdditionalAction)=\"clickSubMenuAdditional($event)\" />\n }\n </mat-nav-list>\n }\n </ng-container>\n </rtui-scrollable>\n </mat-drawer>\n </mat-drawer-container>\n}\n", styles: ["@charset \"UTF-8\";:host{--rt-side-menu-base-width: 5.5rem;--rt-side-menu-base-margin-top-between-items: .75rem;--rt-side-menu-item-width: 3.5rem;--rt-side-menu-item-height: 2rem;--rt-side-menu-item-font-size: .75rem;--rt-side-menu-item-text-align: center;--rt-side-menu-item-line-height: 1.1;--rt-side-menu-mobile-item-icon-size: 1.5rem;--rt-side-menu-mobile-item-title-font-size: .75rem;--rt-side-menu-mobile-item-additional-icon-size: 1rem;--rt-side-menu-sub-menu-width: 15rem;--rt-side-menu-sub-menu-item-width: 13.75rem;--rt-side-menu-sub-menu-item-title-font-size: .85rem;--mat-sidenav-scrim-color: transparent}:host .rtui-mobile-side-menu{width:var(--rt-side-menu-sub-menu-width)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list{display:flex;width:100%;flex-direction:column}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list--scrollable{width:fit-content}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list__sub{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item__icon{width:var(--rt-side-menu-mobile-item-icon-size);height:var(--rt-side-menu-mobile-item-icon-size);font-size:var(--rt-side-menu-mobile-item-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title{display:flex;align-items:center;justify-content:space-between}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title__text{overflow:hidden;font-size:var(--rt-font-size-xs);text-overflow:ellipsis;white-space:nowrap}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-radius-full);margin-left:var(--rt-spacing-8)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button__icon{width:var(--rt-side-menu-mobile-item-additional-icon-size);height:var(--rt-side-menu-mobile-item-additional-icon-size);font-size:var(--rt-side-menu-mobile-item-additional-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item+.rtui-mobile-side-menu-item{margin-top:var(--rt-spacing-8)}:host .rtui-side-menu{width:var(--rt-side-menu-base-width)}:host .rtui-side-menu__list{display:flex;width:100%;flex-direction:column;align-items:center}:host .rtui-side-menu__list .rtui-side-menu-item{display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;cursor:pointer}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button{display:flex;width:var(--rt-side-menu-item-width);height:var(--rt-side-menu-item-height);align-items:center;justify-content:center;padding:0}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button__icon{display:flex;align-items:center;justify-content:center}:host .rtui-side-menu__list .rtui-side-menu-item__title{font-size:var(--rt-side-menu-item-font-size);line-height:var(--rt-side-menu-item-line-height);text-align:var(--rt-side-menu-item-text-align)}:host .rtui-side-menu__list .rtui-side-menu-item+.rtui-side-menu-item{margin-top:var(--rt-side-menu-base-margin-top-between-items)}:host .rtui-sub-side-menu{position:fixed;top:0;left:var(--rt-side-menu-base-width);width:0;height:100%;background-color:transparent}:host .rtui-sub-side-menu--opened{width:100%}:host .rtui-sub-side-menu .rtui-sub-side-menu-content{--rt-side-menu-sub-content-shadow: 14px 0 28px rgb(0 0 0 / 25%), 10px 0 10px rgb(0 0 0 / 22%);width:var(--rt-side-menu-sub-menu-width);height:100%;border-left:1px solid var(--rt-border-neutral-default);box-shadow:var(--rt-side-menu-sub-content-shadow)}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list{width:100%;animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list--scrollable{min-width:fit-content}@keyframes fade-in-animation{to{opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1$2.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i1$2.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type:
|
|
451
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiSideMenuComponent, isStandalone: true, selector: "rtui-side-menu", inputs: { activeMenuIds: { classPropertyName: "activeMenuIds", publicName: "activeMenuIds", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuXScrollEnabled: { classPropertyName: "isSubMenuXScrollEnabled", publicName: "isSubMenuXScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, isMainMenuIconsOutlined: { classPropertyName: "isMainMenuIconsOutlined", publicName: "isMainMenuIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuIconsOutlined: { classPropertyName: "isSubMenuIconsOutlined", publicName: "isSubMenuIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuButtonIconsOutlined: { classPropertyName: "isSubMenuButtonIconsOutlined", publicName: "isSubMenuButtonIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isSubMenuTooltipsShown: { classPropertyName: "isSubMenuTooltipsShown", publicName: "isSubMenuTooltipsShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeMobileMenuAction: "closeMobileMenuAction", clickSubMenuAction: "clickSubMenuAction", clickSubMenuAdditionalAction: "clickSubMenuAdditionalAction" }, host: { classAttribute: "rtui-side-menu" }, providers: [BreakpointService], queries: [{ propertyName: "headerTpl", first: true, predicate: RtuiSideMenuHeaderDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "footerTpl", first: true, predicate: RtuiSideMenuFooterDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "subMenuRef", first: true, predicate: MatDrawer, descendants: true, isSignal: true }], ngImport: i0, template: "@if (narrow()) {\n <rtui-scrollable rtBlock=\"rtui-mobile-side-menu\">\n @if (headerTpl()) {\n <ng-container *rtuiScrollableHeader>\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </ng-container>\n }\n\n @if (menuItems().length) {\n <ng-container *rtuiScrollableContent>\n <mat-nav-list\n rtBlock=\"rtui-mobile-side-menu-list\"\n [rtMod]=\"{ scrollable: selectedSubMenu()?.length && isSubMenuXScrollEnabled() }\">\n @if (selectedSubMenu()?.length) {\n <div rtElem=\"sub\" [rtScrollToElement]=\"activeMenuId()\" [elements]=\"selectedSubMenu() ?? []\">\n <rtui-side-menu-sub-item [item]=\"backToMainMenuButton()\" (clickSubMenuAction)=\"onBackToMainMenu()\" />\n\n @for (item of selectedSubMenu(); 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\">\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: subMenuRef()?.opened }\"\n [hasBackdrop]=\"true\"\n (backdropClick)=\"closeSubMenu()\">\n <mat-drawer rtBlock=\"rtui-sub-side-menu-content\" mode=\"side\" position=\"start\" (mouseleave)=\"toggleSubMenu()\">\n <rtui-scrollable>\n <ng-container *rtuiScrollableContent>\n @if (subMenuRef()?.opened && selectedSubMenu()?.length) {\n <mat-nav-list\n rtElem=\"list\"\n [rtMod]=\"{ scrollable: isSubMenuXScrollEnabled() }\"\n [rtScrollToElement]=\"activeMenuId()\"\n [elements]=\"selectedSubMenu() ?? []\">\n @for (item of selectedSubMenu(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\n [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", styles: ["@charset \"UTF-8\";:host{--rt-side-menu-base-width: 5.5rem;--rt-side-menu-base-margin-top-between-items: .75rem;--rt-side-menu-item-width: 3.5rem;--rt-side-menu-item-height: 2rem;--rt-side-menu-item-font-size: .75rem;--rt-side-menu-item-text-align: center;--rt-side-menu-item-line-height: 1.1;--rt-side-menu-mobile-item-icon-size: 1.5rem;--rt-side-menu-mobile-item-title-font-size: .75rem;--rt-side-menu-mobile-item-additional-icon-size: 1rem;--rt-side-menu-sub-menu-width: 15rem;--rt-side-menu-sub-menu-item-width: 13.75rem;--rt-side-menu-sub-menu-item-title-font-size: .85rem;--mat-sidenav-scrim-color: transparent}:host .rtui-mobile-side-menu{width:var(--rt-side-menu-sub-menu-width)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list{display:flex;width:100%;flex-direction:column}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list--scrollable{width:fit-content}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list__sub{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item__icon{width:var(--rt-side-menu-mobile-item-icon-size);height:var(--rt-side-menu-mobile-item-icon-size);font-size:var(--rt-side-menu-mobile-item-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title{display:flex;align-items:center;justify-content:space-between}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title__text{overflow:hidden;font-size:var(--rt-font-size-xs);text-overflow:ellipsis;white-space:nowrap}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-radius-full);margin-left:var(--rt-spacing-8)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button__icon{width:var(--rt-side-menu-mobile-item-additional-icon-size);height:var(--rt-side-menu-mobile-item-additional-icon-size);font-size:var(--rt-side-menu-mobile-item-additional-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item+.rtui-mobile-side-menu-item{margin-top:var(--rt-spacing-8)}:host .rtui-side-menu{width:var(--rt-side-menu-base-width)}:host .rtui-side-menu__list{display:flex;width:100%;flex-direction:column;align-items:center}:host .rtui-side-menu__list .rtui-side-menu-item{display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;cursor:pointer}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button{display:flex;width:var(--rt-side-menu-item-width);height:var(--rt-side-menu-item-height);align-items:center;justify-content:center;padding:0}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button__icon{display:flex;align-items:center;justify-content:center}:host .rtui-side-menu__list .rtui-side-menu-item__title{font-size:var(--rt-side-menu-item-font-size);line-height:var(--rt-side-menu-item-line-height);text-align:var(--rt-side-menu-item-text-align)}:host .rtui-side-menu__list .rtui-side-menu-item+.rtui-side-menu-item{margin-top:var(--rt-side-menu-base-margin-top-between-items)}:host .rtui-sub-side-menu{position:fixed;top:0;left:var(--rt-side-menu-base-width);width:0;height:100%;background-color:transparent}:host .rtui-sub-side-menu--opened{width:100%}:host .rtui-sub-side-menu .rtui-sub-side-menu-content{--rt-side-menu-sub-content-shadow: 14px 0 28px rgb(0 0 0 / 25%), 10px 0 10px rgb(0 0 0 / 22%);width:var(--rt-side-menu-sub-menu-width);height:100%;border-left:1px solid var(--rt-border-neutral-default);box-shadow:var(--rt-side-menu-sub-content-shadow)}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list{width:100%;animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list--scrollable{min-width:fit-content}@keyframes fade-in-animation{to{opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1$2.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i1$2.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type:
|
|
423
452
|
// directives
|
|
424
453
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }, { kind: "directive", type: RtuiScrollableContainerHeaderDirective, selector: "[rtuiScrollableHeader]" }, { kind: "directive", type: RtuiScrollableContainerContentDirective, selector: "[rtuiScrollableContent]" }, { kind: "directive", type: RtuiScrollableContainerFooterDirective, selector: "[rtuiScrollableFooter]" }, { kind: "directive", type: RtScrollToElementDirective, selector: "[rtScrollToElement]", inputs: ["rtScrollToElement", "elements"] }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "directive", type: RtNavigationDirective, selector: "[rtNavigationDirective]", inputs: ["rtNavigationDirective"] }, { kind: "component", type:
|
|
425
454
|
// components
|
|
@@ -427,7 +456,7 @@ class RtuiSideMenuComponent {
|
|
|
427
456
|
}
|
|
428
457
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSideMenuComponent, decorators: [{
|
|
429
458
|
type: Component,
|
|
430
|
-
args: [{ selector: 'rtui-side-menu', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
459
|
+
args: [{ selector: 'rtui-side-menu', host: { class: BEM_BLOCK$w }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
431
460
|
NgTemplateOutlet,
|
|
432
461
|
MatSidenavModule,
|
|
433
462
|
MatIcon,
|
|
@@ -447,13 +476,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
447
476
|
// components
|
|
448
477
|
RtuiScrollableContainerComponent,
|
|
449
478
|
RtuiSideMenuSubItemComponent,
|
|
450
|
-
], template: "@if (isMobile()) {\n <rtui-scrollable rtBlock=\"rtui-mobile-side-menu\">\n @if (headerTpl()) {\n <ng-container *rtuiScrollableHeader>\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </ng-container>\n }\n\n @if (menuItems().length) {\n <ng-container *rtuiScrollableContent>\n <mat-nav-list\n rtBlock=\"rtui-mobile-side-menu-list\"\n [rtMod]=\"{ scrollable: selectedSubMenu()?.length && isSubMenuXScrollEnabled() }\">\n @if (selectedSubMenu()?.length) {\n <div rtElem=\"sub\" [rtScrollToElement]=\"activeMenuId()\" [elements]=\"selectedSubMenu() ?? []\">\n <rtui-side-menu-sub-item\n [item]=\"backToMainMenuButton()\"\n [isMobile]=\"isMobile()\"\n (clickSubMenuAction)=\"onBackToMainMenu()\" />\n\n @for (item of selectedSubMenu(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\n [isMobile]=\"isMobile()\"\n [isSubMenuXScrollEnabled]=\"isSubMenuXScrollEnabled()\"\n [isSubMenuIconsOutlined]=\"isSubMenuIconsOutlined()\"\n [isSubMenuButtonIconsOutlined]=\"isSubMenuButtonIconsOutlined()\"\n [isSubMenuTooltipsShown]=\"isSubMenuTooltipsShown()\"\n (clickSubMenuAction)=\"onClickSubMenu($event)\"\n (clickSubMenuAdditionalAction)=\"clickSubMenuAdditional($event)\" />\n }\n </div>\n } @else {\n <div rtBlock=\"rtui-mobile-side-menu-list-main\">\n @for (item of menuItems(); track i; let i = $index) {\n <mat-list-item\n rtBlock=\"rtui-mobile-side-menu-item\"\n [rtNavigationDirective]=\"item?.link\"\n [activated]=\"selectedItem() === item || (!selectedItem() && activeMenuIds().includes(item.id))\"\n (click)=\"onClickMenu(item)\">\n @if (item?.icon) {\n <mat-icon matListItemIcon rtElem=\"icon\" [rtIconOutlined]=\"isMainMenuIconsOutlined()\">\n {{ item.icon }}\n </mat-icon>\n }\n\n @if (item?.name) {\n <div rtBlock=\"rtui-mobile-side-menu-item-title\">\n <div rtElem=\"text\">{{ item.name }}</div>\n\n @if (item?.iconButton?.icon) {\n <div rtBlock=\"rtui-mobile-side-menu-item-title-button\">\n <mat-icon rtElem=\"icon\">{{ item.iconButton?.icon }}</mat-icon>\n </div>\n }\n </div>\n }\n </mat-list-item>\n }\n </div>\n }\n </mat-nav-list>\n </ng-container>\n }\n\n @if (footerTpl()) {\n <ng-container *rtuiScrollableFooter>\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </ng-container>\n }\n </rtui-scrollable>\n} @else {\n <rtui-scrollable rtBlock=\"rtui-side-menu\">\n @if (headerTpl()) {\n <ng-container *rtuiScrollableHeader>\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </ng-container>\n }\n\n @if (menuItems().length) {\n <ng-container *rtuiScrollableContent>\n <mat-nav-list rtElem=\"list\">\n @for (item of menuItems(); track i; let i = $index) {\n <a\n rtBlock=\"rtui-side-menu-item\"\n [rtNavigationDirective]=\"item?.link\"\n (mouseenter)=\"toggleSubMenu(item)\"\n (click)=\"onClickMenu(item)\">\n @if (item?.icon) {\n <mat-list-item\n rtBlock=\"rtui-side-menu-item-button\"\n [activated]=\"selectedItem() === item || (!selectedItem() && activeMenuIds().includes(item.id))\">\n <div rtElem=\"icon\">\n <mat-icon [rtIconOutlined]=\"isMainMenuIconsOutlined()\">{{ item.icon }}</mat-icon>\n </div>\n </mat-list-item>\n }\n\n @if (item?.name) {\n <div rtElem=\"title\">{{ item.name }}</div>\n }\n </a>\n }\n </mat-nav-list>\n </ng-container>\n }\n\n @if (footerTpl()) {\n <ng-container *rtuiScrollableFooter>\n <ng-container *ngTemplateOutlet=\"footerTpl() ?? null\" />\n </ng-container>\n }\n </rtui-scrollable>\n\n <mat-drawer-container\n rtBlock=\"rtui-sub-side-menu\"\n [rtMod]=\"{ opened: subMenuRef()?.opened }\"\n [hasBackdrop]=\"true\"\n (backdropClick)=\"closeSubMenu()\">\n <mat-drawer rtBlock=\"rtui-sub-side-menu-content\" mode=\"side\" position=\"start\" (mouseleave)=\"toggleSubMenu()\">\n <rtui-scrollable>\n <ng-container *rtuiScrollableContent>\n @if (subMenuRef()?.opened && selectedSubMenu()?.length) {\n <mat-nav-list\n rtElem=\"list\"\n [rtMod]=\"{ scrollable: isSubMenuXScrollEnabled() }\"\n [rtScrollToElement]=\"activeMenuId()\"\n [elements]=\"selectedSubMenu() ?? []\">\n @for (item of selectedSubMenu(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\n [isMobile]=\"isMobile()\"\n [isSubMenuXScrollEnabled]=\"isSubMenuXScrollEnabled()\"\n [isSubMenuIconsOutlined]=\"isSubMenuIconsOutlined()\"\n [isSubMenuButtonIconsOutlined]=\"isSubMenuButtonIconsOutlined()\"\n [isSubMenuTooltipsShown]=\"isSubMenuTooltipsShown()\"\n (clickSubMenuAction)=\"onClickSubMenu($event)\"\n (clickSubMenuAdditionalAction)=\"clickSubMenuAdditional($event)\" />\n }\n </mat-nav-list>\n }\n </ng-container>\n </rtui-scrollable>\n </mat-drawer>\n </mat-drawer-container>\n}\n", styles: ["@charset \"UTF-8\";:host{--rt-side-menu-base-width: 5.5rem;--rt-side-menu-base-margin-top-between-items: .75rem;--rt-side-menu-item-width: 3.5rem;--rt-side-menu-item-height: 2rem;--rt-side-menu-item-font-size: .75rem;--rt-side-menu-item-text-align: center;--rt-side-menu-item-line-height: 1.1;--rt-side-menu-mobile-item-icon-size: 1.5rem;--rt-side-menu-mobile-item-title-font-size: .75rem;--rt-side-menu-mobile-item-additional-icon-size: 1rem;--rt-side-menu-sub-menu-width: 15rem;--rt-side-menu-sub-menu-item-width: 13.75rem;--rt-side-menu-sub-menu-item-title-font-size: .85rem;--mat-sidenav-scrim-color: transparent}:host .rtui-mobile-side-menu{width:var(--rt-side-menu-sub-menu-width)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list{display:flex;width:100%;flex-direction:column}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list--scrollable{width:fit-content}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list__sub{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item__icon{width:var(--rt-side-menu-mobile-item-icon-size);height:var(--rt-side-menu-mobile-item-icon-size);font-size:var(--rt-side-menu-mobile-item-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title{display:flex;align-items:center;justify-content:space-between}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title__text{overflow:hidden;font-size:var(--rt-font-size-xs);text-overflow:ellipsis;white-space:nowrap}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-radius-full);margin-left:var(--rt-spacing-8)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button__icon{width:var(--rt-side-menu-mobile-item-additional-icon-size);height:var(--rt-side-menu-mobile-item-additional-icon-size);font-size:var(--rt-side-menu-mobile-item-additional-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item+.rtui-mobile-side-menu-item{margin-top:var(--rt-spacing-8)}:host .rtui-side-menu{width:var(--rt-side-menu-base-width)}:host .rtui-side-menu__list{display:flex;width:100%;flex-direction:column;align-items:center}:host .rtui-side-menu__list .rtui-side-menu-item{display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;cursor:pointer}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button{display:flex;width:var(--rt-side-menu-item-width);height:var(--rt-side-menu-item-height);align-items:center;justify-content:center;padding:0}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button__icon{display:flex;align-items:center;justify-content:center}:host .rtui-side-menu__list .rtui-side-menu-item__title{font-size:var(--rt-side-menu-item-font-size);line-height:var(--rt-side-menu-item-line-height);text-align:var(--rt-side-menu-item-text-align)}:host .rtui-side-menu__list .rtui-side-menu-item+.rtui-side-menu-item{margin-top:var(--rt-side-menu-base-margin-top-between-items)}:host .rtui-sub-side-menu{position:fixed;top:0;left:var(--rt-side-menu-base-width);width:0;height:100%;background-color:transparent}:host .rtui-sub-side-menu--opened{width:100%}:host .rtui-sub-side-menu .rtui-sub-side-menu-content{--rt-side-menu-sub-content-shadow: 14px 0 28px rgb(0 0 0 / 25%), 10px 0 10px rgb(0 0 0 / 22%);width:var(--rt-side-menu-sub-menu-width);height:100%;border-left:1px solid var(--rt-border-neutral-default);box-shadow:var(--rt-side-menu-sub-content-shadow)}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list{width:100%;animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list--scrollable{min-width:fit-content}@keyframes fade-in-animation{to{opacity:1}}\n"] }]
|
|
479
|
+
], template: "@if (narrow()) {\n <rtui-scrollable rtBlock=\"rtui-mobile-side-menu\">\n @if (headerTpl()) {\n <ng-container *rtuiScrollableHeader>\n <ng-container *ngTemplateOutlet=\"headerTpl() ?? null\" />\n </ng-container>\n }\n\n @if (menuItems().length) {\n <ng-container *rtuiScrollableContent>\n <mat-nav-list\n rtBlock=\"rtui-mobile-side-menu-list\"\n [rtMod]=\"{ scrollable: selectedSubMenu()?.length && isSubMenuXScrollEnabled() }\">\n @if (selectedSubMenu()?.length) {\n <div rtElem=\"sub\" [rtScrollToElement]=\"activeMenuId()\" [elements]=\"selectedSubMenu() ?? []\">\n <rtui-side-menu-sub-item [item]=\"backToMainMenuButton()\" (clickSubMenuAction)=\"onBackToMainMenu()\" />\n\n @for (item of selectedSubMenu(); 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\">\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: subMenuRef()?.opened }\"\n [hasBackdrop]=\"true\"\n (backdropClick)=\"closeSubMenu()\">\n <mat-drawer rtBlock=\"rtui-sub-side-menu-content\" mode=\"side\" position=\"start\" (mouseleave)=\"toggleSubMenu()\">\n <rtui-scrollable>\n <ng-container *rtuiScrollableContent>\n @if (subMenuRef()?.opened && selectedSubMenu()?.length) {\n <mat-nav-list\n rtElem=\"list\"\n [rtMod]=\"{ scrollable: isSubMenuXScrollEnabled() }\"\n [rtScrollToElement]=\"activeMenuId()\"\n [elements]=\"selectedSubMenu() ?? []\">\n @for (item of selectedSubMenu(); track i; let i = $index) {\n <rtui-side-menu-sub-item\n [item]=\"item\"\n [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", styles: ["@charset \"UTF-8\";:host{--rt-side-menu-base-width: 5.5rem;--rt-side-menu-base-margin-top-between-items: .75rem;--rt-side-menu-item-width: 3.5rem;--rt-side-menu-item-height: 2rem;--rt-side-menu-item-font-size: .75rem;--rt-side-menu-item-text-align: center;--rt-side-menu-item-line-height: 1.1;--rt-side-menu-mobile-item-icon-size: 1.5rem;--rt-side-menu-mobile-item-title-font-size: .75rem;--rt-side-menu-mobile-item-additional-icon-size: 1rem;--rt-side-menu-sub-menu-width: 15rem;--rt-side-menu-sub-menu-item-width: 13.75rem;--rt-side-menu-sub-menu-item-title-font-size: .85rem;--mat-sidenav-scrim-color: transparent}:host .rtui-mobile-side-menu{width:var(--rt-side-menu-sub-menu-width)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list{display:flex;width:100%;flex-direction:column}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list--scrollable{width:fit-content}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list__sub{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main{animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item__icon{width:var(--rt-side-menu-mobile-item-icon-size);height:var(--rt-side-menu-mobile-item-icon-size);font-size:var(--rt-side-menu-mobile-item-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title{display:flex;align-items:center;justify-content:space-between}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title__text{overflow:hidden;font-size:var(--rt-font-size-xs);text-overflow:ellipsis;white-space:nowrap}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-radius-full);margin-left:var(--rt-spacing-8)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item .rtui-mobile-side-menu-item-title .rtui-mobile-side-menu-item-title-button__icon{width:var(--rt-side-menu-mobile-item-additional-icon-size);height:var(--rt-side-menu-mobile-item-additional-icon-size);font-size:var(--rt-side-menu-mobile-item-additional-icon-size)}:host .rtui-mobile-side-menu .rtui-mobile-side-menu-list .rtui-mobile-side-menu-list-main .rtui-mobile-side-menu-item+.rtui-mobile-side-menu-item{margin-top:var(--rt-spacing-8)}:host .rtui-side-menu{width:var(--rt-side-menu-base-width)}:host .rtui-side-menu__list{display:flex;width:100%;flex-direction:column;align-items:center}:host .rtui-side-menu__list .rtui-side-menu-item{display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;cursor:pointer}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button{display:flex;width:var(--rt-side-menu-item-width);height:var(--rt-side-menu-item-height);align-items:center;justify-content:center;padding:0}:host .rtui-side-menu__list .rtui-side-menu-item .rtui-side-menu-item-button__icon{display:flex;align-items:center;justify-content:center}:host .rtui-side-menu__list .rtui-side-menu-item__title{font-size:var(--rt-side-menu-item-font-size);line-height:var(--rt-side-menu-item-line-height);text-align:var(--rt-side-menu-item-text-align)}:host .rtui-side-menu__list .rtui-side-menu-item+.rtui-side-menu-item{margin-top:var(--rt-side-menu-base-margin-top-between-items)}:host .rtui-sub-side-menu{position:fixed;top:0;left:var(--rt-side-menu-base-width);width:0;height:100%;background-color:transparent}:host .rtui-sub-side-menu--opened{width:100%}:host .rtui-sub-side-menu .rtui-sub-side-menu-content{--rt-side-menu-sub-content-shadow: 14px 0 28px rgb(0 0 0 / 25%), 10px 0 10px rgb(0 0 0 / 22%);width:var(--rt-side-menu-sub-menu-width);height:100%;border-left:1px solid var(--rt-border-neutral-default);box-shadow:var(--rt-side-menu-sub-content-shadow)}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list{width:100%;animation:fade-in-animation .15s ease-in-out .15s forwards;opacity:0}:host .rtui-sub-side-menu .rtui-sub-side-menu-content__list--scrollable{min-width:fit-content}@keyframes fade-in-animation{to{opacity:1}}\n"] }]
|
|
451
480
|
}], propDecorators: { headerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiSideMenuHeaderDirective), { ...{
|
|
452
481
|
read: TemplateRef,
|
|
453
482
|
}, isSignal: true }] }], footerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiSideMenuFooterDirective), { ...{
|
|
454
483
|
read: TemplateRef,
|
|
455
484
|
}, isSignal: true }] }], subMenuRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatDrawer), { isSignal: true }] }], activeMenuIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeMenuIds", required: true }] }], menuItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuItems", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], isSubMenuXScrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuXScrollEnabled", required: false }] }], isMainMenuIconsOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMainMenuIconsOutlined", required: false }] }], isSubMenuIconsOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuIconsOutlined", required: false }] }], isSubMenuButtonIconsOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuButtonIconsOutlined", required: false }] }], isSubMenuTooltipsShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubMenuTooltipsShown", required: false }] }], closeMobileMenuAction: [{ type: i0.Output, args: ["closeMobileMenuAction"] }], clickSubMenuAction: [{ type: i0.Output, args: ["clickSubMenuAction"] }], clickSubMenuAdditionalAction: [{ type: i0.Output, args: ["clickSubMenuAdditionalAction"] }] } });
|
|
456
485
|
|
|
486
|
+
const BEM_BLOCK$v = 'rtui-spinner';
|
|
457
487
|
class RtuiSpinnerComponent {
|
|
458
488
|
constructor() {
|
|
459
489
|
this.diameter = input(32, { ...(ngDevMode ? { debugName: "diameter" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
@@ -461,11 +491,11 @@ class RtuiSpinnerComponent {
|
|
|
461
491
|
this.showBackground = input(false, { ...(ngDevMode ? { debugName: "showBackground" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
462
492
|
}
|
|
463
493
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
464
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiSpinnerComponent, isStandalone: true, selector: "rtui-spinner", inputs: { diameter: { classPropertyName: "diameter", publicName: "diameter", isSignal: true, isRequired: false, transformFunction: null }, showBox: { classPropertyName: "showBox", publicName: "showBox", isSignal: true, isRequired: false, transformFunction: null }, showBackground: { classPropertyName: "showBackground", publicName: "showBackground", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<
|
|
494
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiSpinnerComponent, isStandalone: true, selector: "rtui-spinner", inputs: { diameter: { classPropertyName: "diameter", publicName: "diameter", isSignal: true, isRequired: false, transformFunction: null }, showBox: { classPropertyName: "showBox", publicName: "showBox", isSignal: true, isRequired: false, transformFunction: null }, showBackground: { classPropertyName: "showBackground", publicName: "showBackground", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "rtui-spinner" }, ngImport: i0, template: "<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", styles: [":host{position:absolute;z-index:10000;display:flex;width:100%;height:100%;align-items:center;justify-content:center}:host .rtui-spinner__container{display:flex;width:100%;height:100%;align-items:center;justify-content:center}:host .rtui-spinner__container--bgr-color{background-color:color-mix(in srgb,var(--rt-bg-base-subtle) 85%,transparent)}:host .rtui-spinner__wrapper{display:flex;align-items:center;justify-content:center}:host .rtui-spinner__wrapper mat-spinner ::ng-deep circle{stroke:var(--rt-icon-accent-brand)}:host .rtui-spinner__wrapper--bgr-color{--rt-spinner-backdrop-shadow: 0 1px 3px rgb(0 0 0 / 12%), 0 1px 2px rgb(0 0 0 / 24%);width:3rem;height:3rem;border-radius:var(--rt-radius-full);background:var(--rt-bg-base-base);box-shadow:var(--rt-spinner-backdrop-shadow)}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
465
495
|
}
|
|
466
496
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSpinnerComponent, decorators: [{
|
|
467
497
|
type: Component,
|
|
468
|
-
args: [{ selector: 'rtui-spinner', imports: [MatProgressSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
498
|
+
args: [{ selector: 'rtui-spinner', imports: [MatProgressSpinnerModule, BlockDirective, ElemDirective, ModDirective], host: { class: BEM_BLOCK$v }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [":host{position:absolute;z-index:10000;display:flex;width:100%;height:100%;align-items:center;justify-content:center}:host .rtui-spinner__container{display:flex;width:100%;height:100%;align-items:center;justify-content:center}:host .rtui-spinner__container--bgr-color{background-color:color-mix(in srgb,var(--rt-bg-base-subtle) 85%,transparent)}:host .rtui-spinner__wrapper{display:flex;align-items:center;justify-content:center}:host .rtui-spinner__wrapper mat-spinner ::ng-deep circle{stroke:var(--rt-icon-accent-brand)}:host .rtui-spinner__wrapper--bgr-color{--rt-spinner-backdrop-shadow: 0 1px 3px rgb(0 0 0 / 12%), 0 1px 2px rgb(0 0 0 / 24%);width:3rem;height:3rem;border-radius:var(--rt-radius-full);background:var(--rt-bg-base-base);box-shadow:var(--rt-spinner-backdrop-shadow)}\n"] }]
|
|
469
499
|
}], propDecorators: { diameter: [{ type: i0.Input, args: [{ isSignal: true, alias: "diameter", required: false }] }], showBox: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBox", required: false }] }], showBackground: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBackground", required: false }] }] } });
|
|
470
500
|
|
|
471
501
|
class AsideRef {
|
|
@@ -495,24 +525,23 @@ var ASIDE_BUTTONS_ENUM;
|
|
|
495
525
|
ASIDE_BUTTONS_ENUM["RESET"] = "Reset";
|
|
496
526
|
})(ASIDE_BUTTONS_ENUM || (ASIDE_BUTTONS_ENUM = {}));
|
|
497
527
|
|
|
528
|
+
const BEM_BLOCK$u = 'rtui-aside-panel';
|
|
498
529
|
class RtuiAsidePanelComponent {
|
|
499
530
|
constructor() {
|
|
500
531
|
this.#asideRef = inject(ASIDE_REF);
|
|
501
|
-
this.#
|
|
532
|
+
this.#changeDetectorRef = inject(ChangeDetectorRef);
|
|
502
533
|
this._state = `enter-${this.#asideRef.position}`;
|
|
503
534
|
this.portal = this.#createPortal(this.#asideRef);
|
|
504
535
|
this.position = this.#asideRef.position;
|
|
505
|
-
this.isSmall$ = this.#breakpointObserver
|
|
506
|
-
.observe(['(max-width: 1023px)'])
|
|
507
|
-
.pipe(map((result) => result.matches));
|
|
508
536
|
}
|
|
509
537
|
#asideRef;
|
|
510
|
-
#
|
|
538
|
+
#changeDetectorRef;
|
|
511
539
|
close() {
|
|
512
540
|
this.#asideRef.close();
|
|
513
541
|
}
|
|
514
542
|
startExitAnimation() {
|
|
515
543
|
this._state = `exit-${this.#asideRef.position}`;
|
|
544
|
+
this.#changeDetectorRef.markForCheck();
|
|
516
545
|
}
|
|
517
546
|
#createPortal(asideRef) {
|
|
518
547
|
const injector = Injector.create({
|
|
@@ -526,7 +555,7 @@ class RtuiAsidePanelComponent {
|
|
|
526
555
|
return new ComponentPortal(asideRef.component, null, injector);
|
|
527
556
|
}
|
|
528
557
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiAsidePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
529
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: RtuiAsidePanelComponent, isStandalone: true, selector: "rtui-aside-panel", host: { properties: { "@aside": "this._state" } }, ngImport: i0, template: "<div
|
|
558
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: RtuiAsidePanelComponent, isStandalone: true, selector: "rtui-aside-panel", host: { properties: { "@aside": "this._state" }, classAttribute: "rtui-aside-panel" }, ngImport: i0, template: "<div rtBlock=\"c-aside\">\n <ng-container *cdkPortalOutlet=\"portal\" />\n</div>\n", styles: ["@charset \"UTF-8\";:root{--rt-aside-host-width: 33.75rem;--rt-aside-host-box-shadow: 0 0 1rem 0 var(--rt-color-dark-a10);--rt-aside-host-background-color: var(--rt-bg-base-base);--rt-aside-header-padding: 2rem;--rt-aside-header-mobile-padding: 1rem;--rt-aside-header-back-button-margin-right: 1rem;--rt-aside-header-title-font-size: 1.5rem;--rt-aside-header-title-line-height: 1.1;--rt-aside-header-title-font-weight: 600;--rt-aside-header-description-font-size: 1rem;--rt-aside-header-description-margin-bottom: .25rem;--rt-aside-header-description-color: var(--rt-text-base-secondary);--rt-aside-header-addition-font-size: 1rem;--rt-aside-header-addition-margin-top: .25rem;--rt-aside-header-addition-color: var(--rt-text-base-secondary);--rt-aside-header-actions-margin-left: 1rem;--rt-aside-header-action-button-margin-left: .75rem;--rt-aside-content-padding: 0 2rem;--rt-aside-content-mobile-padding: 0 1rem;--rt-aside-footer-padding: 2rem;--rt-aside-footer-margin-left-between-buttons: 1rem;--rt-aside-footer-mobile-padding: 1rem;--rt-aside-error-box-height: 2rem;--rt-aside-error-box-padding: .5rem;--rt-aside-error-box-margin: 2rem 0 2rem 0;--rt-aside-error-box-border: 1px solid var(--rt-border-accent-danger-soft);--rt-aside-error-box-border-radius: .375rem;--rt-aside-error-box-title-font-size: 1rem;--rt-aside-error-box-title-font-color: var(--rt-text-accent-danger-soft);--rt-aside-error-box-button-font-size: 1rem;--rt-aside-error-box-button-font-color: var(--rt-text-base-strong);--rt-aside-tab-indicator-width: 6rem;--rt-aside-tab-badge-color: var(--mdc-filled-button-container-color);--rt-aside-tab-badge-incorrect-color: var(--rt-text-accent-danger);--rt-aside-footer-margin-left-betwen-buttons: var(--rt-aside-footer-margin-left-between-buttons)}.icon-badge{position:absolute!important}.title-badge{top:-.5rem;margin-left:var(--rt-spacing-4)}.icon-badge .mat-badge-content,.title-badge .mat-badge-content{background-color:var(--rt-aside-tab-badge-color)}.icon-badge.--incorrect .mat-badge-content,.title-badge.--incorrect .mat-badge-content{background-color:var(--rt-aside-tab-badge-incorrect-color)}.c-aside{position:relative;width:var(--rt-aside-host-width);height:100vh;max-height:100vh;background-color:var(--rt-aside-host-background-color);box-shadow:var(--rt-aside-host-box-shadow)}.c-aside .mdc-tab-indicator__content.mdc-tab-indicator__content--underline{width:var(--rt-aside-tab-indicator-width)}@media screen and (max-width:599px){.c-aside{width:100vw}}.c-aside-header{padding:var(--rt-aside-header-padding)}.c-aside-header .back-button{margin-right:var(--rt-aside-header-back-button-margin-right)}.c-aside-header .c-aside-title{display:flex;width:100%;height:100%;flex-direction:column;align-items:flex-start;justify-content:center}.c-aside-header .c-aside-title__descr{margin-bottom:var(--rt-aside-header-description-margin-bottom);color:var(--rt-aside-header-description-color);font-size:var(--rt-aside-header-description-font-size)}.c-aside-header .c-aside-title__txt{font-size:var(--rt-aside-header-title-font-size);font-weight:var(--rt-aside-header-title-font-weight);line-height:var(--rt-aside-header-title-line-height)}.c-aside-header .c-aside-title__addition{margin-top:var(--rt-aside-header-addition-margin-top);color:var(--rt-aside-header-addition-color);font-size:var(--rt-aside-header-addition-font-size)}.c-aside-header .c-aside-title__descr,.c-aside-header .c-aside-title__txt,.c-aside-header .c-aside-title__addition{overflow:hidden;width:100%;text-overflow:ellipsis;white-space:nowrap}.c-aside-header .c-aside-actions{margin-left:var(--rt-aside-header-actions-margin-left)}.c-aside-header .c-aside-actions__action{margin-left:var(--rt-aside-header-action-button-margin-left)}@media screen and (max-width:599px){.c-aside-header{padding:var(--rt-aside-header-mobile-padding)}}.c-aside-content{display:flex;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:flex-start;padding:var(--rt-aside-content-padding)}.c-aside-content .mat-mdc-tab-header{position:sticky;z-index:1000;top:0;background:var(--rt-bg-base-base)}@media screen and (max-width:599px){.c-aside-content{padding:var(--rt-aside-content-mobile-padding)}}.c-aside-footer{display:flex;align-items:center;justify-content:flex-end;padding:var(--rt-aside-footer-padding)}.c-aside-footer .c-aside-footer-btn__title{text-transform:uppercase}.c-aside-footer .c-aside-footer-btn+.c-aside-footer-btn{margin-left:var(--rt-aside-footer-margin-left-between-buttons)}@media screen and (max-width:599px){.c-aside-footer{padding:var(--rt-aside-footer-mobile-padding)}}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }], animations: [
|
|
530
559
|
trigger('aside', [
|
|
531
560
|
state('enter-left', style({ transform: 'none' })),
|
|
532
561
|
transition('* => enter-left', [
|
|
@@ -541,11 +570,11 @@ class RtuiAsidePanelComponent {
|
|
|
541
570
|
]),
|
|
542
571
|
transition('enter-right => *', animate('200ms ease-in', style({ transform: 'translateX(100%)' }))),
|
|
543
572
|
]),
|
|
544
|
-
], changeDetection: i0.ChangeDetectionStrategy.
|
|
573
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
545
574
|
}
|
|
546
575
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiAsidePanelComponent, decorators: [{
|
|
547
576
|
type: Component,
|
|
548
|
-
args: [{ selector: 'rtui-aside-panel', encapsulation: ViewEncapsulation.None, imports: [
|
|
577
|
+
args: [{ selector: 'rtui-aside-panel', host: { class: BEM_BLOCK$u }, encapsulation: ViewEncapsulation.None, imports: [PortalModule, BlockDirective], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
549
578
|
trigger('aside', [
|
|
550
579
|
state('enter-left', style({ transform: 'none' })),
|
|
551
580
|
transition('* => enter-left', [
|
|
@@ -560,7 +589,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
560
589
|
]),
|
|
561
590
|
transition('enter-right => *', animate('200ms ease-in', style({ transform: 'translateX(100%)' }))),
|
|
562
591
|
]),
|
|
563
|
-
], template: "<div
|
|
592
|
+
], template: "<div rtBlock=\"c-aside\">\n <ng-container *cdkPortalOutlet=\"portal\" />\n</div>\n", styles: ["@charset \"UTF-8\";:root{--rt-aside-host-width: 33.75rem;--rt-aside-host-box-shadow: 0 0 1rem 0 var(--rt-color-dark-a10);--rt-aside-host-background-color: var(--rt-bg-base-base);--rt-aside-header-padding: 2rem;--rt-aside-header-mobile-padding: 1rem;--rt-aside-header-back-button-margin-right: 1rem;--rt-aside-header-title-font-size: 1.5rem;--rt-aside-header-title-line-height: 1.1;--rt-aside-header-title-font-weight: 600;--rt-aside-header-description-font-size: 1rem;--rt-aside-header-description-margin-bottom: .25rem;--rt-aside-header-description-color: var(--rt-text-base-secondary);--rt-aside-header-addition-font-size: 1rem;--rt-aside-header-addition-margin-top: .25rem;--rt-aside-header-addition-color: var(--rt-text-base-secondary);--rt-aside-header-actions-margin-left: 1rem;--rt-aside-header-action-button-margin-left: .75rem;--rt-aside-content-padding: 0 2rem;--rt-aside-content-mobile-padding: 0 1rem;--rt-aside-footer-padding: 2rem;--rt-aside-footer-margin-left-between-buttons: 1rem;--rt-aside-footer-mobile-padding: 1rem;--rt-aside-error-box-height: 2rem;--rt-aside-error-box-padding: .5rem;--rt-aside-error-box-margin: 2rem 0 2rem 0;--rt-aside-error-box-border: 1px solid var(--rt-border-accent-danger-soft);--rt-aside-error-box-border-radius: .375rem;--rt-aside-error-box-title-font-size: 1rem;--rt-aside-error-box-title-font-color: var(--rt-text-accent-danger-soft);--rt-aside-error-box-button-font-size: 1rem;--rt-aside-error-box-button-font-color: var(--rt-text-base-strong);--rt-aside-tab-indicator-width: 6rem;--rt-aside-tab-badge-color: var(--mdc-filled-button-container-color);--rt-aside-tab-badge-incorrect-color: var(--rt-text-accent-danger);--rt-aside-footer-margin-left-betwen-buttons: var(--rt-aside-footer-margin-left-between-buttons)}.icon-badge{position:absolute!important}.title-badge{top:-.5rem;margin-left:var(--rt-spacing-4)}.icon-badge .mat-badge-content,.title-badge .mat-badge-content{background-color:var(--rt-aside-tab-badge-color)}.icon-badge.--incorrect .mat-badge-content,.title-badge.--incorrect .mat-badge-content{background-color:var(--rt-aside-tab-badge-incorrect-color)}.c-aside{position:relative;width:var(--rt-aside-host-width);height:100vh;max-height:100vh;background-color:var(--rt-aside-host-background-color);box-shadow:var(--rt-aside-host-box-shadow)}.c-aside .mdc-tab-indicator__content.mdc-tab-indicator__content--underline{width:var(--rt-aside-tab-indicator-width)}@media screen and (max-width:599px){.c-aside{width:100vw}}.c-aside-header{padding:var(--rt-aside-header-padding)}.c-aside-header .back-button{margin-right:var(--rt-aside-header-back-button-margin-right)}.c-aside-header .c-aside-title{display:flex;width:100%;height:100%;flex-direction:column;align-items:flex-start;justify-content:center}.c-aside-header .c-aside-title__descr{margin-bottom:var(--rt-aside-header-description-margin-bottom);color:var(--rt-aside-header-description-color);font-size:var(--rt-aside-header-description-font-size)}.c-aside-header .c-aside-title__txt{font-size:var(--rt-aside-header-title-font-size);font-weight:var(--rt-aside-header-title-font-weight);line-height:var(--rt-aside-header-title-line-height)}.c-aside-header .c-aside-title__addition{margin-top:var(--rt-aside-header-addition-margin-top);color:var(--rt-aside-header-addition-color);font-size:var(--rt-aside-header-addition-font-size)}.c-aside-header .c-aside-title__descr,.c-aside-header .c-aside-title__txt,.c-aside-header .c-aside-title__addition{overflow:hidden;width:100%;text-overflow:ellipsis;white-space:nowrap}.c-aside-header .c-aside-actions{margin-left:var(--rt-aside-header-actions-margin-left)}.c-aside-header .c-aside-actions__action{margin-left:var(--rt-aside-header-action-button-margin-left)}@media screen and (max-width:599px){.c-aside-header{padding:var(--rt-aside-header-mobile-padding)}}.c-aside-content{display:flex;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:flex-start;padding:var(--rt-aside-content-padding)}.c-aside-content .mat-mdc-tab-header{position:sticky;z-index:1000;top:0;background:var(--rt-bg-base-base)}@media screen and (max-width:599px){.c-aside-content{padding:var(--rt-aside-content-mobile-padding)}}.c-aside-footer{display:flex;align-items:center;justify-content:flex-end;padding:var(--rt-aside-footer-padding)}.c-aside-footer .c-aside-footer-btn__title{text-transform:uppercase}.c-aside-footer .c-aside-footer-btn+.c-aside-footer-btn{margin-left:var(--rt-aside-footer-margin-left-between-buttons)}@media screen and (max-width:599px){.c-aside-footer{padding:var(--rt-aside-footer-mobile-padding)}}\n"] }]
|
|
564
593
|
}], propDecorators: { _state: [{
|
|
565
594
|
type: HostBinding,
|
|
566
595
|
args: ['@aside']
|
|
@@ -693,6 +722,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
693
722
|
selector: '[rtuiToolbarRight]',
|
|
694
723
|
}]
|
|
695
724
|
}] });
|
|
725
|
+
const BEM_BLOCK$t = 'rtui-toolbar';
|
|
696
726
|
class RtuiToolbarComponent {
|
|
697
727
|
constructor() {
|
|
698
728
|
this.isVisibleToolbar = input(true, /* @ts-ignore */
|
|
@@ -703,11 +733,11 @@ class RtuiToolbarComponent {
|
|
|
703
733
|
this.sticky = input(false, { ...(ngDevMode ? { debugName: "sticky" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
704
734
|
}
|
|
705
735
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
706
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiToolbarComponent, isStandalone: true, selector: "rtui-toolbar", inputs: { isVisibleToolbar: { classPropertyName: "isVisibleToolbar", publicName: "isVisibleToolbar", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "leftToolTpl", first: true, predicate: RtuiToolbarLeftDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "centerToolTpl", first: true, predicate: RtuiToolbarCenterDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "rightToolTpl", first: true, predicate: RtuiToolbarRightDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-toolbar-body-height: 3rem;--rt-toolbar-body-padding: 0 1rem;--rt-toolbar-body-background-color: transparent;--rt-toolbar-body-mobile-height: 3rem;--rt-toolbar-bars-border-bottom-style: solid;--rt-toolbar-bars-border-bottom-width: 1px;--rt-toolbar-bars-border-bottom-color: var(--rt-border-neutral-default);--rt-toolbar-bars-left-width: fit-content;--rt-toolbar-bars-center-width: 100%;--rt-toolbar-bars-right-width: fit-content;--mat-tab-header-divider-height: 0}:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-mobile-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-mobile-height);height:var(--rt-toolbar-body-mobile-height);min-height:var(--rt-toolbar-body-mobile-height);padding:var(--rt-toolbar-body-padding);background-color:transparent}:host .toolbar--sticky{position:sticky;top:0}@media screen and (min-width:720px){:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-height);height:var(--rt-toolbar-body-height);min-height:var(--rt-toolbar-body-height)}}:host .toolbar .bars{position:relative;display:flex;width:100%;height:100%;border-bottom:var(--rt-toolbar-bars-border-bottom-width) var(--rt-toolbar-bars-border-bottom-style) var(--rt-toolbar-bars-border-bottom-color);background-color:var(--rt-toolbar-body-background-color)}:host .toolbar .bars__bar--left{width:var(--rt-toolbar-bars-left-width)}:host .toolbar .bars__bar--center{overflow:hidden;width:var(--rt-toolbar-bars-center-width)}:host .toolbar .bars__bar--right{width:var(--rt-toolbar-bars-right-width)}:host .toolbar .bars__bar--left,:host .toolbar .bars__bar--center,:host .toolbar .bars__bar--right{display:flex;height:100%;align-items:center}\n"], dependencies: [{ kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
736
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiToolbarComponent, isStandalone: true, selector: "rtui-toolbar", inputs: { isVisibleToolbar: { classPropertyName: "isVisibleToolbar", publicName: "isVisibleToolbar", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "rtui-toolbar" }, queries: [{ propertyName: "leftToolTpl", first: true, predicate: RtuiToolbarLeftDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "centerToolTpl", first: true, predicate: RtuiToolbarCenterDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "rightToolTpl", first: true, predicate: RtuiToolbarRightDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-toolbar-body-height: 3rem;--rt-toolbar-body-padding: 0 1rem;--rt-toolbar-body-background-color: transparent;--rt-toolbar-body-mobile-height: 3rem;--rt-toolbar-bars-border-bottom-style: solid;--rt-toolbar-bars-border-bottom-width: 1px;--rt-toolbar-bars-border-bottom-color: var(--rt-border-neutral-default);--rt-toolbar-bars-left-width: fit-content;--rt-toolbar-bars-center-width: 100%;--rt-toolbar-bars-right-width: fit-content;--mat-tab-header-divider-height: 0}:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-mobile-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-mobile-height);height:var(--rt-toolbar-body-mobile-height);min-height:var(--rt-toolbar-body-mobile-height);padding:var(--rt-toolbar-body-padding);background-color:transparent}:host .toolbar--sticky{position:sticky;top:0}@media screen and (min-width:720px){:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-height);height:var(--rt-toolbar-body-height);min-height:var(--rt-toolbar-body-height)}}:host .toolbar .bars{position:relative;display:flex;width:100%;height:100%;border-bottom:var(--rt-toolbar-bars-border-bottom-width) var(--rt-toolbar-bars-border-bottom-style) var(--rt-toolbar-bars-border-bottom-color);background-color:var(--rt-toolbar-body-background-color)}:host .toolbar .bars__bar--left{width:var(--rt-toolbar-bars-left-width)}:host .toolbar .bars__bar--center{overflow:hidden;width:var(--rt-toolbar-bars-center-width)}:host .toolbar .bars__bar--right{width:var(--rt-toolbar-bars-right-width)}:host .toolbar .bars__bar--left,:host .toolbar .bars__bar--center,:host .toolbar .bars__bar--right{display:flex;height:100%;align-items:center}\n"], dependencies: [{ kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
707
737
|
}
|
|
708
738
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiToolbarComponent, decorators: [{
|
|
709
739
|
type: Component,
|
|
710
|
-
args: [{ selector: 'rtui-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatToolbar, NgTemplateOutlet, BlockDirective, ElemDirective, ModDirective], template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-toolbar-body-height: 3rem;--rt-toolbar-body-padding: 0 1rem;--rt-toolbar-body-background-color: transparent;--rt-toolbar-body-mobile-height: 3rem;--rt-toolbar-bars-border-bottom-style: solid;--rt-toolbar-bars-border-bottom-width: 1px;--rt-toolbar-bars-border-bottom-color: var(--rt-border-neutral-default);--rt-toolbar-bars-left-width: fit-content;--rt-toolbar-bars-center-width: 100%;--rt-toolbar-bars-right-width: fit-content;--mat-tab-header-divider-height: 0}:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-mobile-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-mobile-height);height:var(--rt-toolbar-body-mobile-height);min-height:var(--rt-toolbar-body-mobile-height);padding:var(--rt-toolbar-body-padding);background-color:transparent}:host .toolbar--sticky{position:sticky;top:0}@media screen and (min-width:720px){:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-height);height:var(--rt-toolbar-body-height);min-height:var(--rt-toolbar-body-height)}}:host .toolbar .bars{position:relative;display:flex;width:100%;height:100%;border-bottom:var(--rt-toolbar-bars-border-bottom-width) var(--rt-toolbar-bars-border-bottom-style) var(--rt-toolbar-bars-border-bottom-color);background-color:var(--rt-toolbar-body-background-color)}:host .toolbar .bars__bar--left{width:var(--rt-toolbar-bars-left-width)}:host .toolbar .bars__bar--center{overflow:hidden;width:var(--rt-toolbar-bars-center-width)}:host .toolbar .bars__bar--right{width:var(--rt-toolbar-bars-right-width)}:host .toolbar .bars__bar--left,:host .toolbar .bars__bar--center,:host .toolbar .bars__bar--right{display:flex;height:100%;align-items:center}\n"] }]
|
|
740
|
+
args: [{ selector: 'rtui-toolbar', host: { class: BEM_BLOCK$t }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatToolbar, NgTemplateOutlet, BlockDirective, ElemDirective, ModDirective], template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-toolbar-body-height: 3rem;--rt-toolbar-body-padding: 0 1rem;--rt-toolbar-body-background-color: transparent;--rt-toolbar-body-mobile-height: 3rem;--rt-toolbar-bars-border-bottom-style: solid;--rt-toolbar-bars-border-bottom-width: 1px;--rt-toolbar-bars-border-bottom-color: var(--rt-border-neutral-default);--rt-toolbar-bars-left-width: fit-content;--rt-toolbar-bars-center-width: 100%;--rt-toolbar-bars-right-width: fit-content;--mat-tab-header-divider-height: 0}:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-mobile-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-mobile-height);height:var(--rt-toolbar-body-mobile-height);min-height:var(--rt-toolbar-body-mobile-height);padding:var(--rt-toolbar-body-padding);background-color:transparent}:host .toolbar--sticky{position:sticky;top:0}@media screen and (min-width:720px){:host .toolbar{--mat-toolbar-standard-height: var(--rt-toolbar-body-height);--mdc-secondary-navigation-tab-container-height: var(--rt-toolbar-body-height);height:var(--rt-toolbar-body-height);min-height:var(--rt-toolbar-body-height)}}:host .toolbar .bars{position:relative;display:flex;width:100%;height:100%;border-bottom:var(--rt-toolbar-bars-border-bottom-width) var(--rt-toolbar-bars-border-bottom-style) var(--rt-toolbar-bars-border-bottom-color);background-color:var(--rt-toolbar-body-background-color)}:host .toolbar .bars__bar--left{width:var(--rt-toolbar-bars-left-width)}:host .toolbar .bars__bar--center{overflow:hidden;width:var(--rt-toolbar-bars-center-width)}:host .toolbar .bars__bar--right{width:var(--rt-toolbar-bars-right-width)}:host .toolbar .bars__bar--left,:host .toolbar .bars__bar--center,:host .toolbar .bars__bar--right{display:flex;height:100%;align-items:center}\n"] }]
|
|
711
741
|
}], propDecorators: { isVisibleToolbar: [{ type: i0.Input, args: [{ isSignal: true, alias: "isVisibleToolbar", required: false }] }], leftToolTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiToolbarLeftDirective), { ...{
|
|
712
742
|
read: TemplateRef,
|
|
713
743
|
}, isSignal: true }] }], centerToolTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiToolbarCenterDirective), { ...{
|
|
@@ -716,6 +746,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
716
746
|
read: TemplateRef,
|
|
717
747
|
}, isSignal: true }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }] } });
|
|
718
748
|
|
|
749
|
+
const BEM_BLOCK$s = 'rtui-aside-error-box';
|
|
719
750
|
class AsideErrorBoxComponent {
|
|
720
751
|
constructor() {
|
|
721
752
|
this.#clipboard = inject(Clipboard);
|
|
@@ -732,19 +763,21 @@ class AsideErrorBoxComponent {
|
|
|
732
763
|
setTimeout(() => this.isErrorCopied.set(false), 1000);
|
|
733
764
|
}
|
|
734
765
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: AsideErrorBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
735
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: AsideErrorBoxComponent, isStandalone: true, selector: "rtui-aside-error-box", inputs: { error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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=\"
|
|
766
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: AsideErrorBoxComponent, isStandalone: true, selector: "rtui-aside-error-box", inputs: { error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "rtui-aside-error-box" }, ngImport: i0, template: "<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", styles: [":host{display:flex;width:100%}:host .aside-error-box{display:flex;width:100%;height:var(--rt-aside-error-box-height);align-items:center;justify-content:space-between;padding:var(--rt-aside-error-box-padding);border:var(--rt-aside-error-box-border);border-radius:var(--rt-aside-error-box-border-radius);margin:var(--rt-aside-error-box-margin)}:host .aside-error-box__title{color:var(--rt-aside-error-box-title-font-color);font-size:var(--rt-aside-error-box-title-font-size)}:host .aside-error-box .aside-error-box-button__icon{margin-right:var(--rt-spacing-8)}:host .aside-error-box .aside-error-box-button__title{color:var(--rt-aside-error-box-button-font-color);font-size:var(--rt-aside-error-box-button-font-size)}:host .aside-error-box .aside-error-box-button--complete{background-color:transparent;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: ModDirective, selector: "[rtMod]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
736
767
|
// bem
|
|
737
|
-
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
768
|
+
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "pipe", type: ConcatClassesPipe, name: "concatClasses" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
738
769
|
}
|
|
739
770
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: AsideErrorBoxComponent, decorators: [{
|
|
740
771
|
type: Component,
|
|
741
|
-
args: [{ selector: 'rtui-aside-error-box', imports: [
|
|
772
|
+
args: [{ selector: 'rtui-aside-error-box', host: { class: BEM_BLOCK$s }, imports: [
|
|
773
|
+
ModDirective,
|
|
742
774
|
MatIcon,
|
|
743
775
|
MatButton,
|
|
744
776
|
// bem
|
|
745
777
|
BlockDirective,
|
|
746
778
|
ElemDirective,
|
|
747
|
-
|
|
779
|
+
ConcatClassesPipe,
|
|
780
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [":host{display:flex;width:100%}:host .aside-error-box{display:flex;width:100%;height:var(--rt-aside-error-box-height);align-items:center;justify-content:space-between;padding:var(--rt-aside-error-box-padding);border:var(--rt-aside-error-box-border);border-radius:var(--rt-aside-error-box-border-radius);margin:var(--rt-aside-error-box-margin)}:host .aside-error-box__title{color:var(--rt-aside-error-box-title-font-color);font-size:var(--rt-aside-error-box-title-font-size)}:host .aside-error-box .aside-error-box-button__icon{margin-right:var(--rt-spacing-8)}:host .aside-error-box .aside-error-box-button__title{color:var(--rt-aside-error-box-button-font-color);font-size:var(--rt-aside-error-box-button-font-size)}:host .aside-error-box .aside-error-box-button--complete{background-color:transparent;cursor:not-allowed}\n"] }]
|
|
748
781
|
}], propDecorators: { error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: true }] }] } });
|
|
749
782
|
|
|
750
783
|
class RtuiAsideContainerHeaderDirective {
|
|
@@ -757,11 +790,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
757
790
|
selector: '[rtuiAsideHeader]',
|
|
758
791
|
}]
|
|
759
792
|
}] });
|
|
793
|
+
const BEM_BLOCK$r = 'c-aside';
|
|
760
794
|
class RtuiAsideContainerComponent {
|
|
761
795
|
constructor() {
|
|
796
|
+
this.#breakpoints = inject(BreakpointService);
|
|
797
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
798
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
799
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
762
800
|
this.title = input(null, /* @ts-ignore */
|
|
763
801
|
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
764
|
-
|
|
802
|
+
/**
|
|
803
|
+
* Признак узкого экрана.
|
|
804
|
+
*
|
|
805
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
806
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
807
|
+
*/
|
|
808
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
765
809
|
this.isSubmitButtonDisabled = input.required({ ...(ngDevMode ? { debugName: "isSubmitButtonDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
766
810
|
this.isFooterShown = input(true, { ...(ngDevMode ? { debugName: "isFooterShown" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
767
811
|
this.pending = input(false, { ...(ngDevMode ? { debugName: "pending" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
@@ -780,6 +824,7 @@ class RtuiAsideContainerComponent {
|
|
|
780
824
|
this.headerAction = output();
|
|
781
825
|
this.headerTpl = contentChild(RtuiAsideContainerHeaderDirective, { ...(ngDevMode ? { debugName: "headerTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
782
826
|
}
|
|
827
|
+
#breakpoints;
|
|
783
828
|
onSubmit() {
|
|
784
829
|
this.submitAction.emit();
|
|
785
830
|
}
|
|
@@ -790,7 +835,7 @@ class RtuiAsideContainerComponent {
|
|
|
790
835
|
this.headerAction.emit(buttonName);
|
|
791
836
|
}
|
|
792
837
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiAsideContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
793
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiAsideContainerComponent, isStandalone: true, selector: "rtui-aside-container", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired:
|
|
838
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiAsideContainerComponent, isStandalone: true, selector: "rtui-aside-container", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isSubmitButtonDisabled: { classPropertyName: "isSubmitButtonDisabled", publicName: "isSubmitButtonDisabled", isSignal: true, isRequired: true, transformFunction: null }, isFooterShown: { classPropertyName: "isFooterShown", publicName: "isFooterShown", isSignal: true, isRequired: false, transformFunction: null }, pending: { classPropertyName: "pending", publicName: "pending", isSignal: true, isRequired: false, transformFunction: null }, isRequestErrorShown: { classPropertyName: "isRequestErrorShown", publicName: "isRequestErrorShown", isSignal: true, isRequired: false, transformFunction: null }, headerActionsButtons: { classPropertyName: "headerActionsButtons", publicName: "headerActionsButtons", isSignal: true, isRequired: false, transformFunction: null }, requestError: { classPropertyName: "requestError", publicName: "requestError", isSignal: true, isRequired: false, transformFunction: null }, submitButtonTitle: { classPropertyName: "submitButtonTitle", publicName: "submitButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, cancelButtonTitle: { classPropertyName: "cancelButtonTitle", publicName: "cancelButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, submitButtonTooltip: { classPropertyName: "submitButtonTooltip", publicName: "submitButtonTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { submitAction: "submitAction", cancelAction: "cancelAction", headerAction: "headerAction" }, host: { classAttribute: "c-aside" }, providers: [BreakpointService], queries: [{ propertyName: "headerTpl", first: true, predicate: RtuiAsideContainerHeaderDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "@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", styles: [":host rtui-scrollable{--rt-scrollable-header-padding: 0;--rt-scrollable-content-padding: 0;--rt-scrollable-footer-padding: 0;--rt-scrollable-content-flex-direction: row}@supports (height: 100dvh){:host rtui-scrollable{--rt-scrollable-host-height: 100dvh}}:host rtui-toolbar{--rt-toolbar-body-height: 6rem;--rt-toolbar-body-mobile-height: 6rem;--rt-toolbar-body-padding: 0;--rt-toolbar-bars-border-bottom-width: 0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
|
|
794
839
|
// material
|
|
795
840
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type:
|
|
796
841
|
// standalone components
|
|
@@ -802,7 +847,7 @@ class RtuiAsideContainerComponent {
|
|
|
802
847
|
}
|
|
803
848
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiAsideContainerComponent, decorators: [{
|
|
804
849
|
type: Component,
|
|
805
|
-
args: [{ selector: 'rtui-aside-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
850
|
+
args: [{ selector: 'rtui-aside-container', providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
806
851
|
RouterLink,
|
|
807
852
|
NgTemplateOutlet,
|
|
808
853
|
// material
|
|
@@ -827,9 +872,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
827
872
|
BlockDirective,
|
|
828
873
|
ElemDirective,
|
|
829
874
|
], host: {
|
|
830
|
-
class:
|
|
831
|
-
}, template: "@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]=\"
|
|
832
|
-
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
875
|
+
class: BEM_BLOCK$r,
|
|
876
|
+
}, template: "@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", styles: [":host rtui-scrollable{--rt-scrollable-header-padding: 0;--rt-scrollable-content-padding: 0;--rt-scrollable-footer-padding: 0;--rt-scrollable-content-flex-direction: row}@supports (height: 100dvh){:host rtui-scrollable{--rt-scrollable-host-height: 100dvh}}:host rtui-toolbar{--rt-toolbar-body-height: 6rem;--rt-toolbar-body-mobile-height: 6rem;--rt-toolbar-body-padding: 0;--rt-toolbar-bars-border-bottom-width: 0}\n"] }]
|
|
877
|
+
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], isSubmitButtonDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSubmitButtonDisabled", required: true }] }], isFooterShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFooterShown", required: false }] }], pending: [{ type: i0.Input, args: [{ isSignal: true, alias: "pending", required: false }] }], isRequestErrorShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isRequestErrorShown", required: false }] }], headerActionsButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerActionsButtons", required: false }] }], requestError: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestError", required: false }] }], submitButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitButtonTitle", required: false }] }], cancelButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelButtonTitle", required: false }] }], submitButtonTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitButtonTooltip", required: false }] }], submitAction: [{ type: i0.Output, args: ["submitAction"] }], cancelAction: [{ type: i0.Output, args: ["cancelAction"] }], headerAction: [{ type: i0.Output, args: ["headerAction"] }], headerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiAsideContainerHeaderDirective), { ...{
|
|
833
878
|
read: TemplateRef,
|
|
834
879
|
}, isSignal: true }] }] } });
|
|
835
880
|
|
|
@@ -861,6 +906,7 @@ const RT_UI_CONFIG = new InjectionToken('RT_UI_CONFIG', {
|
|
|
861
906
|
factory: () => ({}),
|
|
862
907
|
});
|
|
863
908
|
|
|
909
|
+
const BEM_BLOCK$q = 'rtui-icon';
|
|
864
910
|
const MATERIAL_SYMBOLS_FONT = 'Material Symbols Outlined';
|
|
865
911
|
const fontLoaded = signal(false, /* @ts-ignore */
|
|
866
912
|
...(ngDevMode ? [{ debugName: "fontLoaded" }] : /* istanbul ignore next */ []));
|
|
@@ -902,7 +948,7 @@ class RtuiIconComponent {
|
|
|
902
948
|
});
|
|
903
949
|
}
|
|
904
950
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
905
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiIconComponent, isStandalone: true, selector: "rtui-icon", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, glyph: { classPropertyName: "glyph", publicName: "glyph", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, rotate: { classPropertyName: "rotate", publicName: "rotate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" }, classAttribute: "rtui-icon" }, hostDirectives: [{ directive: i1$5.MatTooltip, inputs: ["matTooltip", "tooltip", "matTooltipPosition", "tooltipPosition", "matTooltipDisabled", "tooltipDisabled"] }], ngImport: i0, template: "<mat-icon [rtIconOutlined]=\"outlined()\">\n @if (glyph()) {\n {{ glyph() }}\n } @else {\n <ng-content />\n }\n</mat-icon>\n", styles: [".rtui-icon{display:inline-flex;align-items:center;justify-content:center}.rtui-icon--loading{visibility:hidden}.rtui-icon--rotate{animation:rt-icon-rotation 1s linear infinite}.rtui-icon .mat-icon{width:inherit;height:inherit;color:inherit;font-size:inherit}.rtui-icon--size-xs{width
|
|
951
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiIconComponent, isStandalone: true, selector: "rtui-icon", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, glyph: { classPropertyName: "glyph", publicName: "glyph", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, rotate: { classPropertyName: "rotate", publicName: "rotate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" }, classAttribute: "rtui-icon" }, hostDirectives: [{ directive: i1$5.MatTooltip, inputs: ["matTooltip", "tooltip", "matTooltipPosition", "tooltipPosition", "matTooltipDisabled", "tooltipDisabled"] }], ngImport: i0, template: "<mat-icon [rtIconOutlined]=\"outlined()\">\n @if (glyph()) {\n {{ glyph() }}\n } @else {\n <ng-content />\n }\n</mat-icon>\n", styles: ["@charset \"UTF-8\";:root{--rt-icon-text-button-size: 1.375rem}.rtui-icon{display:inline-flex;align-items:center;justify-content:center}.rtui-icon--loading{visibility:hidden}.rtui-icon--rotate{animation:rt-icon-rotation 1s linear infinite}.rtui-icon .mat-icon{width:inherit;height:inherit;color:inherit;font-size:inherit}.rtui-icon--size-xs{width:var(--rt-icon-size-xs);height:var(--rt-icon-size-xs);font-size:var(--rt-icon-size-xs)}.rtui-icon--size-sm{width:var(--rt-icon-size-sm);height:var(--rt-icon-size-sm);font-size:var(--rt-icon-size-sm)}.rtui-icon--size-md{width:var(--rt-icon-size-md);height:var(--rt-icon-size-md);font-size:var(--rt-icon-size-md)}.rtui-icon--size-lg{width:var(--rt-icon-size-lg);height:var(--rt-icon-size-lg);font-size:var(--rt-icon-size-lg)}.rtui-icon--size-xl{width:var(--rt-icon-size-xl);height:var(--rt-icon-size-xl);font-size:var(--rt-icon-size-xl)}.rtui-icon--size-xxl{width:var(--rt-icon-size-xxl);height:var(--rt-icon-size-xxl);font-size:var(--rt-icon-size-xxl)}.rtui-icon--size-3xl{width:var(--rt-icon-size-3xl);height:var(--rt-icon-size-3xl);font-size:var(--rt-icon-size-3xl)}.rtui-icon--theme-inherit{color:inherit}.rtui-icon--theme-primary,.rtui-icon--theme-primary-strong{color:var(--rt-icon-accent-primary)}.rtui-icon--theme-neutral{color:var(--rt-icon-neutral-soft)}.rtui-icon--theme-disabled{color:var(--rt-icon-neutral-disabled)}.rtui-icon--theme-muted{color:var(--rt-icon-neutral-soft)}.rtui-icon--theme-white{color:var(--rt-icon-static-light)}.rtui-icon--theme-danger{color:var(--rt-icon-accent-danger)}.rtui-icon--theme-success{color:var(--rt-icon-accent-success)}.rtui-button--appearance-text .rtui-icon{width:var(--rt-icon-text-button-size);height:var(--rt-icon-text-button-size);font-size:var(--rt-icon-text-button-size)}\n"], dependencies: [{ kind: "component", type:
|
|
906
952
|
// material
|
|
907
953
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
908
954
|
// directives
|
|
@@ -921,11 +967,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
921
967
|
inputs: ['matTooltip: tooltip', 'matTooltipPosition: tooltipPosition', 'matTooltipDisabled: tooltipDisabled'],
|
|
922
968
|
},
|
|
923
969
|
], host: {
|
|
924
|
-
class:
|
|
970
|
+
class: BEM_BLOCK$q,
|
|
925
971
|
'[class]': 'hostClasses()',
|
|
926
|
-
}, template: "<mat-icon [rtIconOutlined]=\"outlined()\">\n @if (glyph()) {\n {{ glyph() }}\n } @else {\n <ng-content />\n }\n</mat-icon>\n", styles: [".rtui-icon{display:inline-flex;align-items:center;justify-content:center}.rtui-icon--loading{visibility:hidden}.rtui-icon--rotate{animation:rt-icon-rotation 1s linear infinite}.rtui-icon .mat-icon{width:inherit;height:inherit;color:inherit;font-size:inherit}.rtui-icon--size-xs{width
|
|
972
|
+
}, template: "<mat-icon [rtIconOutlined]=\"outlined()\">\n @if (glyph()) {\n {{ glyph() }}\n } @else {\n <ng-content />\n }\n</mat-icon>\n", styles: ["@charset \"UTF-8\";:root{--rt-icon-text-button-size: 1.375rem}.rtui-icon{display:inline-flex;align-items:center;justify-content:center}.rtui-icon--loading{visibility:hidden}.rtui-icon--rotate{animation:rt-icon-rotation 1s linear infinite}.rtui-icon .mat-icon{width:inherit;height:inherit;color:inherit;font-size:inherit}.rtui-icon--size-xs{width:var(--rt-icon-size-xs);height:var(--rt-icon-size-xs);font-size:var(--rt-icon-size-xs)}.rtui-icon--size-sm{width:var(--rt-icon-size-sm);height:var(--rt-icon-size-sm);font-size:var(--rt-icon-size-sm)}.rtui-icon--size-md{width:var(--rt-icon-size-md);height:var(--rt-icon-size-md);font-size:var(--rt-icon-size-md)}.rtui-icon--size-lg{width:var(--rt-icon-size-lg);height:var(--rt-icon-size-lg);font-size:var(--rt-icon-size-lg)}.rtui-icon--size-xl{width:var(--rt-icon-size-xl);height:var(--rt-icon-size-xl);font-size:var(--rt-icon-size-xl)}.rtui-icon--size-xxl{width:var(--rt-icon-size-xxl);height:var(--rt-icon-size-xxl);font-size:var(--rt-icon-size-xxl)}.rtui-icon--size-3xl{width:var(--rt-icon-size-3xl);height:var(--rt-icon-size-3xl);font-size:var(--rt-icon-size-3xl)}.rtui-icon--theme-inherit{color:inherit}.rtui-icon--theme-primary,.rtui-icon--theme-primary-strong{color:var(--rt-icon-accent-primary)}.rtui-icon--theme-neutral{color:var(--rt-icon-neutral-soft)}.rtui-icon--theme-disabled{color:var(--rt-icon-neutral-disabled)}.rtui-icon--theme-muted{color:var(--rt-icon-neutral-soft)}.rtui-icon--theme-white{color:var(--rt-icon-static-light)}.rtui-icon--theme-danger{color:var(--rt-icon-accent-danger)}.rtui-icon--theme-success{color:var(--rt-icon-accent-success)}.rtui-button--appearance-text .rtui-icon{width:var(--rt-icon-text-button-size);height:var(--rt-icon-text-button-size);font-size:var(--rt-icon-text-button-size)}\n"] }]
|
|
927
973
|
}], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], glyph: [{ type: i0.Input, args: [{ isSignal: true, alias: "glyph", required: false }] }], outlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "outlined", required: false }] }], rotate: [{ type: i0.Input, args: [{ isSignal: true, alias: "rotate", required: false }] }] } });
|
|
928
974
|
|
|
975
|
+
const BEM_BLOCK$p = 'rtui-button';
|
|
929
976
|
class RtuiButtonComponent {
|
|
930
977
|
constructor() {
|
|
931
978
|
/** App-wide defaults; the resolution order is: instance input → `components.button` → `global` → library default. */
|
|
@@ -986,6 +1033,15 @@ class RtuiButtonComponent {
|
|
|
986
1033
|
disabled: this.disabled(),
|
|
987
1034
|
}), /* @ts-ignore */
|
|
988
1035
|
...(ngDevMode ? [{ debugName: "modifiers" }] : /* istanbul ignore next */ []));
|
|
1036
|
+
/**
|
|
1037
|
+
* Те же модификаторы строкой — они висят на хосте, потому что описывают блок целиком.
|
|
1038
|
+
* Директива модификатора сюда не дотянется: хост объявлен декоратором, а не разметкой.
|
|
1039
|
+
*/
|
|
1040
|
+
this.hostModifiers = computed(() => Object.entries(this.modifiers())
|
|
1041
|
+
.filter(([, isOn]) => isOn)
|
|
1042
|
+
.map(([name]) => `${BEM_BLOCK$p}--${name}`)
|
|
1043
|
+
.join(' '), /* @ts-ignore */
|
|
1044
|
+
...(ngDevMode ? [{ debugName: "hostModifiers" }] : /* istanbul ignore next */ []));
|
|
989
1045
|
this.type = input('icon', /* @ts-ignore */
|
|
990
1046
|
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
991
1047
|
this.design = input(/* @ts-ignore */
|
|
@@ -1021,7 +1077,7 @@ class RtuiButtonComponent {
|
|
|
1021
1077
|
}
|
|
1022
1078
|
}
|
|
1023
1079
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1024
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiButtonComponent, isStandalone: true, selector: "rtui-button", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, design: { classPropertyName: "design", publicName: "design", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconPosition: { classPropertyName: "iconPosition", publicName: "iconPosition", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, spinnerDiameter: { classPropertyName: "spinnerDiameter", publicName: "spinnerDiameter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class.rtui-button-full": "fullWidth()" } }, hostDirectives: [{ directive: i1$5.MatTooltip, inputs: ["matTooltip", "tooltip", "matTooltipPosition", "tooltipPosition", "matTooltipDisabled", "tooltipDisabled", "matTooltipClass", "tooltipClass"] }], ngImport: i0, template: "<!-- 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@switch (type()) {\n @case ('pill') {\n @if (resolvedDesign() === 'material') {\n <!-- design: material \u2014 a native Material button; its look is owned by the Material theme -->\n <button\n type=\"button\"\n class=\"rtui-button-material\"\n [matButton]=\"materialAppearance()\"\n [class.rtui-button-material--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 rtBlock=\"rtui-button\"\n matRipple\n [rtMod]=\"modifiers()\"\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 rtBlock=\"rtui-button\"\n matRipple\n [rtMod]=\"modifiers()\"\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", styles: ["@charset \"UTF-8\";:host{display:inline-block}:host(.rtui-button-full){display:block;width:100%}:host(.rtui-button-full) .rtui-button,:host(.rtui-button-full) .rtui-button-material{width:100%}.rtui-button{position:relative;display:inline-flex;overflow:hidden;align-items:center;justify-content:center;border:0;background-color:transparent;color:var(--mat-sys-on-surface-variant);cursor:pointer;line-height:1;transition:background-color .15s ease,color .15s ease,opacity .15s ease}.rtui-button rtui-icon{color:inherit}.rtui-button rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button:disabled{cursor:not-allowed;opacity:.38}.rtui-button--loading{cursor:wait}.rtui-button--type-icon,.rtui-button--type-fab{border-radius:1.5rem}.rtui-button--type-icon:hover:not(:disabled),.rtui-button--type-fab:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}.rtui-button--type-icon.rtui-button--size-xs,.rtui-button--type-fab.rtui-button--size-xs{padding:.25rem}.rtui-button--type-icon.rtui-button--size-sm,.rtui-button--type-fab.rtui-button--size-sm{padding:.375rem}.rtui-button--type-icon.rtui-button--size-md,.rtui-button--type-fab.rtui-button--size-md{padding:.5rem}.rtui-button--type-icon.rtui-button--size-lg,.rtui-button--type-fab.rtui-button--size-lg{padding:.625rem}.rtui-button--type-icon.rtui-button--variant-primary,.rtui-button--type-fab.rtui-button--variant-primary{color:var(--rt-icon-accent-primary)}.rtui-button--type-icon.rtui-button--variant-danger,.rtui-button--type-fab.rtui-button--variant-danger{color:var(--rt-icon-accent-danger)}.rtui-button--type-icon.rtui-button--variant-success,.rtui-button--type-fab.rtui-button--variant-success{color:var(--rt-icon-accent-success)}.rtui-button--type-icon.rtui-button--variant-warning,.rtui-button--type-fab.rtui-button--variant-warning{color:var(--rt-icon-accent-warning)}.rtui-button--type-icon.rtui-button--variant-accent,.rtui-button--type-fab.rtui-button--variant-accent{color:var(--rt-icon-accent-info)}.rtui-button--type-pill{border-radius:1.5rem;background-color:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface-variant);font-weight:500;gap:.375rem}.rtui-button--type-pill:hover:not(:disabled){background-color:var(--mat-sys-surface-container-highest)}.rtui-button--type-pill:active:not(:disabled){background-color:var(--mat-sys-surface-dim)}.rtui-button--type-pill.rtui-button--size-xs{padding:.25rem .5rem;font-size:.6875rem}.rtui-button--type-pill.rtui-button--size-sm{padding:.375rem .625rem;font-size:.75rem}.rtui-button--type-pill.rtui-button--size-md{padding:.5rem .875rem;font-size:.8125rem}.rtui-button--type-pill.rtui-button--size-lg{padding:.625rem 1rem;font-size:.875rem}.rtui-button--type-pill.rtui-button--radius-none{border-radius:0}.rtui-button--type-pill.rtui-button--radius-sm{border-radius:.25rem}.rtui-button--type-pill.rtui-button--radius-md{border-radius:.5rem}.rtui-button--type-pill.rtui-button--radius-lg{border-radius:.75rem}.rtui-button--type-pill.rtui-button--radius-full{border-radius:1.5rem}.rtui-button--type-pill.rtui-button--variant-primary{background-color:var(--rt-bg-accent-primary-subtle);color:var(--rt-text-accent-primary)}.rtui-button--type-pill.rtui-button--variant-primary:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-primary:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-danger{background-color:var(--rt-bg-accent-danger-subtle);color:var(--rt-text-accent-danger)}.rtui-button--type-pill.rtui-button--variant-danger:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-danger:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-success{background-color:var(--rt-bg-accent-success-subtle);color:var(--rt-text-accent-success)}.rtui-button--type-pill.rtui-button--variant-success:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-success:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-warning{background-color:var(--rt-bg-accent-warning-subtle);color:var(--rt-text-accent-warning)}.rtui-button--type-pill.rtui-button--variant-warning:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-warning:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-accent{background-color:var(--rt-bg-accent-info-subtle);color:var(--rt-text-accent-info)}.rtui-button--type-pill.rtui-button--variant-accent:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-accent:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--appearance-text{min-height:1.875rem;padding:0 .625rem;background-color:transparent;color:var(--mat-sys-on-surface-variant);font-size:1rem;font-weight:400}.rtui-button--type-pill.rtui-button--appearance-text:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}.rtui-button--type-pill.rtui-button--appearance-text:active:not(:disabled){background-color:var(--rt-bg-base-hover)}.rtui-button-material rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button-material--danger{--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error);--mat-button-filled-ripple-color: color-mix(in srgb, var(--mat-sys-on-error) 12%, transparent);--mat-button-outlined-label-text-color: var(--mat-sys-error);--mat-button-outlined-outline-color: var(--mat-sys-error);--mat-button-outlined-state-layer-color: var(--mat-sys-error);--mat-button-outlined-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-text-label-text-color: var(--mat-sys-error);--mat-button-text-state-layer-color: var(--mat-sys-error);--mat-button-text-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-tonal-container-color: var(--mat-sys-error-container);--mat-button-tonal-label-text-color: var(--mat-sys-on-error-container);--mat-button-tonal-state-layer-color: var(--mat-sys-on-error-container);--mat-button-tonal-ripple-color: color-mix(in srgb, var(--mat-sys-on-error-container) 12%, transparent)}\n"], dependencies: [{ kind: "directive", type:
|
|
1080
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiButtonComponent, isStandalone: true, selector: "rtui-button", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, design: { classPropertyName: "design", publicName: "design", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconPosition: { classPropertyName: "iconPosition", publicName: "iconPosition", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, spinnerDiameter: { classPropertyName: "spinnerDiameter", publicName: "spinnerDiameter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class": "hostModifiers()", "class.rtui-button-full": "fullWidth()" }, classAttribute: "rtui-button" }, hostDirectives: [{ directive: i1$5.MatTooltip, inputs: ["matTooltip", "tooltip", "matTooltipPosition", "tooltipPosition", "matTooltipDisabled", "tooltipDisabled", "matTooltipClass", "tooltipClass"] }], ngImport: i0, template: "<!-- 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<!-- \u0411\u043B\u043E\u043A \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043E\u043C: \u043A\u043B\u0430\u0441\u0441 \u043E\u043D \u043D\u0435 \u0441\u0442\u0430\u0432\u0438\u0442 (\u0443\u0437\u0435\u043B \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u044F), \u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u0430\u0451\u0442 \u0438\u043C\u044F\n \u043F\u043E\u0442\u043E\u043C\u043A\u0430\u043C. \u0421\u0430\u043C \u043A\u043B\u0430\u0441\u0441 \u0431\u043B\u043E\u043A\u0430 \u0438 \u0435\u0433\u043E \u043C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0432\u0438\u0441\u044F\u0442 \u043D\u0430 \u0445\u043E\u0441\u0442\u0435 \u2014 \u0441\u043C. `host` \u0432 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0435. -->\n<ng-container rtBlock=\"rtui-button\">\n @switch (type()) {\n @case ('pill') {\n @if (resolvedDesign() === 'material') {\n <!-- design: material \u2014 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", styles: ["@charset \"UTF-8\";:host{display:inline-block}:host(.rtui-button-full){display:block;width:100%}:host(.rtui-button-full) .rtui-button__control,:host(.rtui-button-full) .rtui-button__material{width:100%}.rtui-button__control{position:relative;display:inline-flex;overflow:hidden;align-items:center;justify-content:center;border:0;background-color:transparent;color:var(--mat-sys-on-surface-variant);cursor:pointer;line-height:1;transition:background-color .15s ease,color .15s ease,opacity .15s ease}.rtui-button__control rtui-icon{color:inherit}.rtui-button__control rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button__control:disabled{cursor:not-allowed;opacity:.38}.rtui-button__material rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button__material--danger{--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error);--mat-button-filled-ripple-color: color-mix(in srgb, var(--mat-sys-on-error) 12%, transparent);--mat-button-outlined-label-text-color: var(--mat-sys-error);--mat-button-outlined-outline-color: var(--mat-sys-error);--mat-button-outlined-state-layer-color: var(--mat-sys-error);--mat-button-outlined-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-text-label-text-color: var(--mat-sys-error);--mat-button-text-state-layer-color: var(--mat-sys-error);--mat-button-text-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-tonal-container-color: var(--mat-sys-error-container);--mat-button-tonal-label-text-color: var(--mat-sys-on-error-container);--mat-button-tonal-state-layer-color: var(--mat-sys-on-error-container);--mat-button-tonal-ripple-color: color-mix(in srgb, var(--mat-sys-on-error-container) 12%, transparent)}:host(.rtui-button--loading) .rtui-button__control{cursor:wait}:host(.rtui-button--type-icon) .rtui-button__control,:host(.rtui-button--type-fab) .rtui-button__control{border-radius:var(--rt-radius-xl)}:host(.rtui-button--type-icon) .rtui-button__control:hover:not(:disabled),:host(.rtui-button--type-fab) .rtui-button__control:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}:host(.rtui-button--type-icon.rtui-button--size-xs) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-xs) .rtui-button__control{padding:var(--rt-spacing-4)}:host(.rtui-button--type-icon.rtui-button--size-sm) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-sm) .rtui-button__control{padding:var(--rt-spacing-6)}:host(.rtui-button--type-icon.rtui-button--size-md) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-md) .rtui-button__control{padding:var(--rt-spacing-8)}:host(.rtui-button--type-icon.rtui-button--size-lg) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-lg) .rtui-button__control{padding:var(--rt-spacing-10)}:host(.rtui-button--type-icon.rtui-button--variant-primary) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-primary) .rtui-button__control{color:var(--rt-icon-accent-primary)}:host(.rtui-button--type-icon.rtui-button--variant-danger) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-danger) .rtui-button__control{color:var(--rt-icon-accent-danger)}:host(.rtui-button--type-icon.rtui-button--variant-success) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-success) .rtui-button__control{color:var(--rt-icon-accent-success)}:host(.rtui-button--type-icon.rtui-button--variant-warning) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-warning) .rtui-button__control{color:var(--rt-icon-accent-warning)}:host(.rtui-button--type-icon.rtui-button--variant-accent) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-accent) .rtui-button__control{color:var(--rt-icon-accent-info)}:host(.rtui-button--type-pill) .rtui-button__control{border-radius:var(--rt-radius-xl);background-color:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface-variant);font-weight:var(--rt-font-weight-medium);gap:var(--rt-spacing-6)}:host(.rtui-button--type-pill) .rtui-button__control:hover:not(:disabled){background-color:var(--mat-sys-surface-container-highest)}:host(.rtui-button--type-pill) .rtui-button__control:active:not(:disabled){background-color:var(--mat-sys-surface-dim)}:host(.rtui-button--type-pill.rtui-button--size-xs) .rtui-button__control{padding:var(--rt-spacing-4) var(--rt-spacing-8);font-size:var(--rt-font-size-xs)}:host(.rtui-button--type-pill.rtui-button--size-sm) .rtui-button__control{padding:var(--rt-spacing-6) var(--rt-spacing-10);font-size:var(--rt-font-size-xs)}:host(.rtui-button--type-pill.rtui-button--size-md) .rtui-button__control{padding:var(--rt-spacing-8) var(--rt-spacing-14);font-size:var(--rt-font-size-sm)}:host(.rtui-button--type-pill.rtui-button--size-lg) .rtui-button__control{padding:var(--rt-spacing-10) var(--rt-spacing-16);font-size:var(--rt-font-size-sm)}:host(.rtui-button--type-pill.rtui-button--radius-none) .rtui-button__control{border-radius:0}:host(.rtui-button--type-pill.rtui-button--radius-sm) .rtui-button__control{border-radius:var(--rt-radius-xs)}:host(.rtui-button--type-pill.rtui-button--radius-md) .rtui-button__control{border-radius:var(--rt-radius-sm)}:host(.rtui-button--type-pill.rtui-button--radius-lg) .rtui-button__control{border-radius:var(--rt-radius-md)}:host(.rtui-button--type-pill.rtui-button--radius-full) .rtui-button__control{border-radius:var(--rt-radius-xl)}:host(.rtui-button--type-pill.rtui-button--variant-primary) .rtui-button__control{background-color:var(--rt-bg-accent-primary-subtle);color:var(--rt-text-accent-primary)}:host(.rtui-button--type-pill.rtui-button--variant-primary) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-primary) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-danger) .rtui-button__control{background-color:var(--rt-bg-accent-danger-subtle);color:var(--rt-text-accent-danger)}:host(.rtui-button--type-pill.rtui-button--variant-danger) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-danger) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-success) .rtui-button__control{background-color:var(--rt-bg-accent-success-subtle);color:var(--rt-text-accent-success)}:host(.rtui-button--type-pill.rtui-button--variant-success) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-success) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-warning) .rtui-button__control{background-color:var(--rt-bg-accent-warning-subtle);color:var(--rt-text-accent-warning)}:host(.rtui-button--type-pill.rtui-button--variant-warning) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-warning) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-accent) .rtui-button__control{background-color:var(--rt-bg-accent-info-subtle);color:var(--rt-text-accent-info)}:host(.rtui-button--type-pill.rtui-button--variant-accent) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-accent) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--appearance-text) .rtui-button__control{min-height:1.875rem;padding:0 var(--rt-spacing-10);background-color:transparent;color:var(--mat-sys-on-surface-variant);font-size:var(--rt-font-size-md);font-weight:var(--rt-font-weight-regular)}:host(.rtui-button--type-pill.rtui-button--appearance-text) .rtui-button__control:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}:host(.rtui-button--type-pill.rtui-button--appearance-text) .rtui-button__control:active:not(:disabled){background-color:var(--rt-bg-base-hover)}\n"], dependencies: [{ kind: "directive", type:
|
|
1025
1081
|
// angular
|
|
1026
1082
|
NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type:
|
|
1027
1083
|
// rt-tools
|
|
@@ -1057,10 +1113,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1057
1113
|
],
|
|
1058
1114
|
},
|
|
1059
1115
|
], host: {
|
|
1116
|
+
class: BEM_BLOCK$p,
|
|
1117
|
+
'[class]': 'hostModifiers()',
|
|
1060
1118
|
'[class.rtui-button-full]': 'fullWidth()',
|
|
1061
|
-
}, template: "<!-- 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@switch (type()) {\n @case ('pill') {\n @if (resolvedDesign() === 'material') {\n <!-- design: material \u2014 a native Material button; its look is owned by the Material theme -->\n <button\n type=\"button\"\n class=\"rtui-button-material\"\n [matButton]=\"materialAppearance()\"\n [class.rtui-button-material--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 rtBlock=\"rtui-button\"\n matRipple\n [rtMod]=\"modifiers()\"\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 rtBlock=\"rtui-button\"\n matRipple\n [rtMod]=\"modifiers()\"\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", styles: ["@charset \"UTF-8\";:host{display:inline-block}:host(.rtui-button-full){display:block;width:100%}:host(.rtui-button-full) .rtui-button,:host(.rtui-button-full) .rtui-button-material{width:100%}.rtui-button{position:relative;display:inline-flex;overflow:hidden;align-items:center;justify-content:center;border:0;background-color:transparent;color:var(--mat-sys-on-surface-variant);cursor:pointer;line-height:1;transition:background-color .15s ease,color .15s ease,opacity .15s ease}.rtui-button rtui-icon{color:inherit}.rtui-button rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button:disabled{cursor:not-allowed;opacity:.38}.rtui-button--loading{cursor:wait}.rtui-button--type-icon,.rtui-button--type-fab{border-radius:1.5rem}.rtui-button--type-icon:hover:not(:disabled),.rtui-button--type-fab:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}.rtui-button--type-icon.rtui-button--size-xs,.rtui-button--type-fab.rtui-button--size-xs{padding:.25rem}.rtui-button--type-icon.rtui-button--size-sm,.rtui-button--type-fab.rtui-button--size-sm{padding:.375rem}.rtui-button--type-icon.rtui-button--size-md,.rtui-button--type-fab.rtui-button--size-md{padding:.5rem}.rtui-button--type-icon.rtui-button--size-lg,.rtui-button--type-fab.rtui-button--size-lg{padding:.625rem}.rtui-button--type-icon.rtui-button--variant-primary,.rtui-button--type-fab.rtui-button--variant-primary{color:var(--rt-icon-accent-primary)}.rtui-button--type-icon.rtui-button--variant-danger,.rtui-button--type-fab.rtui-button--variant-danger{color:var(--rt-icon-accent-danger)}.rtui-button--type-icon.rtui-button--variant-success,.rtui-button--type-fab.rtui-button--variant-success{color:var(--rt-icon-accent-success)}.rtui-button--type-icon.rtui-button--variant-warning,.rtui-button--type-fab.rtui-button--variant-warning{color:var(--rt-icon-accent-warning)}.rtui-button--type-icon.rtui-button--variant-accent,.rtui-button--type-fab.rtui-button--variant-accent{color:var(--rt-icon-accent-info)}.rtui-button--type-pill{border-radius:1.5rem;background-color:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface-variant);font-weight:500;gap:.375rem}.rtui-button--type-pill:hover:not(:disabled){background-color:var(--mat-sys-surface-container-highest)}.rtui-button--type-pill:active:not(:disabled){background-color:var(--mat-sys-surface-dim)}.rtui-button--type-pill.rtui-button--size-xs{padding:.25rem .5rem;font-size:.6875rem}.rtui-button--type-pill.rtui-button--size-sm{padding:.375rem .625rem;font-size:.75rem}.rtui-button--type-pill.rtui-button--size-md{padding:.5rem .875rem;font-size:.8125rem}.rtui-button--type-pill.rtui-button--size-lg{padding:.625rem 1rem;font-size:.875rem}.rtui-button--type-pill.rtui-button--radius-none{border-radius:0}.rtui-button--type-pill.rtui-button--radius-sm{border-radius:.25rem}.rtui-button--type-pill.rtui-button--radius-md{border-radius:.5rem}.rtui-button--type-pill.rtui-button--radius-lg{border-radius:.75rem}.rtui-button--type-pill.rtui-button--radius-full{border-radius:1.5rem}.rtui-button--type-pill.rtui-button--variant-primary{background-color:var(--rt-bg-accent-primary-subtle);color:var(--rt-text-accent-primary)}.rtui-button--type-pill.rtui-button--variant-primary:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-primary:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-danger{background-color:var(--rt-bg-accent-danger-subtle);color:var(--rt-text-accent-danger)}.rtui-button--type-pill.rtui-button--variant-danger:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-danger:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-success{background-color:var(--rt-bg-accent-success-subtle);color:var(--rt-text-accent-success)}.rtui-button--type-pill.rtui-button--variant-success:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-success:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-warning{background-color:var(--rt-bg-accent-warning-subtle);color:var(--rt-text-accent-warning)}.rtui-button--type-pill.rtui-button--variant-warning:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-warning:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-accent{background-color:var(--rt-bg-accent-info-subtle);color:var(--rt-text-accent-info)}.rtui-button--type-pill.rtui-button--variant-accent:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 92%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--variant-accent:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 84%,var(--rt-color-neutral-100))}.rtui-button--type-pill.rtui-button--appearance-text{min-height:1.875rem;padding:0 .625rem;background-color:transparent;color:var(--mat-sys-on-surface-variant);font-size:1rem;font-weight:400}.rtui-button--type-pill.rtui-button--appearance-text:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}.rtui-button--type-pill.rtui-button--appearance-text:active:not(:disabled){background-color:var(--rt-bg-base-hover)}.rtui-button-material rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button-material--danger{--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error);--mat-button-filled-ripple-color: color-mix(in srgb, var(--mat-sys-on-error) 12%, transparent);--mat-button-outlined-label-text-color: var(--mat-sys-error);--mat-button-outlined-outline-color: var(--mat-sys-error);--mat-button-outlined-state-layer-color: var(--mat-sys-error);--mat-button-outlined-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-text-label-text-color: var(--mat-sys-error);--mat-button-text-state-layer-color: var(--mat-sys-error);--mat-button-text-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-tonal-container-color: var(--mat-sys-error-container);--mat-button-tonal-label-text-color: var(--mat-sys-on-error-container);--mat-button-tonal-state-layer-color: var(--mat-sys-on-error-container);--mat-button-tonal-ripple-color: color-mix(in srgb, var(--mat-sys-on-error-container) 12%, transparent)}\n"] }]
|
|
1119
|
+
}, template: "<!-- 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<!-- \u0411\u043B\u043E\u043A \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043E\u043C: \u043A\u043B\u0430\u0441\u0441 \u043E\u043D \u043D\u0435 \u0441\u0442\u0430\u0432\u0438\u0442 (\u0443\u0437\u0435\u043B \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u044F), \u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u0430\u0451\u0442 \u0438\u043C\u044F\n \u043F\u043E\u0442\u043E\u043C\u043A\u0430\u043C. \u0421\u0430\u043C \u043A\u043B\u0430\u0441\u0441 \u0431\u043B\u043E\u043A\u0430 \u0438 \u0435\u0433\u043E \u043C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0432\u0438\u0441\u044F\u0442 \u043D\u0430 \u0445\u043E\u0441\u0442\u0435 \u2014 \u0441\u043C. `host` \u0432 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0435. -->\n<ng-container rtBlock=\"rtui-button\">\n @switch (type()) {\n @case ('pill') {\n @if (resolvedDesign() === 'material') {\n <!-- design: material \u2014 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", styles: ["@charset \"UTF-8\";:host{display:inline-block}:host(.rtui-button-full){display:block;width:100%}:host(.rtui-button-full) .rtui-button__control,:host(.rtui-button-full) .rtui-button__material{width:100%}.rtui-button__control{position:relative;display:inline-flex;overflow:hidden;align-items:center;justify-content:center;border:0;background-color:transparent;color:var(--mat-sys-on-surface-variant);cursor:pointer;line-height:1;transition:background-color .15s ease,color .15s ease,opacity .15s ease}.rtui-button__control rtui-icon{color:inherit}.rtui-button__control rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button__control:disabled{cursor:not-allowed;opacity:.38}.rtui-button__material rtui-spinner{display:flex;align-items:center;justify-content:center}.rtui-button__material--danger{--mat-button-filled-container-color: var(--mat-sys-error);--mat-button-filled-label-text-color: var(--mat-sys-on-error);--mat-button-filled-state-layer-color: var(--mat-sys-on-error);--mat-button-filled-ripple-color: color-mix(in srgb, var(--mat-sys-on-error) 12%, transparent);--mat-button-outlined-label-text-color: var(--mat-sys-error);--mat-button-outlined-outline-color: var(--mat-sys-error);--mat-button-outlined-state-layer-color: var(--mat-sys-error);--mat-button-outlined-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-text-label-text-color: var(--mat-sys-error);--mat-button-text-state-layer-color: var(--mat-sys-error);--mat-button-text-ripple-color: color-mix(in srgb, var(--mat-sys-error) 12%, transparent);--mat-button-tonal-container-color: var(--mat-sys-error-container);--mat-button-tonal-label-text-color: var(--mat-sys-on-error-container);--mat-button-tonal-state-layer-color: var(--mat-sys-on-error-container);--mat-button-tonal-ripple-color: color-mix(in srgb, var(--mat-sys-on-error-container) 12%, transparent)}:host(.rtui-button--loading) .rtui-button__control{cursor:wait}:host(.rtui-button--type-icon) .rtui-button__control,:host(.rtui-button--type-fab) .rtui-button__control{border-radius:var(--rt-radius-xl)}:host(.rtui-button--type-icon) .rtui-button__control:hover:not(:disabled),:host(.rtui-button--type-fab) .rtui-button__control:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}:host(.rtui-button--type-icon.rtui-button--size-xs) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-xs) .rtui-button__control{padding:var(--rt-spacing-4)}:host(.rtui-button--type-icon.rtui-button--size-sm) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-sm) .rtui-button__control{padding:var(--rt-spacing-6)}:host(.rtui-button--type-icon.rtui-button--size-md) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-md) .rtui-button__control{padding:var(--rt-spacing-8)}:host(.rtui-button--type-icon.rtui-button--size-lg) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--size-lg) .rtui-button__control{padding:var(--rt-spacing-10)}:host(.rtui-button--type-icon.rtui-button--variant-primary) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-primary) .rtui-button__control{color:var(--rt-icon-accent-primary)}:host(.rtui-button--type-icon.rtui-button--variant-danger) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-danger) .rtui-button__control{color:var(--rt-icon-accent-danger)}:host(.rtui-button--type-icon.rtui-button--variant-success) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-success) .rtui-button__control{color:var(--rt-icon-accent-success)}:host(.rtui-button--type-icon.rtui-button--variant-warning) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-warning) .rtui-button__control{color:var(--rt-icon-accent-warning)}:host(.rtui-button--type-icon.rtui-button--variant-accent) .rtui-button__control,:host(.rtui-button--type-fab.rtui-button--variant-accent) .rtui-button__control{color:var(--rt-icon-accent-info)}:host(.rtui-button--type-pill) .rtui-button__control{border-radius:var(--rt-radius-xl);background-color:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface-variant);font-weight:var(--rt-font-weight-medium);gap:var(--rt-spacing-6)}:host(.rtui-button--type-pill) .rtui-button__control:hover:not(:disabled){background-color:var(--mat-sys-surface-container-highest)}:host(.rtui-button--type-pill) .rtui-button__control:active:not(:disabled){background-color:var(--mat-sys-surface-dim)}:host(.rtui-button--type-pill.rtui-button--size-xs) .rtui-button__control{padding:var(--rt-spacing-4) var(--rt-spacing-8);font-size:var(--rt-font-size-xs)}:host(.rtui-button--type-pill.rtui-button--size-sm) .rtui-button__control{padding:var(--rt-spacing-6) var(--rt-spacing-10);font-size:var(--rt-font-size-xs)}:host(.rtui-button--type-pill.rtui-button--size-md) .rtui-button__control{padding:var(--rt-spacing-8) var(--rt-spacing-14);font-size:var(--rt-font-size-sm)}:host(.rtui-button--type-pill.rtui-button--size-lg) .rtui-button__control{padding:var(--rt-spacing-10) var(--rt-spacing-16);font-size:var(--rt-font-size-sm)}:host(.rtui-button--type-pill.rtui-button--radius-none) .rtui-button__control{border-radius:0}:host(.rtui-button--type-pill.rtui-button--radius-sm) .rtui-button__control{border-radius:var(--rt-radius-xs)}:host(.rtui-button--type-pill.rtui-button--radius-md) .rtui-button__control{border-radius:var(--rt-radius-sm)}:host(.rtui-button--type-pill.rtui-button--radius-lg) .rtui-button__control{border-radius:var(--rt-radius-md)}:host(.rtui-button--type-pill.rtui-button--radius-full) .rtui-button__control{border-radius:var(--rt-radius-xl)}:host(.rtui-button--type-pill.rtui-button--variant-primary) .rtui-button__control{background-color:var(--rt-bg-accent-primary-subtle);color:var(--rt-text-accent-primary)}:host(.rtui-button--type-pill.rtui-button--variant-primary) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-primary) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-primary-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-danger) .rtui-button__control{background-color:var(--rt-bg-accent-danger-subtle);color:var(--rt-text-accent-danger)}:host(.rtui-button--type-pill.rtui-button--variant-danger) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-danger) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-danger-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-success) .rtui-button__control{background-color:var(--rt-bg-accent-success-subtle);color:var(--rt-text-accent-success)}:host(.rtui-button--type-pill.rtui-button--variant-success) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-success) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-success-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-warning) .rtui-button__control{background-color:var(--rt-bg-accent-warning-subtle);color:var(--rt-text-accent-warning)}:host(.rtui-button--type-pill.rtui-button--variant-warning) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-warning) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-warning-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-accent) .rtui-button__control{background-color:var(--rt-bg-accent-info-subtle);color:var(--rt-text-accent-info)}:host(.rtui-button--type-pill.rtui-button--variant-accent) .rtui-button__control:hover:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 92%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--variant-accent) .rtui-button__control:active:not(:disabled){background-color:color-mix(in srgb,var(--rt-bg-accent-info-subtle) 84%,var(--rt-color-neutral-100))}:host(.rtui-button--type-pill.rtui-button--appearance-text) .rtui-button__control{min-height:1.875rem;padding:0 var(--rt-spacing-10);background-color:transparent;color:var(--mat-sys-on-surface-variant);font-size:var(--rt-font-size-md);font-weight:var(--rt-font-weight-regular)}:host(.rtui-button--type-pill.rtui-button--appearance-text) .rtui-button__control:hover:not(:disabled){background-color:var(--rt-bg-base-hover)}:host(.rtui-button--type-pill.rtui-button--appearance-text) .rtui-button__control:active:not(:disabled){background-color:var(--rt-bg-base-hover)}\n"] }]
|
|
1062
1120
|
}], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], design: [{ type: i0.Input, args: [{ isSignal: true, alias: "design", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconPosition", required: false }] }], iconSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSize", required: false }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], outlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "outlined", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], spinnerDiameter: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinnerDiameter", required: false }] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
|
|
1063
1121
|
|
|
1122
|
+
const BEM_BLOCK$o = 'rtui-multi-button';
|
|
1064
1123
|
class RtuiMultiButtonComponent {
|
|
1065
1124
|
constructor() {
|
|
1066
1125
|
this.actions = input([], { ...(ngDevMode ? { debugName: "actions" } : /* istanbul ignore next */ {}), transform: (value) => transformArrayInput(value) });
|
|
@@ -1075,7 +1134,7 @@ class RtuiMultiButtonComponent {
|
|
|
1075
1134
|
}
|
|
1076
1135
|
}
|
|
1077
1136
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiMultiButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1078
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiMultiButtonComponent, isStandalone: true, selector: "rtui-multi-button", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, activeAction: { classPropertyName: "activeAction", publicName: "activeAction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeAction: "activeActionChange", changeActiveAction: "changeActiveAction" }, ngImport: i0, template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-rtui-multibutton-base-display: inline-flex;--rt-rtui-multibutton-base-flex-flow: row wrap;--rt-rtui-multibutton-base-radius: 8px;--rt-rtui-multibutton-base-padding: 4px;--rt-rtui-multibutton-base-background-color: var(--rt-bg-base-hover);--rt-rtui-multibutton-action-base-padding: 4px 8px;--rt-rtui-multibutton-action-base-radius: 8px;--rt-rtui-multibutton-action-base-border: 0;--rt-rtui-multibutton-action-base-font-size: 12px;--rt-rtui-multibutton-action-base-font-weight: 600;--rt-rtui-multibutton-action-base-color: var(--rt-text-base-secondary);--rt-rtui-multibutton-action-base-background-color: transparent;--rt-rtui-multibutton-action-base-transition: background-color .15s, color .15s;--rt-rtui-multibutton-action-base-cursor: pointer;--rt-rtui-multibutton-action-hover-color: var(--rt-text-base-soft);--rt-rtui-multibutton-action-active-color: var(--rt-text-base-soft);--rt-rtui-multibutton-action-active-background-color: var(--rt-bg-base-strong);--rt-rtui-multibutton-action-active-cursor: default;--rt-rtui-multibutton-action-focus-visible-outline: 2px dashed var(--rt-border-focus);--rt-rtui-multibutton-action-focus-visible-outline-offset: -2px;--rt-rtui-multibutton-action-disabled-pointer-events: none;--rt-rtui-multibutton-action-disabled-cursor: default;--rt-rtui-multibutton-action-disabled-opacity: .75}:host .rtui-multibutton-actions{display:var(--rt-rtui-multibutton-base-display);flex-flow:var(--rt-rtui-multibutton-base-flex-flow);padding:var(--rt-rtui-multibutton-base-padding);border-radius:var(--rt-rtui-multibutton-base-radius);background-color:var(--rt-rtui-multibutton-base-background-color)}:host .rtui-multibutton-actions__action{padding:var(--rt-rtui-multibutton-action-base-padding);border:var(--rt-rtui-multibutton-action-base-border);border-radius:var(--rt-rtui-multibutton-action-base-radius);background-color:var(--rt-rtui-multibutton-action-base-background-color);color:var(--rt-rtui-multibutton-action-base-color);cursor:var(--rt-rtui-multibutton-action-base-cursor);font-size:var(--rt-rtui-multibutton-action-base-font-size);font-weight:var(--rt-rtui-multibutton-action-base-font-weight);transition:var(--rt-rtui-multibutton-action-base-transition)}:host .rtui-multibutton-actions__action--active{background-color:var(--rt-rtui-multibutton-action-active-background-color);color:var(--rt-rtui-multibutton-action-active-color);cursor:var(--rt-rtui-multibutton-action-active-cursor)}:host .rtui-multibutton-actions__action:not(:host .rtui-multibutton-actions__action--active):hover{color:var(--rt-rtui-multibutton-action-hover-color)}:host .rtui-multibutton-actions__action:focus{outline:none}:host .rtui-multibutton-actions__action:focus-visible{outline:var(--rt-rtui-multibutton-action-focus-visible-outline);outline-offset:var(--rt-rtui-multibutton-action-focus-visible-outline-offset)}:host .rtui-multibutton-actions__action:disabled{cursor:var(--rt-rtui-multibutton-action-disabled-cursor);opacity:var(--rt-rtui-multibutton-action-disabled-opacity);pointer-events:var(--rt-rtui-multibutton-action-disabled-pointer-events)}\n"], dependencies: [{ kind: "directive", type:
|
|
1137
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiMultiButtonComponent, isStandalone: true, selector: "rtui-multi-button", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, activeAction: { classPropertyName: "activeAction", publicName: "activeAction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeAction: "activeActionChange", changeActiveAction: "changeActiveAction" }, host: { classAttribute: "rtui-multi-button" }, ngImport: i0, template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-rtui-multibutton-base-display: inline-flex;--rt-rtui-multibutton-base-flex-flow: row wrap;--rt-rtui-multibutton-base-radius: 8px;--rt-rtui-multibutton-base-padding: 4px;--rt-rtui-multibutton-base-background-color: var(--rt-bg-base-hover);--rt-rtui-multibutton-action-base-padding: 4px 8px;--rt-rtui-multibutton-action-base-radius: 8px;--rt-rtui-multibutton-action-base-border: 0;--rt-rtui-multibutton-action-base-font-size: 12px;--rt-rtui-multibutton-action-base-font-weight: 600;--rt-rtui-multibutton-action-base-color: var(--rt-text-base-secondary);--rt-rtui-multibutton-action-base-background-color: transparent;--rt-rtui-multibutton-action-base-transition: background-color .15s, color .15s;--rt-rtui-multibutton-action-base-cursor: pointer;--rt-rtui-multibutton-action-hover-color: var(--rt-text-base-soft);--rt-rtui-multibutton-action-active-color: var(--rt-text-base-soft);--rt-rtui-multibutton-action-active-background-color: var(--rt-bg-base-strong);--rt-rtui-multibutton-action-active-cursor: default;--rt-rtui-multibutton-action-focus-visible-outline: 2px dashed var(--rt-border-focus);--rt-rtui-multibutton-action-focus-visible-outline-offset: -2px;--rt-rtui-multibutton-action-disabled-pointer-events: none;--rt-rtui-multibutton-action-disabled-cursor: default;--rt-rtui-multibutton-action-disabled-opacity: .75}:host .rtui-multibutton-actions{display:var(--rt-rtui-multibutton-base-display);flex-flow:var(--rt-rtui-multibutton-base-flex-flow);padding:var(--rt-rtui-multibutton-base-padding);border-radius:var(--rt-rtui-multibutton-base-radius);background-color:var(--rt-rtui-multibutton-base-background-color)}:host .rtui-multibutton-actions__action{padding:var(--rt-rtui-multibutton-action-base-padding);border:var(--rt-rtui-multibutton-action-base-border);border-radius:var(--rt-rtui-multibutton-action-base-radius);background-color:var(--rt-rtui-multibutton-action-base-background-color);color:var(--rt-rtui-multibutton-action-base-color);cursor:var(--rt-rtui-multibutton-action-base-cursor);font-size:var(--rt-rtui-multibutton-action-base-font-size);font-weight:var(--rt-rtui-multibutton-action-base-font-weight);transition:var(--rt-rtui-multibutton-action-base-transition)}:host .rtui-multibutton-actions__action--active{background-color:var(--rt-rtui-multibutton-action-active-background-color);color:var(--rt-rtui-multibutton-action-active-color);cursor:var(--rt-rtui-multibutton-action-active-cursor)}:host .rtui-multibutton-actions__action:not(:host .rtui-multibutton-actions__action--active):hover{color:var(--rt-rtui-multibutton-action-hover-color)}:host .rtui-multibutton-actions__action:focus{outline:none}:host .rtui-multibutton-actions__action:focus-visible{outline:var(--rt-rtui-multibutton-action-focus-visible-outline);outline-offset:var(--rt-rtui-multibutton-action-focus-visible-outline-offset)}:host .rtui-multibutton-actions__action:disabled{cursor:var(--rt-rtui-multibutton-action-disabled-cursor);opacity:var(--rt-rtui-multibutton-action-disabled-opacity);pointer-events:var(--rt-rtui-multibutton-action-disabled-pointer-events)}\n"], dependencies: [{ kind: "directive", type:
|
|
1079
1138
|
// rt-tools
|
|
1080
1139
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }, { kind: "pipe", type:
|
|
1081
1140
|
// pipes
|
|
@@ -1083,7 +1142,7 @@ class RtuiMultiButtonComponent {
|
|
|
1083
1142
|
}
|
|
1084
1143
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiMultiButtonComponent, decorators: [{
|
|
1085
1144
|
type: Component,
|
|
1086
|
-
args: [{ selector: 'rtui-multi-button', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1145
|
+
args: [{ selector: 'rtui-multi-button', host: { class: BEM_BLOCK$o }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1087
1146
|
// pipes
|
|
1088
1147
|
TitleCasePipe,
|
|
1089
1148
|
// rt-tools
|
|
@@ -1123,22 +1182,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1123
1182
|
selector: '[rtuiHeaderRight]',
|
|
1124
1183
|
}]
|
|
1125
1184
|
}] });
|
|
1185
|
+
const BEM_BLOCK$n = 'rtui-header';
|
|
1126
1186
|
class RtuiHeaderComponent {
|
|
1127
1187
|
constructor() {
|
|
1128
|
-
this
|
|
1188
|
+
this.#breakpoints = inject(BreakpointService);
|
|
1189
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
1190
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
1191
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
1192
|
+
/**
|
|
1193
|
+
* Признак узкого экрана.
|
|
1194
|
+
*
|
|
1195
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
1196
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
1197
|
+
*/
|
|
1198
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
1199
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
1129
1200
|
this.isMobileMenuButtonShown = input(true, { ...(ngDevMode ? { debugName: "isMobileMenuButtonShown" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
1130
1201
|
this.leftHeaderTpl = contentChild(RtuiHeaderLeftDirective, { ...(ngDevMode ? { debugName: "leftHeaderTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
1131
1202
|
this.centerHeaderTpl = contentChild(RtuiHeaderCenterDirective, { ...(ngDevMode ? { debugName: "centerHeaderTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
1132
1203
|
this.rightHeaderTpl = contentChild(RtuiHeaderRightDirective, { ...(ngDevMode ? { debugName: "rightHeaderTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
1133
1204
|
this.openMobileMenuAction = output();
|
|
1134
1205
|
}
|
|
1206
|
+
#breakpoints;
|
|
1135
1207
|
openSideMenu() {
|
|
1136
1208
|
if (this.isMobile() && this.isMobileMenuButtonShown()) {
|
|
1137
1209
|
this.openMobileMenuAction.emit();
|
|
1138
1210
|
}
|
|
1139
1211
|
}
|
|
1140
1212
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1141
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiHeaderComponent, isStandalone: true, selector: "rtui-header", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isMobileMenuButtonShown: { classPropertyName: "isMobileMenuButtonShown", publicName: "isMobileMenuButtonShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openMobileMenuAction: "openMobileMenuAction" }, queries: [{ propertyName: "leftHeaderTpl", first: true, predicate: RtuiHeaderLeftDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "centerHeaderTpl", first: true, predicate: RtuiHeaderCenterDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "rightHeaderTpl", first: true, predicate: RtuiHeaderRightDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<rtui-toolbar>\n <ng-container *rtuiToolbarLeft>\n @if (
|
|
1213
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiHeaderComponent, isStandalone: true, selector: "rtui-header", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isMobileMenuButtonShown: { classPropertyName: "isMobileMenuButtonShown", publicName: "isMobileMenuButtonShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openMobileMenuAction: "openMobileMenuAction" }, host: { classAttribute: "rtui-header" }, providers: [BreakpointService], queries: [{ propertyName: "leftHeaderTpl", first: true, predicate: RtuiHeaderLeftDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "centerHeaderTpl", first: true, predicate: RtuiHeaderCenterDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "rightHeaderTpl", first: true, predicate: RtuiHeaderRightDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
1142
1214
|
// BEM
|
|
1143
1215
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "component", type:
|
|
1144
1216
|
// Ui-kit
|
|
@@ -1146,7 +1218,7 @@ class RtuiHeaderComponent {
|
|
|
1146
1218
|
}
|
|
1147
1219
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiHeaderComponent, decorators: [{
|
|
1148
1220
|
type: Component,
|
|
1149
|
-
args: [{ selector: 'rtui-header', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1221
|
+
args: [{ selector: 'rtui-header', host: { class: BEM_BLOCK$n }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1150
1222
|
NgTemplateOutlet,
|
|
1151
1223
|
// Material
|
|
1152
1224
|
MatToolbar,
|
|
@@ -1160,7 +1232,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1160
1232
|
RtuiToolbarLeftDirective,
|
|
1161
1233
|
RtuiToolbarCenterDirective,
|
|
1162
1234
|
RtuiToolbarRightDirective,
|
|
1163
|
-
], template: "<rtui-toolbar>\n <ng-container *rtuiToolbarLeft>\n @if (
|
|
1235
|
+
], template: "<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" }]
|
|
1164
1236
|
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], isMobileMenuButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobileMenuButtonShown", required: false }] }], leftHeaderTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiHeaderLeftDirective), { ...{
|
|
1165
1237
|
read: TemplateRef,
|
|
1166
1238
|
}, isSignal: true }] }], centerHeaderTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiHeaderCenterDirective), { ...{
|
|
@@ -1169,10 +1241,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1169
1241
|
read: TemplateRef,
|
|
1170
1242
|
}, isSignal: true }] }], openMobileMenuAction: [{ type: i0.Output, args: ["openMobileMenuAction"] }] } });
|
|
1171
1243
|
|
|
1244
|
+
const BEM_BLOCK$m = 'rtui-clear-button';
|
|
1172
1245
|
class RtuiClearButtonComponent {
|
|
1173
1246
|
constructor() {
|
|
1247
|
+
this.#breakpoints = inject(BreakpointService);
|
|
1248
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
1249
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
1250
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
1174
1251
|
this.#defaultTooltipPosition = 'above';
|
|
1175
|
-
|
|
1252
|
+
/**
|
|
1253
|
+
* Признак узкого экрана.
|
|
1254
|
+
*
|
|
1255
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
1256
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
1257
|
+
*/
|
|
1258
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
1259
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
1176
1260
|
this.isButtonShown = input(true, { ...(ngDevMode ? { debugName: "isButtonShown" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
1177
1261
|
this.tooltip = input(null, { ...(ngDevMode ? { debugName: "tooltip" } : /* istanbul ignore next */ {}), transform: (value) => (isString(value) ? value.trim() : '') });
|
|
1178
1262
|
this.tooltipPosition = input(this.#defaultTooltipPosition, /* @ts-ignore */
|
|
@@ -1180,6 +1264,7 @@ class RtuiClearButtonComponent {
|
|
|
1180
1264
|
this.keydownAction = output();
|
|
1181
1265
|
this.clickAction = output();
|
|
1182
1266
|
}
|
|
1267
|
+
#breakpoints;
|
|
1183
1268
|
#defaultTooltipPosition;
|
|
1184
1269
|
onKeydown() {
|
|
1185
1270
|
this.keydownAction.emit();
|
|
@@ -1188,7 +1273,7 @@ class RtuiClearButtonComponent {
|
|
|
1188
1273
|
this.clickAction.emit();
|
|
1189
1274
|
}
|
|
1190
1275
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiClearButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1191
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiClearButtonComponent, isStandalone: true, selector: "rtui-clear-button", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isButtonShown: { classPropertyName: "isButtonShown", publicName: "isButtonShown", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keydownAction: "keydownAction", clickAction: "clickAction" }, ngImport: i0, template: "<button\n rtBlock=\"rtui-clear-button\"\n [rtMod]=\"{ invisible: !isButtonShown() }\"\n [matTooltip]=\"tooltip() ?? ''\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [matTooltipDisabled]=\"
|
|
1276
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiClearButtonComponent, isStandalone: true, selector: "rtui-clear-button", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isButtonShown: { classPropertyName: "isButtonShown", publicName: "isButtonShown", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keydownAction: "keydownAction", clickAction: "clickAction" }, host: { classAttribute: "rtui-clear-button" }, providers: [BreakpointService], ngImport: i0, template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-clear-button-host-margin: 0 .5rem 0 0;--rt-clear-button-host-padding: .1rem;--rt-clear-button-host-background-color: var(--rt-bg-base-strong);--rt-clear-button-icon-size: 1rem;--rt-clear-button-icon-color: var(--rt-text-base-secondary);--rt-clear-button-icon-hover-color: var(--rt-text-base-strong)}:host .rtui-clear-button{display:flex;align-items:center;justify-content:center;padding:var(--rt-clear-button-host-padding);border:none;border-radius:var(--rt-radius-full);margin:var(--rt-clear-button-host-margin);background-color:var(--rt-clear-button-host-background-color)}:host .rtui-clear-button--invisible{position:absolute;overflow:hidden;width:1px;height:1px;padding:0;border:0;margin:-1px;clip:rect(0 0 0 0);clip-path:inset(100%);pointer-events:none;white-space:nowrap}:host .rtui-clear-button__icon{width:var(--rt-clear-button-icon-size);height:var(--rt-clear-button-icon-size);color:var(--rt-clear-button-icon-color);font-size:var(--rt-clear-button-icon-size)}:host .rtui-clear-button__icon:hover{color:var(--rt-clear-button-icon-hover-color)}\n"], dependencies: [{ kind: "component", type:
|
|
1192
1277
|
// Material
|
|
1193
1278
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type:
|
|
1194
1279
|
// BEM
|
|
@@ -1196,7 +1281,7 @@ class RtuiClearButtonComponent {
|
|
|
1196
1281
|
}
|
|
1197
1282
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiClearButtonComponent, decorators: [{
|
|
1198
1283
|
type: Component,
|
|
1199
|
-
args: [{ selector: 'rtui-clear-button', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1284
|
+
args: [{ selector: 'rtui-clear-button', host: { class: BEM_BLOCK$m }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1200
1285
|
// Material
|
|
1201
1286
|
MatIcon,
|
|
1202
1287
|
MatIconButton,
|
|
@@ -1205,7 +1290,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1205
1290
|
BlockDirective,
|
|
1206
1291
|
ElemDirective,
|
|
1207
1292
|
ModDirective,
|
|
1208
|
-
], template: "<button\n rtBlock=\"rtui-clear-button\"\n [rtMod]=\"{ invisible: !isButtonShown() }\"\n [matTooltip]=\"tooltip() ?? ''\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [matTooltipDisabled]=\"
|
|
1293
|
+
], template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-clear-button-host-margin: 0 .5rem 0 0;--rt-clear-button-host-padding: .1rem;--rt-clear-button-host-background-color: var(--rt-bg-base-strong);--rt-clear-button-icon-size: 1rem;--rt-clear-button-icon-color: var(--rt-text-base-secondary);--rt-clear-button-icon-hover-color: var(--rt-text-base-strong)}:host .rtui-clear-button{display:flex;align-items:center;justify-content:center;padding:var(--rt-clear-button-host-padding);border:none;border-radius:var(--rt-radius-full);margin:var(--rt-clear-button-host-margin);background-color:var(--rt-clear-button-host-background-color)}:host .rtui-clear-button--invisible{position:absolute;overflow:hidden;width:1px;height:1px;padding:0;border:0;margin:-1px;clip:rect(0 0 0 0);clip-path:inset(100%);pointer-events:none;white-space:nowrap}:host .rtui-clear-button__icon{width:var(--rt-clear-button-icon-size);height:var(--rt-clear-button-icon-size);color:var(--rt-clear-button-icon-color);font-size:var(--rt-clear-button-icon-size)}:host .rtui-clear-button__icon:hover{color:var(--rt-clear-button-icon-hover-color)}\n"] }]
|
|
1209
1294
|
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], isButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isButtonShown", required: false }] }], tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: false }] }], tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPosition", required: false }] }], keydownAction: [{ type: i0.Output, args: ["keydownAction"] }], clickAction: [{ type: i0.Output, args: ["clickAction"] }] } });
|
|
1210
1295
|
|
|
1211
1296
|
const DEFAULT_PAGE_SIZE = 20;
|
|
@@ -1217,17 +1302,27 @@ const DEFAULT_PAGE_MODEL = Object.freeze({
|
|
|
1217
1302
|
hasPrev: false,
|
|
1218
1303
|
});
|
|
1219
1304
|
|
|
1305
|
+
const BEM_BLOCK$l = 'rtui-pagination';
|
|
1220
1306
|
class RtuiPaginationComponent {
|
|
1221
1307
|
constructor() {
|
|
1222
1308
|
this.#injector = inject(Injector);
|
|
1223
1309
|
this.#destroyRef = inject(DestroyRef);
|
|
1310
|
+
this.#breakpoints = inject(BreakpointService);
|
|
1224
1311
|
this.#fb = inject(FormBuilder);
|
|
1225
1312
|
this.#windowRef = inject(WINDOW);
|
|
1313
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
1314
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
1315
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
1226
1316
|
/** Current Page Model */
|
|
1227
1317
|
this.currentPageModel = input.required(/* @ts-ignore */
|
|
1228
1318
|
...(ngDevMode ? [{ debugName: "currentPageModel" }] : /* istanbul ignore next */ []));
|
|
1229
|
-
/**
|
|
1230
|
-
|
|
1319
|
+
/**
|
|
1320
|
+
* Признак узкого экрана.
|
|
1321
|
+
*
|
|
1322
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
1323
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
1324
|
+
*/
|
|
1325
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
1231
1326
|
/** Output action when Page Model changed */
|
|
1232
1327
|
this.pageModelChange = output();
|
|
1233
1328
|
/** Form control for selected page size */
|
|
@@ -1257,6 +1352,7 @@ class RtuiPaginationComponent {
|
|
|
1257
1352
|
}
|
|
1258
1353
|
#injector;
|
|
1259
1354
|
#destroyRef;
|
|
1355
|
+
#breakpoints;
|
|
1260
1356
|
#fb;
|
|
1261
1357
|
#windowRef;
|
|
1262
1358
|
/** Set 'isContentClipped' when widow resize */
|
|
@@ -1353,12 +1449,12 @@ class RtuiPaginationComponent {
|
|
|
1353
1449
|
}
|
|
1354
1450
|
}
|
|
1355
1451
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1356
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiPaginationComponent, isStandalone: true, selector: "rtui-pagination", inputs: { currentPageModel: { classPropertyName: "currentPageModel", publicName: "currentPageModel", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { pageModelChange: "pageModelChange" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (currentPageModel().totalCount > pageSizes()[0]) {\n <div #containerRef rtBlock=\"pagination-container\" [rtMod]=\"{ clipped: isContentClipped() && !isMobile() }\">\n <div rtBlock=\"paging\" [rtMod]=\"{ clipped: isContentClipped() && !isMobile() }\">\n <div\n rtElem=\"item\"\n role=\"button\"\n tabindex=\"0\"\n [rtMod]=\"{ enabled: currentPageModel()?.hasPrev }\"\n [class.c-pagination__paging-item--disabled]=\"!currentPageModel().hasPrev\"\n (click)=\"onChangePageNumber(currentPageModel().pageNumber - 1)\"\n (keydown)=\"onChangePageNumber(currentPageModel().pageNumber - 1)\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.5 8.5H0.5\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.5 3.5L0.5 8.5L5.5 13.5\"\n stroke=\"currentColor\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n @if (isMobile()) {\n <div rtElem=\"item\" rtMod=\"active\" role=\"button\" tabindex=\"1\">\n <span rtElem=\"item-label\">{{ currentPageModel().pageNumber }}</span>\n </div>\n } @else {\n @for (number of numbers(); track $index) {\n <div\n rtElem=\"item\"\n role=\"button\"\n tabindex=\"1\"\n [rtMod]=\"{\n active: currentPageModel().pageNumber === number,\n divider: number === divider(),\n enabled: number !== divider() && currentPageModel().pageNumber !== number,\n }\"\n (click)=\"onChangePageNumber(number)\"\n (keydown)=\"onChangePageNumber(number)\">\n <span rtElem=\"item-label\">{{ number }}</span>\n </div>\n }\n }\n\n <div\n rtElem=\"item\"\n role=\"button\"\n tabindex=\"3\"\n [rtMod]=\"{ enabled: currentPageModel()?.hasNext }\"\n (click)=\"onChangePageNumber(currentPageModel().pageNumber + 1)\"\n (keydown)=\"onChangePageNumber(currentPageModel().pageNumber + 1)\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.5 8.5H15.5\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M10.5 3.5L15.5 8.5L10.5 13.5\"\n stroke=\"currentColor\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div rtBlock=\"page-size-toggle\" [rtMod]=\"{ clipped: isContentClipped() && !isMobile() }\">\n @if (!isMobile()) {\n <div rtElem=\"title\">Items per page:</div>\n }\n\n <select rtElem=\"selector\" [formControl]=\"control\">\n @for (size of pageSizes(); track $index) {\n <option [value]=\"size\">{{ size }}</option>\n }\n </select>\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";:host{display:flex;width:fit-content;height:100%;--rt-table-pagination-container-gap: 2rem;--rt-table-pagination-container-margin: .5rem 0;--rt-table-pagination-container-color: var(--rt-text-base-secondary);--rt-table-pagination-container-font-size: .875rem;--rt-table-pagination-container-font-weight: 400;--rt-table-pagination-container-line-height: 1rem;--rt-table-pagination-container-mobile-gap: 1rem;--rt-table-pagination-paging-gap: .5rem;--rt-table-pagination-paging-mobile-margin: .5rem 0 0 0;--rt-table-pagination-paging-item-padding: .5rem;--rt-table-pagination-paging-item-border: 1px solid var(--rt-border-neutral-medium);--rt-table-pagination-paging-item-border-radius: .75rem;--rt-table-pagination-paging-item-hover-color: var(--rt-text-static-light);--rt-table-pagination-paging-item-hover-background-color: var(--rt-bg-base-emphasis);--rt-table-pagination-paging-item-active-color: var(--rt-text-static-light);--rt-table-pagination-paging-item-active-background-color: var(--rt-bg-base-emphasis);--rt-table-pagination-paging-item-disabled-svg-opacity: .3;--rt-table-pagination-size-toggle-gap: .75rem;--rt-table-pagination-size-toggle-selector-min-width: 3rem;--rt-table-pagination-size-toggle-selector-height: 2rem;--rt-table-pagination-size-toggle-selector-mobile-margin: 0 0 .5rem 0}:host .pagination-container{position:relative;display:flex;align-items:center;justify-content:flex-start;color:var(--rt-table-pagination-container-color);font-size:var(--rt-table-pagination-container-font-size);font-weight:var(--rt-table-pagination-container-font-weight);gap:var(--rt-table-pagination-container-gap);line-height:var(--rt-table-pagination-container-line-height)}:host .pagination-container--clipped{flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--rt-table-pagination-container-mobile-gap)}:host .pagination-container--mobile{width:100%;justify-content:space-between}:host .pagination-container .paging{display:flex;align-items:center;justify-content:center;margin:var(--rt-table-pagination-container-margin);gap:var(--rt-table-pagination-paging-gap)}:host .pagination-container .paging--clipped{margin:var(--rt-table-pagination-paging-mobile-margin)}:host .pagination-container .paging__item{position:relative;display:flex;align-items:center;justify-content:center;padding:var(--rt-table-pagination-paging-item-padding);border:var(--rt-table-pagination-paging-item-border);border-radius:var(--rt-table-pagination-paging-item-border-radius);background-color:transparent;cursor:default;pointer-events:none}:host .pagination-container .paging__item-label{min-width:1rem;text-align:center}:host .pagination-container .paging__item svg{fill-opacity:var(--rt-table-pagination-paging-item-disabled-svg-opacity)}:host .pagination-container .paging__item:hover:not(.divider){background-color:var(--rt-table-pagination-paging-item-hover-background-color);color:var(--rt-table-pagination-paging-item-hover-color)}:host .pagination-container .paging__item--active{background-color:var(--rt-table-pagination-paging-item-active-background-color);color:var(--rt-table-pagination-paging-item-active-color)}:host .pagination-container .paging__item--enabled{cursor:pointer;pointer-events:auto}:host .pagination-container .paging__item--enabled svg{fill-opacity:1}:host .pagination-container .paging__item--divider{border:none;cursor:default;pointer-events:none}:host .pagination-container .page-size-toggle{display:flex;flex-direction:row;align-items:center;justify-content:center;margin:var(--rt-table-pagination-container-margin);gap:var(--rt-table-pagination-size-toggle-gap)}:host .pagination-container .page-size-toggle--clipped{margin:var(--rt-table-pagination-size-toggle-selector-mobile-margin)}:host .pagination-container .page-size-toggle__title{white-space:nowrap}:host .pagination-container .page-size-toggle__selector{width:auto;min-width:var(--rt-table-pagination-size-toggle-selector-min-width);height:var(--rt-table-pagination-size-toggle-selector-height);border:var(--rt-table-pagination-paging-item-border);border-radius:var(--rt-table-pagination-paging-item-border-radius);background-color:transparent;color:var(--rt-table-pagination-container-color);cursor:pointer;font-size:var(--rt-table-pagination-container-font-size);font-weight:var(--rt-table-pagination-container-font-weight);line-height:var(--rt-table-pagination-container-line-height)}@media screen and (max-width:599px){:host{width:100%}:host .pagination-container{width:100%;justify-content:space-between}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1452
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiPaginationComponent, isStandalone: true, selector: "rtui-pagination", inputs: { currentPageModel: { classPropertyName: "currentPageModel", publicName: "currentPageModel", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageModelChange: "pageModelChange" }, host: { listeners: { "window:resize": "onResize()" }, classAttribute: "rtui-pagination" }, providers: [BreakpointService], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@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", styles: ["@charset \"UTF-8\";:host{display:flex;width:fit-content;height:100%;--rt-table-pagination-container-gap: 2rem;--rt-table-pagination-container-margin: .5rem 0;--rt-table-pagination-container-color: var(--rt-text-base-secondary);--rt-table-pagination-container-font-size: .875rem;--rt-table-pagination-container-font-weight: 400;--rt-table-pagination-container-line-height: 1rem;--rt-table-pagination-container-clipped-gap: 1rem;--rt-table-pagination-paging-gap: .5rem;--rt-table-pagination-paging-clipped-margin: .5rem 0 0 0;--rt-table-pagination-paging-item-padding: .5rem;--rt-table-pagination-paging-item-border: 1px solid var(--rt-border-neutral-medium);--rt-table-pagination-paging-item-border-radius: .75rem;--rt-table-pagination-paging-item-hover-color: var(--rt-text-static-light);--rt-table-pagination-paging-item-hover-background-color: var(--rt-bg-base-emphasis);--rt-table-pagination-paging-item-active-color: var(--rt-text-static-light);--rt-table-pagination-paging-item-active-background-color: var(--rt-bg-base-emphasis);--rt-table-pagination-paging-item-disabled-svg-opacity: .3;--rt-table-pagination-size-toggle-gap: .75rem;--rt-table-pagination-size-toggle-selector-min-width: 3rem;--rt-table-pagination-size-toggle-selector-height: 2rem;--rt-table-pagination-size-toggle-selector-clipped-margin: 0 0 .5rem 0}:host .pagination-container{position:relative;display:flex;align-items:center;justify-content:flex-start;color:var(--rt-table-pagination-container-color);font-size:var(--rt-table-pagination-container-font-size);font-weight:var(--rt-table-pagination-container-font-weight);gap:var(--rt-table-pagination-container-gap);line-height:var(--rt-table-pagination-container-line-height)}@media screen and (min-width:600px){:host .pagination-container--clipped{flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--rt-table-pagination-container-clipped-gap)}}:host .pagination-container .paging{display:flex;align-items:center;justify-content:center;margin:var(--rt-table-pagination-container-margin);gap:var(--rt-table-pagination-paging-gap)}@media screen and (min-width:600px){:host .pagination-container .paging--clipped{margin:var(--rt-table-pagination-paging-clipped-margin)}}:host .pagination-container .paging__item{position:relative;display:flex;align-items:center;justify-content:center;padding:var(--rt-table-pagination-paging-item-padding);border:var(--rt-table-pagination-paging-item-border);border-radius:var(--rt-table-pagination-paging-item-border-radius);background-color:transparent;cursor:default;pointer-events:none}:host .pagination-container .paging__item-label{min-width:1rem;text-align:center}:host .pagination-container .paging__item svg{fill-opacity:var(--rt-table-pagination-paging-item-disabled-svg-opacity)}:host .pagination-container .paging__item:hover:not(.divider){background-color:var(--rt-table-pagination-paging-item-hover-background-color);color:var(--rt-table-pagination-paging-item-hover-color)}:host .pagination-container .paging__item--active{background-color:var(--rt-table-pagination-paging-item-active-background-color);color:var(--rt-table-pagination-paging-item-active-color)}:host .pagination-container .paging__item--enabled{cursor:pointer;pointer-events:auto}:host .pagination-container .paging__item--enabled svg{fill-opacity:1}:host .pagination-container .paging__item--divider{border:none;cursor:default;pointer-events:none}:host .pagination-container .page-size-toggle{display:flex;flex-direction:row;align-items:center;justify-content:center;margin:var(--rt-table-pagination-container-margin);gap:var(--rt-table-pagination-size-toggle-gap)}@media screen and (min-width:600px){:host .pagination-container .page-size-toggle--clipped{margin:var(--rt-table-pagination-size-toggle-selector-clipped-margin)}}:host .pagination-container .page-size-toggle__title{white-space:nowrap}:host .pagination-container .page-size-toggle__selector{width:auto;min-width:var(--rt-table-pagination-size-toggle-selector-min-width);height:var(--rt-table-pagination-size-toggle-selector-height);border:var(--rt-table-pagination-paging-item-border);border-radius:var(--rt-table-pagination-paging-item-border-radius);background-color:transparent;color:var(--rt-table-pagination-container-color);cursor:pointer;font-size:var(--rt-table-pagination-container-font-size);font-weight:var(--rt-table-pagination-container-font-weight);line-height:var(--rt-table-pagination-container-line-height)}@media screen and (max-width:599px){:host{width:100%}:host .pagination-container{width:100%;justify-content:space-between}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1357
1453
|
}
|
|
1358
1454
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiPaginationComponent, decorators: [{
|
|
1359
1455
|
type: Component,
|
|
1360
|
-
args: [{ selector: 'rtui-pagination', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, BlockDirective, ElemDirective, ModDirective], template: "@if (currentPageModel().totalCount > pageSizes()[0]) {\n <div #containerRef rtBlock=\"pagination-container\" [rtMod]=\"{ clipped: isContentClipped()
|
|
1361
|
-
}], propDecorators: { currentPageModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPageModel", required: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
1456
|
+
args: [{ selector: 'rtui-pagination', host: { class: BEM_BLOCK$l }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, BlockDirective, ElemDirective, ModDirective], template: "@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", styles: ["@charset \"UTF-8\";:host{display:flex;width:fit-content;height:100%;--rt-table-pagination-container-gap: 2rem;--rt-table-pagination-container-margin: .5rem 0;--rt-table-pagination-container-color: var(--rt-text-base-secondary);--rt-table-pagination-container-font-size: .875rem;--rt-table-pagination-container-font-weight: 400;--rt-table-pagination-container-line-height: 1rem;--rt-table-pagination-container-clipped-gap: 1rem;--rt-table-pagination-paging-gap: .5rem;--rt-table-pagination-paging-clipped-margin: .5rem 0 0 0;--rt-table-pagination-paging-item-padding: .5rem;--rt-table-pagination-paging-item-border: 1px solid var(--rt-border-neutral-medium);--rt-table-pagination-paging-item-border-radius: .75rem;--rt-table-pagination-paging-item-hover-color: var(--rt-text-static-light);--rt-table-pagination-paging-item-hover-background-color: var(--rt-bg-base-emphasis);--rt-table-pagination-paging-item-active-color: var(--rt-text-static-light);--rt-table-pagination-paging-item-active-background-color: var(--rt-bg-base-emphasis);--rt-table-pagination-paging-item-disabled-svg-opacity: .3;--rt-table-pagination-size-toggle-gap: .75rem;--rt-table-pagination-size-toggle-selector-min-width: 3rem;--rt-table-pagination-size-toggle-selector-height: 2rem;--rt-table-pagination-size-toggle-selector-clipped-margin: 0 0 .5rem 0}:host .pagination-container{position:relative;display:flex;align-items:center;justify-content:flex-start;color:var(--rt-table-pagination-container-color);font-size:var(--rt-table-pagination-container-font-size);font-weight:var(--rt-table-pagination-container-font-weight);gap:var(--rt-table-pagination-container-gap);line-height:var(--rt-table-pagination-container-line-height)}@media screen and (min-width:600px){:host .pagination-container--clipped{flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--rt-table-pagination-container-clipped-gap)}}:host .pagination-container .paging{display:flex;align-items:center;justify-content:center;margin:var(--rt-table-pagination-container-margin);gap:var(--rt-table-pagination-paging-gap)}@media screen and (min-width:600px){:host .pagination-container .paging--clipped{margin:var(--rt-table-pagination-paging-clipped-margin)}}:host .pagination-container .paging__item{position:relative;display:flex;align-items:center;justify-content:center;padding:var(--rt-table-pagination-paging-item-padding);border:var(--rt-table-pagination-paging-item-border);border-radius:var(--rt-table-pagination-paging-item-border-radius);background-color:transparent;cursor:default;pointer-events:none}:host .pagination-container .paging__item-label{min-width:1rem;text-align:center}:host .pagination-container .paging__item svg{fill-opacity:var(--rt-table-pagination-paging-item-disabled-svg-opacity)}:host .pagination-container .paging__item:hover:not(.divider){background-color:var(--rt-table-pagination-paging-item-hover-background-color);color:var(--rt-table-pagination-paging-item-hover-color)}:host .pagination-container .paging__item--active{background-color:var(--rt-table-pagination-paging-item-active-background-color);color:var(--rt-table-pagination-paging-item-active-color)}:host .pagination-container .paging__item--enabled{cursor:pointer;pointer-events:auto}:host .pagination-container .paging__item--enabled svg{fill-opacity:1}:host .pagination-container .paging__item--divider{border:none;cursor:default;pointer-events:none}:host .pagination-container .page-size-toggle{display:flex;flex-direction:row;align-items:center;justify-content:center;margin:var(--rt-table-pagination-container-margin);gap:var(--rt-table-pagination-size-toggle-gap)}@media screen and (min-width:600px){:host .pagination-container .page-size-toggle--clipped{margin:var(--rt-table-pagination-size-toggle-selector-clipped-margin)}}:host .pagination-container .page-size-toggle__title{white-space:nowrap}:host .pagination-container .page-size-toggle__selector{width:auto;min-width:var(--rt-table-pagination-size-toggle-selector-min-width);height:var(--rt-table-pagination-size-toggle-selector-height);border:var(--rt-table-pagination-paging-item-border);border-radius:var(--rt-table-pagination-paging-item-border-radius);background-color:transparent;color:var(--rt-table-pagination-container-color);cursor:pointer;font-size:var(--rt-table-pagination-container-font-size);font-weight:var(--rt-table-pagination-container-font-weight);line-height:var(--rt-table-pagination-container-line-height)}@media screen and (max-width:599px){:host{width:100%}:host .pagination-container{width:100%;justify-content:space-between}}\n"] }]
|
|
1457
|
+
}], propDecorators: { currentPageModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPageModel", required: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], pageModelChange: [{ type: i0.Output, args: ["pageModelChange"] }], containerRef: [{ type: i0.ViewChild, args: ['containerRef', { isSignal: true }] }], onResize: [{
|
|
1362
1458
|
type: HostListener,
|
|
1363
1459
|
args: ['window:resize']
|
|
1364
1460
|
}] } });
|
|
@@ -1946,10 +2042,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1946
2042
|
|
|
1947
2043
|
// const
|
|
1948
2044
|
|
|
2045
|
+
const BEM_BLOCK$k = 'rtui-table-base-cell';
|
|
1949
2046
|
class TableBaseCellComponent {
|
|
1950
2047
|
constructor() {
|
|
2048
|
+
this.#breakpoints = inject(BreakpointService);
|
|
1951
2049
|
this.#clipboard = inject(Clipboard);
|
|
1952
2050
|
this.#sanitizer = inject(DomSanitizer);
|
|
2051
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
2052
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
2053
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
1953
2054
|
this.cellValue = computed(() => {
|
|
1954
2055
|
const transformFn = this.column()?.transform;
|
|
1955
2056
|
return transformFn ? transformFn(this.row()[this.column().propName]) : this.row()[this.column().propName];
|
|
@@ -1970,8 +2071,16 @@ class TableBaseCellComponent {
|
|
|
1970
2071
|
...(ngDevMode ? [{ debugName: "row" }] : /* istanbul ignore next */ []));
|
|
1971
2072
|
this.column = input.required(/* @ts-ignore */
|
|
1972
2073
|
...(ngDevMode ? [{ debugName: "column" }] : /* istanbul ignore next */ []));
|
|
1973
|
-
|
|
2074
|
+
/**
|
|
2075
|
+
* Признак узкого экрана.
|
|
2076
|
+
*
|
|
2077
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
2078
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
2079
|
+
*/
|
|
2080
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
2081
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
1974
2082
|
}
|
|
2083
|
+
#breakpoints;
|
|
1975
2084
|
#clipboard;
|
|
1976
2085
|
#sanitizer;
|
|
1977
2086
|
get style() {
|
|
@@ -2013,7 +2122,7 @@ class TableBaseCellComponent {
|
|
|
2013
2122
|
}
|
|
2014
2123
|
}
|
|
2015
2124
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: TableBaseCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2016
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: TableBaseCellComponent, isStandalone: true, selector: "rtui-table-base-cell", inputs: { row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: true, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()" }, properties: { "style": "this.style" } }, ngImport: i0, template: "<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]=\"!
|
|
2125
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: TableBaseCellComponent, isStandalone: true, selector: "rtui-table-base-cell", inputs: { row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: true, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()" }, properties: { "style": "this.style" }, classAttribute: "rtui-table-base-cell" }, providers: [BreakpointService], ngImport: i0, template: "<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) {\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", styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;width:100%;height:100%;align-items:center;gap:var(--rt-table-base-cell-host-gap);--rt-table-base-cell-host-gap: .5rem;--rt-table-base-cell-prefix-icon-size: 1.5rem;--rt-table-base-cell-suffix-icon-size: 1.5rem;--rt-table-base-cell-title-padding: .5rem .5rem .5rem 0;--rt-table-base-cell-copy-button-position-right: .25rem;--rt-table-base-cell-copy-button-position-left: .25rem;--rt-table-base-cell-copy-button-padding: .25rem;--rt-table-base-cell-copy-button-background-color: var(--mat-fab-small-container-color);--rt-table-base-cell-copy-button-border-radius: 5px;--rt-table-base-cell-copy-button-color: var(--rt-color-neutral-60);--rt-table-base-cell-copy-button-icon-size: 1rem;--rt-table-base-cell-copy-button-hover-color: var(--rt-color-neutral-100);--rt-table-base-cell-copy-button-complete-color: var(--rt-text-base-strong)}:host .base-cell__prefix{width:var(--rt-table-base-cell-prefix-icon-size);height:var(--rt-table-base-cell-prefix-icon-size);font-size:var(--rt-table-base-cell-prefix-icon-size)}:host .base-cell__title{display:table;width:100%;table-layout:fixed}:host .base-cell__title-text{overflow:hidden;width:100%;padding:var(--rt-table-base-cell-title-padding);text-overflow:ellipsis;white-space:nowrap}:host .base-cell__title--align--left{text-align:left}:host .base-cell__title--align--center{text-align:center}:host .base-cell__title--align--right{text-align:right}:host .base-cell__suffix{width:var(--rt-table-base-cell-suffix-icon-size);height:var(--rt-table-base-cell-suffix-icon-size);font-size:var(--rt-table-base-cell-suffix-icon-size)}:host .base-cell__prefix,:host .base-cell__suffix{width:fit-content;min-width:fit-content}:host .base-cell__copy-button{position:absolute;display:inline-flex;align-items:center;justify-content:center;padding:var(--rt-table-base-cell-copy-button-padding);border:0;border-radius:var(--rt-table-base-cell-copy-button-border-radius);background-color:var(--rt-table-base-cell-copy-button-background-color);color:var(--rt-table-base-cell-copy-button-color);line-height:1;transition:all .15s linear;visibility:hidden}@media screen and (max-width:599px){:host .base-cell__copy-button{visibility:visible}}:host .base-cell__copy-button--position--left{left:var(--rt-table-base-cell-copy-button-position-left)}:host .base-cell__copy-button--position--right{right:var(--rt-table-base-cell-copy-button-position-right)}:host .base-cell__copy-button:hover,:host .base-cell__copy-button:focus,:host .base-cell__copy-button:active{background-color:var(--rt-table-base-cell-copy-button-background-color);color:var(--rt-table-base-cell-copy-button-hover-color)}:host .base-cell__copy-button--complete{cursor:not-allowed}:host .base-cell__copy-button--complete:hover,:host .base-cell__copy-button--complete:focus,:host .base-cell__copy-button--complete:active{color:var(--rt-table-base-cell-copy-button-complete-color)}:host .base-cell__copy-button--visible{visibility:visible}:host .base-cell__copy-icon{width:var(--rt-table-base-cell-copy-button-icon-size);height:var(--rt-table-base-cell-copy-button-icon-size);font-size:var(--rt-table-base-cell-copy-button-icon-size)}\n"], dependencies: [{ kind: "component", type:
|
|
2017
2126
|
// material
|
|
2018
2127
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type:
|
|
2019
2128
|
// directives
|
|
@@ -2023,19 +2132,20 @@ class TableBaseCellComponent {
|
|
|
2023
2132
|
}
|
|
2024
2133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: TableBaseCellComponent, decorators: [{
|
|
2025
2134
|
type: Component,
|
|
2026
|
-
args: [{ selector: 'rtui-table-base-cell', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
2135
|
+
args: [{ selector: 'rtui-table-base-cell', host: { class: BEM_BLOCK$k }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
2027
2136
|
// material
|
|
2028
2137
|
MatIcon,
|
|
2029
2138
|
MatTooltip,
|
|
2030
2139
|
// directives
|
|
2031
2140
|
BlockDirective,
|
|
2032
2141
|
ElemDirective,
|
|
2142
|
+
ConcatClassesPipe,
|
|
2033
2143
|
ModDirective,
|
|
2034
2144
|
RtIconOutlinedDirective,
|
|
2035
2145
|
RtHideTooltipDirective,
|
|
2036
2146
|
// pipes
|
|
2037
2147
|
EmptyToDashPipe,
|
|
2038
|
-
], template: "<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]=\"!
|
|
2148
|
+
], template: "<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) {\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", styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;width:100%;height:100%;align-items:center;gap:var(--rt-table-base-cell-host-gap);--rt-table-base-cell-host-gap: .5rem;--rt-table-base-cell-prefix-icon-size: 1.5rem;--rt-table-base-cell-suffix-icon-size: 1.5rem;--rt-table-base-cell-title-padding: .5rem .5rem .5rem 0;--rt-table-base-cell-copy-button-position-right: .25rem;--rt-table-base-cell-copy-button-position-left: .25rem;--rt-table-base-cell-copy-button-padding: .25rem;--rt-table-base-cell-copy-button-background-color: var(--mat-fab-small-container-color);--rt-table-base-cell-copy-button-border-radius: 5px;--rt-table-base-cell-copy-button-color: var(--rt-color-neutral-60);--rt-table-base-cell-copy-button-icon-size: 1rem;--rt-table-base-cell-copy-button-hover-color: var(--rt-color-neutral-100);--rt-table-base-cell-copy-button-complete-color: var(--rt-text-base-strong)}:host .base-cell__prefix{width:var(--rt-table-base-cell-prefix-icon-size);height:var(--rt-table-base-cell-prefix-icon-size);font-size:var(--rt-table-base-cell-prefix-icon-size)}:host .base-cell__title{display:table;width:100%;table-layout:fixed}:host .base-cell__title-text{overflow:hidden;width:100%;padding:var(--rt-table-base-cell-title-padding);text-overflow:ellipsis;white-space:nowrap}:host .base-cell__title--align--left{text-align:left}:host .base-cell__title--align--center{text-align:center}:host .base-cell__title--align--right{text-align:right}:host .base-cell__suffix{width:var(--rt-table-base-cell-suffix-icon-size);height:var(--rt-table-base-cell-suffix-icon-size);font-size:var(--rt-table-base-cell-suffix-icon-size)}:host .base-cell__prefix,:host .base-cell__suffix{width:fit-content;min-width:fit-content}:host .base-cell__copy-button{position:absolute;display:inline-flex;align-items:center;justify-content:center;padding:var(--rt-table-base-cell-copy-button-padding);border:0;border-radius:var(--rt-table-base-cell-copy-button-border-radius);background-color:var(--rt-table-base-cell-copy-button-background-color);color:var(--rt-table-base-cell-copy-button-color);line-height:1;transition:all .15s linear;visibility:hidden}@media screen and (max-width:599px){:host .base-cell__copy-button{visibility:visible}}:host .base-cell__copy-button--position--left{left:var(--rt-table-base-cell-copy-button-position-left)}:host .base-cell__copy-button--position--right{right:var(--rt-table-base-cell-copy-button-position-right)}:host .base-cell__copy-button:hover,:host .base-cell__copy-button:focus,:host .base-cell__copy-button:active{background-color:var(--rt-table-base-cell-copy-button-background-color);color:var(--rt-table-base-cell-copy-button-hover-color)}:host .base-cell__copy-button--complete{cursor:not-allowed}:host .base-cell__copy-button--complete:hover,:host .base-cell__copy-button--complete:focus,:host .base-cell__copy-button--complete:active{color:var(--rt-table-base-cell-copy-button-complete-color)}:host .base-cell__copy-button--visible{visibility:visible}:host .base-cell__copy-icon{width:var(--rt-table-base-cell-copy-button-icon-size);height:var(--rt-table-base-cell-copy-button-icon-size);font-size:var(--rt-table-base-cell-copy-button-icon-size)}\n"] }]
|
|
2039
2149
|
}], propDecorators: { row: [{ type: i0.Input, args: [{ isSignal: true, alias: "row", required: true }] }], column: [{ type: i0.Input, args: [{ isSignal: true, alias: "column", required: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], style: [{
|
|
2040
2150
|
type: HostBinding,
|
|
2041
2151
|
args: ['style']
|
|
@@ -2047,6 +2157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2047
2157
|
args: ['mouseout']
|
|
2048
2158
|
}] } });
|
|
2049
2159
|
|
|
2160
|
+
const BEM_BLOCK$j = 'rtui-table-header-cell';
|
|
2050
2161
|
class RtuiTableHeaderCellComponent {
|
|
2051
2162
|
constructor() {
|
|
2052
2163
|
this.#sanitizer = inject(DomSanitizer);
|
|
@@ -2086,17 +2197,17 @@ class RtuiTableHeaderCellComponent {
|
|
|
2086
2197
|
return LIST_SORT_ORDER_ENUM.ASC;
|
|
2087
2198
|
}
|
|
2088
2199
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2089
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableHeaderCellComponent, isStandalone: true, selector: "rtui-table-header-cell", inputs: { headerModel: { classPropertyName: "headerModel", publicName: "headerModel", isSignal: true, isRequired: true, transformFunction: null }, sortModel: { classPropertyName: "sortModel", publicName: "sortModel", isSignal: true, isRequired: true, transformFunction: null }, currentSortModel: { classPropertyName: "currentSortModel", publicName: "currentSortModel", isSignal: true, isRequired: true, transformFunction: null }, headerDataEllipsisMaxLines: { classPropertyName: "headerDataEllipsisMaxLines", publicName: "headerDataEllipsisMaxLines", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange" }, host: { listeners: { "click": "handleClick()" }, properties: { "style": "this.style" } }, ngImport: i0, template: "<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 ?? ''\" [
|
|
2200
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableHeaderCellComponent, isStandalone: true, selector: "rtui-table-header-cell", inputs: { headerModel: { classPropertyName: "headerModel", publicName: "headerModel", isSignal: true, isRequired: true, transformFunction: null }, sortModel: { classPropertyName: "sortModel", publicName: "sortModel", isSignal: true, isRequired: true, transformFunction: null }, currentSortModel: { classPropertyName: "currentSortModel", publicName: "currentSortModel", isSignal: true, isRequired: true, transformFunction: null }, headerDataEllipsisMaxLines: { classPropertyName: "headerDataEllipsisMaxLines", publicName: "headerDataEllipsisMaxLines", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange" }, host: { listeners: { "click": "handleClick()" }, properties: { "style": "this.style" }, classAttribute: "rtui-table-header-cell" }, ngImport: i0, template: "<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", styles: ["@charset \"UTF-8\";:host{display:flex;align-items:center;justify-content:space-between;cursor:pointer;--rt-table-header-cell-label-gap: .5rem;--rt-table-header-cell-prefix-icon-size: 1.5rem;--rt-table-header-cell-suffix-icon-size: 1.5rem;--rt-table-header-cell-icon-margin: 0 0 0 1rem;--rt-table-header-cell-icon-color: var(--rt-text-base-disabled);--rt-table-header-cell-icon-active-color: var(--rt-text-base-strong)}:host:hover .header-cell-icons{visibility:visible}:host .header-cell-label{display:flex;flex-grow:1;align-items:center;gap:var(--rt-table-header-cell-label-gap)}:host .header-cell-label--align--left{justify-content:flex-start}:host .header-cell-label--align--center{justify-content:center}:host .header-cell-label--align--right{justify-content:flex-end}:host .header-cell-label__prefix{width:var(--rt-table-header-cell-prefix-icon-size);height:var(--rt-table-header-cell-prefix-icon-size);font-size:var(--rt-table-header-cell-prefix-icon-size)}:host .header-cell-label__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .header-cell-label__suffix{width:var(--rt-table-header-cell-suffix-icon-size);height:var(--rt-table-header-cell-suffix-icon-size);font-size:var(--rt-table-header-cell-suffix-icon-size)}:host .header-cell-label__prefix,:host .header-cell-label__suffix{width:fit-content;min-width:fit-content}:host .header-cell-icons{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:var(--rt-table-header-cell-icon-margin);visibility:hidden}:host .header-cell-icons--active{visibility:visible}:host .header-cell-icons__icon{width:0;height:0;border-right:3px solid transparent;border-bottom:5.2px solid var(--rt-table-header-cell-icon-color);border-left:3px solid transparent}:host .header-cell-icons__icon--second{margin-top:var(--rt-spacing-2);transform:scaleY(-1)}:host .header-cell-icons__icon--active{border-bottom-color:var(--rt-table-header-cell-icon-active-color)}\n"], dependencies: [{ kind: "component", type:
|
|
2090
2201
|
// Material
|
|
2091
2202
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type:
|
|
2092
2203
|
// Bem
|
|
2093
2204
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }, { kind: "directive", type:
|
|
2094
2205
|
// Directives
|
|
2095
|
-
RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2206
|
+
RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "pipe", type: ConcatClassesPipe, name: "concatClasses" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2096
2207
|
}
|
|
2097
2208
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableHeaderCellComponent, decorators: [{
|
|
2098
2209
|
type: Component,
|
|
2099
|
-
args: [{ selector: 'rtui-table-header-cell', imports: [
|
|
2210
|
+
args: [{ selector: 'rtui-table-header-cell', host: { class: BEM_BLOCK$j }, imports: [
|
|
2100
2211
|
NgClass,
|
|
2101
2212
|
// Material
|
|
2102
2213
|
MatIcon,
|
|
@@ -2106,10 +2217,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2106
2217
|
// Bem
|
|
2107
2218
|
BlockDirective,
|
|
2108
2219
|
ElemDirective,
|
|
2220
|
+
ConcatClassesPipe,
|
|
2109
2221
|
ModDirective,
|
|
2110
2222
|
// Directives
|
|
2111
2223
|
RtIconOutlinedDirective,
|
|
2112
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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 ?? ''\" [
|
|
2224
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["@charset \"UTF-8\";:host{display:flex;align-items:center;justify-content:space-between;cursor:pointer;--rt-table-header-cell-label-gap: .5rem;--rt-table-header-cell-prefix-icon-size: 1.5rem;--rt-table-header-cell-suffix-icon-size: 1.5rem;--rt-table-header-cell-icon-margin: 0 0 0 1rem;--rt-table-header-cell-icon-color: var(--rt-text-base-disabled);--rt-table-header-cell-icon-active-color: var(--rt-text-base-strong)}:host:hover .header-cell-icons{visibility:visible}:host .header-cell-label{display:flex;flex-grow:1;align-items:center;gap:var(--rt-table-header-cell-label-gap)}:host .header-cell-label--align--left{justify-content:flex-start}:host .header-cell-label--align--center{justify-content:center}:host .header-cell-label--align--right{justify-content:flex-end}:host .header-cell-label__prefix{width:var(--rt-table-header-cell-prefix-icon-size);height:var(--rt-table-header-cell-prefix-icon-size);font-size:var(--rt-table-header-cell-prefix-icon-size)}:host .header-cell-label__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .header-cell-label__suffix{width:var(--rt-table-header-cell-suffix-icon-size);height:var(--rt-table-header-cell-suffix-icon-size);font-size:var(--rt-table-header-cell-suffix-icon-size)}:host .header-cell-label__prefix,:host .header-cell-label__suffix{width:fit-content;min-width:fit-content}:host .header-cell-icons{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:var(--rt-table-header-cell-icon-margin);visibility:hidden}:host .header-cell-icons--active{visibility:visible}:host .header-cell-icons__icon{width:0;height:0;border-right:3px solid transparent;border-bottom:5.2px solid var(--rt-table-header-cell-icon-color);border-left:3px solid transparent}:host .header-cell-icons__icon--second{margin-top:var(--rt-spacing-2);transform:scaleY(-1)}:host .header-cell-icons__icon--active{border-bottom-color:var(--rt-table-header-cell-icon-active-color)}\n"] }]
|
|
2113
2225
|
}], propDecorators: { headerModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerModel", required: true }] }], sortModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortModel", required: true }] }], currentSortModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSortModel", required: true }] }], headerDataEllipsisMaxLines: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerDataEllipsisMaxLines", required: false }] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], style: [{
|
|
2114
2226
|
type: HostBinding,
|
|
2115
2227
|
args: ['style']
|
|
@@ -2118,10 +2230,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2118
2230
|
args: ['click']
|
|
2119
2231
|
}] } });
|
|
2120
2232
|
|
|
2233
|
+
const BEM_BLOCK$i = 'rtui-table-header-filter-cell';
|
|
2121
2234
|
class RtuiTableHeaderFilterCellComponent {
|
|
2122
2235
|
constructor() {
|
|
2236
|
+
this.#breakpoints = inject(BreakpointService);
|
|
2123
2237
|
this.#injector = inject(Injector);
|
|
2124
2238
|
this.#destroyRef = inject(DestroyRef);
|
|
2239
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
2240
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
2241
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
2125
2242
|
this.filterTypes = TABLE_COLUMN_FILTER_TYPES_ENUM;
|
|
2126
2243
|
this.filterOperatorTypes = FILTER_OPERATOR_TYPE_ENUM;
|
|
2127
2244
|
/** Current elements appearance */
|
|
@@ -2140,8 +2257,14 @@ class RtuiTableHeaderFilterCellComponent {
|
|
|
2140
2257
|
this.filterOperators = input([], { ...(ngDevMode ? { debugName: "filterOperators" } : /* istanbul ignore next */ {}), transform: (value) => transformArrayInput(value) });
|
|
2141
2258
|
/** List of selected filter models */
|
|
2142
2259
|
this.filterSelectOptions = input([], { ...(ngDevMode ? { debugName: "filterSelectOptions" } : /* istanbul ignore next */ {}), transform: (value) => transformArrayInput(value) });
|
|
2143
|
-
/**
|
|
2144
|
-
|
|
2260
|
+
/**
|
|
2261
|
+
* Признак узкого экрана.
|
|
2262
|
+
*
|
|
2263
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
2264
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
2265
|
+
*/
|
|
2266
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
2267
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
2145
2268
|
/** Filter change output action */
|
|
2146
2269
|
this.filterChange = output();
|
|
2147
2270
|
this.currentFilter = signal({
|
|
@@ -2151,6 +2274,7 @@ class RtuiTableHeaderFilterCellComponent {
|
|
|
2151
2274
|
}, /* @ts-ignore */
|
|
2152
2275
|
...(ngDevMode ? [{ debugName: "currentFilter" }] : /* istanbul ignore next */ []));
|
|
2153
2276
|
}
|
|
2277
|
+
#breakpoints;
|
|
2154
2278
|
#injector;
|
|
2155
2279
|
#destroyRef;
|
|
2156
2280
|
ngOnInit() {
|
|
@@ -2225,19 +2349,20 @@ class RtuiTableHeaderFilterCellComponent {
|
|
|
2225
2349
|
this.currentFilter.update((filter) => ({ ...filter, operatorType }));
|
|
2226
2350
|
}
|
|
2227
2351
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableHeaderFilterCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2228
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableHeaderFilterCellComponent, isStandalone: true, selector: "rtui-table-header-filter-cell", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, filterProperty: { classPropertyName: "filterProperty", publicName: "filterProperty", isSignal: true, isRequired: true, transformFunction: null }, filterType: { classPropertyName: "filterType", publicName: "filterType", isSignal: true, isRequired: true, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: true, transformFunction: null }, defaultFilterOperator: { classPropertyName: "defaultFilterOperator", publicName: "defaultFilterOperator", isSignal: true, isRequired: true, transformFunction: null }, filterOperators: { classPropertyName: "filterOperators", publicName: "filterOperators", isSignal: true, isRequired: false, transformFunction: null }, filterSelectOptions: { classPropertyName: "filterSelectOptions", publicName: "filterSelectOptions", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange" }, providers: [provideNativeDateAdapter()], ngImport: i0, template: "@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]=\"
|
|
2352
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableHeaderFilterCellComponent, isStandalone: true, selector: "rtui-table-header-filter-cell", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, filterProperty: { classPropertyName: "filterProperty", publicName: "filterProperty", isSignal: true, isRequired: true, transformFunction: null }, filterType: { classPropertyName: "filterType", publicName: "filterType", isSignal: true, isRequired: true, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: true, transformFunction: null }, defaultFilterOperator: { classPropertyName: "defaultFilterOperator", publicName: "defaultFilterOperator", isSignal: true, isRequired: true, transformFunction: null }, filterOperators: { classPropertyName: "filterOperators", publicName: "filterOperators", isSignal: true, isRequired: false, transformFunction: null }, filterSelectOptions: { classPropertyName: "filterSelectOptions", publicName: "filterSelectOptions", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange" }, host: { classAttribute: "rtui-table-header-filter-cell" }, providers: [BreakpointService, provideNativeDateAdapter()], ngImport: i0, template: "@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\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n }\n @case (filterTypes.SELECT) {\n <button\n aria-label=\"Icon-button for clear filter\"\n mat-icon-button\n matTooltipPosition=\"left\"\n matTooltip=\"Clear filter\"\n [matTooltipDisabled]=\"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", styles: [":host{display:flex;width:100%;align-items:center;justify-content:flex-start;gap:var(--rt-spacing-8)}:host .table-header-cell-filter-input{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type:
|
|
2229
2353
|
// Material
|
|
2230
2354
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type:
|
|
2231
2355
|
// Directives
|
|
2232
2356
|
RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "component", type:
|
|
2233
2357
|
// Components
|
|
2234
|
-
RtuiClearButtonComponent, selector: "rtui-clear-button", inputs: ["isMobile", "isButtonShown", "tooltip", "tooltipPosition"], outputs: ["keydownAction", "clickAction"] }, { kind: "pipe", type:
|
|
2358
|
+
RtuiClearButtonComponent, selector: "rtui-clear-button", inputs: ["isMobile", "isButtonShown", "tooltip", "tooltipPosition"], outputs: ["keydownAction", "clickAction"] }, { kind: "pipe", type: ConcatClassesPipe, name: "concatClasses" }, { kind: "pipe", type:
|
|
2235
2359
|
// Pipes
|
|
2236
2360
|
TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2237
2361
|
}
|
|
2238
2362
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableHeaderFilterCellComponent, decorators: [{
|
|
2239
2363
|
type: Component,
|
|
2240
|
-
args: [{ selector: 'rtui-table-header-filter-cell', changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideNativeDateAdapter()], imports: [
|
|
2364
|
+
args: [{ selector: 'rtui-table-header-filter-cell', host: { class: BEM_BLOCK$i }, changeDetection: ChangeDetectionStrategy.OnPush, providers: [BreakpointService, provideNativeDateAdapter()], imports: [
|
|
2365
|
+
ConcatClassesPipe,
|
|
2241
2366
|
FormsModule,
|
|
2242
2367
|
// Material
|
|
2243
2368
|
MatIcon,
|
|
@@ -2262,7 +2387,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2262
2387
|
BlockDirective,
|
|
2263
2388
|
// Components
|
|
2264
2389
|
RtuiClearButtonComponent,
|
|
2265
|
-
], template: "@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]=\"
|
|
2390
|
+
], template: "@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\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n }\n @case (filterTypes.SELECT) {\n <button\n aria-label=\"Icon-button for clear filter\"\n mat-icon-button\n matTooltipPosition=\"left\"\n matTooltip=\"Clear filter\"\n [matTooltipDisabled]=\"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", styles: [":host{display:flex;width:100%;align-items:center;justify-content:flex-start;gap:var(--rt-spacing-8)}:host .table-header-cell-filter-input{width:100%}\n"] }]
|
|
2266
2391
|
}], propDecorators: { appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: true }] }], filterProperty: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterProperty", required: true }] }], filterType: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterType", required: true }] }], filterModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterModel", required: true }] }], defaultFilterOperator: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFilterOperator", required: true }] }], filterOperators: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOperators", required: false }] }], filterSelectOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterSelectOptions", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }] } });
|
|
2267
2392
|
|
|
2268
2393
|
class RtuiStopTableRowClickDirective {
|
|
@@ -2362,6 +2487,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2362
2487
|
selector: '[rtuiTableAdditionalRowActionsDirective]',
|
|
2363
2488
|
}]
|
|
2364
2489
|
}] });
|
|
2490
|
+
const BEM_BLOCK$h = 'rtui-table';
|
|
2365
2491
|
class RtuiTableComponent {
|
|
2366
2492
|
constructor() {
|
|
2367
2493
|
this.rowActions = viewChild('rowActions', /* @ts-ignore */
|
|
@@ -2370,11 +2496,22 @@ class RtuiTableComponent {
|
|
|
2370
2496
|
...(ngDevMode ? [{ debugName: "rowActionsHeaderPaddingHelper" }] : /* istanbul ignore next */ []));
|
|
2371
2497
|
this.rowActionsPaddingHelper = viewChild('rowActionsRowPaddingHelper', /* @ts-ignore */
|
|
2372
2498
|
...(ngDevMode ? [{ debugName: "rowActionsPaddingHelper" }] : /* istanbul ignore next */ []));
|
|
2499
|
+
this.#breakpoints = inject(BreakpointService);
|
|
2373
2500
|
this.#tableConfigService = inject(RtTableConfigService);
|
|
2374
2501
|
this.columnTypes = TABLE_COLUMN_TYPES_ENUM;
|
|
2375
2502
|
this.filterOperators = FILTER_OPERATOR_TYPE_ENUM;
|
|
2376
2503
|
/** Indicates is mobile view */
|
|
2377
|
-
|
|
2504
|
+
/**
|
|
2505
|
+
* Признак узкого экрана.
|
|
2506
|
+
*
|
|
2507
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
2508
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
2509
|
+
*/
|
|
2510
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
2511
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
2512
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
2513
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
2514
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
2378
2515
|
/** Indicates are table rows clickable */
|
|
2379
2516
|
this.isTableRowsClickable = input(false, { ...(ngDevMode ? { debugName: "isTableRowsClickable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
2380
2517
|
/** Key of ENTITY_TYPE for compare entities */
|
|
@@ -2444,6 +2581,7 @@ class RtuiTableComponent {
|
|
|
2444
2581
|
return;
|
|
2445
2582
|
};
|
|
2446
2583
|
}
|
|
2584
|
+
#breakpoints;
|
|
2447
2585
|
#tableConfigService;
|
|
2448
2586
|
ngAfterViewChecked() {
|
|
2449
2587
|
this.#setPaddingHelperWidth();
|
|
@@ -2496,12 +2634,13 @@ class RtuiTableComponent {
|
|
|
2496
2634
|
}
|
|
2497
2635
|
}
|
|
2498
2636
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2499
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableComponent, isStandalone: true, selector: "rtui-table", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isTableRowsClickable: { classPropertyName: "isTableRowsClickable", publicName: "isTableRowsClickable", isSignal: true, isRequired: false, transformFunction: null }, keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: false, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, currentSortModel: { classPropertyName: "currentSortModel", publicName: "currentSortModel", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, filterAppearance: { classPropertyName: "filterAppearance", publicName: "filterAppearance", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, isFiltersShown: { classPropertyName: "isFiltersShown", publicName: "isFiltersShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", sortChange: "sortChange", filterChange: "filterChange" }, providers: [
|
|
2637
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableComponent, isStandalone: true, selector: "rtui-table", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isTableRowsClickable: { classPropertyName: "isTableRowsClickable", publicName: "isTableRowsClickable", isSignal: true, isRequired: false, transformFunction: null }, keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: false, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, currentSortModel: { classPropertyName: "currentSortModel", publicName: "currentSortModel", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, filterAppearance: { classPropertyName: "filterAppearance", publicName: "filterAppearance", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, isFiltersShown: { classPropertyName: "isFiltersShown", publicName: "isFiltersShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", sortChange: "sortChange", filterChange: "filterChange" }, host: { classAttribute: "rtui-table" }, providers: [
|
|
2638
|
+
BreakpointService,
|
|
2500
2639
|
{
|
|
2501
2640
|
provide: RTUI_TABLE_COMPONENT_TOKEN,
|
|
2502
2641
|
useExisting: forwardRef(() => RtuiTableComponent),
|
|
2503
2642
|
},
|
|
2504
|
-
], queries: [{ propertyName: "customCellsTpl", first: true, predicate: RtuiCustomTableCellsDirective, descendants: true, isSignal: true }, { propertyName: "rowActionsTpl", first: true, predicate: RtuiTableRowActionsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "additionalRowActionsTpl", first: true, predicate: RtuiTableAdditionalRowActionsDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "rowActions", first: true, predicate: ["rowActions"], descendants: true, isSignal: true }, { propertyName: "rowActionsHeaderPaddingHelper", first: true, predicate: ["rowActionsHeaderPaddingHelper"], descendants: true, isSignal: true }, { propertyName: "rowActionsPaddingHelper", first: true, predicate: ["rowActionsRowPaddingHelper"], descendants: true, isSignal: true }], ngImport: i0, template: "<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\"
|
|
2643
|
+
], queries: [{ propertyName: "customCellsTpl", first: true, predicate: RtuiCustomTableCellsDirective, descendants: true, isSignal: true }, { propertyName: "rowActionsTpl", first: true, predicate: RtuiTableRowActionsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "additionalRowActionsTpl", first: true, predicate: RtuiTableAdditionalRowActionsDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "rowActions", first: true, predicate: ["rowActions"], descendants: true, isSignal: true }, { propertyName: "rowActionsHeaderPaddingHelper", first: true, predicate: ["rowActionsHeaderPaddingHelper"], descendants: true, isSignal: true }, { propertyName: "rowActionsPaddingHelper", first: true, predicate: ["rowActionsRowPaddingHelper"], descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [":host{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
|
|
2505
2644
|
// material
|
|
2506
2645
|
MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type:
|
|
2507
2646
|
// directives
|
|
@@ -2511,7 +2650,7 @@ class RtuiTableComponent {
|
|
|
2511
2650
|
}
|
|
2512
2651
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableComponent, decorators: [{
|
|
2513
2652
|
type: Component,
|
|
2514
|
-
args: [{ selector: 'rtui-table', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
2653
|
+
args: [{ selector: 'rtui-table', host: { class: BEM_BLOCK$h }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
2515
2654
|
NgTemplateOutlet,
|
|
2516
2655
|
// material
|
|
2517
2656
|
MatIconButton,
|
|
@@ -2531,26 +2670,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2531
2670
|
TableBaseCellComponent,
|
|
2532
2671
|
RtuiTableHeaderFilterCellComponent,
|
|
2533
2672
|
], providers: [
|
|
2673
|
+
BreakpointService,
|
|
2534
2674
|
{
|
|
2535
2675
|
provide: RTUI_TABLE_COMPONENT_TOKEN,
|
|
2536
2676
|
useExisting: forwardRef(() => RtuiTableComponent),
|
|
2537
2677
|
},
|
|
2538
|
-
], template: "<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\"
|
|
2678
|
+
], template: "<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", styles: [":host{width:100%;height:100%}\n"] }]
|
|
2539
2679
|
}], propDecorators: { rowActions: [{ type: i0.ViewChild, args: ['rowActions', { isSignal: true }] }], rowActionsHeaderPaddingHelper: [{ type: i0.ViewChild, args: ['rowActionsHeaderPaddingHelper', { isSignal: true }] }], rowActionsPaddingHelper: [{ type: i0.ViewChild, args: ['rowActionsRowPaddingHelper', { isSignal: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], isTableRowsClickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isTableRowsClickable", required: false }] }], keyExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyExp", required: false }] }], entities: [{ type: i0.Input, args: [{ isSignal: true, alias: "entities", required: true }] }], currentSortModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSortModel", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: true }] }], filterAppearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterAppearance", required: false }] }], filterModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterModel", required: false }] }], isFiltersShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFiltersShown", required: false }] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowDoubleClick: [{ type: i0.Output, args: ["rowDoubleClick"] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }], customCellsTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiCustomTableCellsDirective), { isSignal: true }] }], rowActionsTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiTableRowActionsDirective), { ...{
|
|
2540
2680
|
read: TemplateRef,
|
|
2541
2681
|
}, isSignal: true }] }], additionalRowActionsTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiTableAdditionalRowActionsDirective), { ...{
|
|
2542
2682
|
read: TemplateRef,
|
|
2543
2683
|
}, isSignal: true }] }] } });
|
|
2544
2684
|
|
|
2685
|
+
const BEM_BLOCK$g = 'rtui-dynamic-selector-list-actions';
|
|
2545
2686
|
class RtuiDynamicSelectorListActionsComponent {
|
|
2546
2687
|
constructor() {
|
|
2547
|
-
this
|
|
2688
|
+
this.#breakpoints = inject(BreakpointService);
|
|
2689
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
2690
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
2691
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
2692
|
+
/**
|
|
2693
|
+
* Признак узкого экрана.
|
|
2694
|
+
*
|
|
2695
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
2696
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
2697
|
+
*/
|
|
2698
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
2548
2699
|
this.isResetButtonDisabled = input.required({ ...(ngDevMode ? { debugName: "isResetButtonDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
2549
2700
|
this.isClearButtonDisabled = input(false, { ...(ngDevMode ? { debugName: "isClearButtonDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
2550
2701
|
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
2551
2702
|
this.resetAction = output();
|
|
2552
2703
|
this.clearAction = output();
|
|
2553
2704
|
}
|
|
2705
|
+
#breakpoints;
|
|
2554
2706
|
onReset() {
|
|
2555
2707
|
this.resetAction.emit();
|
|
2556
2708
|
}
|
|
@@ -2558,17 +2710,26 @@ class RtuiDynamicSelectorListActionsComponent {
|
|
|
2558
2710
|
this.clearAction.emit();
|
|
2559
2711
|
}
|
|
2560
2712
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorListActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2561
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiDynamicSelectorListActionsComponent, isStandalone: true, selector: "rtui-dynamic-selector-list-actions", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired:
|
|
2713
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiDynamicSelectorListActionsComponent, isStandalone: true, selector: "rtui-dynamic-selector-list-actions", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, isResetButtonDisabled: { classPropertyName: "isResetButtonDisabled", publicName: "isResetButtonDisabled", isSignal: true, isRequired: true, transformFunction: null }, isClearButtonDisabled: { classPropertyName: "isClearButtonDisabled", publicName: "isClearButtonDisabled", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resetAction: "resetAction", clearAction: "clearAction" }, host: { classAttribute: "rtui-dynamic-selector-list-actions" }, providers: [BreakpointService], ngImport: i0, template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-dynamic-selector-list-actions-host-padding-right: .25rem;--rt-dynamic-selector-list-actions-control-padding: 0 .25rem 0 .25rem;--rt-dynamic-selector-list-actions-control-border-right: none;--rt-dynamic-selector-list-actions-control-last-child-padding: 0 0 0 .25rem;--rt-dynamic-selector-list-actions-control-last-child-border-right: none;--rt-dynamic-selector-list-actions-item-icon-size: 1.125rem;--rt-dynamic-selector-list-actions-item-active-color: var(--rt-text-accent-danger);display:flex;align-items:center;padding-right:var(--rt-dynamic-selector-list-actions-host-padding-right);margin-left:auto}:host .rtui-dynamic-selector-list-actions{display:flex;align-items:center;padding-right:var(--rt-dynamic-selector-list-actions-padding-right);margin-left:auto}:host .rtui-dynamic-selector-list-actions__control{padding:var(--rt-dynamic-selector-list-actions-control-padding);border-right:var(--rt-dynamic-selector-list-actions-control-border-right)}:host .rtui-dynamic-selector-list-actions__control:last-child{padding:var(--rt-dynamic-selector-item-control-last-child-padding);border-right:var(--rt-dynamic-selector-item-control-last-child-border-right)}:host .rtui-dynamic-selector-list-actions__item--active{color:var(--rt-dynamic-selector-list-actions-item-active-color)}:host .rtui-dynamic-selector-list-actions__item-icon{width:var(--rt-dynamic-selector-list-actions-item-icon-size);height:var(--rt-dynamic-selector-list-actions-item-icon-size);font-size:var(--rt-dynamic-selector-list-actions-item-icon-size)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2562
2714
|
}
|
|
2563
2715
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorListActionsComponent, decorators: [{
|
|
2564
2716
|
type: Component,
|
|
2565
|
-
args: [{ selector: 'rtui-dynamic-selector-list-actions', imports: [MatIcon, MatButton, RtIconOutlinedDirective, BlockDirective, ElemDirective, ModDirective, MatIconButton, MatTooltip], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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]=\"
|
|
2566
|
-
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
2717
|
+
args: [{ selector: 'rtui-dynamic-selector-list-actions', host: { class: BEM_BLOCK$g }, imports: [MatIcon, MatButton, RtIconOutlinedDirective, BlockDirective, ElemDirective, ModDirective, MatIconButton, MatTooltip], providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-dynamic-selector-list-actions-host-padding-right: .25rem;--rt-dynamic-selector-list-actions-control-padding: 0 .25rem 0 .25rem;--rt-dynamic-selector-list-actions-control-border-right: none;--rt-dynamic-selector-list-actions-control-last-child-padding: 0 0 0 .25rem;--rt-dynamic-selector-list-actions-control-last-child-border-right: none;--rt-dynamic-selector-list-actions-item-icon-size: 1.125rem;--rt-dynamic-selector-list-actions-item-active-color: var(--rt-text-accent-danger);display:flex;align-items:center;padding-right:var(--rt-dynamic-selector-list-actions-host-padding-right);margin-left:auto}:host .rtui-dynamic-selector-list-actions{display:flex;align-items:center;padding-right:var(--rt-dynamic-selector-list-actions-padding-right);margin-left:auto}:host .rtui-dynamic-selector-list-actions__control{padding:var(--rt-dynamic-selector-list-actions-control-padding);border-right:var(--rt-dynamic-selector-list-actions-control-border-right)}:host .rtui-dynamic-selector-list-actions__control:last-child{padding:var(--rt-dynamic-selector-item-control-last-child-padding);border-right:var(--rt-dynamic-selector-item-control-last-child-border-right)}:host .rtui-dynamic-selector-list-actions__item--active{color:var(--rt-dynamic-selector-list-actions-item-active-color)}:host .rtui-dynamic-selector-list-actions__item-icon{width:var(--rt-dynamic-selector-list-actions-item-icon-size);height:var(--rt-dynamic-selector-list-actions-item-icon-size);font-size:var(--rt-dynamic-selector-list-actions-item-icon-size)}\n"] }]
|
|
2718
|
+
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], isResetButtonDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isResetButtonDisabled", required: true }] }], isClearButtonDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isClearButtonDisabled", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], resetAction: [{ type: i0.Output, args: ["resetAction"] }], clearAction: [{ type: i0.Output, args: ["clearAction"] }] } });
|
|
2567
2719
|
|
|
2568
2720
|
class RtuiDynamicSelectorsDirective {
|
|
2569
2721
|
constructor() {
|
|
2570
|
-
|
|
2571
|
-
|
|
2722
|
+
this.#breakpoints = inject(BreakpointService);
|
|
2723
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
2724
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
2725
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
2726
|
+
/**
|
|
2727
|
+
* Признак узкого экрана.
|
|
2728
|
+
*
|
|
2729
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
2730
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
2731
|
+
*/
|
|
2732
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
2572
2733
|
/** Selections control button title */
|
|
2573
2734
|
this.buttonTitle = input('Add', { ...(ngDevMode ? { debugName: "buttonTitle" } : /* istanbul ignore next */ {}), transform: transformStringInput });
|
|
2574
2735
|
/** Indicates if only one option can be chosen */
|
|
@@ -2592,12 +2753,13 @@ class RtuiDynamicSelectorsDirective {
|
|
|
2592
2753
|
this.appearance = input('fill', /* @ts-ignore */
|
|
2593
2754
|
...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
2594
2755
|
}
|
|
2756
|
+
#breakpoints;
|
|
2595
2757
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2596
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: RtuiDynamicSelectorsDirective, isStandalone: true, inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired:
|
|
2758
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: RtuiDynamicSelectorsDirective, isStandalone: true, inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, buttonTitle: { classPropertyName: "buttonTitle", publicName: "buttonTitle", isSignal: true, isRequired: false, transformFunction: null }, isSingleSelection: { classPropertyName: "isSingleSelection", publicName: "isSingleSelection", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, useNameBreaking: { classPropertyName: "useNameBreaking", publicName: "useNameBreaking", isSignal: true, isRequired: false, transformFunction: null }, useTitleCase: { classPropertyName: "useTitleCase", publicName: "useTitleCase", isSignal: true, isRequired: false, transformFunction: null }, isPlaceholderIconOutlined: { classPropertyName: "isPlaceholderIconOutlined", publicName: "isPlaceholderIconOutlined", isSignal: true, isRequired: false, transformFunction: null }, isDeleteButtonShown: { classPropertyName: "isDeleteButtonShown", publicName: "isDeleteButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isListDraggable: { classPropertyName: "isListDraggable", publicName: "isListDraggable", isSignal: true, isRequired: false, transformFunction: null }, placeholderIcon: { classPropertyName: "placeholderIcon", publicName: "placeholderIcon", isSignal: true, isRequired: false, transformFunction: null }, placeholderDescription: { classPropertyName: "placeholderDescription", publicName: "placeholderDescription", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
2597
2759
|
}
|
|
2598
2760
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorsDirective, decorators: [{
|
|
2599
2761
|
type: Directive
|
|
2600
|
-
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
2762
|
+
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], buttonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonTitle", required: false }] }], isSingleSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSingleSelection", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], useNameBreaking: [{ type: i0.Input, args: [{ isSignal: true, alias: "useNameBreaking", required: false }] }], useTitleCase: [{ type: i0.Input, args: [{ isSignal: true, alias: "useTitleCase", required: false }] }], isPlaceholderIconOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlaceholderIconOutlined", required: false }] }], isDeleteButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDeleteButtonShown", required: false }] }], isListDraggable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isListDraggable", required: false }] }], placeholderIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholderIcon", required: false }] }], placeholderDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholderDescription", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }] } });
|
|
2601
2763
|
|
|
2602
2764
|
var TOGGLE_SIZE_TYPE_ENUM;
|
|
2603
2765
|
(function (TOGGLE_SIZE_TYPE_ENUM) {
|
|
@@ -2605,6 +2767,7 @@ var TOGGLE_SIZE_TYPE_ENUM;
|
|
|
2605
2767
|
TOGGLE_SIZE_TYPE_ENUM["MD"] = "md";
|
|
2606
2768
|
})(TOGGLE_SIZE_TYPE_ENUM || (TOGGLE_SIZE_TYPE_ENUM = {}));
|
|
2607
2769
|
|
|
2770
|
+
const BEM_BLOCK$f = 'rtui-toggle';
|
|
2608
2771
|
class RtuiToggleComponent {
|
|
2609
2772
|
constructor() {
|
|
2610
2773
|
this.#injector = inject(Injector);
|
|
@@ -2668,7 +2831,7 @@ class RtuiToggleComponent {
|
|
|
2668
2831
|
this.#cdr.markForCheck();
|
|
2669
2832
|
}
|
|
2670
2833
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2671
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiToggleComponent, isStandalone: true, selector: "rtui-toggle", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, tooltipDisabled: { classPropertyName: "tooltipDisabled", publicName: "tooltipDisabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
2834
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiToggleComponent, isStandalone: true, selector: "rtui-toggle", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, tooltipDisabled: { classPropertyName: "tooltipDisabled", publicName: "tooltipDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "rtui-toggle" }, providers: [
|
|
2672
2835
|
{
|
|
2673
2836
|
provide: NG_VALUE_ACCESSOR,
|
|
2674
2837
|
useExisting: forwardRef(() => RtuiToggleComponent),
|
|
@@ -2681,7 +2844,7 @@ class RtuiToggleComponent {
|
|
|
2681
2844
|
}
|
|
2682
2845
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiToggleComponent, decorators: [{
|
|
2683
2846
|
type: Component,
|
|
2684
|
-
args: [{ selector: 'rtui-toggle', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
2847
|
+
args: [{ selector: 'rtui-toggle', host: { class: BEM_BLOCK$f }, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
2685
2848
|
{
|
|
2686
2849
|
provide: NG_VALUE_ACCESSOR,
|
|
2687
2850
|
useExisting: forwardRef(() => RtuiToggleComponent),
|
|
@@ -2698,14 +2861,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2698
2861
|
], template: "<label\n rtBlock=\"rtui-toggle-container\"\n [rtMod]=\"{ disabled: isDisabled() }\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [matTooltip]=\"tooltip()\"\n [matTooltipDisabled]=\"!tooltip() || isMobile() || tooltipDisabled()\">\n <div rtBlock=\"rtui-toggle\" rtMod=\"{{ size() }}\">\n <input type=\"checkbox\" rtElem=\"check\" [formControl]=\"formControl\" />\n\n <b rtElem=\"switch\"></b>\n\n <b rtElem=\"track\"></b>\n </div>\n\n @if (label()) {\n <div rtElem=\"label\" [rtMod]=\"{ active: formControl.value }\">{{ label() }}</div>\n }\n</label>\n", styles: ["@charset \"UTF-8\";:host{--rt-toggle-container-display: flex;--rt-toggle-container-align-items: center;--rt-toggle-container-justify-content: space-between;--rt-toggle-container-gap: 1rem;--rt-toggle-container-disabled-opacity: .6;--rt-toggle-toggle-border-radius: 6.25rem;--rt-toggle-toggle-background-color: var(--rt-bg-base-subtle);--rt-toggle-toggle-box-shadow: inset 0 0 .125rem .0625rem rgba(0, 0, 0, .05);--rt-toggle-toggle-check-box-shadow: inset 0 0 0 1.25rem var(--rt-control-checked);--rt-toggle-toggle-switch-border-radius: 2.25rem;--rt-toggle-toggle-switch-background-color: var(--rt-control-thumb);--rt-toggle-toggle-switch-box-shadow: 0 .0625rem .125rem rgba(0, 0, 0, .2);--rt-toggle-toggle-track-background-color: var(--rt-control-track);--rt-toggle-toggle-track-border-radius: 2.5rem;--rt-toggle-toggle-track-border: .0625rem solid var(--rt-border-neutral-medium);--rt-toggle-label-color: var(--rt-text-base-secondary);--rt-toggle-label-font-size: .875rem;--rt-toggle-label-active-color: var(--rt-text-base-strong);--rt-toggle-label-hover-color: var(--rt-text-base-strong);--rt-toggle-label-hover-cursor: pointer}:host .rtui-toggle-container{display:var(--rt-toggle-container-display);align-items:var(--rt-toggle-container-align-items);justify-content:var(--rt-toggle-container-justify-content);gap:var(--rt-toggle-container-gap)}:host .rtui-toggle-container--disabled{opacity:var(--rt-toggle-container-disabled-opacity)}:host .rtui-toggle-container--disabled .rtui-toggle,:host .rtui-toggle-container--disabled .rtui-toggle-container__label{pointer-events:none}:host .rtui-toggle-container__label{color:var(--rt-toggle-label-color);font-size:var(--rt-toggle-label-font-size)}:host .rtui-toggle-container__label:hover{color:var(--rt-toggle-label-hover-color);cursor:pointer}:host .rtui-toggle-container__label--active{color:var(--rt-toggle-label-active-color)}:host .rtui-toggle-container .rtui-toggle{position:relative;overflow:hidden;width:3.125rem;min-width:3.125rem;height:1.875rem;border-radius:var(--rt-toggle-toggle-border-radius);background-color:var(--rt-toggle-toggle-background-color);box-shadow:var(--rt-toggle-toggle-box-shadow);cursor:pointer}:host .rtui-toggle-container .rtui-toggle b{display:block}:host .rtui-toggle-container .rtui-toggle__check{display:none}:host .rtui-toggle-container .rtui-toggle__check:checked~.rtui-toggle__track{box-shadow:var(--rt-toggle-toggle-check-box-shadow)}:host .rtui-toggle-container .rtui-toggle__check:checked~.rtui-toggle__switch{right:.125rem;left:1.375rem;transition:.35s cubic-bezier(.785,.135,.15,.86);transition-delay:.05s,0s;transition-property:left,right}:host .rtui-toggle-container .rtui-toggle__switch{position:absolute;z-index:1;border-radius:var(--rt-toggle-toggle-switch-border-radius);background-color:var(--rt-toggle-toggle-switch-background-color);box-shadow:var(--rt-toggle-toggle-switch-box-shadow);inset:.125rem 1.375rem .125rem .125rem;transition:.35s cubic-bezier(.785,.135,.15,.86);transition-delay:0s,.05s;transition-property:left,right}:host .rtui-toggle-container .rtui-toggle__track{position:absolute;border:var(--rt-toggle-toggle-track-border);border-radius:var(--rt-toggle-toggle-track-border-radius);background-color:var(--rt-toggle-toggle-track-background-color);inset:0;transition:.35s cubic-bezier(.785,.135,.15,.86)}:host .rtui-toggle-container .rtui-toggle--md{width:3rem;min-width:3rem;height:1.5rem}:host .rtui-toggle-container .rtui-toggle--md .rtui-toggle__switch{right:1.625rem}:host .rtui-toggle-container .rtui-toggle--md .rtui-toggle__check:checked~.rtui-toggle__switch{right:.125rem;left:1.625rem}:host .rtui-toggle-container .rtui-toggle--sm{width:1.5rem;min-width:1.5rem;height:.875rem}:host .rtui-toggle-container .rtui-toggle--sm .rtui-toggle__switch{right:.75rem}:host .rtui-toggle-container .rtui-toggle--sm .rtui-toggle__check:checked~.rtui-toggle__switch{right:.125rem;left:.75rem}\n"] }]
|
|
2699
2862
|
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPosition", required: false }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }], tooltipDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipDisabled", required: false }] }] } });
|
|
2700
2863
|
|
|
2864
|
+
const BEM_BLOCK$e = 'rtui-multi-selector-popup';
|
|
2701
2865
|
class RtuiMultiSelectorPopupComponent {
|
|
2702
2866
|
constructor() {
|
|
2867
|
+
this.#breakpoints = inject(BreakpointService);
|
|
2703
2868
|
this.#destroyRef = inject(DestroyRef);
|
|
2704
2869
|
this.#injector = inject(Injector);
|
|
2870
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
2871
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
2872
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
2705
2873
|
this.#deviceService = inject(DeviceDetectorService);
|
|
2706
2874
|
this.oSTypes = OSTypes;
|
|
2707
|
-
/**
|
|
2708
|
-
|
|
2875
|
+
/**
|
|
2876
|
+
* Признак узкого экрана.
|
|
2877
|
+
*
|
|
2878
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
2879
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
2880
|
+
*/
|
|
2881
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
2709
2882
|
this.entitiesToSelect = input.required({ ...(ngDevMode ? { debugName: "entitiesToSelect" } : /* istanbul ignore next */ {}), transform: (value) => transformArrayInput(value) });
|
|
2710
2883
|
/** Material elements appearance */
|
|
2711
2884
|
this.appearance = input.required(/* @ts-ignore */
|
|
@@ -2792,6 +2965,7 @@ class RtuiMultiSelectorPopupComponent {
|
|
|
2792
2965
|
}, /* @ts-ignore */
|
|
2793
2966
|
...(ngDevMode ? [{ debugName: "lastSeparatedKey" }] : /* istanbul ignore next */ []));
|
|
2794
2967
|
}
|
|
2968
|
+
#breakpoints;
|
|
2795
2969
|
#destroyRef;
|
|
2796
2970
|
#injector;
|
|
2797
2971
|
#deviceService;
|
|
@@ -2929,7 +3103,7 @@ class RtuiMultiSelectorPopupComponent {
|
|
|
2929
3103
|
this.scrollAction.emit();
|
|
2930
3104
|
}
|
|
2931
3105
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiMultiSelectorPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2932
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiMultiSelectorPopupComponent, isStandalone: true, selector: "rtui-multi-selector-popup", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: true, transformFunction: null }, entitiesToSelect: { classPropertyName: "entitiesToSelect", publicName: "entitiesToSelect", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: true, transformFunction: null }, displayExp: { classPropertyName: "displayExp", publicName: "displayExp", isSignal: true, isRequired: true, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, navigateButtonTitle: { classPropertyName: "navigateButtonTitle", publicName: "navigateButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, navigateLink: { classPropertyName: "navigateLink", publicName: "navigateLink", isSignal: true, isRequired: false, transformFunction: null }, isSingleSelection: { classPropertyName: "isSingleSelection", publicName: "isSingleSelection", isSignal: true, isRequired: false, transformFunction: null }, isMultiToggleShown: { classPropertyName: "isMultiToggleShown", publicName: "isMultiToggleShown", isSignal: true, isRequired: false, transformFunction: null }, isSelectAllButtonShown: { classPropertyName: "isSelectAllButtonShown", publicName: "isSelectAllButtonShown", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, useNameBreaking: { classPropertyName: "useNameBreaking", publicName: "useNameBreaking", isSignal: true, isRequired: false, transformFunction: null }, isLazyLoad: { classPropertyName: "isLazyLoad", publicName: "isLazyLoad", isSignal: true, isRequired: false, transformFunction: null }, isLocalSearch: { classPropertyName: "isLocalSearch", publicName: "isLocalSearch", isSignal: true, isRequired: false, transformFunction: null }, pinnedKeys: { classPropertyName: "pinnedKeys", publicName: "pinnedKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { submitAction: "submitAction", closeAction: "closeAction", searchAction: "searchAction", scrollAction: "scrollAction", temporarySelectAction: "temporarySelectAction" }, providers: [DeviceDetectorService], viewQueries: [{ propertyName: "searchInputRef", first: true, predicate: ["searchInputTpl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n rtBlock=\"rtui-multi-selector-header\"\n [rtMod]=\"{ simple: isSingleSelection() || !filteredEntities().length || filteredEntities().length <= 1 }\">\n <mat-form-field subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n <input #searchInputTpl matInput placeholder=\"Search...\" type=\"text\" [formControl]=\"searchControl\" />\n\n <mat-icon matPrefix rtIconOutlined>search</mat-icon>\n\n <rtui-clear-button matSuffix [isButtonShown]=\"!!searchControl.value\" (clickAction)=\"onClearSearch()\" />\n </mat-form-field>\n\n @if (!isSingleSelection() && filteredEntities().length > 1 && !loading()) {\n <div rtElem=\"controls\">\n @if (isMultiToggleShown()) {\n <div rtElem=\"controls-item\" rtMod=\"first\">\n <rtui-toggle label=\"Multi selection\" [ngModel]=\"this.isMultiSelection()\" (ngModelChange)=\"toggleMultiSelection()\" />\n\n @if (!isMobile()) {\n <mat-icon\n rtElem=\"controls-item-icon\"\n matTooltipPosition=\"above\"\n [rtIconOutlined]=\"true\"\n [matTooltip]=\"\n isMacOS() ? 'Also for multi selection use COMMAND button' : 'Also for multi selection use CTRL button'\n \">\n info\n </mat-icon>\n }\n\n @if (isMobile()) {\n <div rtElem=\"controls-item-info\">\n {{ isMacOS() ? 'Also for multi selection use COMMAND button' : 'Also for multi selection use CTRL button' }}\n </div>\n }\n </div>\n }\n\n @if (isSelectAllButtonShown()) {\n <div rtElem=\"controls-item\" rtMod=\"last\">\n <mat-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"!isAllSelected() && selectionControl.value.length > 0\"\n (change)=\"toggleSelectAll($event.checked)\">\n <div rtElem=\"controls-item-title\">Select all</div>\n </mat-checkbox>\n </div>\n }\n </div>\n }\n</div>\n\n@if ((filteredEntities()?.length || selectedEntities().length) && !loading()) {\n <div rtBlock=\"rtui-multi-selector-options\" rtScrollDirective [active]=\"!!isLazyLoad() && !fetching()\" (scrollAction)=\"scroll()\">\n @if (searchControl.value && selectedEntities()) {\n @for (entity of selectedEntities(); track entity[displayExp()]; let i = $index) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (change)=\"onToggleSingleItem(entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-radio-button>\n } @else {\n <mat-checkbox\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (click)=\"onToggleItem($event, entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-checkbox>\n }\n }\n }\n\n @if (filteredEntities()) {\n @for (entity of filteredEntities(); track entity[displayExp()]) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [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\" rtBlock=\"c-button\" (click)=\"onClose()\">Cancel</button>\n\n <button\n mat-flat-button\n type=\"button\"\n rtBlock=\"c-button\"\n [disabled]=\"!selectionControl.value?.length || loading()\"\n (click)=\"onSubmit()\">\n SUBMIT\n </button>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--rt-multi-selector-host-width: 20rem;--rt-multi-selector-host-height: 30rem;--rt-multi-selector-host-padding: 1rem 0 1rem 1rem;--rt-multi-selector-host-box-shadow: 0 .5rem 1rem 0 var(--rt-shadow-color);--rt-multi-selector-host-border-radius: .375rem;--rt-multi-selector-host-background-color: var(--rt-bg-base-base);--rt-multi-selector-header-padding: 0 1rem 0 0;--rt-multi-selector-header-simple-padding: 0 1rem 1rem 0;--rt-multi-selector-header-controls-item-icon-margin-left: .5rem;--rt-multi-selector-header-controls-item-icon-color: var(--rt-text-base-disabled);--rt-multi-selector-header-controls-item-info-margin-left: .5rem;--rt-multi-selector-header-controls-item-info-font-size: .875rem;--rt-multi-selector-header-controls-item-info-color: var(--rt-text-base-secondary);--rt-multi-selector-header-controls-item-first-padding: 1rem 0 0 .5rem;--rt-multi-selector-header-controls-item-last-padding: 1rem 0 0 0;--rt-multi-selector-header-controls-item-last-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-item-label-hover-color: var(--rt-text-base-secondary);--rt-multi-selector-options-item-separated-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-options-item-title-max-width: 15rem;--rt-multi-selector-placeholder-gap: 1rem;--rt-multi-selector-placeholder-padding-right: 1rem;--rt-multi-selector-placeholder-icon-size: 3rem;--rt-multi-selector-placeholder-icon-color: var(--rt-text-base-secondary);--rt-multi-selector-placeholder-title-font-size: 1.5rem;--rt-multi-selector-placeholder-title-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-padding: 1rem 1.5rem 0 .5rem;--rt-multi-selector-footer-gap: .5rem;--rt-multi-selector-footer-nav-action-font-size: .875rem;--rt-multi-selector-footer-nav-action-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-nav-action-hover-color: var(--rt-text-base-strong);display:flex;width:var(--rt-multi-selector-host-width);height:var(--rt-multi-selector-host-height);flex-direction:column;padding:var(--rt-multi-selector-host-padding);border-radius:var(--rt-multi-selector-host-border-radius);background-color:var(--rt-multi-selector-host-background-color);box-shadow:var(--rt-multi-selector-host-box-shadow)}:host::ng-deep mat-radio-button .mdc-form-field .mdc-label{cursor:pointer}:host::ng-deep mat-radio-button .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host::ng-deep mat-checkbox{width:fit-content}:host::ng-deep mat-checkbox .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host .rtui-multi-selector-header{display:flex;flex-direction:column;padding:var(--rt-multi-selector-header-padding)}:host .rtui-multi-selector-header--simple{padding:var(--rt-multi-selector-header-simple-padding)}:host .rtui-multi-selector-header__controls{display:flex;flex-direction:column;align-items:flex-start}:host .rtui-multi-selector-header__controls-item--first{display:flex;flex-direction:row;padding:var(--rt-multi-selector-header-controls-item-first-padding)}:host .rtui-multi-selector-header__controls-item--last{width:100%;padding:var(--rt-multi-selector-header-controls-item-last-padding);border-bottom:var(--rt-multi-selector-header-controls-item-last-border-bottom)}:host .rtui-multi-selector-header__controls-item-icon{margin-left:var(--rt-multi-selector-header-controls-item-icon-margin-left);color:var(--rt-multi-selector-header-controls-item-icon-color)}:host .rtui-multi-selector-header__controls-item-info{margin-left:var(--rt-multi-selector-header-controls-item-info-margin-left);color:var(--rt-multi-selector-header-controls-item-info-color);font-size:var(--rt-multi-selector-header-controls-item-info-font-size)}:host .rtui-multi-selector-options{display:flex;width:100%;height:100%;flex:1 1 100%;flex-direction:column;overflow-y:auto}:host .rtui-multi-selector-options__item-title{overflow:hidden;width:100%;max-width:var(--rt-multi-selector-options-item-title-max-width);text-overflow:ellipsis;white-space:nowrap}:host .rtui-multi-selector-options__item--separated{border-bottom:var(--rt-multi-selector-options-item-separated-border-bottom)}:host .rtui-multi-selector-options__loader{display:flex;align-items:center;justify-content:center}:host .rtui-multi-selector-placeholder{display:flex;flex:1 1 100%;flex-direction:column;align-items:center;justify-content:center;padding-right:var(--rt-multi-selector-placeholder-padding-right);gap:var(--rt-multi-selector-placeholder-gap);overflow-y:auto}:host .rtui-multi-selector-placeholder__icon{width:var(--rt-multi-selector-placeholder-icon-size);height:var(--rt-multi-selector-placeholder-icon-size);color:var(--rt-multi-selector-placeholder-icon-color);font-size:var(--rt-multi-selector-placeholder-icon-size)}:host .rtui-multi-selector-placeholder__title{color:var(--rt-multi-selector-placeholder-title-color);font-size:var(--rt-multi-selector-placeholder-title-font-size)}:host .rtui-multi-selector-footer{display:flex;align-items:center;justify-content:flex-end;padding:var(--rt-multi-selector-footer-padding);gap:var(--rt-multi-selector-footer-gap)}:host .rtui-multi-selector-footer--full{justify-content:space-between}:host .rtui-multi-selector-footer__nav-action{color:var(--rt-multi-selector-footer-nav-action-color);font-size:var(--rt-multi-selector-footer-nav-action-font-size);text-decoration:none}:host .rtui-multi-selector-footer__nav-action:hover{color:var(--rt-multi-selector-footer-nav-action-hover-color)}:host .rtui-multi-selector-footer__base-actions{display:flex;gap:var(--rt-multi-selector-footer-gap)}\n"], dependencies: [{ kind: "component", type:
|
|
3106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiMultiSelectorPopupComponent, isStandalone: true, selector: "rtui-multi-selector-popup", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, entitiesToSelect: { classPropertyName: "entitiesToSelect", publicName: "entitiesToSelect", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: true, transformFunction: null }, displayExp: { classPropertyName: "displayExp", publicName: "displayExp", isSignal: true, isRequired: true, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, navigateButtonTitle: { classPropertyName: "navigateButtonTitle", publicName: "navigateButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, navigateLink: { classPropertyName: "navigateLink", publicName: "navigateLink", isSignal: true, isRequired: false, transformFunction: null }, isSingleSelection: { classPropertyName: "isSingleSelection", publicName: "isSingleSelection", isSignal: true, isRequired: false, transformFunction: null }, isMultiToggleShown: { classPropertyName: "isMultiToggleShown", publicName: "isMultiToggleShown", isSignal: true, isRequired: false, transformFunction: null }, isSelectAllButtonShown: { classPropertyName: "isSelectAllButtonShown", publicName: "isSelectAllButtonShown", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, useNameBreaking: { classPropertyName: "useNameBreaking", publicName: "useNameBreaking", isSignal: true, isRequired: false, transformFunction: null }, isLazyLoad: { classPropertyName: "isLazyLoad", publicName: "isLazyLoad", isSignal: true, isRequired: false, transformFunction: null }, isLocalSearch: { classPropertyName: "isLocalSearch", publicName: "isLocalSearch", isSignal: true, isRequired: false, transformFunction: null }, pinnedKeys: { classPropertyName: "pinnedKeys", publicName: "pinnedKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { submitAction: "submitAction", closeAction: "closeAction", searchAction: "searchAction", scrollAction: "scrollAction", temporarySelectAction: "temporarySelectAction" }, host: { classAttribute: "rtui-multi-selector-popup" }, providers: [BreakpointService, DeviceDetectorService], viewQueries: [{ propertyName: "searchInputRef", first: true, predicate: ["searchInputTpl"], descendants: true, isSignal: true }], ngImport: i0, template: "<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 rtElem=\"controls-item-title\">Select all</div>\n </mat-checkbox>\n </div>\n }\n </div>\n }\n</div>\n\n@if ((filteredEntities()?.length || selectedEntities().length) && !loading()) {\n <div rtBlock=\"rtui-multi-selector-options\" rtScrollDirective [active]=\"!!isLazyLoad() && !fetching()\" (scrollAction)=\"scroll()\">\n @if (searchControl.value && selectedEntities()) {\n @for (entity of selectedEntities(); track entity[displayExp()]; let i = $index) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (change)=\"onToggleSingleItem(entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-radio-button>\n } @else {\n <mat-checkbox\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (click)=\"onToggleItem($event, entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-checkbox>\n }\n }\n }\n\n @if (filteredEntities()) {\n @for (entity of filteredEntities(); track entity[displayExp()]) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [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", styles: ["@charset \"UTF-8\";:host{--rt-multi-selector-host-width: 20rem;--rt-multi-selector-host-height: 30rem;--rt-multi-selector-host-padding: 1rem 0 1rem 1rem;--rt-multi-selector-host-box-shadow: 0 .5rem 1rem 0 var(--rt-shadow-color);--rt-multi-selector-host-border-radius: .375rem;--rt-multi-selector-host-background-color: var(--rt-bg-base-base);--rt-multi-selector-header-padding: 0 1rem 0 0;--rt-multi-selector-header-simple-padding: 0 1rem 1rem 0;--rt-multi-selector-header-controls-item-icon-margin-left: .5rem;--rt-multi-selector-header-controls-item-icon-color: var(--rt-text-base-disabled);--rt-multi-selector-header-controls-item-info-margin-left: .5rem;--rt-multi-selector-header-controls-item-info-font-size: .875rem;--rt-multi-selector-header-controls-item-info-color: var(--rt-text-base-secondary);--rt-multi-selector-header-controls-item-first-padding: 1rem 0 0 .5rem;--rt-multi-selector-header-controls-item-last-padding: 1rem 0 0 0;--rt-multi-selector-header-controls-item-last-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-item-label-hover-color: var(--rt-text-base-secondary);--rt-multi-selector-options-item-separated-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-options-item-title-max-width: 15rem;--rt-multi-selector-placeholder-gap: 1rem;--rt-multi-selector-placeholder-padding-right: 1rem;--rt-multi-selector-placeholder-icon-size: 3rem;--rt-multi-selector-placeholder-icon-color: var(--rt-text-base-secondary);--rt-multi-selector-placeholder-title-font-size: 1.5rem;--rt-multi-selector-placeholder-title-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-padding: 1rem 1.5rem 0 .5rem;--rt-multi-selector-footer-gap: .5rem;--rt-multi-selector-footer-nav-action-font-size: .875rem;--rt-multi-selector-footer-nav-action-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-nav-action-hover-color: var(--rt-text-base-strong);display:flex;width:var(--rt-multi-selector-host-width);height:var(--rt-multi-selector-host-height);flex-direction:column;padding:var(--rt-multi-selector-host-padding);border-radius:var(--rt-multi-selector-host-border-radius);background-color:var(--rt-multi-selector-host-background-color);box-shadow:var(--rt-multi-selector-host-box-shadow)}:host::ng-deep mat-radio-button .mdc-form-field .mdc-label{cursor:pointer}:host::ng-deep mat-radio-button .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host::ng-deep mat-checkbox{width:fit-content}:host::ng-deep mat-checkbox .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host .rtui-multi-selector-header{display:flex;flex-direction:column;padding:var(--rt-multi-selector-header-padding)}:host .rtui-multi-selector-header--simple{padding:var(--rt-multi-selector-header-simple-padding)}:host .rtui-multi-selector-header__controls{display:flex;flex-direction:column;align-items:flex-start}:host .rtui-multi-selector-header__controls-item--first{display:flex;flex-direction:row;padding:var(--rt-multi-selector-header-controls-item-first-padding)}:host .rtui-multi-selector-header__controls-item--last{width:100%;padding:var(--rt-multi-selector-header-controls-item-last-padding);border-bottom:var(--rt-multi-selector-header-controls-item-last-border-bottom)}:host .rtui-multi-selector-header__controls-item-icon{margin-left:var(--rt-multi-selector-header-controls-item-icon-margin-left);color:var(--rt-multi-selector-header-controls-item-icon-color)}:host .rtui-multi-selector-header__controls-item-info{margin-left:var(--rt-multi-selector-header-controls-item-info-margin-left);color:var(--rt-multi-selector-header-controls-item-info-color);font-size:var(--rt-multi-selector-header-controls-item-info-font-size)}:host .rtui-multi-selector-options{display:flex;width:100%;height:100%;flex:1 1 100%;flex-direction:column;overflow-y:auto}:host .rtui-multi-selector-options__item-title{overflow:hidden;width:100%;max-width:var(--rt-multi-selector-options-item-title-max-width);text-overflow:ellipsis;white-space:nowrap}:host .rtui-multi-selector-options__item--separated{border-bottom:var(--rt-multi-selector-options-item-separated-border-bottom)}:host .rtui-multi-selector-options__loader{display:flex;align-items:center;justify-content:center}:host .rtui-multi-selector-placeholder{display:flex;flex:1 1 100%;flex-direction:column;align-items:center;justify-content:center;padding-right:var(--rt-multi-selector-placeholder-padding-right);gap:var(--rt-multi-selector-placeholder-gap);overflow-y:auto}:host .rtui-multi-selector-placeholder__icon{width:var(--rt-multi-selector-placeholder-icon-size);height:var(--rt-multi-selector-placeholder-icon-size);color:var(--rt-multi-selector-placeholder-icon-color);font-size:var(--rt-multi-selector-placeholder-icon-size)}:host .rtui-multi-selector-placeholder__title{color:var(--rt-multi-selector-placeholder-title-color);font-size:var(--rt-multi-selector-placeholder-title-font-size)}:host .rtui-multi-selector-footer{display:flex;align-items:center;justify-content:flex-end;padding:var(--rt-multi-selector-footer-padding);gap:var(--rt-multi-selector-footer-gap)}:host .rtui-multi-selector-footer--full{justify-content:space-between}:host .rtui-multi-selector-footer__nav-action{color:var(--rt-multi-selector-footer-nav-action-color);font-size:var(--rt-multi-selector-footer-nav-action-font-size);text-decoration:none}:host .rtui-multi-selector-footer__nav-action:hover{color:var(--rt-multi-selector-footer-nav-action-hover-color)}:host .rtui-multi-selector-footer__base-actions{display:flex;gap:var(--rt-multi-selector-footer-gap)}\n"], dependencies: [{ kind: "component", type:
|
|
2933
3107
|
// Material
|
|
2934
3108
|
MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type:
|
|
2935
3109
|
// directives
|
|
@@ -2939,7 +3113,7 @@ class RtuiMultiSelectorPopupComponent {
|
|
|
2939
3113
|
}
|
|
2940
3114
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiMultiSelectorPopupComponent, decorators: [{
|
|
2941
3115
|
type: Component,
|
|
2942
|
-
args: [{ selector: 'rtui-multi-selector-popup', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3116
|
+
args: [{ selector: 'rtui-multi-selector-popup', host: { class: BEM_BLOCK$e }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
2943
3117
|
// Material
|
|
2944
3118
|
MatButton,
|
|
2945
3119
|
MatTooltip,
|
|
@@ -2966,9 +3140,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2966
3140
|
RtuiToggleComponent,
|
|
2967
3141
|
RtuiSpinnerComponent,
|
|
2968
3142
|
EntityToStringPipe,
|
|
2969
|
-
], providers: [DeviceDetectorService], template: "<div\n rtBlock=\"rtui-multi-selector-header\"\n [rtMod]=\"{ simple: isSingleSelection() || !filteredEntities().length || filteredEntities().length <= 1 }\">\n <mat-form-field subscriptSizing=\"dynamic\" [appearance]=\"appearance()\">\n <input #searchInputTpl matInput placeholder=\"Search...\" type=\"text\" [formControl]=\"searchControl\" />\n\n <mat-icon matPrefix rtIconOutlined>search</mat-icon>\n\n <rtui-clear-button matSuffix [isButtonShown]=\"!!searchControl.value\" (clickAction)=\"onClearSearch()\" />\n </mat-form-field>\n\n @if (!isSingleSelection() && filteredEntities().length > 1 && !loading()) {\n <div rtElem=\"controls\">\n @if (isMultiToggleShown()) {\n <div rtElem=\"controls-item\" rtMod=\"first\">\n <rtui-toggle label=\"Multi selection\" [ngModel]=\"this.isMultiSelection()\" (ngModelChange)=\"toggleMultiSelection()\" />\n\n @if (!isMobile()) {\n <mat-icon\n rtElem=\"controls-item-icon\"\n matTooltipPosition=\"above\"\n [rtIconOutlined]=\"true\"\n [matTooltip]=\"\n isMacOS() ? 'Also for multi selection use COMMAND button' : 'Also for multi selection use CTRL button'\n \">\n info\n </mat-icon>\n }\n\n @if (isMobile()) {\n <div rtElem=\"controls-item-info\">\n {{ isMacOS() ? 'Also for multi selection use COMMAND button' : 'Also for multi selection use CTRL button' }}\n </div>\n }\n </div>\n }\n\n @if (isSelectAllButtonShown()) {\n <div rtElem=\"controls-item\" rtMod=\"last\">\n <mat-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"!isAllSelected() && selectionControl.value.length > 0\"\n (change)=\"toggleSelectAll($event.checked)\">\n <div rtElem=\"controls-item-title\">Select all</div>\n </mat-checkbox>\n </div>\n }\n </div>\n }\n</div>\n\n@if ((filteredEntities()?.length || selectedEntities().length) && !loading()) {\n <div rtBlock=\"rtui-multi-selector-options\" rtScrollDirective [active]=\"!!isLazyLoad() && !fetching()\" (scrollAction)=\"scroll()\">\n @if (searchControl.value && selectedEntities()) {\n @for (entity of selectedEntities(); track entity[displayExp()]; let i = $index) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (change)=\"onToggleSingleItem(entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-radio-button>\n } @else {\n <mat-checkbox\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (click)=\"onToggleItem($event, entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-checkbox>\n }\n }\n }\n\n @if (filteredEntities()) {\n @for (entity of filteredEntities(); track entity[displayExp()]) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [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\" rtBlock=\"c-button\" (click)=\"onClose()\">Cancel</button>\n\n <button\n mat-flat-button\n type=\"button\"\n rtBlock=\"c-button\"\n [disabled]=\"!selectionControl.value?.length || loading()\"\n (click)=\"onSubmit()\">\n SUBMIT\n </button>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--rt-multi-selector-host-width: 20rem;--rt-multi-selector-host-height: 30rem;--rt-multi-selector-host-padding: 1rem 0 1rem 1rem;--rt-multi-selector-host-box-shadow: 0 .5rem 1rem 0 var(--rt-shadow-color);--rt-multi-selector-host-border-radius: .375rem;--rt-multi-selector-host-background-color: var(--rt-bg-base-base);--rt-multi-selector-header-padding: 0 1rem 0 0;--rt-multi-selector-header-simple-padding: 0 1rem 1rem 0;--rt-multi-selector-header-controls-item-icon-margin-left: .5rem;--rt-multi-selector-header-controls-item-icon-color: var(--rt-text-base-disabled);--rt-multi-selector-header-controls-item-info-margin-left: .5rem;--rt-multi-selector-header-controls-item-info-font-size: .875rem;--rt-multi-selector-header-controls-item-info-color: var(--rt-text-base-secondary);--rt-multi-selector-header-controls-item-first-padding: 1rem 0 0 .5rem;--rt-multi-selector-header-controls-item-last-padding: 1rem 0 0 0;--rt-multi-selector-header-controls-item-last-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-item-label-hover-color: var(--rt-text-base-secondary);--rt-multi-selector-options-item-separated-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-options-item-title-max-width: 15rem;--rt-multi-selector-placeholder-gap: 1rem;--rt-multi-selector-placeholder-padding-right: 1rem;--rt-multi-selector-placeholder-icon-size: 3rem;--rt-multi-selector-placeholder-icon-color: var(--rt-text-base-secondary);--rt-multi-selector-placeholder-title-font-size: 1.5rem;--rt-multi-selector-placeholder-title-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-padding: 1rem 1.5rem 0 .5rem;--rt-multi-selector-footer-gap: .5rem;--rt-multi-selector-footer-nav-action-font-size: .875rem;--rt-multi-selector-footer-nav-action-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-nav-action-hover-color: var(--rt-text-base-strong);display:flex;width:var(--rt-multi-selector-host-width);height:var(--rt-multi-selector-host-height);flex-direction:column;padding:var(--rt-multi-selector-host-padding);border-radius:var(--rt-multi-selector-host-border-radius);background-color:var(--rt-multi-selector-host-background-color);box-shadow:var(--rt-multi-selector-host-box-shadow)}:host::ng-deep mat-radio-button .mdc-form-field .mdc-label{cursor:pointer}:host::ng-deep mat-radio-button .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host::ng-deep mat-checkbox{width:fit-content}:host::ng-deep mat-checkbox .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host .rtui-multi-selector-header{display:flex;flex-direction:column;padding:var(--rt-multi-selector-header-padding)}:host .rtui-multi-selector-header--simple{padding:var(--rt-multi-selector-header-simple-padding)}:host .rtui-multi-selector-header__controls{display:flex;flex-direction:column;align-items:flex-start}:host .rtui-multi-selector-header__controls-item--first{display:flex;flex-direction:row;padding:var(--rt-multi-selector-header-controls-item-first-padding)}:host .rtui-multi-selector-header__controls-item--last{width:100%;padding:var(--rt-multi-selector-header-controls-item-last-padding);border-bottom:var(--rt-multi-selector-header-controls-item-last-border-bottom)}:host .rtui-multi-selector-header__controls-item-icon{margin-left:var(--rt-multi-selector-header-controls-item-icon-margin-left);color:var(--rt-multi-selector-header-controls-item-icon-color)}:host .rtui-multi-selector-header__controls-item-info{margin-left:var(--rt-multi-selector-header-controls-item-info-margin-left);color:var(--rt-multi-selector-header-controls-item-info-color);font-size:var(--rt-multi-selector-header-controls-item-info-font-size)}:host .rtui-multi-selector-options{display:flex;width:100%;height:100%;flex:1 1 100%;flex-direction:column;overflow-y:auto}:host .rtui-multi-selector-options__item-title{overflow:hidden;width:100%;max-width:var(--rt-multi-selector-options-item-title-max-width);text-overflow:ellipsis;white-space:nowrap}:host .rtui-multi-selector-options__item--separated{border-bottom:var(--rt-multi-selector-options-item-separated-border-bottom)}:host .rtui-multi-selector-options__loader{display:flex;align-items:center;justify-content:center}:host .rtui-multi-selector-placeholder{display:flex;flex:1 1 100%;flex-direction:column;align-items:center;justify-content:center;padding-right:var(--rt-multi-selector-placeholder-padding-right);gap:var(--rt-multi-selector-placeholder-gap);overflow-y:auto}:host .rtui-multi-selector-placeholder__icon{width:var(--rt-multi-selector-placeholder-icon-size);height:var(--rt-multi-selector-placeholder-icon-size);color:var(--rt-multi-selector-placeholder-icon-color);font-size:var(--rt-multi-selector-placeholder-icon-size)}:host .rtui-multi-selector-placeholder__title{color:var(--rt-multi-selector-placeholder-title-color);font-size:var(--rt-multi-selector-placeholder-title-font-size)}:host .rtui-multi-selector-footer{display:flex;align-items:center;justify-content:flex-end;padding:var(--rt-multi-selector-footer-padding);gap:var(--rt-multi-selector-footer-gap)}:host .rtui-multi-selector-footer--full{justify-content:space-between}:host .rtui-multi-selector-footer__nav-action{color:var(--rt-multi-selector-footer-nav-action-color);font-size:var(--rt-multi-selector-footer-nav-action-font-size);text-decoration:none}:host .rtui-multi-selector-footer__nav-action:hover{color:var(--rt-multi-selector-footer-nav-action-hover-color)}:host .rtui-multi-selector-footer__base-actions{display:flex;gap:var(--rt-multi-selector-footer-gap)}\n"] }]
|
|
2970
|
-
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
3143
|
+
], providers: [BreakpointService, DeviceDetectorService], template: "<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 rtElem=\"controls-item-title\">Select all</div>\n </mat-checkbox>\n </div>\n }\n </div>\n }\n</div>\n\n@if ((filteredEntities()?.length || selectedEntities().length) && !loading()) {\n <div rtBlock=\"rtui-multi-selector-options\" rtScrollDirective [active]=\"!!isLazyLoad() && !fetching()\" (scrollAction)=\"scroll()\">\n @if (searchControl.value && selectedEntities()) {\n @for (entity of selectedEntities(); track entity[displayExp()]; let i = $index) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (change)=\"onToggleSingleItem(entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-radio-button>\n } @else {\n <mat-checkbox\n rtElem=\"item\"\n [rtMod]=\"{ separated: i === selectedEntities().length - 1 }\"\n [checked]=\"selectionControl.value.includes(entity[keyExp()])\"\n (click)=\"onToggleItem($event, entity, !selectionControl.value.includes(entity[keyExp()]))\">\n <div rtElem=\"item-title\">\n @if (useNameBreaking()) {\n {{ entity[displayExp()] | entityToString | breakString }}\n } @else {\n {{ entity[displayExp()] }}\n }\n </div>\n </mat-checkbox>\n }\n }\n }\n\n @if (filteredEntities()) {\n @for (entity of filteredEntities(); track entity[displayExp()]) {\n @if (isSingleSelection()) {\n <mat-radio-button\n rtElem=\"item\"\n [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", styles: ["@charset \"UTF-8\";:host{--rt-multi-selector-host-width: 20rem;--rt-multi-selector-host-height: 30rem;--rt-multi-selector-host-padding: 1rem 0 1rem 1rem;--rt-multi-selector-host-box-shadow: 0 .5rem 1rem 0 var(--rt-shadow-color);--rt-multi-selector-host-border-radius: .375rem;--rt-multi-selector-host-background-color: var(--rt-bg-base-base);--rt-multi-selector-header-padding: 0 1rem 0 0;--rt-multi-selector-header-simple-padding: 0 1rem 1rem 0;--rt-multi-selector-header-controls-item-icon-margin-left: .5rem;--rt-multi-selector-header-controls-item-icon-color: var(--rt-text-base-disabled);--rt-multi-selector-header-controls-item-info-margin-left: .5rem;--rt-multi-selector-header-controls-item-info-font-size: .875rem;--rt-multi-selector-header-controls-item-info-color: var(--rt-text-base-secondary);--rt-multi-selector-header-controls-item-first-padding: 1rem 0 0 .5rem;--rt-multi-selector-header-controls-item-last-padding: 1rem 0 0 0;--rt-multi-selector-header-controls-item-last-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-item-label-hover-color: var(--rt-text-base-secondary);--rt-multi-selector-options-item-separated-border-bottom: solid 1px var(--rt-border-neutral-divider);--rt-multi-selector-options-item-title-max-width: 15rem;--rt-multi-selector-placeholder-gap: 1rem;--rt-multi-selector-placeholder-padding-right: 1rem;--rt-multi-selector-placeholder-icon-size: 3rem;--rt-multi-selector-placeholder-icon-color: var(--rt-text-base-secondary);--rt-multi-selector-placeholder-title-font-size: 1.5rem;--rt-multi-selector-placeholder-title-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-padding: 1rem 1.5rem 0 .5rem;--rt-multi-selector-footer-gap: .5rem;--rt-multi-selector-footer-nav-action-font-size: .875rem;--rt-multi-selector-footer-nav-action-color: var(--rt-text-base-secondary);--rt-multi-selector-footer-nav-action-hover-color: var(--rt-text-base-strong);display:flex;width:var(--rt-multi-selector-host-width);height:var(--rt-multi-selector-host-height);flex-direction:column;padding:var(--rt-multi-selector-host-padding);border-radius:var(--rt-multi-selector-host-border-radius);background-color:var(--rt-multi-selector-host-background-color);box-shadow:var(--rt-multi-selector-host-box-shadow)}:host::ng-deep mat-radio-button .mdc-form-field .mdc-label{cursor:pointer}:host::ng-deep mat-radio-button .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host::ng-deep mat-checkbox{width:fit-content}:host::ng-deep mat-checkbox .mdc-form-field:hover .mdc-label{color:var(--rt-multi-selector-item-label-hover-color)}:host .rtui-multi-selector-header{display:flex;flex-direction:column;padding:var(--rt-multi-selector-header-padding)}:host .rtui-multi-selector-header--simple{padding:var(--rt-multi-selector-header-simple-padding)}:host .rtui-multi-selector-header__controls{display:flex;flex-direction:column;align-items:flex-start}:host .rtui-multi-selector-header__controls-item--first{display:flex;flex-direction:row;padding:var(--rt-multi-selector-header-controls-item-first-padding)}:host .rtui-multi-selector-header__controls-item--last{width:100%;padding:var(--rt-multi-selector-header-controls-item-last-padding);border-bottom:var(--rt-multi-selector-header-controls-item-last-border-bottom)}:host .rtui-multi-selector-header__controls-item-icon{margin-left:var(--rt-multi-selector-header-controls-item-icon-margin-left);color:var(--rt-multi-selector-header-controls-item-icon-color)}:host .rtui-multi-selector-header__controls-item-info{margin-left:var(--rt-multi-selector-header-controls-item-info-margin-left);color:var(--rt-multi-selector-header-controls-item-info-color);font-size:var(--rt-multi-selector-header-controls-item-info-font-size)}:host .rtui-multi-selector-options{display:flex;width:100%;height:100%;flex:1 1 100%;flex-direction:column;overflow-y:auto}:host .rtui-multi-selector-options__item-title{overflow:hidden;width:100%;max-width:var(--rt-multi-selector-options-item-title-max-width);text-overflow:ellipsis;white-space:nowrap}:host .rtui-multi-selector-options__item--separated{border-bottom:var(--rt-multi-selector-options-item-separated-border-bottom)}:host .rtui-multi-selector-options__loader{display:flex;align-items:center;justify-content:center}:host .rtui-multi-selector-placeholder{display:flex;flex:1 1 100%;flex-direction:column;align-items:center;justify-content:center;padding-right:var(--rt-multi-selector-placeholder-padding-right);gap:var(--rt-multi-selector-placeholder-gap);overflow-y:auto}:host .rtui-multi-selector-placeholder__icon{width:var(--rt-multi-selector-placeholder-icon-size);height:var(--rt-multi-selector-placeholder-icon-size);color:var(--rt-multi-selector-placeholder-icon-color);font-size:var(--rt-multi-selector-placeholder-icon-size)}:host .rtui-multi-selector-placeholder__title{color:var(--rt-multi-selector-placeholder-title-color);font-size:var(--rt-multi-selector-placeholder-title-font-size)}:host .rtui-multi-selector-footer{display:flex;align-items:center;justify-content:flex-end;padding:var(--rt-multi-selector-footer-padding);gap:var(--rt-multi-selector-footer-gap)}:host .rtui-multi-selector-footer--full{justify-content:space-between}:host .rtui-multi-selector-footer__nav-action{color:var(--rt-multi-selector-footer-nav-action-color);font-size:var(--rt-multi-selector-footer-nav-action-font-size);text-decoration:none}:host .rtui-multi-selector-footer__nav-action:hover{color:var(--rt-multi-selector-footer-nav-action-hover-color)}:host .rtui-multi-selector-footer__base-actions{display:flex;gap:var(--rt-multi-selector-footer-gap)}\n"] }]
|
|
3144
|
+
}], propDecorators: { isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], entitiesToSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "entitiesToSelect", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: true }] }], keyExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyExp", required: true }] }], displayExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayExp", required: true }] }], searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: false }] }], navigateButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateButtonTitle", required: false }] }], navigateLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateLink", required: false }] }], isSingleSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSingleSelection", required: false }] }], isMultiToggleShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMultiToggleShown", required: false }] }], isSelectAllButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectAllButtonShown", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], fetching: [{ type: i0.Input, args: [{ isSignal: true, alias: "fetching", required: false }] }], useNameBreaking: [{ type: i0.Input, args: [{ isSignal: true, alias: "useNameBreaking", required: false }] }], isLazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLazyLoad", required: false }] }], isLocalSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLocalSearch", required: false }] }], pinnedKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "pinnedKeys", required: false }] }], submitAction: [{ type: i0.Output, args: ["submitAction"] }], closeAction: [{ type: i0.Output, args: ["closeAction"] }], searchAction: [{ type: i0.Output, args: ["searchAction"] }], scrollAction: [{ type: i0.Output, args: ["scrollAction"] }], temporarySelectAction: [{ type: i0.Output, args: ["temporarySelectAction"] }], searchInputRef: [{ type: i0.ViewChild, args: ['searchInputTpl', { isSignal: true }] }] } });
|
|
2971
3145
|
|
|
3146
|
+
const BEM_BLOCK$d = 'rtui-dynamic-selector-placeholder';
|
|
2972
3147
|
class RtuiDynamicSelectorPlaceholderComponent {
|
|
2973
3148
|
constructor() {
|
|
2974
3149
|
this.icon = input('', { ...(ngDevMode ? { debugName: "icon" } : /* istanbul ignore next */ {}), transform: transformStringInput });
|
|
@@ -2983,11 +3158,11 @@ class RtuiDynamicSelectorPlaceholderComponent {
|
|
|
2983
3158
|
this.submitAction.emit(trigger);
|
|
2984
3159
|
}
|
|
2985
3160
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2986
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicSelectorPlaceholderComponent, isStandalone: true, selector: "rtui-dynamic-selector-placeholder", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, buttonTitle: { classPropertyName: "buttonTitle", publicName: "buttonTitle", isSignal: true, isRequired: false, transformFunction: null }, isButtonShow: { classPropertyName: "isButtonShow", publicName: "isButtonShow", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, isIconOutlined: { classPropertyName: "isIconOutlined", publicName: "isIconOutlined", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { submitAction: "submitAction" }, ngImport: i0, template: "<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
|
|
3161
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicSelectorPlaceholderComponent, isStandalone: true, selector: "rtui-dynamic-selector-placeholder", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, buttonTitle: { classPropertyName: "buttonTitle", publicName: "buttonTitle", isSignal: true, isRequired: false, transformFunction: null }, isButtonShow: { classPropertyName: "isButtonShow", publicName: "isButtonShow", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, isIconOutlined: { classPropertyName: "isIconOutlined", publicName: "isIconOutlined", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { submitAction: "submitAction" }, host: { classAttribute: "rtui-dynamic-selector-placeholder" }, ngImport: i0, template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-dynamic-selector-placeholder-host-width: 100%;--rt-dynamic-selector-placeholder-host-height: 100%;--rt-dynamic-selector-placeholder-host-min-height: 10rem;--rt-dynamic-selector-placeholder-host-gap: 1rem;--rt-dynamic-selector-placeholder-icon-size: 4rem;--rt-dynamic-selector-placeholder-icon-color: var(--rt-text-base-soft);--rt-dynamic-selector-placeholder-icon-warn-color: var(--rt-icon-accent-warning);--rt-dynamic-selector-placeholder-description-font-size: 1rem;--rt-dynamic-selector-placeholder-description-line-height: 1.25rem;--rt-dynamic-selector-placeholder-description-color: var(--rt-text-base-secondary);display:flex;width:var(--rt-dynamic-selector-placeholder-host-width);height:var(--rt-dynamic-selector-placeholder-host-height);min-height:var(--rt-dynamic-selector-placeholder-host-min-height);flex-direction:column;align-items:center;justify-content:center;gap:var(--rt-dynamic-selector-placeholder-host-gap)}:host .rtui-dynamic-selector-placeholder__icon{width:var(--rt-dynamic-selector-placeholder-icon-size);height:var(--rt-dynamic-selector-placeholder-icon-size);color:var(--rt-dynamic-selector-placeholder-icon-color);font-size:var(--rt-dynamic-selector-placeholder-icon-size)}:host .rtui-dynamic-selector-placeholder__icon--warn{color:var(--rt-dynamic-selector-placeholder-icon-warn-color)}:host .rtui-dynamic-selector-placeholder__description{color:var(--rt-dynamic-selector-placeholder-description-color);font-size:var(--rt-dynamic-selector-placeholder-description-font-size);line-height:var(--rt-dynamic-selector-placeholder-description-line-height)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2987
3162
|
}
|
|
2988
3163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorPlaceholderComponent, decorators: [{
|
|
2989
3164
|
type: Component,
|
|
2990
|
-
args: [{ selector: 'rtui-dynamic-selector-placeholder', imports: [MatIcon, MatButton, CdkOverlayOrigin, RtIconOutlinedDirective, BlockDirective, ElemDirective, ModDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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
|
|
3165
|
+
args: [{ selector: 'rtui-dynamic-selector-placeholder', host: { class: BEM_BLOCK$d }, imports: [MatIcon, MatButton, CdkOverlayOrigin, RtIconOutlinedDirective, BlockDirective, ElemDirective, ModDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-dynamic-selector-placeholder-host-width: 100%;--rt-dynamic-selector-placeholder-host-height: 100%;--rt-dynamic-selector-placeholder-host-min-height: 10rem;--rt-dynamic-selector-placeholder-host-gap: 1rem;--rt-dynamic-selector-placeholder-icon-size: 4rem;--rt-dynamic-selector-placeholder-icon-color: var(--rt-text-base-soft);--rt-dynamic-selector-placeholder-icon-warn-color: var(--rt-icon-accent-warning);--rt-dynamic-selector-placeholder-description-font-size: 1rem;--rt-dynamic-selector-placeholder-description-line-height: 1.25rem;--rt-dynamic-selector-placeholder-description-color: var(--rt-text-base-secondary);display:flex;width:var(--rt-dynamic-selector-placeholder-host-width);height:var(--rt-dynamic-selector-placeholder-host-height);min-height:var(--rt-dynamic-selector-placeholder-host-min-height);flex-direction:column;align-items:center;justify-content:center;gap:var(--rt-dynamic-selector-placeholder-host-gap)}:host .rtui-dynamic-selector-placeholder__icon{width:var(--rt-dynamic-selector-placeholder-icon-size);height:var(--rt-dynamic-selector-placeholder-icon-size);color:var(--rt-dynamic-selector-placeholder-icon-color);font-size:var(--rt-dynamic-selector-placeholder-icon-size)}:host .rtui-dynamic-selector-placeholder__icon--warn{color:var(--rt-dynamic-selector-placeholder-icon-warn-color)}:host .rtui-dynamic-selector-placeholder__description{color:var(--rt-dynamic-selector-placeholder-description-color);font-size:var(--rt-dynamic-selector-placeholder-description-font-size);line-height:var(--rt-dynamic-selector-placeholder-description-line-height)}\n"] }]
|
|
2991
3166
|
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], buttonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonTitle", required: false }] }], isButtonShow: [{ type: i0.Input, args: [{ isSignal: true, alias: "isButtonShow", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], isIconOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isIconOutlined", required: false }] }], submitAction: [{ type: i0.Output, args: ["submitAction"] }] } });
|
|
2992
3167
|
|
|
2993
3168
|
/** Directive for row actions located outside a row menu button */
|
|
@@ -3012,14 +3187,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3012
3187
|
selector: '[rtuiDynamicSelectorItemTitleDirective]',
|
|
3013
3188
|
}]
|
|
3014
3189
|
}] });
|
|
3190
|
+
const BEM_BLOCK$c = 'rtui-dynamic-selector-selected-list';
|
|
3015
3191
|
class RtuiDynamicSelectorSelectedListComponent {
|
|
3016
3192
|
constructor() {
|
|
3193
|
+
this.#breakpoints = inject(BreakpointService);
|
|
3194
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
3195
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
3196
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
3017
3197
|
this.editedItemIndex = signal(null, /* @ts-ignore */
|
|
3018
3198
|
...(ngDevMode ? [{ debugName: "editedItemIndex" }] : /* istanbul ignore next */ []));
|
|
3019
3199
|
this.inputRef = viewChild(MatInput, /* @ts-ignore */
|
|
3020
3200
|
...(ngDevMode ? [{ debugName: "inputRef" }] : /* istanbul ignore next */ []));
|
|
3021
|
-
/**
|
|
3022
|
-
|
|
3201
|
+
/**
|
|
3202
|
+
* Признак узкого экрана.
|
|
3203
|
+
*
|
|
3204
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
3205
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
3206
|
+
*/
|
|
3207
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
3023
3208
|
/** A model's field, which should be used for http-requests */
|
|
3024
3209
|
this.keyExp = input.required(/* @ts-ignore */
|
|
3025
3210
|
...(ngDevMode ? [{ debugName: "keyExp" }] : /* istanbul ignore next */ []));
|
|
@@ -3051,6 +3236,7 @@ class RtuiDynamicSelectorSelectedListComponent {
|
|
|
3051
3236
|
/** Custom item title template */
|
|
3052
3237
|
this.itemTitleTpl = contentChild(RtuiDynamicSelectorItemTitleDirective, { ...(ngDevMode ? { debugName: "itemTitleTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
3053
3238
|
}
|
|
3239
|
+
#breakpoints;
|
|
3054
3240
|
onDelete(value) {
|
|
3055
3241
|
this.deleteFromSelectedAction.emit(value);
|
|
3056
3242
|
}
|
|
@@ -3067,7 +3253,7 @@ class RtuiDynamicSelectorSelectedListComponent {
|
|
|
3067
3253
|
this.editedItemIndex.set(index);
|
|
3068
3254
|
}
|
|
3069
3255
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorSelectedListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3070
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicSelectorSelectedListComponent, isStandalone: true, selector: "rtui-dynamic-selector-selected-list", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired:
|
|
3256
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicSelectorSelectedListComponent, isStandalone: true, selector: "rtui-dynamic-selector-selected-list", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: true, transformFunction: null }, displayExp: { classPropertyName: "displayExp", publicName: "displayExp", isSignal: true, isRequired: true, transformFunction: null }, selectedEntities: { classPropertyName: "selectedEntities", publicName: "selectedEntities", isSignal: true, isRequired: true, transformFunction: null }, readonlyEntitiesKeys: { classPropertyName: "readonlyEntitiesKeys", publicName: "readonlyEntitiesKeys", isSignal: true, isRequired: false, transformFunction: null }, isListDraggable: { classPropertyName: "isListDraggable", publicName: "isListDraggable", isSignal: true, isRequired: false, transformFunction: null }, useNameBreaking: { classPropertyName: "useNameBreaking", publicName: "useNameBreaking", isSignal: true, isRequired: false, transformFunction: null }, useTitleCase: { classPropertyName: "useTitleCase", publicName: "useTitleCase", isSignal: true, isRequired: false, transformFunction: null }, isDeleteButtonShown: { classPropertyName: "isDeleteButtonShown", publicName: "isDeleteButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isItemsEditable: { classPropertyName: "isItemsEditable", publicName: "isItemsEditable", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { deleteFromSelectedAction: "deleteFromSelectedAction", dropAction: "dropAction", changeValueAction: "changeValueAction" }, host: { classAttribute: "rtui-dynamic-selector-selected-list" }, providers: [BreakpointService], queries: [{ propertyName: "additionalControlTpl", first: true, predicate: RtuiDynamicSelectorItemAdditionalControlDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "itemTitleTpl", first: true, predicate: RtuiDynamicSelectorItemTitleDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "inputRef", first: true, predicate: MatInput, descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [":host::ng-deep .mat-mdc-form-field-flex{height:100%}:host::ng-deep .mat-mdc-form-field-infix{display:flex;height:100%;min-height:100%;align-items:center;padding:0}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.rtui-dynamic-selector__list.cdk-drop-list-dragging .rtui-dynamic-selector__item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border:none;border-radius:var(--rt-dynamic-selector-item-border-radius);background:var(--mat-option-selected-state-layer-color);box-shadow:var(--rt-dynamic-selector-item-drag-preview-box-shadow)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type:
|
|
3071
3257
|
// material
|
|
3072
3258
|
MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatFormField$1, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type:
|
|
3073
3259
|
// drag and drop
|
|
@@ -3079,7 +3265,7 @@ class RtuiDynamicSelectorSelectedListComponent {
|
|
|
3079
3265
|
}
|
|
3080
3266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorSelectedListComponent, decorators: [{
|
|
3081
3267
|
type: Component,
|
|
3082
|
-
args: [{ selector: 'rtui-dynamic-selector-selected-list', imports: [
|
|
3268
|
+
args: [{ selector: 'rtui-dynamic-selector-selected-list', host: { class: BEM_BLOCK$c }, imports: [
|
|
3083
3269
|
NgTemplateOutlet,
|
|
3084
3270
|
FormsModule,
|
|
3085
3271
|
ReactiveFormsModule,
|
|
@@ -3103,8 +3289,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3103
3289
|
EntityToStringPipe,
|
|
3104
3290
|
BreakStringPipe,
|
|
3105
3291
|
TitleCasePipe,
|
|
3106
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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]=\"
|
|
3107
|
-
}], propDecorators: { inputRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatInput), { isSignal: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
3292
|
+
], providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [":host::ng-deep .mat-mdc-form-field-flex{height:100%}:host::ng-deep .mat-mdc-form-field-infix{display:flex;height:100%;min-height:100%;align-items:center;padding:0}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.rtui-dynamic-selector__list.cdk-drop-list-dragging .rtui-dynamic-selector__item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border:none;border-radius:var(--rt-dynamic-selector-item-border-radius);background:var(--mat-option-selected-state-layer-color);box-shadow:var(--rt-dynamic-selector-item-drag-preview-box-shadow)}\n"] }]
|
|
3293
|
+
}], propDecorators: { inputRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatInput), { isSignal: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], keyExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyExp", required: true }] }], displayExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayExp", required: true }] }], selectedEntities: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedEntities", required: true }] }], readonlyEntitiesKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyEntitiesKeys", required: false }] }], isListDraggable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isListDraggable", required: false }] }], useNameBreaking: [{ type: i0.Input, args: [{ isSignal: true, alias: "useNameBreaking", required: false }] }], useTitleCase: [{ type: i0.Input, args: [{ isSignal: true, alias: "useTitleCase", required: false }] }], isDeleteButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDeleteButtonShown", required: false }] }], isItemsEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isItemsEditable", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], deleteFromSelectedAction: [{ type: i0.Output, args: ["deleteFromSelectedAction"] }], dropAction: [{ type: i0.Output, args: ["dropAction"] }], changeValueAction: [{ type: i0.Output, args: ["changeValueAction"] }], additionalControlTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicSelectorItemAdditionalControlDirective), { ...{
|
|
3108
3294
|
read: TemplateRef,
|
|
3109
3295
|
}, isSignal: true }] }], itemTitleTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicSelectorItemTitleDirective), { ...{
|
|
3110
3296
|
read: TemplateRef,
|
|
@@ -3132,6 +3318,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3132
3318
|
selector: '[rtuiDynamicSelectorItemTitleProjectionDirective]',
|
|
3133
3319
|
}]
|
|
3134
3320
|
}] });
|
|
3321
|
+
const BEM_BLOCK$b = 'rtui-dynamic-selector';
|
|
3135
3322
|
class RtuiDynamicSelectorComponent extends RtuiDynamicSelectorsDirective {
|
|
3136
3323
|
constructor() {
|
|
3137
3324
|
super(...arguments);
|
|
@@ -3440,7 +3627,8 @@ class RtuiDynamicSelectorComponent extends RtuiDynamicSelectorsDirective {
|
|
|
3440
3627
|
}
|
|
3441
3628
|
}
|
|
3442
3629
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3443
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicSelectorComponent, isStandalone: true, selector: "rtui-dynamic-selector", inputs: { keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: true, transformFunction: null }, displayExp: { classPropertyName: "displayExp", publicName: "displayExp", isSignal: true, isRequired: true, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, navigateButtonTitle: { classPropertyName: "navigateButtonTitle", publicName: "navigateButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, navigateLink: { classPropertyName: "navigateLink", publicName: "navigateLink", isSignal: true, isRequired: false, transformFunction: null }, readonlyEntitiesKeys: { classPropertyName: "readonlyEntitiesKeys", publicName: "readonlyEntitiesKeys", isSignal: true, isRequired: false, transformFunction: null }, chosenEntities: { classPropertyName: "chosenEntities", publicName: "chosenEntities", isSignal: true, isRequired: false, transformFunction: null }, isSelectionAvailable: { classPropertyName: "isSelectionAvailable", publicName: "isSelectionAvailable", isSignal: true, isRequired: false, transformFunction: null }, isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, pending: { classPropertyName: "pending", publicName: "pending", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, isLazyLoad: { classPropertyName: "isLazyLoad", publicName: "isLazyLoad", isSignal: true, isRequired: false, transformFunction: null }, isLocalSearch: { classPropertyName: "isLocalSearch", publicName: "isLocalSearch", isSignal: true, isRequired: false, transformFunction: null }, isMultiToggleShown: { classPropertyName: "isMultiToggleShown", publicName: "isMultiToggleShown", isSignal: true, isRequired: false, transformFunction: null }, isSelectAllButtonShown: { classPropertyName: "isSelectAllButtonShown", publicName: "isSelectAllButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isOpenPopupButtonShown: { classPropertyName: "isOpenPopupButtonShown", publicName: "isOpenPopupButtonShown", isSignal: true, isRequired: false, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, additionalControlChanged: { classPropertyName: "additionalControlChanged", publicName: "additionalControlChanged", isSignal: true, isRequired: false, transformFunction: null }, sortFn: { classPropertyName: "sortFn", publicName: "sortFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { chosenEntities: "chosenEntitiesChange", searchAction: "searchAction", scrollAction: "scrollAction", temporarySelectAction: "temporarySelectAction", resetAction: "resetAction", selectionChangeAction: "selectionChangeAction" }, providers: [
|
|
3630
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicSelectorComponent, isStandalone: true, selector: "rtui-dynamic-selector", inputs: { keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: true, transformFunction: null }, displayExp: { classPropertyName: "displayExp", publicName: "displayExp", isSignal: true, isRequired: true, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, navigateButtonTitle: { classPropertyName: "navigateButtonTitle", publicName: "navigateButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, navigateLink: { classPropertyName: "navigateLink", publicName: "navigateLink", isSignal: true, isRequired: false, transformFunction: null }, readonlyEntitiesKeys: { classPropertyName: "readonlyEntitiesKeys", publicName: "readonlyEntitiesKeys", isSignal: true, isRequired: false, transformFunction: null }, chosenEntities: { classPropertyName: "chosenEntities", publicName: "chosenEntities", isSignal: true, isRequired: false, transformFunction: null }, isSelectionAvailable: { classPropertyName: "isSelectionAvailable", publicName: "isSelectionAvailable", isSignal: true, isRequired: false, transformFunction: null }, isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, pending: { classPropertyName: "pending", publicName: "pending", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, isLazyLoad: { classPropertyName: "isLazyLoad", publicName: "isLazyLoad", isSignal: true, isRequired: false, transformFunction: null }, isLocalSearch: { classPropertyName: "isLocalSearch", publicName: "isLocalSearch", isSignal: true, isRequired: false, transformFunction: null }, isMultiToggleShown: { classPropertyName: "isMultiToggleShown", publicName: "isMultiToggleShown", isSignal: true, isRequired: false, transformFunction: null }, isSelectAllButtonShown: { classPropertyName: "isSelectAllButtonShown", publicName: "isSelectAllButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isOpenPopupButtonShown: { classPropertyName: "isOpenPopupButtonShown", publicName: "isOpenPopupButtonShown", isSignal: true, isRequired: false, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, additionalControlChanged: { classPropertyName: "additionalControlChanged", publicName: "additionalControlChanged", isSignal: true, isRequired: false, transformFunction: null }, sortFn: { classPropertyName: "sortFn", publicName: "sortFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { chosenEntities: "chosenEntitiesChange", searchAction: "searchAction", scrollAction: "scrollAction", temporarySelectAction: "temporarySelectAction", resetAction: "resetAction", selectionChangeAction: "selectionChangeAction" }, host: { classAttribute: "rtui-dynamic-selector" }, providers: [
|
|
3631
|
+
BreakpointService,
|
|
3444
3632
|
{
|
|
3445
3633
|
provide: NG_VALUE_ACCESSOR,
|
|
3446
3634
|
useExisting: forwardRef(() => RtuiDynamicSelectorComponent),
|
|
@@ -3451,15 +3639,16 @@ class RtuiDynamicSelectorComponent extends RtuiDynamicSelectorsDirective {
|
|
|
3451
3639
|
useExisting: RtuiDynamicSelectorComponent,
|
|
3452
3640
|
multi: true,
|
|
3453
3641
|
},
|
|
3454
|
-
], queries: [{ propertyName: "additionalControlTpl", first: true, predicate: RtuiDynamicSelectorAdditionalControlDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "itemTitleTpl", first: true, predicate: RtuiDynamicSelectorItemTitleProjectionDirective, descendants: true, read: TemplateRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<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 [
|
|
3642
|
+
], queries: [{ propertyName: "additionalControlTpl", first: true, predicate: RtuiDynamicSelectorAdditionalControlDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "itemTitleTpl", first: true, predicate: RtuiDynamicSelectorItemTitleProjectionDirective, descendants: true, read: TemplateRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<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", styles: [":host{display:flex;overflow:hidden;width:100%;height:100%;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type:
|
|
3455
3643
|
// directives
|
|
3456
3644
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: RtEscapeKeyDirective, selector: "[rtEscapeKey]", outputs: ["escapeKeyAction"] }, { kind: "directive", type: RtuiDynamicSelectorItemAdditionalControlDirective, selector: "[rtuiDynamicSelectorItemAdditionalControlDirective]" }, { kind: "directive", type: RtuiDynamicSelectorItemTitleDirective, selector: "[rtuiDynamicSelectorItemTitleDirective]" }, { kind: "component", type:
|
|
3457
3645
|
// components
|
|
3458
|
-
RtuiMultiSelectorPopupComponent, selector: "rtui-multi-selector-popup", inputs: ["isMobile", "entitiesToSelect", "appearance", "keyExp", "displayExp", "searchTerm", "navigateButtonTitle", "navigateLink", "isSingleSelection", "isMultiToggleShown", "isSelectAllButtonShown", "loading", "fetching", "useNameBreaking", "isLazyLoad", "isLocalSearch", "pinnedKeys"], outputs: ["submitAction", "closeAction", "searchAction", "scrollAction", "temporarySelectAction"] }, { kind: "component", type: RtuiDynamicSelectorPlaceholderComponent, selector: "rtui-dynamic-selector-placeholder", inputs: ["icon", "description", "buttonTitle", "isButtonShow", "disabled", "isIconOutlined"], outputs: ["submitAction"] }, { kind: "component", type: RtuiDynamicSelectorListActionsComponent, selector: "rtui-dynamic-selector-list-actions", inputs: ["isMobile", "isResetButtonDisabled", "isClearButtonDisabled", "disabled"], outputs: ["resetAction", "clearAction"] }, { kind: "component", type: RtuiDynamicSelectorSelectedListComponent, selector: "rtui-dynamic-selector-selected-list", inputs: ["isMobile", "keyExp", "displayExp", "selectedEntities", "readonlyEntitiesKeys", "isListDraggable", "useNameBreaking", "useTitleCase", "isDeleteButtonShown", "isItemsEditable", "appearance"], outputs: ["deleteFromSelectedAction", "dropAction", "changeValueAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3646
|
+
RtuiMultiSelectorPopupComponent, selector: "rtui-multi-selector-popup", inputs: ["isMobile", "entitiesToSelect", "appearance", "keyExp", "displayExp", "searchTerm", "navigateButtonTitle", "navigateLink", "isSingleSelection", "isMultiToggleShown", "isSelectAllButtonShown", "loading", "fetching", "useNameBreaking", "isLazyLoad", "isLocalSearch", "pinnedKeys"], outputs: ["submitAction", "closeAction", "searchAction", "scrollAction", "temporarySelectAction"] }, { kind: "component", type: RtuiDynamicSelectorPlaceholderComponent, selector: "rtui-dynamic-selector-placeholder", inputs: ["icon", "description", "buttonTitle", "isButtonShow", "disabled", "isIconOutlined"], outputs: ["submitAction"] }, { kind: "component", type: RtuiDynamicSelectorListActionsComponent, selector: "rtui-dynamic-selector-list-actions", inputs: ["isMobile", "isResetButtonDisabled", "isClearButtonDisabled", "disabled"], outputs: ["resetAction", "clearAction"] }, { kind: "component", type: RtuiDynamicSelectorSelectedListComponent, selector: "rtui-dynamic-selector-selected-list", inputs: ["isMobile", "keyExp", "displayExp", "selectedEntities", "readonlyEntitiesKeys", "isListDraggable", "useNameBreaking", "useTitleCase", "isDeleteButtonShown", "isItemsEditable", "appearance"], outputs: ["deleteFromSelectedAction", "dropAction", "changeValueAction"] }, { kind: "pipe", type: ConcatClassesPipe, name: "concatClasses" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3459
3647
|
}
|
|
3460
3648
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicSelectorComponent, decorators: [{
|
|
3461
3649
|
type: Component,
|
|
3462
|
-
args: [{ selector: 'rtui-dynamic-selector', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3650
|
+
args: [{ selector: 'rtui-dynamic-selector', host: { class: BEM_BLOCK$b }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3651
|
+
ConcatClassesPipe,
|
|
3463
3652
|
ReactiveFormsModule,
|
|
3464
3653
|
NgTemplateOutlet,
|
|
3465
3654
|
CdkOverlayOrigin,
|
|
@@ -3476,6 +3665,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3476
3665
|
RtuiDynamicSelectorListActionsComponent,
|
|
3477
3666
|
RtuiDynamicSelectorSelectedListComponent,
|
|
3478
3667
|
], providers: [
|
|
3668
|
+
BreakpointService,
|
|
3479
3669
|
{
|
|
3480
3670
|
provide: NG_VALUE_ACCESSOR,
|
|
3481
3671
|
useExisting: forwardRef(() => RtuiDynamicSelectorComponent),
|
|
@@ -3486,7 +3676,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3486
3676
|
useExisting: RtuiDynamicSelectorComponent,
|
|
3487
3677
|
multi: true,
|
|
3488
3678
|
},
|
|
3489
|
-
], template: "<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 [
|
|
3679
|
+
], template: "<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", styles: [":host{display:flex;overflow:hidden;width:100%;height:100%;flex-direction:column}\n"] }]
|
|
3490
3680
|
}], propDecorators: { keyExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyExp", required: true }] }], displayExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayExp", required: true }] }], entities: [{ type: i0.Input, args: [{ isSignal: true, alias: "entities", required: true }] }], navigateButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateButtonTitle", required: false }] }], navigateLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateLink", required: false }] }], readonlyEntitiesKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyEntitiesKeys", required: false }] }], chosenEntities: [{ type: i0.Input, args: [{ isSignal: true, alias: "chosenEntities", required: false }] }, { type: i0.Output, args: ["chosenEntitiesChange"] }], isSelectionAvailable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectionAvailable", required: false }] }], isPlaceholderShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlaceholderShown", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], pending: [{ type: i0.Input, args: [{ isSignal: true, alias: "pending", required: false }] }], fetching: [{ type: i0.Input, args: [{ isSignal: true, alias: "fetching", required: false }] }], isLazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLazyLoad", required: false }] }], isLocalSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLocalSearch", required: false }] }], isMultiToggleShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMultiToggleShown", required: false }] }], isSelectAllButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectAllButtonShown", required: false }] }], isOpenPopupButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpenPopupButtonShown", required: false }] }], searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: false }] }], additionalControlChanged: [{ type: i0.Input, args: [{ isSignal: true, alias: "additionalControlChanged", required: false }] }], sortFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortFn", required: false }] }], searchAction: [{ type: i0.Output, args: ["searchAction"] }], scrollAction: [{ type: i0.Output, args: ["scrollAction"] }], temporarySelectAction: [{ type: i0.Output, args: ["temporarySelectAction"] }], resetAction: [{ type: i0.Output, args: ["resetAction"] }], selectionChangeAction: [{ type: i0.Output, args: ["selectionChangeAction"] }], additionalControlTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicSelectorAdditionalControlDirective), { ...{
|
|
3491
3681
|
read: TemplateRef,
|
|
3492
3682
|
}, isSignal: true }] }], itemTitleTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicSelectorItemTitleProjectionDirective), { ...{
|
|
@@ -3504,6 +3694,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3504
3694
|
selector: '[rtuiDynamicInputAdditionalControlDirective]',
|
|
3505
3695
|
}]
|
|
3506
3696
|
}] });
|
|
3697
|
+
const BEM_BLOCK$a = 'rtui-dynamic-input';
|
|
3507
3698
|
class RtuiDynamicInputComponent extends RtuiDynamicSelectorsDirective {
|
|
3508
3699
|
constructor() {
|
|
3509
3700
|
super(...arguments);
|
|
@@ -3650,7 +3841,8 @@ class RtuiDynamicInputComponent extends RtuiDynamicSelectorsDirective {
|
|
|
3650
3841
|
this.isResetButtonDisabled.set(areArraysEqual(this.#initialEntities(), value));
|
|
3651
3842
|
}
|
|
3652
3843
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3653
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicInputComponent, isStandalone: true, selector: "rtui-dynamic-input", inputs: { isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: false, transformFunction: null }, isInputsEditable: { classPropertyName: "isInputsEditable", publicName: "isInputsEditable", isSignal: true, isRequired: false, transformFunction: null }, inputLabel: { classPropertyName: "inputLabel", publicName: "inputLabel", isSignal: true, isRequired: false, transformFunction: null }, inputPlaceholder: { classPropertyName: "inputPlaceholder", publicName: "inputPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, readonlyEntitiesKeys: { classPropertyName: "readonlyEntitiesKeys", publicName: "readonlyEntitiesKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isPlaceholderShown: "isPlaceholderShownChange" }, providers: [
|
|
3844
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicInputComponent, isStandalone: true, selector: "rtui-dynamic-input", inputs: { isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: false, transformFunction: null }, isInputsEditable: { classPropertyName: "isInputsEditable", publicName: "isInputsEditable", isSignal: true, isRequired: false, transformFunction: null }, inputLabel: { classPropertyName: "inputLabel", publicName: "inputLabel", isSignal: true, isRequired: false, transformFunction: null }, inputPlaceholder: { classPropertyName: "inputPlaceholder", publicName: "inputPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, readonlyEntitiesKeys: { classPropertyName: "readonlyEntitiesKeys", publicName: "readonlyEntitiesKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isPlaceholderShown: "isPlaceholderShownChange" }, host: { classAttribute: "rtui-dynamic-input" }, providers: [
|
|
3845
|
+
BreakpointService,
|
|
3654
3846
|
{
|
|
3655
3847
|
provide: NG_VALUE_ACCESSOR,
|
|
3656
3848
|
useExisting: forwardRef(() => RtuiDynamicInputComponent),
|
|
@@ -3661,17 +3853,18 @@ class RtuiDynamicInputComponent extends RtuiDynamicSelectorsDirective {
|
|
|
3661
3853
|
useExisting: RtuiDynamicInputComponent,
|
|
3662
3854
|
multi: true,
|
|
3663
3855
|
},
|
|
3664
|
-
], queries: [{ propertyName: "additionalControlTpl", first: true, predicate: RtuiDynamicInputAdditionalControlDirective, descendants: true, read: TemplateRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<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 [
|
|
3856
|
+
], queries: [{ propertyName: "additionalControlTpl", first: true, predicate: RtuiDynamicInputAdditionalControlDirective, descendants: true, read: TemplateRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<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", styles: [":host{width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type:
|
|
3665
3857
|
// material
|
|
3666
3858
|
MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type:
|
|
3667
3859
|
// directives
|
|
3668
3860
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: RtuiDynamicSelectorItemAdditionalControlDirective, selector: "[rtuiDynamicSelectorItemAdditionalControlDirective]" }, { kind: "component", type:
|
|
3669
3861
|
// components
|
|
3670
|
-
RtuiDynamicSelectorPlaceholderComponent, selector: "rtui-dynamic-selector-placeholder", inputs: ["icon", "description", "buttonTitle", "isButtonShow", "disabled", "isIconOutlined"], outputs: ["submitAction"] }, { kind: "component", type: RtuiDynamicSelectorListActionsComponent, selector: "rtui-dynamic-selector-list-actions", inputs: ["isMobile", "isResetButtonDisabled", "isClearButtonDisabled", "disabled"], outputs: ["resetAction", "clearAction"] }, { kind: "component", type: RtuiDynamicSelectorSelectedListComponent, selector: "rtui-dynamic-selector-selected-list", inputs: ["isMobile", "keyExp", "displayExp", "selectedEntities", "readonlyEntitiesKeys", "isListDraggable", "useNameBreaking", "useTitleCase", "isDeleteButtonShown", "isItemsEditable", "appearance"], outputs: ["deleteFromSelectedAction", "dropAction", "changeValueAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3862
|
+
RtuiDynamicSelectorPlaceholderComponent, selector: "rtui-dynamic-selector-placeholder", inputs: ["icon", "description", "buttonTitle", "isButtonShow", "disabled", "isIconOutlined"], outputs: ["submitAction"] }, { kind: "component", type: RtuiDynamicSelectorListActionsComponent, selector: "rtui-dynamic-selector-list-actions", inputs: ["isMobile", "isResetButtonDisabled", "isClearButtonDisabled", "disabled"], outputs: ["resetAction", "clearAction"] }, { kind: "component", type: RtuiDynamicSelectorSelectedListComponent, selector: "rtui-dynamic-selector-selected-list", inputs: ["isMobile", "keyExp", "displayExp", "selectedEntities", "readonlyEntitiesKeys", "isListDraggable", "useNameBreaking", "useTitleCase", "isDeleteButtonShown", "isItemsEditable", "appearance"], outputs: ["deleteFromSelectedAction", "dropAction", "changeValueAction"] }, { kind: "pipe", type: ConcatClassesPipe, name: "concatClasses" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3671
3863
|
}
|
|
3672
3864
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicInputComponent, decorators: [{
|
|
3673
3865
|
type: Component,
|
|
3674
|
-
args: [{ selector: 'rtui-dynamic-input', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3866
|
+
args: [{ selector: 'rtui-dynamic-input', host: { class: BEM_BLOCK$a }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3867
|
+
ConcatClassesPipe,
|
|
3675
3868
|
NgTemplateOutlet,
|
|
3676
3869
|
ReactiveFormsModule,
|
|
3677
3870
|
// material
|
|
@@ -3687,6 +3880,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3687
3880
|
RtuiDynamicSelectorListActionsComponent,
|
|
3688
3881
|
RtuiDynamicSelectorSelectedListComponent,
|
|
3689
3882
|
], providers: [
|
|
3883
|
+
BreakpointService,
|
|
3690
3884
|
{
|
|
3691
3885
|
provide: NG_VALUE_ACCESSOR,
|
|
3692
3886
|
useExisting: forwardRef(() => RtuiDynamicInputComponent),
|
|
@@ -3697,11 +3891,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3697
3891
|
useExisting: RtuiDynamicInputComponent,
|
|
3698
3892
|
multi: true,
|
|
3699
3893
|
},
|
|
3700
|
-
], template: "<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 [
|
|
3894
|
+
], template: "<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", styles: [":host{width:100%}\n"] }]
|
|
3701
3895
|
}], propDecorators: { isPlaceholderShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlaceholderShown", required: false }] }, { type: i0.Output, args: ["isPlaceholderShownChange"] }], isInputsEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isInputsEditable", required: false }] }], inputLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputLabel", required: false }] }], inputPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputPlaceholder", required: false }] }], readonlyEntitiesKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyEntitiesKeys", required: false }] }], additionalControlTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicInputAdditionalControlDirective), { ...{
|
|
3702
3896
|
read: TemplateRef,
|
|
3703
3897
|
}, isSignal: true }] }] } });
|
|
3704
3898
|
|
|
3899
|
+
const BEM_BLOCK$9 = 'rtui-test-aside';
|
|
3705
3900
|
class RtTableConfigAsideComponent {
|
|
3706
3901
|
constructor() {
|
|
3707
3902
|
this.#breakpointService = inject(BreakpointService);
|
|
@@ -3774,7 +3969,7 @@ class RtTableConfigAsideComponent {
|
|
|
3774
3969
|
});
|
|
3775
3970
|
}
|
|
3776
3971
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtTableConfigAsideComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3777
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: RtTableConfigAsideComponent, isStandalone: true, selector: "rtui-test-aside", providers: [BreakpointService], ngImport: i0, template: "<rtui-aside-container\n [
|
|
3972
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: RtTableConfigAsideComponent, isStandalone: true, selector: "rtui-test-aside", host: { classAttribute: "rtui-test-aside" }, providers: [BreakpointService], ngImport: i0, template: "<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]=\"isMobile()\"\n (click)=\"visibilityChange(entity)\">\n <mat-icon [rtIconOutlined]=\"true\">\n {{ entity.hidden ? 'visibility_off' : 'visibility' }}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n </rtui-dynamic-selector>\n </div>\n </div>\n </div>\n </form>\n</rtui-aside-container>\n", styles: [":host{width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type:
|
|
3778
3973
|
// directives
|
|
3779
3974
|
BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: RtuiAsideContainerHeaderDirective, selector: "[rtuiAsideHeader]" }, { kind: "directive", type: RtuiDynamicSelectorAdditionalControlDirective, selector: "[rtuiDynamicSelectorAdditionalControlDirective]" }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "component", type:
|
|
3780
3975
|
// standalone components
|
|
@@ -3782,7 +3977,7 @@ class RtTableConfigAsideComponent {
|
|
|
3782
3977
|
}
|
|
3783
3978
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtTableConfigAsideComponent, decorators: [{
|
|
3784
3979
|
type: Component,
|
|
3785
|
-
args: [{ selector: 'rtui-test-aside', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3980
|
+
args: [{ selector: 'rtui-test-aside', host: { class: BEM_BLOCK$9 }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3786
3981
|
ReactiveFormsModule,
|
|
3787
3982
|
MatTooltip,
|
|
3788
3983
|
MatIcon,
|
|
@@ -3797,7 +3992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3797
3992
|
RtuiAsideContainerComponent,
|
|
3798
3993
|
RtuiDynamicSelectorComponent,
|
|
3799
3994
|
RtuiToggleComponent,
|
|
3800
|
-
], providers: [BreakpointService], template: "<rtui-aside-container\n [
|
|
3995
|
+
], providers: [BreakpointService], template: "<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]=\"isMobile()\"\n (click)=\"visibilityChange(entity)\">\n <mat-icon [rtIconOutlined]=\"true\">\n {{ entity.hidden ? 'visibility_off' : 'visibility' }}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n </rtui-dynamic-selector>\n </div>\n </div>\n </div>\n </form>\n</rtui-aside-container>\n", styles: [":host{width:100%;height:100%}\n"] }]
|
|
3801
3996
|
}] });
|
|
3802
3997
|
|
|
3803
3998
|
class RtuiTableToolbarSelectorsDirective {
|
|
@@ -3820,8 +4015,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
3820
4015
|
selector: '[rtuiTableToolbarActionsDirective]',
|
|
3821
4016
|
}]
|
|
3822
4017
|
}] });
|
|
4018
|
+
const BEM_BLOCK$8 = 'rtui-table-container';
|
|
3823
4019
|
class RtuiTableContainerComponent {
|
|
3824
4020
|
constructor() {
|
|
4021
|
+
this.#breakpoints = inject(BreakpointService);
|
|
3825
4022
|
this.#documentRef = inject(DOCUMENT);
|
|
3826
4023
|
this.#windowRef = inject(WINDOW);
|
|
3827
4024
|
this.#platformService = inject(PlatformService);
|
|
@@ -3832,6 +4029,9 @@ class RtuiTableContainerComponent {
|
|
|
3832
4029
|
this.#asideService = inject(RtAsideService);
|
|
3833
4030
|
this.#tableConfigService = inject(RtTableConfigService);
|
|
3834
4031
|
this.#style = this.#documentRef?.documentElement?.style;
|
|
4032
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
4033
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
4034
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
3835
4035
|
this.appearance = input.required(/* @ts-ignore */
|
|
3836
4036
|
...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
3837
4037
|
/** Table config storage key */
|
|
@@ -3839,8 +4039,13 @@ class RtuiTableContainerComponent {
|
|
|
3839
4039
|
/** Current page model from store */
|
|
3840
4040
|
this.pageModel = input.required(/* @ts-ignore */
|
|
3841
4041
|
...(ngDevMode ? [{ debugName: "pageModel" }] : /* istanbul ignore next */ []));
|
|
3842
|
-
/**
|
|
3843
|
-
|
|
4042
|
+
/**
|
|
4043
|
+
* Признак узкого экрана.
|
|
4044
|
+
*
|
|
4045
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
4046
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
4047
|
+
*/
|
|
4048
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
3844
4049
|
/** Indicates is loading in progress */
|
|
3845
4050
|
this.loading = input.required({ ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
3846
4051
|
/** Indicates is fetching in progress */
|
|
@@ -3909,6 +4114,7 @@ class RtuiTableContainerComponent {
|
|
|
3909
4114
|
return;
|
|
3910
4115
|
};
|
|
3911
4116
|
}
|
|
4117
|
+
#breakpoints;
|
|
3912
4118
|
#documentRef;
|
|
3913
4119
|
#windowRef;
|
|
3914
4120
|
#platformService;
|
|
@@ -3978,7 +4184,7 @@ class RtuiTableContainerComponent {
|
|
|
3978
4184
|
}
|
|
3979
4185
|
}
|
|
3980
4186
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3981
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableContainerComponent, isStandalone: true, selector: "rtui-table-container", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, tableConfigStorageKey: { classPropertyName: "tableConfigStorageKey", publicName: "tableConfigStorageKey", isSignal: true, isRequired: true, transformFunction: null }, pageModel: { classPropertyName: "pageModel", publicName: "pageModel", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: true, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: true, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: true, transformFunction: null }, isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: true, transformFunction: null }, isPaginationShown: { classPropertyName: "isPaginationShown", publicName: "isPaginationShown", isSignal: true, isRequired: false, transformFunction: null }, isRefreshButtonShown: { classPropertyName: "isRefreshButtonShown", publicName: "isRefreshButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isTableConfigButtonShown: { classPropertyName: "isTableConfigButtonShown", publicName: "isTableConfigButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isToolbarActionsIconsOutlined: { classPropertyName: "isToolbarActionsIconsOutlined", publicName: "isToolbarActionsIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isFiltersShown: { classPropertyName: "isFiltersShown", publicName: "isFiltersShown", isSignal: true, isRequired: false, transformFunction: null }, isFiltersEmpty: { classPropertyName: "isFiltersEmpty", publicName: "isFiltersEmpty", isSignal: true, isRequired: false, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, placeholderIcon: { classPropertyName: "placeholderIcon", publicName: "placeholderIcon", isSignal: true, isRequired: false, transformFunction: null }, placeholderTitle: { classPropertyName: "placeholderTitle", publicName: "placeholderTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageModelChange: "pageModelChange", searchChange: "searchChange", refreshAction: "refreshAction", clearFiltersAction: "clearFiltersAction" }, providers: [BreakpointService, RtAsideService, PlatformService], queries: [{ propertyName: "toolbarSelectorsTpl", first: true, predicate: RtuiTableToolbarSelectorsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "toolbarActionsTpl", first: true, predicate: RtuiTableToolbarActionsDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "@if (loading()) {\n <rtui-spinner />\n} @else {\n @if (fetching()) {\n <rtui-spinner [showBackground]=\"true\" />\n }\n <ng-container rtBlock=\"table-container\">\n <rtui-scrollable>\n <ng-container *rtuiScrollableHeader>\n <rtui-toolbar>\n @if (isSmallTablet() && !isPlaceholderShown() && (isMultiSelect() || toolbarSelectorsTpl())) {\n <ng-container *rtuiToolbarLeft>\n <ng-template *ngTemplateOutlet=\"selectorsTpl\" />\n </ng-container>\n }\n\n <ng-container *rtuiToolbarRight>\n <div rtElem=\"toolbar\">\n <div rtElem=\"toolbar-actions\" [rtMod]=\"{ end: isMultiSelect() ?? toolbarSelectorsTpl() }\">\n @if (!isSmallTablet() && !isPlaceholderShown() && (isMultiSelect() || toolbarSelectorsTpl())) {\n <ng-template *ngTemplateOutlet=\"selectorsTpl\" />\n }\n\n @if (toolbarActionsTpl()) {\n <ng-template *ngTemplateOutlet=\"toolbarActionsTpl() ?? null\" />\n\n <div rtElem=\"toolbar-actions-divider\"></div>\n }\n\n @if (isFiltersShown()) {\n <button\n mat-mini-fab\n type=\"button\"\n aria-label=\"Icon-button for clear filters\"\n class=\"c-button c-button--fab\"\n matTooltip=\"Clear filters\"\n matTooltipPosition=\"below\"\n [matTooltipDisabled]=\"isMobile()\"\n [disabled]=\"isFiltersEmpty()\"\n (click)=\"onClearFilters()\">\n <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">block</mat-icon>\n </button>\n }\n\n @if (isRefreshButtonShown()) {\n <button\n mat-mini-fab\n type=\"button\"\n aria-label=\"Icon-button for table refresh\"\n class=\"c-button c-button--fab\"\n matTooltip=\"Refresh\"\n matTooltipPosition=\"below\"\n [matTooltipDisabled]=\"isMobile()\"\n (click)=\"onRefresh()\">\n <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">sync</mat-icon>\n </button>\n }\n\n @if (isTableConfigButtonShown()) {\n <button\n mat-mini-fab\n type=\"button\"\n aria-label=\"Icon-button for table config\"\n class=\"c-button c-button--fab\"\n matTooltip=\"Table configuration\"\n matTooltipPosition=\"below\"\n [matTooltipDisabled]=\"isMobile()\"\n (click)=\"onOpenConfigAside()\">\n <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">view_column</mat-icon>\n </button>\n }\n </div>\n\n @if ((isPlaceholderShown() && searchControl.value) || !isPlaceholderShown() || searchControl.dirty) {\n <div rtElem=\"toolbar-search\">\n <mat-form-field subscriptSizing=\"dynamic\" [appearance]=\"appearance()\" [style.width.%]=\"100\">\n <input matInput placeholder=\"Search...\" type=\"text\" [formControl]=\"searchControl\" />\n\n <mat-icon matPrefix [rtIconOutlined]=\"true\">search</mat-icon>\n\n <rtui-clear-button\n matSuffix\n [isButtonShown]=\"!!searchControl.value\"\n (clickAction)=\"onClearSearch()\" />\n </mat-form-field>\n </div>\n }\n </div>\n </ng-container>\n </rtui-toolbar>\n </ng-container>\n\n <ng-container *rtuiScrollableContent>\n @if (!isPlaceholderShown() || pageModel()?.totalCount) {\n <div rtElem=\"content\">\n <ng-content />\n </div>\n\n @if (isPaginationShown()) {\n <div rtElem=\"pagination\">\n <rtui-pagination\n [isMobile]=\"!!isMobile()\"\n [currentPageModel]=\"pageModel()\"\n (pageModelChange)=\"onPageModelChange($event)\" />\n </div>\n }\n } @else {\n <div rtElem=\"placeholder\">\n <mat-icon rtElem=\"placeholder-icon\" [rtIconOutlined]=\"true\">{{ placeholderIcon() }}</mat-icon>\n\n <div rtElem=\"placeholder-title\">{{ placeholderTitle() }}</div>\n </div>\n }\n </ng-container>\n </rtui-scrollable>\n\n <ng-template #selectorsTpl>\n <div rtElem=\"selectors\">\n @if (isMultiSelect()) {\n @if (isSelectAllSelectorShown()) {\n <mat-checkbox\n [checked]=\"isAllEntitiesSelected()\"\n [indeterminate]=\"!isAllEntitiesSelected() && isAllEntitiesIndeterminate()\"\n [disabled]=\"isSelectAllSelectorDisabled()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onToggleAllEntities($event.checked)\">\n <div rtElem=\"selectors-label\">Select all</div>\n </mat-checkbox>\n } @else {\n <div rtElem=\"selectors-counter\">Selected: {{ selectedEntitiesCount() }}</div>\n }\n }\n\n @if (toolbarSelectorsTpl()) {\n <ng-template *ngTemplateOutlet=\"toolbarSelectorsTpl() ?? null\" />\n }\n </div>\n </ng-template>\n </ng-container>\n}\n", styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;overflow:hidden;width:100%}:host ::-webkit-scrollbar-track:hover{border:1px solid var(--rt-border-neutral-subtle)}:host ::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:var(--rt-radius-sm);background:var(--rt-scrollbar-thumb);background-clip:content-box}:host ::-webkit-scrollbar-thumb:hover{border:2px solid transparent;background:var(--rt-scrollbar-thumb-hover);background-clip:content-box}:host rtui-toolbar{--rt-toolbar-body-padding: 0;--rt-toolbar-bars-border-bottom-width: 0}:host rtui-scrollable{--rt-scrollable-header-padding: 1rem 0 0 0;--rt-scrollable-content-padding: 1rem 0 0 0;--rt-scrollable-host-background-color: transparent;--rt-scrollable-header-background-color: transparent;--rt-scrollable-content-background-color: transparent}:host{--mat-fab-small-container-shape: 50%;--mat-fab-small-hover-state-layer-opacity: 0;--mat-fab-small-pressed-state-layer-opacity: 0;--mat-fab-small-focus-state-layer-opacity: 0;--rt-table-container-selectors-margin: 0 .65rem;--rt-table-container-selector-label-color: var(--rt-text-base-secondary);--rt-table-container-selector-label-hover-color: var(--rt-text-base-strong);--rt-table-container-selector-counter-color: var(--rt-text-base-secondary);--rt-table-container-selector-counter-font-size: .875rem;--rt-table-container-toolbar-mobile-gap: 1rem;--rt-table-container-toolbar-actions-gap: 1rem;--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;--rt-table-container-toolbar-actions-divider-height: 2rem;--rt-table-container-toolbar-actions-divider-border-left: 1px solid var(--rt-border-neutral-divider);--rt-table-container-toolbar-search-width: 22rem;--rt-table-container-content-padding: 0;--rt-table-container-placeholder-width: 100%;--rt-table-container-placeholder-height: 100vh;--rt-table-container-placeholder-gap: 1rem;--rt-table-container-placeholder-icon-size: 3rem;--rt-table-container-placeholder-title-size: 2rem}:host .table-container__selectors{display:flex;width:100%;flex-grow:1;align-items:center;justify-content:flex-start;margin:var(--rt-table-container-selectors-margin);gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__selectors-label{color:var(--rt-table-container-selector-label-color)}:host .table-container__selectors-label:hover{color:var(--rt-table-container-selector-label-hover-color)}:host .table-container__selectors-counter{color:var(--rt-table-container-selector-counter-color);font-size:var(--rt-table-container-selector-counter-font-size)}:host .table-container__toolbar{display:flex;width:100%;align-items:center;justify-content:flex-end}:host .table-container__toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__toolbar-actions>:last-child{margin-right:var(--rt-table-container-toolbar-actions-last-child-margin-right)}:host .table-container__toolbar-actions-divider{height:var(--rt-table-container-toolbar-actions-divider-height);border-left:var(--rt-table-container-toolbar-actions-divider-border-left)}:host .table-container__toolbar-search{width:var(--rt-table-container-toolbar-search-width)}:host .table-container__content{overflow:auto;width:100%;flex-grow:1;padding:var(--rt-table-container-content-padding)}:host .table-container__content::-webkit-scrollbar{width:var(--rt-table-container-content-scrollbar-vertical-width);height:var(--rt-table-container-content-scrollbar-horizontal-height)}:host .table-container__placeholder{display:flex;width:var(--rt-table-container-placeholder-width);height:var(--rt-table-container-placeholder-height);flex-direction:column;align-items:center;justify-content:center;gap:var(--rt-table-container-placeholder-gap)}:host .table-container__placeholder-icon{width:var(--rt-table-container-placeholder-icon-size);height:var(--rt-table-container-placeholder-icon-size);font-size:var(--rt-table-container-placeholder-icon-size)}:host .table-container__placeholder-title{font-size:var(--rt-table-container-placeholder-title-size)}@media screen and (max-width:719px){:host{--rt-table-container-toolbar-actions-last-child-margin-right: 0}:host rtui-toolbar{--rt-toolbar-body-height: 6.5rem;--rt-toolbar-body-mobile-height: 6.5rem;--rt-toolbar-bars-center-width: 0;--rt-toolbar-bars-right-width: 100%}:host .table-container__toolbar{flex-direction:column-reverse;gap:var(--rt-table-container-toolbar-mobile-gap)}:host .table-container__toolbar-actions{width:100%;justify-content:center}:host .table-container__toolbar-actions--end{--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;justify-content:flex-end}:host .table-container__toolbar-search{width:100%;justify-content:center;grid-row:1}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
|
|
4187
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiTableContainerComponent, isStandalone: true, selector: "rtui-table-container", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, tableConfigStorageKey: { classPropertyName: "tableConfigStorageKey", publicName: "tableConfigStorageKey", isSignal: true, isRequired: true, transformFunction: null }, pageModel: { classPropertyName: "pageModel", publicName: "pageModel", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: true, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: true, transformFunction: null }, isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: true, transformFunction: null }, isPaginationShown: { classPropertyName: "isPaginationShown", publicName: "isPaginationShown", isSignal: true, isRequired: false, transformFunction: null }, isRefreshButtonShown: { classPropertyName: "isRefreshButtonShown", publicName: "isRefreshButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isTableConfigButtonShown: { classPropertyName: "isTableConfigButtonShown", publicName: "isTableConfigButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isToolbarActionsIconsOutlined: { classPropertyName: "isToolbarActionsIconsOutlined", publicName: "isToolbarActionsIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, isFiltersShown: { classPropertyName: "isFiltersShown", publicName: "isFiltersShown", isSignal: true, isRequired: false, transformFunction: null }, isFiltersEmpty: { classPropertyName: "isFiltersEmpty", publicName: "isFiltersEmpty", isSignal: true, isRequired: false, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, placeholderIcon: { classPropertyName: "placeholderIcon", publicName: "placeholderIcon", isSignal: true, isRequired: false, transformFunction: null }, placeholderTitle: { classPropertyName: "placeholderTitle", publicName: "placeholderTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageModelChange: "pageModelChange", searchChange: "searchChange", refreshAction: "refreshAction", clearFiltersAction: "clearFiltersAction" }, host: { classAttribute: "rtui-table-container" }, providers: [BreakpointService, RtAsideService, PlatformService], queries: [{ propertyName: "toolbarSelectorsTpl", first: true, predicate: RtuiTableToolbarSelectorsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "toolbarActionsTpl", first: true, predicate: RtuiTableToolbarActionsDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "@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 rtElem=\"pagination\">\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", styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;overflow:hidden;width:100%}:host ::-webkit-scrollbar-track:hover{border:1px solid var(--rt-border-neutral-subtle)}:host ::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:var(--rt-radius-sm);background:var(--rt-scrollbar-thumb);background-clip:content-box}:host ::-webkit-scrollbar-thumb:hover{border:2px solid transparent;background:var(--rt-scrollbar-thumb-hover);background-clip:content-box}:host rtui-toolbar{--rt-toolbar-body-padding: 0;--rt-toolbar-bars-border-bottom-width: 0}:host rtui-scrollable{--rt-scrollable-header-padding: 1rem 0 0 0;--rt-scrollable-content-padding: 1rem 0 0 0;--rt-scrollable-host-background-color: transparent;--rt-scrollable-header-background-color: transparent;--rt-scrollable-content-background-color: transparent}:host{--mat-fab-small-container-shape: 50%;--mat-fab-small-hover-state-layer-opacity: 0;--mat-fab-small-pressed-state-layer-opacity: 0;--mat-fab-small-focus-state-layer-opacity: 0;--rt-table-container-selectors-margin: 0 .65rem;--rt-table-container-selector-label-color: var(--rt-text-base-secondary);--rt-table-container-selector-label-hover-color: var(--rt-text-base-strong);--rt-table-container-selector-counter-color: var(--rt-text-base-secondary);--rt-table-container-selector-counter-font-size: .875rem;--rt-table-container-toolbar-mobile-gap: 1rem;--rt-table-container-toolbar-actions-gap: 1rem;--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;--rt-table-container-toolbar-actions-divider-height: 2rem;--rt-table-container-toolbar-actions-divider-border-left: 1px solid var(--rt-border-neutral-divider);--rt-table-container-toolbar-action-color: var(--rt-color-neutral-60);--rt-table-container-toolbar-action-hover-color: var(--rt-color-neutral-100);--rt-table-container-toolbar-search-width: 22rem;--rt-table-container-content-padding: 0;--rt-table-container-placeholder-width: 100%;--rt-table-container-placeholder-height: 100vh;--rt-table-container-placeholder-gap: 1rem;--rt-table-container-placeholder-icon-size: 3rem;--rt-table-container-placeholder-title-size: 2rem}:host .table-container__selectors{display:flex;width:100%;flex-grow:1;align-items:center;justify-content:flex-start;margin:var(--rt-table-container-selectors-margin);gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__selectors-label{color:var(--rt-table-container-selector-label-color)}:host .table-container__selectors-label:hover{color:var(--rt-table-container-selector-label-hover-color)}:host .table-container__selectors-counter{color:var(--rt-table-container-selector-counter-color);font-size:var(--rt-table-container-selector-counter-font-size)}:host .table-container__toolbar{display:flex;width:100%;align-items:center;justify-content:flex-end}:host .table-container__toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__toolbar-actions>:last-child{margin-right:var(--rt-table-container-toolbar-actions-last-child-margin-right)}:host .table-container__toolbar-actions-divider{height:var(--rt-table-container-toolbar-actions-divider-height);border-left:var(--rt-table-container-toolbar-actions-divider-border-left)}:host .table-container__toolbar-action{position:relative;display:inline-flex;align-items:center;justify-content:center;border:0;background-color:transparent;color:var(--rt-table-container-toolbar-action-color);line-height:1;transition:all .15s linear}:host .table-container__toolbar-action:hover{color:var(--rt-table-container-toolbar-action-hover-color)}:host .table-container__toolbar-action:hover svg g{fill:var(--rt-table-container-toolbar-action-hover-color)}:host .table-container__toolbar-search{width:var(--rt-table-container-toolbar-search-width)}:host .table-container__content{overflow:auto;width:100%;flex-grow:1;padding:var(--rt-table-container-content-padding)}:host .table-container__content::-webkit-scrollbar{width:var(--rt-table-container-content-scrollbar-vertical-width);height:var(--rt-table-container-content-scrollbar-horizontal-height)}:host .table-container__placeholder{display:flex;width:var(--rt-table-container-placeholder-width);height:var(--rt-table-container-placeholder-height);flex-direction:column;align-items:center;justify-content:center;gap:var(--rt-table-container-placeholder-gap)}:host .table-container__placeholder-icon{width:var(--rt-table-container-placeholder-icon-size);height:var(--rt-table-container-placeholder-icon-size);font-size:var(--rt-table-container-placeholder-icon-size)}:host .table-container__placeholder-title{font-size:var(--rt-table-container-placeholder-title-size)}@media screen and (max-width:719px){:host{--rt-table-container-toolbar-actions-last-child-margin-right: 0}:host rtui-toolbar{--rt-toolbar-body-height: 6.5rem;--rt-toolbar-body-mobile-height: 6.5rem;--rt-toolbar-bars-center-width: 0;--rt-toolbar-bars-right-width: 100%}:host .table-container__toolbar{flex-direction:column-reverse;gap:var(--rt-table-container-toolbar-mobile-gap)}:host .table-container__toolbar-actions{width:100%;justify-content:center}:host .table-container__toolbar-actions--end{--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;justify-content:flex-end}:host .table-container__toolbar-search{width:100%;justify-content:center;grid-row:1}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
|
|
3982
4188
|
// Material
|
|
3983
4189
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type:
|
|
3984
4190
|
// Standalone components
|
|
@@ -3990,7 +4196,8 @@ class RtuiTableContainerComponent {
|
|
|
3990
4196
|
}
|
|
3991
4197
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiTableContainerComponent, decorators: [{
|
|
3992
4198
|
type: Component,
|
|
3993
|
-
args: [{ selector: 'rtui-table-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4199
|
+
args: [{ selector: 'rtui-table-container', host: { class: BEM_BLOCK$8 }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4200
|
+
ConcatClassesPipe,
|
|
3994
4201
|
ReactiveFormsModule,
|
|
3995
4202
|
NgTemplateOutlet,
|
|
3996
4203
|
// Material
|
|
@@ -4019,8 +4226,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4019
4226
|
RtuiScrollableContainerHeaderDirective,
|
|
4020
4227
|
RtIconOutlinedDirective,
|
|
4021
4228
|
RtuiToolbarLeftDirective,
|
|
4022
|
-
], providers: [BreakpointService, RtAsideService, PlatformService], template: "@if (loading()) {\n <rtui-spinner />\n} @else {\n @if (fetching()) {\n <rtui-spinner [showBackground]=\"true\" />\n }\n <ng-container rtBlock=\"table-container\">\n <rtui-scrollable>\n <ng-container *rtuiScrollableHeader>\n <rtui-toolbar>\n @if (isSmallTablet() && !isPlaceholderShown() && (isMultiSelect() || toolbarSelectorsTpl())) {\n <ng-container *rtuiToolbarLeft>\n <ng-template *ngTemplateOutlet=\"selectorsTpl\" />\n </ng-container>\n }\n\n <ng-container *rtuiToolbarRight>\n <div rtElem=\"toolbar\">\n <div rtElem=\"toolbar-actions\" [rtMod]=\"{ end: isMultiSelect() ?? toolbarSelectorsTpl() }\">\n @if (!isSmallTablet() && !isPlaceholderShown() && (isMultiSelect() || toolbarSelectorsTpl())) {\n <ng-template *ngTemplateOutlet=\"selectorsTpl\" />\n }\n\n @if (toolbarActionsTpl()) {\n <ng-template *ngTemplateOutlet=\"toolbarActionsTpl() ?? null\" />\n\n <div rtElem=\"toolbar-actions-divider\"></div>\n }\n\n @if (isFiltersShown()) {\n <button\n mat-mini-fab\n type=\"button\"\n aria-label=\"Icon-button for clear filters\"\n class=\"c-button c-button--fab\"\n matTooltip=\"Clear filters\"\n matTooltipPosition=\"below\"\n [matTooltipDisabled]=\"isMobile()\"\n [disabled]=\"isFiltersEmpty()\"\n (click)=\"onClearFilters()\">\n <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">block</mat-icon>\n </button>\n }\n\n @if (isRefreshButtonShown()) {\n <button\n mat-mini-fab\n type=\"button\"\n aria-label=\"Icon-button for table refresh\"\n class=\"c-button c-button--fab\"\n matTooltip=\"Refresh\"\n matTooltipPosition=\"below\"\n [matTooltipDisabled]=\"isMobile()\"\n (click)=\"onRefresh()\">\n <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">sync</mat-icon>\n </button>\n }\n\n @if (isTableConfigButtonShown()) {\n <button\n mat-mini-fab\n type=\"button\"\n aria-label=\"Icon-button for table config\"\n class=\"c-button c-button--fab\"\n matTooltip=\"Table configuration\"\n matTooltipPosition=\"below\"\n [matTooltipDisabled]=\"isMobile()\"\n (click)=\"onOpenConfigAside()\">\n <mat-icon [rtIconOutlined]=\"isToolbarActionsIconsOutlined()\">view_column</mat-icon>\n </button>\n }\n </div>\n\n @if ((isPlaceholderShown() && searchControl.value) || !isPlaceholderShown() || searchControl.dirty) {\n <div rtElem=\"toolbar-search\">\n <mat-form-field subscriptSizing=\"dynamic\" [appearance]=\"appearance()\" [style.width.%]=\"100\">\n <input matInput placeholder=\"Search...\" type=\"text\" [formControl]=\"searchControl\" />\n\n <mat-icon matPrefix [rtIconOutlined]=\"true\">search</mat-icon>\n\n <rtui-clear-button\n matSuffix\n [isButtonShown]=\"!!searchControl.value\"\n (clickAction)=\"onClearSearch()\" />\n </mat-form-field>\n </div>\n }\n </div>\n </ng-container>\n </rtui-toolbar>\n </ng-container>\n\n <ng-container *rtuiScrollableContent>\n @if (!isPlaceholderShown() || pageModel()?.totalCount) {\n <div rtElem=\"content\">\n <ng-content />\n </div>\n\n @if (isPaginationShown()) {\n <div rtElem=\"pagination\">\n <rtui-pagination\n [isMobile]=\"!!isMobile()\"\n [currentPageModel]=\"pageModel()\"\n (pageModelChange)=\"onPageModelChange($event)\" />\n </div>\n }\n } @else {\n <div rtElem=\"placeholder\">\n <mat-icon rtElem=\"placeholder-icon\" [rtIconOutlined]=\"true\">{{ placeholderIcon() }}</mat-icon>\n\n <div rtElem=\"placeholder-title\">{{ placeholderTitle() }}</div>\n </div>\n }\n </ng-container>\n </rtui-scrollable>\n\n <ng-template #selectorsTpl>\n <div rtElem=\"selectors\">\n @if (isMultiSelect()) {\n @if (isSelectAllSelectorShown()) {\n <mat-checkbox\n [checked]=\"isAllEntitiesSelected()\"\n [indeterminate]=\"!isAllEntitiesSelected() && isAllEntitiesIndeterminate()\"\n [disabled]=\"isSelectAllSelectorDisabled()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onToggleAllEntities($event.checked)\">\n <div rtElem=\"selectors-label\">Select all</div>\n </mat-checkbox>\n } @else {\n <div rtElem=\"selectors-counter\">Selected: {{ selectedEntitiesCount() }}</div>\n }\n }\n\n @if (toolbarSelectorsTpl()) {\n <ng-template *ngTemplateOutlet=\"toolbarSelectorsTpl() ?? null\" />\n }\n </div>\n </ng-template>\n </ng-container>\n}\n", styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;overflow:hidden;width:100%}:host ::-webkit-scrollbar-track:hover{border:1px solid var(--rt-border-neutral-subtle)}:host ::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:var(--rt-radius-sm);background:var(--rt-scrollbar-thumb);background-clip:content-box}:host ::-webkit-scrollbar-thumb:hover{border:2px solid transparent;background:var(--rt-scrollbar-thumb-hover);background-clip:content-box}:host rtui-toolbar{--rt-toolbar-body-padding: 0;--rt-toolbar-bars-border-bottom-width: 0}:host rtui-scrollable{--rt-scrollable-header-padding: 1rem 0 0 0;--rt-scrollable-content-padding: 1rem 0 0 0;--rt-scrollable-host-background-color: transparent;--rt-scrollable-header-background-color: transparent;--rt-scrollable-content-background-color: transparent}:host{--mat-fab-small-container-shape: 50%;--mat-fab-small-hover-state-layer-opacity: 0;--mat-fab-small-pressed-state-layer-opacity: 0;--mat-fab-small-focus-state-layer-opacity: 0;--rt-table-container-selectors-margin: 0 .65rem;--rt-table-container-selector-label-color: var(--rt-text-base-secondary);--rt-table-container-selector-label-hover-color: var(--rt-text-base-strong);--rt-table-container-selector-counter-color: var(--rt-text-base-secondary);--rt-table-container-selector-counter-font-size: .875rem;--rt-table-container-toolbar-mobile-gap: 1rem;--rt-table-container-toolbar-actions-gap: 1rem;--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;--rt-table-container-toolbar-actions-divider-height: 2rem;--rt-table-container-toolbar-actions-divider-border-left: 1px solid var(--rt-border-neutral-divider);--rt-table-container-toolbar-search-width: 22rem;--rt-table-container-content-padding: 0;--rt-table-container-placeholder-width: 100%;--rt-table-container-placeholder-height: 100vh;--rt-table-container-placeholder-gap: 1rem;--rt-table-container-placeholder-icon-size: 3rem;--rt-table-container-placeholder-title-size: 2rem}:host .table-container__selectors{display:flex;width:100%;flex-grow:1;align-items:center;justify-content:flex-start;margin:var(--rt-table-container-selectors-margin);gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__selectors-label{color:var(--rt-table-container-selector-label-color)}:host .table-container__selectors-label:hover{color:var(--rt-table-container-selector-label-hover-color)}:host .table-container__selectors-counter{color:var(--rt-table-container-selector-counter-color);font-size:var(--rt-table-container-selector-counter-font-size)}:host .table-container__toolbar{display:flex;width:100%;align-items:center;justify-content:flex-end}:host .table-container__toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__toolbar-actions>:last-child{margin-right:var(--rt-table-container-toolbar-actions-last-child-margin-right)}:host .table-container__toolbar-actions-divider{height:var(--rt-table-container-toolbar-actions-divider-height);border-left:var(--rt-table-container-toolbar-actions-divider-border-left)}:host .table-container__toolbar-search{width:var(--rt-table-container-toolbar-search-width)}:host .table-container__content{overflow:auto;width:100%;flex-grow:1;padding:var(--rt-table-container-content-padding)}:host .table-container__content::-webkit-scrollbar{width:var(--rt-table-container-content-scrollbar-vertical-width);height:var(--rt-table-container-content-scrollbar-horizontal-height)}:host .table-container__placeholder{display:flex;width:var(--rt-table-container-placeholder-width);height:var(--rt-table-container-placeholder-height);flex-direction:column;align-items:center;justify-content:center;gap:var(--rt-table-container-placeholder-gap)}:host .table-container__placeholder-icon{width:var(--rt-table-container-placeholder-icon-size);height:var(--rt-table-container-placeholder-icon-size);font-size:var(--rt-table-container-placeholder-icon-size)}:host .table-container__placeholder-title{font-size:var(--rt-table-container-placeholder-title-size)}@media screen and (max-width:719px){:host{--rt-table-container-toolbar-actions-last-child-margin-right: 0}:host rtui-toolbar{--rt-toolbar-body-height: 6.5rem;--rt-toolbar-body-mobile-height: 6.5rem;--rt-toolbar-bars-center-width: 0;--rt-toolbar-bars-right-width: 100%}:host .table-container__toolbar{flex-direction:column-reverse;gap:var(--rt-table-container-toolbar-mobile-gap)}:host .table-container__toolbar-actions{width:100%;justify-content:center}:host .table-container__toolbar-actions--end{--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;justify-content:flex-end}:host .table-container__toolbar-search{width:100%;justify-content:center;grid-row:1}}\n"] }]
|
|
4023
|
-
}], propDecorators: { appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: true }] }], tableConfigStorageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableConfigStorageKey", required: true }] }], pageModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageModel", required: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
4229
|
+
], providers: [BreakpointService, RtAsideService, PlatformService], template: "@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 rtElem=\"pagination\">\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", styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;overflow:hidden;width:100%}:host ::-webkit-scrollbar-track:hover{border:1px solid var(--rt-border-neutral-subtle)}:host ::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:var(--rt-radius-sm);background:var(--rt-scrollbar-thumb);background-clip:content-box}:host ::-webkit-scrollbar-thumb:hover{border:2px solid transparent;background:var(--rt-scrollbar-thumb-hover);background-clip:content-box}:host rtui-toolbar{--rt-toolbar-body-padding: 0;--rt-toolbar-bars-border-bottom-width: 0}:host rtui-scrollable{--rt-scrollable-header-padding: 1rem 0 0 0;--rt-scrollable-content-padding: 1rem 0 0 0;--rt-scrollable-host-background-color: transparent;--rt-scrollable-header-background-color: transparent;--rt-scrollable-content-background-color: transparent}:host{--mat-fab-small-container-shape: 50%;--mat-fab-small-hover-state-layer-opacity: 0;--mat-fab-small-pressed-state-layer-opacity: 0;--mat-fab-small-focus-state-layer-opacity: 0;--rt-table-container-selectors-margin: 0 .65rem;--rt-table-container-selector-label-color: var(--rt-text-base-secondary);--rt-table-container-selector-label-hover-color: var(--rt-text-base-strong);--rt-table-container-selector-counter-color: var(--rt-text-base-secondary);--rt-table-container-selector-counter-font-size: .875rem;--rt-table-container-toolbar-mobile-gap: 1rem;--rt-table-container-toolbar-actions-gap: 1rem;--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;--rt-table-container-toolbar-actions-divider-height: 2rem;--rt-table-container-toolbar-actions-divider-border-left: 1px solid var(--rt-border-neutral-divider);--rt-table-container-toolbar-action-color: var(--rt-color-neutral-60);--rt-table-container-toolbar-action-hover-color: var(--rt-color-neutral-100);--rt-table-container-toolbar-search-width: 22rem;--rt-table-container-content-padding: 0;--rt-table-container-placeholder-width: 100%;--rt-table-container-placeholder-height: 100vh;--rt-table-container-placeholder-gap: 1rem;--rt-table-container-placeholder-icon-size: 3rem;--rt-table-container-placeholder-title-size: 2rem}:host .table-container__selectors{display:flex;width:100%;flex-grow:1;align-items:center;justify-content:flex-start;margin:var(--rt-table-container-selectors-margin);gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__selectors-label{color:var(--rt-table-container-selector-label-color)}:host .table-container__selectors-label:hover{color:var(--rt-table-container-selector-label-hover-color)}:host .table-container__selectors-counter{color:var(--rt-table-container-selector-counter-color);font-size:var(--rt-table-container-selector-counter-font-size)}:host .table-container__toolbar{display:flex;width:100%;align-items:center;justify-content:flex-end}:host .table-container__toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--rt-table-container-toolbar-actions-gap)}:host .table-container__toolbar-actions>:last-child{margin-right:var(--rt-table-container-toolbar-actions-last-child-margin-right)}:host .table-container__toolbar-actions-divider{height:var(--rt-table-container-toolbar-actions-divider-height);border-left:var(--rt-table-container-toolbar-actions-divider-border-left)}:host .table-container__toolbar-action{position:relative;display:inline-flex;align-items:center;justify-content:center;border:0;background-color:transparent;color:var(--rt-table-container-toolbar-action-color);line-height:1;transition:all .15s linear}:host .table-container__toolbar-action:hover{color:var(--rt-table-container-toolbar-action-hover-color)}:host .table-container__toolbar-action:hover svg g{fill:var(--rt-table-container-toolbar-action-hover-color)}:host .table-container__toolbar-search{width:var(--rt-table-container-toolbar-search-width)}:host .table-container__content{overflow:auto;width:100%;flex-grow:1;padding:var(--rt-table-container-content-padding)}:host .table-container__content::-webkit-scrollbar{width:var(--rt-table-container-content-scrollbar-vertical-width);height:var(--rt-table-container-content-scrollbar-horizontal-height)}:host .table-container__placeholder{display:flex;width:var(--rt-table-container-placeholder-width);height:var(--rt-table-container-placeholder-height);flex-direction:column;align-items:center;justify-content:center;gap:var(--rt-table-container-placeholder-gap)}:host .table-container__placeholder-icon{width:var(--rt-table-container-placeholder-icon-size);height:var(--rt-table-container-placeholder-icon-size);font-size:var(--rt-table-container-placeholder-icon-size)}:host .table-container__placeholder-title{font-size:var(--rt-table-container-placeholder-title-size)}@media screen and (max-width:719px){:host{--rt-table-container-toolbar-actions-last-child-margin-right: 0}:host rtui-toolbar{--rt-toolbar-body-height: 6.5rem;--rt-toolbar-body-mobile-height: 6.5rem;--rt-toolbar-bars-center-width: 0;--rt-toolbar-bars-right-width: 100%}:host .table-container__toolbar{flex-direction:column-reverse;gap:var(--rt-table-container-toolbar-mobile-gap)}:host .table-container__toolbar-actions{width:100%;justify-content:center}:host .table-container__toolbar-actions--end{--rt-table-container-toolbar-actions-last-child-margin-right: 1rem;justify-content:flex-end}:host .table-container__toolbar-search{width:100%;justify-content:center;grid-row:1}}\n"] }]
|
|
4230
|
+
}], propDecorators: { appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: true }] }], tableConfigStorageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableConfigStorageKey", required: true }] }], pageModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageModel", required: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: true }] }], fetching: [{ type: i0.Input, args: [{ isSignal: true, alias: "fetching", required: true }] }], isPlaceholderShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlaceholderShown", required: true }] }], isPaginationShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPaginationShown", required: false }] }], isRefreshButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isRefreshButtonShown", required: false }] }], isTableConfigButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isTableConfigButtonShown", required: false }] }], isToolbarActionsIconsOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isToolbarActionsIconsOutlined", required: false }] }], isFiltersShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFiltersShown", required: false }] }], isFiltersEmpty: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFiltersEmpty", required: false }] }], searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: false }] }], placeholderIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholderIcon", required: false }] }], placeholderTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholderTitle", required: false }] }], pageModelChange: [{ type: i0.Output, args: ["pageModelChange"] }], searchChange: [{ type: i0.Output, args: ["searchChange"] }], refreshAction: [{ type: i0.Output, args: ["refreshAction"] }], clearFiltersAction: [{ type: i0.Output, args: ["clearFiltersAction"] }], toolbarSelectorsTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiTableToolbarSelectorsDirective), { ...{
|
|
4024
4231
|
read: TemplateRef,
|
|
4025
4232
|
}, isSignal: true }] }], toolbarActionsTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiTableToolbarActionsDirective), { ...{
|
|
4026
4233
|
read: TemplateRef,
|
|
@@ -4084,12 +4291,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4084
4291
|
selector: '[rtuiDynamicListRowAdditionalActionsDirective]',
|
|
4085
4292
|
}]
|
|
4086
4293
|
}] });
|
|
4294
|
+
const BEM_BLOCK$7 = 'rtui-dynamic-list';
|
|
4087
4295
|
class RtuiDynamicListComponent {
|
|
4088
4296
|
constructor() {
|
|
4297
|
+
this.#breakpoints = inject(BreakpointService);
|
|
4089
4298
|
/** Table config storage key */
|
|
4090
4299
|
this.tableConfigStorageKey = input.required({ ...(ngDevMode ? { debugName: "tableConfigStorageKey" } : /* istanbul ignore next */ {}), transform: transformStringInput });
|
|
4091
|
-
/**
|
|
4092
|
-
|
|
4300
|
+
/**
|
|
4301
|
+
* Признак узкого экрана.
|
|
4302
|
+
*
|
|
4303
|
+
* @deprecated Кит определяет его сам — `BreakpointService` из `@rt-tools/core`. Вход
|
|
4304
|
+
* оставлен ради приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
4305
|
+
*/
|
|
4306
|
+
this.isMobile = input(null, /* @ts-ignore */
|
|
4307
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
4308
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
4309
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
4310
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
4093
4311
|
/** Indicates is loading in progress */
|
|
4094
4312
|
this.loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
4095
4313
|
/** Indicates is fetching in progress */
|
|
@@ -4161,6 +4379,7 @@ class RtuiDynamicListComponent {
|
|
|
4161
4379
|
this.tableTpl = viewChild(RtuiTableComponent, /* @ts-ignore */
|
|
4162
4380
|
...(ngDevMode ? [{ debugName: "tableTpl" }] : /* istanbul ignore next */ []));
|
|
4163
4381
|
}
|
|
4382
|
+
#breakpoints;
|
|
4164
4383
|
/** Search change output action */
|
|
4165
4384
|
onSearchChange(value) {
|
|
4166
4385
|
this.searchChange.emit(value);
|
|
@@ -4194,7 +4413,7 @@ class RtuiDynamicListComponent {
|
|
|
4194
4413
|
this.rowDoubleClick.emit(row);
|
|
4195
4414
|
}
|
|
4196
4415
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4197
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicListComponent, isStandalone: true, selector: "rtui-dynamic-list", inputs: { tableConfigStorageKey: { classPropertyName: "tableConfigStorageKey", publicName: "tableConfigStorageKey", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, isTableRowsClickable: { classPropertyName: "isTableRowsClickable", publicName: "isTableRowsClickable", isSignal: true, isRequired: false, transformFunction: null }, isPaginationShown: { classPropertyName: "isPaginationShown", publicName: "isPaginationShown", isSignal: true, isRequired: false, transformFunction: null }, isRefreshButtonShown: { classPropertyName: "isRefreshButtonShown", publicName: "isRefreshButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isTableConfigButtonShown: { classPropertyName: "isTableConfigButtonShown", publicName: "isTableConfigButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isToolbarActionsIconsOutlined: { classPropertyName: "isToolbarActionsIconsOutlined", publicName: "isToolbarActionsIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: false, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, pageModel: { classPropertyName: "pageModel", publicName: "pageModel", isSignal: true, isRequired: true, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: true, transformFunction: null }, currentSortModel: { classPropertyName: "currentSortModel", publicName: "currentSortModel", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, filterAppearance: { classPropertyName: "filterAppearance", publicName: "filterAppearance", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, isFiltersShown: { classPropertyName: "isFiltersShown", publicName: "isFiltersShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange", pageModelChange: "pageModelChange", searchChange: "searchChange", refresh: "refresh", clearFiltersAction: "clearFiltersAction", rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", filterChange: "filterChange" }, queries: [{ propertyName: "toolbarSelectorsTpl", first: true, predicate: RtuiDynamicListToolbarSelectorsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "toolbarActionsTpl", first: true, predicate: RtuiDynamicListToolbarActionsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "customCellsTpl", first: true, predicate: RtuiDynamicListCustomTableCellsDirective, descendants: true, isSignal: true }, { propertyName: "rowActionsTpl", first: true, predicate: RtuiDynamicListRowActionsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "additionalRowActionsTpl", first: true, predicate: RtuiDynamicListRowAdditionalActionsDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "tableContainerTpl", first: true, predicate: RtuiTableContainerComponent, descendants: true, isSignal: true }, { propertyName: "tableTpl", first: true, predicate: RtuiTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<rtui-table-container\n [tableConfigStorageKey]=\"tableConfigStorageKey()\"\n [loading]=\"loading()\"\n [fetching]=\"fetching()\"\n [
|
|
4416
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiDynamicListComponent, isStandalone: true, selector: "rtui-dynamic-list", inputs: { tableConfigStorageKey: { classPropertyName: "tableConfigStorageKey", publicName: "tableConfigStorageKey", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, isTableRowsClickable: { classPropertyName: "isTableRowsClickable", publicName: "isTableRowsClickable", isSignal: true, isRequired: false, transformFunction: null }, isPaginationShown: { classPropertyName: "isPaginationShown", publicName: "isPaginationShown", isSignal: true, isRequired: false, transformFunction: null }, isRefreshButtonShown: { classPropertyName: "isRefreshButtonShown", publicName: "isRefreshButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isTableConfigButtonShown: { classPropertyName: "isTableConfigButtonShown", publicName: "isTableConfigButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isToolbarActionsIconsOutlined: { classPropertyName: "isToolbarActionsIconsOutlined", publicName: "isToolbarActionsIconsOutlined", isSignal: true, isRequired: false, transformFunction: null }, keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: false, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, pageModel: { classPropertyName: "pageModel", publicName: "pageModel", isSignal: true, isRequired: true, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: true, transformFunction: null }, currentSortModel: { classPropertyName: "currentSortModel", publicName: "currentSortModel", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: true, transformFunction: null }, filterAppearance: { classPropertyName: "filterAppearance", publicName: "filterAppearance", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, isFiltersShown: { classPropertyName: "isFiltersShown", publicName: "isFiltersShown", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange", pageModelChange: "pageModelChange", searchChange: "searchChange", refresh: "refresh", clearFiltersAction: "clearFiltersAction", rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", filterChange: "filterChange" }, host: { classAttribute: "rtui-dynamic-list" }, providers: [BreakpointService], queries: [{ propertyName: "toolbarSelectorsTpl", first: true, predicate: RtuiDynamicListToolbarSelectorsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "toolbarActionsTpl", first: true, predicate: RtuiDynamicListToolbarActionsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "customCellsTpl", first: true, predicate: RtuiDynamicListCustomTableCellsDirective, descendants: true, isSignal: true }, { propertyName: "rowActionsTpl", first: true, predicate: RtuiDynamicListRowActionsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "additionalRowActionsTpl", first: true, predicate: RtuiDynamicListRowAdditionalActionsDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "tableContainerTpl", first: true, predicate: RtuiTableContainerComponent, descendants: true, isSignal: true }, { propertyName: "tableTpl", first: true, predicate: RtuiTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [":host{display:flex;overflow:hidden;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type:
|
|
4198
4417
|
// Directives
|
|
4199
4418
|
RtuiTableToolbarActionsDirective, selector: "[rtuiTableToolbarActionsDirective]" }, { kind: "directive", type: RtuiTableRowActionsDirective, selector: "[rtuiTabletRowActionsDirective]" }, { kind: "directive", type: RtuiTableToolbarSelectorsDirective, selector: "[rtuiTableToolbarSelectorsDirective]" }, { kind: "directive", type: RtuiTableAdditionalRowActionsDirective, selector: "[rtuiTableAdditionalRowActionsDirective]" }, { kind: "component", type:
|
|
4200
4419
|
// Ui-kit
|
|
@@ -4202,7 +4421,7 @@ class RtuiDynamicListComponent {
|
|
|
4202
4421
|
}
|
|
4203
4422
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiDynamicListComponent, decorators: [{
|
|
4204
4423
|
type: Component,
|
|
4205
|
-
args: [{ selector: 'rtui-dynamic-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4424
|
+
args: [{ selector: 'rtui-dynamic-list', host: { class: BEM_BLOCK$7 }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4206
4425
|
NgTemplateOutlet,
|
|
4207
4426
|
// Directives
|
|
4208
4427
|
RtuiTableToolbarActionsDirective,
|
|
@@ -4213,7 +4432,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4213
4432
|
RtuiTableContainerComponent,
|
|
4214
4433
|
RtuiTableComponent,
|
|
4215
4434
|
RtuiCustomTableCellsDirective,
|
|
4216
|
-
], template: "<rtui-table-container\n [tableConfigStorageKey]=\"tableConfigStorageKey()\"\n [loading]=\"loading()\"\n [fetching]=\"fetching()\"\n [
|
|
4435
|
+
], template: "<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", styles: [":host{display:flex;overflow:hidden;width:100%;height:100%}\n"] }]
|
|
4217
4436
|
}], propDecorators: { tableConfigStorageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableConfigStorageKey", required: true }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], fetching: [{ type: i0.Input, args: [{ isSignal: true, alias: "fetching", required: false }] }], isTableRowsClickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isTableRowsClickable", required: false }] }], isPaginationShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPaginationShown", required: false }] }], isRefreshButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isRefreshButtonShown", required: false }] }], isTableConfigButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isTableConfigButtonShown", required: false }] }], isToolbarActionsIconsOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isToolbarActionsIconsOutlined", required: false }] }], keyExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyExp", required: false }] }], entities: [{ type: i0.Input, args: [{ isSignal: true, alias: "entities", required: true }] }], pageModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageModel", required: true }] }], searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: true }] }], currentSortModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSortModel", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: true }] }], filterAppearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterAppearance", required: false }] }], filterModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterModel", required: false }] }], isFiltersShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFiltersShown", required: false }] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], pageModelChange: [{ type: i0.Output, args: ["pageModelChange"] }], searchChange: [{ type: i0.Output, args: ["searchChange"] }], refresh: [{ type: i0.Output, args: ["refresh"] }], clearFiltersAction: [{ type: i0.Output, args: ["clearFiltersAction"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowDoubleClick: [{ type: i0.Output, args: ["rowDoubleClick"] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }], toolbarSelectorsTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicListToolbarSelectorsDirective), { ...{
|
|
4218
4437
|
read: TemplateRef,
|
|
4219
4438
|
}, isSignal: true }] }], toolbarActionsTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicListToolbarActionsDirective), { ...{
|
|
@@ -4224,6 +4443,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4224
4443
|
read: TemplateRef,
|
|
4225
4444
|
}, isSignal: true }] }], tableContainerTpl: [{ type: i0.ViewChild, args: [i0.forwardRef(() => RtuiTableContainerComponent), { isSignal: true }] }], tableTpl: [{ type: i0.ViewChild, args: [i0.forwardRef(() => RtuiTableComponent), { isSignal: true }] }] } });
|
|
4226
4445
|
|
|
4446
|
+
const BEM_BLOCK$6 = 'rtui-popover-container';
|
|
4227
4447
|
class RtuiPopoverContainerComponent {
|
|
4228
4448
|
constructor() {
|
|
4229
4449
|
this.#sanitizer = inject(DomSanitizer);
|
|
@@ -4235,11 +4455,11 @@ class RtuiPopoverContainerComponent {
|
|
|
4235
4455
|
return this.#sanitizer.sanitize(1, this.popoverClass());
|
|
4236
4456
|
}
|
|
4237
4457
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiPopoverContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4238
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiPopoverContainerComponent, isStandalone: true, selector: "rtui-popover-container", inputs: { popoverTemplate: { classPropertyName: "popoverTemplate", publicName: "popoverTemplate", isSignal: true, isRequired: false, transformFunction: null }, popoverClass: { classPropertyName: "popoverClass", publicName: "popoverClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.className" } }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"popoverTemplate() || null\" />\n", styles: [":host{position:absolute;display:block;width:fit-content;padding-top:var(--rt-spacing-20);text-align:left;transition:transform .1s,opacity .5s}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4458
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiPopoverContainerComponent, isStandalone: true, selector: "rtui-popover-container", inputs: { popoverTemplate: { classPropertyName: "popoverTemplate", publicName: "popoverTemplate", isSignal: true, isRequired: false, transformFunction: null }, popoverClass: { classPropertyName: "popoverClass", publicName: "popoverClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.className" }, classAttribute: "rtui-popover-container" }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"popoverTemplate() || null\" />\n", styles: [":host{position:absolute;display:block;width:fit-content;padding-top:var(--rt-spacing-20);text-align:left;transition:transform .1s,opacity .5s}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4239
4459
|
}
|
|
4240
4460
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiPopoverContainerComponent, decorators: [{
|
|
4241
4461
|
type: Component,
|
|
4242
|
-
args: [{ selector: 'rtui-popover-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], template: "<ng-container *ngTemplateOutlet=\"popoverTemplate() || null\" />\n", styles: [":host{position:absolute;display:block;width:fit-content;padding-top:var(--rt-spacing-20);text-align:left;transition:transform .1s,opacity .5s}\n"] }]
|
|
4462
|
+
args: [{ selector: 'rtui-popover-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], host: { class: BEM_BLOCK$6 }, template: "<ng-container *ngTemplateOutlet=\"popoverTemplate() || null\" />\n", styles: [":host{position:absolute;display:block;width:fit-content;padding-top:var(--rt-spacing-20);text-align:left;transition:transform .1s,opacity .5s}\n"] }]
|
|
4243
4463
|
}], propDecorators: { popoverTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverTemplate", required: false }] }], popoverClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverClass", required: false }] }], className: [{
|
|
4244
4464
|
type: HostBinding,
|
|
4245
4465
|
args: ['class']
|
|
@@ -4385,6 +4605,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4385
4605
|
args: ['mouseleave']
|
|
4386
4606
|
}] } });
|
|
4387
4607
|
|
|
4608
|
+
const BEM_BLOCK$5 = 'rtui-action-bar';
|
|
4388
4609
|
class RtuiActionBarComponent {
|
|
4389
4610
|
constructor() {
|
|
4390
4611
|
this.#breakpointService = inject(BreakpointService);
|
|
@@ -4405,7 +4626,7 @@ class RtuiActionBarComponent {
|
|
|
4405
4626
|
}
|
|
4406
4627
|
}
|
|
4407
4628
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiActionBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4408
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiActionBarComponent, isStandalone: true, selector: "rtui-action-bar", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closeAction: "closeAction" }, providers: [BreakpointService], ngImport: i0, template: "<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 <
|
|
4629
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiActionBarComponent, isStandalone: true, selector: "rtui-action-bar", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closeAction: "closeAction" }, host: { classAttribute: "rtui-action-bar" }, providers: [BreakpointService], ngImport: i0, template: "<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", styles: ["@charset \"UTF-8\";.rtui-action-bar{display:flex;width:var(--rt-action-bar-bar-width);align-items:center;padding:var(--rt-action-bar-bar-padding);border-radius:var(--rt-action-bar-bar-border-radius);background-color:var(--rt-action-bar-bar-background-color);box-shadow:var(--rt-action-bar-bar-box-shadow);color:var(--rt-action-bar-bar-color);gap:var(--rt-action-bar-bar-gap)}.rtui-action-bar__counter{font-size:var(--rt-action-bar-counter-font-size);font-weight:var(--rt-action-bar-counter-font-weight)}.rtui-action-bar__actions{display:flex;gap:var(--rt-action-bar-actions-gap)}.rtui-action-bar__action{display:flex;align-items:center;justify-content:center;padding:var(--rt-action-bar-action-padding);border:0;border-radius:var(--rt-action-bar-action-border-radius);background-color:transparent;color:inherit;cursor:pointer;font-family:inherit;font-size:var(--rt-action-bar-action-font-size);font-weight:var(--rt-action-bar-action-font-weight);gap:var(--rt-action-bar-action-gap)}.rtui-action-bar__action:hover{background-color:var(--rt-action-bar-action-hover-background-color)}.rtui-action-bar__close-button{display:flex;align-items:center;padding:0;border:0;margin-left:auto;background-color:transparent;color:inherit;cursor:pointer}.rtui-action-bar__close-button svg{transition:transform .2s ease}.rtui-action-bar__close-button svg:hover{transform:rotate(90deg)}@media screen and (max-width:959px){.rtui-action-bar{padding:var(--rt-action-bar-bar-mobile-padding);gap:var(--rt-action-bar-bar-mobile-gap)}.rtui-action-bar__actions{gap:var(--rt-action-bar-actions-mobile-gap)}.rtui-action-bar__action{padding:var(--rt-action-bar-action-mobile-padding);gap:var(--rt-action-bar-action-mobile-gap)}}.rtui-action-bar-action-menu{display:flex;flex-direction:column;padding:var(--rt-action-bar-action-menu-padding);border-radius:var(--rt-action-bar-action-border-radius);background-color:var(--rt-action-bar-action-menu-background-color);box-shadow:var(--rt-action-bar-action-menu-box-shadow);color:var(--rt-action-bar-action-menu-color);gap:var(--rt-action-bar-action-menu-gap)}.rtui-action-bar-action-menu__action{display:flex;align-items:center;justify-content:center;padding:var(--rt-action-bar-action-menu-action-padding);border:0;border-radius:var(--rt-action-bar-action-menu-action-border-radius);background-color:transparent;color:inherit;cursor:pointer;font-family:inherit;font-size:var(--rt-action-bar-action-menu-action-font-size);font-weight:var(--rt-action-bar-action-menu-action-font-weight);gap:var(--rt-action-bar-action-menu-action-gap)}.rtui-action-bar-action-menu__action:hover{background-color:var(--rt-action-bar-action-menu-action-hover-background-color)}@media screen and (max-width:959px){.rtui-action-bar-action-menu,.rtui-action-bar-action-menu__action{padding:var(--rt-action-bar-action-menu-action-mobile-padding);gap:var(--rt-action-bar-action-menu-action-mobile-gap)}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type:
|
|
4409
4630
|
// material
|
|
4410
4631
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
4411
4632
|
// rt-tools
|
|
@@ -4413,7 +4634,7 @@ class RtuiActionBarComponent {
|
|
|
4413
4634
|
}
|
|
4414
4635
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiActionBarComponent, decorators: [{
|
|
4415
4636
|
type: Component,
|
|
4416
|
-
args: [{ selector: 'rtui-action-bar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4637
|
+
args: [{ selector: 'rtui-action-bar', host: { class: BEM_BLOCK$5 }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4417
4638
|
NgTemplateOutlet,
|
|
4418
4639
|
NgStyle,
|
|
4419
4640
|
// material
|
|
@@ -4424,7 +4645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4424
4645
|
EmptyToDashPipe,
|
|
4425
4646
|
RtIconOutlinedDirective,
|
|
4426
4647
|
RtPopoverDirective,
|
|
4427
|
-
], providers: [BreakpointService], template: "<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 <
|
|
4648
|
+
], providers: [BreakpointService], template: "<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", styles: ["@charset \"UTF-8\";.rtui-action-bar{display:flex;width:var(--rt-action-bar-bar-width);align-items:center;padding:var(--rt-action-bar-bar-padding);border-radius:var(--rt-action-bar-bar-border-radius);background-color:var(--rt-action-bar-bar-background-color);box-shadow:var(--rt-action-bar-bar-box-shadow);color:var(--rt-action-bar-bar-color);gap:var(--rt-action-bar-bar-gap)}.rtui-action-bar__counter{font-size:var(--rt-action-bar-counter-font-size);font-weight:var(--rt-action-bar-counter-font-weight)}.rtui-action-bar__actions{display:flex;gap:var(--rt-action-bar-actions-gap)}.rtui-action-bar__action{display:flex;align-items:center;justify-content:center;padding:var(--rt-action-bar-action-padding);border:0;border-radius:var(--rt-action-bar-action-border-radius);background-color:transparent;color:inherit;cursor:pointer;font-family:inherit;font-size:var(--rt-action-bar-action-font-size);font-weight:var(--rt-action-bar-action-font-weight);gap:var(--rt-action-bar-action-gap)}.rtui-action-bar__action:hover{background-color:var(--rt-action-bar-action-hover-background-color)}.rtui-action-bar__close-button{display:flex;align-items:center;padding:0;border:0;margin-left:auto;background-color:transparent;color:inherit;cursor:pointer}.rtui-action-bar__close-button svg{transition:transform .2s ease}.rtui-action-bar__close-button svg:hover{transform:rotate(90deg)}@media screen and (max-width:959px){.rtui-action-bar{padding:var(--rt-action-bar-bar-mobile-padding);gap:var(--rt-action-bar-bar-mobile-gap)}.rtui-action-bar__actions{gap:var(--rt-action-bar-actions-mobile-gap)}.rtui-action-bar__action{padding:var(--rt-action-bar-action-mobile-padding);gap:var(--rt-action-bar-action-mobile-gap)}}.rtui-action-bar-action-menu{display:flex;flex-direction:column;padding:var(--rt-action-bar-action-menu-padding);border-radius:var(--rt-action-bar-action-border-radius);background-color:var(--rt-action-bar-action-menu-background-color);box-shadow:var(--rt-action-bar-action-menu-box-shadow);color:var(--rt-action-bar-action-menu-color);gap:var(--rt-action-bar-action-menu-gap)}.rtui-action-bar-action-menu__action{display:flex;align-items:center;justify-content:center;padding:var(--rt-action-bar-action-menu-action-padding);border:0;border-radius:var(--rt-action-bar-action-menu-action-border-radius);background-color:transparent;color:inherit;cursor:pointer;font-family:inherit;font-size:var(--rt-action-bar-action-menu-action-font-size);font-weight:var(--rt-action-bar-action-menu-action-font-weight);gap:var(--rt-action-bar-action-menu-action-gap)}.rtui-action-bar-action-menu__action:hover{background-color:var(--rt-action-bar-action-menu-action-hover-background-color)}@media screen and (max-width:959px){.rtui-action-bar-action-menu,.rtui-action-bar-action-menu__action{padding:var(--rt-action-bar-action-menu-action-mobile-padding);gap:var(--rt-action-bar-action-menu-action-mobile-gap)}}\n"] }]
|
|
4428
4649
|
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], closeAction: [{ type: i0.Output, args: ["closeAction"] }] } });
|
|
4429
4650
|
|
|
4430
4651
|
class RtActionBarService {
|
|
@@ -4448,6 +4669,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4448
4669
|
type: Injectable
|
|
4449
4670
|
}] });
|
|
4450
4671
|
|
|
4672
|
+
const BEM_BLOCK$4 = 'rtui-action-bar-container';
|
|
4451
4673
|
class RtuiActionBarContainerComponent {
|
|
4452
4674
|
constructor() {
|
|
4453
4675
|
this.#actionBarService = inject(RtActionBarService);
|
|
@@ -4458,7 +4680,7 @@ class RtuiActionBarContainerComponent {
|
|
|
4458
4680
|
this.#actionBarService.closeActionBar();
|
|
4459
4681
|
}
|
|
4460
4682
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiActionBarContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4461
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiActionBarContainerComponent, isStandalone: true, selector: "rtui-action-bar-container", ngImport: i0, template: "@if (config()?.selected) {\n <rtui-action-bar [@barState]=\"'opened'\" [config]=\"config()\" (closeAction)=\"closeBar()\" />\n}\n", styles: [":host{position:fixed;z-index:var(--rt-action-bar-container-z-index);display:flex;width:var(--rt-action-bar-container-width);align-items:center;justify-content:center;inset:var(--rt-action-bar-container-top) var(--rt-action-bar-container-right) var(--rt-action-bar-container-bottom) var(--rt-action-bar-container-left)}\n"], dependencies: [{ kind: "component", type: RtuiActionBarComponent, selector: "rtui-action-bar", inputs: ["config"], outputs: ["closeAction"] }], animations: [
|
|
4683
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiActionBarContainerComponent, isStandalone: true, selector: "rtui-action-bar-container", host: { classAttribute: "rtui-action-bar-container" }, ngImport: i0, template: "@if (config()?.selected) {\n <rtui-action-bar [@barState]=\"'opened'\" [config]=\"config()\" (closeAction)=\"closeBar()\" />\n}\n", styles: [":host{position:fixed;z-index:var(--rt-action-bar-container-z-index);display:flex;width:var(--rt-action-bar-container-width);align-items:center;justify-content:center;inset:var(--rt-action-bar-container-top) var(--rt-action-bar-container-right) var(--rt-action-bar-container-bottom) var(--rt-action-bar-container-left)}\n"], dependencies: [{ kind: "component", type: RtuiActionBarComponent, selector: "rtui-action-bar", inputs: ["config"], outputs: ["closeAction"] }], animations: [
|
|
4462
4684
|
trigger('barState', [
|
|
4463
4685
|
state('opened', style({ transform: 'translateY(0)' })),
|
|
4464
4686
|
transition('void => *', [
|
|
@@ -4476,11 +4698,11 @@ class RtuiActionBarContainerComponent {
|
|
|
4476
4698
|
])),
|
|
4477
4699
|
]),
|
|
4478
4700
|
]),
|
|
4479
|
-
], changeDetection: i0.ChangeDetectionStrategy.
|
|
4701
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4480
4702
|
}
|
|
4481
4703
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiActionBarContainerComponent, decorators: [{
|
|
4482
4704
|
type: Component,
|
|
4483
|
-
args: [{ selector: 'rtui-action-bar-container', imports: [RtuiActionBarComponent], changeDetection: ChangeDetectionStrategy.
|
|
4705
|
+
args: [{ selector: 'rtui-action-bar-container', host: { class: BEM_BLOCK$4 }, imports: [RtuiActionBarComponent], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
4484
4706
|
trigger('barState', [
|
|
4485
4707
|
state('opened', style({ transform: 'translateY(0)' })),
|
|
4486
4708
|
transition('void => *', [
|
|
@@ -4524,6 +4746,7 @@ function provideRtUi(config) {
|
|
|
4524
4746
|
return [RtAsideService, RtActionBarService, { provide: RT_UI_CONFIG, useValue: config ?? {} }];
|
|
4525
4747
|
}
|
|
4526
4748
|
|
|
4749
|
+
const BEM_BLOCK$3 = 'rtui-snack-bar';
|
|
4527
4750
|
class RtuiSnackBarComponent {
|
|
4528
4751
|
#snackBarRef;
|
|
4529
4752
|
#animationBuilder;
|
|
@@ -4570,11 +4793,11 @@ class RtuiSnackBarComponent {
|
|
|
4570
4793
|
this.player?.play();
|
|
4571
4794
|
}
|
|
4572
4795
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSnackBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4573
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiSnackBarComponent, isStandalone: true, selector: "rtui-snack-bar", host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()" } }, viewQueries: [{ propertyName: "progressTplRef", first: true, predicate: ["progressTpl"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container rtBlock=\"rt-snack-bar\">\n <div rtElem=\"content\">\n @if (data.icon) {\n <div rtElem=\"content-icon-wrapper\">\n <mat-icon rtElem=\"content-icon\" rtIconOutlined>{{ data.icon }}</mat-icon>\n </div>\n }\n\n <div rtElem=\"content-message\">{{ data.message }}</div>\n </div>\n\n @if (data.action) {\n <button rtElem=\"action-button\" mat-button (click)=\"dismiss()\">{{ data.action }}</button>\n }\n\n <button rtElem=\"close-button\" color=\"accent\" mat-icon-button type=\"button\" (click)=\"close()\">\n <mat-icon rtElem=\"close-button-icon\">close</mat-icon>\n </button>\n\n @if (data.isProgressBarShown && data.duration) {\n <div #progressTpl rtElem=\"progress\"></div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:flex;width:100%;height:100%;align-items:center;justify-content:space-between;--rt-snack-bar-content-gap: 1rem;--rt-snack-bar-icon-size: 2rem;--rt-snack-bar-icon-color: var(--rt-text-base-inverse);--rt-snack-bar-message-line-clamp: 5;--rt-snack-bar-action-padding: .5rem;--rt-snack-bar-action-margin: 0 .25rem;--rt-snack-bar-action-color: var(--rt-text-accent-info-soft);--rt-snack-bar-action-background-color: var(--rt-bg-accent-info-solid);--rt-snack-bar-progress-height: .5rem;--rt-snack-bar-close-button-color: var(--rt-text-base-inverse)}:host .rt-snack-bar__content{position:relative;display:flex;width:100%;height:100%;align-items:center;gap:var(--rt-snack-bar-content-gap)}:host .rt-snack-bar__content-icon-wrapper{margin-bottom:auto;line-height:.5}:host .rt-snack-bar__content-icon{width:var(--rt-snack-bar-icon-size);min-width:var(--rt-snack-bar-icon-size);height:var(--rt-snack-bar-icon-size);color:var(--rt-snack-bar-icon-color);font-size:var(--rt-snack-bar-icon-size)}:host .rt-snack-bar__content-message{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:var(--rt-snack-bar-message-line-clamp);text-overflow:ellipsis}:host .rt-snack-bar__action-button{position:relative;height:100%;padding:var(--rt-snack-bar-action-padding);margin:var(--rt-snack-bar-action-margin);color:var(--rt-snack-bar-action-color)}:host .rt-snack-bar__close-button{margin-bottom:auto}:host .rt-snack-bar__close-button-icon{color:var(--rt-snack-bar-close-button-color)}:host .rt-snack-bar__progress{position:absolute;right:0;bottom:0;left:0;width:100%;height:var(--rt-snack-bar-progress-height);background-color:var(--mat-button-filled-container-color);border-bottom-left-radius:var(--mat-snack-bar-container-shape);border-bottom-right-radius:var(--mat-snack-bar-container-shape)}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4796
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiSnackBarComponent, isStandalone: true, selector: "rtui-snack-bar", host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()" }, classAttribute: "rtui-snack-bar" }, viewQueries: [{ propertyName: "progressTplRef", first: true, predicate: ["progressTpl"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container rtBlock=\"rt-snack-bar\">\n <div rtElem=\"content\">\n @if (data.icon) {\n <div rtElem=\"content-icon-wrapper\">\n <mat-icon rtElem=\"content-icon\" rtIconOutlined>{{ data.icon }}</mat-icon>\n </div>\n }\n\n <div rtElem=\"content-message\">{{ data.message }}</div>\n </div>\n\n @if (data.action) {\n <button rtElem=\"action-button\" mat-button (click)=\"dismiss()\">{{ data.action }}</button>\n }\n\n <button rtElem=\"close-button\" color=\"accent\" mat-icon-button type=\"button\" (click)=\"close()\">\n <mat-icon rtElem=\"close-button-icon\">close</mat-icon>\n </button>\n\n @if (data.isProgressBarShown && data.duration) {\n <div #progressTpl rtElem=\"progress\"></div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:flex;width:100%;height:100%;align-items:center;justify-content:space-between;--rt-snack-bar-content-gap: 1rem;--rt-snack-bar-icon-size: 2rem;--rt-snack-bar-icon-color: var(--rt-text-base-inverse);--rt-snack-bar-message-line-clamp: 5;--rt-snack-bar-action-padding: .5rem;--rt-snack-bar-action-margin: 0 .25rem;--rt-snack-bar-action-color: var(--rt-text-accent-info-soft);--rt-snack-bar-action-background-color: var(--rt-bg-accent-info-solid);--rt-snack-bar-progress-height: .5rem;--rt-snack-bar-close-button-color: var(--rt-text-base-inverse)}:host .rt-snack-bar__content{position:relative;display:flex;width:100%;height:100%;align-items:center;gap:var(--rt-snack-bar-content-gap)}:host .rt-snack-bar__content-icon-wrapper{margin-bottom:auto;line-height:.5}:host .rt-snack-bar__content-icon{width:var(--rt-snack-bar-icon-size);min-width:var(--rt-snack-bar-icon-size);height:var(--rt-snack-bar-icon-size);color:var(--rt-snack-bar-icon-color);font-size:var(--rt-snack-bar-icon-size)}:host .rt-snack-bar__content-message{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:var(--rt-snack-bar-message-line-clamp);text-overflow:ellipsis}:host .rt-snack-bar__action-button{position:relative;height:100%;padding:var(--rt-snack-bar-action-padding);margin:var(--rt-snack-bar-action-margin);color:var(--rt-snack-bar-action-color)}:host .rt-snack-bar__close-button{margin-bottom:auto}:host .rt-snack-bar__close-button-icon{color:var(--rt-snack-bar-close-button-color)}:host .rt-snack-bar__progress{position:absolute;right:0;bottom:0;left:0;width:100%;height:var(--rt-snack-bar-progress-height);background-color:var(--mat-button-filled-container-color);border-bottom-left-radius:var(--mat-snack-bar-container-shape);border-bottom-right-radius:var(--mat-snack-bar-container-shape)}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4574
4797
|
}
|
|
4575
4798
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiSnackBarComponent, decorators: [{
|
|
4576
4799
|
type: Component,
|
|
4577
|
-
args: [{ selector: 'rtui-snack-bar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatButton, MatIconButton, MatIcon, ElemDirective, BlockDirective, RtIconOutlinedDirective], template: "<ng-container rtBlock=\"rt-snack-bar\">\n <div rtElem=\"content\">\n @if (data.icon) {\n <div rtElem=\"content-icon-wrapper\">\n <mat-icon rtElem=\"content-icon\" rtIconOutlined>{{ data.icon }}</mat-icon>\n </div>\n }\n\n <div rtElem=\"content-message\">{{ data.message }}</div>\n </div>\n\n @if (data.action) {\n <button rtElem=\"action-button\" mat-button (click)=\"dismiss()\">{{ data.action }}</button>\n }\n\n <button rtElem=\"close-button\" color=\"accent\" mat-icon-button type=\"button\" (click)=\"close()\">\n <mat-icon rtElem=\"close-button-icon\">close</mat-icon>\n </button>\n\n @if (data.isProgressBarShown && data.duration) {\n <div #progressTpl rtElem=\"progress\"></div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:flex;width:100%;height:100%;align-items:center;justify-content:space-between;--rt-snack-bar-content-gap: 1rem;--rt-snack-bar-icon-size: 2rem;--rt-snack-bar-icon-color: var(--rt-text-base-inverse);--rt-snack-bar-message-line-clamp: 5;--rt-snack-bar-action-padding: .5rem;--rt-snack-bar-action-margin: 0 .25rem;--rt-snack-bar-action-color: var(--rt-text-accent-info-soft);--rt-snack-bar-action-background-color: var(--rt-bg-accent-info-solid);--rt-snack-bar-progress-height: .5rem;--rt-snack-bar-close-button-color: var(--rt-text-base-inverse)}:host .rt-snack-bar__content{position:relative;display:flex;width:100%;height:100%;align-items:center;gap:var(--rt-snack-bar-content-gap)}:host .rt-snack-bar__content-icon-wrapper{margin-bottom:auto;line-height:.5}:host .rt-snack-bar__content-icon{width:var(--rt-snack-bar-icon-size);min-width:var(--rt-snack-bar-icon-size);height:var(--rt-snack-bar-icon-size);color:var(--rt-snack-bar-icon-color);font-size:var(--rt-snack-bar-icon-size)}:host .rt-snack-bar__content-message{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:var(--rt-snack-bar-message-line-clamp);text-overflow:ellipsis}:host .rt-snack-bar__action-button{position:relative;height:100%;padding:var(--rt-snack-bar-action-padding);margin:var(--rt-snack-bar-action-margin);color:var(--rt-snack-bar-action-color)}:host .rt-snack-bar__close-button{margin-bottom:auto}:host .rt-snack-bar__close-button-icon{color:var(--rt-snack-bar-close-button-color)}:host .rt-snack-bar__progress{position:absolute;right:0;bottom:0;left:0;width:100%;height:var(--rt-snack-bar-progress-height);background-color:var(--mat-button-filled-container-color);border-bottom-left-radius:var(--mat-snack-bar-container-shape);border-bottom-right-radius:var(--mat-snack-bar-container-shape)}\n"] }]
|
|
4800
|
+
args: [{ selector: 'rtui-snack-bar', host: { class: BEM_BLOCK$3 }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatButton, MatIconButton, MatIcon, ElemDirective, BlockDirective, RtIconOutlinedDirective], template: "<ng-container rtBlock=\"rt-snack-bar\">\n <div rtElem=\"content\">\n @if (data.icon) {\n <div rtElem=\"content-icon-wrapper\">\n <mat-icon rtElem=\"content-icon\" rtIconOutlined>{{ data.icon }}</mat-icon>\n </div>\n }\n\n <div rtElem=\"content-message\">{{ data.message }}</div>\n </div>\n\n @if (data.action) {\n <button rtElem=\"action-button\" mat-button (click)=\"dismiss()\">{{ data.action }}</button>\n }\n\n <button rtElem=\"close-button\" color=\"accent\" mat-icon-button type=\"button\" (click)=\"close()\">\n <mat-icon rtElem=\"close-button-icon\">close</mat-icon>\n </button>\n\n @if (data.isProgressBarShown && data.duration) {\n <div #progressTpl rtElem=\"progress\"></div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";:host{display:flex;width:100%;height:100%;align-items:center;justify-content:space-between;--rt-snack-bar-content-gap: 1rem;--rt-snack-bar-icon-size: 2rem;--rt-snack-bar-icon-color: var(--rt-text-base-inverse);--rt-snack-bar-message-line-clamp: 5;--rt-snack-bar-action-padding: .5rem;--rt-snack-bar-action-margin: 0 .25rem;--rt-snack-bar-action-color: var(--rt-text-accent-info-soft);--rt-snack-bar-action-background-color: var(--rt-bg-accent-info-solid);--rt-snack-bar-progress-height: .5rem;--rt-snack-bar-close-button-color: var(--rt-text-base-inverse)}:host .rt-snack-bar__content{position:relative;display:flex;width:100%;height:100%;align-items:center;gap:var(--rt-snack-bar-content-gap)}:host .rt-snack-bar__content-icon-wrapper{margin-bottom:auto;line-height:.5}:host .rt-snack-bar__content-icon{width:var(--rt-snack-bar-icon-size);min-width:var(--rt-snack-bar-icon-size);height:var(--rt-snack-bar-icon-size);color:var(--rt-snack-bar-icon-color);font-size:var(--rt-snack-bar-icon-size)}:host .rt-snack-bar__content-message{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:var(--rt-snack-bar-message-line-clamp);text-overflow:ellipsis}:host .rt-snack-bar__action-button{position:relative;height:100%;padding:var(--rt-snack-bar-action-padding);margin:var(--rt-snack-bar-action-margin);color:var(--rt-snack-bar-action-color)}:host .rt-snack-bar__close-button{margin-bottom:auto}:host .rt-snack-bar__close-button-icon{color:var(--rt-snack-bar-close-button-color)}:host .rt-snack-bar__progress{position:absolute;right:0;bottom:0;left:0;width:100%;height:var(--rt-snack-bar-progress-height);background-color:var(--mat-button-filled-container-color);border-bottom-left-radius:var(--mat-snack-bar-container-shape);border-bottom-right-radius:var(--mat-snack-bar-container-shape)}\n"] }]
|
|
4578
4801
|
}], ctorParameters: () => [], propDecorators: { progressTplRef: [{ type: i0.ViewChild, args: ['progressTpl', { isSignal: true }] }], onMouseOver: [{
|
|
4579
4802
|
type: HostListener,
|
|
4580
4803
|
args: ['mouseover']
|
|
@@ -4714,8 +4937,13 @@ function getColorBasedOnBackground(backgroundColor) {
|
|
|
4714
4937
|
return '#fff';
|
|
4715
4938
|
}
|
|
4716
4939
|
|
|
4940
|
+
const BEM_BLOCK$2 = 'rtui-info-badge';
|
|
4717
4941
|
class RtuiInfoBadgeComponent {
|
|
4718
4942
|
constructor() {
|
|
4943
|
+
this.#breakpoints = inject(BreakpointService);
|
|
4944
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
4945
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
4946
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
4719
4947
|
this.size = input.required(/* @ts-ignore */
|
|
4720
4948
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
4721
4949
|
this.text = input.required(/* @ts-ignore */
|
|
@@ -4726,20 +4954,27 @@ class RtuiInfoBadgeComponent {
|
|
|
4726
4954
|
...(ngDevMode ? [{ debugName: "iconSide" }] : /* istanbul ignore next */ []));
|
|
4727
4955
|
this.isFontBold = input(false, /* @ts-ignore */
|
|
4728
4956
|
...(ngDevMode ? [{ debugName: "isFontBold" }] : /* istanbul ignore next */ []));
|
|
4729
|
-
|
|
4957
|
+
/**
|
|
4958
|
+
* Признак узкого экрана.
|
|
4959
|
+
*
|
|
4960
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
4961
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
4962
|
+
*/
|
|
4963
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
4730
4964
|
this.isTitleCollapsed = signal(false, /* @ts-ignore */
|
|
4731
4965
|
...(ngDevMode ? [{ debugName: "isTitleCollapsed" }] : /* istanbul ignore next */ []));
|
|
4732
4966
|
this.contentRef = viewChild('content', /* @ts-ignore */
|
|
4733
4967
|
...(ngDevMode ? [{ debugName: "contentRef" }] : /* istanbul ignore next */ []));
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
return {
|
|
4968
|
+
/** Модификаторы блока значка: ставятся директивой, а не строкой в атрибуте. */
|
|
4969
|
+
this.badgeModifiers = computed(() => ({
|
|
4737
4970
|
'size-l': this.size() === INFO_BADGE_SIZE_ENUM.LARGE,
|
|
4738
4971
|
'size-m': this.size() === INFO_BADGE_SIZE_ENUM.MEDIUM,
|
|
4739
4972
|
'size-s': this.size() === INFO_BADGE_SIZE_ENUM.SMALL,
|
|
4740
4973
|
bold: this.isFontBold(),
|
|
4741
|
-
}
|
|
4974
|
+
}), /* @ts-ignore */
|
|
4975
|
+
...(ngDevMode ? [{ debugName: "badgeModifiers" }] : /* istanbul ignore next */ []));
|
|
4742
4976
|
}
|
|
4977
|
+
#breakpoints;
|
|
4743
4978
|
get iconStyles() {
|
|
4744
4979
|
return {
|
|
4745
4980
|
order: this.iconSide() === POSITION_ENUM.LEFT ? '-1' : '0',
|
|
@@ -4760,12 +4995,12 @@ class RtuiInfoBadgeComponent {
|
|
|
4760
4995
|
}
|
|
4761
4996
|
}
|
|
4762
4997
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiInfoBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4763
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiInfoBadgeComponent, isStandalone: true, selector: "rtui-info-badge", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, glyph: { classPropertyName: "glyph", publicName: "glyph", isSignal: true, isRequired: false, transformFunction: null }, iconSide: { classPropertyName: "iconSide", publicName: "iconSide", isSignal: true, isRequired: false, transformFunction: null }, isFontBold: { classPropertyName: "isFontBold", publicName: "isFontBold", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired:
|
|
4998
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiInfoBadgeComponent, isStandalone: true, selector: "rtui-info-badge", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, glyph: { classPropertyName: "glyph", publicName: "glyph", isSignal: true, isRequired: false, transformFunction: null }, iconSide: { classPropertyName: "iconSide", publicName: "iconSide", isSignal: true, isRequired: false, transformFunction: null }, isFontBold: { classPropertyName: "isFontBold", publicName: "isFontBold", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "rtui-info-badge" }, providers: [BreakpointService], viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [":host{display:block;max-width:fit-content;border-radius:var(--rt-radius-full);background-color:var(--rt-info-badge-background-color, #005cbb);color:var(--rt-info-badge-color, var(--rt-text-static-light));line-height:normal}:host .c-info-badge{display:flex;box-sizing:border-box;align-items:center;justify-content:center;gap:var(--rt-spacing-2);line-height:normal}:host .c-info-badge__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .c-info-badge--size-l{padding:var(--rt-spacing-4) var(--rt-spacing-12);font-size:var(--rt-font-size-md)}:host .c-info-badge--size-l .mat-icon{font-size:var(--rt-font-size-xl)}:host .c-info-badge--size-m{padding:var(--rt-spacing-4) var(--rt-spacing-12);font-size:var(--rt-font-size-sm)}:host .c-info-badge--size-m .mat-icon{font-size:var(--rt-font-size-md)}:host .c-info-badge--size-s{padding:var(--rt-spacing-4) var(--rt-spacing-12);font-size:var(--rt-font-size-xs);letter-spacing:.025rem}:host .c-info-badge--size-s .mat-icon{font-size:var(--rt-font-size-xs)}:host .c-info-badge--bold{font-weight:var(--rt-font-weight-bold)}:host .mat-icon{width:unset;height:unset}\n"], dependencies: [{ kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4764
4999
|
}
|
|
4765
5000
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiInfoBadgeComponent, decorators: [{
|
|
4766
5001
|
type: Component,
|
|
4767
|
-
args: [{ selector: 'rtui-info-badge', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatTooltip,
|
|
4768
|
-
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: true }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], glyph: [{ type: i0.Input, args: [{ isSignal: true, alias: "glyph", required: false }] }], iconSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSide", required: false }] }], isFontBold: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFontBold", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
5002
|
+
args: [{ selector: 'rtui-info-badge', host: { class: BEM_BLOCK$2 }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatTooltip, MatIcon, NgStyle, BlockDirective, ElemDirective, ModDirective], template: "<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", styles: [":host{display:block;max-width:fit-content;border-radius:var(--rt-radius-full);background-color:var(--rt-info-badge-background-color, #005cbb);color:var(--rt-info-badge-color, var(--rt-text-static-light));line-height:normal}:host .c-info-badge{display:flex;box-sizing:border-box;align-items:center;justify-content:center;gap:var(--rt-spacing-2);line-height:normal}:host .c-info-badge__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .c-info-badge--size-l{padding:var(--rt-spacing-4) var(--rt-spacing-12);font-size:var(--rt-font-size-md)}:host .c-info-badge--size-l .mat-icon{font-size:var(--rt-font-size-xl)}:host .c-info-badge--size-m{padding:var(--rt-spacing-4) var(--rt-spacing-12);font-size:var(--rt-font-size-sm)}:host .c-info-badge--size-m .mat-icon{font-size:var(--rt-font-size-md)}:host .c-info-badge--size-s{padding:var(--rt-spacing-4) var(--rt-spacing-12);font-size:var(--rt-font-size-xs);letter-spacing:.025rem}:host .c-info-badge--size-s .mat-icon{font-size:var(--rt-font-size-xs)}:host .c-info-badge--bold{font-weight:var(--rt-font-weight-bold)}:host .mat-icon{width:unset;height:unset}\n"] }]
|
|
5003
|
+
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: true }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], glyph: [{ type: i0.Input, args: [{ isSignal: true, alias: "glyph", required: false }] }], iconSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSide", required: false }] }], isFontBold: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFontBold", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], contentRef: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
|
|
4769
5004
|
|
|
4770
5005
|
var INFO_BADGE_TYPE_ENUM;
|
|
4771
5006
|
(function (INFO_BADGE_TYPE_ENUM) {
|
|
@@ -4776,6 +5011,7 @@ var INFO_BADGE_TYPE_ENUM;
|
|
|
4776
5011
|
INFO_BADGE_TYPE_ENUM["DISABLED"] = "disabled";
|
|
4777
5012
|
})(INFO_BADGE_TYPE_ENUM || (INFO_BADGE_TYPE_ENUM = {}));
|
|
4778
5013
|
|
|
5014
|
+
const BEM_BLOCK$1 = 'rtui-file-upload';
|
|
4779
5015
|
class RtuiFileUploadComponent {
|
|
4780
5016
|
constructor() {
|
|
4781
5017
|
this.isIconOutlined = input(true, /* @ts-ignore */
|
|
@@ -4806,7 +5042,7 @@ class RtuiFileUploadComponent {
|
|
|
4806
5042
|
}
|
|
4807
5043
|
}
|
|
4808
5044
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiFileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4809
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiFileUploadComponent, isStandalone: true, selector: "rtui-file-upload", inputs: { isIconOutlined: { classPropertyName: "isIconOutlined", publicName: "isIconOutlined", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { uploadFile: "uploadFile" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, properties: { "class.--dragged": "isDragOver()" } }, ngImport: i0, template: "<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
|
|
5045
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: RtuiFileUploadComponent, isStandalone: true, selector: "rtui-file-upload", inputs: { isIconOutlined: { classPropertyName: "isIconOutlined", publicName: "isIconOutlined", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { uploadFile: "uploadFile" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, properties: { "class.--dragged": "isDragOver()" }, classAttribute: "rtui-file-upload" }, ngImport: i0, template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-file-upload-host-width: 100%;--rt-file-upload-host-max-width: 20rem;--rt-file-upload-host-height: 100%;--rt-file-upload-host-max-height: 20rem;--rt-file-upload-host-display: flex;--rt-file-upload-host-flex-direction: column;--rt-file-upload-host-justify-content: center;--rt-file-upload-host-align-items: center;--rt-file-upload-host-gap: 1rem;--rt-file-upload-host-padding: 1rem;--rt-file-upload-host-border: 2px dashed var(--rt-border-neutral-default);--rt-file-upload-host-border-radius: 1rem;--rt-file-upload-host-dragged-border-color: var(--mat-button-text-label-text-color);--rt-file-upload-icon-size: 2rem;--rt-file-upload-icon-color: var(--rt-text-base-strong);--rt-file-upload-title-font-size: 1rem;--rt-file-upload-title-color: var(--rt-text-base-primary);display:var(--rt-file-upload-host-display);width:var(--rt-file-upload-host-width);max-width:var(--rt-file-upload-host-max-width);height:var(--rt-file-upload-host-height);max-height:var(--rt-file-upload-host-max-height);flex-direction:var(--rt-file-upload-host-flex-direction);align-items:var(--rt-file-upload-host-align-items);justify-content:var(--rt-file-upload-host-justify-content);padding:var(--rt-file-upload-host-padding);border:var(--rt-file-upload-host-border);border-radius:var(--rt-file-upload-host-border-radius);gap:var(--rt-file-upload-host-gap);transition:border-color .3s ease-in-out}:host.--dragged{border-color:var(--rt-file-upload-host-dragged-border-color)}:host .file-upload__icon{width:var(--rt-file-upload-icon-size);height:var(--rt-file-upload-icon-size);color:var(--rt-file-upload-icon-color);font-size:var(--rt-file-upload-icon-size)}:host .file-upload__title{color:var(--rt-file-upload-title-color);font-size:var(--rt-file-upload-title-font-size)}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
4810
5046
|
// directives
|
|
4811
5047
|
ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4812
5048
|
}
|
|
@@ -4820,15 +5056,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4820
5056
|
BlockDirective,
|
|
4821
5057
|
RtIconOutlinedDirective,
|
|
4822
5058
|
], host: {
|
|
5059
|
+
class: BEM_BLOCK$1,
|
|
4823
5060
|
'[class.--dragged]': 'isDragOver()',
|
|
4824
5061
|
'(dragover)': 'onDragOver($event)',
|
|
4825
5062
|
'(dragleave)': 'onDragLeave($event)',
|
|
4826
5063
|
'(drop)': 'onDrop($event)',
|
|
4827
|
-
}, template: "<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
|
|
5064
|
+
}, template: "<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", styles: ["@charset \"UTF-8\";:host{--rt-file-upload-host-width: 100%;--rt-file-upload-host-max-width: 20rem;--rt-file-upload-host-height: 100%;--rt-file-upload-host-max-height: 20rem;--rt-file-upload-host-display: flex;--rt-file-upload-host-flex-direction: column;--rt-file-upload-host-justify-content: center;--rt-file-upload-host-align-items: center;--rt-file-upload-host-gap: 1rem;--rt-file-upload-host-padding: 1rem;--rt-file-upload-host-border: 2px dashed var(--rt-border-neutral-default);--rt-file-upload-host-border-radius: 1rem;--rt-file-upload-host-dragged-border-color: var(--mat-button-text-label-text-color);--rt-file-upload-icon-size: 2rem;--rt-file-upload-icon-color: var(--rt-text-base-strong);--rt-file-upload-title-font-size: 1rem;--rt-file-upload-title-color: var(--rt-text-base-primary);display:var(--rt-file-upload-host-display);width:var(--rt-file-upload-host-width);max-width:var(--rt-file-upload-host-max-width);height:var(--rt-file-upload-host-height);max-height:var(--rt-file-upload-host-max-height);flex-direction:var(--rt-file-upload-host-flex-direction);align-items:var(--rt-file-upload-host-align-items);justify-content:var(--rt-file-upload-host-justify-content);padding:var(--rt-file-upload-host-padding);border:var(--rt-file-upload-host-border);border-radius:var(--rt-file-upload-host-border-radius);gap:var(--rt-file-upload-host-gap);transition:border-color .3s ease-in-out}:host.--dragged{border-color:var(--rt-file-upload-host-dragged-border-color)}:host .file-upload__icon{width:var(--rt-file-upload-icon-size);height:var(--rt-file-upload-icon-size);color:var(--rt-file-upload-icon-color);font-size:var(--rt-file-upload-icon-size)}:host .file-upload__title{color:var(--rt-file-upload-title-color);font-size:var(--rt-file-upload-title-font-size)}\n"] }]
|
|
4828
5065
|
}], propDecorators: { isIconOutlined: [{ type: i0.Input, args: [{ isSignal: true, alias: "isIconOutlined", required: false }] }], uploadFile: [{ type: i0.Output, args: ["uploadFile"] }] } });
|
|
4829
5066
|
|
|
5067
|
+
const BEM_BLOCK = 'rtui-image-upload';
|
|
4830
5068
|
class RtuiImageUploadComponent {
|
|
4831
5069
|
constructor() {
|
|
5070
|
+
this.#breakpoints = inject(BreakpointService);
|
|
4832
5071
|
this.#documentRef = inject(DOCUMENT);
|
|
4833
5072
|
this.#formats = {
|
|
4834
5073
|
['png']: 'png',
|
|
@@ -4838,6 +5077,9 @@ class RtuiImageUploadComponent {
|
|
|
4838
5077
|
};
|
|
4839
5078
|
this.#originalMimeType = signal(null, /* @ts-ignore */
|
|
4840
5079
|
...(ngDevMode ? [{ debugName: "#originalMimeType" }] : /* istanbul ignore next */ []));
|
|
5080
|
+
/** Экран узкий: значение входа, если приложение его дало, иначе замер кита. */
|
|
5081
|
+
this.narrow = computed(() => this.isMobile() ?? !!this.#breakpoints.isMobile(), /* @ts-ignore */
|
|
5082
|
+
...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
|
|
4841
5083
|
this.imageFormat = computed(() => {
|
|
4842
5084
|
const type = this.#originalMimeType();
|
|
4843
5085
|
return this.#formats[type?.toLowerCase() || ''] || 'png';
|
|
@@ -4845,7 +5087,13 @@ class RtuiImageUploadComponent {
|
|
|
4845
5087
|
...(ngDevMode ? [{ debugName: "imageFormat" }] : /* istanbul ignore next */ []));
|
|
4846
5088
|
this.imageUrl = model.required(/* @ts-ignore */
|
|
4847
5089
|
...(ngDevMode ? [{ debugName: "imageUrl" }] : /* istanbul ignore next */ []));
|
|
4848
|
-
|
|
5090
|
+
/**
|
|
5091
|
+
* Признак узкого экрана.
|
|
5092
|
+
*
|
|
5093
|
+
* @deprecated Кит определяет его сам — `RtuiBreakpointsService`. Вход оставлен ради
|
|
5094
|
+
* приложений, которые уже его передают, и уйдёт в следующем крупном выпуске.
|
|
5095
|
+
*/
|
|
5096
|
+
this.isMobile = input(null, { ...(ngDevMode ? { debugName: "isMobile" } : /* istanbul ignore next */ {}), transform: (value) => (value === null || value === undefined ? null : booleanAttribute(value)) });
|
|
4849
5097
|
this.fileName = input('image', { ...(ngDevMode ? { debugName: "fileName" } : /* istanbul ignore next */ {}), transform: transformStringInput });
|
|
4850
5098
|
this.isActive = input(true, { ...(ngDevMode ? { debugName: "isActive" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
4851
5099
|
this.isSaveButtonShown = input(true, { ...(ngDevMode ? { debugName: "isSaveButtonShown" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
@@ -4868,6 +5116,7 @@ class RtuiImageUploadComponent {
|
|
|
4868
5116
|
this.imageChanged = output();
|
|
4869
5117
|
this.save = output();
|
|
4870
5118
|
}
|
|
5119
|
+
#breakpoints;
|
|
4871
5120
|
#documentRef;
|
|
4872
5121
|
#formats;
|
|
4873
5122
|
#originalMimeType;
|
|
@@ -4920,7 +5169,7 @@ class RtuiImageUploadComponent {
|
|
|
4920
5169
|
this.save.emit();
|
|
4921
5170
|
}
|
|
4922
5171
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiImageUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4923
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiImageUploadComponent, isStandalone: true, selector: "rtui-image-upload", inputs: { imageUrl: { classPropertyName: "imageUrl", publicName: "imageUrl", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired:
|
|
5172
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RtuiImageUploadComponent, isStandalone: true, selector: "rtui-image-upload", inputs: { imageUrl: { classPropertyName: "imageUrl", publicName: "imageUrl", isSignal: true, isRequired: true, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, isActive: { classPropertyName: "isActive", publicName: "isActive", isSignal: true, isRequired: false, transformFunction: null }, isSaveButtonShown: { classPropertyName: "isSaveButtonShown", publicName: "isSaveButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isDownloadButtonEnabled: { classPropertyName: "isDownloadButtonEnabled", publicName: "isDownloadButtonEnabled", isSignal: true, isRequired: false, transformFunction: null }, isTooltipDisabled: { classPropertyName: "isTooltipDisabled", publicName: "isTooltipDisabled", isSignal: true, isRequired: false, transformFunction: null }, isActionsShown: { classPropertyName: "isActionsShown", publicName: "isActionsShown", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, imageQuality: { classPropertyName: "imageQuality", publicName: "imageQuality", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageUrl: "imageUrlChange", imageChanged: "imageChanged", save: "save" }, host: { classAttribute: "rtui-image-upload" }, providers: [BreakpointService], ngImport: i0, template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-image-upload-host-width: 100%;--rt-image-upload-host-min-width: 100%;--rt-image-upload-host-max-width: 100%;--rt-image-upload-host-height: 100%;--rt-image-upload-host-min-height: 15rem;--rt-image-upload-host-max-height: 100%;--rt-image-upload-host-display: flex;--rt-image-upload-host-justify-content: center;--rt-image-upload-host-align-items: center;--rt-image-upload-image-cropper-padding: .25rem;--rt-image-upload-image-cropper-actions-display: flex;--rt-image-upload-image-cropper-actions-justify-content: flex-end;--rt-image-upload-image-cropper-actions-gap: .5rem;--rt-image-upload-image-cropper-actions-margin-top: .5rem;--rt-image-upload-image-container-position: relative;--rt-image-upload-image-container-padding: .5rem;--rt-image-upload-image-container-image-position: relative;--rt-image-upload-image-container-image-height: 100%;--rt-image-upload-image-container-image-max-height: 15rem;--rt-image-upload-image-container-image-object-fit: contain;display:var(--rt-image-upload-host-display);width:var(--rt-image-upload-host-width);min-width:var(--rt-image-upload-host-min-height);max-width:var(--rt-image-upload-host-max-width);height:var(--rt-image-upload-host-height);min-height:var(--rt-image-upload-host-min-height);max-height:var(--rt-image-upload-host-max-height);align-items:var(--rt-image-upload-host-align-items);justify-content:var(--rt-image-upload-host-justify-content)}:host .rtui-image-cropper{padding:var(--rt-image-upload-image-cropper-padding)}:host .rtui-image-cropper__actions{display:var(--rt-image-upload-image-cropper-actions-display);justify-content:var(--rt-image-upload-image-cropper-actions-justify-content);margin-top:var(--rt-image-upload-image-cropper-actions-justify-margin-top);gap:var(--rt-image-upload-image-cropper-actions-gap)}:host .rtui-image-container{position:var(--rt-image-upload-image-container-position);padding:var(--rt-image-upload-image-container-padding)}:host .rtui-image-container__image{position:var(--rt-image-upload-image-container-image-position);height:var(--rt-image-upload-image-container-image-height);max-height:var(--rt-image-upload-image-container-image-max-height);object-fit:var(--rt-image-upload-image-container-image-object-fit);pointer-events:none}:host .rtui-image-container__image--active{cursor:pointer;pointer-events:initial}:host .rtui-image-container__image--active:hover{opacity:.6}:host .rtui-image-container__action{position:absolute;z-index:999;top:0;right:0;backdrop-filter:blur(1.25rem)}\n"], dependencies: [{ kind: "component", type:
|
|
4924
5173
|
// material
|
|
4925
5174
|
MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type:
|
|
4926
5175
|
// cropper
|
|
@@ -4930,7 +5179,7 @@ class RtuiImageUploadComponent {
|
|
|
4930
5179
|
}
|
|
4931
5180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RtuiImageUploadComponent, decorators: [{
|
|
4932
5181
|
type: Component,
|
|
4933
|
-
args: [{ selector: 'rtui-image-upload', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
5182
|
+
args: [{ selector: 'rtui-image-upload', host: { class: BEM_BLOCK }, providers: [BreakpointService], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4934
5183
|
// material
|
|
4935
5184
|
MatIcon,
|
|
4936
5185
|
MatButton,
|
|
@@ -4945,8 +5194,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
4945
5194
|
RtuiSpinnerComponent,
|
|
4946
5195
|
RtuiFileUploadComponent,
|
|
4947
5196
|
RtIconOutlinedDirective,
|
|
4948
|
-
], template: "@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
|
|
4949
|
-
}], propDecorators: { imageUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageUrl", required: true }] }, { type: i0.Output, args: ["imageUrlChange"] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required:
|
|
5197
|
+
], template: "@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", styles: ["@charset \"UTF-8\";:host{--rt-image-upload-host-width: 100%;--rt-image-upload-host-min-width: 100%;--rt-image-upload-host-max-width: 100%;--rt-image-upload-host-height: 100%;--rt-image-upload-host-min-height: 15rem;--rt-image-upload-host-max-height: 100%;--rt-image-upload-host-display: flex;--rt-image-upload-host-justify-content: center;--rt-image-upload-host-align-items: center;--rt-image-upload-image-cropper-padding: .25rem;--rt-image-upload-image-cropper-actions-display: flex;--rt-image-upload-image-cropper-actions-justify-content: flex-end;--rt-image-upload-image-cropper-actions-gap: .5rem;--rt-image-upload-image-cropper-actions-margin-top: .5rem;--rt-image-upload-image-container-position: relative;--rt-image-upload-image-container-padding: .5rem;--rt-image-upload-image-container-image-position: relative;--rt-image-upload-image-container-image-height: 100%;--rt-image-upload-image-container-image-max-height: 15rem;--rt-image-upload-image-container-image-object-fit: contain;display:var(--rt-image-upload-host-display);width:var(--rt-image-upload-host-width);min-width:var(--rt-image-upload-host-min-height);max-width:var(--rt-image-upload-host-max-width);height:var(--rt-image-upload-host-height);min-height:var(--rt-image-upload-host-min-height);max-height:var(--rt-image-upload-host-max-height);align-items:var(--rt-image-upload-host-align-items);justify-content:var(--rt-image-upload-host-justify-content)}:host .rtui-image-cropper{padding:var(--rt-image-upload-image-cropper-padding)}:host .rtui-image-cropper__actions{display:var(--rt-image-upload-image-cropper-actions-display);justify-content:var(--rt-image-upload-image-cropper-actions-justify-content);margin-top:var(--rt-image-upload-image-cropper-actions-justify-margin-top);gap:var(--rt-image-upload-image-cropper-actions-gap)}:host .rtui-image-container{position:var(--rt-image-upload-image-container-position);padding:var(--rt-image-upload-image-container-padding)}:host .rtui-image-container__image{position:var(--rt-image-upload-image-container-image-position);height:var(--rt-image-upload-image-container-image-height);max-height:var(--rt-image-upload-image-container-image-max-height);object-fit:var(--rt-image-upload-image-container-image-object-fit);pointer-events:none}:host .rtui-image-container__image--active{cursor:pointer;pointer-events:initial}:host .rtui-image-container__image--active:hover{opacity:.6}:host .rtui-image-container__action{position:absolute;z-index:999;top:0;right:0;backdrop-filter:blur(1.25rem)}\n"] }]
|
|
5198
|
+
}], propDecorators: { imageUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageUrl", required: true }] }, { type: i0.Output, args: ["imageUrlChange"] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], fileName: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileName", required: false }] }], isActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "isActive", required: false }] }], isSaveButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSaveButtonShown", required: false }] }], isDownloadButtonEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDownloadButtonEnabled", required: false }] }], isTooltipDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isTooltipDisabled", required: false }] }], isActionsShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isActionsShown", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: false }] }], tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPosition", required: false }] }], imageQuality: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageQuality", required: false }] }], imageChanged: [{ type: i0.Output, args: ["imageChanged"] }], save: [{ type: i0.Output, args: ["save"] }] } });
|
|
4950
5199
|
|
|
4951
5200
|
var RT_THEME_ENUM;
|
|
4952
5201
|
(function (RT_THEME_ENUM) {
|