@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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Empty, Typography, theme } from "antd";
|
|
3
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
4
|
+
import { Virtuoso } from "react-virtuoso";
|
|
5
|
+
import { getTimelineItemKey, } from "@turingfocus/chat-protocol";
|
|
6
|
+
import { resolveChatUiLabels } from "./labels.js";
|
|
7
|
+
import { ChatTimelineItem, createChatRendererRegistry, formatChatTimestampUtc, } from "./renderer-registry.js";
|
|
8
|
+
import { advanceTimelineTailState, createTimelineTailState, } from "./timeline-tail-tracker.js";
|
|
9
|
+
const MemoizedTimelineItem = memo(ChatTimelineItem);
|
|
10
|
+
const followNewOutput = (atBottom) => atBottom ? "auto" : false;
|
|
11
|
+
export const ChatTimeline = ({ "aria-label": ariaLabel, className, conversationId, formatTimestamp = formatChatTimestampUtc, items, labels: labelOverrides, onRendererError, renderers, style, }) => {
|
|
12
|
+
const { token } = theme.useToken();
|
|
13
|
+
const labels = resolveChatUiLabels(labelOverrides);
|
|
14
|
+
const registry = useMemo(() => createChatRendererRegistry(renderers), [renderers]);
|
|
15
|
+
const virtuosoRef = useRef(null);
|
|
16
|
+
const atBottomRef = useRef(true);
|
|
17
|
+
const tailStateRef = useRef(null);
|
|
18
|
+
tailStateRef.current ??= createTimelineTailState(conversationId, items);
|
|
19
|
+
const [newItemCount, setNewItemCount] = useState(0);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
const previous = tailStateRef.current;
|
|
22
|
+
const transition = advanceTimelineTailState(previous, conversationId, items);
|
|
23
|
+
if (previous.conversationId !== conversationId) {
|
|
24
|
+
atBottomRef.current = true;
|
|
25
|
+
setNewItemCount(0);
|
|
26
|
+
}
|
|
27
|
+
else if (!atBottomRef.current && transition.addedAfterTail > 0) {
|
|
28
|
+
setNewItemCount((current) => current + transition.addedAfterTail);
|
|
29
|
+
}
|
|
30
|
+
tailStateRef.current = transition.state;
|
|
31
|
+
}, [conversationId, items]);
|
|
32
|
+
const handleAtBottomChange = useCallback((atBottom) => {
|
|
33
|
+
atBottomRef.current = atBottom;
|
|
34
|
+
if (atBottom)
|
|
35
|
+
setNewItemCount(0);
|
|
36
|
+
}, []);
|
|
37
|
+
const jumpToLatest = useCallback(() => {
|
|
38
|
+
if (items.length === 0)
|
|
39
|
+
return;
|
|
40
|
+
virtuosoRef.current?.scrollToIndex({
|
|
41
|
+
align: "end",
|
|
42
|
+
behavior: "smooth",
|
|
43
|
+
index: items.length - 1,
|
|
44
|
+
});
|
|
45
|
+
setNewItemCount(0);
|
|
46
|
+
}, [items.length]);
|
|
47
|
+
const renderItem = useCallback((_index, item) => (_jsx("div", { role: "article", style: { padding: `${token.paddingXXS}px ${token.paddingSM}px` }, children: _jsx(MemoizedTimelineItem, { formatTimestamp: formatTimestamp, item: item, onRendererError: onRendererError, registry: registry }) })), [
|
|
48
|
+
formatTimestamp,
|
|
49
|
+
onRendererError,
|
|
50
|
+
registry,
|
|
51
|
+
token.paddingSM,
|
|
52
|
+
token.paddingXXS,
|
|
53
|
+
]);
|
|
54
|
+
if (items.length === 0) {
|
|
55
|
+
return (_jsx("div", { "aria-label": ariaLabel ?? labels.timelineLabel, className: className, role: "log", style: {
|
|
56
|
+
alignItems: "center",
|
|
57
|
+
display: "flex",
|
|
58
|
+
height: "100%",
|
|
59
|
+
justifyContent: "center",
|
|
60
|
+
minHeight: 240,
|
|
61
|
+
...style,
|
|
62
|
+
}, children: _jsx(Empty, { description: labels.emptyTimeline }) }));
|
|
63
|
+
}
|
|
64
|
+
return (_jsxs("div", { className: className, style: {
|
|
65
|
+
height: "100%",
|
|
66
|
+
minHeight: 240,
|
|
67
|
+
overflow: "hidden",
|
|
68
|
+
position: "relative",
|
|
69
|
+
...style,
|
|
70
|
+
}, children: [_jsx(Virtuoso, { ref: virtuosoRef, "aria-label": ariaLabel ?? labels.timelineLabel, atBottomStateChange: handleAtBottomChange, atBottomThreshold: 150, computeItemKey: (_index, item) => getTimelineItemKey(item), data: items, followOutput: followNewOutput, increaseViewportBy: { bottom: 400, top: 200 }, initialItemCount: Math.min(items.length, 20), initialTopMostItemIndex: Math.max(0, items.length - Math.min(items.length, 20)), itemContent: renderItem, overscan: { main: 300, reverse: 200 }, role: "log", style: { height: "100%" } }, conversationId), newItemCount === 0 ? null : (_jsx(Button, { onClick: jumpToLatest, size: "small", style: {
|
|
71
|
+
bottom: token.marginSM,
|
|
72
|
+
boxShadow: token.boxShadowSecondary,
|
|
73
|
+
left: "50%",
|
|
74
|
+
position: "absolute",
|
|
75
|
+
transform: "translateX(-50%)",
|
|
76
|
+
zIndex: 1,
|
|
77
|
+
}, type: "primary", children: _jsxs(Typography.Text, { style: { color: "inherit" }, children: [newItemCount, " ", labels.newMessages, " \u00B7 ", labels.jumpToLatest] }) }))] }));
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=chat-timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-timeline.js","sourceRoot":"","sources":["../src/chat-timeline.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CSSProperties, ReactNode } from "react";
|
|
2
|
+
import { type ConversationListError } from "./conversation-list.js";
|
|
3
|
+
import type { ChatContentState, ChatConversationListItem, ChatUiLabelOverrides, ChatUiSlotStyles } from "./types.js";
|
|
4
|
+
export interface ChatUiShellProps {
|
|
5
|
+
readonly children?: ReactNode;
|
|
6
|
+
readonly className?: string | undefined;
|
|
7
|
+
readonly contentState: ChatContentState;
|
|
8
|
+
readonly conversationListError?: ConversationListError | undefined;
|
|
9
|
+
readonly conversationListLoading?: boolean | undefined;
|
|
10
|
+
readonly conversations: readonly ChatConversationListItem[];
|
|
11
|
+
readonly formatConversationUpdatedAt?: ((updatedAt: number, item: ChatConversationListItem) => string) | undefined;
|
|
12
|
+
readonly header?: ReactNode;
|
|
13
|
+
readonly labels?: ChatUiLabelOverrides | undefined;
|
|
14
|
+
readonly onConversationSelect: (conversationId: string) => void;
|
|
15
|
+
readonly pendingConversationId?: string | undefined;
|
|
16
|
+
readonly selectedConversationId?: string | undefined;
|
|
17
|
+
readonly sidebarTitle?: ReactNode;
|
|
18
|
+
readonly sidebarWidth?: CSSProperties["width"] | undefined;
|
|
19
|
+
readonly styles?: ChatUiSlotStyles | undefined;
|
|
20
|
+
}
|
|
21
|
+
export declare const ChatUiShell: ({ children, className, contentState, conversationListError, conversationListLoading, conversations, formatConversationUpdatedAt, header, labels: labelOverrides, onConversationSelect, pendingConversationId, selectedConversationId, sidebarTitle, sidebarWidth, styles, }: ChatUiShellProps) => import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=chat-ui-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-ui-shell.d.ts","sourceRoot":"","sources":["../src/chat-ui-shell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACnE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC5D,QAAQ,CAAC,2BAA2B,CAAC,EACnC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,oBAAoB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAChD;AAED,eAAO,MAAM,WAAW,GAAI,6QAgBzB,gBAAgB,gCAsFlB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Typography, theme } from "antd";
|
|
3
|
+
import { ChatConversationList, } from "./conversation-list.js";
|
|
4
|
+
import { resolveChatUiLabels } from "./labels.js";
|
|
5
|
+
import { ChatStateView } from "./chat-state-view.js";
|
|
6
|
+
export const ChatUiShell = ({ children, className, contentState, conversationListError, conversationListLoading, conversations, formatConversationUpdatedAt, header, labels: labelOverrides, onConversationSelect, pendingConversationId, selectedConversationId, sidebarTitle, sidebarWidth = 280, styles, }) => {
|
|
7
|
+
const { token } = theme.useToken();
|
|
8
|
+
const labels = resolveChatUiLabels(labelOverrides);
|
|
9
|
+
return (_jsxs("section", { className: className, style: {
|
|
10
|
+
background: token.colorBgContainer,
|
|
11
|
+
border: `${token.lineWidth}px ${token.lineType} ${token.colorBorderSecondary}`,
|
|
12
|
+
borderRadius: token.borderRadiusLG,
|
|
13
|
+
display: "grid",
|
|
14
|
+
gridTemplateColumns: `minmax(13rem, ${typeof sidebarWidth === "number" ? `${sidebarWidth}px` : sidebarWidth}) minmax(0, 1fr)`,
|
|
15
|
+
height: "100%",
|
|
16
|
+
minHeight: 360,
|
|
17
|
+
minWidth: 0,
|
|
18
|
+
overflow: "hidden",
|
|
19
|
+
...styles?.root,
|
|
20
|
+
}, children: [_jsxs("aside", { "aria-label": labels.conversationListLabel, style: {
|
|
21
|
+
borderInlineEnd: `${token.lineWidth}px ${token.lineType} ${token.colorBorderSecondary}`,
|
|
22
|
+
display: "flex",
|
|
23
|
+
flexDirection: "column",
|
|
24
|
+
minHeight: 0,
|
|
25
|
+
minWidth: 0,
|
|
26
|
+
...styles?.sidebar,
|
|
27
|
+
}, children: [_jsx("header", { style: {
|
|
28
|
+
borderBlockEnd: `${token.lineWidth}px ${token.lineType} ${token.colorBorderSecondary}`,
|
|
29
|
+
padding: token.paddingSM,
|
|
30
|
+
}, children: sidebarTitle ?? (_jsx(Typography.Title, { level: 5, style: { margin: 0 }, children: labels.conversationListLabel })) }), _jsx("div", { style: { flex: 1, minHeight: 0 }, children: _jsx(ChatConversationList, { error: conversationListError, formatUpdatedAt: formatConversationUpdatedAt, items: conversations, labels: labels, loading: conversationListLoading, onSelect: onConversationSelect, pendingConversationId: pendingConversationId, selectedConversationId: selectedConversationId, style: styles?.conversationList }) })] }), _jsxs("main", { style: {
|
|
31
|
+
display: "flex",
|
|
32
|
+
flexDirection: "column",
|
|
33
|
+
minHeight: 0,
|
|
34
|
+
minWidth: 0,
|
|
35
|
+
...styles?.content,
|
|
36
|
+
}, children: [header === undefined ? null : (_jsx("header", { style: {
|
|
37
|
+
borderBlockEnd: `${token.lineWidth}px ${token.lineType} ${token.colorBorderSecondary}`,
|
|
38
|
+
padding: token.paddingSM,
|
|
39
|
+
}, children: header })), _jsx("div", { style: { flex: 1, minHeight: 0 }, children: contentState.kind === "ready" ? (children) : (_jsx(ChatStateView, { labels: labels, state: contentState })) })] })] }));
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=chat-ui-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-ui-shell.js","sourceRoot":"","sources":["../src/chat-ui-shell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import type { ChatConversationListItem, ChatUiLabelOverrides } from "./types.js";
|
|
3
|
+
export interface ConversationListError {
|
|
4
|
+
readonly message: string;
|
|
5
|
+
readonly onRetry?: (() => void) | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface ChatConversationListProps {
|
|
8
|
+
readonly "aria-label"?: string | undefined;
|
|
9
|
+
readonly className?: string | undefined;
|
|
10
|
+
readonly error?: ConversationListError | undefined;
|
|
11
|
+
readonly formatUpdatedAt?: ((updatedAt: number, item: ChatConversationListItem) => string) | undefined;
|
|
12
|
+
readonly items: readonly ChatConversationListItem[];
|
|
13
|
+
readonly labels?: ChatUiLabelOverrides | undefined;
|
|
14
|
+
readonly loading?: boolean | undefined;
|
|
15
|
+
readonly onSelect: (conversationId: string) => void;
|
|
16
|
+
readonly pendingConversationId?: string | undefined;
|
|
17
|
+
readonly selectedConversationId?: string | undefined;
|
|
18
|
+
readonly style?: CSSProperties | undefined;
|
|
19
|
+
}
|
|
20
|
+
export declare const ChatConversationList: ({ "aria-label": ariaLabel, className, error, formatUpdatedAt, items, labels: labelOverrides, loading, onSelect, pendingConversationId, selectedConversationId, style, }: ChatConversationListProps) => import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=conversation-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-list.d.ts","sourceRoot":"","sources":["../src/conversation-list.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,eAAe,CAAC,EACvB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAYD,eAAO,MAAM,oBAAoB,GAAI,yKAYlC,yBAAyB,gCAiL3B,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Alert, Button, Empty, Spin, Typography, theme } from "antd";
|
|
3
|
+
import { Virtuoso } from "react-virtuoso";
|
|
4
|
+
import { resolveChatUiLabels } from "./labels.js";
|
|
5
|
+
const padDatePart = (value) => String(value).padStart(2, "0");
|
|
6
|
+
const defaultFormatUpdatedAt = (updatedAt) => {
|
|
7
|
+
const date = new Date(updatedAt);
|
|
8
|
+
return `${date.getUTCFullYear()}-${padDatePart(date.getUTCMonth() + 1)}-${padDatePart(date.getUTCDate())}`;
|
|
9
|
+
};
|
|
10
|
+
export const ChatConversationList = ({ "aria-label": ariaLabel, className, error, formatUpdatedAt = defaultFormatUpdatedAt, items, labels: labelOverrides, loading = false, onSelect, pendingConversationId, selectedConversationId, style, }) => {
|
|
11
|
+
const { token } = theme.useToken();
|
|
12
|
+
const labels = resolveChatUiLabels(labelOverrides);
|
|
13
|
+
if (error !== undefined) {
|
|
14
|
+
return (_jsx("div", { className: className, style: { padding: token.paddingSM, ...style }, children: _jsx(Alert, { action: error.onRetry === undefined ? undefined : (_jsx(Button, { onClick: error.onRetry, size: "small", children: labels.retry })), message: error.message, role: "alert", showIcon: true, type: "error" }) }));
|
|
15
|
+
}
|
|
16
|
+
if (!loading && items.length === 0) {
|
|
17
|
+
return (_jsx("div", { "aria-label": ariaLabel ?? labels.conversationListLabel, className: className, role: "list", style: {
|
|
18
|
+
alignItems: "center",
|
|
19
|
+
display: "flex",
|
|
20
|
+
height: "100%",
|
|
21
|
+
justifyContent: "center",
|
|
22
|
+
minHeight: 160,
|
|
23
|
+
padding: token.paddingSM,
|
|
24
|
+
...style,
|
|
25
|
+
}, children: _jsx(Empty, { description: labels.noConversations, image: Empty.PRESENTED_IMAGE_SIMPLE }) }));
|
|
26
|
+
}
|
|
27
|
+
return (_jsxs("div", { className: className, style: {
|
|
28
|
+
height: "100%",
|
|
29
|
+
minHeight: 160,
|
|
30
|
+
overflow: "hidden",
|
|
31
|
+
position: "relative",
|
|
32
|
+
...style,
|
|
33
|
+
}, children: [_jsx("div", { "aria-busy": loading, "aria-label": ariaLabel ?? labels.conversationListLabel, role: "list", style: { height: "100%", minHeight: 0 }, children: _jsx(Virtuoso, { computeItemKey: (_index, item) => item.id, data: items, increaseViewportBy: 200, initialItemCount: Math.min(items.length, 20), itemContent: (_index, item) => {
|
|
34
|
+
const selected = item.id === selectedConversationId;
|
|
35
|
+
const pending = item.id === pendingConversationId;
|
|
36
|
+
const updatedAt = item.updatedAt === undefined
|
|
37
|
+
? undefined
|
|
38
|
+
: formatUpdatedAt(item.updatedAt, item);
|
|
39
|
+
return (_jsx("div", { role: "listitem", style: {
|
|
40
|
+
padding: `${token.paddingXXS}px ${token.paddingXS}px`,
|
|
41
|
+
}, children: _jsx(Button, { "aria-current": selected ? "true" : undefined, block: true, disabled: item.disabled === true || loading, loading: pending, onClick: () => {
|
|
42
|
+
onSelect(item.id);
|
|
43
|
+
}, style: {
|
|
44
|
+
background: selected ? token.colorPrimaryBg : undefined,
|
|
45
|
+
height: "auto",
|
|
46
|
+
minHeight: 48,
|
|
47
|
+
padding: `${token.paddingXS}px ${token.paddingSM}px`,
|
|
48
|
+
textAlign: "start",
|
|
49
|
+
}, type: "text", children: _jsxs("span", { style: {
|
|
50
|
+
alignItems: "center",
|
|
51
|
+
display: "flex",
|
|
52
|
+
gap: token.marginXS,
|
|
53
|
+
justifyContent: "space-between",
|
|
54
|
+
minWidth: 0,
|
|
55
|
+
width: "100%",
|
|
56
|
+
}, children: [_jsxs("span", { style: { minWidth: 0 }, children: [_jsx(Typography.Text, { ellipsis: true, strong: selected, style: { display: "block" }, children: item.title }), item.description === undefined ? null : (_jsx(Typography.Text, { ellipsis: true, style: {
|
|
57
|
+
display: "block",
|
|
58
|
+
fontSize: token.fontSizeSM,
|
|
59
|
+
}, type: "secondary", children: item.description }))] }), updatedAt === undefined ? null : (_jsx(Typography.Text, { style: {
|
|
60
|
+
flex: "0 0 auto",
|
|
61
|
+
fontSize: token.fontSizeSM,
|
|
62
|
+
}, type: "secondary", children: updatedAt }))] }) }) }));
|
|
63
|
+
}, overscan: 200, style: { height: "100%" } }) }), loading ? (_jsxs("div", { "aria-live": "polite", role: "status", style: {
|
|
64
|
+
alignItems: "center",
|
|
65
|
+
background: token.colorBgContainer,
|
|
66
|
+
display: "flex",
|
|
67
|
+
flexDirection: "column",
|
|
68
|
+
gap: token.marginXS,
|
|
69
|
+
inset: 0,
|
|
70
|
+
justifyContent: "center",
|
|
71
|
+
position: "absolute",
|
|
72
|
+
zIndex: 1,
|
|
73
|
+
}, children: [_jsx(Spin, { size: "small" }), _jsx(Typography.Text, { type: "secondary", children: labels.loadingTitle })] })) : null] }));
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=conversation-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-list.js","sourceRoot":"","sources":["../src/conversation-list.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { ChatComposer, type ChatComposerProps } from "./chat-composer.js";
|
|
2
|
+
export { AskUserInteractionCard, AskUserInteractionResultView, type AskUserChatAboutThisRequest, type AskUserInteractionCardProps, type AskUserInteractionResultViewProps, } from "./ask-user-interaction.js";
|
|
3
|
+
export { ChatConversationView, type ChatConversationViewProps, type ChatUiCommand, type ChatUiCommandFailure, } from "./chat-conversation-view.js";
|
|
4
|
+
export { ChatConversationList, type ChatConversationListProps, type ConversationListError, } from "./conversation-list.js";
|
|
5
|
+
export { ChatRunStatus, type ChatRunStatusProps } from "./chat-run-status.js";
|
|
6
|
+
export { ChatStateView, type ChatStateViewProps } from "./chat-state-view.js";
|
|
7
|
+
export { ChatTimeline, type ChatTimelineProps } from "./chat-timeline.js";
|
|
8
|
+
export { ChatUiShell, type ChatUiShellProps } from "./chat-ui-shell.js";
|
|
9
|
+
export { defaultChatUiLabels, resolveChatUiLabels } from "./labels.js";
|
|
10
|
+
export { ChatMessageContent, ChatTimelineItem, createChatRendererRegistry, defaultChatRendererRegistry, formatChatTimestampUtc, resolveChatRenderer, type ChatRenderer, type ChatRendererFailure, type ChatRendererKey, type ChatRendererProps, type ChatRendererRegistry, type ChatMessageContentProps, type ChatTimelineItemProps, } from "./renderer-registry.js";
|
|
11
|
+
export { ChatMarkdownContent, type ChatMarkdownContentProps, } from "./markdown-content.js";
|
|
12
|
+
export type { ChatContentState, ChatConversationListItem, ChatUiLabelOverrides, ChatUiLabels, ChatUiSlotStyles, } from "./types.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,GACvC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { ChatComposer } from "./chat-composer.js";
|
|
2
|
+
export { AskUserInteractionCard, AskUserInteractionResultView, } from "./ask-user-interaction.js";
|
|
3
|
+
export { ChatConversationView, } from "./chat-conversation-view.js";
|
|
4
|
+
export { ChatConversationList, } from "./conversation-list.js";
|
|
5
|
+
export { ChatRunStatus } from "./chat-run-status.js";
|
|
6
|
+
export { ChatStateView } from "./chat-state-view.js";
|
|
7
|
+
export { ChatTimeline } from "./chat-timeline.js";
|
|
8
|
+
export { ChatUiShell } from "./chat-ui-shell.js";
|
|
9
|
+
export { defaultChatUiLabels, resolveChatUiLabels } from "./labels.js";
|
|
10
|
+
export { ChatMessageContent, ChatTimelineItem, createChatRendererRegistry, defaultChatRendererRegistry, formatChatTimestampUtc, resolveChatRenderer, } from "./renderer-registry.js";
|
|
11
|
+
export { ChatMarkdownContent, } from "./markdown-content.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAI7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,oBAAoB,GAIrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,GAGrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAA2B,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAA2B,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,GAQpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC"}
|
package/dist/labels.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,eAAO,MAAM,mBAAmB,EAAE,YAqChC,CAAC;AAEH,eAAO,MAAM,mBAAmB,GAC9B,WAAW,oBAAoB,GAAG,SAAS,KAC1C,YAA0D,CAAC"}
|
package/dist/labels.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export const defaultChatUiLabels = Object.freeze({
|
|
2
|
+
askUserCancel: "Cancel",
|
|
3
|
+
askUserChatAboutThis: "Chat about this",
|
|
4
|
+
askUserLabel: "User input requested",
|
|
5
|
+
askUserRequired: "This answer is required.",
|
|
6
|
+
askUserSubmit: "Submit answers",
|
|
7
|
+
askUserSubmitting: "Submitting",
|
|
8
|
+
askUserUnavailable: "Interaction answers are unavailable in the current session.",
|
|
9
|
+
capabilityUnavailableDescription: "This chat capability is not available in the current session.",
|
|
10
|
+
capabilityUnavailableTitle: "Capability unavailable",
|
|
11
|
+
composerLabel: "Message",
|
|
12
|
+
composerPlaceholder: "Write a message",
|
|
13
|
+
conversationListLabel: "Conversations",
|
|
14
|
+
disconnectedDescription: "Live updates are unavailable. Check the connection and try again.",
|
|
15
|
+
disconnectedTitle: "Disconnected",
|
|
16
|
+
emptyDescription: "Select a conversation to start chatting.",
|
|
17
|
+
emptyTitle: "No conversation selected",
|
|
18
|
+
errorDescription: "The chat could not be displayed.",
|
|
19
|
+
errorTitle: "Something went wrong",
|
|
20
|
+
emptyTimeline: "No messages yet",
|
|
21
|
+
interrupt: "Stop",
|
|
22
|
+
interruptUnavailable: "Stop unavailable",
|
|
23
|
+
interrupting: "Stopping",
|
|
24
|
+
jumpToLatest: "Jump to latest",
|
|
25
|
+
loadingDescription: "The conversation is being prepared.",
|
|
26
|
+
loadingTitle: "Loading conversation",
|
|
27
|
+
newMessages: "new messages",
|
|
28
|
+
noConversations: "No conversations",
|
|
29
|
+
retry: "Try again",
|
|
30
|
+
runStatusLabel: "Run",
|
|
31
|
+
send: "Send",
|
|
32
|
+
sending: "Sending",
|
|
33
|
+
textSendingUnavailable: "Text sending is unavailable.",
|
|
34
|
+
timelineLabel: "Conversation timeline",
|
|
35
|
+
});
|
|
36
|
+
export const resolveChatUiLabels = (overrides) => ({ ...defaultChatUiLabels, ...overrides });
|
|
37
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAiB,MAAM,CAAC,MAAM,CAAC;IAC7D,aAAa,EAAE,QAAQ;IACvB,oBAAoB,EAAE,iBAAiB;IACvC,YAAY,EAAE,sBAAsB;IACpC,eAAe,EAAE,0BAA0B;IAC3C,aAAa,EAAE,gBAAgB;IAC/B,iBAAiB,EAAE,YAAY;IAC/B,kBAAkB,EAChB,6DAA6D;IAC/D,gCAAgC,EAC9B,+DAA+D;IACjE,0BAA0B,EAAE,wBAAwB;IACpD,aAAa,EAAE,SAAS;IACxB,mBAAmB,EAAE,iBAAiB;IACtC,qBAAqB,EAAE,eAAe;IACtC,uBAAuB,EACrB,mEAAmE;IACrE,iBAAiB,EAAE,cAAc;IACjC,gBAAgB,EAAE,0CAA0C;IAC5D,UAAU,EAAE,0BAA0B;IACtC,gBAAgB,EAAE,kCAAkC;IACpD,UAAU,EAAE,sBAAsB;IAClC,aAAa,EAAE,iBAAiB;IAChC,SAAS,EAAE,MAAM;IACjB,oBAAoB,EAAE,kBAAkB;IACxC,YAAY,EAAE,UAAU;IACxB,YAAY,EAAE,gBAAgB;IAC9B,kBAAkB,EAAE,qCAAqC;IACzD,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,cAAc;IAC3B,eAAe,EAAE,kBAAkB;IACnC,KAAK,EAAE,WAAW;IAClB,cAAc,EAAE,KAAK;IACrB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,sBAAsB,EAAE,8BAA8B;IACtD,aAAa,EAAE,uBAAuB;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,SAA2C,EAC7B,EAAE,CAAC,CAAC,EAAE,GAAG,mBAAmB,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface ChatMarkdownContentProps {
|
|
3
|
+
readonly children: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Safe Markdown content only. Message/event chrome belongs to the caller so
|
|
7
|
+
* content rendering can be reused without coupling author or status layout.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ChatMarkdownContent: ({ children, }: ChatMarkdownContentProps) => ReactNode;
|
|
10
|
+
//# sourceMappingURL=markdown-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-content.d.ts","sourceRoot":"","sources":["../src/markdown-content.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,eAEjC,wBAAwB,KAAG,SA8B7B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Typography, theme } from "antd";
|
|
3
|
+
import ReactMarkdown from "react-markdown";
|
|
4
|
+
import rehypeSanitize from "rehype-sanitize";
|
|
5
|
+
import remarkGfm from "remark-gfm";
|
|
6
|
+
/**
|
|
7
|
+
* Safe Markdown content only. Message/event chrome belongs to the caller so
|
|
8
|
+
* content rendering can be reused without coupling author or status layout.
|
|
9
|
+
*/
|
|
10
|
+
export const ChatMarkdownContent = ({ children, }) => {
|
|
11
|
+
const { token } = theme.useToken();
|
|
12
|
+
return (_jsx(ReactMarkdown, { components: {
|
|
13
|
+
a: ({ children: linkChildren, href }) => (_jsx(Typography.Link, { href: href, rel: "noreferrer", target: "_blank", children: linkChildren })),
|
|
14
|
+
img: ({ alt }) => (_jsx(Typography.Text, { type: "secondary", children: alt === undefined || alt.length === 0
|
|
15
|
+
? "[Image]"
|
|
16
|
+
: `[Image: ${alt}]` })),
|
|
17
|
+
p: ({ children: paragraphChildren }) => (_jsx(Typography.Paragraph, { style: { marginBottom: token.marginXS }, children: paragraphChildren })),
|
|
18
|
+
}, rehypePlugins: [rehypeSanitize], remarkPlugins: [remarkGfm], skipHtml: true, children: children }));
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=markdown-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-content.js","sourceRoot":"","sources":["../src/markdown-content.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,SAAS,MAAM,YAAY,CAAC;AAMnC;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,QAAQ,GACiB,EAAa,EAAE;IACxC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnC,OAAO,CACL,KAAC,aAAa,IACZ,UAAU,EAAE;YACV,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACvC,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC,YAAY,EAAC,MAAM,EAAC,QAAQ,YAC1D,YAAY,GACG,CACnB;YACD,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAChB,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,YAC9B,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;oBACpC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,WAAW,GAAG,GAAG,GACL,CACnB;YACD,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC,CACtC,KAAC,UAAU,CAAC,SAAS,IAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,QAAQ,EAAE,YAC1D,iBAAiB,GACG,CACxB;SACF,EACD,aAAa,EAAE,CAAC,cAAc,CAAC,EAC/B,aAAa,EAAE,CAAC,SAAS,CAAC,EAC1B,QAAQ,kBAEP,QAAQ,GACK,CACjB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ComponentType } from "react";
|
|
2
|
+
import type { Message, TimelineItem } from "@turingfocus/chat-protocol";
|
|
3
|
+
export type ChatRendererKey = "agent-event" | `agent-event:${string}` | "message" | `message:${Message["content"]["kind"]}` | "unknown-event" | `unknown-event:${string}`;
|
|
4
|
+
export interface ChatRendererProps {
|
|
5
|
+
readonly formatTimestamp: (timestamp: number) => string;
|
|
6
|
+
readonly item: TimelineItem;
|
|
7
|
+
}
|
|
8
|
+
export type ChatRenderer = ComponentType<ChatRendererProps>;
|
|
9
|
+
/**
|
|
10
|
+
* A `null` entry explicitly stops candidate resolution and selects the safe
|
|
11
|
+
* fallback. An absent entry continues to the next, more general key.
|
|
12
|
+
*/
|
|
13
|
+
export type ChatRendererRegistry = Readonly<Partial<Record<ChatRendererKey, ChatRenderer | null>>>;
|
|
14
|
+
export interface ChatRendererFailure {
|
|
15
|
+
readonly error: unknown;
|
|
16
|
+
readonly item: TimelineItem;
|
|
17
|
+
}
|
|
18
|
+
export declare const formatChatTimestampUtc: (timestamp: number) => string;
|
|
19
|
+
export interface ChatMessageContentProps {
|
|
20
|
+
readonly message: Message;
|
|
21
|
+
}
|
|
22
|
+
export declare const ChatMessageContent: ({ message }: ChatMessageContentProps) => import("react").JSX.Element;
|
|
23
|
+
export declare const defaultChatRendererRegistry: ChatRendererRegistry;
|
|
24
|
+
export declare const createChatRendererRegistry: (overrides?: ChatRendererRegistry | undefined) => ChatRendererRegistry;
|
|
25
|
+
export declare const resolveChatRenderer: (registry: ChatRendererRegistry, item: TimelineItem) => ChatRenderer | undefined;
|
|
26
|
+
export interface ChatTimelineItemProps {
|
|
27
|
+
readonly formatTimestamp?: ((timestamp: number) => string) | undefined;
|
|
28
|
+
readonly item: TimelineItem;
|
|
29
|
+
readonly onRendererError?: ((failure: ChatRendererFailure) => void) | undefined;
|
|
30
|
+
readonly registry: ChatRendererRegistry;
|
|
31
|
+
}
|
|
32
|
+
export declare const ChatTimelineItem: ({ formatTimestamp, item, onRendererError, registry, }: ChatTimelineItemProps) => import("react").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=renderer-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-registry.d.ts","sourceRoot":"","sources":["../src/renderer-registry.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EAEb,MAAM,4BAA4B,CAAC;AAKpC,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,eAAe,MAAM,EAAE,GACvB,SAAS,GACT,WAAW,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,GACvC,eAAe,GACf,iBAAiB,MAAM,EAAE,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC;AAC5D;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CACzC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,eAAO,MAAM,sBAAsB,GAAI,WAAW,MAAM,KAAG,MAK1D,CAAC;AAgBF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,GAAI,aAAa,uBAAuB,gCAOpE,CAAC;AAsOJ,eAAO,MAAM,2BAA2B,EAAE,oBAKxC,CAAC;AAEH,eAAO,MAAM,0BAA0B,GACrC,YAAY,oBAAoB,GAAG,SAAS,KAC3C,oBAC8D,CAAC;AAoBlE,eAAO,MAAM,mBAAmB,GAC9B,UAAU,oBAAoB,EAC9B,MAAM,YAAY,KACjB,YAAY,GAAG,SAOjB,CAAC;AAoFF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EACvB,CAAC,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;CACzC;AAED,eAAO,MAAM,gBAAgB,GAAI,uDAK9B,qBAAqB,gCAwBvB,CAAC"}
|