@rt-tools/ui-kit-v2 0.34.4 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/rt-tools-ui-kit-v2-ai-prompt-input.mjs +574 -0
- package/fesm2022/rt-tools-ui-kit-v2-ai-prompt-input.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +76 -10
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs +18 -9
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +66 -4
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +128 -20
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs +163 -0
- package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2.mjs +2 -0
- package/package.json +9 -1
- package/src/lib/components/ai-prompt-input/CONTEXT.md +60 -0
- package/src/lib/components/ai-prompt-input/rt-ai-prompt-input.component.scss +113 -0
- package/src/lib/components/aside/footer/rt-aside-footer.component.scss +3 -1
- package/src/lib/components/aside/unsaved-dialog/rt-aside-unsaved-dialog.component.scss +10 -3
- package/src/lib/components/markdown-text/rt-markdown-text.component.scss +3 -0
- package/src/lib/components/thread-list/rt-thread-list.component.scss +19 -11
- package/src/lib/components/usage-ring/CONTEXT.md +33 -0
- package/src/lib/components/usage-ring/rt-usage-ring.component.scss +64 -0
- package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +1 -1
- package/src/rich-editor/lib/components/ai-chat/answer/rt-ai-chat-answer.component.scss +1 -0
- package/src/rich-editor/lib/components/ai-chat/rt-ai-chat.component.scss +6 -0
- package/types/rt-tools-ui-kit-v2-ai-prompt-input.d.ts +193 -0
- package/types/rt-tools-ui-kit-v2-aside.d.ts +17 -7
- package/types/rt-tools-ui-kit-v2-button.d.ts +6 -1
- package/types/rt-tools-ui-kit-v2-core.d.ts +22 -0
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +49 -3
- package/types/rt-tools-ui-kit-v2-usage-ring.d.ts +47 -0
- package/types/rt-tools-ui-kit-v2.d.ts +2 -0
|
@@ -23,6 +23,17 @@ export declare namespace IButton {
|
|
|
23
23
|
* невидимы, но держат ширину кнопки, а спиннер стоит по центру.
|
|
24
24
|
*/
|
|
25
25
|
type LoadingLabel = 'keep' | 'hide';
|
|
26
|
+
/**
|
|
27
|
+
* Вид, который кнопке задаёт место, где она стоит, — например слот подвала панели. Названное
|
|
28
|
+
* здесь сильнее входов кнопки, неназванное берётся из входов. `icon: null` снимает значок,
|
|
29
|
+
* `label` подменяет подпись.
|
|
30
|
+
*/
|
|
31
|
+
interface PlaceLook {
|
|
32
|
+
readonly theme?: Theme;
|
|
33
|
+
readonly appearance?: Appearance;
|
|
34
|
+
readonly icon?: null;
|
|
35
|
+
readonly label?: string;
|
|
36
|
+
}
|
|
26
37
|
}
|
|
27
38
|
/** Вид колонки: решает, чем рисуется значение ячейки. */
|
|
28
39
|
export declare enum ERtDataTableColumnType {
|
|
@@ -476,12 +487,16 @@ export declare const RT_KIT_LABELS_EN: {
|
|
|
476
487
|
readonly aiLike: "Good answer";
|
|
477
488
|
readonly aiNewThread: "New conversation";
|
|
478
489
|
readonly aiNoThreads: "No conversations yet";
|
|
490
|
+
readonly aiPromptEffortAria: "Effort";
|
|
491
|
+
readonly aiPromptModeAria: "Mode";
|
|
492
|
+
readonly aiPromptModelAria: "Model";
|
|
479
493
|
readonly aiReference: "Reference";
|
|
480
494
|
readonly aiRetry: "Ask again";
|
|
481
495
|
readonly aiSearchThreads: "Search conversations";
|
|
482
496
|
readonly aiShowSteps: "Show steps";
|
|
483
497
|
readonly aiThreads: "Conversations";
|
|
484
498
|
readonly aiTitle: "Assistant";
|
|
499
|
+
readonly aiUsageAria: "Used {{percent}}% of the limit";
|
|
485
500
|
readonly aiYou: "You";
|
|
486
501
|
readonly asideCopyErrorInfo: "Copy error info";
|
|
487
502
|
readonly asideRequestError: "Request Error";
|
|
@@ -1044,6 +1059,8 @@ export declare function rtSearchWords(query: string): string[];
|
|
|
1044
1059
|
export declare function rtSearchMatches(text: string, query: string): boolean;
|
|
1045
1060
|
/** Порог узкого вида — тот же, что у `$rt-bp-lg` в стилях кита. */
|
|
1046
1061
|
export declare const RT_NARROW_WIDTH: number;
|
|
1062
|
+
/** Порог телефона — тот же, что у `$rt-bp-sm` в стилях кита. */
|
|
1063
|
+
export declare const RT_PHONE_WIDTH: number;
|
|
1047
1064
|
/**
|
|
1048
1065
|
* Узок ли вид. Ширина места страницы решает, когда место объявлено; без него решает окно.
|
|
1049
1066
|
*/
|
|
@@ -1067,6 +1084,11 @@ export declare class BreakpointsService {
|
|
|
1067
1084
|
* `initialValue: false` — на SSR/CSR до первого matchMedia рендерим desktop-вариант.
|
|
1068
1085
|
*/
|
|
1069
1086
|
readonly viewportNarrow: Signal<boolean>;
|
|
1087
|
+
/**
|
|
1088
|
+
* Окно телефона (≤480px). На нём то, что на экране шире стоит в строку, встаёт короче или
|
|
1089
|
+
* столбиком: подпись первой кнопки подвала панели. `initialValue: false` — как у узкого окна.
|
|
1090
|
+
*/
|
|
1091
|
+
readonly phone: Signal<boolean>;
|
|
1070
1092
|
/**
|
|
1071
1093
|
* Узкий вид (≤1080px) — единый порог для компонентов, которые на узком месте подменяют
|
|
1072
1094
|
* развёрнутый контрол на компактный (напр. `rt-filter-control`: сегменты → `rt-select`).
|
|
@@ -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
|
/**
|
|
@@ -816,7 +816,7 @@ interface IThreadRow extends IRtThreadList.Row {
|
|
|
816
816
|
*/
|
|
817
817
|
export declare class RtAiChatComponent {
|
|
818
818
|
#private;
|
|
819
|
-
protected readonly composer: Signal<
|
|
819
|
+
protected readonly composer: Signal<RtAiPromptInputComponent | undefined>;
|
|
820
820
|
protected readonly backButton: Signal<ElementRef<HTMLElement> | undefined>;
|
|
821
821
|
protected readonly feed: Signal<ElementRef<HTMLElement> | undefined>;
|
|
822
822
|
protected readonly t: Signal<TRtKitLabelMap>;
|
|
@@ -827,6 +827,7 @@ export declare class RtAiChatComponent {
|
|
|
827
827
|
protected readonly emptyTitleText: Signal<string>;
|
|
828
828
|
protected readonly emptyDescriptionText: Signal<string>;
|
|
829
829
|
protected readonly disclaimerText: Signal<string>;
|
|
830
|
+
protected readonly disclaimerAbove: Signal<boolean>;
|
|
830
831
|
/** Значение признака одних значков на шапке: только материальный набор, свой — без признака. */
|
|
831
832
|
protected readonly headerIconSign: Signal<IRtIcon.Preset | null>;
|
|
832
833
|
protected readonly hasThreads: Signal<boolean>;
|
|
@@ -853,6 +854,18 @@ export declare class RtAiChatComponent {
|
|
|
853
854
|
readonly placeholder: InputSignal<string>;
|
|
854
855
|
/** Подпись под полем сообщения; `null` — подпись кита, пустая строка — без подписи. */
|
|
855
856
|
readonly disclaimer: InputSignal<string | null>;
|
|
857
|
+
/** Где стоит подпись: под полем, а где места под ним нет — над полем. */
|
|
858
|
+
readonly disclaimerPosition: InputSignal<IRtAiPromptInput.HintPosition>;
|
|
859
|
+
/** Подпись модели в ряду поля. Пусто — кнопки модели нет. */
|
|
860
|
+
readonly model: InputSignal<string>;
|
|
861
|
+
/** Подпись усилия в ряду поля. Пусто — кнопки усилия нет. */
|
|
862
|
+
readonly effort: InputSignal<string>;
|
|
863
|
+
/** Подпись режима в ряду поля. Пусто — кнопки режима нет. */
|
|
864
|
+
readonly mode: InputSignal<string>;
|
|
865
|
+
/** Потраченная доля лимита в процентах. `null` — кольца расхода нет. */
|
|
866
|
+
readonly usage: InputSignal<number | null>;
|
|
867
|
+
/** Подсказка кольца расхода: доля и дата сброса словами приложения. */
|
|
868
|
+
readonly usageHint: InputSignal<string>;
|
|
856
869
|
/** Ответ пишется: поле сообщения в режиме остановки, подсказки и новая беседа выключены. */
|
|
857
870
|
readonly sending: InputSignalWithTransform<boolean, BooleanInput>;
|
|
858
871
|
/** Беседа загружается: крутилка, пока сообщений нет. */
|
|
@@ -899,11 +912,13 @@ export declare class RtAiChatComponent {
|
|
|
899
912
|
readonly searchThreads: OutputEmitterRef<string>;
|
|
900
913
|
readonly loadMoreThreads: OutputEmitterRef<void>;
|
|
901
914
|
readonly feedbackChange: OutputEmitterRef<IRtAiChat.FeedbackChange>;
|
|
915
|
+
/** Нажата кнопка модели, усилия или режима в ряду поля: что она открывает, решает приложение. */
|
|
916
|
+
readonly controlPicked: OutputEmitterRef<IRtAiPromptInput.Control>;
|
|
902
917
|
constructor();
|
|
903
918
|
/** Фокус в поле сообщения после отрисовки: приложению — после своих действий вне панели. */
|
|
904
919
|
focusComposer(): void;
|
|
905
920
|
protected onFeedScroll(): void;
|
|
906
|
-
protected onSubmitted(value:
|
|
921
|
+
protected onSubmitted(value: IRtAiPromptInput.SubmitPayload): void;
|
|
907
922
|
protected onSuggestion(text: string): void;
|
|
908
923
|
protected onToggleRun(messageId: string, open: boolean): void;
|
|
909
924
|
protected onFeedback(message: IRtAiChat.Message, feedback: Exclude<IRtAiChat.Feedback, null>): void;
|
|
@@ -956,6 +971,36 @@ export declare class RtAiChatComponent {
|
|
|
956
971
|
"required": false;
|
|
957
972
|
"isSignal": true;
|
|
958
973
|
};
|
|
974
|
+
"disclaimerPosition": {
|
|
975
|
+
"alias": "disclaimerPosition";
|
|
976
|
+
"required": false;
|
|
977
|
+
"isSignal": true;
|
|
978
|
+
};
|
|
979
|
+
"model": {
|
|
980
|
+
"alias": "model";
|
|
981
|
+
"required": false;
|
|
982
|
+
"isSignal": true;
|
|
983
|
+
};
|
|
984
|
+
"effort": {
|
|
985
|
+
"alias": "effort";
|
|
986
|
+
"required": false;
|
|
987
|
+
"isSignal": true;
|
|
988
|
+
};
|
|
989
|
+
"mode": {
|
|
990
|
+
"alias": "mode";
|
|
991
|
+
"required": false;
|
|
992
|
+
"isSignal": true;
|
|
993
|
+
};
|
|
994
|
+
"usage": {
|
|
995
|
+
"alias": "usage";
|
|
996
|
+
"required": false;
|
|
997
|
+
"isSignal": true;
|
|
998
|
+
};
|
|
999
|
+
"usageHint": {
|
|
1000
|
+
"alias": "usageHint";
|
|
1001
|
+
"required": false;
|
|
1002
|
+
"isSignal": true;
|
|
1003
|
+
};
|
|
959
1004
|
"sending": {
|
|
960
1005
|
"alias": "sending";
|
|
961
1006
|
"required": false;
|
|
@@ -1055,6 +1100,7 @@ export declare class RtAiChatComponent {
|
|
|
1055
1100
|
"searchThreads": "searchThreads";
|
|
1056
1101
|
"loadMoreThreads": "loadMoreThreads";
|
|
1057
1102
|
"feedbackChange": "feedbackChange";
|
|
1103
|
+
"controlPicked": "controlPicked";
|
|
1058
1104
|
}, ["extraTemplate"], never, true, never>;
|
|
1059
1105
|
}
|
|
1060
1106
|
/**
|
|
@@ -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";
|