@rt-tools/ui-kit-v2 0.16.0 → 0.17.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 +7 -0
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +96 -41
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +1106 -451
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
- package/package.json +1 -1
- package/rt-tools-ui-kit-v2-0.17.0.tgz +0 -0
- package/src/lib/components/action-bar/CONTEXT.md +5 -0
- package/src/lib/components/action-bar/rt-action-bar.component.scss +30 -16
- package/src/lib/components/aside/CONTEXT.md +9 -1
- package/src/lib/components/aside/footer/rt-aside-footer.component.scss +7 -8
- package/src/lib/components/aside/header/rt-aside-header.component.scss +16 -1
- package/src/lib/components/aside/rt-aside.component.scss +17 -1
- package/src/lib/components/button/CONTEXT.md +12 -11
- package/src/lib/components/button/rt-button.directive.scss +36 -0
- package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +2 -2
- package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +1 -1
- package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +1 -1
- package/src/lib/components/data-table/rt-data-table.component.scss +1 -1
- package/src/lib/components/dialog/CONTEXT.md +9 -0
- package/src/lib/components/dialog/content/rt-dialog-content.component.scss +20 -0
- package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +18 -2
- package/src/lib/components/dialog/header/rt-dialog-header.component.scss +21 -3
- package/src/lib/components/dialog/rt-dialog.component.scss +9 -3
- package/src/lib/components/dynamic-selector/CONTEXT.md +6 -0
- package/src/lib/components/header/CONTEXT.md +2 -2
- package/src/lib/components/icon/CONTEXT.md +11 -7
- package/src/lib/components/icon/rt-icon.component.scss +47 -0
- package/src/lib/components/icon-button/CONTEXT.md +27 -20
- package/src/lib/components/icon-button/rt-icon-button.component.scss +51 -25
- package/src/lib/components/image-upload/CONTEXT.md +20 -15
- package/src/lib/components/image-upload/rt-image-upload.component.scss +14 -2
- package/src/lib/components/pagination/rt-pagination.component.scss +1 -1
- package/src/lib/components/scroll-area/CONTEXT.md +2 -0
- package/src/lib/components/scroll-area/rt-scroll-area.component.scss +20 -3
- package/src/lib/components/side-menu/CONTEXT.md +7 -2
- package/src/lib/components/spinner/CONTEXT.md +15 -8
- package/src/lib/components/spinner/rt-spinner.component.scss +108 -9
- package/src/lib/components/tag/rt-tag.component.scss +43 -23
- package/src/lib/components/toast/CONTEXT.md +8 -0
- package/src/lib/components/toast/rt-toast.component.scss +74 -15
- package/src/lib/components/toast/rt-toaster.component.scss +5 -1
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -37
- package/src/lib/components/toggle-switch/CONTEXT.md +11 -3
- package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +53 -14
- package/src/lib/components/toolbar/rt-toolbar.component.scss +15 -4
- package/src/lib/components/tooltip/CONTEXT.md +5 -5
- package/src/rich-editor/lib/components/chat/CONTEXT.md +7 -2
- package/src/rich-editor/lib/components/chat/rt-chat.component.scss +25 -0
- package/styles/tokens.css +35 -0
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +16 -20
- package/types/rt-tools-ui-kit-v2.d.ts +371 -62
- package/rt-tools-ui-kit-v2-0.16.0.tgz +0 -0
|
@@ -6,17 +6,20 @@
|
|
|
6
6
|
и на `<rt-toggle-switch>`, и на корне шаблона, поэтому правила блока вложены в хост —
|
|
7
7
|
так они достаются только корню шаблона. */
|
|
8
8
|
|
|
9
|
+
/* Свойства объявлены на хосте: правило приложения на теге переопределяет их, а
|
|
10
|
+
ступени размера — тоже правила хоста, по модификатору на нём самом. Имена подписи
|
|
11
|
+
не повторяют первый кит: у его переключателя свои `--rt-toggle-label-*`. */
|
|
9
12
|
rt-toggle-switch {
|
|
10
|
-
display: inline-flex;
|
|
11
|
-
|
|
12
|
-
/* Шаг входа `radius` переназначает скругление дорожки, ручка идёт за ней. */
|
|
13
|
-
@include kv.radius-steps('--rt-toggle-radius', '> .rt-toggle-switch');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
rt-toggle-switch .rt-toggle-switch {
|
|
17
13
|
--rt-toggle-radius: var(--rt-radius-full);
|
|
18
14
|
--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);
|
|
19
15
|
--rt-toggle-transition-duration: var(--rt-duration-fast);
|
|
16
|
+
--rt-toggle-disabled-opacity: 0.5;
|
|
17
|
+
--rt-toggle-justify: flex-start;
|
|
18
|
+
--rt-toggle-label-gap: var(--rt-space-2);
|
|
19
|
+
--rt-toggle-label-size: var(--rt-text-sm);
|
|
20
|
+
--rt-toggle-label-color-off: var(--rt-color-text-muted);
|
|
21
|
+
--rt-toggle-label-color-on: var(--rt-color-text-primary);
|
|
22
|
+
--rt-toggle-label-color-hover: var(--rt-color-text-primary);
|
|
20
23
|
|
|
21
24
|
/* Геометрия размера. База — `sm`; модификаторы перекрывают только числа,
|
|
22
25
|
правила ниже к размерам не привязаны. `thumb-travel` держим явным
|
|
@@ -29,17 +32,16 @@
|
|
|
29
32
|
--rt-toggle-icon-inset: 4px;
|
|
30
33
|
|
|
31
34
|
display: inline-flex;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
cursor: pointer;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: var(--rt-toggle-justify);
|
|
37
|
+
gap: var(--rt-toggle-label-gap);
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
&.rt-toggle-switch--md {
|
|
38
40
|
--rt-toggle-track-width: 52px;
|
|
39
41
|
--rt-toggle-thumb-travel: 28px;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
|
|
44
|
+
&.rt-toggle-switch--lg {
|
|
43
45
|
--rt-toggle-track-width: 60px;
|
|
44
46
|
--rt-toggle-track-height: 30px;
|
|
45
47
|
--rt-toggle-thumb-size: 24px;
|
|
@@ -47,6 +49,22 @@
|
|
|
47
49
|
--rt-toggle-icon-inset: 6px;
|
|
48
50
|
}
|
|
49
51
|
|
|
52
|
+
/* Прозрачность — на хосте: подпись гаснет вместе с переключателем. */
|
|
53
|
+
&.rt-toggle-switch--disabled {
|
|
54
|
+
opacity: var(--rt-toggle-disabled-opacity);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Шаг входа `radius` переназначает скругление дорожки, ручка идёт за ней. */
|
|
58
|
+
@include kv.radius-steps('--rt-toggle-radius');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
rt-toggle-switch .rt-toggle-switch {
|
|
62
|
+
display: inline-flex;
|
|
63
|
+
padding: 0;
|
|
64
|
+
border: none;
|
|
65
|
+
background: none;
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
|
|
50
68
|
&:focus-visible {
|
|
51
69
|
border-radius: var(--rt-toggle-radius);
|
|
52
70
|
box-shadow: var(--rt-toggle-focus-shadow);
|
|
@@ -56,7 +74,6 @@
|
|
|
56
74
|
|
|
57
75
|
&--disabled {
|
|
58
76
|
cursor: not-allowed;
|
|
59
|
-
opacity: 0.5;
|
|
60
77
|
}
|
|
61
78
|
|
|
62
79
|
&__track {
|
|
@@ -114,5 +131,27 @@
|
|
|
114
131
|
&--on .rt-toggle-switch__thumb {
|
|
115
132
|
transform: translateX(var(--rt-toggle-thumb-travel));
|
|
116
133
|
}
|
|
134
|
+
|
|
135
|
+
&__label {
|
|
136
|
+
color: var(--rt-toggle-label-color-off);
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
font-size: var(--rt-toggle-label-size);
|
|
139
|
+
transition: color var(--rt-toggle-transition-duration) ease;
|
|
140
|
+
user-select: none;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Состояния подписи — по модификаторам хоста: подпись стоит рядом с кнопкой, не в ней.
|
|
145
|
+
Наведение ниже включённого: под курсором подпись берёт свой цвет и у включённого. */
|
|
146
|
+
rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label {
|
|
147
|
+
color: var(--rt-toggle-label-color-on);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label {
|
|
151
|
+
color: var(--rt-toggle-label-color-hover);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label {
|
|
155
|
+
cursor: not-allowed;
|
|
117
156
|
}
|
|
118
157
|
}
|
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
@layer rt-kit.components {
|
|
2
2
|
.rt-toolbar {
|
|
3
|
-
/*
|
|
3
|
+
/* Раскладка полосы — свойства блока: обёртка и приложение переставляют их снаружи.
|
|
4
|
+
Высота — наименьшая: полоса, стёкшая в колонку на узком экране, не обрезается. */
|
|
4
5
|
--rt-toolbar-padding-top: var(--rt-space-2);
|
|
5
6
|
--rt-toolbar-padding-bottom: var(--rt-space-2);
|
|
7
|
+
--rt-toolbar-padding-inline: 0;
|
|
8
|
+
--rt-toolbar-height: auto;
|
|
9
|
+
--rt-toolbar-border-bottom: none;
|
|
10
|
+
--rt-toolbar-gap: var(--rt-space-2);
|
|
11
|
+
--rt-toolbar-center-justify: flex-end;
|
|
12
|
+
--rt-toolbar-center-overflow: visible;
|
|
6
13
|
|
|
7
14
|
display: block;
|
|
8
15
|
|
|
9
16
|
&__bars {
|
|
10
17
|
display: flex;
|
|
11
18
|
width: 100%;
|
|
19
|
+
min-height: var(--rt-toolbar-height);
|
|
20
|
+
box-sizing: border-box;
|
|
12
21
|
flex-direction: row;
|
|
13
22
|
align-items: center;
|
|
14
23
|
justify-content: space-between;
|
|
15
|
-
padding: var(--rt-toolbar-padding-top)
|
|
16
|
-
|
|
24
|
+
padding: var(--rt-toolbar-padding-top) var(--rt-toolbar-padding-inline) var(--rt-toolbar-padding-bottom);
|
|
25
|
+
border-bottom: var(--rt-toolbar-border-bottom);
|
|
26
|
+
gap: var(--rt-toolbar-gap);
|
|
17
27
|
}
|
|
18
28
|
|
|
19
29
|
&__bar {
|
|
@@ -29,8 +39,9 @@
|
|
|
29
39
|
}
|
|
30
40
|
|
|
31
41
|
&--center {
|
|
42
|
+
overflow: var(--rt-toolbar-center-overflow);
|
|
32
43
|
flex: 1 1 auto;
|
|
33
|
-
justify-content:
|
|
44
|
+
justify-content: var(--rt-toolbar-center-justify);
|
|
34
45
|
gap: var(--rt-space-2);
|
|
35
46
|
|
|
36
47
|
// Контрол-фильтр (поиск/селект) занимает ширину center и право-
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
<rt-icon-button icon="ico-trash" ariaLabel="Удалить" tooltip="Удалить" />
|
|
6
6
|
```
|
|
7
7
|
|
|
8
|
-
| вход | тип
|
|
9
|
-
| ------------------------ |
|
|
10
|
-
| `rtTooltip` | `string \| null \| undefined`
|
|
11
|
-
| `rtTooltipPlacement` | `'top' \| 'bottom' \| null`
|
|
12
|
-
| `rtTooltipWhenTruncated` | `boolean`
|
|
8
|
+
| вход | тип | умолчание |
|
|
9
|
+
| ------------------------ | ------------------------------------------------ | ----------------------------------------------- |
|
|
10
|
+
| `rtTooltip` | `string \| null \| undefined` | `''` |
|
|
11
|
+
| `rtTooltipPlacement` | `'top' \| 'bottom' \| 'left' \| 'right' \| null` | `null` — сверху, под материальным набором снизу |
|
|
12
|
+
| `rtTooltipWhenTruncated` | `boolean` | `false` — подсказка только у обрезанного текста |
|
|
13
13
|
|
|
14
14
|
Выходов нет. Панель — `rt-tooltip` в оверлее CDK, `role="tooltip"`.
|
|
15
15
|
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Основные входы: `messages`, `hasThread`, `canReply`, `replyBlockReason`, `loading`, `fetching`,
|
|
19
|
-
`sending`, `attachments`, `accept`, `formatting`, `title`, `showRefresh`, `showExpand`, `fill
|
|
20
|
-
Выходы: `send`, `refresh` и события по сообщениям (повтор, удаление).
|
|
19
|
+
`sending`, `attachments`, `accept`, `formatting`, `title`, `showRefresh`, `showExpand`, `fill`,
|
|
20
|
+
`typingText`. Выходы: `send`, `refresh`, `typing` и события по сообщениям (повтор, удаление).
|
|
21
21
|
|
|
22
22
|
## Главное, что нужно знать
|
|
23
23
|
|
|
@@ -35,6 +35,11 @@ rtChatMessageActions let-message>` рисуется в меню «…» у ре
|
|
|
35
35
|
**Поле ответа гейтится `canReply`.** Когда отвечать нельзя, вместо него рисуется причина
|
|
36
36
|
из `replyBlockReason`.
|
|
37
37
|
|
|
38
|
+
**Набор текста уходит наружу одним событием на отрезок.** `typing` шлёт `true`, когда человек начал
|
|
39
|
+
набирать, и `false` на пустом поле, при отправке и после 3 секунд без ввода — в обоих режимах поля.
|
|
40
|
+
Что печатает вторая сторона, показывает `typingText`: плашка стоит поверх низа ленты и места не
|
|
41
|
+
занимает, пустая строка её прячет. Текст и перевод даёт приложение.
|
|
42
|
+
|
|
38
43
|
**Удалённое сообщение остаётся в ленте** отдельной пометкой вместо текста: иначе непонятно, на
|
|
39
44
|
что отвечали соседние реплики.
|
|
40
45
|
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
--rt-chat-bubble-radius: var(--rt-radius-lg);
|
|
4
4
|
--rt-chat-message-border-width: var(--rt-border-width-thin);
|
|
5
5
|
--rt-chat-transition-duration: var(--rt-duration-fast);
|
|
6
|
+
--rt-chat-typing-radius: var(--rt-radius-full);
|
|
7
|
+
--rt-chat-typing-shadow: var(--rt-shadow-sm);
|
|
6
8
|
|
|
7
9
|
display: flex;
|
|
8
10
|
flex-direction: column;
|
|
@@ -114,6 +116,29 @@
|
|
|
114
116
|
inset: 0;
|
|
115
117
|
}
|
|
116
118
|
|
|
119
|
+
// Строка «печатает» стоит поверх низа ленты и места не занимает: лента не сдвигается, а чат
|
|
120
|
+
// без строки не меняется ни на пиксель. Пустой узел остаётся в разметке — иначе программа
|
|
121
|
+
// чтения с экрана не объявит первую строку.
|
|
122
|
+
&__typing {
|
|
123
|
+
position: absolute;
|
|
124
|
+
z-index: 1;
|
|
125
|
+
bottom: var(--rt-space-1);
|
|
126
|
+
left: var(--rt-space-2);
|
|
127
|
+
box-sizing: border-box;
|
|
128
|
+
color: var(--rt-color-text-muted);
|
|
129
|
+
font-size: var(--rt-text-xs);
|
|
130
|
+
max-inline-size: calc(100% - 2 * var(--rt-space-2));
|
|
131
|
+
overflow-wrap: anywhere;
|
|
132
|
+
pointer-events: none;
|
|
133
|
+
|
|
134
|
+
&--shown {
|
|
135
|
+
padding: var(--rt-space-0-5) var(--rt-space-2);
|
|
136
|
+
border-radius: var(--rt-chat-typing-radius);
|
|
137
|
+
background: var(--rt-color-bg-surface);
|
|
138
|
+
box-shadow: var(--rt-chat-typing-shadow);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
117
142
|
&__footer-slot {
|
|
118
143
|
display: flex;
|
|
119
144
|
flex-direction: column;
|
package/styles/tokens.css
CHANGED
|
@@ -6798,6 +6798,25 @@ html.rt-theme-dark.rt-preset-material {
|
|
|
6798
6798
|
justify-content: center;
|
|
6799
6799
|
font-size: var(--rt-btn-icon-size);
|
|
6800
6800
|
}
|
|
6801
|
+
.rt-button {
|
|
6802
|
+
/* Лигатура шрифта Material Symbols для имени без пары — размер ей даёт `__icon` рядом.
|
|
6803
|
+
Шрифт подключает приложение, семью можно переназначить свойством сверху. До готовности
|
|
6804
|
+
шрифтов лигатура скрыта: иначе на её месте видно слово. */
|
|
6805
|
+
}
|
|
6806
|
+
.rt-button__glyph {
|
|
6807
|
+
overflow: hidden;
|
|
6808
|
+
font-family: var(--rt-icon-glyph-font, "Material Symbols Outlined"), sans-serif;
|
|
6809
|
+
font-feature-settings: "liga";
|
|
6810
|
+
font-style: normal;
|
|
6811
|
+
font-weight: var(--rt-font-weight-regular);
|
|
6812
|
+
letter-spacing: normal;
|
|
6813
|
+
line-height: 1;
|
|
6814
|
+
text-transform: none;
|
|
6815
|
+
white-space: nowrap;
|
|
6816
|
+
}
|
|
6817
|
+
.rt-button__glyph--pending {
|
|
6818
|
+
visibility: hidden;
|
|
6819
|
+
}
|
|
6801
6820
|
.rt-button__label {
|
|
6802
6821
|
display: inline-flex;
|
|
6803
6822
|
align-items: center;
|
|
@@ -6973,6 +6992,22 @@ html.rt-theme-dark.rt-preset-material {
|
|
|
6973
6992
|
cursor: wait;
|
|
6974
6993
|
pointer-events: none;
|
|
6975
6994
|
}
|
|
6995
|
+
.rt-button {
|
|
6996
|
+
/* Подпись спрятана на время загрузки: содержимое гаснет прозрачностью, а не
|
|
6997
|
+
`visibility` — так оно держит ширину и остаётся именем кнопки для скринридера.
|
|
6998
|
+
Загрузчик встаёт поверх по центру. */
|
|
6999
|
+
}
|
|
7000
|
+
.rt-button--loading-label-hidden {
|
|
7001
|
+
position: relative;
|
|
7002
|
+
}
|
|
7003
|
+
.rt-button--loading-label-hidden > :not(.rt-button__loader) {
|
|
7004
|
+
opacity: 0;
|
|
7005
|
+
}
|
|
7006
|
+
.rt-button__loader {
|
|
7007
|
+
position: absolute;
|
|
7008
|
+
margin: auto;
|
|
7009
|
+
inset: 0;
|
|
7010
|
+
}
|
|
6976
7011
|
.rt-button {
|
|
6977
7012
|
/* Состояние стоит ниже всех вариантов оформления и палитры того же блока.
|
|
6978
7013
|
Специфичность у них равная, и правила равной силы разбираются порядком в
|
|
@@ -278,27 +278,18 @@ declare class RtChatMessageActionsDirective {
|
|
|
278
278
|
}
|
|
279
279
|
|
|
280
280
|
/**
|
|
281
|
-
* Общий презентационный чат: тред сообщений + композер.
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
* режим (expand) — overlay внутри самого компонента (`--expanded`), потребителю
|
|
287
|
-
* лишь опционально сообщается через `expandedChange`.
|
|
288
|
-
*
|
|
289
|
-
* Шапка (тулбар «Чат» + refresh/expand) рендерится только когда включена хотя бы
|
|
290
|
-
* одна из иконок (`showRefresh`/`showExpand`): в диалогах своя header-обёртка,
|
|
291
|
-
* туда тулбар не нужен.
|
|
281
|
+
* Общий презентационный чат: тред сообщений + композер. История приходит готовым массивом
|
|
282
|
+
* `IRtChat.Message[]`, отправка, обновление, скачивание и набор текста уходят наружу выходами;
|
|
283
|
+
* стор и blob-загрузка остаются у потребителя. Композер держит свой `FormGroup`. Полноэкранный
|
|
284
|
+
* режим — overlay внутри компонента (`--expanded`). Шапка рисуется, только когда включена хотя бы
|
|
285
|
+
* одна из иконок `showRefresh`/`showExpand`: в диалогах своя header-обёртка.
|
|
292
286
|
*/
|
|
293
287
|
declare class RtChatComponent {
|
|
294
288
|
#private;
|
|
295
289
|
/**
|
|
296
|
-
* Дата
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
* Данные локали для `DatePipe` регистрирует приложение: без них пайп падает
|
|
301
|
-
* `Missing locale data`, и кит за это не отвечает.
|
|
290
|
+
* Дата форматируется по активной локали приложения, а не по `LOCALE_ID`: тот вычисляется на
|
|
291
|
+
* подъёме и при смене языка на ходу оставил бы прежний формат. Данные локали для `DatePipe`
|
|
292
|
+
* регистрирует приложение: без них пайп падает `Missing locale data`.
|
|
302
293
|
*/
|
|
303
294
|
protected readonly t: Signal<TRtKitLabelMap>;
|
|
304
295
|
protected readonly locale: Signal<string>;
|
|
@@ -409,11 +400,14 @@ declare class RtChatComponent {
|
|
|
409
400
|
readonly send: OutputEmitterRef<IRtChat.SendPayload>;
|
|
410
401
|
/** Клик refresh — consumer перетягивает тред. */
|
|
411
402
|
readonly refresh: OutputEmitterRef<void>;
|
|
412
|
-
/** Клик по вложению — consumer качает blob своим api
|
|
413
|
-
* который только повторял `emit`, ничего не добавлял, а файл при этом рос. */
|
|
403
|
+
/** Клик по вложению — consumer качает blob своим api; шаблон зовёт выход прямо, без релея. */
|
|
414
404
|
readonly downloadFile: OutputEmitterRef<IRtChat.Message>;
|
|
415
405
|
/** Клик по карточке вложения из `attachments[]` — консюмер качает по `publicId`. */
|
|
416
406
|
readonly downloadAttachment: OutputEmitterRef<IRtChat.Attachment>;
|
|
407
|
+
/** Набор текста в поле ответа: `true` — отрезок начался, `false` — кончился. */
|
|
408
|
+
readonly typing: OutputEmitterRef<boolean>;
|
|
409
|
+
/** Строка о том, что печатает вторая сторона, поверх низа ленты; пустая прячет плашку. */
|
|
410
|
+
readonly typingText: InputSignal<string>;
|
|
417
411
|
/** Смена fullscreen-состояния. */
|
|
418
412
|
readonly expandedChange: OutputEmitterRef<boolean>;
|
|
419
413
|
readonly deleteMessage: OutputEmitterRef<IRtChat.Message>;
|
|
@@ -431,6 +425,8 @@ declare class RtChatComponent {
|
|
|
431
425
|
protected onComposerKeydown(event: KeyboardEvent): void;
|
|
432
426
|
/** Релей submit'а от `rt-message-composer` (rich-режим) наружу как `send`. */
|
|
433
427
|
protected onComposerSubmit(payload: IRtMessageComposer.SubmitPayload): void;
|
|
428
|
+
/** Ввод в поле ответа любого из двух режимов; выбор файла набором не считается. */
|
|
429
|
+
protected onReplyInput(event: Event): void;
|
|
434
430
|
/**
|
|
435
431
|
* Файлы выброшены в обёртку чата: в rich-режиме отдаём массив композеру через
|
|
436
432
|
* input, в классическом — добавляем к уже выбранным в собственном `replyForm`.
|
|
@@ -443,7 +439,7 @@ declare class RtChatComponent {
|
|
|
443
439
|
protected onThreadScroll(): void;
|
|
444
440
|
protected toggleExpand(): void;
|
|
445
441
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtChatComponent, never>;
|
|
446
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RtChatComponent, "rt-chat", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "canReply": { "alias": "canReply"; "required": false; "isSignal": true; }; "replyBlockReason": { "alias": "replyBlockReason"; "required": false; "isSignal": true; }; "sending": { "alias": "sending"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyHint": { "alias": "emptyHint"; "required": false; "isSignal": true; }; "hasThread": { "alias": "hasThread"; "required": false; "isSignal": true; }; "attachments": { "alias": "attachments"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "richComposer": { "alias": "richComposer"; "required": false; "isSignal": true; }; "formatting": { "alias": "formatting"; "required": false; "isSignal": true; }; "formattingToolbar": { "alias": "formattingToolbar"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; "showRefresh": { "alias": "showRefresh"; "required": false; "isSignal": true; }; "showExpand": { "alias": "showExpand"; "required": false; "isSignal": true; }; "messageHasActions": { "alias": "messageHasActions"; "required": false; "isSignal": true; }; }, { "send": "send"; "refresh": "refresh"; "downloadFile": "downloadFile"; "downloadAttachment": "downloadAttachment"; "expandedChange": "expandedChange"; "deleteMessage": "deleteMessage"; "retryMessage": "retryMessage"; }, ["messageActions"], ["[rtChatHeaderActions]", "[rtChatFooter]"], true, never>;
|
|
442
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtChatComponent, "rt-chat", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "canReply": { "alias": "canReply"; "required": false; "isSignal": true; }; "replyBlockReason": { "alias": "replyBlockReason"; "required": false; "isSignal": true; }; "sending": { "alias": "sending"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyHint": { "alias": "emptyHint"; "required": false; "isSignal": true; }; "hasThread": { "alias": "hasThread"; "required": false; "isSignal": true; }; "attachments": { "alias": "attachments"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "richComposer": { "alias": "richComposer"; "required": false; "isSignal": true; }; "formatting": { "alias": "formatting"; "required": false; "isSignal": true; }; "formattingToolbar": { "alias": "formattingToolbar"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; "showRefresh": { "alias": "showRefresh"; "required": false; "isSignal": true; }; "showExpand": { "alias": "showExpand"; "required": false; "isSignal": true; }; "typingText": { "alias": "typingText"; "required": false; "isSignal": true; }; "messageHasActions": { "alias": "messageHasActions"; "required": false; "isSignal": true; }; }, { "send": "send"; "refresh": "refresh"; "downloadFile": "downloadFile"; "downloadAttachment": "downloadAttachment"; "typing": "typing"; "expandedChange": "expandedChange"; "deleteMessage": "deleteMessage"; "retryMessage": "retryMessage"; }, ["messageActions"], ["[rtChatHeaderActions]", "[rtChatFooter]"], true, never>;
|
|
447
443
|
}
|
|
448
444
|
|
|
449
445
|
/**
|