@rt-tools/ui-kit-v2 0.18.0 → 0.19.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/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 +98 -0
- 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 +2 -2
- 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 +1 -1
- 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.0.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 +36 -0
- package/src/lib/components/ai-run-status/rt-ai-run-status.component.scss +119 -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/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/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 +93 -53
- 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-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
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-ai-chat — панель ИИ-ассистента. ViewEncapsulation.None.
|
|
3
|
+
Корень шаблона — ng-container: класс блока висит на хосте. Высоту задаёт родитель. */
|
|
4
|
+
|
|
5
|
+
.rt-ai-chat {
|
|
6
|
+
--rt-ai-chat-bubble-radius: var(--rt-radius-xl);
|
|
7
|
+
--rt-ai-chat-column-border-width: var(--rt-border-width-thin);
|
|
8
|
+
--rt-ai-chat-column-width: 280px;
|
|
9
|
+
--rt-ai-chat-match-bg: var(--rt-yellow-400);
|
|
10
|
+
--rt-ai-chat-match-color: var(--rt-neutral-950);
|
|
11
|
+
--rt-ai-chat-match-radius: var(--rt-radius-xs);
|
|
12
|
+
--rt-ai-chat-unread-radius: var(--rt-radius-full);
|
|
13
|
+
|
|
14
|
+
display: flex;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
background: var(--rt-color-bg-surface);
|
|
17
|
+
block-size: 100%;
|
|
18
|
+
color: var(--rt-color-text-primary);
|
|
19
|
+
min-block-size: 0;
|
|
20
|
+
|
|
21
|
+
&__thread-column {
|
|
22
|
+
display: flex;
|
|
23
|
+
flex: none;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
border-inline-end: var(--rt-ai-chat-column-border-width) solid var(--rt-color-border-default);
|
|
26
|
+
inline-size: var(--rt-ai-chat-column-width);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
&__column-head {
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
justify-content: space-between;
|
|
33
|
+
padding: var(--rt-space-sm) var(--rt-space-md);
|
|
34
|
+
gap: var(--rt-space-xs);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&__column-title {
|
|
38
|
+
font-size: var(--rt-text-md);
|
|
39
|
+
font-weight: var(--rt-font-weight-semibold);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&__conversation {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex: 1 1 auto;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
min-block-size: 0;
|
|
47
|
+
min-inline-size: 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&__header {
|
|
51
|
+
display: flex;
|
|
52
|
+
flex: none;
|
|
53
|
+
align-items: center;
|
|
54
|
+
padding: var(--rt-space-sm) var(--rt-space-md);
|
|
55
|
+
gap: var(--rt-space-xs);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&__heading {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex: 1 1 auto;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
min-inline-size: 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
&__title {
|
|
66
|
+
display: inline-flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
font-size: var(--rt-text-md);
|
|
69
|
+
font-weight: var(--rt-font-weight-semibold);
|
|
70
|
+
gap: var(--rt-space-xs);
|
|
71
|
+
line-height: var(--rt-leading-snug);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&__subtitle {
|
|
75
|
+
overflow: hidden;
|
|
76
|
+
color: var(--rt-color-text-muted);
|
|
77
|
+
font-size: var(--rt-text-xs);
|
|
78
|
+
line-height: var(--rt-leading-snug);
|
|
79
|
+
text-overflow: ellipsis;
|
|
80
|
+
white-space: nowrap;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&__actions {
|
|
84
|
+
display: flex;
|
|
85
|
+
flex: none;
|
|
86
|
+
align-items: center;
|
|
87
|
+
gap: var(--rt-space-xs);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&__feed {
|
|
91
|
+
display: flex;
|
|
92
|
+
flex: 1 1 auto;
|
|
93
|
+
flex-direction: column;
|
|
94
|
+
padding: var(--rt-space-md);
|
|
95
|
+
font-size: var(--rt-text-sm);
|
|
96
|
+
gap: var(--rt-space-md);
|
|
97
|
+
min-block-size: 0;
|
|
98
|
+
overflow-y: auto;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&__spinner {
|
|
102
|
+
align-self: center;
|
|
103
|
+
margin: auto;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
&__empty {
|
|
107
|
+
display: flex;
|
|
108
|
+
flex-direction: column;
|
|
109
|
+
justify-content: center;
|
|
110
|
+
gap: var(--rt-space-lg);
|
|
111
|
+
margin-block: auto;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
&__suggestions {
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
gap: var(--rt-space-sm);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
&__question {
|
|
121
|
+
display: flex;
|
|
122
|
+
justify-content: flex-end;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
&__bubble {
|
|
126
|
+
display: flex;
|
|
127
|
+
flex-direction: column;
|
|
128
|
+
padding: var(--rt-space-sm) var(--rt-space-md);
|
|
129
|
+
border-radius: var(--rt-ai-chat-bubble-radius);
|
|
130
|
+
background: var(--rt-color-bg-subtle);
|
|
131
|
+
gap: var(--rt-space-2xs);
|
|
132
|
+
max-inline-size: 80%;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
&__author,
|
|
136
|
+
&__time {
|
|
137
|
+
color: var(--rt-color-text-muted);
|
|
138
|
+
font-size: var(--rt-text-xs);
|
|
139
|
+
line-height: var(--rt-leading-snug);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&__author {
|
|
143
|
+
font-weight: var(--rt-font-weight-semibold);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
&__bubble-text {
|
|
147
|
+
margin: 0;
|
|
148
|
+
line-height: var(--rt-leading-normal);
|
|
149
|
+
overflow-wrap: anywhere;
|
|
150
|
+
white-space: pre-wrap;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
&__error {
|
|
154
|
+
display: flex;
|
|
155
|
+
flex-direction: column;
|
|
156
|
+
align-items: flex-start;
|
|
157
|
+
gap: var(--rt-space-sm);
|
|
158
|
+
|
|
159
|
+
rt-message {
|
|
160
|
+
align-self: stretch;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
&__composer {
|
|
165
|
+
box-sizing: border-box;
|
|
166
|
+
flex: none;
|
|
167
|
+
padding: var(--rt-space-sm) var(--rt-space-md) 0;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
&__disclaimer {
|
|
171
|
+
flex: none;
|
|
172
|
+
padding: var(--rt-space-xs) var(--rt-space-md) var(--rt-space-sm);
|
|
173
|
+
margin: 0;
|
|
174
|
+
color: var(--rt-color-text-muted);
|
|
175
|
+
font-size: var(--rt-text-xs);
|
|
176
|
+
line-height: var(--rt-leading-snug);
|
|
177
|
+
text-align: center;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
&__threads {
|
|
181
|
+
flex: 1 1 auto;
|
|
182
|
+
min-block-size: 0;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
&__thread-title {
|
|
186
|
+
overflow: hidden;
|
|
187
|
+
min-inline-size: 0;
|
|
188
|
+
text-overflow: ellipsis;
|
|
189
|
+
white-space: nowrap;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
&__thread-part {
|
|
193
|
+
&--match {
|
|
194
|
+
border-radius: var(--rt-ai-chat-match-radius);
|
|
195
|
+
background: var(--rt-ai-chat-match-bg);
|
|
196
|
+
color: var(--rt-ai-chat-match-color);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
&__thread-meta {
|
|
201
|
+
display: flex;
|
|
202
|
+
flex: none;
|
|
203
|
+
align-items: center;
|
|
204
|
+
gap: var(--rt-space-xs);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
&__thread-unread {
|
|
208
|
+
border-radius: var(--rt-ai-chat-unread-radius);
|
|
209
|
+
background: var(--rt-color-action-primary);
|
|
210
|
+
color: var(--rt-color-text-inverse);
|
|
211
|
+
font-size: var(--rt-text-xs);
|
|
212
|
+
font-weight: var(--rt-font-weight-semibold);
|
|
213
|
+
line-height: 18px;
|
|
214
|
+
padding-inline: 6px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
&__thread-time {
|
|
218
|
+
color: var(--rt-color-text-muted);
|
|
219
|
+
font-size: var(--rt-text-xs);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
@@ -37,10 +37,13 @@
|
|
|
37
37
|
overflow-y: auto;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
// Зону ввода рисует Quill, и класса кита у неё нет: сброс полосы для узлов приложения под
|
|
41
|
+
// узлом кита вернул бы ей полосу браузера. Она наследует тихую полосу редактора, как раньше.
|
|
40
42
|
.ql-editor {
|
|
41
43
|
background-color: var(--rt-color-bg-surface-subtle);
|
|
42
44
|
color: var(--rt-color-text-primary);
|
|
43
45
|
min-block-size: 96px;
|
|
46
|
+
scrollbar-color: inherit;
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
.ql-editor.ql-blank:before {
|
|
@@ -14,6 +14,15 @@
|
|
|
14
14
|
scrollbar-width: thin;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
// `scrollbar-color` наследуется, и без этого правила прокручиваемый узел приложения внутри узла
|
|
18
|
+
// кита получал прозрачную полосу кита, а Chrome при заданном свойстве не читал его
|
|
19
|
+
// `::-webkit-scrollbar`. Первый узел без класса кита под узлом кита возвращает умолчание
|
|
20
|
+
// браузера, и всё под ним наследует уже его. Вес селектора нулевой: правило приложения на том же
|
|
21
|
+
// узле перебивает и его.
|
|
22
|
+
:where([class^='rt-'], [class*=' rt-']) > :where(:not([class^='rt-'], [class*=' rt-'])) {
|
|
23
|
+
scrollbar-color: auto;
|
|
24
|
+
}
|
|
25
|
+
|
|
17
26
|
// Проявляется ползунок наведением на саму зону, а не на себя: навести на невидимое нечем.
|
|
18
27
|
// Фокус внутри зоны показывает его наравне — прокрутка с клавиатуры идёт без указателя, и
|
|
19
28
|
// человек иначе не видит ни того, где он в списке, ни того, что список прокручивается.
|
package/styles/tokens.css
CHANGED
|
@@ -6342,6 +6342,9 @@ html.rt-theme-dark.rt-preset-material {
|
|
|
6342
6342
|
scrollbar-color: transparent transparent;
|
|
6343
6343
|
scrollbar-width: thin;
|
|
6344
6344
|
}
|
|
6345
|
+
:where([class^=rt-], [class*=" rt-"]) > :where(:not([class^=rt-], [class*=" rt-"])) {
|
|
6346
|
+
scrollbar-color: auto;
|
|
6347
|
+
}
|
|
6345
6348
|
:where([class^=rt-], [class*=" rt-"]):hover,
|
|
6346
6349
|
:where([class^=rt-], [class*=" rt-"]):focus-within {
|
|
6347
6350
|
scrollbar-color: var(--rt-color-border-default) transparent;
|
|
@@ -22,6 +22,11 @@ declare namespace IRtActionBar {
|
|
|
22
22
|
interface Action {
|
|
23
23
|
readonly label: string;
|
|
24
24
|
readonly icon?: IRtIcon.Name;
|
|
25
|
+
/**
|
|
26
|
+
* Имя Material вместо значка кита: рисуется так же, как вход `glyph` у `rt-icon` — парой из
|
|
27
|
+
* перечня кита или лигатурой шрифта. Значок кита, заданный рядом, сильнее.
|
|
28
|
+
*/
|
|
29
|
+
readonly glyph?: string;
|
|
25
30
|
readonly look?: IRtActionBar.Look;
|
|
26
31
|
readonly run?: () => void;
|
|
27
32
|
readonly menu?: readonly IRtActionBar.Action[];
|
|
@@ -80,12 +85,14 @@ declare class RtActionBarComponent {
|
|
|
80
85
|
*/
|
|
81
86
|
protected readonly actions: Signal<readonly IActionView[]>;
|
|
82
87
|
readonly config: InputSignal<IRtActionBar.Config>;
|
|
88
|
+
/** Значок кнопки, закрывающей полосу. */
|
|
89
|
+
readonly closeIcon: InputSignal<IRtIcon.Name>;
|
|
83
90
|
readonly actionRun: OutputEmitterRef<IRtActionBar.Action>;
|
|
84
91
|
readonly closed: OutputEmitterRef<void>;
|
|
85
92
|
protected onAction(action: IRtActionBar.Action): void;
|
|
86
93
|
protected onClose(): void;
|
|
87
94
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtActionBarComponent, never>;
|
|
88
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RtActionBarComponent, "rt-action-bar", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; }, { "actionRun": "actionRun"; "closed": "closed"; }, never, never, true, [{ directive: typeof i1.RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
|
|
95
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtActionBarComponent, "rt-action-bar", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "closeIcon": { "alias": "closeIcon"; "required": false; "isSignal": true; }; }, { "actionRun": "actionRun"; "closed": "closed"; }, never, never, true, [{ directive: typeof i1.RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
|
|
89
96
|
}
|
|
90
97
|
|
|
91
98
|
/**
|
|
@@ -109,11 +116,13 @@ declare class RtActionBarHolderComponent {
|
|
|
109
116
|
/** Стоит ли полоса в разметке: она остаётся в ней и на время ухода. */
|
|
110
117
|
protected readonly shown: Signal<boolean>;
|
|
111
118
|
protected readonly leaving: Signal<boolean>;
|
|
119
|
+
/** Значок кнопки, закрывающей полосу, — уходит в саму полосу. */
|
|
120
|
+
readonly closeIcon: InputSignal<IRtIcon.Name>;
|
|
112
121
|
constructor();
|
|
113
122
|
/** Крестик сообщает наружу; выбранное отпускает служба, которой список и владеет. */
|
|
114
123
|
protected onClosed(): void;
|
|
115
124
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtActionBarHolderComponent, never>;
|
|
116
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RtActionBarHolderComponent, "rt-action-bar-holder", never, {}, {}, never, never, true, never>;
|
|
125
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtActionBarHolderComponent, "rt-action-bar-holder", never, { "closeIcon": { "alias": "closeIcon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
117
126
|
}
|
|
118
127
|
|
|
119
128
|
/**
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Signal, InputSignal, ModelSignal } from '@angular/core';
|
|
3
|
+
import { IRtIcon } from '@rt-tools/ui-kit-v2/core';
|
|
4
|
+
import { IRtTimeline } from '@rt-tools/ui-kit-v2/timeline';
|
|
5
|
+
|
|
6
|
+
declare namespace IRtAiRunStatus {
|
|
7
|
+
/**
|
|
8
|
+
* Состояние хода работы ассистента:
|
|
9
|
+
* - `running` — модель работает: крутилка и бегущий блик по подписи;
|
|
10
|
+
* - `done` — ответ готов;
|
|
11
|
+
* - `stopped` — человек остановил ответ;
|
|
12
|
+
* - `failed` — ответ оборвался ошибкой.
|
|
13
|
+
*/
|
|
14
|
+
type State = 'running' | 'done' | 'stopped' | 'failed';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Строка хода работы ИИ-ассистента: значок состояния, подпись текущего шага или итога, мета
|
|
19
|
+
* (время, число шагов) и раскрытие списка пройденных шагов. Пока модель работает, по подписи
|
|
20
|
+
* бежит блик; при `prefers-reduced-motion` подпись стоит ровным цветом.
|
|
21
|
+
*
|
|
22
|
+
* Компонент презентационный: состояние, подпись и шаги приходят готовыми, разбор потока
|
|
23
|
+
* событий модели остаётся в приложении.
|
|
24
|
+
*/
|
|
25
|
+
declare class RtAiRunStatusComponent {
|
|
26
|
+
#private;
|
|
27
|
+
protected readonly stepsId: string;
|
|
28
|
+
protected readonly hasSteps: Signal<boolean>;
|
|
29
|
+
protected readonly isOpen: Signal<boolean>;
|
|
30
|
+
protected readonly mark: Signal<{
|
|
31
|
+
name: IRtIcon.Name;
|
|
32
|
+
color: IRtIcon.Color;
|
|
33
|
+
} | null>;
|
|
34
|
+
protected readonly toggleLabel: Signal<string>;
|
|
35
|
+
readonly state: InputSignal<IRtAiRunStatus.State>;
|
|
36
|
+
/** Подпись: текущий шаг, пока модель работает, или итог — «Worked for 31s». */
|
|
37
|
+
readonly label: InputSignal<string>;
|
|
38
|
+
/** Вторичная строка справа от подписи: время шага или число шагов. Пусто — не рисуется. */
|
|
39
|
+
readonly meta: InputSignal<string>;
|
|
40
|
+
/** Пройденные шаги. Пустой список — строку нельзя раскрыть. */
|
|
41
|
+
readonly steps: InputSignal<readonly IRtTimeline.Step[]>;
|
|
42
|
+
/** Раскрыт ли список шагов. */
|
|
43
|
+
readonly expanded: ModelSignal<boolean>;
|
|
44
|
+
protected onToggle(): void;
|
|
45
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RtAiRunStatusComponent, never>;
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtAiRunStatusComponent, "rt-ai-run-status", never, { "state": { "alias": "state"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "meta": { "alias": "meta"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, never, true, never>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { IRtAiRunStatus, RtAiRunStatusComponent };
|
|
@@ -152,6 +152,11 @@ interface IRtAsideConfig<TData = unknown> {
|
|
|
152
152
|
* панель через `close()`. Без него родитель — корневой injector, и панель живёт сама по себе.
|
|
153
153
|
*/
|
|
154
154
|
injector?: Injector;
|
|
155
|
+
/**
|
|
156
|
+
* Снимать панель при переходе по адресу. По умолчанию `true`; `false` оставляет её открытой —
|
|
157
|
+
* для панели, которая сама ведёт навигацию и должна пережить смену адреса.
|
|
158
|
+
*/
|
|
159
|
+
disposeOnNavigation?: boolean;
|
|
155
160
|
}
|
|
156
161
|
/**
|
|
157
162
|
* Программный API для открытия side-sheet поверх CDK Overlay.
|
|
@@ -273,6 +278,9 @@ declare namespace IRtAsideHeader {
|
|
|
273
278
|
* Слот `[asideHeaderContent]` — строка под заголовком на всю ширину шапки: поиск, вкладки,
|
|
274
279
|
* сводка. Пустой слот места не занимает.
|
|
275
280
|
*
|
|
281
|
+
* Слот `[asideHeadingContent]` — содержимое в колонке заголовка, под подписью и бэйджами, по её
|
|
282
|
+
* левому краю. Пустой слот ничего не рисует.
|
|
283
|
+
*
|
|
276
284
|
* `ViewEncapsulation.None` — для единообразия с rt-dialog-header (стили
|
|
277
285
|
* префиксованы `.rt-aside-header`).
|
|
278
286
|
*
|
|
@@ -325,7 +333,7 @@ declare class RtAsideHeaderComponent {
|
|
|
325
333
|
readonly dismiss: OutputEmitterRef<void>;
|
|
326
334
|
protected onDismiss(): void;
|
|
327
335
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtAsideHeaderComponent, never>;
|
|
328
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideHeaderComponent, "rt-aside-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "overline": { "alias": "overline"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "badges": { "alias": "badges"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, ["[asideActions]", "[asideHeaderContent]"], true, never>;
|
|
336
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideHeaderComponent, "rt-aside-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "overline": { "alias": "overline"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "badges": { "alias": "badges"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, ["[asideHeadingContent]", "[asideActions]", "[asideHeaderContent]"], true, never>;
|
|
329
337
|
}
|
|
330
338
|
|
|
331
339
|
/**
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { WritableSignal, Signal, InputSignal, OutputEmitterRef } from '@angular/core';
|
|
3
|
+
import { IRtIcon } from '@rt-tools/ui-kit-v2/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Значение, которое человек переносит в другое место: номер обращения, ключ, идентификатор.
|
|
7
|
+
* Подпись слева, значение на подложке и кнопка копирования с подсказкой. После нажатия иконка
|
|
8
|
+
* на две секунды меняется на галочку, подпись — на «Copied».
|
|
9
|
+
*/
|
|
10
|
+
declare class RtCopyValueComponent {
|
|
11
|
+
#private;
|
|
12
|
+
protected readonly copied: WritableSignal<boolean>;
|
|
13
|
+
protected readonly iconName: Signal<IRtIcon.Name>;
|
|
14
|
+
protected readonly actionLabel: Signal<string>;
|
|
15
|
+
/** Что уходит в буфер и что показано на подложке. */
|
|
16
|
+
readonly value: InputSignal<string>;
|
|
17
|
+
/** Подпись слева от значения; пусто — не рисуется. */
|
|
18
|
+
readonly label: InputSignal<string>;
|
|
19
|
+
/** Подсказка и имя кнопки в покое; пусто — переведённое «Copy». */
|
|
20
|
+
readonly copyLabel: InputSignal<string>;
|
|
21
|
+
/** Значение ушло в буфер. */
|
|
22
|
+
readonly copiedValue: OutputEmitterRef<string>;
|
|
23
|
+
constructor();
|
|
24
|
+
protected onCopy(): void;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RtCopyValueComponent, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtCopyValueComponent, "rt-copy-value", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "copyLabel": { "alias": "copyLabel"; "required": false; "isSignal": true; }; }, { "copiedValue": "copiedValue"; }, never, never, true, never>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { RtCopyValueComponent };
|