@rt-tools/ui-kit-v2 0.39.2 → 0.40.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rt-tools/ui-kit-v2",
3
- "version": "0.39.2",
3
+ "version": "0.40.0",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Yauheni Krumin",
6
6
  "type": "module",
@@ -44,6 +44,11 @@ rtChatMessageActions let-message>` рисуется в меню «…» у ре
44
44
  Что печатает вторая сторона, показывает `typingText`: плашка стоит поверх низа ленты и места не
45
45
  занимает, пустая строка её прячет. Текст и перевод даёт приложение.
46
46
 
47
+ **Готовый текст подставляет метод `setDraft`.** Он заменяет черновик во всех трёх полях ответа и
48
+ ставит курсор в конец. Файлы остаются, сигнала набора нет, закрытое поле текст не принимает.
49
+ Работу метода показывает история `QuickReplies` страницы переписки: кнопка у поля ответа и
50
+ подсказка в боковой панели ставят текст в поле, гостю ничего не уходит.
51
+
47
52
  **Удалённое сообщение остаётся в ленте** отдельной пометкой вместо текста: иначе непонятно, на
48
53
  что отвечали соседние реплики.
49
54
 
@@ -18,6 +18,8 @@ export declare namespace IRtAiPromptInput {
18
18
  }
19
19
  /** Можно ли отправить: есть непустой текст или файл, поле свободно. */
20
20
  export declare function rtPromptCanSend(text: string, files: number, busy: boolean): boolean;
21
+ /** Ставит фокус в поле, а курсор — за последний символ. */
22
+ export declare function rtCaretToEnd(node: HTMLTextAreaElement): void;
21
23
  /**
22
24
  * Поле ввода ИИ-чата: одна рамка, текст сверху, ряд действий внутри рамки снизу.
23
25
  *
@@ -102,6 +104,8 @@ export declare class RtAiPromptInputComponent {
102
104
  readonly controlPicked: OutputEmitterRef<IRtAiPromptInput.Control>;
103
105
  /** Ставит фокус в поле. */
104
106
  focus(): void;
107
+ /** Заменяет черновик и ставит курсор в конец: значение пишется в узел сразу, не ждёт отрисовки. */
108
+ setDraft(text: string): void;
105
109
  protected onInput(event: Event): void;
106
110
  protected onKeydown(event: KeyboardEvent): void;
107
111
  protected pick(control: IRtAiPromptInput.Control): void;
@@ -33,6 +33,8 @@ export declare class RtRichEditorComponent extends RtFormControlBase<IQuillDelta
33
33
  ngAfterViewInit(): Promise<void>;
34
34
  /** Ставит фокус в редактор; до загрузки Quill ничего не делает. */
35
35
  focus(): void;
36
+ /** Ставит фокус в редактор, а курсор — за последний символ; до загрузки Quill ничего не делает. */
37
+ focusAtEnd(): void;
36
38
  ngOnDestroy(): void;
37
39
  writeValue(value: IQuillDelta | null): void;
38
40
  setDisabledState(isDisabled: boolean): void;
@@ -142,6 +144,8 @@ export declare class RtMessageComposerComponent {
142
144
  constructor();
143
145
  /** Ставит фокус в поле: в textarea, а в режиме форматирования — в rich-редактор. */
144
146
  focus(): void;
147
+ /** Заменяет черновик и ставит курсор в конец; выбранные файлы остаются. */
148
+ setDraft(text: string): void;
145
149
  protected onKeydown(event: KeyboardEvent): void;
146
150
  protected stop(): void;
147
151
  protected openPicker(): void;
@@ -401,6 +405,10 @@ export declare class RtChatComponent {
401
405
  protected readonly thread: Signal<ElementRef<HTMLElement> | undefined>;
402
406
  /** Скрытый нативный input — открывается кнопкой-скрепкой внутри поля ввода. */
403
407
  protected readonly composerFileEl: Signal<ElementRef<HTMLInputElement> | undefined>;
408
+ /** Поля ответа трёх видов: метод `setDraft` пишет в то, которое сейчас стоит. */
409
+ protected readonly composerInputEl: Signal<ElementRef<HTMLTextAreaElement> | undefined>;
410
+ protected readonly messageComposer: Signal<RtMessageComposerComponent | undefined>;
411
+ protected readonly promptInput: Signal<RtAiPromptInputComponent | undefined>;
404
412
  protected readonly attachmentFallbackName: Signal<string>;
405
413
  /** Подписи с учётом того, что передал хозяин компонента: своё важнее умолчания */
406
414
  protected readonly titleText: Signal<string>;
@@ -488,7 +496,6 @@ export declare class RtChatComponent {
488
496
  * Требует, чтобы родитель давал высоту (flex-цепочка).
489
497
  */
490
498
  readonly fill: InputSignalWithTransform<boolean, BooleanInput>;
491
- /** Показать иконку refresh в шапке. */
492
499
  /**
493
500
  * Вид мессенджера: без подписи автора, свой пузырь цвета действия, время без даты, над
494
501
  * сообщениями дня — его подпись, поле ответа в одну строку с рядом кнопок под ним.
@@ -522,6 +529,11 @@ export declare class RtChatComponent {
522
529
  */
523
530
  readonly messageHasActions: InputSignal<IRtChat.MessageActionsPredicate | null>;
524
531
  constructor();
532
+ /**
533
+ * Заменяет черновик в поле ответа и ставит курсор в конец: так приложение подставляет готовый
534
+ * текст. Выбранные файлы остаются, сигнала набора нет, закрытое поле не меняется.
535
+ */
536
+ setDraft(text: string): void;
525
537
  protected onSubmit(): void;
526
538
  protected onComposerKeydown(event: KeyboardEvent): void;
527
539
  /** Релей submit'а от `rt-message-composer` (rich-режим) наружу как `send`. */