@rt-tools/ui-kit-v2 0.18.0 → 0.19.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 +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +14 -8
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +97 -0
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +10 -3
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +81 -0
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +99 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +5 -5
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +16 -4
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +124 -25
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +3 -3
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +64 -27
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs +46 -0
- package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +336 -12
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +16 -2
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +3 -3
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +31 -5
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +3 -0
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
- package/package.json +13 -1
- package/rt-tools-ui-kit-v2-0.19.1.tgz +0 -0
- package/src/assets/icons/sparkle.svg +9 -0
- package/src/assets/icons/thumb-down.svg +10 -0
- package/src/assets/icons/thumb-up.svg +9 -0
- package/src/assets/icons/trash-x.svg +7 -0
- package/src/assets/icons-material/sparkle.fill.svg +5 -0
- package/src/assets/icons-material/sparkle.svg +5 -0
- package/src/assets/icons-material/thumb-down.fill.svg +5 -0
- package/src/assets/icons-material/thumb-down.svg +5 -0
- package/src/assets/icons-material/thumb-up.fill.svg +5 -0
- package/src/assets/icons-material/thumb-up.svg +5 -0
- package/src/assets/icons-material/trash-x.fill.svg +5 -0
- package/src/assets/icons-material/trash-x.svg +5 -0
- package/src/lib/components/action-bar/CONTEXT.md +8 -2
- package/src/lib/components/action-bar/rt-action-bar-holder.component.scss +10 -7
- package/src/lib/components/action-bar/rt-action-bar.component.scss +82 -34
- package/src/lib/components/ai-run-status/CONTEXT.md +41 -0
- package/src/lib/components/ai-run-status/rt-ai-run-status.component.scss +158 -0
- package/src/lib/components/aside/CONTEXT.md +1 -0
- package/src/lib/components/aside/header/rt-aside-header.component.scss +27 -11
- package/src/lib/components/copy-value/CONTEXT.md +31 -0
- package/src/lib/components/copy-value/rt-copy-value.component.scss +39 -0
- package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +5 -5
- package/src/lib/components/data-table/CONTEXT.md +5 -0
- package/src/lib/components/dynamic-selector/CONTEXT.md +18 -0
- package/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.scss +29 -1
- package/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.scss +84 -25
- package/src/lib/components/empty-state/CONTEXT.md +2 -1
- package/src/lib/components/empty-state/rt-empty-state.component.scss +4 -2
- package/src/lib/components/icon/CONTEXT.md +16 -12
- package/src/lib/components/icon/rt-icon.component.scss +13 -3
- package/src/lib/components/prompt-suggestion/CONTEXT.md +29 -0
- package/src/lib/components/prompt-suggestion/rt-prompt-suggestion.component.scss +58 -0
- package/src/lib/components/select/CONTEXT.md +2 -2
- package/src/lib/components/thread-list/CONTEXT.md +4 -0
- package/src/lib/components/thread-list/rt-thread-list.component.scss +29 -0
- package/src/lib/components/toolbar/CONTEXT.md +4 -0
- package/src/lib/components/toolbar/rt-toolbar.component.scss +7 -0
- package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +58 -0
- package/src/rich-editor/lib/components/ai-chat/answer/rt-ai-chat-answer.component.scss +12 -0
- package/src/rich-editor/lib/components/ai-chat/rt-ai-chat.component.scss +222 -0
- package/src/rich-editor/lib/components/rich-editor/rt-rich-editor.component.scss +3 -0
- package/src/styles/_scrollbar.scss +9 -0
- package/styles/tokens.css +3 -0
- package/types/rt-tools-ui-kit-v2-action-bar.d.ts +11 -2
- package/types/rt-tools-ui-kit-v2-ai-run-status.d.ts +49 -0
- package/types/rt-tools-ui-kit-v2-aside.d.ts +9 -1
- package/types/rt-tools-ui-kit-v2-copy-value.d.ts +29 -0
- package/types/rt-tools-ui-kit-v2-core.d.ts +94 -54
- package/types/rt-tools-ui-kit-v2-data-table.d.ts +7 -0
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +44 -5
- package/types/rt-tools-ui-kit-v2-icon.d.ts +12 -4
- package/types/rt-tools-ui-kit-v2-prompt-suggestion.d.ts +21 -0
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +186 -2
- package/types/rt-tools-ui-kit-v2-select.d.ts +6 -0
- package/types/rt-tools-ui-kit-v2-thread-list.d.ts +15 -2
- package/types/rt-tools-ui-kit-v2.d.ts +3 -0
- package/rt-tools-ui-kit-v2-0.18.0.tgz +0 -0
|
@@ -4,22 +4,36 @@
|
|
|
4
4
|
/* rt-action-bar — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
|
|
5
5
|
`.rt-action-bar` — сам хост (шаблон начинается с ng-container, класс ставит host). */
|
|
6
6
|
|
|
7
|
+
/* Свойства полосы приложение задаёт на любом предке, хоть на корне страницы: на самой полосе
|
|
8
|
+
объявлены только умолчания с приставкой `-default`, а читается свойство с запасным значением.
|
|
9
|
+
Объявленное на полосе под публичным именем перебило бы правило предка — так было до RT-2619. */
|
|
7
10
|
.rt-action-bar {
|
|
8
|
-
--rt-action-bar-radius: var(--rt-radius-lg);
|
|
9
|
-
--rt-action-bar-shadow: var(--rt-shadow-card);
|
|
10
|
-
--rt-action-bar-bg: var(--rt-color-bg-inverse);
|
|
11
|
-
--rt-action-bar-color: var(--rt-color-text-inverse);
|
|
12
|
-
--rt-action-bar-padding: var(--rt-space-2) var(--rt-space-4);
|
|
13
|
-
--rt-action-bar-gap: var(--rt-space-4);
|
|
14
|
-
--rt-action-bar-font-size: var(--rt-text-sm);
|
|
15
|
-
--rt-action-bar-counter-weight: var(--rt-font-weight-medium);
|
|
16
|
-
--rt-action-bar-
|
|
17
|
-
--rt-action-bar-action-
|
|
18
|
-
--rt-action-bar-action-padding-
|
|
19
|
-
--rt-action-bar-action-
|
|
20
|
-
--rt-action-bar-action-
|
|
21
|
-
--rt-action-bar-action-
|
|
22
|
-
--rt-action-bar-action-
|
|
11
|
+
--rt-action-bar-radius-default: var(--rt-radius-lg);
|
|
12
|
+
--rt-action-bar-shadow-default: var(--rt-shadow-card);
|
|
13
|
+
--rt-action-bar-bg-default: var(--rt-color-bg-inverse);
|
|
14
|
+
--rt-action-bar-color-default: var(--rt-color-text-inverse);
|
|
15
|
+
--rt-action-bar-padding-default: var(--rt-space-2) var(--rt-space-4);
|
|
16
|
+
--rt-action-bar-gap-default: var(--rt-space-4);
|
|
17
|
+
--rt-action-bar-font-size-default: var(--rt-text-sm);
|
|
18
|
+
--rt-action-bar-counter-weight-default: var(--rt-font-weight-medium);
|
|
19
|
+
--rt-action-bar-counter-font-size-default: 1em;
|
|
20
|
+
--rt-action-bar-action-radius-default: var(--rt-radius-md);
|
|
21
|
+
--rt-action-bar-action-padding-block-default: var(--rt-space-1);
|
|
22
|
+
--rt-action-bar-action-padding-inline-default: var(--rt-space-2);
|
|
23
|
+
--rt-action-bar-action-weight-default: var(--rt-font-weight-medium);
|
|
24
|
+
--rt-action-bar-action-height-default: auto;
|
|
25
|
+
--rt-action-bar-action-font-size-default: 1em;
|
|
26
|
+
--rt-action-bar-action-bg-hover-default: color-mix(
|
|
27
|
+
in srgb,
|
|
28
|
+
var(--rt-action-bar-color, var(--rt-action-bar-color-default)) 16%,
|
|
29
|
+
transparent
|
|
30
|
+
);
|
|
31
|
+
--rt-action-bar-action-color-danger-default: var(--rt-color-action-danger-on-surface);
|
|
32
|
+
--rt-action-bar-action-focus-shadow-default: var(--rt-shadow-focus-ring);
|
|
33
|
+
--rt-action-bar-icon-size-default: var(--rt-size-4);
|
|
34
|
+
--rt-action-bar-icon-gap-default: var(--rt-space-2);
|
|
35
|
+
--rt-action-bar-close-size-default: var(--rt-control-height-sm);
|
|
36
|
+
--rt-action-bar-close-icon-size-default: var(--rt-size-4);
|
|
23
37
|
|
|
24
38
|
// Предел ширины стоит и на самом элементе. Содержащий блок полосы — этот элемент, и
|
|
25
39
|
// без предела он растёт по содержимому: сто процентов считались бы тогда от выросшего,
|
|
@@ -29,16 +43,17 @@
|
|
|
29
43
|
max-width: 100%;
|
|
30
44
|
box-sizing: border-box;
|
|
31
45
|
align-items: center;
|
|
32
|
-
padding: var(--rt-action-bar-padding);
|
|
33
|
-
border-radius: var(--rt-action-bar-radius);
|
|
34
|
-
background: var(--rt-action-bar-bg);
|
|
35
|
-
box-shadow: var(--rt-action-bar-shadow);
|
|
36
|
-
color: var(--rt-action-bar-color);
|
|
37
|
-
font-size: var(--rt-action-bar-font-size);
|
|
38
|
-
gap: var(--rt-action-bar-gap);
|
|
46
|
+
padding: var(--rt-action-bar-padding, var(--rt-action-bar-padding-default));
|
|
47
|
+
border-radius: var(--rt-action-bar-radius, var(--rt-action-bar-radius-default));
|
|
48
|
+
background: var(--rt-action-bar-bg, var(--rt-action-bar-bg-default));
|
|
49
|
+
box-shadow: var(--rt-action-bar-shadow, var(--rt-action-bar-shadow-default));
|
|
50
|
+
color: var(--rt-action-bar-color, var(--rt-action-bar-color-default));
|
|
51
|
+
font-size: var(--rt-action-bar-font-size, var(--rt-action-bar-font-size-default));
|
|
52
|
+
gap: var(--rt-action-bar-gap, var(--rt-action-bar-gap-default));
|
|
39
53
|
|
|
40
54
|
&__counter {
|
|
41
|
-
font-
|
|
55
|
+
font-size: var(--rt-action-bar-counter-font-size, var(--rt-action-bar-counter-font-size-default));
|
|
56
|
+
font-weight: var(--rt-action-bar-counter-weight, var(--rt-action-bar-counter-weight-default));
|
|
42
57
|
white-space: nowrap;
|
|
43
58
|
}
|
|
44
59
|
|
|
@@ -53,36 +68,46 @@
|
|
|
53
68
|
|
|
54
69
|
&__action {
|
|
55
70
|
display: flex;
|
|
71
|
+
min-height: var(--rt-action-bar-action-height, var(--rt-action-bar-action-height-default));
|
|
72
|
+
box-sizing: border-box;
|
|
56
73
|
align-items: center;
|
|
57
|
-
padding: var(--rt-action-bar-action-padding-block
|
|
74
|
+
padding: var(--rt-action-bar-action-padding-block, var(--rt-action-bar-action-padding-block-default))
|
|
75
|
+
var(--rt-action-bar-action-padding-inline, var(--rt-action-bar-action-padding-inline-default));
|
|
58
76
|
border: 0;
|
|
59
|
-
border-radius: var(--rt-action-bar-action-radius);
|
|
77
|
+
border-radius: var(--rt-action-bar-action-radius, var(--rt-action-bar-action-radius-default));
|
|
60
78
|
background: transparent;
|
|
61
79
|
color: inherit;
|
|
62
80
|
cursor: pointer;
|
|
63
81
|
font-family: inherit;
|
|
64
|
-
font-size:
|
|
82
|
+
font-size: var(--rt-action-bar-action-font-size, var(--rt-action-bar-action-font-size-default));
|
|
65
83
|
|
|
66
84
|
// Нажатие в этом ките набрано средним начертанием — так набрана кнопка кита, и
|
|
67
85
|
// действие полосы такое же нажатие. Первый кит ставил здесь шестьсот.
|
|
68
|
-
font-weight: var(--rt-action-bar-action-weight);
|
|
69
|
-
gap: var(--rt-
|
|
86
|
+
font-weight: var(--rt-action-bar-action-weight, var(--rt-action-bar-action-weight-default));
|
|
87
|
+
gap: var(--rt-action-bar-icon-gap, var(--rt-action-bar-icon-gap-default));
|
|
70
88
|
|
|
71
89
|
&:hover {
|
|
72
|
-
background: var(--rt-action-bar-action-bg-hover);
|
|
90
|
+
background: var(--rt-action-bar-action-bg-hover, var(--rt-action-bar-action-bg-hover-default));
|
|
73
91
|
}
|
|
74
92
|
|
|
75
93
|
&:focus-visible {
|
|
76
|
-
box-shadow: var(--rt-action-bar-action-focus-shadow);
|
|
94
|
+
box-shadow: var(--rt-action-bar-action-focus-shadow, var(--rt-action-bar-action-focus-shadow-default));
|
|
77
95
|
outline: none;
|
|
78
96
|
}
|
|
79
97
|
|
|
80
98
|
&--danger {
|
|
81
|
-
color: var(--rt-action-bar-action-color-danger);
|
|
99
|
+
color: var(--rt-action-bar-action-color-danger, var(--rt-action-bar-action-color-danger-default));
|
|
82
100
|
}
|
|
83
101
|
}
|
|
84
102
|
|
|
103
|
+
// Значок ставит свой размер строкой стиля, и свойство полосы берёт верх через min и max —
|
|
104
|
+
// так же делает заглушка пустого состояния. Глиф шрифта Material без пары в наборе кита
|
|
105
|
+
// держит кегль своего шага: его значок пишет строкой стиля на самом глифе.
|
|
85
106
|
&__action-icon {
|
|
107
|
+
min-width: var(--rt-action-bar-icon-size, var(--rt-action-bar-icon-size-default));
|
|
108
|
+
max-width: var(--rt-action-bar-icon-size, var(--rt-action-bar-icon-size-default));
|
|
109
|
+
min-height: var(--rt-action-bar-icon-size, var(--rt-action-bar-icon-size-default));
|
|
110
|
+
max-height: var(--rt-action-bar-icon-size, var(--rt-action-bar-icon-size-default));
|
|
86
111
|
flex: none;
|
|
87
112
|
}
|
|
88
113
|
|
|
@@ -101,11 +126,25 @@
|
|
|
101
126
|
// белому, и крестика не было видно ни в одном кадре. Своё свойство блока перебивают —
|
|
102
127
|
// так делает просмотр фотографии, где кнопка стоит на снимке.
|
|
103
128
|
&__close {
|
|
104
|
-
--rt-icon-button-color: var(--rt-action-bar-color);
|
|
105
|
-
--rt-icon-button-color-bg-hover: var(--rt-action-bar-action-bg-hover);
|
|
129
|
+
--rt-icon-button-color: var(--rt-action-bar-color, var(--rt-action-bar-color-default));
|
|
130
|
+
--rt-icon-button-color-bg-hover: var(--rt-action-bar-action-bg-hover, var(--rt-action-bar-action-bg-hover-default));
|
|
106
131
|
|
|
107
132
|
flex: none;
|
|
108
133
|
margin-left: auto;
|
|
134
|
+
|
|
135
|
+
// Размер кнопки — шаг самой иконочной кнопки: `--rt-icon-button-size` — ручка приложения,
|
|
136
|
+
// и кит её не объявляет. Шаг объявлен на внутренней кнопке правилом из двух классов,
|
|
137
|
+
// поэтому здесь три: хост с классом элемента и внутренняя кнопка.
|
|
138
|
+
&.rt-icon-button .rt-icon-button {
|
|
139
|
+
--rt-icon-button-size-step: var(--rt-action-bar-close-size, var(--rt-action-bar-close-size-default));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.rt-icon {
|
|
143
|
+
min-width: var(--rt-action-bar-close-icon-size, var(--rt-action-bar-close-icon-size-default));
|
|
144
|
+
max-width: var(--rt-action-bar-close-icon-size, var(--rt-action-bar-close-icon-size-default));
|
|
145
|
+
min-height: var(--rt-action-bar-close-icon-size, var(--rt-action-bar-close-icon-size-default));
|
|
146
|
+
max-height: var(--rt-action-bar-close-icon-size, var(--rt-action-bar-close-icon-size-default));
|
|
147
|
+
}
|
|
109
148
|
}
|
|
110
149
|
|
|
111
150
|
// Меню рисуется в оверлее, вне полосы: объявление на полосе до него не доходит, и раньше
|
|
@@ -115,14 +154,23 @@
|
|
|
115
154
|
&__menu {
|
|
116
155
|
--rt-action-bar-menu-radius-default: var(--rt-radius-md);
|
|
117
156
|
--rt-action-bar-menu-shadow-default: var(--rt-shadow-card);
|
|
157
|
+
--rt-action-bar-menu-padding-default: var(--rt-space-2);
|
|
158
|
+
--rt-action-bar-menu-gap-default: 0;
|
|
159
|
+
--rt-action-bar-menu-item-font-size-default: var(--rt-text-sm);
|
|
118
160
|
|
|
119
161
|
display: flex;
|
|
120
162
|
flex-direction: column;
|
|
121
|
-
padding: var(--rt-
|
|
163
|
+
padding: var(--rt-action-bar-menu-padding, var(--rt-action-bar-menu-padding-default));
|
|
122
164
|
border-radius: var(--rt-action-bar-menu-radius, var(--rt-action-bar-menu-radius-default));
|
|
123
165
|
background: var(--rt-action-bar-menu-bg, var(--rt-color-bg-surface));
|
|
124
166
|
box-shadow: var(--rt-action-bar-menu-shadow, var(--rt-action-bar-menu-shadow-default));
|
|
125
167
|
color: var(--rt-action-bar-menu-color, var(--rt-color-text-primary));
|
|
168
|
+
gap: var(--rt-action-bar-menu-gap, var(--rt-action-bar-menu-gap-default));
|
|
169
|
+
|
|
170
|
+
// Кегль пункта у пункта меню свой; меню полосы переназначает его правилом большей силы.
|
|
171
|
+
.rt-menu-item {
|
|
172
|
+
font-size: var(--rt-action-bar-menu-item-font-size, var(--rt-action-bar-menu-item-font-size-default));
|
|
173
|
+
}
|
|
126
174
|
}
|
|
127
175
|
|
|
128
176
|
// Полоса живёт на нижней кромке, и пальцу нужно место, которое занимают подписи. Решает
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# `rt-ai-run-status`
|
|
2
|
+
|
|
3
|
+
```html
|
|
4
|
+
<rt-ai-run-status [state]="run.state" [label]="run.label" [meta]="run.meta" [steps]="run.steps" [(expanded)]="stepsOpen" />
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
| вход | тип | умолчание |
|
|
8
|
+
| ---------- | ----------------------------- | ----------------------------- |
|
|
9
|
+
| `state` | `IRtAiRunStatus.State` | обязателен |
|
|
10
|
+
| `label` | `string` | обязателен |
|
|
11
|
+
| `meta` | `string` | `''` — не рисуется |
|
|
12
|
+
| `steps` | `readonly IRtTimeline.Step[]` | `[]` — строку нельзя раскрыть |
|
|
13
|
+
| `expanded` | `boolean` (`model`) | `false` |
|
|
14
|
+
|
|
15
|
+
Выход: `expandedChange` — от `model` раскрытия.
|
|
16
|
+
|
|
17
|
+
Спек — `docs/specs/ui-kit-v2/ai-run-status/`; здесь только устройство папки.
|
|
18
|
+
|
|
19
|
+
## Главное, что нужно знать
|
|
20
|
+
|
|
21
|
+
**Строка презентационная.** Состояние, подпись, мета и шаги приходят готовыми: разбор потока
|
|
22
|
+
событий модели и подсчёт времени — дело приложения.
|
|
23
|
+
|
|
24
|
+
**С шагами вся строка — кнопка.** Без шагов кнопки нет, строка объявляется `role="status"`.
|
|
25
|
+
`aria-expanded` и `aria-controls` стоят на кнопке, `id` — на ленте шагов.
|
|
26
|
+
|
|
27
|
+
## Края
|
|
28
|
+
|
|
29
|
+
- Блик подписи — градиент, обрезанный по тексту, и он бежит анимацией. Перелив из четырёх цветов
|
|
30
|
+
(`-shimmer-to`, `-shimmer-2…4`) между приглушённым текстом; проход 2,4 с: при 500 мс блик
|
|
31
|
+
мелькал, владелец попросил медленнее и разноцветный. При
|
|
32
|
+
`prefers-reduced-motion` анимации нет, подпись стоит цветом `--rt-ai-run-status-shimmer-from`.
|
|
33
|
+
- Крутилка переливается теми же цветами: метка анимирует `color` (`rt-ai-run-status-hue`), а
|
|
34
|
+
спиннеру внутри задан `--rt-spinner-progress-color: currentcolor`. Это публичный токен
|
|
35
|
+
спиннера, его ключевые кадры не трогаются. Без анимации крутилка стоит `-shimmer-to`.
|
|
36
|
+
- `expanded` при пустом `steps` ничего не раскрывает: список рисуется только при шагах.
|
|
37
|
+
|
|
38
|
+
## Рядом
|
|
39
|
+
|
|
40
|
+
- [`rt-timeline`](../timeline/CONTEXT.md) — лента шагов под строкой.
|
|
41
|
+
- [`rt-spinner`](../spinner/CONTEXT.md) — крутилка состояния `running`.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-ai-run-status — строка хода работы ассистента. ViewEncapsulation.None.
|
|
3
|
+
Класс блока висит и на хосте, и на корне шаблона, поэтому правила вложены в хост. */
|
|
4
|
+
|
|
5
|
+
rt-ai-run-status {
|
|
6
|
+
display: block;
|
|
7
|
+
|
|
8
|
+
.rt-ai-run-status {
|
|
9
|
+
--rt-ai-run-status-radius: var(--rt-radius-sm);
|
|
10
|
+
--rt-ai-run-status-focus-shadow: var(--rt-shadow-focus-ring);
|
|
11
|
+
--rt-ai-run-status-shimmer-duration: 2.4s;
|
|
12
|
+
--rt-ai-run-status-shimmer-from: var(--rt-color-text-muted);
|
|
13
|
+
--rt-ai-run-status-shimmer-to: var(--rt-color-action-primary-on-surface);
|
|
14
|
+
--rt-ai-run-status-shimmer-2: var(--rt-info-500);
|
|
15
|
+
--rt-ai-run-status-shimmer-3: var(--rt-success-400);
|
|
16
|
+
--rt-ai-run-status-shimmer-4: var(--rt-amber-400);
|
|
17
|
+
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
gap: var(--rt-space-2xs);
|
|
21
|
+
|
|
22
|
+
&__row {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
align-self: flex-start;
|
|
26
|
+
padding: var(--rt-space-2xs) 0;
|
|
27
|
+
border: 0;
|
|
28
|
+
border-radius: var(--rt-ai-run-status-radius);
|
|
29
|
+
margin: 0;
|
|
30
|
+
background: transparent;
|
|
31
|
+
color: inherit;
|
|
32
|
+
font: inherit;
|
|
33
|
+
gap: var(--rt-space-sm);
|
|
34
|
+
text-align: start;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
button.rt-ai-run-status__row {
|
|
38
|
+
cursor: pointer;
|
|
39
|
+
|
|
40
|
+
&:focus-visible {
|
|
41
|
+
box-shadow: var(--rt-ai-run-status-focus-shadow);
|
|
42
|
+
outline: 2px solid transparent;
|
|
43
|
+
outline-offset: 2px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&:hover .rt-ai-run-status__chevron {
|
|
47
|
+
color: var(--rt-color-text-primary);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&__mark {
|
|
52
|
+
display: inline-flex;
|
|
53
|
+
flex: none;
|
|
54
|
+
align-items: center;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
block-size: 16px;
|
|
57
|
+
inline-size: 16px;
|
|
58
|
+
|
|
59
|
+
.rt-spinner {
|
|
60
|
+
--rt-spinner-progress-color: currentcolor;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&--state--running .rt-ai-run-status__mark {
|
|
65
|
+
animation: rt-ai-run-status-hue var(--rt-ai-run-status-shimmer-duration) linear infinite;
|
|
66
|
+
color: var(--rt-ai-run-status-shimmer-to);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
&__label {
|
|
70
|
+
color: var(--rt-color-text-primary);
|
|
71
|
+
font-size: var(--rt-text-sm);
|
|
72
|
+
line-height: var(--rt-leading-snug);
|
|
73
|
+
|
|
74
|
+
&--state--running {
|
|
75
|
+
animation: rt-ai-run-status-shimmer var(--rt-ai-run-status-shimmer-duration) linear infinite;
|
|
76
|
+
background: linear-gradient(
|
|
77
|
+
90deg,
|
|
78
|
+
var(--rt-ai-run-status-shimmer-from) 0%,
|
|
79
|
+
var(--rt-ai-run-status-shimmer-to) 20%,
|
|
80
|
+
var(--rt-ai-run-status-shimmer-2) 35%,
|
|
81
|
+
var(--rt-ai-run-status-shimmer-3) 50%,
|
|
82
|
+
var(--rt-ai-run-status-shimmer-4) 65%,
|
|
83
|
+
var(--rt-ai-run-status-shimmer-from) 80%,
|
|
84
|
+
var(--rt-ai-run-status-shimmer-from) 100%
|
|
85
|
+
);
|
|
86
|
+
background-clip: text;
|
|
87
|
+
background-size: 200% 100%;
|
|
88
|
+
color: transparent;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&--state--stopped {
|
|
92
|
+
color: var(--rt-color-text-muted);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
&--state--failed {
|
|
96
|
+
color: var(--rt-color-action-danger-on-surface);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
&__meta {
|
|
101
|
+
flex: none;
|
|
102
|
+
color: var(--rt-color-text-muted);
|
|
103
|
+
font-size: var(--rt-text-xs);
|
|
104
|
+
line-height: var(--rt-leading-snug);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&__chevron {
|
|
108
|
+
flex: none;
|
|
109
|
+
color: var(--rt-color-text-muted);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
&__steps {
|
|
113
|
+
padding-inline-start: var(--rt-space-2xs);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@keyframes rt-ai-run-status-shimmer {
|
|
119
|
+
0% {
|
|
120
|
+
background-position: 100% 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
100% {
|
|
124
|
+
background-position: -100% 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@keyframes rt-ai-run-status-hue {
|
|
129
|
+
0%,
|
|
130
|
+
100% {
|
|
131
|
+
color: var(--rt-ai-run-status-shimmer-to);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
25% {
|
|
135
|
+
color: var(--rt-ai-run-status-shimmer-2);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
50% {
|
|
139
|
+
color: var(--rt-ai-run-status-shimmer-3);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
75% {
|
|
143
|
+
color: var(--rt-ai-run-status-shimmer-4);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@media (prefers-reduced-motion: reduce) {
|
|
148
|
+
.rt-ai-run-status--state--running .rt-ai-run-status__mark {
|
|
149
|
+
animation: none;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.rt-ai-run-status__label--state--running {
|
|
153
|
+
animation: none;
|
|
154
|
+
background: none;
|
|
155
|
+
color: var(--rt-ai-run-status-shimmer-from);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
@@ -35,6 +35,7 @@ ref.afterClosed().subscribe((result?: ITour): void => …);
|
|
|
35
35
|
| `closeOnBackdropClick` / `closeOnEscape` | `true`; второе — из настроек кита |
|
|
36
36
|
| `backdropClass` / `panelClass` | `rt-aside-backdrop` / `rt-aside-overlay` |
|
|
37
37
|
| `injector` | корневой — уничтожение хозяина закрывает |
|
|
38
|
+
| `disposeOnNavigation` | `true` — переход по адресу снимает |
|
|
38
39
|
|
|
39
40
|
## Главное, что нужно знать
|
|
40
41
|
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
/* rt-aside-header — заголовок side-sheet'а. ViewEncapsulation.None.
|
|
3
3
|
Селекторы префиксованы `.rt-aside-header`. */
|
|
4
4
|
|
|
5
|
+
/* Свойства шапки — рукоятки приложения: каждое читается как `--rt-aside-header-*` с любого
|
|
6
|
+
предка (панели оверлея, своего контейнера), а на самом блоке стоит только умолчание под
|
|
7
|
+
`-default`. Значение, объявленное на блоке под публичным именем, перебило бы предка. */
|
|
5
8
|
.rt-aside-header {
|
|
6
|
-
--rt-aside-header-title-size: var(--rt-text-xl);
|
|
7
|
-
--rt-aside-header-title-weight: var(--rt-font-weight-bold);
|
|
8
|
-
--rt-aside-header-subtitle-size: var(--rt-text-sm);
|
|
9
|
-
--rt-aside-header-gap: var(--rt-space-sm);
|
|
10
|
-
--rt-aside-header-min-height: auto;
|
|
9
|
+
--rt-aside-header-title-size-default: var(--rt-text-xl);
|
|
10
|
+
--rt-aside-header-title-weight-default: var(--rt-font-weight-bold);
|
|
11
|
+
--rt-aside-header-subtitle-size-default: var(--rt-text-sm);
|
|
12
|
+
--rt-aside-header-gap-default: var(--rt-space-sm);
|
|
13
|
+
--rt-aside-header-min-height-default: auto;
|
|
11
14
|
|
|
12
15
|
/* Отступ шапки — ручка приложения; без неё общий инсет панели. */
|
|
13
16
|
padding: var(--rt-aside-header-inset, var(--rt-aside-inset));
|
|
@@ -15,15 +18,28 @@
|
|
|
15
18
|
&__content {
|
|
16
19
|
display: flex;
|
|
17
20
|
min-width: 0;
|
|
18
|
-
min-height: var(--rt-aside-header-min-height);
|
|
21
|
+
min-height: var(--rt-aside-header-min-height, var(--rt-aside-header-min-height-default));
|
|
19
22
|
align-items: center;
|
|
20
|
-
gap: var(--rt-aside-header-gap);
|
|
23
|
+
gap: var(--rt-aside-header-gap, var(--rt-aside-header-gap-default));
|
|
21
24
|
}
|
|
22
25
|
|
|
26
|
+
/* Кнопка «назад» — шаг `sm` кнопки и значка. Размеры кнопки и значка — рукоятки
|
|
27
|
+
`--rt-aside-header-back-size` и `--rt-aside-header-back-icon-size` с любого предка; без них
|
|
28
|
+
стоят те же шаги. Значок читает свою ступень `sm` на этом узле: ступень, заданная
|
|
29
|
+
приложением выше, сюда не доходит — у кнопки «назад» своя рукоятка. */
|
|
23
30
|
&__back {
|
|
31
|
+
--rt-icon-step-sm: var(--rt-aside-header-back-icon-size, var(--rt-size-4));
|
|
32
|
+
|
|
24
33
|
flex-shrink: 0;
|
|
25
34
|
}
|
|
26
35
|
|
|
36
|
+
/* Шаг кнопки переназначается на её внутреннем узле: модификатор размера объявляет его там
|
|
37
|
+
же. Вес селектора выше модификатора, а публичная `--rt-icon-button-size` по-прежнему
|
|
38
|
+
важнее шага. */
|
|
39
|
+
& &__back .rt-icon-button {
|
|
40
|
+
--rt-icon-button-size-step: var(--rt-aside-header-back-size, var(--rt-control-height-sm));
|
|
41
|
+
}
|
|
42
|
+
|
|
27
43
|
/* Колонка overline + title. flex/min-width живут здесь, чтобы ellipsis
|
|
28
44
|
у title работал и в двухстрочном варианте. */
|
|
29
45
|
&__heading {
|
|
@@ -49,8 +65,8 @@
|
|
|
49
65
|
min-width: 0;
|
|
50
66
|
margin: 0;
|
|
51
67
|
color: var(--rt-color-text-primary);
|
|
52
|
-
font-size: var(--rt-aside-header-title-size);
|
|
53
|
-
font-weight: var(--rt-aside-header-title-weight);
|
|
68
|
+
font-size: var(--rt-aside-header-title-size, var(--rt-aside-header-title-size-default));
|
|
69
|
+
font-weight: var(--rt-aside-header-title-weight, var(--rt-aside-header-title-weight-default));
|
|
54
70
|
|
|
55
71
|
/* Высота строки — ручка приложения; без неё наследуется, как было. */
|
|
56
72
|
line-height: var(--rt-aside-header-title-leading, inherit);
|
|
@@ -71,7 +87,7 @@
|
|
|
71
87
|
&__subtitle {
|
|
72
88
|
margin: 0;
|
|
73
89
|
color: var(--rt-color-text-muted);
|
|
74
|
-
font-size: var(--rt-aside-header-subtitle-size);
|
|
90
|
+
font-size: var(--rt-aside-header-subtitle-size, var(--rt-aside-header-subtitle-size-default));
|
|
75
91
|
line-height: var(--rt-leading-snug);
|
|
76
92
|
}
|
|
77
93
|
|
|
@@ -98,7 +114,7 @@
|
|
|
98
114
|
не занимает. */
|
|
99
115
|
&__row {
|
|
100
116
|
min-width: 0;
|
|
101
|
-
margin-top: var(--rt-aside-header-gap);
|
|
117
|
+
margin-top: var(--rt-aside-header-gap, var(--rt-aside-header-gap-default));
|
|
102
118
|
|
|
103
119
|
&:empty {
|
|
104
120
|
display: none;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `rt-copy-value`
|
|
2
|
+
|
|
3
|
+
```html
|
|
4
|
+
<rt-copy-value label="Reference" copyLabel="Copy reference" [value]="error.referenceId" />
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
| вход | тип | умолчание |
|
|
8
|
+
| ----------- | -------- | ---------------------------- |
|
|
9
|
+
| `value` | `string` | обязателен |
|
|
10
|
+
| `label` | `string` | `''` — не рисуется |
|
|
11
|
+
| `copyLabel` | `string` | `''` → переведённое `uiCopy` |
|
|
12
|
+
|
|
13
|
+
Выход: `copiedValue` — значение, ушедшее в буфер.
|
|
14
|
+
|
|
15
|
+
Спек — `docs/specs/ui-kit-v2/copy-value/`; здесь только устройство папки.
|
|
16
|
+
|
|
17
|
+
## Главное, что нужно знать
|
|
18
|
+
|
|
19
|
+
**Копируется ровно `value`.** Отображаемое и копируемое совпадают: значение стоит на подложке
|
|
20
|
+
целиком, длинное обрезается многоточием, но в буфер уходит полностью.
|
|
21
|
+
|
|
22
|
+
## Края
|
|
23
|
+
|
|
24
|
+
- После нажатия подпись кнопки две секунды «Copied», иконка — галочка; таймер гасится при
|
|
25
|
+
уничтожении.
|
|
26
|
+
- Корень шаблона — `ng-container`: класс блока висит только на хосте.
|
|
27
|
+
|
|
28
|
+
## Рядом
|
|
29
|
+
|
|
30
|
+
- [`rt-copy-cell`](../table/copy-cell/rt-copy-cell.component.ts) — копирование в ячейке таблицы,
|
|
31
|
+
с кнопкой по наведению и проекцией содержимого.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-copy-value — значение с кнопкой копирования. ViewEncapsulation.None.
|
|
3
|
+
Корень шаблона — ng-container, поэтому класс блока висит только на хосте. */
|
|
4
|
+
|
|
5
|
+
.rt-copy-value {
|
|
6
|
+
--rt-copy-value-radius: var(--rt-radius-sm);
|
|
7
|
+
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: var(--rt-space-sm);
|
|
11
|
+
max-inline-size: 100%;
|
|
12
|
+
min-inline-size: 0;
|
|
13
|
+
|
|
14
|
+
&__label {
|
|
15
|
+
flex: none;
|
|
16
|
+
color: var(--rt-color-text-muted);
|
|
17
|
+
font-size: var(--rt-text-xs);
|
|
18
|
+
line-height: var(--rt-leading-snug);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&__value {
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
padding: var(--rt-space-2xs) var(--rt-space-xs);
|
|
24
|
+
border-radius: var(--rt-copy-value-radius);
|
|
25
|
+
background: var(--rt-color-bg-surface-subtle);
|
|
26
|
+
color: var(--rt-color-text-primary);
|
|
27
|
+
font-size: var(--rt-text-xs);
|
|
28
|
+
font-weight: var(--rt-font-weight-medium);
|
|
29
|
+
line-height: var(--rt-leading-snug);
|
|
30
|
+
min-inline-size: 0;
|
|
31
|
+
text-overflow: ellipsis;
|
|
32
|
+
white-space: nowrap;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&__button {
|
|
36
|
+
flex: none;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -136,11 +136,11 @@
|
|
|
136
136
|
--rt-data-list-settings-aside-header-height: 96px;
|
|
137
137
|
|
|
138
138
|
.rt-aside-header {
|
|
139
|
-
--rt-aside-header-title-size: var(--rt-text-2xl);
|
|
140
|
-
--rt-aside-header-title-weight: var(--rt-font-weight-semibold);
|
|
141
|
-
--rt-aside-header-subtitle-size: var(--rt-text-md);
|
|
142
|
-
--rt-aside-header-gap: var(--rt-space-md);
|
|
143
|
-
--rt-aside-header-min-height: var(--rt-data-list-settings-aside-header-height);
|
|
139
|
+
--rt-aside-header-title-size-default: var(--rt-text-2xl);
|
|
140
|
+
--rt-aside-header-title-weight-default: var(--rt-font-weight-semibold);
|
|
141
|
+
--rt-aside-header-subtitle-size-default: var(--rt-text-md);
|
|
142
|
+
--rt-aside-header-gap-default: var(--rt-space-md);
|
|
143
|
+
--rt-aside-header-min-height-default: var(--rt-data-list-settings-aside-header-height);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
/* Кнопка «назад» — круглая `mat-icon-button` первого кита, как и кнопки подвала панели. */
|
|
@@ -100,3 +100,8 @@
|
|
|
100
100
|
- Выбор по одной рисует радиокнопку, и флажка страницы в шапке нет.
|
|
101
101
|
- Отметки, названные заранее (`selectedEntitiesKeys`), ставятся один раз — к первым непустым
|
|
102
102
|
строкам; позже присланный набор уже ничего не переписывает.
|
|
103
|
+
|
|
104
|
+
## Ячейка отбора: фокус после сброса
|
|
105
|
+
|
|
106
|
+
`rt-data-table-filter-cell.onClear` после сброса даты или списка переводит фокус в поле рядом.
|
|
107
|
+
Крестик без значения выключается, и выключенная кнопка роняла фокус на `body`.
|
|
@@ -24,6 +24,12 @@
|
|
|
24
24
|
**Отметки всплывающего окна уходят только по «Применить».** «Отмена», `Escape` и щелчок мимо
|
|
25
25
|
снимают их, значение остаётся прежним.
|
|
26
26
|
|
|
27
|
+
**Вид приглашения, очистки, поиска и пустого результата задаёт приложение входами.** Значок и вид
|
|
28
|
+
кнопки приглашения — `invitationButtonIcon` и `invitationButtonAppearance`, значок очистки —
|
|
29
|
+
`clearIcon`, вид поля поиска окна — `searchAppearance`, подпись пустого результата —
|
|
30
|
+
`emptyResultsText`; у поля строк вид поля новой строки — `fieldAppearance`. Цвет кнопки «Добавить»
|
|
31
|
+
— ручка `--rt-dynamic-selector-list-add-color`: кнопку проецируют оба поля, и вид у неё разный.
|
|
32
|
+
|
|
27
33
|
**Поле строк срезает пробелы по краям и не добавляет пустое и повторное.** Повтор сравнивается
|
|
28
34
|
точно, с учётом регистра.
|
|
29
35
|
|
|
@@ -37,6 +43,18 @@
|
|
|
37
43
|
- Приглашение (`invitation`) встаёт вместо полосы кнопок; его кнопка открывает тот же выбор.
|
|
38
44
|
`listActionsShown = false` убирает сброс и очистку, оставляя кнопку добавления;
|
|
39
45
|
`removeShown = false` убирает корзину строк.
|
|
46
|
+
Рисунок приглашения — значок кита `invitationIcon` или имя Material `invitationGlyph`; при обоих
|
|
47
|
+
рисуется значок кита.
|
|
48
|
+
- Подпись поля — обёртка `rt-field` с `label`, как у любого поля кита. У поля строк она ведёт к полю
|
|
49
|
+
новой строки, пока оно открыто.
|
|
50
|
+
- Выбранное без формы — вход `chosenEntities`: непустой список с другими ключами становится и
|
|
51
|
+
значением, и списком для «Сбросить»; эхо выбора от родителя ничего не меняет.
|
|
52
|
+
- `titleWrap="false"` — название строки одной строкой с многоточием и подсказкой при обрезке.
|
|
53
|
+
- Подпись самого поля новой строки — вход `fieldLabel`: поле встаёт в `rt-field` с этой подписью.
|
|
54
|
+
Без подписи обёртки нет, и поле стоит как раньше.
|
|
55
|
+
- Вид кнопки приглашения, значок очистки, вид поиска, подпись пустого результата и перенос названия
|
|
56
|
+
строки приложение задаёт один раз — `provideRtKit({ components: { dynamicSelector: { … } } })`.
|
|
57
|
+
Вход на месте сильнее, без настроек остаются умолчания кита.
|
|
40
58
|
- Правки в своём шаблоне строки — `extraChanged`: сброс и очистка включены при прежних ключах и
|
|
41
59
|
сообщают `listReset` и `listCleared`, значение сброс тогда не трогает.
|
|
42
60
|
- Начальный запрос окна — `searchTerm`, событием поиска он не уходит. Открыто ли окно — сигнал
|