@turingfocus/chat-ui-antd 0.1.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/LICENSE +21 -0
- package/dist/ask-user-interaction.d.ts +23 -0
- package/dist/ask-user-interaction.d.ts.map +1 -0
- package/dist/ask-user-interaction.js +116 -0
- package/dist/ask-user-interaction.js.map +1 -0
- package/dist/chat-composer.d.ts +13 -0
- package/dist/chat-composer.d.ts.map +1 -0
- package/dist/chat-composer.js +58 -0
- package/dist/chat-composer.js.map +1 -0
- package/dist/chat-conversation-view.d.ts +19 -0
- package/dist/chat-conversation-view.d.ts.map +1 -0
- package/dist/chat-conversation-view.js +71 -0
- package/dist/chat-conversation-view.js.map +1 -0
- package/dist/chat-run-status.d.ts +13 -0
- package/dist/chat-run-status.d.ts.map +1 -0
- package/dist/chat-run-status.js +59 -0
- package/dist/chat-run-status.js.map +1 -0
- package/dist/chat-state-view.d.ts +14 -0
- package/dist/chat-state-view.d.ts.map +1 -0
- package/dist/chat-state-view.js +59 -0
- package/dist/chat-state-view.js.map +1 -0
- package/dist/chat-timeline.d.ts +17 -0
- package/dist/chat-timeline.d.ts.map +1 -0
- package/dist/chat-timeline.js +79 -0
- package/dist/chat-timeline.js.map +1 -0
- package/dist/chat-ui-shell.d.ts +22 -0
- package/dist/chat-ui-shell.d.ts.map +1 -0
- package/dist/chat-ui-shell.js +41 -0
- package/dist/chat-ui-shell.js.map +1 -0
- package/dist/conversation-list.d.ts +21 -0
- package/dist/conversation-list.d.ts.map +1 -0
- package/dist/conversation-list.js +75 -0
- package/dist/conversation-list.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/labels.d.ts +4 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +37 -0
- package/dist/labels.js.map +1 -0
- package/dist/markdown-content.d.ts +10 -0
- package/dist/markdown-content.d.ts.map +1 -0
- package/dist/markdown-content.js +20 -0
- package/dist/markdown-content.js.map +1 -0
- package/dist/renderer-registry.d.ts +33 -0
- package/dist/renderer-registry.d.ts.map +1 -0
- package/dist/renderer-registry.js +191 -0
- package/dist/renderer-registry.js.map +1 -0
- package/dist/timeline-tail-tracker.d.ts +21 -0
- package/dist/timeline-tail-tracker.d.ts.map +1 -0
- package/dist/timeline-tail-tracker.js +36 -0
- package/dist/timeline-tail-tracker.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/use-chat-command-coordinator.d.ts +31 -0
- package/dist/use-chat-command-coordinator.d.ts.map +1 -0
- package/dist/use-chat-command-coordinator.js +303 -0
- package/dist/use-chat-command-coordinator.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 A2C-SMCP contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AskUserInteractionAnswer, AskUserInteractionQuestion, AskUserInteractionRequest, AskUserInteractionResult } from "@turingfocus/chat-protocol";
|
|
2
|
+
import type { ChatUiLabels } from "./types.js";
|
|
3
|
+
export interface AskUserInteractionCardProps {
|
|
4
|
+
readonly answerDisabled: boolean;
|
|
5
|
+
readonly labels: ChatUiLabels;
|
|
6
|
+
readonly onAnswer: (answer: AskUserInteractionAnswer) => Promise<boolean>;
|
|
7
|
+
readonly onChatAboutThis?: ((request: AskUserChatAboutThisRequest) => void) | undefined;
|
|
8
|
+
readonly request: AskUserInteractionRequest;
|
|
9
|
+
}
|
|
10
|
+
export interface AskUserChatAboutThisRequest {
|
|
11
|
+
readonly answers: AskUserInteractionAnswer["answers"];
|
|
12
|
+
readonly conversationId: string;
|
|
13
|
+
readonly question: AskUserInteractionQuestion;
|
|
14
|
+
readonly questionId: string;
|
|
15
|
+
readonly requestId: string;
|
|
16
|
+
readonly revision: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const AskUserInteractionCard: ({ answerDisabled, labels, onAnswer, onChatAboutThis, request, }: AskUserInteractionCardProps) => import("react").JSX.Element;
|
|
19
|
+
export interface AskUserInteractionResultViewProps {
|
|
20
|
+
readonly result: AskUserInteractionResult;
|
|
21
|
+
}
|
|
22
|
+
export declare const AskUserInteractionResultView: ({ result, }: AskUserInteractionResultViewProps) => import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=ask-user-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-user-interaction.d.ts","sourceRoot":"","sources":["../src/ask-user-interaction.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,QAAQ,CAAC,eAAe,CAAC,EACvB,CAAC,CAAC,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACtD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAsBD,eAAO,MAAM,sBAAsB,GAAI,iEAMpC,2BAA2B,gCAgK7B,CAAC;AAEF,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;CAC3C;AAED,eAAO,MAAM,4BAA4B,GAAI,aAE1C,iCAAiC,gCA+CnC,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Card, Checkbox, Form, Input, Radio, Space, Typography, } from "antd";
|
|
3
|
+
import { Fragment, useCallback, useState } from "react";
|
|
4
|
+
import { ASK_USER_MAX_TEXT_CHARACTERS } from "@turingfocus/chat-protocol";
|
|
5
|
+
const normalizeAnswers = (values, questions) => {
|
|
6
|
+
const entries = [];
|
|
7
|
+
questions.forEach((question, index) => {
|
|
8
|
+
const value = values?.[index];
|
|
9
|
+
if (Array.isArray(value)) {
|
|
10
|
+
entries.push([question.id, value.map(String)]);
|
|
11
|
+
}
|
|
12
|
+
else if (typeof value === "string" ||
|
|
13
|
+
typeof value === "number" ||
|
|
14
|
+
typeof value === "boolean") {
|
|
15
|
+
entries.push([question.id, String(value)]);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return Object.fromEntries(entries);
|
|
19
|
+
};
|
|
20
|
+
export const AskUserInteractionCard = ({ answerDisabled, labels, onAnswer, onChatAboutThis, request, }) => {
|
|
21
|
+
const [form] = Form.useForm();
|
|
22
|
+
const [submitting, setSubmitting] = useState(false);
|
|
23
|
+
const answer = useCallback(async (action, values = {}) => {
|
|
24
|
+
if (submitting)
|
|
25
|
+
return;
|
|
26
|
+
setSubmitting(true);
|
|
27
|
+
try {
|
|
28
|
+
await onAnswer({
|
|
29
|
+
requestId: request.requestId,
|
|
30
|
+
revision: request.revision,
|
|
31
|
+
action,
|
|
32
|
+
answers: action === "cancel"
|
|
33
|
+
? {}
|
|
34
|
+
: normalizeAnswers(values.answers, request.questions),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
setSubmitting(false);
|
|
39
|
+
}
|
|
40
|
+
}, [
|
|
41
|
+
onAnswer,
|
|
42
|
+
request.questions,
|
|
43
|
+
request.requestId,
|
|
44
|
+
request.revision,
|
|
45
|
+
submitting,
|
|
46
|
+
]);
|
|
47
|
+
const initialAnswers = request.questions.map((question) => question.defaultValue === undefined
|
|
48
|
+
? undefined
|
|
49
|
+
: question.multiple
|
|
50
|
+
? Array.isArray(question.defaultValue)
|
|
51
|
+
? question.defaultValue
|
|
52
|
+
: [question.defaultValue]
|
|
53
|
+
: Array.isArray(question.defaultValue)
|
|
54
|
+
? question.defaultValue[0]
|
|
55
|
+
: question.defaultValue);
|
|
56
|
+
return (_jsxs(Card, { "aria-label": labels.askUserLabel, size: "small", title: request.title, children: [answerDisabled ? (_jsx(Typography.Paragraph, { type: "secondary", children: labels.askUserUnavailable })) : null, _jsxs(Form, { form: form, initialValues: { answers: initialAnswers }, layout: "vertical", onFinish: (values) => answer("submit", values), children: [request.questions.map((question, questionIndex) => (_jsxs(Fragment, { children: [_jsx(Form.Item, { label: _jsxs(Space, { direction: "vertical", size: 0, children: [question.title === undefined ? null : (_jsx(Typography.Text, { strong: true, children: question.title })), _jsx(Typography.Text, { children: question.prompt })] }), name: ["answers", questionIndex], ...(question.description === undefined
|
|
57
|
+
? {}
|
|
58
|
+
: {
|
|
59
|
+
extra: (_jsx(Typography.Text, { type: "secondary", children: question.description })),
|
|
60
|
+
}), ...(question.required
|
|
61
|
+
? {
|
|
62
|
+
rules: [
|
|
63
|
+
{ required: true, message: labels.askUserRequired },
|
|
64
|
+
],
|
|
65
|
+
}
|
|
66
|
+
: {}), children: question.options.length === 0 ? (_jsx(Input.TextArea, { disabled: answerDisabled || submitting, maxLength: ASK_USER_MAX_TEXT_CHARACTERS, placeholder: question.placeholder })) : question.multiple ? (_jsx(Checkbox.Group, { disabled: answerDisabled || submitting, options: question.options.map((option) => ({
|
|
67
|
+
label: option.description === undefined
|
|
68
|
+
? option.label
|
|
69
|
+
: `${option.label} — ${option.description}`,
|
|
70
|
+
value: option.value,
|
|
71
|
+
})) })) : (_jsx(Radio.Group, { disabled: answerDisabled || submitting, options: question.options.map((option) => ({
|
|
72
|
+
label: option.description === undefined
|
|
73
|
+
? option.label
|
|
74
|
+
: `${option.label} — ${option.description}`,
|
|
75
|
+
value: option.value,
|
|
76
|
+
})) })) }), onChatAboutThis === undefined ? null : (_jsx(Button, { disabled: submitting, onClick: () => {
|
|
77
|
+
onChatAboutThis({
|
|
78
|
+
answers: normalizeAnswers(form.getFieldsValue().answers, request.questions),
|
|
79
|
+
conversationId: request.conversationId,
|
|
80
|
+
question,
|
|
81
|
+
questionId: question.id,
|
|
82
|
+
requestId: request.requestId,
|
|
83
|
+
revision: request.revision,
|
|
84
|
+
});
|
|
85
|
+
}, type: "link", children: labels.askUserChatAboutThis }))] }, question.id))), _jsxs(Space, { wrap: true, children: [_jsx(Button, { disabled: answerDisabled, htmlType: "submit", loading: submitting, type: "primary", children: submitting ? labels.askUserSubmitting : labels.askUserSubmit }), _jsx(Button, { disabled: answerDisabled || submitting, onClick: () => answer("cancel"), children: labels.askUserCancel })] })] })] }));
|
|
86
|
+
};
|
|
87
|
+
export const AskUserInteractionResultView = ({ result, }) => {
|
|
88
|
+
const questionLimit = 12;
|
|
89
|
+
const textLimit = 800;
|
|
90
|
+
const answerValueLimit = 50;
|
|
91
|
+
const visibleQuestions = result.questions.slice(0, questionLimit);
|
|
92
|
+
let truncated = visibleQuestions.length < result.questions.length;
|
|
93
|
+
const truncate = (value) => {
|
|
94
|
+
if (value.length <= textLimit)
|
|
95
|
+
return value;
|
|
96
|
+
truncated = true;
|
|
97
|
+
return `${value.slice(0, textLimit)}… [truncated]`;
|
|
98
|
+
};
|
|
99
|
+
const renderedQuestions = visibleQuestions.map((question) => {
|
|
100
|
+
const answer = result.answers?.[question.id];
|
|
101
|
+
let answerText;
|
|
102
|
+
if (typeof answer === "string") {
|
|
103
|
+
answerText = truncate(answer);
|
|
104
|
+
}
|
|
105
|
+
else if (answer !== undefined) {
|
|
106
|
+
const visibleValues = answer.slice(0, answerValueLimit);
|
|
107
|
+
if (visibleValues.length < answer.length)
|
|
108
|
+
truncated = true;
|
|
109
|
+
answerText = truncate(visibleValues.join(", "));
|
|
110
|
+
}
|
|
111
|
+
return (_jsxs("div", { children: [_jsx(Typography.Text, { children: truncate(question.prompt) }), answerText === undefined ? null : (_jsx(Typography.Paragraph, { style: { margin: 0 }, type: "secondary", children: answerText }))] }, question.id));
|
|
112
|
+
});
|
|
113
|
+
const error = result.error === undefined ? undefined : truncate(result.error);
|
|
114
|
+
return (_jsxs(Space, { direction: "vertical", size: "small", children: [_jsxs(Typography.Text, { strong: true, children: ["Ask User \u00B7 ", result.status] }), renderedQuestions, error === undefined ? null : (_jsx(Typography.Text, { type: "danger", children: error })), truncated ? (_jsx(Typography.Text, { type: "secondary", children: "Ask User history truncated" })) : null] }));
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=ask-user-interaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-user-interaction.js","sourceRoot":"","sources":["../src/ask-user-interaction.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
|
+
import type { ChatUiLabelOverrides } from "./types.js";
|
|
3
|
+
export interface ChatComposerProps {
|
|
4
|
+
readonly className?: string | undefined;
|
|
5
|
+
readonly disabled?: boolean | undefined;
|
|
6
|
+
readonly disabledReason?: string | undefined;
|
|
7
|
+
readonly labels?: ChatUiLabelOverrides | undefined;
|
|
8
|
+
readonly onSend: (text: string) => boolean | PromiseLike<boolean>;
|
|
9
|
+
readonly resetKey?: string | undefined;
|
|
10
|
+
readonly style?: CSSProperties | undefined;
|
|
11
|
+
}
|
|
12
|
+
export declare const ChatComposer: ({ className, disabled, disabledReason, labels: labelOverrides, onSend, resetKey, style, }: ChatComposerProps) => import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=chat-composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-composer.d.ts","sourceRoot":"","sources":["../src/chat-composer.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED,eAAO,MAAM,YAAY,GAAI,2FAQ1B,iBAAiB,gCAqFnB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Input, Typography, theme } from "antd";
|
|
3
|
+
import { useEffect, useRef, useState, } from "react";
|
|
4
|
+
import { resolveChatUiLabels } from "./labels.js";
|
|
5
|
+
export const ChatComposer = ({ className, disabled = false, disabledReason, labels: labelOverrides, onSend, resetKey, style, }) => {
|
|
6
|
+
const { token } = theme.useToken();
|
|
7
|
+
const labels = resolveChatUiLabels(labelOverrides);
|
|
8
|
+
const [draft, setDraft] = useState("");
|
|
9
|
+
const [submitting, setSubmitting] = useState(false);
|
|
10
|
+
const submissionId = useRef(0);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
submissionId.current += 1;
|
|
13
|
+
setDraft("");
|
|
14
|
+
setSubmitting(false);
|
|
15
|
+
}, [resetKey]);
|
|
16
|
+
const submit = async () => {
|
|
17
|
+
const text = draft.trim();
|
|
18
|
+
if (disabled || submitting || text.length === 0)
|
|
19
|
+
return;
|
|
20
|
+
const requestId = submissionId.current + 1;
|
|
21
|
+
submissionId.current = requestId;
|
|
22
|
+
setSubmitting(true);
|
|
23
|
+
try {
|
|
24
|
+
const succeeded = await onSend(text);
|
|
25
|
+
if (submissionId.current !== requestId)
|
|
26
|
+
return;
|
|
27
|
+
if (succeeded) {
|
|
28
|
+
setDraft((current) => (current.trim() === text ? "" : current));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// The owner of the command callback owns error presentation. Retain the
|
|
33
|
+
// draft so the user can retry without creating a second error source.
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
if (submissionId.current === requestId)
|
|
37
|
+
setSubmitting(false);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const handlePressEnter = (event) => {
|
|
41
|
+
if (event.shiftKey || event.nativeEvent.isComposing)
|
|
42
|
+
return;
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
void submit();
|
|
45
|
+
};
|
|
46
|
+
return (_jsxs("div", { className: className, style: {
|
|
47
|
+
borderBlockStart: `${token.lineWidth}px ${token.lineType} ${token.colorBorderSecondary}`,
|
|
48
|
+
padding: token.paddingSM,
|
|
49
|
+
...style,
|
|
50
|
+
}, children: [_jsxs("div", { style: { alignItems: "flex-end", display: "flex", gap: token.marginXS }, children: [_jsx(Input.TextArea, { "aria-label": labels.composerLabel, autoSize: { maxRows: 8, minRows: 2 }, disabled: disabled, onChange: (event) => {
|
|
51
|
+
setDraft(event.target.value);
|
|
52
|
+
}, onPressEnter: handlePressEnter, placeholder: disabled
|
|
53
|
+
? (disabledReason ?? labels.textSendingUnavailable)
|
|
54
|
+
: labels.composerPlaceholder, value: draft }), _jsx(Button, { disabled: disabled || draft.trim().length === 0, loading: submitting, onClick: () => {
|
|
55
|
+
void submit();
|
|
56
|
+
}, type: "primary", children: submitting ? labels.sending : labels.send })] }), disabled && disabledReason !== undefined ? (_jsx(Typography.Text, { type: "secondary", children: disabledReason })) : null] }));
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=chat-composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-composer.js","sourceRoot":"","sources":["../src/chat-composer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import { type AskUserChatAboutThisRequest } from "./ask-user-interaction.js";
|
|
3
|
+
import type { ChatRendererFailure, ChatRendererRegistry } from "./renderer-registry.js";
|
|
4
|
+
import type { ChatUiLabelOverrides } from "./types.js";
|
|
5
|
+
import { type ChatUiCommand, type ChatUiCommandFailure } from "./use-chat-command-coordinator.js";
|
|
6
|
+
export type { ChatUiCommand, ChatUiCommandFailure };
|
|
7
|
+
export interface ChatConversationViewProps {
|
|
8
|
+
readonly className?: string | undefined;
|
|
9
|
+
readonly formatTimestamp?: ((timestamp: number) => string) | undefined;
|
|
10
|
+
readonly getDeadlineAt: () => number;
|
|
11
|
+
readonly labels?: ChatUiLabelOverrides | undefined;
|
|
12
|
+
readonly onCommandError?: ((failure: ChatUiCommandFailure) => void) | undefined;
|
|
13
|
+
readonly onChatAboutThis?: ((request: AskUserChatAboutThisRequest) => void) | undefined;
|
|
14
|
+
readonly onRendererError?: ((failure: ChatRendererFailure) => void) | undefined;
|
|
15
|
+
readonly renderers?: ChatRendererRegistry | undefined;
|
|
16
|
+
readonly style?: CSSProperties | undefined;
|
|
17
|
+
}
|
|
18
|
+
export declare const ChatConversationView: ({ className, formatTimestamp, getDeadlineAt, labels: labelOverrides, onChatAboutThis, onCommandError, onRendererError, renderers, style, }: ChatConversationViewProps) => import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=chat-conversation-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-conversation-view.d.ts","sourceRoot":"","sources":["../src/chat-conversation-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,mCAAmC,CAAC;AAE3C,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC;AAEpD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,cAAc,CAAC,EACtB,CAAC,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,eAAe,CAAC,EACvB,CAAC,CAAC,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,eAAe,CAAC,EACvB,CAAC,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAuCD,eAAO,MAAM,oBAAoB,GAAI,4IAUlC,yBAAyB,gCAwH3B,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Alert, theme } from "antd";
|
|
3
|
+
import { useChatClient, useChatSelector } from "@turingfocus/chat-react";
|
|
4
|
+
import { ChatComposer } from "./chat-composer.js";
|
|
5
|
+
import { AskUserInteractionCard, } from "./ask-user-interaction.js";
|
|
6
|
+
import { ChatRunStatus } from "./chat-run-status.js";
|
|
7
|
+
import { ChatStateView } from "./chat-state-view.js";
|
|
8
|
+
import { ChatTimeline } from "./chat-timeline.js";
|
|
9
|
+
import { resolveChatUiLabels } from "./labels.js";
|
|
10
|
+
import { useChatCommandCoordinator, } from "./use-chat-command-coordinator.js";
|
|
11
|
+
const selectChatConversationViewSnapshot = (snapshot) => snapshot === null
|
|
12
|
+
? null
|
|
13
|
+
: {
|
|
14
|
+
capabilities: snapshot.capabilities,
|
|
15
|
+
conversationId: snapshot.conversation.id,
|
|
16
|
+
error: snapshot.error,
|
|
17
|
+
pendingInteraction: snapshot.pendingInteraction,
|
|
18
|
+
run: snapshot.run,
|
|
19
|
+
timeline: snapshot.timeline,
|
|
20
|
+
};
|
|
21
|
+
const equalChatConversationViewSnapshot = (left, right) => left === right ||
|
|
22
|
+
(left !== null &&
|
|
23
|
+
right !== null &&
|
|
24
|
+
left.capabilities === right.capabilities &&
|
|
25
|
+
left.conversationId === right.conversationId &&
|
|
26
|
+
left.error === right.error &&
|
|
27
|
+
left.pendingInteraction === right.pendingInteraction &&
|
|
28
|
+
left.run === right.run &&
|
|
29
|
+
left.timeline === right.timeline);
|
|
30
|
+
export const ChatConversationView = ({ className, formatTimestamp, getDeadlineAt, labels: labelOverrides, onChatAboutThis, onCommandError, onRendererError, renderers, style, }) => {
|
|
31
|
+
const { token } = theme.useToken();
|
|
32
|
+
const labels = resolveChatUiLabels(labelOverrides);
|
|
33
|
+
const client = useChatClient();
|
|
34
|
+
const snapshot = useChatSelector(selectChatConversationViewSnapshot, equalChatConversationViewSnapshot);
|
|
35
|
+
const { answerInteraction, dismissFailure, interrupt, sendText, viewResetKey, visibleCommandFailures, visibleSnapshotError, } = useChatCommandCoordinator({
|
|
36
|
+
canAnswerInteraction: snapshot?.capabilities.answerInteraction === true,
|
|
37
|
+
canInterrupt: snapshot?.capabilities.interrupt ?? false,
|
|
38
|
+
client,
|
|
39
|
+
conversationId: snapshot?.conversationId ?? null,
|
|
40
|
+
getDeadlineAt,
|
|
41
|
+
interactionRequest: snapshot?.pendingInteraction === undefined
|
|
42
|
+
? undefined
|
|
43
|
+
: {
|
|
44
|
+
requestId: snapshot.pendingInteraction.requestId,
|
|
45
|
+
revision: snapshot.pendingInteraction.revision,
|
|
46
|
+
},
|
|
47
|
+
onCommandError,
|
|
48
|
+
run: snapshot?.run ?? null,
|
|
49
|
+
snapshotError: snapshot?.error,
|
|
50
|
+
});
|
|
51
|
+
if (snapshot === null) {
|
|
52
|
+
return _jsx(ChatStateView, { labels: labels, state: { kind: "loading" } });
|
|
53
|
+
}
|
|
54
|
+
const conversationId = snapshot.conversationId;
|
|
55
|
+
return (_jsxs("section", { className: className, style: {
|
|
56
|
+
display: "flex",
|
|
57
|
+
flexDirection: "column",
|
|
58
|
+
height: "100%",
|
|
59
|
+
minHeight: 0,
|
|
60
|
+
...style,
|
|
61
|
+
}, children: [_jsx(ChatRunStatus, { canInterrupt: snapshot.capabilities.interrupt, labels: labels, onInterrupt: interrupt, run: snapshot.run }, `${viewResetKey}:${snapshot.run?.id ?? "no-run"}`), visibleSnapshotError === undefined ? null : (_jsx(Alert, { message: visibleSnapshotError.message, showIcon: true, style: { margin: token.marginXS }, type: "error" })), visibleCommandFailures.map((failure) => (_jsx(Alert, { closable: true, message: failure.error.message, onClose: () => {
|
|
62
|
+
dismissFailure(failure.command);
|
|
63
|
+
}, showIcon: true, style: { margin: token.marginXS }, type: "error" }, failure.command))), _jsx("div", { style: { flex: 1, minHeight: 0 }, children: _jsx(ChatTimeline, { conversationId: conversationId, formatTimestamp: formatTimestamp, items: snapshot.timeline, labels: labels, onRendererError: onRendererError, renderers: renderers }, viewResetKey) }), snapshot.pendingInteraction === undefined ? null : (_jsx("div", { style: { padding: token.paddingXS }, children: _jsx(AskUserInteractionCard, { answerDisabled: snapshot.capabilities.answerInteraction !== true, labels: labels, onAnswer: answerInteraction, onChatAboutThis: onChatAboutThis, request: snapshot.pendingInteraction }, JSON.stringify([
|
|
64
|
+
conversationId,
|
|
65
|
+
snapshot.pendingInteraction.requestId,
|
|
66
|
+
snapshot.pendingInteraction.revision,
|
|
67
|
+
])) })), _jsx(ChatComposer, { disabled: !snapshot.capabilities.sendText, disabledReason: snapshot.capabilities.sendText
|
|
68
|
+
? undefined
|
|
69
|
+
: labels.textSendingUnavailable, labels: labels, onSend: sendText, resetKey: viewResetKey }, viewResetKey)] }));
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=chat-conversation-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-conversation-view.js","sourceRoot":"","sources":["../src/chat-conversation-view.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
|
+
import type { Run } from "@turingfocus/chat-protocol";
|
|
3
|
+
import type { ChatUiLabelOverrides } from "./types.js";
|
|
4
|
+
export interface ChatRunStatusProps {
|
|
5
|
+
readonly canInterrupt: boolean;
|
|
6
|
+
readonly className?: string | undefined;
|
|
7
|
+
readonly labels?: ChatUiLabelOverrides | undefined;
|
|
8
|
+
readonly onInterrupt: () => boolean | PromiseLike<boolean>;
|
|
9
|
+
readonly run: Run | null;
|
|
10
|
+
readonly style?: CSSProperties | undefined;
|
|
11
|
+
}
|
|
12
|
+
export declare const ChatRunStatus: ({ canInterrupt, className, labels: labelOverrides, onInterrupt, run, style, }: ChatRunStatusProps) => import("react").JSX.Element | null;
|
|
13
|
+
//# sourceMappingURL=chat-run-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-run-status.d.ts","sourceRoot":"","sources":["../src/chat-run-status.tsx"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAExE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAGtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED,eAAO,MAAM,aAAa,GAAI,+EAO3B,kBAAkB,uCAuFpB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Alert, Button, Tag, Typography, theme } from "antd";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import { resolveChatUiLabels } from "./labels.js";
|
|
5
|
+
export const ChatRunStatus = ({ canInterrupt, className, labels: labelOverrides, onInterrupt, run, style, }) => {
|
|
6
|
+
const { token } = theme.useToken();
|
|
7
|
+
const labels = resolveChatUiLabels(labelOverrides);
|
|
8
|
+
const [interrupting, setInterrupting] = useState(false);
|
|
9
|
+
const interruptRequestId = useRef(0);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
interruptRequestId.current += 1;
|
|
12
|
+
setInterrupting(false);
|
|
13
|
+
}, [canInterrupt, run]);
|
|
14
|
+
if (run === null)
|
|
15
|
+
return null;
|
|
16
|
+
const statusColor = run.status === "succeeded"
|
|
17
|
+
? "success"
|
|
18
|
+
: run.status === "failed"
|
|
19
|
+
? "error"
|
|
20
|
+
: run.status === "running"
|
|
21
|
+
? "processing"
|
|
22
|
+
: "default";
|
|
23
|
+
const interruptAvailable = run.status === "running" && run.canInterrupt && canInterrupt;
|
|
24
|
+
const interrupt = async () => {
|
|
25
|
+
if (!interruptAvailable || interrupting)
|
|
26
|
+
return;
|
|
27
|
+
const requestId = interruptRequestId.current + 1;
|
|
28
|
+
interruptRequestId.current = requestId;
|
|
29
|
+
setInterrupting(true);
|
|
30
|
+
try {
|
|
31
|
+
await onInterrupt();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// The command owner renders failures. This component owns pending state
|
|
35
|
+
// only, preventing duplicate alerts in composed views.
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
if (interruptRequestId.current === requestId)
|
|
39
|
+
setInterrupting(false);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return (_jsxs("div", { className: className, style: {
|
|
43
|
+
borderBlockEnd: `${token.lineWidth}px ${token.lineType} ${token.colorBorderSecondary}`,
|
|
44
|
+
padding: `${token.paddingXS}px ${token.paddingSM}px`,
|
|
45
|
+
...style,
|
|
46
|
+
}, children: [_jsxs("div", { style: {
|
|
47
|
+
alignItems: "center",
|
|
48
|
+
display: "flex",
|
|
49
|
+
gap: token.marginXS,
|
|
50
|
+
justifyContent: "space-between",
|
|
51
|
+
}, children: [_jsxs(Typography.Text, { children: [labels.runStatusLabel, ": ", _jsx(Tag, { color: statusColor, children: run.status })] }), run.status === "running" ? (_jsx(Button, { danger: true, disabled: !interruptAvailable, loading: interrupting, onClick: () => {
|
|
52
|
+
void interrupt();
|
|
53
|
+
}, size: "small", children: interrupting
|
|
54
|
+
? labels.interrupting
|
|
55
|
+
: interruptAvailable
|
|
56
|
+
? labels.interrupt
|
|
57
|
+
: labels.interruptUnavailable })) : null] }), run.error === undefined ? null : (_jsx(Alert, { message: run.error.message, showIcon: true, style: { marginTop: token.marginXS }, type: "error" }))] }));
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=chat-run-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-run-status.js","sourceRoot":"","sources":["../src/chat-run-status.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import type { ChatContentState, ChatUiLabelOverrides } from "./types.js";
|
|
3
|
+
type NonReadyChatContentState = Exclude<ChatContentState, {
|
|
4
|
+
readonly kind: "ready";
|
|
5
|
+
}>;
|
|
6
|
+
export interface ChatStateViewProps {
|
|
7
|
+
readonly className?: string | undefined;
|
|
8
|
+
readonly labels?: ChatUiLabelOverrides | undefined;
|
|
9
|
+
readonly state: NonReadyChatContentState;
|
|
10
|
+
readonly style?: CSSProperties | undefined;
|
|
11
|
+
}
|
|
12
|
+
export declare const ChatStateView: ({ className, labels: labelOverrides, state, style, }: ChatStateViewProps) => import("react").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=chat-state-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-state-view.d.ts","sourceRoot":"","sources":["../src/chat-state-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAEpB,KAAK,wBAAwB,GAAG,OAAO,CACrC,gBAAgB,EAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAC3B,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAuDD,eAAO,MAAM,aAAa,GAAI,sDAK3B,kBAAkB,gCA8DpB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Empty, Result, Spin, Typography } from "antd";
|
|
3
|
+
import { resolveChatUiLabels } from "./labels.js";
|
|
4
|
+
const getStateCopy = (state, labels) => {
|
|
5
|
+
switch (state.kind) {
|
|
6
|
+
case "loading":
|
|
7
|
+
return {
|
|
8
|
+
title: state.title ?? labels.loadingTitle,
|
|
9
|
+
description: state.description ?? labels.loadingDescription,
|
|
10
|
+
};
|
|
11
|
+
case "empty":
|
|
12
|
+
return {
|
|
13
|
+
title: state.title ?? labels.emptyTitle,
|
|
14
|
+
description: state.description ?? labels.emptyDescription,
|
|
15
|
+
};
|
|
16
|
+
case "error":
|
|
17
|
+
return {
|
|
18
|
+
title: state.title ?? labels.errorTitle,
|
|
19
|
+
description: state.description ?? labels.errorDescription,
|
|
20
|
+
};
|
|
21
|
+
case "disconnected":
|
|
22
|
+
return {
|
|
23
|
+
title: state.title ?? labels.disconnectedTitle,
|
|
24
|
+
description: state.description ?? labels.disconnectedDescription,
|
|
25
|
+
};
|
|
26
|
+
case "capability-unavailable":
|
|
27
|
+
return {
|
|
28
|
+
title: state.title ?? labels.capabilityUnavailableTitle,
|
|
29
|
+
description: state.description ??
|
|
30
|
+
(state.capability === undefined
|
|
31
|
+
? labels.capabilityUnavailableDescription
|
|
32
|
+
: `${state.capability} is not available in the current session.`),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const defaultStyle = {
|
|
37
|
+
alignItems: "center",
|
|
38
|
+
display: "flex",
|
|
39
|
+
flexDirection: "column",
|
|
40
|
+
height: "100%",
|
|
41
|
+
justifyContent: "center",
|
|
42
|
+
minHeight: 240,
|
|
43
|
+
padding: 24,
|
|
44
|
+
textAlign: "center",
|
|
45
|
+
};
|
|
46
|
+
export const ChatStateView = ({ className, labels: labelOverrides, state, style, }) => {
|
|
47
|
+
const labels = resolveChatUiLabels(labelOverrides);
|
|
48
|
+
const copy = getStateCopy(state, labels);
|
|
49
|
+
if (state.kind === "loading") {
|
|
50
|
+
return (_jsxs("div", { "aria-live": "polite", className: className, role: "status", style: { ...defaultStyle, ...style }, children: [_jsx(Spin, { size: "large", tip: copy.title, children: _jsx("div", { style: { minHeight: 80, minWidth: 240 } }) }), _jsx(Typography.Text, { type: "secondary", style: { marginTop: 16 }, children: copy.description })] }));
|
|
51
|
+
}
|
|
52
|
+
if (state.kind === "empty") {
|
|
53
|
+
return (_jsx("div", { "aria-live": "polite", className: className, role: "status", style: { ...defaultStyle, ...style }, children: _jsx(Empty, { description: copy.title, children: _jsx(Typography.Text, { type: "secondary", children: copy.description }) }) }));
|
|
54
|
+
}
|
|
55
|
+
const canRetry = (state.kind === "error" || state.kind === "disconnected") &&
|
|
56
|
+
state.onRetry !== undefined;
|
|
57
|
+
return (_jsx("div", { "aria-live": "assertive", className: className, role: "alert", style: { ...defaultStyle, ...style }, children: _jsx(Result, { extra: canRetry ? (_jsx(Button, { onClick: state.onRetry, type: "primary", children: labels.retry })) : undefined, status: state.kind === "error" ? "error" : "warning", subTitle: copy.description, title: copy.title }) }));
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=chat-state-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-state-view.js","sourceRoot":"","sources":["../src/chat-state-view.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
|
+
import { type TimelineItem } from "@turingfocus/chat-protocol";
|
|
3
|
+
import { type ChatRendererFailure, type ChatRendererRegistry } from "./renderer-registry.js";
|
|
4
|
+
import type { ChatUiLabelOverrides } from "./types.js";
|
|
5
|
+
export interface ChatTimelineProps {
|
|
6
|
+
readonly "aria-label"?: string | undefined;
|
|
7
|
+
readonly className?: string | undefined;
|
|
8
|
+
readonly conversationId: string;
|
|
9
|
+
readonly formatTimestamp?: ((timestamp: number) => string) | undefined;
|
|
10
|
+
readonly items: readonly TimelineItem[];
|
|
11
|
+
readonly labels?: ChatUiLabelOverrides | undefined;
|
|
12
|
+
readonly onRendererError?: ((failure: ChatRendererFailure) => void) | undefined;
|
|
13
|
+
readonly renderers?: ChatRendererRegistry | undefined;
|
|
14
|
+
readonly style?: CSSProperties | undefined;
|
|
15
|
+
}
|
|
16
|
+
export declare const ChatTimeline: ({ "aria-label": ariaLabel, className, conversationId, formatTimestamp, items, labels: labelOverrides, onRendererError, renderers, style, }: ChatTimelineProps) => import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=chat-timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-timeline.d.ts","sourceRoot":"","sources":["../src/chat-timeline.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAGf,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,eAAe,CAAC,EACvB,CAAC,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED,eAAO,MAAM,YAAY,GAAI,4IAU1B,iBAAiB,gCA6InB,CAAC"}
|