@rt-tools/ui-kit-v2 0.34.5 → 0.35.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.
Files changed (76) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-ai-prompt-input.mjs +574 -0
  2. package/fesm2022/rt-tools-ui-kit-v2-ai-prompt-input.mjs.map +1 -0
  3. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +2 -1
  4. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +2 -1
  6. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +62 -3
  8. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +4 -2
  10. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +2 -1
  12. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +4 -2
  14. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +2 -1
  16. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +2 -1
  18. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +2 -1
  20. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +2 -1
  22. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +2 -1
  24. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
  25. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +2 -1
  26. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
  27. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +2 -2
  28. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -1
  29. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +4 -2
  30. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
  31. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +148 -24
  32. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  33. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +2 -1
  34. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  35. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +4 -2
  36. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  37. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +2 -1
  38. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
  39. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2 -1
  40. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  41. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +2 -1
  42. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  43. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +2 -1
  44. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
  45. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +52 -5
  46. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  47. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +2 -1
  48. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
  49. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +37 -0
  50. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
  51. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +2 -1
  52. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
  53. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +2 -1
  54. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
  55. package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs +164 -0
  56. package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs.map +1 -0
  57. package/fesm2022/rt-tools-ui-kit-v2.mjs +2 -0
  58. package/package.json +9 -1
  59. package/src/lib/components/ai-prompt-input/CONTEXT.md +60 -0
  60. package/src/lib/components/ai-prompt-input/rt-ai-prompt-input.component.scss +113 -0
  61. package/src/lib/components/markdown-text/rt-markdown-text.component.scss +3 -0
  62. package/src/lib/components/thread-list/rt-thread-list.component.scss +26 -11
  63. package/src/lib/components/tooltip/CONTEXT.md +4 -0
  64. package/src/lib/components/usage-ring/CONTEXT.md +33 -0
  65. package/src/lib/components/usage-ring/rt-usage-ring.component.scss +64 -0
  66. package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +1 -1
  67. package/src/rich-editor/lib/components/ai-chat/answer/rt-ai-chat-answer.component.scss +1 -0
  68. package/src/rich-editor/lib/components/ai-chat/rt-ai-chat.component.scss +6 -0
  69. package/src/rich-editor/lib/components/chat/rt-chat.component.scss +25 -0
  70. package/types/rt-tools-ui-kit-v2-ai-prompt-input.d.ts +193 -0
  71. package/types/rt-tools-ui-kit-v2-core.d.ts +4 -0
  72. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +56 -3
  73. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +7 -1
  74. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +12 -0
  75. package/types/rt-tools-ui-kit-v2-usage-ring.d.ts +47 -0
  76. package/types/rt-tools-ui-kit-v2.d.ts +2 -0
@@ -1,6 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import { AfterViewInit, ElementRef, InputSignal, InputSignalWithTransform, ModelSignal, OnDestroy, OutputEmitterRef, PipeTransform, Signal, TemplateRef, WritableSignal } from "@angular/core";
3
- import { IQuillDelta, IRtAiRunStatus, IRtIcon, IRtServiceLogo, IRtSideMenu, IRtThreadList, IRtTimeline, RtFormControlBase, TRtKitLabelMap } from "@rt-tools/ui-kit-v2";
3
+ import { IQuillDelta, IRtAiPromptInput, IRtAiRunStatus, IRtIcon, IRtServiceLogo, IRtSideMenu, IRtThreadList, IRtTimeline, RtAiPromptInputComponent, RtFormControlBase, TRtKitLabelMap } from "@rt-tools/ui-kit-v2";
4
4
  import { BooleanInput, NumberInput } from "@angular/cdk/coercion";
5
5
  import { FormControl, FormGroup } from "@angular/forms";
6
6
  /**
@@ -450,6 +450,8 @@ export declare class RtChatComponent {
450
450
  * размера `xs`. Шапку сам не создаёт — как и `title`, рисуется только в ней.
451
451
  */
452
452
  readonly sign: InputSignal<IRtServiceLogo.Item | null>;
453
+ /** Строка под заголовком шапки: канал и контакт собеседника; пустая не показывается. */
454
+ readonly subtitle: InputSignal<string>;
453
455
  /** Текст, когда треда ещё нет (заявка не создана). */
454
456
  readonly emptyHint: InputSignal<string>;
455
457
  /** Есть ли тред (иначе показываем `emptyHint`). */
@@ -570,6 +572,11 @@ export declare class RtChatComponent {
570
572
  "required": false;
571
573
  "isSignal": true;
572
574
  };
575
+ "subtitle": {
576
+ "alias": "subtitle";
577
+ "required": false;
578
+ "isSignal": true;
579
+ };
573
580
  "emptyHint": {
574
581
  "alias": "emptyHint";
575
582
  "required": false;
@@ -816,7 +823,7 @@ interface IThreadRow extends IRtThreadList.Row {
816
823
  */
817
824
  export declare class RtAiChatComponent {
818
825
  #private;
819
- protected readonly composer: Signal<RtMessageComposerComponent | undefined>;
826
+ protected readonly composer: Signal<RtAiPromptInputComponent | undefined>;
820
827
  protected readonly backButton: Signal<ElementRef<HTMLElement> | undefined>;
821
828
  protected readonly feed: Signal<ElementRef<HTMLElement> | undefined>;
822
829
  protected readonly t: Signal<TRtKitLabelMap>;
@@ -827,6 +834,7 @@ export declare class RtAiChatComponent {
827
834
  protected readonly emptyTitleText: Signal<string>;
828
835
  protected readonly emptyDescriptionText: Signal<string>;
829
836
  protected readonly disclaimerText: Signal<string>;
837
+ protected readonly disclaimerAbove: Signal<boolean>;
830
838
  /** Значение признака одних значков на шапке: только материальный набор, свой — без признака. */
831
839
  protected readonly headerIconSign: Signal<IRtIcon.Preset | null>;
832
840
  protected readonly hasThreads: Signal<boolean>;
@@ -853,6 +861,18 @@ export declare class RtAiChatComponent {
853
861
  readonly placeholder: InputSignal<string>;
854
862
  /** Подпись под полем сообщения; `null` — подпись кита, пустая строка — без подписи. */
855
863
  readonly disclaimer: InputSignal<string | null>;
864
+ /** Где стоит подпись: под полем, а где места под ним нет — над полем. */
865
+ readonly disclaimerPosition: InputSignal<IRtAiPromptInput.HintPosition>;
866
+ /** Подпись модели в ряду поля. Пусто — кнопки модели нет. */
867
+ readonly model: InputSignal<string>;
868
+ /** Подпись усилия в ряду поля. Пусто — кнопки усилия нет. */
869
+ readonly effort: InputSignal<string>;
870
+ /** Подпись режима в ряду поля. Пусто — кнопки режима нет. */
871
+ readonly mode: InputSignal<string>;
872
+ /** Потраченная доля лимита в процентах. `null` — кольца расхода нет. */
873
+ readonly usage: InputSignal<number | null>;
874
+ /** Подсказка кольца расхода: доля и дата сброса словами приложения. */
875
+ readonly usageHint: InputSignal<string>;
856
876
  /** Ответ пишется: поле сообщения в режиме остановки, подсказки и новая беседа выключены. */
857
877
  readonly sending: InputSignalWithTransform<boolean, BooleanInput>;
858
878
  /** Беседа загружается: крутилка, пока сообщений нет. */
@@ -899,11 +919,13 @@ export declare class RtAiChatComponent {
899
919
  readonly searchThreads: OutputEmitterRef<string>;
900
920
  readonly loadMoreThreads: OutputEmitterRef<void>;
901
921
  readonly feedbackChange: OutputEmitterRef<IRtAiChat.FeedbackChange>;
922
+ /** Нажата кнопка модели, усилия или режима в ряду поля: что она открывает, решает приложение. */
923
+ readonly controlPicked: OutputEmitterRef<IRtAiPromptInput.Control>;
902
924
  constructor();
903
925
  /** Фокус в поле сообщения после отрисовки: приложению — после своих действий вне панели. */
904
926
  focusComposer(): void;
905
927
  protected onFeedScroll(): void;
906
- protected onSubmitted(value: IRtMessageComposer.SubmitPayload): void;
928
+ protected onSubmitted(value: IRtAiPromptInput.SubmitPayload): void;
907
929
  protected onSuggestion(text: string): void;
908
930
  protected onToggleRun(messageId: string, open: boolean): void;
909
931
  protected onFeedback(message: IRtAiChat.Message, feedback: Exclude<IRtAiChat.Feedback, null>): void;
@@ -956,6 +978,36 @@ export declare class RtAiChatComponent {
956
978
  "required": false;
957
979
  "isSignal": true;
958
980
  };
981
+ "disclaimerPosition": {
982
+ "alias": "disclaimerPosition";
983
+ "required": false;
984
+ "isSignal": true;
985
+ };
986
+ "model": {
987
+ "alias": "model";
988
+ "required": false;
989
+ "isSignal": true;
990
+ };
991
+ "effort": {
992
+ "alias": "effort";
993
+ "required": false;
994
+ "isSignal": true;
995
+ };
996
+ "mode": {
997
+ "alias": "mode";
998
+ "required": false;
999
+ "isSignal": true;
1000
+ };
1001
+ "usage": {
1002
+ "alias": "usage";
1003
+ "required": false;
1004
+ "isSignal": true;
1005
+ };
1006
+ "usageHint": {
1007
+ "alias": "usageHint";
1008
+ "required": false;
1009
+ "isSignal": true;
1010
+ };
959
1011
  "sending": {
960
1012
  "alias": "sending";
961
1013
  "required": false;
@@ -1055,6 +1107,7 @@ export declare class RtAiChatComponent {
1055
1107
  "searchThreads": "searchThreads";
1056
1108
  "loadMoreThreads": "loadMoreThreads";
1057
1109
  "feedbackChange": "feedbackChange";
1110
+ "controlPicked": "controlPicked";
1058
1111
  }, ["extraTemplate"], never, true, never>;
1059
1112
  }
1060
1113
  /**
@@ -90,6 +90,11 @@ export declare class RtThreadListSearchDirective {
90
90
  static ɵfac: i0.ɵɵFactoryDeclaration<RtThreadListSearchDirective, never>;
91
91
  static ɵdir: i0.ɵɵDirectiveDeclaration<RtThreadListSearchDirective, "ng-template[rtThreadListSearch]", never, {}, {}, never, never, true, never>;
92
92
  }
93
+ export declare class RtThreadListTabsDirective {
94
+ readonly templateRef: TemplateRef<unknown>;
95
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtThreadListTabsDirective, never>;
96
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtThreadListTabsDirective, "ng-template[rtThreadListTabs]", never, {}, {}, never, never, true, never>;
97
+ }
93
98
  /**
94
99
  * Презентационный список тредов для воркспейсов:
95
100
  * поиск с дебаунсом, фильтр-поповер и бесконечная прокрутка. Данные и оркестрация
@@ -113,6 +118,7 @@ export declare class RtThreadListComponent<TRow extends IRtThreadList.Row> imple
113
118
  protected readonly rowActionsTemplate: Signal<RtThreadListRowActionsDirective<TRow> | undefined>;
114
119
  protected readonly filtersTemplate: Signal<RtThreadListFiltersDirective | undefined>;
115
120
  protected readonly searchTemplate: Signal<RtThreadListSearchDirective | undefined>;
121
+ protected readonly tabsTemplate: Signal<RtThreadListTabsDirective | undefined>;
116
122
  readonly rows: InputSignal<readonly TRow[]>;
117
123
  readonly activeId: InputSignal<IRtThreadList.TRowId | null>;
118
124
  /** Пусто — берётся переведённая подпись по умолчанию */
@@ -183,7 +189,7 @@ export declare class RtThreadListComponent<TRow extends IRtThreadList.Row> imple
183
189
  "openInNewTab": "openInNewTab";
184
190
  "searchChange": "searchChange";
185
191
  "loadMore": "loadMore";
186
- }, ["rowTemplate", "rowActionsTemplate", "filtersTemplate", "searchTemplate"], never, true, [{
192
+ }, ["rowTemplate", "rowActionsTemplate", "filtersTemplate", "searchTemplate", "tabsTemplate"], never, true, [{
187
193
  directive: typeof i1.RtRadiusDirective;
188
194
  inputs: {
189
195
  "radius": "radius";
@@ -77,6 +77,13 @@ export declare class RtTooltipDirective implements OnDestroy {
77
77
  * показывает.
78
78
  */
79
79
  readonly hideOnClick: InputSignalWithTransform<boolean, unknown>;
80
+ /**
81
+ * Нажатие открывает подсказку сразу, повторное нажатие или нажатие вне хоста закрывает. Для
82
+ * хоста без своего действия — значка или кольца, подсказка которого и есть то, ради чего на него
83
+ * нажимают. У кнопки вход не ставят: её нажатие выполняет действие, и касание подсказку не
84
+ * показывает.
85
+ */
86
+ readonly showOnTap: InputSignalWithTransform<boolean, unknown>;
80
87
  constructor();
81
88
  ngOnDestroy(): void;
82
89
  protected show(): void;
@@ -114,5 +121,10 @@ export declare class RtTooltipDirective implements OnDestroy {
114
121
  "required": false;
115
122
  "isSignal": true;
116
123
  };
124
+ "showOnTap": {
125
+ "alias": "rtTooltipShowOnTap";
126
+ "required": false;
127
+ "isSignal": true;
128
+ };
117
129
  }, {}, never, never, true, never>;
118
130
  }
@@ -0,0 +1,47 @@
1
+ import { NumberInput } from "@angular/cdk/coercion";
2
+ import * as i0 from "@angular/core";
3
+ import { InputSignal, InputSignalWithTransform, Signal } from "@angular/core";
4
+ /** Длина окружности дуги: из неё складывается доля, закрашенная по `stroke-dasharray`. */
5
+ export declare const RT_USAGE_RING_CIRCUMFERENCE: number;
6
+ /** Доля от 0 до 100 в целых процентах; всё вне границ прижимается к краю. */
7
+ export declare function rtUsagePercent(value: number): number;
8
+ /**
9
+ * Кольцо расхода: доля потраченного лимита дугой по кругу, с порога предупреждения оранжевая.
10
+ *
11
+ * Кольцо рисует только долю. Что за лимит и когда он сбрасывается, говорит подсказка `hint`
12
+ * по наведению и фокусу: её текст собирает приложение, кит не знает ни лимита, ни дат.
13
+ */
14
+ export declare class RtUsageRingComponent {
15
+ /** Доля в целых процентах, прижатая к 0…100. */
16
+ protected readonly percent: Signal<number>;
17
+ protected readonly radius: number;
18
+ protected readonly circumference: number;
19
+ /** Незакрашенная часть окружности: дуга рисуется штрихом этой длины со смещением. */
20
+ protected readonly dashOffset: Signal<number>;
21
+ protected readonly mods: Signal<Record<string, boolean>>;
22
+ protected readonly label: Signal<string>;
23
+ /** Потраченная доля лимита в процентах. */
24
+ readonly value: InputSignalWithTransform<number, NumberInput>;
25
+ /** С этой доли кольцо оранжевое. */
26
+ readonly warnAt: InputSignalWithTransform<number, NumberInput>;
27
+ /** Подсказка по наведению и фокусу: доля и дата сброса словами приложения. Пусто — подсказки нет. */
28
+ readonly hint: InputSignal<string>;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtUsageRingComponent, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtUsageRingComponent, "rt-usage-ring", never, {
31
+ "value": {
32
+ "alias": "value";
33
+ "required": false;
34
+ "isSignal": true;
35
+ };
36
+ "warnAt": {
37
+ "alias": "warnAt";
38
+ "required": false;
39
+ "isSignal": true;
40
+ };
41
+ "hint": {
42
+ "alias": "hint";
43
+ "required": false;
44
+ "isSignal": true;
45
+ };
46
+ }, {}, never, never, true, never>;
47
+ }
@@ -1,5 +1,6 @@
1
1
  export * from "@rt-tools/ui-kit-v2/core";
2
2
  export * from "@rt-tools/ui-kit-v2/accordion";
3
+ export * from "@rt-tools/ui-kit-v2/ai-prompt-input";
3
4
  export * from "@rt-tools/ui-kit-v2/ai-run-status";
4
5
  export * from "@rt-tools/ui-kit-v2/action-bar";
5
6
  export * from "@rt-tools/ui-kit-v2/aside-section";
@@ -101,6 +102,7 @@ export * from "@rt-tools/ui-kit-v2/toolbar";
101
102
  export * from "@rt-tools/ui-kit-v2/tooltip";
102
103
  export * from "@rt-tools/ui-kit-v2/tree";
103
104
  export * from "@rt-tools/ui-kit-v2/tree-selector";
105
+ export * from "@rt-tools/ui-kit-v2/usage-ring";
104
106
  export * from "@rt-tools/ui-kit-v2/welcome-dialog";
105
107
  export * from "@rt-tools/ui-kit-v2/workspace-details";
106
108
  export * from "@rt-tools/ui-kit-v2/workspace";