@rt-tools/ui-kit-v2 0.7.0 → 0.8.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/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@rt-tools/ui-kit-v2",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Yauheni Krumin",
6
6
  "type": "module",
7
7
  "dependencies": {
8
8
  "tslib": "^2.8.0",
9
9
  "@rt-tools/core": "^0.3.1",
10
- "@rt-tools/utils": "^0.3.1"
10
+ "@rt-tools/utils": "^0.4.0"
11
11
  },
12
12
  "peerDependencies": {
13
13
  "@rt-tools/core": "^0.3.1",
14
- "@rt-tools/utils": "^0.3.1",
14
+ "@rt-tools/utils": "^0.4.0",
15
15
  "@angular/cdk": "^22.0.0",
16
16
  "@angular/common": "^22.0.0",
17
17
  "@angular/compiler": "^22.0.0",
Binary file
@@ -21,6 +21,11 @@
21
21
 
22
22
  ## Главное, что нужно знать
23
23
 
24
+ **Своё действие у реплики объявляется шаблоном, а не правкой кита.** `<ng-template
25
+ rtChatMessageActions let-message>` рисуется в меню «…» у реплики, видимость держит предикат
26
+ `messageHasActions`; не задан — точка показывается у каждой. Точечные действия — удаление, повтор
27
+ отправки, скачивание — остаются своими входами и выходами: они общи для любой переписки.
28
+
24
29
  **Без `hasThread` чат рисует только подсказку выбора.** Ни ленты, ни поля ответа не будет —
25
30
  это состояние «переписка не выбрана», а не «переписка пустая».
26
31
 
@@ -147,7 +147,9 @@
147
147
 
148
148
  // Кнопка проявляется по наведению/фокусу в пределах всей строки.
149
149
  &:hover .rt-chat__message-delete,
150
- &:focus-within .rt-chat__message-delete {
150
+ &:focus-within .rt-chat__message-delete,
151
+ &:hover .rt-chat__message-actions,
152
+ &:focus-within .rt-chat__message-actions {
151
153
  opacity: 1;
152
154
  pointer-events: auto;
153
155
  }
@@ -219,6 +221,15 @@
219
221
  transition: opacity var(--rt-chat-transition-duration) ease;
220
222
  }
221
223
 
224
+ // Точка действий потребителя: тот же flex-сосед пузыря, что и кнопка удаления, и то же
225
+ // зарезервированное место — тред не «прыгает» при наведении.
226
+ &__message-actions {
227
+ flex: 0 0 auto;
228
+ opacity: 0;
229
+ pointer-events: none;
230
+ transition: opacity var(--rt-chat-transition-duration) ease;
231
+ }
232
+
222
233
  &__message-attachment {
223
234
  display: block;
224
235
  }
@@ -25,6 +25,13 @@
25
25
  [`rt-field`](../field/CONTEXT.md)), не создавая цикла самоссылки, на котором Angular падает
26
26
  с NG0200.
27
27
 
28
+ **Поле работает с обеими привязками формы, и род привязки выбирает не потребитель.** Прежняя
29
+ форма отдаёт контрол, рассылающий состояние событиями; сигнальная форма Angular 22 объявляет тот
30
+ же провайдер `NgControl` и отдаёт свой переходник — событий у него нет вовсе, а состояние
31
+ читается его геттерами. Поле смотрит, рассылает ли контрол состояние: рассылает — подписка,
32
+ не рассылает — вычисление. Подписка на несуществующие события роняла поле из запуска, и вместе
33
+ с ним не рисовалось всё поддерево разметки.
34
+
28
35
  **Подсветка ошибки включается только после касания или правки**: `invalid && (touched || dirty)`.
29
36
  Пустое обязательное поле невалидно с самого начала, но краснеть до первого касания не должно.
30
37
 
@@ -3,7 +3,12 @@
3
3
  `.rt-photo-viewer` — сам хост (шаблон начинается с ng-container, класс ставит host). */
4
4
 
5
5
  .rt-photo-viewer {
6
+ // Вид управляющего элемента поверх кадра — своими свойствами: их делят кнопки панели и
7
+ // обе стрелки, и потребитель перекрывает их правилом той же цели.
6
8
  --rt-photo-viewer-control-radius: var(--rt-radius-md);
9
+ --rt-photo-viewer-control-color: var(--rt-color-text-inverse);
10
+ --rt-photo-viewer-control-bg: color-mix(in srgb, var(--rt-color-bg-inverse) 55%, transparent);
11
+ --rt-photo-viewer-control-bg-hover: color-mix(in srgb, var(--rt-color-text-inverse) 24%, transparent);
7
12
 
8
13
  display: block;
9
14
  width: 100vw;
@@ -87,15 +92,17 @@
87
92
  color: var(--rt-color-text-primary);
88
93
  }
89
94
 
90
- /* TODO: отрефакторить это дерьмо */
95
+ // Общий вид управляющего элемента поверх кадра: кнопки панели и обе стрелки лежат на
96
+ // самом снимке, а не на подложке, и читаются только инверсным цветом на своей заливке.
97
+ // Перечень един намеренно — разойдясь, три места дадут три разных вида поверх одного кадра.
91
98
  &__bar rt-icon-button,
92
99
  &__arrow-prev,
93
100
  &__arrow-next {
94
- --rt-icon-button-color: var(--rt-color-text-inverse);
95
- --rt-icon-button-color-bg-hover: color-mix(in srgb, var(--rt-color-text-inverse) 24%, transparent);
101
+ --rt-icon-button-color: var(--rt-photo-viewer-control-color);
102
+ --rt-icon-button-color-bg-hover: var(--rt-photo-viewer-control-bg-hover);
96
103
 
97
104
  border-radius: var(--rt-photo-viewer-control-radius);
98
- background: color-mix(in srgb, var(--rt-color-bg-inverse) 55%, transparent);
105
+ background: var(--rt-photo-viewer-control-bg);
99
106
  }
100
107
 
101
108
  &__arrow-prev,
@@ -772,20 +772,6 @@ declare namespace IRtInput {
772
772
  type Size = 'sm' | 'md' | 'lg';
773
773
  }
774
774
 
775
- /**
776
- * Базовый класс input-семейства common/ui. Владеет единым CVA-ядром:
777
- * - self-injected `NgControl` + ручная привязка `valueAccessor` (без
778
- * `NG_VALUE_ACCESSOR` provider — иначе NG0200 cycle при self-reference),
779
- * что даёт доступ к `control.invalid/touched` для авто-подсветки ошибки;
780
- * - сигнал значения `value`, состояния `isDisabled`/`isInvalid` (отключение
781
- * складывается из входа `disabled` и слова формы — см. `isDisabled`);
782
- * - общие инпуты `size`/`disabled`/`controlId`/`ariaLabel`/`clearable`;
783
- * - оркестрацию очистки (`clear`) через абстрактные хуки конкретного поля.
784
- *
785
- * Конкретные поля реализуют `getEmptyValue`/`hasValue`/`focusAfterClear`. Поля
786
- * с отдельным display-состоянием (autocomplete, input-number) дополнительно
787
- * переопределяют `writeValue`/`clearValue`, синхронизируя свой display-сигнал.
788
- */
789
775
  declare abstract class RtFormControlBase<TValue> implements ControlValueAccessor, OnInit {
790
776
  #private;
791
777
  protected readonly value: WritableSignal<TValue>;
@@ -797,7 +783,7 @@ declare abstract class RtFormControlBase<TValue> implements ControlValueAccessor
797
783
  * контрол, созданный отключённым, оказывался бы редактируемым.
798
784
  */
799
785
  protected readonly isDisabled: Signal<boolean>;
800
- protected readonly isInvalid: WritableSignal<boolean>;
786
+ protected readonly isInvalid: Signal<boolean>;
801
787
  /** Видимость кнопки очистки: включена, есть значение, поле активно. */
802
788
  protected readonly showClearButton: Signal<boolean>;
803
789
  /** Есть ли в поле значение — гейт видимости крестика. */
@@ -817,7 +803,7 @@ declare abstract class RtFormControlBase<TValue> implements ControlValueAccessor
817
803
  readonly effectiveControlId: Signal<string | null>;
818
804
  /** Read-only режим (плоский текст вместо контрола); включается rt-field'ом. */
819
805
  readonly isReadonly: Signal<boolean>;
820
- /** Публичный invalid для rt-field (touched/dirty уже учтён в #syncState). */
806
+ /** Публичный invalid для rt-field (touched/dirty учтён в состоянии). */
821
807
  readonly invalid: Signal<boolean>;
822
808
  /** Текущие ошибки связанного контрола — источник текста ошибки в rt-field. */
823
809
  readonly errors: Signal<ValidationErrors | null>;
@@ -1184,23 +1170,6 @@ declare class RtCardComponent {
1184
1170
  static ɵcmp: i0.ɵɵComponentDeclaration<RtCardComponent, "rt-card", never, { "header": { "alias": "header"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "cardClick": "cardClick"; }, never, ["[rtCardHeader]", "*", "[rtCardFooter]"], true, never>;
1185
1171
  }
1186
1172
 
1187
- /**
1188
- * Модель `<rt-message-composer>`: один корневой неймспейс с
1189
- * префиксом `I`.
1190
- */
1191
- declare namespace IRtMessageComposer {
1192
- /** Полезная нагрузка отправки: текст сообщения + прикреплённые файлы. */
1193
- interface SubmitPayload {
1194
- text: string;
1195
- files: File[];
1196
- /**
1197
- * Rich-тело строкой JSON (при `formatting`-режиме) — взаимоисключимо с
1198
- * непустым `text`. `null`/отсутствует ⇒ отправляется plain-текст.
1199
- */
1200
- delta?: string | null;
1201
- }
1202
- }
1203
-
1204
1173
  /**
1205
1174
  * Извлекает имя файла из URL: последний сегмент пути без query/fragment,
1206
1175
  * декодированный из percent-encoding. Нужен для вложений, у которых источник
@@ -1385,43 +1354,6 @@ declare const SEARCH_DEBOUNCE_MS: number;
1385
1354
  */
1386
1355
  declare function searchDebounce(): MonoTypeOperatorFunction<string>;
1387
1356
 
1388
- /**
1389
- * Режим тулбара: `full` — весь whitelist, `minimal` — жирный + два списка
1390
- * (G113: чаты оператора/админа/саппорта).
1391
- */
1392
- type TRtRichEditorToolbar = 'full' | 'minimal';
1393
- /**
1394
- * Rich-редактор чата на Quill. Наследует CVA-ядро input-семейства
1395
- * (`RtFormControlBase`) — плагается в reactive-форму. Quill грузится **лениво**
1396
- * (`import("quill")` в `ngAfterViewInit`), тип импортируется `import type` и в
1397
- * бандл не попадает. Значение CVA — `IQuillDelta` (или `null`, когда пусто).
1398
- */
1399
- declare class RtRichEditorComponent extends RtFormControlBase<IQuillDelta | null> implements AfterViewInit, OnDestroy {
1400
- #private;
1401
- protected readonly editorHost: Signal<ElementRef<HTMLElement>>;
1402
- /**
1403
- * Смонтирована ли начинка редактора. Пока нет, хост несёт признак недостроенности: съёмке
1404
- * витрины и любой другой проверке снаружи иначе нечем отличить недостроенный редактор от
1405
- * достроенного пустого — оба выглядят пустым местом.
1406
- */
1407
- protected readonly mounted: WritableSignal<boolean>;
1408
- protected readonly hasValue: Signal<boolean>;
1409
- readonly placeholder: InputSignal<string>;
1410
- /** Набор кнопок форматирования; сужает и принимаемые форматы (вставка из буфера). */
1411
- readonly toolbar: InputSignal<TRtRichEditorToolbar>;
1412
- /** Enter без Shift в редакторе — сигнал отправки (Shift+Enter остаётся переносом). */
1413
- readonly enterPressed: OutputEmitterRef<void>;
1414
- readonly displayText: Signal<string>;
1415
- ngAfterViewInit(): Promise<void>;
1416
- ngOnDestroy(): void;
1417
- writeValue(value: IQuillDelta | null): void;
1418
- setDisabledState(isDisabled: boolean): void;
1419
- protected getEmptyValue(): IQuillDelta | null;
1420
- protected focusAfterClear(): void;
1421
- static ɵfac: i0.ɵɵFactoryDeclaration<RtRichEditorComponent, never>;
1422
- static ɵcmp: i0.ɵɵComponentDeclaration<RtRichEditorComponent, "rt-rich-editor", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "toolbar": { "alias": "toolbar"; "required": false; "isSignal": true; }; }, { "enterPressed": "enterPressed"; }, never, never, true, never>;
1423
- }
1424
-
1425
1357
  /**
1426
1358
  * Модель общего чат-компонента `rt-chat`: один корневой неймспейс
1427
1359
  * с префиксом `I`. Доменные стора маппят свою модель сообщения в `Message`, а сам
@@ -1441,6 +1373,13 @@ declare enum ERtChatMessageStatus {
1441
1373
  declare namespace IRtChat {
1442
1374
  /** Алиас enum'а для доменных мапперов, работающих через неймспейс. */
1443
1375
  type MessageStatus = ERtChatMessageStatus;
1376
+ /**
1377
+ * Есть ли у реплики доступные действия потребителя — гейт кнопки «…» у неё.
1378
+ *
1379
+ * Признак приходит предикатом, а не полем модели: действие, которого кит не знает,
1380
+ * его моделью и не описывается.
1381
+ */
1382
+ type MessageActionsPredicate = (message: Message) => boolean;
1444
1383
  /** Вложение сообщения — домен маппит свой ресурс, скачивание по `public_id`. */
1445
1384
  interface Attachment {
1446
1385
  id: number;
@@ -1514,6 +1453,96 @@ declare namespace IRtChat {
1514
1453
  }
1515
1454
  }
1516
1455
 
1456
+ /**
1457
+ * Контекст шаблона `[rtChatMessageActions]`: `$implicit` — реплика треда.
1458
+ */
1459
+ interface IRtChatMessageActionsContext {
1460
+ $implicit: IRtChat.Message;
1461
+ }
1462
+ /**
1463
+ * Захватывает `<ng-template rtChatMessageActions let-message>` — содержимое «…»-меню
1464
+ * действий у реплики. `rt-chat` рисует этот шаблон рядом с точечными действиями реплики,
1465
+ * прокидывая её через `$implicit`.
1466
+ *
1467
+ * Точечные действия остаются на месте: удаление, повтор отправки и скачивание общи для
1468
+ * любой переписки. Шаблон нужен тем действиям, которых кит не знает и знать не должен, —
1469
+ * без него потребителю оставалось ждать правки кита либо ставить кнопку над диалогом, то
1470
+ * есть не там, где читают реплику.
1471
+ *
1472
+ * Дженерика у контекста нет: тип реплики у переписки один, и type-carrier, который у
1473
+ * строки таблицы несёт тип строки, здесь не нужен.
1474
+ *
1475
+ * @example
1476
+ * ```html
1477
+ * <rt-chat [messages]="messages()" [messageHasActions]="canAct">
1478
+ * <ng-template rtChatMessageActions let-message>
1479
+ * <rt-menu-item icon="link" label="Скопировать ссылку" (selected)="copy(message)" />
1480
+ * </ng-template>
1481
+ * </rt-chat>
1482
+ * ```
1483
+ */
1484
+ declare class RtChatMessageActionsDirective {
1485
+ readonly template: TemplateRef<IRtChatMessageActionsContext>;
1486
+ /** Type-guard: сужает контекст шаблона до реплики при проверке шаблонов. */
1487
+ static ngTemplateContextGuard(_directive: RtChatMessageActionsDirective, context: unknown): context is IRtChatMessageActionsContext;
1488
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtChatMessageActionsDirective, never>;
1489
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtChatMessageActionsDirective, "ng-template[rtChatMessageActions]", never, {}, {}, never, never, true, never>;
1490
+ }
1491
+
1492
+ /**
1493
+ * Модель `<rt-message-composer>`: один корневой неймспейс с
1494
+ * префиксом `I`.
1495
+ */
1496
+ declare namespace IRtMessageComposer {
1497
+ /** Полезная нагрузка отправки: текст сообщения + прикреплённые файлы. */
1498
+ interface SubmitPayload {
1499
+ text: string;
1500
+ files: File[];
1501
+ /**
1502
+ * Rich-тело строкой JSON (при `formatting`-режиме) — взаимоисключимо с
1503
+ * непустым `text`. `null`/отсутствует ⇒ отправляется plain-текст.
1504
+ */
1505
+ delta?: string | null;
1506
+ }
1507
+ }
1508
+
1509
+ /**
1510
+ * Режим тулбара: `full` — весь whitelist, `minimal` — жирный + два списка
1511
+ * (G113: чаты оператора/админа/саппорта).
1512
+ */
1513
+ type TRtRichEditorToolbar = 'full' | 'minimal';
1514
+ /**
1515
+ * Rich-редактор чата на Quill. Наследует CVA-ядро input-семейства
1516
+ * (`RtFormControlBase`) — плагается в reactive-форму. Quill грузится **лениво**
1517
+ * (`import("quill")` в `ngAfterViewInit`), тип импортируется `import type` и в
1518
+ * бандл не попадает. Значение CVA — `IQuillDelta` (или `null`, когда пусто).
1519
+ */
1520
+ declare class RtRichEditorComponent extends RtFormControlBase<IQuillDelta | null> implements AfterViewInit, OnDestroy {
1521
+ #private;
1522
+ protected readonly editorHost: Signal<ElementRef<HTMLElement>>;
1523
+ /**
1524
+ * Смонтирована ли начинка редактора. Пока нет, хост несёт признак недостроенности: съёмке
1525
+ * витрины и любой другой проверке снаружи иначе нечем отличить недостроенный редактор от
1526
+ * достроенного пустого — оба выглядят пустым местом.
1527
+ */
1528
+ protected readonly mounted: WritableSignal<boolean>;
1529
+ protected readonly hasValue: Signal<boolean>;
1530
+ readonly placeholder: InputSignal<string>;
1531
+ /** Набор кнопок форматирования; сужает и принимаемые форматы (вставка из буфера). */
1532
+ readonly toolbar: InputSignal<TRtRichEditorToolbar>;
1533
+ /** Enter без Shift в редакторе — сигнал отправки (Shift+Enter остаётся переносом). */
1534
+ readonly enterPressed: OutputEmitterRef<void>;
1535
+ readonly displayText: Signal<string>;
1536
+ ngAfterViewInit(): Promise<void>;
1537
+ ngOnDestroy(): void;
1538
+ writeValue(value: IQuillDelta | null): void;
1539
+ setDisabledState(isDisabled: boolean): void;
1540
+ protected getEmptyValue(): IQuillDelta | null;
1541
+ protected focusAfterClear(): void;
1542
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtRichEditorComponent, never>;
1543
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtRichEditorComponent, "rt-rich-editor", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "toolbar": { "alias": "toolbar"; "required": false; "isSignal": true; }; }, { "enterPressed": "enterPressed"; }, never, never, true, never>;
1544
+ }
1545
+
1517
1546
  /**
1518
1547
  * Общий презентационный чат: тред сообщений + композер. Никакого data-access/api —
1519
1548
  * история приходит готовым массивом `IRtChat.Message[]`, отправка/обновление/
@@ -1587,6 +1616,12 @@ declare class RtChatComponent {
1587
1616
  * принимает drop напрямую в свой `replyForm`.
1588
1617
  */
1589
1618
  protected readonly droppedFiles: WritableSignal<File[] | null>;
1619
+ /**
1620
+ * Шаблон действий у реплики: `<ng-template rtChatMessageActions let-message>`.
1621
+ *
1622
+ * Не объявлен — разметка реплики прежняя, и лишней кнопки у неё не появляется.
1623
+ */
1624
+ protected readonly messageActions: Signal<RtChatMessageActionsDirective | undefined>;
1590
1625
  /** История сообщений (consumer уже смаппил из доменной модели). */
1591
1626
  readonly messages: InputSignal<readonly IRtChat.Message[]>;
1592
1627
  /** Первичная загрузка — скелетоны вместо треда. */
@@ -1641,7 +1676,8 @@ declare class RtChatComponent {
1641
1676
  readonly send: OutputEmitterRef<IRtChat.SendPayload>;
1642
1677
  /** Клик refresh — consumer перетягивает тред. */
1643
1678
  readonly refresh: OutputEmitterRef<void>;
1644
- /** Клик по вложению — consumer качает blob своим api. */
1679
+ /** Клик по вложению — consumer качает blob своим api. Шаблон зовёт выход прямо: релей-метод,
1680
+ * который только повторял `emit`, ничего не добавлял, а файл при этом рос. */
1645
1681
  readonly downloadFile: OutputEmitterRef<IRtChat.Message>;
1646
1682
  /** Клик по карточке вложения из `attachments[]` — консюмер качает по `publicId`. */
1647
1683
  readonly downloadAttachment: OutputEmitterRef<IRtChat.Attachment>;
@@ -1650,6 +1686,13 @@ declare class RtChatComponent {
1650
1686
  readonly deleteMessage: OutputEmitterRef<IRtChat.Message>;
1651
1687
  /** Повторная отправка своего сообщения со статусом `failed`. */
1652
1688
  readonly retryMessage: OutputEmitterRef<IRtChat.Message>;
1689
+ /**
1690
+ * Есть ли у реплики действия потребителя — гейт кнопки «…» у неё.
1691
+ *
1692
+ * Не задан — точка действий показывается у каждой реплики: экран, который ничего не
1693
+ * гейтит, показывает её так же, как это делает строка таблицы.
1694
+ */
1695
+ readonly messageHasActions: InputSignal<IRtChat.MessageActionsPredicate | null>;
1653
1696
  constructor();
1654
1697
  protected onSubmit(): void;
1655
1698
  protected onComposerKeydown(event: KeyboardEvent): void;
@@ -1663,27 +1706,37 @@ declare class RtChatComponent {
1663
1706
  protected openFilePicker(): void;
1664
1707
  protected onFilesPicked(event: Event): void;
1665
1708
  protected removeFile(index: number): void;
1666
- /**
1667
- * Обновляем «у нижнего ли края» по скроллу — основа решения об автоскролле.
1668
- * Прилипание к низу снимаем ТОЛЬКО когда пользователь прокрутил ВВЕРХ (scrollTop
1669
- * уменьшился). Событие от программной прокрутки и рост контента идут при том же
1670
- * или большем scrollTop — тогда прилипание лишь усиливаем, но не снимаем. Иначе
1671
- * async-событие от нашего же `scrollTop = scrollHeight`, долетающее уже после
1672
- * поздней дорисовки rich-контента (высота выросла, scrollTop прежний → мнимый
1673
- * «отрыв от низа»), сбрасывало бы `#atBottom` и ломало до-прокрутку.
1674
- */
1709
+ /** Признак «читатель у нижнего края» обновляется по прокрутке: на нём стоит автопрокрутка. */
1675
1710
  protected onThreadScroll(): void;
1676
- protected onRefresh(): void;
1677
- protected onDownload(message: IRtChat.Message): void;
1678
- /** Релей клика по вложению наружу — сам компонент файлов не качает. */
1679
- protected onDownloadAttachment(attachment: IRtChat.Attachment): void;
1680
- /** Релей запроса на удаление сообщения — удаляет домен, компонент только рисует. */
1681
- protected onDeleteMessage(message: IRtChat.Message): void;
1682
- /** Релей повтора отправки упавшего сообщения — переотправляет домен. */
1683
- protected onRetryMessage(message: IRtChat.Message): void;
1684
1711
  protected toggleExpand(): void;
1685
1712
  static ɵfac: i0.ɵɵFactoryDeclaration<RtChatComponent, never>;
1686
- 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; }; }, { "send": "send"; "refresh": "refresh"; "downloadFile": "downloadFile"; "downloadAttachment": "downloadAttachment"; "expandedChange": "expandedChange"; "deleteMessage": "deleteMessage"; "retryMessage": "retryMessage"; }, never, ["[rtChatHeaderActions]", "[rtChatFooter]"], true, never>;
1713
+ 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>;
1714
+ }
1715
+
1716
+ /**
1717
+ * Есть ли у реплики хотя бы одно доступное действие потребителя.
1718
+ *
1719
+ * Признак приходит предикатом от экрана, а не подсчётом отрисованных пунктов меню:
1720
+ * содержимое спроецированного шаблона известно только после отрисовки, и кнопка
1721
+ * успевала бы мигнуть на первом кадре.
1722
+ *
1723
+ * Предикат не задан — у реплики есть действия: экран, который ничего не гейтит,
1724
+ * показывает кнопку меню. Так же это устроено у строки таблицы, и расхождение между
1725
+ * двумя точками проекции одного кита читалось бы дефектом.
1726
+ */
1727
+ declare function messageHasAvailableActions(message: IRtChat.Message, hasActions: IRtChat.MessageActionsPredicate | null): boolean;
1728
+
1729
+ /**
1730
+ * Есть ли у реплики доступные действия — гейт кнопки «…» у неё.
1731
+ *
1732
+ * Pure-pipe: пересчитывается только при смене реплики или предиката, а не на каждом
1733
+ * цикле проверки. Значение приходит из контекста шаблона (реплика треда), поэтому
1734
+ * `computed()` здесь неприменим.
1735
+ */
1736
+ declare class RtChatMessageHasActionsPipe implements PipeTransform {
1737
+ transform(message: IRtChat.Message, hasActions: IRtChat.MessageActionsPredicate | null): boolean;
1738
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtChatMessageHasActionsPipe, never>;
1739
+ static ɵpipe: i0.ɵɵPipeDeclaration<RtChatMessageHasActionsPipe, "rtChatMessageHasActions", true>;
1687
1740
  }
1688
1741
 
1689
1742
  /**
@@ -2218,6 +2271,14 @@ declare abstract class RtRouteAsideComponent<T> implements OnInit {
2218
2271
  */
2219
2272
  protected readonly pristine: Signal<boolean>;
2220
2273
  protected readonly submitError: WritableSignal<string | null>;
2274
+ /**
2275
+ * Удача мутации — тем же способом, что и отказ. Человек, работающий в панели,
2276
+ * смотрит в панель, а не на экран за её краем: тост об успехе всплывает там,
2277
+ * куда он в эту минуту не смотрит. Оба сигнала гасятся в начале каждой
2278
+ * попытки и гасят друг друга — это ответы на один вопрос, и двух сразу не
2279
+ * бывает.
2280
+ */
2281
+ protected readonly submitSuccess: WritableSignal<string | null>;
2221
2282
  protected readonly idParamName: string;
2222
2283
  /** id-only режим: нужен только id (например, смена пароля по userId), сущность не грузится. */
2223
2284
  protected readonly idOnly: boolean;
@@ -2233,11 +2294,7 @@ declare abstract class RtRouteAsideComponent<T> implements OnInit {
2233
2294
  */
2234
2295
  canDeactivate(): Observable<boolean>;
2235
2296
  protected setEntity(entity: T | null): void;
2236
- /**
2237
- * Признак нетронутой формы. Контрол принимается и сигналом: форма панели
2238
- * собрана директивой `ngForm` и до отрисовки шаблона её ещё нет, поэтому
2239
- * `viewChild(NgForm)` отдаёт её только сигналом.
2240
- */
2297
+ /** Признак нетронутой формы — тот же, что гейтит кнопку записи. */
2241
2298
  protected pristineSignal(control: AbstractControl | Signal<AbstractControl | undefined>): Signal<boolean>;
2242
2299
  /**
2243
2300
  * Ставит гард закрытия: пока форма тронута, любой из четырёх путей закрытия
@@ -2272,10 +2329,18 @@ declare abstract class RtRouteAsideComponent<T> implements OnInit {
2272
2329
  * `errorText` принимается и функцией: причина отказа известна только после
2273
2330
  * него — стор кладёт её в свой сигнал, а панель без стора выводит из ответа
2274
2331
  * сервера, — и готовой строкой на момент запуска мутации её не передать.
2332
+ *
2333
+ * `successMessage` — текст удачи, который панель показывает внутри себя,
2334
+ * рядом с формой. Довод отделён от `successText` намеренно: переезд текста
2335
+ * из тоста в панель сломал бы всякого потребителя, который тост и хотел, а
2336
+ * сказать «мне нужен тост» ему после этого было бы нечем. Назван он по месту
2337
+ * показа, а не по исходу: два довода с разницей в одном слоге читались бы
2338
+ * как опечатка.
2275
2339
  */
2276
2340
  protected runMutation(op$: Observable<unknown>, opts?: {
2277
2341
  onSuccess?: () => void;
2278
2342
  successText?: string;
2343
+ successMessage?: string;
2279
2344
  errorText?: string | ((error: unknown) => string);
2280
2345
  closeOnSuccess?: boolean;
2281
2346
  refreshOnSuccess?: boolean;
@@ -4762,15 +4827,42 @@ declare class RtTableRowDirective {
4762
4827
  /** Имя внутренней «…»-колонки действий, добавляемой при `[showRowActions]`. */
4763
4828
  declare const RT_TABLE_ROW_ACTIONS_COLUMN: string;
4764
4829
  /**
4765
- * Описатель поля авто-карточки мобильного режима: лейбл колонки (из `columnsConfig`)
4766
- * + её cell-шаблон (`cdkColumnDef`.cell), который рендерится в значение через
4767
- * `ngTemplateOutlet` с контекстом `{ $implicit: row }`.
4830
+ * Колонки конфига без применённых настроек пользователя — источник для кнопки
4831
+ * «Сбросить» в панели. Закрытая колонка видима всегда: скрыть её панель не даёт.
4832
+ */
4833
+ declare function defaultColumnItems(config: ReadonlyArray<IRtTable.ColumnConfig>): ReadonlyArray<IRtTable.ColumnSettingItem>;
4834
+ /**
4835
+ * Разрешённые колонки настраиваемой таблицы: конфиг в применённом порядке с текущим
4836
+ * признаком скрытия.
4837
+ *
4838
+ * Порядок берётся из сохранённых настроек, а колонки, появившиеся в конфиге после
4839
+ * сохранения, встают в конец: настройки, снятые с прежнего состава, иначе прятали бы
4840
+ * новую колонку молча. Настроек нет — порядок и скрытие берутся из самого конфига.
4841
+ */
4842
+ declare function resolveColumns(config: ReadonlyArray<IRtTable.ColumnConfig>, settings: IRtTable.ColumnSettings | null): ReadonlyArray<IRtTable.ColumnSettingItem>;
4843
+ /**
4844
+ * Имена колонок для строк CDK: у настраиваемой таблицы — видимые в применённом порядке,
4845
+ * у остальных — то, что назвал вход `[columns]`. Колонка действий встаёт последней, когда
4846
+ * действия строки включены.
4847
+ */
4848
+ declare function displayedColumnKeys(resolved: ReadonlyArray<IRtTable.ColumnSettingItem>, legacyColumns: ReadonlyArray<string>, configurable: boolean, showRowActions: boolean): ReadonlyArray<string>;
4849
+ /**
4850
+ * Настройки панели, приведённые к конфигу: ключи закрытых колонок из списка скрытых
4851
+ * вычищаются. Панель их не предлагает, но настройки приезжают и из хранилища — снятые с
4852
+ * той поры, когда колонка закрытой ещё не была.
4853
+ */
4854
+ declare function withoutLockedHidden(config: ReadonlyArray<IRtTable.ColumnConfig>, settings: IRtTable.ColumnSettings): IRtTable.ColumnSettings;
4855
+
4856
+ /**
4857
+ * Поле авто-карточки узкого экрана: подпись колонки и её шаблон ячейки. Значение рисуется
4858
+ * тем же шаблоном, что и в строке таблицы, — второй разметки у карточки нет.
4768
4859
  */
4769
4860
  interface IRtTableCardColumn<TRow> {
4770
4861
  key: string;
4771
4862
  label: string;
4772
4863
  cell: TemplateRef<IRtTableCardContext<TRow>>;
4773
4864
  }
4865
+
4774
4866
  /**
4775
4867
  * Таблица — стилизованная обёртка над `cdk-table` (`@angular/cdk/table`).
4776
4868
  *
@@ -4843,17 +4935,11 @@ declare class RtTableComponent<TRow> extends CdkTable<TRow> {
4843
4935
  /** Карточки показываются только когда card-режим включён (`[cards]`) и экран узкий. */
4844
4936
  protected readonly showCards: Signal<boolean>;
4845
4937
  /**
4846
- * Строки для card-рендера. CdkTable хранит `dataSource` как array | Observable |
4847
- * DataSource — карточки строим только для массива (client-side pattern);
4848
- * для остальных типов пусто (карточки не поддерживаются). `#dataSourceVersion`
4849
- * инвалидирует computed при смене источника.
4938
+ * Строки для карточек узкого экрана. Признак `#dataSourceVersion` пересчитывает список
4939
+ * при смене источника: CDK хранит его полем, а не сигналом.
4850
4940
  */
4851
4941
  protected readonly cardRows: Signal<ReadonlyArray<TRow>>;
4852
- /**
4853
- * Поля авто-карточки: видимые колонки (кроме «…»-действий) с лейблом из
4854
- * `columnsConfig` (fallback — ключ колонки) и cell-шаблоном из `cdkColumnDef`.
4855
- * Колонки без cell-шаблона пропускаются.
4856
- */
4942
+ /** Поля авто-карточки узкого экрана: видимые колонки с подписью и шаблоном ячейки. */
4857
4943
  protected readonly cardColumns: Signal<ReadonlyArray<IRtTableCardColumn<TRow>>>;
4858
4944
  /** ContentChild template для кастом empty-placeholder'а. Опционален; fallback — emptyMessage. */
4859
4945
  readonly emptyTemplate: Signal<TemplateRef<unknown> | undefined>;
@@ -4929,8 +5015,7 @@ declare class RtTableComponent<TRow> extends CdkTable<TRow> {
4929
5015
  readonly canConfigure: Signal<boolean>;
4930
5016
  /** Сколько skeleton-строк рендерить во время initial-load. Default 5. */
4931
5017
  readonly skeletonRows: InputSignalWithTransform<number, NumberInput>;
4932
- /** Текст empty-placeholder'а если `rtTableEmpty` ContentChild template не задан. */
4933
- /** Пусто — берётся переведённая подпись по умолчанию */
5018
+ /** Подпись пустой таблицы; пусто — берётся переведённое умолчание. */
4934
5019
  readonly emptyMessage: InputSignal<string>;
4935
5020
  /** Своя подпись пустой таблицы важнее умолчания */
4936
5021
  readonly emptyText: Signal<string>;
@@ -4938,13 +5023,8 @@ declare class RtTableComponent<TRow> extends CdkTable<TRow> {
4938
5023
  readonly emptyIcon: InputSignal<IRtIcon.Name | null>;
4939
5024
  /** Описание под заголовком дефолтного empty-placeholder'а. Опционально. */
4940
5025
  readonly emptyDescription: InputSignal<string | null>;
4941
- constructor();
4942
5026
  ngOnInit(): void;
4943
5027
  ngOnDestroy(): void;
4944
- /**
4945
- * Применяет новые настройки колонок (из панели настроек): порядок + скрытые.
4946
- * Locked-колонки принудительно остаются видимыми (их ключи вычищаются из hidden).
4947
- */
4948
5028
  /**
4949
5029
  * Переключает порядок по колонке: по возрастанию → по убыванию → без сортировки.
4950
5030
  * Выбранное состояние уходит наружу — выборку делает потребитель.
@@ -6129,5 +6209,5 @@ declare const RT_DESIGN_TOKEN_NAMES: readonly TRtDesignTokenName[];
6129
6209
  /** Все ручки потребителя: значение приходит от приложения, до него работает запасное. */
6130
6210
  declare const RT_CONSUMER_HANDLE_NAMES: readonly TRtConsumerHandleName[];
6131
6211
 
6132
- export { BreakpointsService, CATEGORY_ORDER, ERtCalendarDayState, ERtChatMessageStatus, ERtMarkdownBlock, ERtMarkdownInline, ERtStorageKeys, IButton, ICON_CATEGORY_RULES, INotification, IRtAsideHeader, IRtAutocomplete, IRtBarList, IRtCalendar, IRtChat, IRtConfirmPopover, IRtDatePicker, IRtField, IRtFileCard, IRtFileDrop, IRtFileInput, IRtFilterControl, IRtIcon, IRtIconButton, IRtInput, IRtLogo, IRtMenu, IRtMessageComposer, IRtNightGrid, IRtPageHeader, IRtPagination, IRtPhotoViewer, IRtPopover, IRtSectionNav, IRtSelect, IRtSpinner, IRtSplitButton, IRtStatTile, IRtStepper, IRtTable, IRtTabs, IRtTag, IRtThemeToggle, IRtThreadList, IRtTimeline, IRtToaster, IRtToggleButtonGroup, IRtToggleSwitch, IRtTooltip, IRtWelcomeDialog, IRtWorkspace, IRtWorkspaceDetails, ITheme, MessageBus, NotificationBus, RT_ASIDE_DATA, RT_CONSUMER_HANDLE_NAMES, RT_COUNTER_DECREASE_KEY, RT_COUNTER_INCREASE_KEY, RT_DESIGN_TOKEN_NAMES, RT_DIALOG_DATA, RT_FIELD_DEFAULT_ERROR_KEYS, RT_FIELD_EMPTY_VALUE, RT_ICONS_BASE_URL, RT_ICON_SPRITE_ID, RT_ICON_SYMBOL_ID_PREFIX, RT_KIT_LABELS, RT_KIT_LABELS_EN, RT_KIT_LOCALE, RT_KIT_TRANSLATOR, RT_MENU_SELECT_EVENT, RT_TABLE_ROW_ACTIONS_COLUMN, RT_TOASTER_GAP_PX, RtAsideComponent, RtAsideFooterComponent, RtAsideHeaderComponent, RtAsideRef, RtAsideSectionComponent, RtAsideService, RtAutocompleteComponent, RtBarListComponent, RtBottomSheetComponent, RtButtonDirective, RtCalendarComponent, RtCardComponent, RtChatComponent, RtChatStatusLabelPipe, RtCheckboxComponent, RtCollapsibleTextComponent, RtConfirmDirective, RtConfirmPopoverComponent, RtContainerComponent, RtContainerContentDirective, RtContainerContentPanelDirective, RtContainerHeaderDirective, RtContainerLeftSidenavDirective, RtContainerLeftSidenavPanelDirective, RtContainerRightSidenavDirective, RtContainerRightSidenavPanelDirective, RtContainerStateService, RtContainerToolbarCenterDirective, RtContainerToolbarLeftDirective, RtContainerToolbarRightDirective, RtCopyCellComponent, RtCounterComponent, RtCounterRowComponent, RtDatePickerComponent, RtDayStampPipe, RtDeltaViewComponent, RtDetailListComponent, RtDetailRowComponent, RtDialogComponent, RtDialogFooterComponent, RtDialogHeaderComponent, RtDialogRef, RtDialogService, RtDownloadLinkComponent, RtEmptyStateComponent, RtFieldComponent, RtFieldHintDirective, RtFileCardComponent, RtFileDropComponent, RtFileInputComponent, RtFileListComponent, RtFilterControlComponent, RtFormControlBase, RtHeaderComponent, RtIconButtonComponent, RtIconComponent, RtIconRegistry, RtInfiniteScrollDirective, RtInfoItemComponent, RtInputComponent, RtInputNumberComponent, RtKitLabelPipe, RtLiveBadgeComponent, RtLogoComponent, RtMarkdownTextComponent, RtMenuComponent, RtMenuItemComponent, RtMessageComponent, RtMessageComposerComponent, RtMoneyListComponent, RtMoneyRowComponent, RtMultiselectComponent, RtNightGridComponent, RtNoteComponent, RtNotificationsBellComponent, RtPageHeaderComponent, RtPaginationComponent, RtPhotoViewerComponent, RtPopoverDirective, RtRichEditorComponent, RtRouteAsideComponent, RtRowHasActionsPipe, RtSectionNavComponent, RtSelectComponent, RtSkeletonComponent, RtSkeletonWrapperComponent, RtSpinnerComponent, RtSplitButtonComponent, RtStatTileComponent, RtStepperComponent, RtTabDirective, RtTableCardDirective, RtTableComponent, RtTableRowActionsDirective, RtTableRowDirective, RtTableSettingsAsideComponent, RtTableSettingsPanelComponent, RtTableSettingsRegistry, RtTableSortHeaderComponent, RtTabsComponent, RtTabsControlDirective, RtTagComponent, RtTextareaComponent, RtThemeToggleComponent, RtThreadListComponent, RtThreadListFiltersDirective, RtThreadListRowDirective, RtThreadListSearchDirective, RtTimelineComponent, RtToastComponent, RtToasterComponent, RtToggleButtonGroupComponent, RtToggleSwitchComponent, RtToolbarCenterDirective, RtToolbarComponent, RtToolbarLeftDirective, RtToolbarRightDirective, RtTooltipComponent, RtTooltipDirective, RtTruncateMiddlePipe, RtWelcomeDialogComponent, RtWorkspaceAsideDirective, RtWorkspaceCenterDirective, RtWorkspaceComponent, RtWorkspaceDesktopOnlyDirective, RtWorkspaceDetailsComponent, RtWorkspaceListDirective, SEARCH_DEBOUNCE_MS, ThemeService, ariaSortOf, breakNode, categoryOf, coerceQuillDeltaOutput, deliveryStatus, deriveFileTitle, fileNameFromUrl, formatFileSize, getFileTypeIcon, iconsName, indexFromParam, indexFromScroll, isColumnSortable, nextPhotoIndex, nextSort, normalizeQuillDelta, paramFromIndex, parseInline, parseMarkdown, pendingToRtMessage, provideRtIcons, provideRtKitLabels, rowHasAvailableActions, rtAsideUnsavedGuard, rtKitLabel, searchDebounce, shouldRenderPhoto, sortDirectionOf, toRtMessage };
6133
- export type { IMessageBusEvent, IQuillDelta, IQuillDeltaAttributes, IQuillDeltaOp, IRtAsideConfig, IRtDialogConfig, IRtMappableMessage, IRtMarkdownBlockNode, IRtMarkdownInlineNode, IRtMarkdownListItem, IRtPendingMessage, IRtPicture, IRtPictureSource, IRtTableCardContext, IRtTableRowActionsContext, IRtTableSettingsRegistration, IToRtMessageOptions, TIconCategory, TRtAsideContentLayout, TRtAsidePosition, TRtAsideSize, TRtConsumerHandleName, TRtDesignTokenName, TRtDialogSize, TRtKitLabelKey, TRtKitLabelMap, TRtKitLabelParams, TRtKitTranslator, TRtRichEditorToolbar, TRtSkeletonRadius, TRtSkeletonShape, TRtSkeletonSize, TRtTableAriaSort, TRtTextareaResize };
6212
+ export { BreakpointsService, CATEGORY_ORDER, ERtCalendarDayState, ERtChatMessageStatus, ERtMarkdownBlock, ERtMarkdownInline, ERtStorageKeys, IButton, ICON_CATEGORY_RULES, INotification, IRtAsideHeader, IRtAutocomplete, IRtBarList, IRtCalendar, IRtChat, IRtConfirmPopover, IRtDatePicker, IRtField, IRtFileCard, IRtFileDrop, IRtFileInput, IRtFilterControl, IRtIcon, IRtIconButton, IRtInput, IRtLogo, IRtMenu, IRtMessageComposer, IRtNightGrid, IRtPageHeader, IRtPagination, IRtPhotoViewer, IRtPopover, IRtSectionNav, IRtSelect, IRtSpinner, IRtSplitButton, IRtStatTile, IRtStepper, IRtTable, IRtTabs, IRtTag, IRtThemeToggle, IRtThreadList, IRtTimeline, IRtToaster, IRtToggleButtonGroup, IRtToggleSwitch, IRtTooltip, IRtWelcomeDialog, IRtWorkspace, IRtWorkspaceDetails, ITheme, MessageBus, NotificationBus, RT_ASIDE_DATA, RT_CONSUMER_HANDLE_NAMES, RT_COUNTER_DECREASE_KEY, RT_COUNTER_INCREASE_KEY, RT_DESIGN_TOKEN_NAMES, RT_DIALOG_DATA, RT_FIELD_DEFAULT_ERROR_KEYS, RT_FIELD_EMPTY_VALUE, RT_ICONS_BASE_URL, RT_ICON_SPRITE_ID, RT_ICON_SYMBOL_ID_PREFIX, RT_KIT_LABELS, RT_KIT_LABELS_EN, RT_KIT_LOCALE, RT_KIT_TRANSLATOR, RT_MENU_SELECT_EVENT, RT_TABLE_ROW_ACTIONS_COLUMN, RT_TOASTER_GAP_PX, RtAsideComponent, RtAsideFooterComponent, RtAsideHeaderComponent, RtAsideRef, RtAsideSectionComponent, RtAsideService, RtAutocompleteComponent, RtBarListComponent, RtBottomSheetComponent, RtButtonDirective, RtCalendarComponent, RtCardComponent, RtChatComponent, RtChatMessageActionsDirective, RtChatMessageHasActionsPipe, RtChatStatusLabelPipe, RtCheckboxComponent, RtCollapsibleTextComponent, RtConfirmDirective, RtConfirmPopoverComponent, RtContainerComponent, RtContainerContentDirective, RtContainerContentPanelDirective, RtContainerHeaderDirective, RtContainerLeftSidenavDirective, RtContainerLeftSidenavPanelDirective, RtContainerRightSidenavDirective, RtContainerRightSidenavPanelDirective, RtContainerStateService, RtContainerToolbarCenterDirective, RtContainerToolbarLeftDirective, RtContainerToolbarRightDirective, RtCopyCellComponent, RtCounterComponent, RtCounterRowComponent, RtDatePickerComponent, RtDayStampPipe, RtDeltaViewComponent, RtDetailListComponent, RtDetailRowComponent, RtDialogComponent, RtDialogFooterComponent, RtDialogHeaderComponent, RtDialogRef, RtDialogService, RtDownloadLinkComponent, RtEmptyStateComponent, RtFieldComponent, RtFieldHintDirective, RtFileCardComponent, RtFileDropComponent, RtFileInputComponent, RtFileListComponent, RtFilterControlComponent, RtFormControlBase, RtHeaderComponent, RtIconButtonComponent, RtIconComponent, RtIconRegistry, RtInfiniteScrollDirective, RtInfoItemComponent, RtInputComponent, RtInputNumberComponent, RtKitLabelPipe, RtLiveBadgeComponent, RtLogoComponent, RtMarkdownTextComponent, RtMenuComponent, RtMenuItemComponent, RtMessageComponent, RtMessageComposerComponent, RtMoneyListComponent, RtMoneyRowComponent, RtMultiselectComponent, RtNightGridComponent, RtNoteComponent, RtNotificationsBellComponent, RtPageHeaderComponent, RtPaginationComponent, RtPhotoViewerComponent, RtPopoverDirective, RtRichEditorComponent, RtRouteAsideComponent, RtRowHasActionsPipe, RtSectionNavComponent, RtSelectComponent, RtSkeletonComponent, RtSkeletonWrapperComponent, RtSpinnerComponent, RtSplitButtonComponent, RtStatTileComponent, RtStepperComponent, RtTabDirective, RtTableCardDirective, RtTableComponent, RtTableRowActionsDirective, RtTableRowDirective, RtTableSettingsAsideComponent, RtTableSettingsPanelComponent, RtTableSettingsRegistry, RtTableSortHeaderComponent, RtTabsComponent, RtTabsControlDirective, RtTagComponent, RtTextareaComponent, RtThemeToggleComponent, RtThreadListComponent, RtThreadListFiltersDirective, RtThreadListRowDirective, RtThreadListSearchDirective, RtTimelineComponent, RtToastComponent, RtToasterComponent, RtToggleButtonGroupComponent, RtToggleSwitchComponent, RtToolbarCenterDirective, RtToolbarComponent, RtToolbarLeftDirective, RtToolbarRightDirective, RtTooltipComponent, RtTooltipDirective, RtTruncateMiddlePipe, RtWelcomeDialogComponent, RtWorkspaceAsideDirective, RtWorkspaceCenterDirective, RtWorkspaceComponent, RtWorkspaceDesktopOnlyDirective, RtWorkspaceDetailsComponent, RtWorkspaceListDirective, SEARCH_DEBOUNCE_MS, ThemeService, ariaSortOf, breakNode, categoryOf, coerceQuillDeltaOutput, defaultColumnItems, deliveryStatus, deriveFileTitle, displayedColumnKeys, fileNameFromUrl, formatFileSize, getFileTypeIcon, iconsName, indexFromParam, indexFromScroll, isColumnSortable, messageHasAvailableActions, nextPhotoIndex, nextSort, normalizeQuillDelta, paramFromIndex, parseInline, parseMarkdown, pendingToRtMessage, provideRtIcons, provideRtKitLabels, resolveColumns, rowHasAvailableActions, rtAsideUnsavedGuard, rtKitLabel, searchDebounce, shouldRenderPhoto, sortDirectionOf, toRtMessage, withoutLockedHidden };
6213
+ export type { IMessageBusEvent, IQuillDelta, IQuillDeltaAttributes, IQuillDeltaOp, IRtAsideConfig, IRtChatMessageActionsContext, IRtDialogConfig, IRtMappableMessage, IRtMarkdownBlockNode, IRtMarkdownInlineNode, IRtMarkdownListItem, IRtPendingMessage, IRtPicture, IRtPictureSource, IRtTableCardContext, IRtTableRowActionsContext, IRtTableSettingsRegistration, IToRtMessageOptions, TIconCategory, TRtAsideContentLayout, TRtAsidePosition, TRtAsideSize, TRtConsumerHandleName, TRtDesignTokenName, TRtDialogSize, TRtKitLabelKey, TRtKitLabelMap, TRtKitLabelParams, TRtKitTranslator, TRtRichEditorToolbar, TRtSkeletonRadius, TRtSkeletonShape, TRtSkeletonSize, TRtTableAriaSort, TRtTextareaResize };
Binary file