@rt-tools/ui-kit-v2 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +43 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +14 -3
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +95 -19
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/package.json +1 -1
- package/rt-tools-ui-kit-v2-0.21.0.tgz +0 -0
- package/src/assets/icons-material/history.fill.svg +5 -0
- package/src/assets/icons-material/history.svg +5 -0
- package/src/assets/icons-material/window-minimize.fill.svg +5 -0
- package/src/assets/icons-material/window-minimize.svg +5 -0
- package/src/lib/components/icon/CONTEXT.md +7 -0
- package/src/lib/components/markdown-text/CONTEXT.md +3 -0
- package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +13 -0
- package/src/rich-editor/lib/components/ai-chat/copy/rt-ai-chat-copy.component.scss +5 -0
- package/src/rich-editor/lib/components/ai-chat/rt-ai-chat.component.scss +8 -1
- package/types/rt-tools-ui-kit-v2-core.d.ts +12 -1
- package/types/rt-tools-ui-kit-v2-icon.d.ts +11 -2
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +21 -6
- package/rt-tools-ui-kit-v2-0.20.0.tgz +0 -0
package/package.json
CHANGED
|
Binary file
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="M476.06-95Q315-95 203.8-207.43 92.59-319.85 94-481h94q1.15 121.3 84.01 206.65Q354.86-189 476-189q122 0 208-86.32t86-209.5Q770-605 683.63-688 597.25-771 476-771q-60 0-113.5 24.5T268-680h84v73H123v-227h71v95q55-59 127.5-93T476-866q80 0 150.5 30.5t123.74 82.51q53.24 52.01 83.5 121.5Q864-562 864-482q0 80-30.26 150.49-30.26 70.49-83.5 123Q697-156 626.5-125.5 556-95 476.06-95ZM600-311 446-463v-220h71v189l135 131-52 52Z" />
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="M476.06-95Q315-95 203.8-207.43 92.59-319.85 94-481h94q1.15 121.3 84.01 206.65Q354.86-189 476-189q122 0 208-86.32t86-209.5Q770-605 683.63-688 597.25-771 476-771q-60 0-113.5 24.5T268-680h84v73H123v-227h71v95q55-59 127.5-93T476-866q80 0 150.5 30.5t123.74 82.51q53.24 52.01 83.5 121.5Q864-562 864-482q0 80-30.26 150.49-30.26 70.49-83.5 123Q697-156 626.5-125.5 556-95 476.06-95ZM600-311 446-463v-220h71v189l135 131-52 52Z" />
|
|
5
|
+
</svg>
|
|
@@ -39,6 +39,13 @@ symbol внутри спрайта — и тем же движением про
|
|
|
39
39
|
и на контейнере, и на одной странице законно живут оба набора рядом. Ставит его приложение своей
|
|
40
40
|
разметкой, своей службы у набора нет — этим он и отличается от темы.
|
|
41
41
|
|
|
42
|
+
Второй признак — `data-rt-icon-preset='material'`, имя атрибута `RT_ICON_PRESET_ATTRIBUTE`. Он
|
|
43
|
+
стоит в том же `RT_ICON_MATERIAL_PRESET_SELECTOR`, поэтому его читают и значок, и кнопка
|
|
44
|
+
`rtButton`, но стили его не знают: токены набора оформления строятся только из `data-preset` и
|
|
45
|
+
`.rt-preset-material`. Так участок страницы получает материальные значки без чужих токенов.
|
|
46
|
+
Значение `'base'` у признака ничего не делает: выбирается ближайший материальный предок, а не
|
|
47
|
+
ближайший признак.
|
|
48
|
+
|
|
42
49
|
Стилями набор не выбирается, хотя набор оформления работает именно так: ссылку на символ спрайта
|
|
43
50
|
CSS подменить нечем. Второй `<use>` рядом с первым тоже не годится — он вечно указывает на символ,
|
|
44
51
|
за которым никто не ходил, а обвязка снимков ждёт, пока нарисуется каждый значок на странице.
|
|
@@ -38,3 +38,6 @@
|
|
|
38
38
|
директивами, а число столбцов здесь приходит из текста.
|
|
39
39
|
- **Пустой текст не рисует ничего** — ни пустого абзаца, ни отступа: показывать или прятать
|
|
40
40
|
заголовок раздела, решает потребитель.
|
|
41
|
+
- **Видимый текст без знаков разметки даёт `markdownToPlainText`** (`@rt-tools/ui-kit-v2/core`). Он
|
|
42
|
+
идёт по тому же дереву `parseMarkdown`: блоки через пустую строку, пункты списка и строки таблицы
|
|
43
|
+
построчно без маркеров, ячейки через табуляцию, у ссылки — её текст без адреса.
|
|
@@ -52,6 +52,19 @@
|
|
|
52
52
|
беседы идут с ассистентом, а не с людьми. Вход уходит в `rt-thread-list` как есть.
|
|
53
53
|
- Ответ рисует внутренний `rt-ai-chat-answer` (папка `answer/`): без него шаблон организма
|
|
54
54
|
превышает предел цикломатической сложности.
|
|
55
|
+
- Копирование — внутренний `rt-ai-chat-copy` (папка `copy/`): у вопроса строкой под пузырём, у
|
|
56
|
+
ответа первым в строке оценки. Состояние «скопировано» своё у каждой кнопки, приём —
|
|
57
|
+
`rt-copy-value`: CDK `Clipboard`, `check` и `uiCopied` на 2000 мс. Подписи — `uiCopy`, `uiCopied`
|
|
58
|
+
кита, своих `ai*` нет. Вопрос копирует `message.text` как есть. Ответ — видимый текст без знаков
|
|
59
|
+
разметки: `plainText` через `markdownToPlainText` кита, по тому же дереву `parseMarkdown`, что
|
|
60
|
+
рисует `rt-markdown-text`. Ход работы, вложения `extra` и строка действий в буфер не попадают —
|
|
61
|
+
их нет в `message.text`. `innerText` отображённого текста не взят: в jsdom спек его нет, и
|
|
62
|
+
проверялась бы подмена, а не настоящий путь. `copyable` выключает обе.
|
|
63
|
+
- `headerIconPreset="material"` ставит на `<header>` признак `data-rt-icon-preset='material'`
|
|
64
|
+
(`RT_ICON_PRESET_ATTRIBUTE`): значки шапки — назад, знак ассистента в заголовке, полный экран,
|
|
65
|
+
беседы, новая беседа, закрыть — рисуются материальным набором, токены набора оформления не
|
|
66
|
+
меняются. При `'base'` признака нет. Значок читает признак один раз после первой отрисовки:
|
|
67
|
+
смена входа на живой панели перерисовывает только значки, появившиеся после неё.
|
|
55
68
|
|
|
56
69
|
## Рядом
|
|
57
70
|
|
|
@@ -119,7 +119,14 @@
|
|
|
119
119
|
|
|
120
120
|
&__question {
|
|
121
121
|
display: flex;
|
|
122
|
-
|
|
122
|
+
flex-direction: column;
|
|
123
|
+
align-items: flex-end;
|
|
124
|
+
gap: var(--rt-space-2xs);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
&__question-actions {
|
|
128
|
+
display: flex;
|
|
129
|
+
gap: var(--rt-space-xs);
|
|
123
130
|
}
|
|
124
131
|
|
|
125
132
|
&__bubble {
|
|
@@ -1208,6 +1208,17 @@ declare function parseInline(source: string): IRtMarkdownInlineNode[];
|
|
|
1208
1208
|
*/
|
|
1209
1209
|
declare function parseMarkdown(source: string | null | undefined): IRtMarkdownBlockNode[];
|
|
1210
1210
|
|
|
1211
|
+
/**
|
|
1212
|
+
* Видимый текст разметки без её знаков: то, что `rt-markdown-text` показывает читателю.
|
|
1213
|
+
*
|
|
1214
|
+
* Строится по тому же дереву узлов, что рисует компонент, поэтому `##`, `**`, маркеры списков и
|
|
1215
|
+
* черта таблицы в вывод не попадают, а то, что разборщик оставил текстом, остаётся текстом.
|
|
1216
|
+
*
|
|
1217
|
+
* @param source Текст в разметке. Пустота и отсутствие значения дают пустую строку.
|
|
1218
|
+
* @returns Блоки через пустую строку, пункты списка и строки таблицы — построчно, ячейки — через табуляцию.
|
|
1219
|
+
*/
|
|
1220
|
+
declare function markdownToPlainText(source: string | null | undefined): string;
|
|
1221
|
+
|
|
1211
1222
|
/**
|
|
1212
1223
|
* Готовая начинка `<picture>`: источники по форматам и запасной кадр на `<img>`.
|
|
1213
1224
|
*
|
|
@@ -1323,5 +1334,5 @@ declare function themeScopeOfFocus(document: Document): string | null;
|
|
|
1323
1334
|
*/
|
|
1324
1335
|
declare function carryThemeScopeOfFocus(pane: HTMLElement, document: Document): void;
|
|
1325
1336
|
|
|
1326
|
-
export { BreakpointsService, ERtDataTableCellColor, ERtDataTableColumnType, ERtDataTableFilterType, ERtMarkdownBlock, ERtMarkdownInline, ERtStorageKeys, IButton, INotification, IRtDataTable, IRtIcon, IRtInput, IRtKitConfig, ITheme, MessageBus, NotificationBus, RT_CONSUMER_HANDLE_NAMES, RT_DATA_TABLE_PRESET_FROM_HOST, RT_DESIGN_TOKEN_NAMES, RT_KIT_CONFIG, RT_KIT_LABELS, RT_KIT_LABELS_EN, RT_KIT_LOCALE, RT_KIT_TRANSLATOR, RT_MATERIAL_PRESET_CLASS, RT_MATERIAL_PRESET_SELECTOR, RT_PRESET_MATERIAL_CLASS, RT_RADIUS_DEFAULT, RT_RADIUS_STEPS, RT_THEME_SCOPE_ATTRIBUTE, RtDayStampPipe, RtInfiniteScrollDirective, RtKitLabelPipe, RtThemeScopeDirective, SEARCH_DEBOUNCE_MS, ThemeService, breakNode, carryThemeScope, carryThemeScopeOfFocus, coerceQuillDeltaOutput, fileNameFromUrl, formatFileSize, iconsName, materialPresetClassesOf, materialPresetClassesOfFocus, normalizeQuillDelta, parseInline, parseMarkdown, provideRtKit, provideRtKitLabels, rtKitDefault, rtKitLabel, searchDebounce, themeScopeOf, themeScopeOfFocus };
|
|
1337
|
+
export { BreakpointsService, ERtDataTableCellColor, ERtDataTableColumnType, ERtDataTableFilterType, ERtMarkdownBlock, ERtMarkdownInline, ERtStorageKeys, IButton, INotification, IRtDataTable, IRtIcon, IRtInput, IRtKitConfig, ITheme, MessageBus, NotificationBus, RT_CONSUMER_HANDLE_NAMES, RT_DATA_TABLE_PRESET_FROM_HOST, RT_DESIGN_TOKEN_NAMES, RT_KIT_CONFIG, RT_KIT_LABELS, RT_KIT_LABELS_EN, RT_KIT_LOCALE, RT_KIT_TRANSLATOR, RT_MATERIAL_PRESET_CLASS, RT_MATERIAL_PRESET_SELECTOR, RT_PRESET_MATERIAL_CLASS, RT_RADIUS_DEFAULT, RT_RADIUS_STEPS, RT_THEME_SCOPE_ATTRIBUTE, RtDayStampPipe, RtInfiniteScrollDirective, RtKitLabelPipe, RtThemeScopeDirective, SEARCH_DEBOUNCE_MS, ThemeService, breakNode, carryThemeScope, carryThemeScopeOfFocus, coerceQuillDeltaOutput, fileNameFromUrl, formatFileSize, iconsName, markdownToPlainText, materialPresetClassesOf, materialPresetClassesOfFocus, normalizeQuillDelta, parseInline, parseMarkdown, provideRtKit, provideRtKitLabels, rtKitDefault, rtKitLabel, searchDebounce, themeScopeOf, themeScopeOfFocus };
|
|
1327
1338
|
export type { IMessageBusEvent, IQuillDelta, IQuillDeltaAttributes, IQuillDeltaOp, IRtMarkdownBlockNode, IRtMarkdownInlineNode, IRtMarkdownListItem, IRtPicture, IRtPictureSource, TRtConsumerHandleName, TRtDataTableFilters, TRtDesignTokenName, TRtKitLabelKey, TRtKitLabelMap, TRtKitLabelParams, TRtKitTranslator, TRtRadius };
|
|
@@ -153,7 +153,16 @@ declare const RT_ICON_SYMBOL_ID_PREFIX: string;
|
|
|
153
153
|
declare const RT_ICON_MATERIAL_SYMBOL_ID_PREFIX: string;
|
|
154
154
|
/** Префикс `id` залитых рисунков материального набора: у имени их два, и `id` у каждого свой. */
|
|
155
155
|
declare const RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX: string;
|
|
156
|
-
/**
|
|
156
|
+
/**
|
|
157
|
+
* Атрибут, который переключает только набор рисунков значков: токенов набора оформления он не
|
|
158
|
+
* несёт. Ставится на контейнер со значением `'material'` там, где значки нужны материальные, а
|
|
159
|
+
* остальной вид — свой.
|
|
160
|
+
*/
|
|
161
|
+
declare const RT_ICON_PRESET_ATTRIBUTE: string;
|
|
162
|
+
/**
|
|
163
|
+
* Селекторы, которыми страница объявляет материальный набор значков: признак набора оформления
|
|
164
|
+
* и признак одних значков. Стили читают только первые два — токены под третьим не меняются.
|
|
165
|
+
*/
|
|
157
166
|
declare const RT_ICON_MATERIAL_PRESET_SELECTOR: string;
|
|
158
167
|
|
|
159
168
|
/**
|
|
@@ -244,5 +253,5 @@ declare const iconMaterialMap: readonly IRtIconMaterialEntry[];
|
|
|
244
253
|
*/
|
|
245
254
|
declare const iconMaterialDrawn: ReadonlySet<IRtIcon.Name>;
|
|
246
255
|
|
|
247
|
-
export { CATEGORY_ORDER, ICON_CATEGORY_RULES, RT_ICONS_BASE_URL, RT_ICONS_MATERIAL_BASE_URL, RT_ICON_GLYPH_STRATEGY, RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX, RT_ICON_MATERIAL_PRESET_SELECTOR, RT_ICON_MATERIAL_SYMBOL_ID_PREFIX, RT_ICON_SPRITE_ID, RT_ICON_SYMBOL_ID_PREFIX, RtIconComponent, RtIconFontService, RtIconRegistry, categoryOf, iconMaterialDrawn, iconMaterialMap, isKitIconName, materialPairOf, provideRtIcons, resolveIconGlyph };
|
|
256
|
+
export { CATEGORY_ORDER, ICON_CATEGORY_RULES, RT_ICONS_BASE_URL, RT_ICONS_MATERIAL_BASE_URL, RT_ICON_GLYPH_STRATEGY, RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX, RT_ICON_MATERIAL_PRESET_SELECTOR, RT_ICON_MATERIAL_SYMBOL_ID_PREFIX, RT_ICON_PRESET_ATTRIBUTE, RT_ICON_SPRITE_ID, RT_ICON_SYMBOL_ID_PREFIX, RtIconComponent, RtIconFontService, RtIconRegistry, categoryOf, iconMaterialDrawn, iconMaterialMap, isKitIconName, materialPairOf, provideRtIcons, resolveIconGlyph };
|
|
248
257
|
export type { IRtIconMaterialEntry, IRtIconsOptions, TIconCategory };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { AfterViewInit, OnDestroy, Signal, ElementRef, WritableSignal, InputSignal, OutputEmitterRef, InputSignalWithTransform, ModelSignal, TemplateRef, PipeTransform } from '@angular/core';
|
|
3
|
-
import { RtFormControlBase, IQuillDelta, TRtKitLabelMap, IRtAiRunStatus, IRtTimeline, IRtThreadList, IRtSideMenu
|
|
3
|
+
import { RtFormControlBase, IQuillDelta, TRtKitLabelMap, IRtAiRunStatus, IRtTimeline, IRtIcon, IRtThreadList, IRtSideMenu } from '@rt-tools/ui-kit-v2';
|
|
4
4
|
import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
|
|
5
5
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
6
6
|
|
|
@@ -633,6 +633,8 @@ declare class RtAiChatComponent {
|
|
|
633
633
|
protected readonly emptyTitleText: Signal<string>;
|
|
634
634
|
protected readonly emptyDescriptionText: Signal<string>;
|
|
635
635
|
protected readonly disclaimerText: Signal<string>;
|
|
636
|
+
/** Значение признака одних значков на шапке: только материальный набор, свой — без признака. */
|
|
637
|
+
protected readonly headerIconSign: Signal<IRtIcon.Preset | null>;
|
|
636
638
|
protected readonly hasThreads: Signal<boolean>;
|
|
637
639
|
/** Список бесед стоит колонкой слева: на весь экран, когда беседы есть. */
|
|
638
640
|
protected readonly isThreadColumn: Signal<boolean>;
|
|
@@ -674,6 +676,14 @@ declare class RtAiChatComponent {
|
|
|
674
676
|
readonly fullScreenable: InputSignalWithTransform<boolean, BooleanInput>;
|
|
675
677
|
/** Кнопка закрытия в шапке. */
|
|
676
678
|
readonly closable: InputSignalWithTransform<boolean, BooleanInput>;
|
|
679
|
+
/** Кнопка копирования текста под вопросом и в строке действий ответа. */
|
|
680
|
+
readonly copyable: InputSignalWithTransform<boolean, BooleanInput>;
|
|
681
|
+
/**
|
|
682
|
+
* Набор рисунков значков шапки. `'material'` ставит на шапку признак одних значков
|
|
683
|
+
* `data-rt-icon-preset`: значки рисуются материальным набором, токены и остальной вид — свои.
|
|
684
|
+
* Признак значок читает после первой отрисовки, поэтому вход задаётся до неё. Дефолт `'base'`.
|
|
685
|
+
*/
|
|
686
|
+
readonly headerIconPreset: InputSignal<IRtIcon.Preset>;
|
|
677
687
|
/** Черновик в поле сообщения. */
|
|
678
688
|
readonly draft: ModelSignal<string>;
|
|
679
689
|
/** Список бесед открыт на месте ленты. */
|
|
@@ -705,25 +715,30 @@ declare class RtAiChatComponent {
|
|
|
705
715
|
protected onSearchThreads(query: string): void;
|
|
706
716
|
protected onSelectThread(id: IRtThreadList.TRowId): void;
|
|
707
717
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtAiChatComponent, never>;
|
|
708
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RtAiChatComponent, "rt-ai-chat", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "emptyTitle": { "alias": "emptyTitle"; "required": false; "isSignal": true; }; "emptyDescription": { "alias": "emptyDescription"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disclaimer": { "alias": "disclaimer"; "required": false; "isSignal": true; }; "sending": { "alias": "sending"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "threads": { "alias": "threads"; "required": false; "isSignal": true; }; "activeThreadId": { "alias": "activeThreadId"; "required": false; "isSignal": true; }; "threadsLoading": { "alias": "threadsLoading"; "required": false; "isSignal": true; }; "threadsFetching": { "alias": "threadsFetching"; "required": false; "isSignal": true; }; "threadsHasMore": { "alias": "threadsHasMore"; "required": false; "isSignal": true; }; "emptyPreviewIcons": { "alias": "emptyPreviewIcons"; "required": false; "isSignal": true; }; "fullScreenable": { "alias": "fullScreenable"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "draft": { "alias": "draft"; "required": false; "isSignal": true; }; "threadsOpen": { "alias": "threadsOpen"; "required": false; "isSignal": true; }; "fullScreen": { "alias": "fullScreen"; "required": false; "isSignal": true; }; }, { "draft": "draftChange"; "threadsOpen": "threadsOpenChange"; "fullScreen": "fullScreenChange"; "send": "send"; "stop": "stop"; "retry": "retry"; "newThread": "newThread"; "closed": "closed"; "selectThread": "selectThread"; "deleteThread": "deleteThread"; "searchThreads": "searchThreads"; "loadMoreThreads": "loadMoreThreads"; "feedbackChange": "feedbackChange"; }, ["extraTemplate"], never, true, never>;
|
|
718
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtAiChatComponent, "rt-ai-chat", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "emptyTitle": { "alias": "emptyTitle"; "required": false; "isSignal": true; }; "emptyDescription": { "alias": "emptyDescription"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disclaimer": { "alias": "disclaimer"; "required": false; "isSignal": true; }; "sending": { "alias": "sending"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "threads": { "alias": "threads"; "required": false; "isSignal": true; }; "activeThreadId": { "alias": "activeThreadId"; "required": false; "isSignal": true; }; "threadsLoading": { "alias": "threadsLoading"; "required": false; "isSignal": true; }; "threadsFetching": { "alias": "threadsFetching"; "required": false; "isSignal": true; }; "threadsHasMore": { "alias": "threadsHasMore"; "required": false; "isSignal": true; }; "emptyPreviewIcons": { "alias": "emptyPreviewIcons"; "required": false; "isSignal": true; }; "fullScreenable": { "alias": "fullScreenable"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "copyable": { "alias": "copyable"; "required": false; "isSignal": true; }; "headerIconPreset": { "alias": "headerIconPreset"; "required": false; "isSignal": true; }; "draft": { "alias": "draft"; "required": false; "isSignal": true; }; "threadsOpen": { "alias": "threadsOpen"; "required": false; "isSignal": true; }; "fullScreen": { "alias": "fullScreen"; "required": false; "isSignal": true; }; }, { "draft": "draftChange"; "threadsOpen": "threadsOpenChange"; "fullScreen": "fullScreenChange"; "send": "send"; "stop": "stop"; "retry": "retry"; "newThread": "newThread"; "closed": "closed"; "selectThread": "selectThread"; "deleteThread": "deleteThread"; "searchThreads": "searchThreads"; "loadMoreThreads": "loadMoreThreads"; "feedbackChange": "feedbackChange"; }, ["extraTemplate"], never, true, never>;
|
|
709
719
|
}
|
|
710
720
|
|
|
711
721
|
/**
|
|
712
|
-
* Ответ ассистента в ленте `rt-ai-chat`: ход работы, текст в markdown, вложения приложения и
|
|
713
|
-
*
|
|
722
|
+
* Ответ ассистента в ленте `rt-ai-chat`: ход работы, текст в markdown, вложения приложения и строка
|
|
723
|
+
* действий — копирование и оценка. Строка появляется, когда текст дописан.
|
|
714
724
|
*/
|
|
715
725
|
declare class RtAiChatAnswerComponent {
|
|
716
726
|
protected readonly t: Signal<TRtKitLabelMap>;
|
|
717
|
-
|
|
727
|
+
/** Текст дописан: строка действий с копированием и оценкой. */
|
|
728
|
+
protected readonly isWritten: Signal<boolean>;
|
|
729
|
+
/** Что копирует кнопка: видимый текст ответа без знаков разметки — без хода работы и вложений. */
|
|
730
|
+
protected readonly plainText: Signal<string>;
|
|
718
731
|
readonly message: InputSignal<IRtAiChat.Message>;
|
|
719
732
|
/** Шаблон вложений ответа; `null` — вложений нет. */
|
|
720
733
|
readonly extra: InputSignal<TemplateRef<IRtAiChat.ExtraContext> | null>;
|
|
734
|
+
/** Кнопка копирования текста первой в строке действий. */
|
|
735
|
+
readonly copyable: InputSignalWithTransform<boolean, BooleanInput>;
|
|
721
736
|
/** Шаги хода работы раскрыты. */
|
|
722
737
|
readonly expanded: ModelSignal<boolean>;
|
|
723
738
|
/** Нажата оценка; повторное нажатие той же снимает её — решает родитель. */
|
|
724
739
|
readonly feedbackChange: OutputEmitterRef<Exclude<IRtAiChat.Feedback, null>>;
|
|
725
740
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtAiChatAnswerComponent, never>;
|
|
726
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RtAiChatAnswerComponent, "rt-ai-chat-answer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "extra": { "alias": "extra"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "feedbackChange": "feedbackChange"; }, never, never, true, never>;
|
|
741
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RtAiChatAnswerComponent, "rt-ai-chat-answer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "extra": { "alias": "extra"; "required": false; "isSignal": true; }; "copyable": { "alias": "copyable"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "feedbackChange": "feedbackChange"; }, never, never, true, never>;
|
|
727
742
|
}
|
|
728
743
|
|
|
729
744
|
/** Ключ текстовой расшифровки иконки статуса сообщения. */
|
|
Binary file
|