@rt-tools/ui-kit-v2 0.33.0 → 0.34.1
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/README.md +4 -3
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +92 -5
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs +191 -0
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs +6 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +35 -4
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +13 -4
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs +245 -60
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +30 -5
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +113 -2
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +14 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +17 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs +112 -0
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs +854 -0
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +580 -65
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +203 -15
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +40 -8
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +7 -3
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +53 -2
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +207 -7
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs +171 -0
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +176 -6
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +142 -23
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +22 -9
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +105 -8
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +13 -2
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +654 -43
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +45 -7
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +11 -2
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +152 -11
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +199 -17
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +35 -5
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +21 -6
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +4 -0
- package/package.json +17 -1
- package/src/assets/icons/volume-off.svg +2 -1
- package/src/lib/components/autocomplete/CONTEXT.md +25 -14
- package/src/lib/components/autocomplete/rt-autocomplete.component.scss +19 -0
- package/src/lib/components/badge/CONTEXT.md +33 -0
- package/src/lib/components/badge/rt-badge.directive.scss +104 -0
- package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +2 -2
- package/src/lib/components/button/CONTEXT.md +5 -0
- package/src/lib/components/button/rt-button.directive.scss +3 -1
- package/src/lib/components/checkbox/CONTEXT.md +15 -8
- package/src/lib/components/color-palette/rt-color-palette.component.scss +2 -2
- package/src/lib/components/container/CONTEXT.md +23 -6
- package/src/lib/components/container/rt-container.component.scss +90 -1
- package/src/lib/components/copy-value/CONTEXT.md +6 -5
- package/src/lib/components/copy-value/rt-copy-value.component.scss +16 -0
- package/src/lib/components/date-picker/rt-date-picker.component.scss +7 -0
- package/src/lib/components/date-range/rt-date-range.component.scss +7 -0
- package/src/lib/components/divider/CONTEXT.md +21 -0
- package/src/lib/components/divider/rt-divider.component.scss +34 -0
- package/src/lib/components/drawer/CONTEXT.md +73 -0
- package/src/lib/components/drawer/rt-drawer-container.component.scss +19 -0
- package/src/lib/components/drawer/rt-drawer.component.scss +168 -0
- package/src/lib/components/drawer/rt-resize-handle.component.scss +42 -0
- package/src/lib/components/dynamic-selector/CONTEXT.md +5 -0
- package/src/lib/components/expansion-panel/CONTEXT.md +32 -8
- package/src/lib/components/expansion-panel/rt-expansion-panel.component.scss +67 -2
- package/src/lib/components/field/CONTEXT.md +43 -0
- package/src/lib/components/field/rt-field-label-inside.scss +179 -0
- package/src/lib/components/field/rt-field.component.scss +51 -2
- package/src/lib/components/icon-button/CONTEXT.md +17 -15
- package/src/lib/components/icon-button/rt-icon-button.component.scss +3 -1
- package/src/lib/components/inline-edit/rt-inline-edit.component.scss +4 -4
- package/src/lib/components/input/CONTEXT.md +45 -11
- package/src/lib/components/input/rt-input-floating-label.scss +192 -0
- package/src/lib/components/input/rt-input-icons.scss +105 -0
- package/src/lib/components/input/rt-input.component.scss +91 -13
- package/src/lib/components/input-number/CONTEXT.md +7 -0
- package/src/lib/components/input-number/rt-input-number.component.scss +58 -1
- package/src/lib/components/menu/CONTEXT.md +1 -0
- package/src/lib/components/multiselect/CONTEXT.md +2 -1
- package/src/lib/components/multiselect/rt-multiselect.component.scss +7 -0
- package/src/lib/components/pagination/CONTEXT.md +3 -0
- package/src/lib/components/pagination/rt-pagination.component.scss +7 -0
- package/src/lib/components/progress-bar/CONTEXT.md +22 -0
- package/src/lib/components/progress-bar/rt-progress-bar.component.scss +77 -0
- package/src/lib/components/radio-button/CONTEXT.md +9 -0
- package/src/lib/components/radio-button/rt-radio-group.component.scss +13 -0
- package/src/lib/components/select/CONTEXT.md +28 -0
- package/src/lib/components/select/rt-select-clear.scss +88 -0
- package/src/lib/components/select/rt-select-floating-label.scss +155 -0
- package/src/lib/components/select/rt-select-material.scss +54 -0
- package/src/lib/components/select/rt-select.component.scss +54 -16
- package/src/lib/components/side-menu/CONTEXT.md +5 -0
- package/src/lib/components/speed-menu/rt-speed-menu.component.scss +5 -5
- package/src/lib/components/stepper/CONTEXT.md +13 -5
- package/src/lib/components/stepper/rt-stepper.component.scss +93 -0
- package/src/lib/components/tabs/CONTEXT.md +61 -9
- package/src/lib/components/tabs/rt-tabs.component.scss +201 -5
- package/src/lib/components/textarea/CONTEXT.md +12 -1
- package/src/lib/components/textarea/rt-textarea.component.scss +116 -1
- package/src/lib/components/toast/CONTEXT.md +23 -0
- package/src/lib/components/toast/rt-toast.component.scss +37 -0
- package/src/lib/components/toggle-button-group/CONTEXT.md +24 -4
- package/src/lib/components/toggle-button-group/rt-toggle-button-group-chips.scss +151 -0
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -0
- package/src/lib/components/tooltip/CONTEXT.md +7 -1
- package/src/lib/components/tree/rt-tree.component.scss +2 -2
- package/src/styles/_color-scheme.scss +1 -1
- package/src/styles/_density.scss +48 -0
- package/src/styles/_index.scss +8 -0
- package/src/styles/_preset-material.scss +160 -70
- package/src/styles/_primitives.scss +1 -0
- package/src/styles/_semantic-navigation.scss +117 -0
- package/src/styles/_semantic.scss +29 -98
- package/src/styles/_theme-dark.scss +8 -0
- package/styles/tokens.css +2066 -1134
- package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +34 -0
- package/types/rt-tools-ui-kit-v2-badge.d.ts +71 -0
- package/types/rt-tools-ui-kit-v2-checkbox.d.ts +17 -3
- package/types/rt-tools-ui-kit-v2-container.d.ts +65 -9
- package/types/rt-tools-ui-kit-v2-copy-value.d.ts +11 -1
- package/types/rt-tools-ui-kit-v2-core.d.ts +109 -4
- package/types/rt-tools-ui-kit-v2-divider.d.ts +29 -0
- package/types/rt-tools-ui-kit-v2-drawer.d.ts +257 -0
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +240 -25
- package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +87 -3
- package/types/rt-tools-ui-kit-v2-field.d.ts +18 -1
- package/types/rt-tools-ui-kit-v2-form-control.d.ts +42 -4
- package/types/rt-tools-ui-kit-v2-icon-button.d.ts +2 -1
- package/types/rt-tools-ui-kit-v2-input-number.d.ts +1 -0
- package/types/rt-tools-ui-kit-v2-input.d.ts +98 -4
- package/types/rt-tools-ui-kit-v2-progress-bar.d.ts +53 -0
- package/types/rt-tools-ui-kit-v2-radio-button.d.ts +80 -1
- package/types/rt-tools-ui-kit-v2-select.d.ts +65 -1
- package/types/rt-tools-ui-kit-v2-side-menu.d.ts +3 -0
- package/types/rt-tools-ui-kit-v2-stepper.d.ts +57 -4
- package/types/rt-tools-ui-kit-v2-tabs.d.ts +337 -8
- package/types/rt-tools-ui-kit-v2-textarea.d.ts +16 -0
- package/types/rt-tools-ui-kit-v2-toast.d.ts +38 -2
- package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +83 -3
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +17 -2
- package/types/rt-tools-ui-kit-v2.d.ts +4 -0
- package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-popup-frame.component.scss +0 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BooleanInput } from "@angular/cdk/coercion";
|
|
1
|
+
import { BooleanInput, NumberInput } from "@angular/cdk/coercion";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import { ElementRef, InputSignal, InputSignalWithTransform, Signal, WritableSignal } from "@angular/core";
|
|
3
|
+
import { ElementRef, InputSignal, InputSignalWithTransform, OutputEmitterRef, Signal, WritableSignal } from "@angular/core";
|
|
4
4
|
import { IRtIcon, IRtInput, TRtKitLabelMap } from "@rt-tools/ui-kit-v2/core";
|
|
5
5
|
import { RtFormControlBase } from "@rt-tools/ui-kit-v2/form-control";
|
|
6
6
|
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
@@ -8,7 +8,10 @@ import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
|
8
8
|
* Шеренный input common/ui. Поддерживает:
|
|
9
9
|
* - интеграцию с Reactive Forms через общий `RtFormControlBase` (CVA-ядро,
|
|
10
10
|
* авто-подсветка invalid, `clearable`);
|
|
11
|
-
* - левую и правую иконочные «слоты» (`iconLeft`, `iconRight`);
|
|
11
|
+
* - левую и правую иконочные «слоты» (`iconLeft`, `iconRight`); по `iconLeftAction` /
|
|
12
|
+
* `iconRightAction` иконка становится кнопкой с подсказкой и своим выходом;
|
|
13
|
+
* - подпись на рамке (`floatingLabel`): у пустого поля в покое лежит на месте подсказки, при
|
|
14
|
+
* значении или фокусе поднимается на верхнюю рамку, высоту поля не меняет;
|
|
12
15
|
* - встроенный password-toggle (`passwordToggle=true` + `type="password"`);
|
|
13
16
|
* - кнопку очистки (крестик) при наличии значения; на password-полях крестик
|
|
14
17
|
* не показывается (postfix занят toggle'ом).
|
|
@@ -18,13 +21,25 @@ import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
|
18
21
|
export declare class RtInputComponent extends RtFormControlBase<string> {
|
|
19
22
|
protected readonly t: Signal<TRtKitLabelMap>;
|
|
20
23
|
protected readonly fieldEl: Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
24
|
+
/** Подпись на рамке: по её ширине материальный набор вырезает разрыв в рамке. `#`-поле `viewChild` не принимает. */
|
|
25
|
+
protected readonly floatingLabelEl: Signal<ElementRef<HTMLElement> | undefined>;
|
|
26
|
+
/** Ширина подписи на рамке, px. */
|
|
27
|
+
protected readonly notchWidth: Signal<number>;
|
|
21
28
|
protected readonly isPasswordVisible: WritableSignal<boolean>;
|
|
22
29
|
protected readonly hasValue: Signal<boolean>;
|
|
30
|
+
/** Id подписи на рамке: на него ссылается `aria-labelledby` поля. */
|
|
31
|
+
protected readonly floatingLabelId: string;
|
|
32
|
+
/** Подпись на рамке называет поле, только когда явного `ariaLabel` нет. */
|
|
33
|
+
protected readonly labelledBy: Signal<string | null>;
|
|
23
34
|
protected readonly effectiveType: Signal<string>;
|
|
24
35
|
protected readonly showPasswordToggle: Signal<boolean>;
|
|
25
36
|
protected readonly hasIconRight: Signal<boolean>;
|
|
37
|
+
/** Иконка-кнопка отключена вместе с полем или своим входом. */
|
|
38
|
+
protected readonly isIconLeftDisabled: Signal<boolean>;
|
|
39
|
+
protected readonly isIconRightDisabled: Signal<boolean>;
|
|
26
40
|
protected readonly passwordToggleIcon: Signal<IRtIcon.Name>;
|
|
27
41
|
/** Вид рамки: `outline` — рамка со всех сторон, `fill` — залитое поле с чертой снизу. */
|
|
42
|
+
readonly fieldLabelInside: boolean;
|
|
28
43
|
readonly appearance: InputSignal<IRtInput.Appearance>;
|
|
29
44
|
readonly displayText: Signal<string>;
|
|
30
45
|
readonly type: InputSignal<IRtInput.Type>;
|
|
@@ -33,6 +48,42 @@ export declare class RtInputComponent extends RtFormControlBase<string> {
|
|
|
33
48
|
readonly iconRight: InputSignal<IRtIcon.Name | null>;
|
|
34
49
|
readonly passwordToggle: InputSignalWithTransform<boolean, BooleanInput>;
|
|
35
50
|
readonly autocomplete: InputSignal<string | null>;
|
|
51
|
+
/**
|
|
52
|
+
* Предел длины значения: уходит атрибутом `maxlength` на поле, и браузер не даёт набрать лишний
|
|
53
|
+
* знак. `null` — предела нет. Проверку формы вход не заменяет: значение, записанное кодом,
|
|
54
|
+
* браузер не режет.
|
|
55
|
+
*/
|
|
56
|
+
readonly maxlength: InputSignalWithTransform<number | null, NumberInput>;
|
|
57
|
+
/** Видимая подпись на рамке поля. `null` — подписи нет, поле как прежде. */
|
|
58
|
+
readonly floatingLabel: InputSignal<string | null>;
|
|
59
|
+
/** Левая иконка — кнопка: Tab, Enter, Space, нажатие уходит в `iconLeftClick`. */
|
|
60
|
+
readonly iconLeftAction: InputSignalWithTransform<boolean, BooleanInput>;
|
|
61
|
+
/**
|
|
62
|
+
* Правая иконка — кнопка, нажатие уходит в `iconRightClick`. На поле пароля с переключателем
|
|
63
|
+
* показа не действует: место занято переключателем.
|
|
64
|
+
*/
|
|
65
|
+
readonly iconRightAction: InputSignalWithTransform<boolean, BooleanInput>;
|
|
66
|
+
/**
|
|
67
|
+
* Левая иконка-кнопка отключена, хотя поле доступно: например, поиск, который не ищет, пока
|
|
68
|
+
* введено меньше трёх знаков. Подсказка у отключённой кнопки остаётся и объясняет почему.
|
|
69
|
+
*/
|
|
70
|
+
readonly iconLeftDisabled: InputSignalWithTransform<boolean, BooleanInput>;
|
|
71
|
+
/** Правая иконка-кнопка отключена, хотя поле доступно. */
|
|
72
|
+
readonly iconRightDisabled: InputSignalWithTransform<boolean, BooleanInput>;
|
|
73
|
+
/** Подсказка левой иконки-кнопки; она же её доступное имя. Без неё имя — имя иконки. */
|
|
74
|
+
readonly iconLeftTooltip: InputSignal<string | null>;
|
|
75
|
+
/** Подсказка правой иконки-кнопки; она же её доступное имя. */
|
|
76
|
+
readonly iconRightTooltip: InputSignal<string | null>;
|
|
77
|
+
/** Нажатие левой иконки-кнопки — мышью или клавишей (браузер шлёт click и на Enter/Space). */
|
|
78
|
+
readonly iconLeftClick: OutputEmitterRef<MouseEvent>;
|
|
79
|
+
/** Нажатие правой иконки-кнопки. */
|
|
80
|
+
readonly iconRightClick: OutputEmitterRef<MouseEvent>;
|
|
81
|
+
/**
|
|
82
|
+
* Форма может вернуть полю прежнее значение в том же стеке, что и ввод: сигнал тогда равен
|
|
83
|
+
* последнему отрисованному, привязка `[value]` не срабатывает, и поле остаётся с набранным.
|
|
84
|
+
* Поэтому расхождение с полем пишется в него сразу.
|
|
85
|
+
*/
|
|
86
|
+
writeValue(value: string | null): void;
|
|
36
87
|
protected getEmptyValue(): string;
|
|
37
88
|
protected focusAfterClear(): void;
|
|
38
89
|
/**
|
|
@@ -83,7 +134,50 @@ export declare class RtInputComponent extends RtFormControlBase<string> {
|
|
|
83
134
|
"required": false;
|
|
84
135
|
"isSignal": true;
|
|
85
136
|
};
|
|
86
|
-
|
|
137
|
+
"maxlength": {
|
|
138
|
+
"alias": "maxlength";
|
|
139
|
+
"required": false;
|
|
140
|
+
"isSignal": true;
|
|
141
|
+
};
|
|
142
|
+
"floatingLabel": {
|
|
143
|
+
"alias": "floatingLabel";
|
|
144
|
+
"required": false;
|
|
145
|
+
"isSignal": true;
|
|
146
|
+
};
|
|
147
|
+
"iconLeftAction": {
|
|
148
|
+
"alias": "iconLeftAction";
|
|
149
|
+
"required": false;
|
|
150
|
+
"isSignal": true;
|
|
151
|
+
};
|
|
152
|
+
"iconRightAction": {
|
|
153
|
+
"alias": "iconRightAction";
|
|
154
|
+
"required": false;
|
|
155
|
+
"isSignal": true;
|
|
156
|
+
};
|
|
157
|
+
"iconLeftDisabled": {
|
|
158
|
+
"alias": "iconLeftDisabled";
|
|
159
|
+
"required": false;
|
|
160
|
+
"isSignal": true;
|
|
161
|
+
};
|
|
162
|
+
"iconRightDisabled": {
|
|
163
|
+
"alias": "iconRightDisabled";
|
|
164
|
+
"required": false;
|
|
165
|
+
"isSignal": true;
|
|
166
|
+
};
|
|
167
|
+
"iconLeftTooltip": {
|
|
168
|
+
"alias": "iconLeftTooltip";
|
|
169
|
+
"required": false;
|
|
170
|
+
"isSignal": true;
|
|
171
|
+
};
|
|
172
|
+
"iconRightTooltip": {
|
|
173
|
+
"alias": "iconRightTooltip";
|
|
174
|
+
"required": false;
|
|
175
|
+
"isSignal": true;
|
|
176
|
+
};
|
|
177
|
+
}, {
|
|
178
|
+
"iconLeftClick": "iconLeftClick";
|
|
179
|
+
"iconRightClick": "iconRightClick";
|
|
180
|
+
}, never, never, true, [{
|
|
87
181
|
directive: typeof i1.RtRadiusDirective;
|
|
88
182
|
inputs: {
|
|
89
183
|
"radius": "radius";
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { InputSignal, InputSignalWithTransform, Signal } from "@angular/core";
|
|
3
|
+
export declare namespace IRtProgressBar {
|
|
4
|
+
/** `determinate` — доля из `value`, `indeterminate` — бегущая полоса, когда доля неизвестна. */
|
|
5
|
+
type Mode = 'determinate' | 'indeterminate';
|
|
6
|
+
/** Цвет заполнения — заливка кнопочной палитры. */
|
|
7
|
+
type Color = 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger';
|
|
8
|
+
}
|
|
9
|
+
/** Доля, зажатая в 0–100: значение из потока может выйти за края, полоса и объявление — нет. */
|
|
10
|
+
export declare function clampProgress(value: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Полоса прогресса: дорожка во всю ширину и заполнение поверх. В режиме `determinate` заполнение
|
|
13
|
+
* равно `value` процентов и плавно идёт за ним — так полоса показывает живой прогресс задачи из
|
|
14
|
+
* потока. В режиме `indeterminate` по дорожке бежит отрезок: доля неизвестна, известно, что
|
|
15
|
+
* работа идёт.
|
|
16
|
+
*
|
|
17
|
+
* Для чтения с экрана полоса — `progressbar` с долей; без доли значение не объявляется.
|
|
18
|
+
*/
|
|
19
|
+
export declare class RtProgressBarComponent {
|
|
20
|
+
protected readonly determinate: Signal<boolean>;
|
|
21
|
+
protected readonly percent: Signal<number>;
|
|
22
|
+
/** Ширина заполнения: в режиме без доли её задаёт движение, а не вход. */
|
|
23
|
+
protected readonly fillWidth: Signal<number | null>;
|
|
24
|
+
readonly mode: InputSignal<IRtProgressBar.Mode>;
|
|
25
|
+
/** Доля в процентах, 0–100; что выходит за края, прижимается к ним. */
|
|
26
|
+
readonly value: InputSignalWithTransform<number, unknown>;
|
|
27
|
+
readonly color: InputSignal<IRtProgressBar.Color>;
|
|
28
|
+
/** Что за прогресс — для чтения с экрана, когда рядом нет видимой подписи. */
|
|
29
|
+
readonly ariaLabel: InputSignal<string | null>;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RtProgressBarComponent, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtProgressBarComponent, "rt-progress-bar", never, {
|
|
32
|
+
"mode": {
|
|
33
|
+
"alias": "mode";
|
|
34
|
+
"required": false;
|
|
35
|
+
"isSignal": true;
|
|
36
|
+
};
|
|
37
|
+
"value": {
|
|
38
|
+
"alias": "value";
|
|
39
|
+
"required": false;
|
|
40
|
+
"isSignal": true;
|
|
41
|
+
};
|
|
42
|
+
"color": {
|
|
43
|
+
"alias": "color";
|
|
44
|
+
"required": false;
|
|
45
|
+
"isSignal": true;
|
|
46
|
+
};
|
|
47
|
+
"ariaLabel": {
|
|
48
|
+
"alias": "ariaLabel";
|
|
49
|
+
"required": false;
|
|
50
|
+
"isSignal": true;
|
|
51
|
+
};
|
|
52
|
+
}, {}, never, never, true, never>;
|
|
53
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BooleanInput } from "@angular/cdk/coercion";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import { InputSignal, InputSignalWithTransform, OutputEmitterRef, Signal } from "@angular/core";
|
|
3
|
+
import { InjectionToken, InputSignal, InputSignalWithTransform, OutputEmitterRef, Signal } from "@angular/core";
|
|
4
4
|
import { ControlValueAccessor } from "@angular/forms";
|
|
5
5
|
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
6
6
|
/**
|
|
@@ -18,6 +18,9 @@ import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
|
18
18
|
* Отключение складывается из входа `disabled` и слова формы: форма зовёт `setDisabledState`
|
|
19
19
|
* раньше первого обновления вида, и один общий signal затёр бы её слово.
|
|
20
20
|
*
|
|
21
|
+
* Внутри `rt-radio-group` в порядке обхода по Tab стоит одна радиокнопка группы, а соседей выбирают
|
|
22
|
+
* стрелки; вне группы каждая радиокнопка стоит в порядке обхода сама, как прежде.
|
|
23
|
+
*
|
|
21
24
|
* Каждая радиокнопка — свой `ControlValueAccessor`, и значение, отданное одной, форма соседям на
|
|
22
25
|
* том же контроле не пишет: поэтому модель берётся и у самого контрола.
|
|
23
26
|
*/
|
|
@@ -25,6 +28,10 @@ export declare class RtRadioButtonComponent implements ControlValueAccessor {
|
|
|
25
28
|
#private;
|
|
26
29
|
protected readonly isChecked: Signal<boolean>;
|
|
27
30
|
protected readonly isDisabled: Signal<boolean>;
|
|
31
|
+
/** Место в порядке обхода: в группе — только у той, на которую указала группа. */
|
|
32
|
+
protected readonly tabIndex: Signal<number>;
|
|
33
|
+
/** Узел радиокнопки: по нему группа ставит радиокнопки в порядок страницы. */
|
|
34
|
+
readonly element: HTMLElement;
|
|
28
35
|
/** Значение радиокнопки: выбрана та, чьё значение — модель формы. */
|
|
29
36
|
readonly value: InputSignal<unknown>;
|
|
30
37
|
/** Выбранность без формы; не заданный вход оставляет решение форме. */
|
|
@@ -36,6 +43,10 @@ export declare class RtRadioButtonComponent implements ControlValueAccessor {
|
|
|
36
43
|
readonly description: InputSignal<string>;
|
|
37
44
|
/** Имя для вспомогательных средств, когда видимой подписи нет — кружок в строке таблицы. */
|
|
38
45
|
readonly ariaLabel: InputSignal<string | null>;
|
|
46
|
+
/** Выбрана ли радиокнопка — для группы, которая ведёт по ним стрелками. */
|
|
47
|
+
readonly selected: Signal<boolean>;
|
|
48
|
+
/** Отключена ли радиокнопка — группа её пропускает. */
|
|
49
|
+
readonly off: Signal<boolean>;
|
|
39
50
|
/** Каждое нажатие указателем, сменило оно выбор или нет. */
|
|
40
51
|
readonly clickAction: OutputEmitterRef<MouseEvent>;
|
|
41
52
|
/** Радиокнопка стала выбранной. */
|
|
@@ -51,6 +62,12 @@ export declare class RtRadioButtonComponent implements ControlValueAccessor {
|
|
|
51
62
|
registerOnChange(fn: (value: unknown) => void): void;
|
|
52
63
|
registerOnTouched(fn: () => void): void;
|
|
53
64
|
setDisabledState(disabled: boolean): void;
|
|
65
|
+
/** Группа отдаёт или забирает шаг Tab. */
|
|
66
|
+
setTabStop(on: boolean): void;
|
|
67
|
+
/** Лежит ли узел внутри радиокнопки — группа так находит, с какой ушла стрелка. */
|
|
68
|
+
contains(target: EventTarget | null): boolean;
|
|
69
|
+
/** Выбор стрелкой из группы: фокус и выбор переходят сюда вместе. */
|
|
70
|
+
selectFromKeyboard(): void;
|
|
54
71
|
protected onClick(event: MouseEvent): void;
|
|
55
72
|
protected onKeydown(event: KeyboardEvent): void;
|
|
56
73
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtRadioButtonComponent, never>;
|
|
@@ -100,4 +117,66 @@ export declare class RtRadioButtonComponent implements ControlValueAccessor {
|
|
|
100
117
|
};
|
|
101
118
|
outputs: {};
|
|
102
119
|
}]>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Что группа знает о радиокнопке. Отдельным описанием, а не классом радиокнопки: радиокнопка
|
|
123
|
+
* импортирует токен, и прямой импорт в обе стороны замкнул бы файлы в круг.
|
|
124
|
+
*/
|
|
125
|
+
export interface IRtRadioGroupMember {
|
|
126
|
+
/** Узел радиокнопки: по нему группа ставит радиокнопки в порядок страницы. */
|
|
127
|
+
readonly element: HTMLElement;
|
|
128
|
+
readonly selected: () => boolean;
|
|
129
|
+
readonly off: () => boolean;
|
|
130
|
+
readonly setTabStop: (on: boolean) => void;
|
|
131
|
+
readonly contains: (target: EventTarget | null) => boolean;
|
|
132
|
+
readonly selectFromKeyboard: () => void;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Что радиокнопка сообщает группе, в которой стоит. Радиокнопка встаёт в группу сама, через
|
|
136
|
+
* внедрение: так в группу попадает и радиокнопка из шаблона обёртки потребителя, до которой запрос
|
|
137
|
+
* по содержимому не дотянулся бы.
|
|
138
|
+
*/
|
|
139
|
+
export interface IRtRadioGroupHost {
|
|
140
|
+
/** Ориентация группы. */
|
|
141
|
+
readonly orientation: () => string;
|
|
142
|
+
readonly register: (radio: IRtRadioGroupMember) => void;
|
|
143
|
+
readonly unregister: (radio: IRtRadioGroupMember) => void;
|
|
144
|
+
}
|
|
145
|
+
export declare const RT_RADIO_GROUP: InjectionToken<IRtRadioGroupHost>;
|
|
146
|
+
/** Раскладка группы: столбцом или строкой с переносом. */
|
|
147
|
+
export type TRtRadioGroupOrientation = 'vertical' | 'horizontal';
|
|
148
|
+
/**
|
|
149
|
+
* Группа радиокнопок: `role="radiogroup"`, имя группы и ход стрелками.
|
|
150
|
+
*
|
|
151
|
+
* Стрелки переводят фокус и выбор на соседнюю включённую радиокнопку, по кругу; в порядке обхода по
|
|
152
|
+
* Tab стоит одна радиокнопка группы — выбранная, а пока выбора нет, первая включённая. Выбор и форма
|
|
153
|
+
* остаются у самих радиокнопок: группа значения не держит, и радиокнопки вне группы работают как
|
|
154
|
+
* прежде.
|
|
155
|
+
*/
|
|
156
|
+
export declare class RtRadioGroupComponent implements IRtRadioGroupHost {
|
|
157
|
+
#private;
|
|
158
|
+
/** Радиокнопки в порядке страницы: регистрация идёт в порядке создания, а не расположения. */
|
|
159
|
+
protected readonly radios: Signal<readonly IRtRadioGroupMember[]>;
|
|
160
|
+
/** Радиокнопка, стоящая в порядке обхода: выбранная, иначе первая включённая. */
|
|
161
|
+
protected readonly tabStop: Signal<IRtRadioGroupMember | null>;
|
|
162
|
+
/** Имя группы для вспомогательных средств — вопрос, на который отвечают радиокнопки. */
|
|
163
|
+
readonly ariaLabel: InputSignal<string | null>;
|
|
164
|
+
readonly orientation: InputSignal<TRtRadioGroupOrientation>;
|
|
165
|
+
constructor();
|
|
166
|
+
register(radio: IRtRadioGroupMember): void;
|
|
167
|
+
unregister(radio: IRtRadioGroupMember): void;
|
|
168
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
169
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RtRadioGroupComponent, never>;
|
|
170
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtRadioGroupComponent, "rt-radio-group", never, {
|
|
171
|
+
"ariaLabel": {
|
|
172
|
+
"alias": "ariaLabel";
|
|
173
|
+
"required": false;
|
|
174
|
+
"isSignal": true;
|
|
175
|
+
};
|
|
176
|
+
"orientation": {
|
|
177
|
+
"alias": "orientation";
|
|
178
|
+
"required": false;
|
|
179
|
+
"isSignal": true;
|
|
180
|
+
};
|
|
181
|
+
}, {}, never, ["*"], true, never>;
|
|
103
182
|
}
|
|
@@ -34,11 +34,44 @@ export declare namespace IRtSelect {
|
|
|
34
34
|
/** Отключён ли выбор. */
|
|
35
35
|
readonly isDisabled: boolean;
|
|
36
36
|
}
|
|
37
|
+
/** Обстановка шаблона строки списка: опция приходит как `$implicit`. */
|
|
38
|
+
interface OptionContext<TValue> {
|
|
39
|
+
readonly $implicit: Option<TValue>;
|
|
40
|
+
/** Выбрана ли опция. */
|
|
41
|
+
readonly selected: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** Шаблон строки с выбранной опцией: так указатель рисует выбранное той же разметкой, что и список. */
|
|
44
|
+
interface ChosenView<TValue> {
|
|
45
|
+
readonly templateRef: TemplateRef<OptionContext<TValue>>;
|
|
46
|
+
readonly context: OptionContext<TValue>;
|
|
47
|
+
}
|
|
37
48
|
/** Обстановка шаблона указателя: состояние приходит как `$implicit`. */
|
|
38
49
|
interface TriggerContext<TValue> {
|
|
39
50
|
readonly $implicit: TriggerState<TValue>;
|
|
40
51
|
}
|
|
41
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Маркер своей разметки строки списка — того, что рисуется на месте подписи пункта.
|
|
55
|
+
*
|
|
56
|
+
* Строка остаётся киту: выбор, подсветка, клавиши, стрелка ветки дерева и галочка выбранного. Потребитель
|
|
57
|
+
* даёт только то, что стоит на месте подписи, — например цветную метку перед текстом, — и получает опцию
|
|
58
|
+
* и признак, выбрана ли она. Тем же шаблоном поле рисует выбранное значение — метка из списка не
|
|
59
|
+
* пропадает после выбора.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```html
|
|
63
|
+
* <rt-select [options]="colors">
|
|
64
|
+
* <ng-template rtSelectOption let-option let-selected="selected">
|
|
65
|
+
* <span class="dot" [style.background]="option.value"></span>{{ option.label }}
|
|
66
|
+
* </ng-template>
|
|
67
|
+
* </rt-select>
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare class RtSelectOptionDirective<TValue = unknown> {
|
|
71
|
+
readonly templateRef: TemplateRef<IRtSelect.OptionContext<TValue>>;
|
|
72
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RtSelectOptionDirective<any>, never>;
|
|
73
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RtSelectOptionDirective<any>, "[rtSelectOption]", never, {}, {}, never, never, true, never>;
|
|
74
|
+
}
|
|
42
75
|
/**
|
|
43
76
|
* Маркер своей разметки указателя — того, что человек нажимает, чтобы открыть список.
|
|
44
77
|
*
|
|
@@ -84,6 +117,10 @@ export declare class RtSelectComponent<TValue> extends RtFormControlBase<TValue
|
|
|
84
117
|
protected readonly filterPlaceholderText: Signal<string>;
|
|
85
118
|
protected readonly popover: Signal<RtPopoverDirective>;
|
|
86
119
|
protected readonly triggerEl: Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
120
|
+
/** Подпись на рамке: по её ширине материальный набор вырезает разрыв в рамке. `#`-поле `viewChild` не принимает. */
|
|
121
|
+
protected readonly floatingLabelEl: Signal<ElementRef<HTMLElement> | undefined>;
|
|
122
|
+
/** Ширина подписи на рамке, px. */
|
|
123
|
+
protected readonly notchWidth: Signal<number>;
|
|
87
124
|
protected readonly filterTerm: WritableSignal<string>;
|
|
88
125
|
/** Раскрытые ветки дерева. Живут, пока открыта панель: при открытии раскрыты ветки над выбранным. */
|
|
89
126
|
protected readonly openBranches: WritableSignal<ReadonlySet<TValue>>;
|
|
@@ -98,7 +135,23 @@ export declare class RtSelectComponent<TValue> extends RtFormControlBase<TValue
|
|
|
98
135
|
* нынешний потребитель не двигается.
|
|
99
136
|
*/
|
|
100
137
|
protected readonly triggerTpl: Signal<RtSelectTriggerDirective<TValue> | undefined>;
|
|
138
|
+
/** Своя разметка строки списка; не объявлена — строка рисует подпись опции. */
|
|
139
|
+
protected readonly optionTpl: Signal<RtSelectOptionDirective<TValue> | undefined>;
|
|
101
140
|
protected readonly hasValue: Signal<boolean>;
|
|
141
|
+
/** Id подписи на рамке: на него ссылается `aria-labelledby` указателя. */
|
|
142
|
+
protected readonly floatingLabelId: string;
|
|
143
|
+
/** Id текста выбранного значения в указателе: его имя читает скринридер вслед за подписью. */
|
|
144
|
+
protected readonly valueTextId: string;
|
|
145
|
+
/**
|
|
146
|
+
* Подпись на рамке называет указатель, только когда явного `ariaLabel` нет. Ссылка заменяет имя
|
|
147
|
+
* из содержимого кнопки, поэтому за подписью идёт и выбранное значение — иначе скринридер
|
|
148
|
+
* назвал бы поле без того, что в нём выбрано.
|
|
149
|
+
*/
|
|
150
|
+
protected readonly labelledBy: Signal<string | null>;
|
|
151
|
+
/** Выбранная опция: по ней указатель рисует подпись или ту же разметку строки, что и список. */
|
|
152
|
+
protected readonly selectedOption: Signal<IRtSelect.Option<TValue> | null>;
|
|
153
|
+
/** Разметка выбранного в указателе — шаблон строки с выбранной опцией; без шаблона или выбора её нет. */
|
|
154
|
+
protected readonly chosenOwn: Signal<IRtSelect.ChosenView<TValue> | null>;
|
|
102
155
|
protected readonly selectedLabel: Signal<string>;
|
|
103
156
|
/** Дерево ли список: тогда у строк есть место под стрелку и отступ по уровню. */
|
|
104
157
|
protected readonly isTree: Signal<boolean>;
|
|
@@ -107,11 +160,17 @@ export declare class RtSelectComponent<TValue> extends RtFormControlBase<TValue
|
|
|
107
160
|
/** Три значения, которые кит отдаёт своей разметке указателя, и не больше. */
|
|
108
161
|
protected readonly triggerState: Signal<IRtSelect.TriggerState<TValue>>;
|
|
109
162
|
/** Вид рамки: `outline` — рамка со всех сторон, `fill` — залитое поле с чертой снизу. */
|
|
163
|
+
readonly fieldLabelInside: boolean;
|
|
110
164
|
readonly appearance: InputSignal<IRtInput.Appearance>;
|
|
111
165
|
readonly displayText: Signal<string>;
|
|
112
166
|
readonly options: InputSignal<ReadonlyArray<IRtSelect.Option<TValue>>>;
|
|
113
167
|
readonly placeholder: InputSignal<string>;
|
|
114
168
|
readonly iconLeft: InputSignal<IRtIcon.Name | null>;
|
|
169
|
+
/**
|
|
170
|
+
* Видимая подпись на рамке. Пока ничего не выбрано и список закрыт, лежит на месте подсказки;
|
|
171
|
+
* при выбранном значении или открытом списке поднимается на верхнюю рамку. `null` — подписи нет.
|
|
172
|
+
*/
|
|
173
|
+
readonly floatingLabel: InputSignal<string | null>;
|
|
115
174
|
readonly filter: InputSignalWithTransform<boolean, TBooleanInput>;
|
|
116
175
|
/** Пусто — берётся переведённая подпись по умолчанию */
|
|
117
176
|
readonly filterPlaceholder: InputSignal<string>;
|
|
@@ -169,6 +228,11 @@ export declare class RtSelectComponent<TValue> extends RtFormControlBase<TValue
|
|
|
169
228
|
"required": false;
|
|
170
229
|
"isSignal": true;
|
|
171
230
|
};
|
|
231
|
+
"floatingLabel": {
|
|
232
|
+
"alias": "floatingLabel";
|
|
233
|
+
"required": false;
|
|
234
|
+
"isSignal": true;
|
|
235
|
+
};
|
|
172
236
|
"filter": {
|
|
173
237
|
"alias": "filter";
|
|
174
238
|
"required": false;
|
|
@@ -191,7 +255,7 @@ export declare class RtSelectComponent<TValue> extends RtFormControlBase<TValue
|
|
|
191
255
|
};
|
|
192
256
|
}, {
|
|
193
257
|
"selectionChange": "selectionChange";
|
|
194
|
-
}, ["triggerTpl"], never, true, [{
|
|
258
|
+
}, ["triggerTpl", "optionTpl"], never, true, [{
|
|
195
259
|
directive: typeof i1.RtRadiusDirective;
|
|
196
260
|
inputs: {
|
|
197
261
|
"radius": "radius";
|
|
@@ -381,6 +381,9 @@ export declare function filterSideMenuItems(items: ReadonlyArray<IRtSideMenu.Ite
|
|
|
381
381
|
/**
|
|
382
382
|
* Папки отобранного списка — те, что должны стоять раскрытыми. Возвращаются номера, а не пункты:
|
|
383
383
|
* отобранный список пересобирается на каждую букву запроса, и ссылка на пункт этого не переживает.
|
|
384
|
+
*
|
|
385
|
+
* Раскрыта и папка, совпавшая только по имени: отбор оставляет её без детей, но человек искал
|
|
386
|
+
* именно её, и закрытый заголовок читался бы как «внутри ничего не нашлось».
|
|
384
387
|
*/
|
|
385
388
|
export declare function sideMenuIdsToExpand(items: ReadonlyArray<IRtSideMenu.Item>): Array<string | number>;
|
|
386
389
|
/**
|
|
@@ -1,12 +1,47 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
-
import { InputSignal, InputSignalWithTransform, Signal } from "@angular/core";
|
|
2
|
+
import { InputSignal, InputSignalWithTransform, Signal, TemplateRef } from "@angular/core";
|
|
3
3
|
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
4
4
|
export declare namespace IRtStepper {
|
|
5
5
|
interface Step {
|
|
6
6
|
label: string;
|
|
7
|
-
|
|
7
|
+
/** Пояснение шага. В вертикальном списке его может и не быть: там шаг — строка инструкции. */
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
/** `horizontal` — полоса прогресса с подписью текущего шага, `vertical` — все шаги списком. */
|
|
11
|
+
type Orientation = 'horizontal' | 'vertical';
|
|
12
|
+
/** Состояние шага в вертикальном списке; `neutral` — у всех шагов, когда текущего нет. */
|
|
13
|
+
type StepState = 'complete' | 'current' | 'upcoming' | 'neutral';
|
|
14
|
+
/** Обстановка шаблона подписи: шаг и его номер с нуля. */
|
|
15
|
+
interface LabelContext {
|
|
16
|
+
readonly $implicit: Step;
|
|
17
|
+
readonly index: number;
|
|
8
18
|
}
|
|
9
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Шаблон подписи шага в вертикальном списке: разметка вместо строки `label`, например выделенное
|
|
22
|
+
* слово. Обстановка — сам шаг и его номер с нуля.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```html
|
|
26
|
+
* <rt-stepper orientation="vertical" [steps]="steps" [currentIndex]="-1">
|
|
27
|
+
* <ng-template rtStepLabel let-step let-index="index">
|
|
28
|
+
* @if (index === 3) { Войдите под логином <strong>LOGIN</strong> } @else { {{ step.label }} }
|
|
29
|
+
* </ng-template>
|
|
30
|
+
* </rt-stepper>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare class RtStepLabelDirective {
|
|
34
|
+
readonly template: TemplateRef<IRtStepper.LabelContext>;
|
|
35
|
+
static ngTemplateContextGuard(_directive: RtStepLabelDirective, context: unknown): context is IRtStepper.LabelContext;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RtStepLabelDirective, never>;
|
|
37
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RtStepLabelDirective, "ng-template[rtStepLabel]", never, {}, {}, never, never, true, never>;
|
|
38
|
+
}
|
|
39
|
+
/** Шаг вертикального списка, собранный для шаблона: номер для метки и состояние. */
|
|
40
|
+
interface IStepItem {
|
|
41
|
+
readonly step: IRtStepper.Step;
|
|
42
|
+
readonly index: number;
|
|
43
|
+
readonly state: IRtStepper.StepState;
|
|
44
|
+
}
|
|
10
45
|
/**
|
|
11
46
|
* Линейный прогресс-степпер: тонкая полоса, набор точек и подпись
|
|
12
47
|
* текущего шага. Шаги задаются через input `steps` (массив `IRtStepper.Step`
|
|
@@ -19,6 +54,11 @@ export declare namespace IRtStepper {
|
|
|
19
54
|
* полосой — описание текущего шага, многоабзацное (`\n\n`). Сам список названий
|
|
20
55
|
* шагов на ui не выводится — публичен только текущий, остальные читаются
|
|
21
56
|
* скринридером через aria.
|
|
57
|
+
*
|
|
58
|
+
* `orientation="vertical"` показывает все шаги списком: у каждого круглая метка с номером и
|
|
59
|
+
* подпись справа, метки соединены линией. Подпись — строка `label` или шаблон `rtStepLabel`.
|
|
60
|
+
* `currentIndex` меньше нуля значит «текущего шага нет»: список — статичная инструкция, все метки
|
|
61
|
+
* нейтральные. Шаги в списке не нажимаются и фокуса не принимают.
|
|
22
62
|
*/
|
|
23
63
|
export declare class RtStepperComponent {
|
|
24
64
|
#private;
|
|
@@ -32,6 +72,12 @@ export declare class RtStepperComponent {
|
|
|
32
72
|
*/
|
|
33
73
|
protected readonly progressPercent: Signal<number>;
|
|
34
74
|
protected readonly totalSteps: Signal<number>;
|
|
75
|
+
protected readonly labelTemplate: Signal<RtStepLabelDirective | undefined>;
|
|
76
|
+
/**
|
|
77
|
+
* Шаги вертикального списка с состоянием. Номер текущего здесь не зажимается: меньше нуля —
|
|
78
|
+
* текущего нет, и все шаги нейтральные; больше последнего — пройдены все.
|
|
79
|
+
*/
|
|
80
|
+
protected readonly items: Signal<readonly IStepItem[]>;
|
|
35
81
|
/**
|
|
36
82
|
* Якорь подписи текущего шага: подпись висит над активной точкой и не должна
|
|
37
83
|
* вылезать за края рельсы. Первый шаг — выравнивание по левому краю точки,
|
|
@@ -41,6 +87,7 @@ export declare class RtStepperComponent {
|
|
|
41
87
|
/** Абзацы описания текущего шага: бэк отдаёт плоскую строку, делим по `\n\n`. */
|
|
42
88
|
protected readonly descriptionParagraphs: Signal<readonly string[]>;
|
|
43
89
|
readonly steps: InputSignal<readonly IRtStepper.Step[]>;
|
|
90
|
+
readonly orientation: InputSignal<IRtStepper.Orientation>;
|
|
44
91
|
readonly currentIndex: InputSignalWithTransform<number, number | string>;
|
|
45
92
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtStepperComponent, never>;
|
|
46
93
|
static ɵcmp: i0.ɵɵComponentDeclaration<RtStepperComponent, "rt-stepper", never, {
|
|
@@ -49,16 +96,22 @@ export declare class RtStepperComponent {
|
|
|
49
96
|
"required": false;
|
|
50
97
|
"isSignal": true;
|
|
51
98
|
};
|
|
99
|
+
"orientation": {
|
|
100
|
+
"alias": "orientation";
|
|
101
|
+
"required": false;
|
|
102
|
+
"isSignal": true;
|
|
103
|
+
};
|
|
52
104
|
"currentIndex": {
|
|
53
105
|
"alias": "currentIndex";
|
|
54
106
|
"required": false;
|
|
55
107
|
"isSignal": true;
|
|
56
108
|
};
|
|
57
|
-
}, {},
|
|
109
|
+
}, {}, ["labelTemplate"], never, true, [{
|
|
58
110
|
directive: typeof i1.RtRadiusDirective;
|
|
59
111
|
inputs: {
|
|
60
112
|
"radius": "radius";
|
|
61
113
|
};
|
|
62
114
|
outputs: {};
|
|
63
115
|
}]>;
|
|
64
|
-
}
|
|
116
|
+
}
|
|
117
|
+
export {};
|