@turingfocus/chat-ui-antd 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/chat-composer.d.ts +7 -1
  2. package/dist/chat-composer.d.ts.map +1 -1
  3. package/dist/chat-composer.js +38 -3
  4. package/dist/chat-composer.js.map +1 -1
  5. package/dist/chat-conversation-view.d.ts +19 -2
  6. package/dist/chat-conversation-view.d.ts.map +1 -1
  7. package/dist/chat-conversation-view.js +172 -5
  8. package/dist/chat-conversation-view.js.map +1 -1
  9. package/dist/chat-event-detail.d.ts +23 -0
  10. package/dist/chat-event-detail.d.ts.map +1 -0
  11. package/dist/chat-event-detail.js +15 -0
  12. package/dist/chat-event-detail.js.map +1 -0
  13. package/dist/chat-run-status.d.ts +2 -1
  14. package/dist/chat-run-status.d.ts.map +1 -1
  15. package/dist/chat-run-status.js +2 -2
  16. package/dist/chat-run-status.js.map +1 -1
  17. package/dist/chat-timeline.d.ts +4 -1
  18. package/dist/chat-timeline.d.ts.map +1 -1
  19. package/dist/chat-timeline.js +103 -3
  20. package/dist/chat-timeline.js.map +1 -1
  21. package/dist/event-detail-split-layout.d.ts +20 -0
  22. package/dist/event-detail-split-layout.d.ts.map +1 -0
  23. package/dist/event-detail-split-layout.js +185 -0
  24. package/dist/event-detail-split-layout.js.map +1 -0
  25. package/dist/event-renderers.d.ts +7 -0
  26. package/dist/event-renderers.d.ts.map +1 -0
  27. package/dist/event-renderers.js +138 -0
  28. package/dist/event-renderers.js.map +1 -0
  29. package/dist/index.d.ts +3 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/labels.d.ts.map +1 -1
  34. package/dist/labels.js +9 -0
  35. package/dist/labels.js.map +1 -1
  36. package/dist/renderer-registry.d.ts +6 -1
  37. package/dist/renderer-registry.d.ts.map +1 -1
  38. package/dist/renderer-registry.js +11 -95
  39. package/dist/renderer-registry.js.map +1 -1
  40. package/dist/types.d.ts +10 -0
  41. package/dist/types.d.ts.map +1 -1
  42. package/package.json +3 -3
@@ -4,10 +4,16 @@ export interface ChatComposerProps {
4
4
  readonly className?: string | undefined;
5
5
  readonly disabled?: boolean | undefined;
6
6
  readonly disabledReason?: string | undefined;
7
+ readonly interruptAction?: ChatComposerInterruptAction | undefined;
7
8
  readonly labels?: ChatUiLabelOverrides | undefined;
8
9
  readonly onSend: (text: string) => boolean | PromiseLike<boolean>;
9
10
  readonly resetKey?: string | undefined;
10
11
  readonly style?: CSSProperties | undefined;
11
12
  }
12
- export declare const ChatComposer: ({ className, disabled, disabledReason, labels: labelOverrides, onSend, resetKey, style, }: ChatComposerProps) => import("react").JSX.Element;
13
+ export interface ChatComposerInterruptAction {
14
+ readonly disabled?: boolean | undefined;
15
+ readonly onInterrupt: () => boolean | PromiseLike<boolean>;
16
+ readonly resetKey?: string | undefined;
17
+ }
18
+ export declare const ChatComposer: ({ className, disabled, disabledReason, interruptAction, labels: labelOverrides, onSend, resetKey, style, }: ChatComposerProps) => import("react").JSX.Element;
13
19
  //# sourceMappingURL=chat-composer.d.ts.map
@@ -1 +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"}
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,eAAe,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACnE,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,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,eAAO,MAAM,YAAY,GAAI,4GAS1B,iBAAiB,gCAoInB,CAAC"}
@@ -2,17 +2,24 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Button, Input, Typography, theme } from "antd";
3
3
  import { useEffect, useRef, useState, } from "react";
4
4
  import { resolveChatUiLabels } from "./labels.js";
5
- export const ChatComposer = ({ className, disabled = false, disabledReason, labels: labelOverrides, onSend, resetKey, style, }) => {
5
+ export const ChatComposer = ({ className, disabled = false, disabledReason, interruptAction, labels: labelOverrides, onSend, resetKey, style, }) => {
6
6
  const { token } = theme.useToken();
7
7
  const labels = resolveChatUiLabels(labelOverrides);
8
8
  const [draft, setDraft] = useState("");
9
+ const [interrupting, setInterrupting] = useState(false);
9
10
  const [submitting, setSubmitting] = useState(false);
11
+ const interruptRequestId = useRef(0);
10
12
  const submissionId = useRef(0);
13
+ const interruptResetKey = interruptAction?.resetKey ?? null;
11
14
  useEffect(() => {
12
15
  submissionId.current += 1;
13
16
  setDraft("");
14
17
  setSubmitting(false);
15
18
  }, [resetKey]);
19
+ useEffect(() => {
20
+ interruptRequestId.current += 1;
21
+ setInterrupting(false);
22
+ }, [interruptResetKey]);
16
23
  const submit = async () => {
17
24
  const text = draft.trim();
18
25
  if (disabled || submitting || text.length === 0)
@@ -43,15 +50,43 @@ export const ChatComposer = ({ className, disabled = false, disabledReason, labe
43
50
  event.preventDefault();
44
51
  void submit();
45
52
  };
53
+ const interrupt = async () => {
54
+ if (interruptAction === undefined ||
55
+ interruptAction.disabled === true ||
56
+ interrupting) {
57
+ return;
58
+ }
59
+ const action = interruptAction;
60
+ const requestId = interruptRequestId.current + 1;
61
+ interruptRequestId.current = requestId;
62
+ setInterrupting(true);
63
+ try {
64
+ await action.onInterrupt();
65
+ }
66
+ catch {
67
+ // The owner of the command callback owns error presentation. The
68
+ // composer only owns the pending state for this action.
69
+ }
70
+ finally {
71
+ if (interruptRequestId.current === requestId)
72
+ setInterrupting(false);
73
+ }
74
+ };
46
75
  return (_jsxs("div", { className: className, style: {
47
76
  borderBlockStart: `${token.lineWidth}px ${token.lineType} ${token.colorBorderSecondary}`,
48
77
  padding: token.paddingSM,
49
78
  ...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) => {
79
+ }, children: [_jsxs("div", { "data-chat-composer": "", 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
80
  setDraft(event.target.value);
52
81
  }, onPressEnter: handlePressEnter, placeholder: disabled
53
82
  ? (disabledReason ?? labels.textSendingUnavailable)
54
- : labels.composerPlaceholder, value: draft }), _jsx(Button, { disabled: disabled || draft.trim().length === 0, loading: submitting, onClick: () => {
83
+ : labels.composerPlaceholder, value: draft }), interruptAction === undefined ? null : (_jsx(Button, { danger: true, disabled: interruptAction.disabled === true, loading: interrupting, onClick: () => {
84
+ void interrupt();
85
+ }, children: interrupting
86
+ ? labels.interrupting
87
+ : interruptAction.disabled === true
88
+ ? labels.interruptUnavailable
89
+ : labels.interrupt })), _jsx(Button, { disabled: disabled || draft.trim().length === 0, loading: submitting, onClick: () => {
55
90
  void submit();
56
91
  }, type: "primary", children: submitting ? labels.sending : labels.send })] }), disabled && disabledReason !== undefined ? (_jsx(Typography.Text, { type: "secondary", children: disabledReason })) : null] }));
57
92
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chat-composer.js","sourceRoot":"","sources":["../src/chat-composer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-composer.js","sourceRoot":"","sources":["../src/chat-composer.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { CSSProperties } from "react";
1
+ import { type CSSProperties } from "react";
2
+ import { type ChatEventDetailMode, type ChatEventItem } from "./chat-event-detail.js";
2
3
  import { type AskUserChatAboutThisRequest } from "./ask-user-interaction.js";
3
4
  import type { ChatRendererFailure, ChatRendererRegistry } from "./renderer-registry.js";
4
5
  import type { ChatUiLabelOverrides } from "./types.js";
@@ -6,14 +7,30 @@ import { type ChatUiCommand, type ChatUiCommandFailure } from "./use-chat-comman
6
7
  export type { ChatUiCommand, ChatUiCommandFailure };
7
8
  export interface ChatConversationViewProps {
8
9
  readonly className?: string | undefined;
10
+ readonly defaultEventDetailMode?: ChatEventDetailMode | undefined;
11
+ readonly defaultSelectedEventId?: string | null | undefined;
12
+ readonly eventDetailMode?: ChatEventDetailMode | undefined;
13
+ readonly eventDetailSplitBreakpoint?: number | undefined;
14
+ /** Initial timeline share for uncontrolled split layout; clamped to 0.2–0.8. */
15
+ readonly defaultEventDetailSplitRatio?: number | undefined;
9
16
  readonly formatTimestamp?: ((timestamp: number) => string) | undefined;
10
17
  readonly getDeadlineAt: () => number;
11
18
  readonly labels?: ChatUiLabelOverrides | undefined;
12
19
  readonly onCommandError?: ((failure: ChatUiCommandFailure) => void) | undefined;
20
+ readonly onEventDetailModeChange?: ((mode: ChatEventDetailMode) => void) | undefined;
21
+ /**
22
+ * Called once when a pointer resize finishes and after each keyboard resize.
23
+ * Hosts can persist the normalized timeline share supplied here.
24
+ */
25
+ readonly onEventDetailSplitRatioChange?: ((ratio: number) => void) | undefined;
13
26
  readonly onChatAboutThis?: ((request: AskUserChatAboutThisRequest) => void) | undefined;
14
27
  readonly onRendererError?: ((failure: ChatRendererFailure) => void) | undefined;
28
+ readonly onSelectedEventChange?: ((eventId: string | null, item: ChatEventItem | null) => void) | undefined;
15
29
  readonly renderers?: ChatRendererRegistry | undefined;
30
+ /** Controlled timeline share for split layout; clamped to 0.2–0.8. */
31
+ readonly eventDetailSplitRatio?: number | undefined;
32
+ readonly selectedEventId?: string | null | undefined;
16
33
  readonly style?: CSSProperties | undefined;
17
34
  }
18
- export declare const ChatConversationView: ({ className, formatTimestamp, getDeadlineAt, labels: labelOverrides, onChatAboutThis, onCommandError, onRendererError, renderers, style, }: ChatConversationViewProps) => import("react").JSX.Element;
35
+ export declare const ChatConversationView: ({ className, defaultEventDetailMode, defaultEventDetailSplitRatio, defaultSelectedEventId, eventDetailMode: controlledEventDetailMode, eventDetailSplitBreakpoint, eventDetailSplitRatio, formatTimestamp, getDeadlineAt, labels: labelOverrides, onChatAboutThis, onCommandError, onEventDetailModeChange, onEventDetailSplitRatioChange, onRendererError, onSelectedEventChange, renderers, selectedEventId: controlledSelectedEventId, style, }: ChatConversationViewProps) => import("react").JSX.Element;
19
36
  //# sourceMappingURL=chat-conversation-view.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"chat-conversation-view.d.ts","sourceRoot":"","sources":["../src/chat-conversation-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAMf,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,2BAA2B,CAAC;AASnC,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,sBAAsB,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzD,gFAAgF;IAChF,QAAQ,CAAC,4BAA4B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3D,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,uBAAuB,CAAC,EAC/B,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpD;;;OAGG;IACH,QAAQ,CAAC,6BAA6B,CAAC,EACrC,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACxC,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,qBAAqB,CAAC,EAC7B,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACtD,sEAAsE;IACtE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAuCD,eAAO,MAAM,oBAAoB,GAAI,obAoBlC,yBAAyB,gCAqZ3B,CAAC"}
@@ -1,12 +1,15 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Alert, theme } from "antd";
2
+ import { Alert, Modal, Segmented, Typography, theme } from "antd";
3
+ import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
3
4
  import { useChatClient, useChatSelector } from "@turingfocus/chat-react";
4
5
  import { ChatComposer } from "./chat-composer.js";
6
+ import { ChatEventDetail, ChatEventDetailEmpty, isChatEventItem, } from "./chat-event-detail.js";
5
7
  import { AskUserInteractionCard, } from "./ask-user-interaction.js";
6
8
  import { ChatRunStatus } from "./chat-run-status.js";
7
9
  import { ChatStateView } from "./chat-state-view.js";
8
10
  import { ChatTimeline } from "./chat-timeline.js";
9
11
  import { resolveChatUiLabels } from "./labels.js";
12
+ import { EventDetailSplitLayout, normalizeEventDetailSplitRatio, } from "./event-detail-split-layout.js";
10
13
  import { useChatCommandCoordinator, } from "./use-chat-command-coordinator.js";
11
14
  const selectChatConversationViewSnapshot = (snapshot) => snapshot === null
12
15
  ? null
@@ -27,7 +30,7 @@ const equalChatConversationViewSnapshot = (left, right) => left === right ||
27
30
  left.pendingInteraction === right.pendingInteraction &&
28
31
  left.run === right.run &&
29
32
  left.timeline === right.timeline);
30
- export const ChatConversationView = ({ className, formatTimestamp, getDeadlineAt, labels: labelOverrides, onChatAboutThis, onCommandError, onRendererError, renderers, style, }) => {
33
+ export const ChatConversationView = ({ className, defaultEventDetailMode = "auto", defaultEventDetailSplitRatio, defaultSelectedEventId = null, eventDetailMode: controlledEventDetailMode, eventDetailSplitBreakpoint = 800, eventDetailSplitRatio, formatTimestamp, getDeadlineAt, labels: labelOverrides, onChatAboutThis, onCommandError, onEventDetailModeChange, onEventDetailSplitRatioChange, onRendererError, onSelectedEventChange, renderers, selectedEventId: controlledSelectedEventId, style, }) => {
31
34
  const { token } = theme.useToken();
32
35
  const labels = resolveChatUiLabels(labelOverrides);
33
36
  const client = useChatClient();
@@ -48,24 +51,188 @@ export const ChatConversationView = ({ className, formatTimestamp, getDeadlineAt
48
51
  run: snapshot?.run ?? null,
49
52
  snapshotError: snapshot?.error,
50
53
  });
54
+ const [uncontrolledEventDetailMode, setUncontrolledEventDetailMode] = useState(defaultEventDetailMode);
55
+ const [uncontrolledEventDetailSplitRatio, setUncontrolledEventDetailSplitRatio,] = useState(() => normalizeEventDetailSplitRatio(defaultEventDetailSplitRatio));
56
+ const [uncontrolledSelectedEventId, setUncontrolledSelectedEventId] = useState(defaultSelectedEventId);
57
+ const [containerWidth, setContainerWidth] = useState(null);
58
+ const [modalOpen, setModalOpen] = useState(false);
59
+ const layoutRef = useRef(null);
60
+ const lastTriggerRef = useRef(null);
61
+ const wasModalOpenRef = useRef(false);
62
+ const currentConversationId = snapshot?.conversationId ?? null;
63
+ const requestedEventDetailMode = controlledEventDetailMode ?? uncontrolledEventDetailMode;
64
+ const selectedEventId = controlledSelectedEventId === undefined
65
+ ? uncontrolledSelectedEventId
66
+ : controlledSelectedEventId;
67
+ const controlledEventDetailSplitRatio = eventDetailSplitRatio === undefined
68
+ ? undefined
69
+ : normalizeEventDetailSplitRatio(eventDetailSplitRatio);
70
+ const resolvedEventDetailSplitRatio = controlledEventDetailSplitRatio ?? uncontrolledEventDetailSplitRatio;
71
+ const splitBreakpoint = Number.isFinite(eventDetailSplitBreakpoint) &&
72
+ eventDetailSplitBreakpoint > 0
73
+ ? eventDetailSplitBreakpoint
74
+ : 800;
75
+ const resolvedEventDetailMode = requestedEventDetailMode === "auto"
76
+ ? containerWidth === null || containerWidth >= splitBreakpoint
77
+ ? "split"
78
+ : "modal"
79
+ : requestedEventDetailMode;
80
+ const selectedEvent = useMemo(() => snapshot?.timeline.find((item) => isChatEventItem(item) && item.id === selectedEventId), [selectedEventId, snapshot?.timeline]);
81
+ const hasSelectedEvent = selectedEvent !== undefined;
82
+ const eventDetailModalVisible = resolvedEventDetailMode === "modal" &&
83
+ modalOpen &&
84
+ selectedEvent !== undefined;
85
+ useEffect(() => {
86
+ const element = layoutRef.current;
87
+ if (element === null)
88
+ return;
89
+ const measure = (width) => {
90
+ if (Number.isFinite(width))
91
+ setContainerWidth(width);
92
+ };
93
+ measure(element.getBoundingClientRect().width);
94
+ if (typeof ResizeObserver === "undefined")
95
+ return;
96
+ const observer = new ResizeObserver((entries) => {
97
+ const entry = entries[0];
98
+ if (entry !== undefined)
99
+ measure(entry.contentRect.width);
100
+ });
101
+ observer.observe(element);
102
+ return () => observer.disconnect();
103
+ }, [currentConversationId]);
104
+ const updateSelection = useCallback((eventId, item) => {
105
+ if (controlledSelectedEventId === undefined) {
106
+ setUncontrolledSelectedEventId(eventId);
107
+ }
108
+ onSelectedEventChange?.(eventId, item);
109
+ }, [controlledSelectedEventId, onSelectedEventChange]);
110
+ const previousConversationIdRef = useRef(currentConversationId);
111
+ useEffect(() => {
112
+ const previousConversationId = previousConversationIdRef.current;
113
+ previousConversationIdRef.current = currentConversationId;
114
+ if (previousConversationId === null ||
115
+ previousConversationId === currentConversationId) {
116
+ return;
117
+ }
118
+ lastTriggerRef.current = null;
119
+ setModalOpen(false);
120
+ if (selectedEventId !== null)
121
+ updateSelection(null, null);
122
+ }, [currentConversationId, selectedEventId, updateSelection]);
123
+ useEffect(() => {
124
+ if (snapshot === null ||
125
+ selectedEventId === null ||
126
+ selectedEvent !== undefined) {
127
+ return;
128
+ }
129
+ lastTriggerRef.current = null;
130
+ setModalOpen(false);
131
+ updateSelection(null, null);
132
+ }, [selectedEvent, selectedEventId, snapshot, updateSelection]);
133
+ useEffect(() => {
134
+ if (resolvedEventDetailMode === "split") {
135
+ setModalOpen(false);
136
+ }
137
+ else if (hasSelectedEvent) {
138
+ setModalOpen(true);
139
+ }
140
+ }, [hasSelectedEvent, resolvedEventDetailMode, selectedEventId]);
141
+ const restoreTriggerFocus = useCallback(() => {
142
+ if (lastTriggerRef.current?.isConnected === true) {
143
+ lastTriggerRef.current.focus({ preventScroll: true });
144
+ }
145
+ }, []);
146
+ useEffect(() => {
147
+ const wasModalOpen = wasModalOpenRef.current;
148
+ wasModalOpenRef.current = modalOpen;
149
+ if (!wasModalOpen || modalOpen)
150
+ return;
151
+ const timer = setTimeout(restoreTriggerFocus, 0);
152
+ return () => clearTimeout(timer);
153
+ }, [modalOpen, restoreTriggerFocus]);
154
+ useEffect(() => {
155
+ if (!eventDetailModalVisible)
156
+ return;
157
+ const closeOnEscape = (event) => {
158
+ if (event.key !== "Escape")
159
+ return;
160
+ event.preventDefault();
161
+ setModalOpen(false);
162
+ };
163
+ document.addEventListener("keydown", closeOnEscape, true);
164
+ return () => document.removeEventListener("keydown", closeOnEscape, true);
165
+ }, [eventDetailModalVisible]);
166
+ const selectEvent = useCallback((item, trigger) => {
167
+ lastTriggerRef.current = trigger;
168
+ updateSelection(item.id, item);
169
+ setModalOpen(resolvedEventDetailMode === "modal");
170
+ }, [resolvedEventDetailMode, updateSelection]);
171
+ const changeEventDetailMode = useCallback((value) => {
172
+ if (value !== "auto" && value !== "modal" && value !== "split")
173
+ return;
174
+ if (controlledEventDetailMode === undefined) {
175
+ setUncontrolledEventDetailMode(value);
176
+ }
177
+ onEventDetailModeChange?.(value);
178
+ }, [controlledEventDetailMode, onEventDetailModeChange]);
179
+ const changeEventDetailSplitRatio = useCallback((ratio) => {
180
+ if (controlledEventDetailSplitRatio === undefined) {
181
+ setUncontrolledEventDetailSplitRatio(ratio);
182
+ }
183
+ onEventDetailSplitRatioChange?.(ratio);
184
+ }, [controlledEventDetailSplitRatio, onEventDetailSplitRatioChange]);
185
+ const eventDetailModeOptions = useMemo(() => [
186
+ { label: labels.eventDetailModeAuto, value: "auto" },
187
+ { label: labels.eventDetailModeSplit, value: "split" },
188
+ { label: labels.eventDetailModeModal, value: "modal" },
189
+ ], [
190
+ labels.eventDetailModeAuto,
191
+ labels.eventDetailModeModal,
192
+ labels.eventDetailModeSplit,
193
+ ]);
51
194
  if (snapshot === null) {
52
195
  return _jsx(ChatStateView, { labels: labels, state: { kind: "loading" } });
53
196
  }
54
197
  const conversationId = snapshot.conversationId;
198
+ const timeline = (_jsx(ChatTimeline, { conversationId: conversationId, formatTimestamp: formatTimestamp, items: snapshot.timeline, labels: labels, onEventSelect: selectEvent, onRendererError: onRendererError, renderers: renderers, selectedEventId: selectedEventId }, viewResetKey));
199
+ const eventDetail = (_jsx("aside", { "aria-label": String(labels.eventDetailTitle), style: {
200
+ boxSizing: "border-box",
201
+ minHeight: 0,
202
+ overflow: "auto",
203
+ padding: token.paddingSM,
204
+ }, children: selectedEvent === undefined ? (_jsx(ChatEventDetailEmpty, { labels: labels })) : (_jsx(ChatEventDetail, { formatTimestamp: formatTimestamp, item: selectedEvent, onRendererError: onRendererError, renderers: renderers })) }));
55
205
  return (_jsxs("section", { className: className, style: {
56
206
  display: "flex",
57
207
  flexDirection: "column",
58
208
  height: "100%",
59
209
  minHeight: 0,
60
210
  ...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: () => {
211
+ }, children: [_jsx(ChatRunStatus, { canInterrupt: snapshot.capabilities.interrupt, labels: labels, onInterrupt: interrupt, run: snapshot.run, showInterruptButton: false }, `${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
212
  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([
213
+ }, showIcon: true, style: { margin: token.marginXS }, type: "error" }, failure.command))), _jsxs("div", { style: {
214
+ alignItems: "center",
215
+ display: "flex",
216
+ gap: token.marginXS,
217
+ justifyContent: "flex-end",
218
+ padding: `${token.paddingXXS}px ${token.paddingSM}px`,
219
+ }, children: [_jsx(Typography.Text, { type: "secondary", children: labels.eventDetailModeLabel }), _jsx(Segmented, { "aria-label": labels.eventDetailModeLabel, onChange: changeEventDetailMode, options: eventDetailModeOptions, size: "small", value: requestedEventDetailMode })] }), _jsx("div", { "data-chat-event-layout": resolvedEventDetailMode, ref: layoutRef, style: { display: "flex", flex: 1, minHeight: 0, minWidth: 0 }, children: _jsx(EventDetailSplitLayout, { ariaLabel: labels.eventDetailSplitHandleLabel ?? "Resize event detail panes", detail: eventDetail, onRatioChange: changeEventDetailSplitRatio, ratio: resolvedEventDetailSplitRatio, resizable: controlledEventDetailSplitRatio === undefined ||
220
+ onEventDetailSplitRatioChange !== undefined, split: resolvedEventDetailMode === "split", timeline: timeline }) }), 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
221
  conversationId,
65
222
  snapshot.pendingInteraction.requestId,
66
223
  snapshot.pendingInteraction.revision,
67
224
  ])) })), _jsx(ChatComposer, { disabled: !snapshot.capabilities.sendText, disabledReason: snapshot.capabilities.sendText
68
225
  ? undefined
69
- : labels.textSendingUnavailable, labels: labels, onSend: sendText, resetKey: viewResetKey }, viewResetKey)] }));
226
+ : labels.textSendingUnavailable, interruptAction: snapshot.run?.status === "running"
227
+ ? {
228
+ disabled: !snapshot.capabilities.interrupt ||
229
+ !snapshot.run.canInterrupt,
230
+ onInterrupt: interrupt,
231
+ resetKey: snapshot.run.id,
232
+ }
233
+ : undefined, labels: labels, onSend: sendText, resetKey: viewResetKey }, viewResetKey), _jsx(Modal, { afterOpenChange: (open) => {
234
+ if (!open)
235
+ restoreTriggerFocus();
236
+ }, closeIcon: _jsx("span", { "aria-label": labels.eventDetailClose, role: "img", children: "\u00D7" }), destroyOnClose: true, footer: null, keyboard: true, onCancel: () => setModalOpen(false), open: eventDetailModalVisible, title: labels.eventDetailTitle, children: selectedEvent === undefined ? null : (_jsx(ChatEventDetail, { formatTimestamp: formatTimestamp, item: selectedEvent, onRendererError: onRendererError, renderers: renderers })) })] }));
70
237
  };
71
238
  //# sourceMappingURL=chat-conversation-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-conversation-view.js","sourceRoot":"","sources":["../src/chat-conversation-view.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-conversation-view.js","sourceRoot":"","sources":["../src/chat-conversation-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
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 type ChatEventDetailMode = "auto" | "modal" | "split";
6
+ export type ResolvedChatEventDetailMode = Exclude<ChatEventDetailMode, "auto">;
7
+ export type ChatEventItem = Exclude<TimelineItem, {
8
+ readonly kind: "message";
9
+ }>;
10
+ export declare const isChatEventItem: (item: TimelineItem | null | undefined) => item is ChatEventItem;
11
+ export interface ChatEventDetailProps {
12
+ readonly className?: string | undefined;
13
+ readonly formatTimestamp?: ((timestamp: number) => string) | undefined;
14
+ readonly item: ChatEventItem;
15
+ readonly onRendererError?: ((failure: ChatRendererFailure) => void) | undefined;
16
+ readonly renderers?: ChatRendererRegistry | undefined;
17
+ readonly style?: CSSProperties | undefined;
18
+ }
19
+ export declare const ChatEventDetail: ({ className, formatTimestamp, item, onRendererError, renderers, style, }: ChatEventDetailProps) => import("react").JSX.Element;
20
+ export declare const ChatEventDetailEmpty: ({ labels: labelOverrides, }: {
21
+ readonly labels?: ChatUiLabelOverrides | undefined;
22
+ }) => import("react").JSX.Element;
23
+ //# sourceMappingURL=chat-event-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-event-detail.d.ts","sourceRoot":"","sources":["../src/chat-event-detail.tsx"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAC/E,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAEhF,eAAO,MAAM,eAAe,GAC1B,MAAM,YAAY,GAAG,IAAI,GAAG,SAAS,KACpC,IAAI,IAAI,aACqD,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACnC,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,IAAI,EAAE,aAAa,CAAC;IAC7B,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,eAAe,GAAI,0EAO7B,oBAAoB,gCAiBtB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,6BAElC;IACD,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACpD,gCAGA,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Empty } from "antd";
3
+ import { useMemo } from "react";
4
+ import { ChatTimelineItem, createChatRendererRegistry, formatChatTimestampUtc, } from "./renderer-registry.js";
5
+ import { resolveChatUiLabels } from "./labels.js";
6
+ export const isChatEventItem = (item) => item?.kind === "agent-event" || item?.kind === "unknown-event";
7
+ export const ChatEventDetail = ({ className, formatTimestamp = formatChatTimestampUtc, item, onRendererError, renderers, style, }) => {
8
+ const registry = useMemo(() => createChatRendererRegistry(renderers), [renderers]);
9
+ return (_jsx("div", { className: className, style: style, children: _jsx(ChatTimelineItem, { displayMode: "detail", formatTimestamp: formatTimestamp, item: item, onRendererError: onRendererError, registry: registry, selected: true }) }));
10
+ };
11
+ export const ChatEventDetailEmpty = ({ labels: labelOverrides, }) => {
12
+ const labels = resolveChatUiLabels(labelOverrides);
13
+ return _jsx(Empty, { description: labels.eventDetailEmpty });
14
+ };
15
+ //# sourceMappingURL=chat-event-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-event-detail.js","sourceRoot":"","sources":["../src/chat-event-detail.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAsB,MAAM,OAAO,CAAC;AAIpD,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,sBAAsB,GAGvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMlD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAqC,EACd,EAAE,CACzB,IAAI,EAAE,IAAI,KAAK,aAAa,IAAI,IAAI,EAAE,IAAI,KAAK,eAAe,CAAC;AAYjE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,SAAS,EACT,eAAe,GAAG,sBAAsB,EACxC,IAAI,EACJ,eAAe,EACf,SAAS,EACT,KAAK,GACgB,EAAE,EAAE;IACzB,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAC3C,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YACrC,KAAC,gBAAgB,IACf,WAAW,EAAC,QAAQ,EACpB,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,SACR,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,MAAM,EAAE,cAAc,GAGvB,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACnD,OAAO,KAAC,KAAK,IAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,GAAI,CAAC;AACzD,CAAC,CAAC"}
@@ -7,7 +7,8 @@ export interface ChatRunStatusProps {
7
7
  readonly labels?: ChatUiLabelOverrides | undefined;
8
8
  readonly onInterrupt: () => boolean | PromiseLike<boolean>;
9
9
  readonly run: Run | null;
10
+ readonly showInterruptButton?: boolean | undefined;
10
11
  readonly style?: CSSProperties | undefined;
11
12
  }
12
- export declare const ChatRunStatus: ({ canInterrupt, className, labels: labelOverrides, onInterrupt, run, style, }: ChatRunStatusProps) => import("react").JSX.Element | null;
13
+ export declare const ChatRunStatus: ({ canInterrupt, className, labels: labelOverrides, onInterrupt, run, showInterruptButton, style, }: ChatRunStatusProps) => import("react").JSX.Element | null;
13
14
  //# sourceMappingURL=chat-run-status.d.ts.map
@@ -1 +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"}
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,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED,eAAO,MAAM,aAAa,GAAI,oGAQ3B,kBAAkB,uCAuFpB,CAAC"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Alert, Button, Tag, Typography, theme } from "antd";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { resolveChatUiLabels } from "./labels.js";
5
- export const ChatRunStatus = ({ canInterrupt, className, labels: labelOverrides, onInterrupt, run, style, }) => {
5
+ export const ChatRunStatus = ({ canInterrupt, className, labels: labelOverrides, onInterrupt, run, showInterruptButton = true, style, }) => {
6
6
  const { token } = theme.useToken();
7
7
  const labels = resolveChatUiLabels(labelOverrides);
8
8
  const [interrupting, setInterrupting] = useState(false);
@@ -48,7 +48,7 @@ export const ChatRunStatus = ({ canInterrupt, className, labels: labelOverrides,
48
48
  display: "flex",
49
49
  gap: token.marginXS,
50
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: () => {
51
+ }, children: [_jsxs(Typography.Text, { children: [labels.runStatusLabel, ": ", _jsx(Tag, { color: statusColor, children: run.status })] }), showInterruptButton && run.status === "running" ? (_jsx(Button, { danger: true, disabled: !interruptAvailable, loading: interrupting, onClick: () => {
52
52
  void interrupt();
53
53
  }, size: "small", children: interrupting
54
54
  ? labels.interrupting
@@ -1 +1 @@
1
- {"version":3,"file":"chat-run-status.js","sourceRoot":"","sources":["../src/chat-run-status.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-run-status.js","sourceRoot":"","sources":["../src/chat-run-status.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type CSSProperties } from "react";
2
2
  import { type TimelineItem } from "@turingfocus/chat-protocol";
3
+ import { type ChatEventItem } from "./chat-event-detail.js";
3
4
  import { type ChatRendererFailure, type ChatRendererRegistry } from "./renderer-registry.js";
4
5
  import type { ChatUiLabelOverrides } from "./types.js";
5
6
  export interface ChatTimelineProps {
@@ -9,9 +10,11 @@ export interface ChatTimelineProps {
9
10
  readonly formatTimestamp?: ((timestamp: number) => string) | undefined;
10
11
  readonly items: readonly TimelineItem[];
11
12
  readonly labels?: ChatUiLabelOverrides | undefined;
13
+ readonly onEventSelect?: ((item: ChatEventItem, trigger: HTMLElement) => void) | undefined;
12
14
  readonly onRendererError?: ((failure: ChatRendererFailure) => void) | undefined;
13
15
  readonly renderers?: ChatRendererRegistry | undefined;
16
+ readonly selectedEventId?: string | null | undefined;
14
17
  readonly style?: CSSProperties | undefined;
15
18
  }
16
- export declare const ChatTimeline: ({ "aria-label": ariaLabel, className, conversationId, formatTimestamp, items, labels: labelOverrides, onRendererError, renderers, style, }: ChatTimelineProps) => import("react").JSX.Element;
19
+ export declare const ChatTimeline: ({ "aria-label": ariaLabel, className, conversationId, formatTimestamp, items, labels: labelOverrides, onEventSelect, onRendererError, renderers, selectedEventId, style, }: ChatTimelineProps) => import("react").JSX.Element;
17
20
  //# sourceMappingURL=chat-timeline.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"chat-timeline.d.ts","sourceRoot":"","sources":["../src/chat-timeline.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,aAAa,EAGnB,MAAM,OAAO,CAAC;AAGf,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA8CvD,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,aAAa,CAAC,EACrB,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpE,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,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED,eAAO,MAAM,YAAY,GAAI,4KAY1B,iBAAiB,gCAkOnB,CAAC"}