@rt-tools/ui-kit-v2 0.19.1 → 0.20.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.
Files changed (36) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +18 -0
  2. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +129 -18
  4. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +2 -2
  6. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +14 -8
  8. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +4 -3
  10. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +4 -3
  12. package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +9 -4
  14. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +15 -9
  16. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  17. package/package.json +1 -1
  18. package/rt-tools-ui-kit-v2-0.20.0.tgz +0 -0
  19. package/src/lib/components/dynamic-selector/CONTEXT.md +24 -3
  20. package/src/lib/components/dynamic-selector/dynamic-input/rt-dynamic-input.component.scss +4 -5
  21. package/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.scss +50 -6
  22. package/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup-options.scss +108 -0
  23. package/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.scss +28 -23
  24. package/src/lib/components/dynamic-selector/rt-dynamic-selector.component.scss +4 -5
  25. package/src/lib/components/empty-state/CONTEXT.md +3 -1
  26. package/src/lib/components/empty-state/rt-empty-state.component.scss +9 -5
  27. package/src/lib/components/input/rt-input.component.scss +17 -0
  28. package/src/lib/components/input-number/rt-input-number.component.scss +15 -0
  29. package/src/lib/components/thread-list/CONTEXT.md +3 -1
  30. package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +2 -0
  31. package/types/rt-tools-ui-kit-v2-core.d.ts +69 -4
  32. package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +45 -3
  33. package/types/rt-tools-ui-kit-v2-icon.d.ts +3 -1
  34. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +4 -2
  35. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +13 -8
  36. package/rt-tools-ui-kit-v2-0.19.1.tgz +0 -0
@@ -13,16 +13,25 @@ declare namespace IRtDynamicSelector {
13
13
  type SelectAllState = 'none' | 'some' | 'all';
14
14
  /** Как выбирает всплывающий список: один пункт переключателем или несколько флажками. */
15
15
  type Mode = 'single' | 'multi';
16
+ /** Регистр подписи кнопки: как есть, каждое слово с заглавной или вся заглавными. */
17
+ type LabelCase = 'none' | 'title' | 'upper';
16
18
  /** Строки всплывающего выбора: отмеченные раньше над разделителем и найденные под ним. */
17
19
  interface PopupRows<T> {
18
20
  readonly ticked: ReadonlyArray<T>;
19
21
  readonly found: ReadonlyArray<T>;
20
22
  }
23
+ /** Кусок подписи пункта: совпал ли он со словом поиска. */
24
+ interface MatchPart {
25
+ readonly text: string;
26
+ readonly matched: boolean;
27
+ }
21
28
  /** Строка всплывающего выбора, готовая для разметки. */
22
29
  interface PopupRow<T> {
23
30
  readonly entity: T;
24
31
  readonly key: unknown;
25
32
  readonly label: string;
33
+ /** Подпись по кускам; без подсветки поиска — один кусок без отметки. */
34
+ readonly parts: ReadonlyArray<MatchPart>;
26
35
  readonly ticked: boolean;
27
36
  /** Под строкой стоит разделитель. */
28
37
  readonly separated: boolean;
@@ -233,6 +242,7 @@ declare const RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE: number;
233
242
  declare class RtDynamicSelectorPopupComponent<TEntity extends object> implements OnInit {
234
243
  #private;
235
244
  protected readonly searchLabel: Signal<string>;
245
+ protected readonly searchField: Signal<ElementRef<HTMLElement> | undefined>;
236
246
  protected readonly selectAllLabel: Signal<string>;
237
247
  protected readonly multiLabel: Signal<string>;
238
248
  protected readonly multiHintLabel: Signal<string>;
@@ -240,9 +250,13 @@ declare class RtDynamicSelectorPopupComponent<TEntity extends object> implements
240
250
  /** Подпись пустого результата: своя у приложения, иначе словарь кита. */
241
251
  protected readonly emptyText: Signal<string>;
242
252
  protected readonly cancelLabel: Signal<string>;
243
- protected readonly applyLabel: Signal<string>;
253
+ protected readonly applyKitLabel: Signal<string>;
254
+ /** Подпись кнопки применения: своя у приложения, иначе словарь кита, — в заданном регистре. */
255
+ protected readonly applyText: Signal<string>;
244
256
  /** Отмеченные ключи — ещё не применённые. */
245
257
  protected readonly ticked: WritableSignal<unknown[]>;
258
+ /** Отметки на минуту последней смены запроса: только они стоят над разделителем, отмеченное потом — на месте. */
259
+ protected readonly raised: WritableSignal<unknown[]>;
246
260
  protected readonly query: WritableSignal<string>;
247
261
  /** Выбор нескольких включён: без него простое нажатие оставляет одну отметку. */
248
262
  protected readonly isMultiOn: WritableSignal<boolean>;
@@ -252,6 +266,8 @@ declare class RtDynamicSelectorPopupComponent<TEntity extends object> implements
252
266
  protected readonly visibleKeys: Signal<unknown[]>;
253
267
  /** Строки для разметки: отмеченные раньше над разделителем, найденные — под ним. */
254
268
  protected readonly rowItems: Signal<IRtDynamicSelector.PopupRow<TEntity>[]>;
269
+ /** Подпись выбора одной записи рисует окно, а не кнопка: без переноса и при подсветке поиска. */
270
+ protected readonly ownLabel: Signal<boolean>;
255
271
  protected readonly hasRows: Signal<boolean>;
256
272
  protected readonly selectAllState: Signal<IRtDynamicSelector.SelectAllState>;
257
273
  protected readonly isSingle: Signal<boolean>;
@@ -264,6 +280,8 @@ declare class RtDynamicSelectorPopupComponent<TEntity extends object> implements
264
280
  readonly entities: InputSignal<ReadonlyArray<TEntity>>;
265
281
  readonly keyExp: InputSignal<keyof TEntity & string>;
266
282
  readonly displayExp: InputSignal<keyof TEntity & string>;
283
+ /** Подпись записи для строки, пункта окна и поиска; не задана — поле `displayExp`. */
284
+ readonly displayWith: InputSignal<((entity: TEntity) => string) | null>;
267
285
  readonly mode: InputSignal<IRtDynamicSelector.Mode>;
268
286
  readonly multiToggleShown: InputSignalWithTransform<boolean, unknown>;
269
287
  readonly selectAllShown: InputSignalWithTransform<boolean, unknown>;
@@ -278,8 +296,20 @@ declare class RtDynamicSelectorPopupComponent<TEntity extends object> implements
278
296
  readonly searchTerm: InputSignal<string>;
279
297
  /** Вид поля поиска — тот же вход, что у поля кита. */
280
298
  readonly searchAppearance: InputSignal<IRtInput.Appearance>;
299
+ /** Шаг скругления поля поиска; null — скругление самого поля. */
300
+ readonly searchRadius: InputSignal<TRtRadius | null>;
281
301
  /** Подпись пустого результата поиска; пустая строка оставляет подпись кита. */
282
302
  readonly emptyResultsText: InputSignal<string>;
303
+ /** Подпись кнопки применения; пустая строка оставляет подпись кита. */
304
+ readonly applyLabel: InputSignal<string>;
305
+ /** Регистр подписи кнопки применения; `none` оставляет её как есть. */
306
+ readonly applyLabelCase: InputSignal<IRtDynamicSelector.LabelCase>;
307
+ /** Поле поиска получает фокус при открытии окна; по умолчанию фокус остаётся там, где был. */
308
+ readonly autofocusSearch: InputSignalWithTransform<boolean, unknown>;
309
+ /** Подпись пункта переносится; `false` ведёт её одной строкой с многоточием и подсказкой при обрезке. */
310
+ readonly titleWrap: InputSignalWithTransform<boolean, unknown>;
311
+ /** Символы подписи пункта, совпавшие со словами поиска, выделены. */
312
+ readonly highlightSearch: InputSignalWithTransform<boolean, unknown>;
283
313
  /** Применённые ключи в порядке отметок. */
284
314
  readonly applied: OutputEmitterRef<unknown[]>;
285
315
  readonly cancelled: OutputEmitterRef<void>;
@@ -298,7 +328,7 @@ declare class RtDynamicSelectorPopupComponent<TEntity extends object> implements
298
328
  protected onApply(): void;
299
329
  protected onCancel(): void;
300
330
  static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicSelectorPopupComponent<any>, never>;
301
- static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicSelectorPopupComponent<any>, "rt-dynamic-selector-popup", never, { "entities": { "alias": "entities"; "required": false; "isSignal": true; }; "keyExp": { "alias": "keyExp"; "required": true; "isSignal": true; }; "displayExp": { "alias": "displayExp"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiToggleShown": { "alias": "multiToggleShown"; "required": false; "isSignal": true; }; "selectAllShown": { "alias": "selectAllShown"; "required": false; "isSignal": true; }; "localSearch": { "alias": "localSearch"; "required": false; "isSignal": true; }; "lazyLoad": { "alias": "lazyLoad"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "pinnedKeys": { "alias": "pinnedKeys"; "required": false; "isSignal": true; }; "navigateTitle": { "alias": "navigateTitle"; "required": false; "isSignal": true; }; "navigateLink": { "alias": "navigateLink"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "searchAppearance": { "alias": "searchAppearance"; "required": false; "isSignal": true; }; "emptyResultsText": { "alias": "emptyResultsText"; "required": false; "isSignal": true; }; }, { "applied": "applied"; "cancelled": "cancelled"; "searchChange": "searchChange"; "loadMore": "loadMore"; "temporaryChoiceChange": "temporaryChoiceChange"; }, never, never, true, never>;
331
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicSelectorPopupComponent<any>, "rt-dynamic-selector-popup", never, { "entities": { "alias": "entities"; "required": false; "isSignal": true; }; "keyExp": { "alias": "keyExp"; "required": true; "isSignal": true; }; "displayExp": { "alias": "displayExp"; "required": true; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiToggleShown": { "alias": "multiToggleShown"; "required": false; "isSignal": true; }; "selectAllShown": { "alias": "selectAllShown"; "required": false; "isSignal": true; }; "localSearch": { "alias": "localSearch"; "required": false; "isSignal": true; }; "lazyLoad": { "alias": "lazyLoad"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "pinnedKeys": { "alias": "pinnedKeys"; "required": false; "isSignal": true; }; "navigateTitle": { "alias": "navigateTitle"; "required": false; "isSignal": true; }; "navigateLink": { "alias": "navigateLink"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "searchAppearance": { "alias": "searchAppearance"; "required": false; "isSignal": true; }; "searchRadius": { "alias": "searchRadius"; "required": false; "isSignal": true; }; "emptyResultsText": { "alias": "emptyResultsText"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "applyLabelCase": { "alias": "applyLabelCase"; "required": false; "isSignal": true; }; "autofocusSearch": { "alias": "autofocusSearch"; "required": false; "isSignal": true; }; "titleWrap": { "alias": "titleWrap"; "required": false; "isSignal": true; }; "highlightSearch": { "alias": "highlightSearch"; "required": false; "isSignal": true; }; }, { "applied": "applied"; "cancelled": "cancelled"; "searchChange": "searchChange"; "loadMore": "loadMore"; "temporaryChoiceChange": "temporaryChoiceChange"; }, never, never, true, never>;
302
332
  }
303
333
 
304
334
  /**
@@ -340,6 +370,8 @@ declare class RtDynamicSelectorComponent<TEntity extends object> extends RtFormC
340
370
  readonly entities: InputSignal<ReadonlyArray<TEntity>>;
341
371
  readonly keyExp: InputSignal<keyof TEntity & string>;
342
372
  readonly displayExp: InputSignal<keyof TEntity & string>;
373
+ /** Подпись записи для строки, пункта окна и поиска; не задана — поле `displayExp`. */
374
+ readonly displayWith: InputSignal<((entity: TEntity) => string) | null>;
343
375
  readonly mode: InputSignal<IRtDynamicSelector.Mode>;
344
376
  /** Название кнопки добавления; пустое — «Add» из словаря кита. */
345
377
  readonly buttonTitle: InputSignal<string>;
@@ -378,8 +410,18 @@ declare class RtDynamicSelectorComponent<TEntity extends object> extends RtFormC
378
410
  readonly titleWrap: InputSignalWithTransform<boolean, unknown>;
379
411
  /** Вид поля поиска в окне выбора. */
380
412
  readonly searchAppearance: InputSignal<IRtInput.Appearance>;
413
+ /** Шаг скругления поля поиска в окне выбора; null — скругление самого поля. */
414
+ readonly searchRadius: InputSignal<TRtRadius | null>;
415
+ /** Символы подписи пункта окна выбора, совпавшие со словами поиска, выделены. */
416
+ readonly highlightSearch: InputSignalWithTransform<boolean, unknown>;
381
417
  /** Подпись пустого результата поиска; пустая строка оставляет подпись кита. */
382
418
  readonly emptyResultsText: InputSignal<string>;
419
+ /** Подпись кнопки применения в окне выбора; пустая строка оставляет подпись кита. */
420
+ readonly applyLabel: InputSignal<string>;
421
+ /** Регистр подписи кнопки применения; `none` оставляет её как есть. */
422
+ readonly applyLabelCase: InputSignal<IRtDynamicSelector.LabelCase>;
423
+ /** Поле поиска получает фокус при открытии окна выбора. */
424
+ readonly autofocusSearch: InputSignalWithTransform<boolean, unknown>;
383
425
  readonly multiToggleShown: InputSignalWithTransform<boolean, unknown>;
384
426
  readonly selectAllShown: InputSignalWithTransform<boolean, unknown>;
385
427
  readonly localSearch: InputSignalWithTransform<boolean, unknown>;
@@ -417,7 +459,7 @@ declare class RtDynamicSelectorComponent<TEntity extends object> extends RtFormC
417
459
  protected getEmptyValue(): unknown[];
418
460
  protected focusAfterClear(): void;
419
461
  static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicSelectorComponent<any>, never>;
420
- static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicSelectorComponent<any>, "rt-dynamic-selector", never, { "entities": { "alias": "entities"; "required": false; "isSignal": true; }; "keyExp": { "alias": "keyExp"; "required": true; "isSignal": true; }; "displayExp": { "alias": "displayExp"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "buttonTitle": { "alias": "buttonTitle"; "required": false; "isSignal": true; }; "addShown": { "alias": "addShown"; "required": false; "isSignal": true; }; "removeShown": { "alias": "removeShown"; "required": false; "isSignal": true; }; "listActionsShown": { "alias": "listActionsShown"; "required": false; "isSignal": true; }; "extraChanged": { "alias": "extraChanged"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "readonlyKeys": { "alias": "readonlyKeys"; "required": false; "isSignal": true; }; "pinnedKeys": { "alias": "pinnedKeys"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "buttonRadius": { "alias": "buttonRadius"; "required": false; "isSignal": true; }; "invitation": { "alias": "invitation"; "required": false; "isSignal": true; }; "invitationIcon": { "alias": "invitationIcon"; "required": false; "isSignal": true; }; "invitationGlyph": { "alias": "invitationGlyph"; "required": false; "isSignal": true; }; "invitationDescription": { "alias": "invitationDescription"; "required": false; "isSignal": true; }; "invitationButtonIcon": { "alias": "invitationButtonIcon"; "required": false; "isSignal": true; }; "invitationButtonAppearance": { "alias": "invitationButtonAppearance"; "required": false; "isSignal": true; }; "clearIcon": { "alias": "clearIcon"; "required": false; "isSignal": true; }; "titleWrap": { "alias": "titleWrap"; "required": false; "isSignal": true; }; "searchAppearance": { "alias": "searchAppearance"; "required": false; "isSignal": true; }; "emptyResultsText": { "alias": "emptyResultsText"; "required": false; "isSignal": true; }; "multiToggleShown": { "alias": "multiToggleShown"; "required": false; "isSignal": true; }; "selectAllShown": { "alias": "selectAllShown"; "required": false; "isSignal": true; }; "localSearch": { "alias": "localSearch"; "required": false; "isSignal": true; }; "lazyLoad": { "alias": "lazyLoad"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "navigateTitle": { "alias": "navigateTitle"; "required": false; "isSignal": true; }; "navigateLink": { "alias": "navigateLink"; "required": false; "isSignal": true; }; "sortFn": { "alias": "sortFn"; "required": false; "isSignal": true; }; "chosenEntities": { "alias": "chosenEntities"; "required": false; "isSignal": true; }; }, { "chosenEntities": "chosenEntitiesChange"; "selectionChange": "selectionChange"; "listReset": "listReset"; "listCleared": "listCleared"; "popupOpenChange": "popupOpenChange"; "searchChange": "searchChange"; "loadMore": "loadMore"; "temporaryChoiceChange": "temporaryChoiceChange"; }, ["rowTitle", "rowControls"], never, true, never>;
462
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicSelectorComponent<any>, "rt-dynamic-selector", never, { "entities": { "alias": "entities"; "required": false; "isSignal": true; }; "keyExp": { "alias": "keyExp"; "required": true; "isSignal": true; }; "displayExp": { "alias": "displayExp"; "required": true; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "buttonTitle": { "alias": "buttonTitle"; "required": false; "isSignal": true; }; "addShown": { "alias": "addShown"; "required": false; "isSignal": true; }; "removeShown": { "alias": "removeShown"; "required": false; "isSignal": true; }; "listActionsShown": { "alias": "listActionsShown"; "required": false; "isSignal": true; }; "extraChanged": { "alias": "extraChanged"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "readonlyKeys": { "alias": "readonlyKeys"; "required": false; "isSignal": true; }; "pinnedKeys": { "alias": "pinnedKeys"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "buttonRadius": { "alias": "buttonRadius"; "required": false; "isSignal": true; }; "invitation": { "alias": "invitation"; "required": false; "isSignal": true; }; "invitationIcon": { "alias": "invitationIcon"; "required": false; "isSignal": true; }; "invitationGlyph": { "alias": "invitationGlyph"; "required": false; "isSignal": true; }; "invitationDescription": { "alias": "invitationDescription"; "required": false; "isSignal": true; }; "invitationButtonIcon": { "alias": "invitationButtonIcon"; "required": false; "isSignal": true; }; "invitationButtonAppearance": { "alias": "invitationButtonAppearance"; "required": false; "isSignal": true; }; "clearIcon": { "alias": "clearIcon"; "required": false; "isSignal": true; }; "titleWrap": { "alias": "titleWrap"; "required": false; "isSignal": true; }; "searchAppearance": { "alias": "searchAppearance"; "required": false; "isSignal": true; }; "searchRadius": { "alias": "searchRadius"; "required": false; "isSignal": true; }; "highlightSearch": { "alias": "highlightSearch"; "required": false; "isSignal": true; }; "emptyResultsText": { "alias": "emptyResultsText"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "applyLabelCase": { "alias": "applyLabelCase"; "required": false; "isSignal": true; }; "autofocusSearch": { "alias": "autofocusSearch"; "required": false; "isSignal": true; }; "multiToggleShown": { "alias": "multiToggleShown"; "required": false; "isSignal": true; }; "selectAllShown": { "alias": "selectAllShown"; "required": false; "isSignal": true; }; "localSearch": { "alias": "localSearch"; "required": false; "isSignal": true; }; "lazyLoad": { "alias": "lazyLoad"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "navigateTitle": { "alias": "navigateTitle"; "required": false; "isSignal": true; }; "navigateLink": { "alias": "navigateLink"; "required": false; "isSignal": true; }; "sortFn": { "alias": "sortFn"; "required": false; "isSignal": true; }; "chosenEntities": { "alias": "chosenEntities"; "required": false; "isSignal": true; }; }, { "chosenEntities": "chosenEntitiesChange"; "selectionChange": "selectionChange"; "listReset": "listReset"; "listCleared": "listCleared"; "popupOpenChange": "popupOpenChange"; "searchChange": "searchChange"; "loadMore": "loadMore"; "temporaryChoiceChange": "temporaryChoiceChange"; }, ["rowTitle", "rowControls"], never, true, never>;
421
463
  }
422
464
 
423
465
  export { IRtDynamicSelector, RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE, RtDynamicInputComponent, RtDynamicSelectorComponent, RtDynamicSelectorListComponent, RtDynamicSelectorPopupComponent, RtDynamicSelectorRowControlsDirective, RtDynamicSelectorRowTitleDirective };
@@ -64,7 +64,9 @@ declare function materialPairOf(glyph: string | null | undefined): IRtIcon.Name
64
64
  * Чем рисуется значок: своим рисунком кита или лигатурой шрифта Material.
65
65
  *
66
66
  * Имя кита выигрывает у имени Material, если названы оба. Имя Material по способу `map-first`
67
- * берёт пару из перечня, а без пары — шрифт; по способу `font` — шрифт сразу. Материальный рисунок
67
+ * берёт пару из перечня, а без пары — шрифт; по способу `font` — шрифт сразу. Имя кита, которое шрифт
68
+ * нарисовать не может (`ico-plus`, `docBox`), и по способу `font` рисуется рисунком кита: иначе в
69
+ * значке стоит текст имени. Имя кита, совпавшее с лигатурой (`search`), по `font` — шрифт. Материальный рисунок
68
70
  * для пары выбирает уже сам значок по признаку набора над собой: это не дело разбора.
69
71
  *
70
72
  * `null` — значку нечего рисовать.
@@ -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 } from '@rt-tools/ui-kit-v2';
3
+ import { RtFormControlBase, IQuillDelta, TRtKitLabelMap, IRtAiRunStatus, IRtTimeline, IRtThreadList, IRtSideMenu, IRtIcon } 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
 
@@ -668,6 +668,8 @@ declare class RtAiChatComponent {
668
668
  readonly threadsLoading: InputSignalWithTransform<boolean, BooleanInput>;
669
669
  readonly threadsFetching: InputSignalWithTransform<boolean, BooleanInput>;
670
670
  readonly threadsHasMore: InputSignalWithTransform<boolean, BooleanInput>;
671
+ /** Значки декоративных строк-превью пустого списка бесед, по строке на значок. */
672
+ readonly emptyPreviewIcons: InputSignal<readonly IRtIcon.Name[]>;
671
673
  /** Кнопка «Full screen» в шапке. */
672
674
  readonly fullScreenable: InputSignalWithTransform<boolean, BooleanInput>;
673
675
  /** Кнопка закрытия в шапке. */
@@ -703,7 +705,7 @@ declare class RtAiChatComponent {
703
705
  protected onSearchThreads(query: string): void;
704
706
  protected onSelectThread(id: IRtThreadList.TRowId): void;
705
707
  static ɵfac: i0.ɵɵFactoryDeclaration<RtAiChatComponent, never>;
706
- 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; }; "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>;
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>;
707
709
  }
708
710
 
709
711
  /**
@@ -1,12 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, InputSignal, OnInit, Signal, InputSignalWithTransform, OutputEmitterRef } from '@angular/core';
3
3
  import { FormControl } from '@angular/forms';
4
- import { TRtKitLabelMap, IRtIcon } from '@rt-tools/ui-kit-v2/core';
4
+ import { IRtIcon, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';
5
5
  import * as i1 from '@rt-tools/ui-kit-v2/radius';
6
6
 
7
7
  /**
8
8
  * Модель `<rt-thread-list>`: один корневой неймспейс с префиксом `I`.
9
9
  */
10
+
10
11
  declare namespace IRtThreadList {
11
12
  /** Номер строки: список ведёт записи и с числовым ключом, и со строковым. */
12
13
  type TRowId = number | string;
@@ -27,6 +28,12 @@ declare namespace IRtThreadList {
27
28
  interface RowContext<TRow extends Row> {
28
29
  $implicit: TRow;
29
30
  }
31
+ /** Декоративная строка-превью пустого состояния. */
32
+ interface PreviewRow {
33
+ id: number;
34
+ icon: IRtIcon.Name;
35
+ offset: boolean;
36
+ }
30
37
  }
31
38
 
32
39
  /**
@@ -90,12 +97,8 @@ declare class RtThreadListComponent<TRow extends IRtThreadList.Row> implements O
90
97
  protected readonly searchPlaceholderText: Signal<string>;
91
98
  protected readonly emptyTitle: Signal<string>;
92
99
  protected readonly skeletonRows: number[];
93
- /** Декоративные строки-превью для иллюстрации пустого состояния списка. */
94
- protected readonly emptyPreviewRows: readonly {
95
- id: number;
96
- icon: IRtIcon.Name;
97
- offset: boolean;
98
- }[];
100
+ /** Декоративные строки-превью пустого состояния: значок строки из `emptyPreviewIcons`, каждая вторая сдвинута. */
101
+ protected readonly emptyPreviewRows: Signal<readonly IRtThreadList.PreviewRow[]>;
99
102
  protected readonly searchControl: FormControl<string>;
100
103
  protected readonly rowTemplate: Signal<RtThreadListRowDirective<TRow> | undefined>;
101
104
  protected readonly rowActionsTemplate: Signal<RtThreadListRowActionsDirective<TRow> | undefined>;
@@ -106,6 +109,8 @@ declare class RtThreadListComponent<TRow extends IRtThreadList.Row> implements O
106
109
  /** Пусто — берётся переведённая подпись по умолчанию */
107
110
  readonly searchPlaceholder: InputSignal<string>;
108
111
  readonly emptyText: InputSignal<string>;
112
+ /** Значки декоративных строк-превью пустого состояния, по строке на значок */
113
+ readonly emptyPreviewIcons: InputSignal<readonly IRtIcon.Name[]>;
109
114
  readonly loading: InputSignalWithTransform<boolean, boolean | string>;
110
115
  readonly fetching: InputSignalWithTransform<boolean, boolean | string>;
111
116
  readonly hasMore: InputSignalWithTransform<boolean, boolean | string>;
@@ -118,7 +123,7 @@ declare class RtThreadListComponent<TRow extends IRtThreadList.Row> implements O
118
123
  protected onSelect(id: IRtThreadList.TRowId, event: MouseEvent): void;
119
124
  protected onLoadMore(): void;
120
125
  static ɵfac: i0.ɵɵFactoryDeclaration<RtThreadListComponent<any>, never>;
121
- static ɵcmp: i0.ɵɵComponentDeclaration<RtThreadListComponent<any>, "rt-thread-list", never, { "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "hasMore": { "alias": "hasMore"; "required": false; "isSignal": true; }; "filtersActive": { "alias": "filtersActive"; "required": false; "isSignal": true; }; }, { "selectRow": "selectRow"; "openInNewTab": "openInNewTab"; "searchChange": "searchChange"; "loadMore": "loadMore"; }, ["rowTemplate", "rowActionsTemplate", "filtersTemplate", "searchTemplate"], never, true, [{ directive: typeof i1.RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
126
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtThreadListComponent<any>, "rt-thread-list", never, { "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "emptyPreviewIcons": { "alias": "emptyPreviewIcons"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "hasMore": { "alias": "hasMore"; "required": false; "isSignal": true; }; "filtersActive": { "alias": "filtersActive"; "required": false; "isSignal": true; }; }, { "selectRow": "selectRow"; "openInNewTab": "openInNewTab"; "searchChange": "searchChange"; "loadMore": "loadMore"; }, ["rowTemplate", "rowActionsTemplate", "filtersTemplate", "searchTemplate"], never, true, [{ directive: typeof i1.RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
122
127
  }
123
128
 
124
129
  export { IRtThreadList, RtThreadListComponent, RtThreadListFiltersDirective, RtThreadListRowActionsDirective, RtThreadListRowDirective, RtThreadListSearchDirective };
Binary file