@ciridae/ui 1.0.1 → 1.0.3

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 (141) hide show
  1. package/dist/app/auth.d.ts +10 -0
  2. package/dist/app/auth.js +60 -0
  3. package/dist/app/error-boundary.d.ts +18 -0
  4. package/dist/app/error-boundary.js +45 -0
  5. package/dist/app/feedback.d.ts +12 -0
  6. package/dist/app/feedback.js +128 -0
  7. package/dist/app/index.d.ts +8 -0
  8. package/dist/app/index.js +8 -0
  9. package/dist/app/request-errors.d.ts +63 -0
  10. package/dist/app/request-errors.js +172 -0
  11. package/dist/app/sentry.d.ts +18 -0
  12. package/dist/app/sentry.js +52 -0
  13. package/dist/app/telemetry.d.ts +7 -0
  14. package/dist/app/telemetry.js +28 -0
  15. package/dist/app/trail.d.ts +9 -0
  16. package/dist/app/trail.js +18 -0
  17. package/dist/chat/chat-query-keys.d.ts +3 -3
  18. package/dist/chat/contract.d.ts +15 -15
  19. package/dist/chat/conversation-items-query-options.d.ts +114 -114
  20. package/dist/chat/conversation-source.d.ts +75 -0
  21. package/dist/chat/conversation-source.js +1 -0
  22. package/dist/chat/message-text.d.ts +1 -1
  23. package/dist/chat/message-text.js +114 -46
  24. package/dist/chat/use-conversation-list.d.ts +6 -6
  25. package/dist/components/activity-feed.d.ts +2 -2
  26. package/dist/components/agent-work.d.ts +3 -3
  27. package/dist/components/app-frame.d.ts +79 -0
  28. package/dist/components/app-frame.js +92 -0
  29. package/dist/components/app-navigation.d.ts +3 -3
  30. package/dist/components/badge.d.ts +1 -1
  31. package/dist/components/brand-icons.d.ts +3 -3
  32. package/dist/components/bulk-action-bar.d.ts +1 -1
  33. package/dist/components/button.d.ts +4 -4
  34. package/dist/components/calendar.d.ts +1 -1
  35. package/dist/components/centered-page.d.ts +1 -1
  36. package/dist/components/chart.d.ts +22 -2
  37. package/dist/components/chart.js +239 -44
  38. package/dist/components/chat-client-source.d.ts +16 -0
  39. package/dist/components/chat-client-source.js +256 -0
  40. package/dist/components/chat-page.d.ts +9 -8
  41. package/dist/components/chat-page.js +7 -11
  42. package/dist/components/chat-sheet-controller.d.ts +10 -14
  43. package/dist/components/chat-sheet-controller.js +2 -3
  44. package/dist/components/chat-sheet.d.ts +10 -11
  45. package/dist/components/chat-sheet.js +135 -273
  46. package/dist/components/chat.d.ts +22 -8
  47. package/dist/components/chat.js +128 -33
  48. package/dist/components/checkbox-item.d.ts +1 -1
  49. package/dist/components/checkbox-list.d.ts +1 -1
  50. package/dist/components/chip.d.ts +1 -1
  51. package/dist/components/collapsible.d.ts +1 -1
  52. package/dist/components/color-theme.d.ts +1 -1
  53. package/dist/components/column-settings.d.ts +1 -1
  54. package/dist/components/command-menu.d.ts +1 -1
  55. package/dist/components/command-palette.d.ts +3 -3
  56. package/dist/components/command-palette.js +1 -2
  57. package/dist/components/copyable-id.d.ts +22 -5
  58. package/dist/components/copyable-id.js +46 -6
  59. package/dist/components/data-display.d.ts +4 -4
  60. package/dist/components/data-grid.d.ts +10 -10
  61. package/dist/components/date-range-picker.d.ts +1 -1
  62. package/dist/components/date-time.d.ts +1 -1
  63. package/dist/components/dialog-height-context.d.ts +1 -1
  64. package/dist/components/document-viewer.d.ts +2 -2
  65. package/dist/components/drawer.d.ts +6 -6
  66. package/dist/components/dropzone.d.ts +4 -4
  67. package/dist/components/editable-field.d.ts +2 -2
  68. package/dist/components/email-input.d.ts +1 -1
  69. package/dist/components/environment-frame.d.ts +1 -1
  70. package/dist/components/expandable-text.d.ts +1 -1
  71. package/dist/components/feedback-screenshot.d.ts +1 -1
  72. package/dist/components/feedback-sheet.d.ts +18 -3
  73. package/dist/components/feedback-sheet.js +216 -55
  74. package/dist/components/field-context.d.ts +1 -1
  75. package/dist/components/filter-bar.d.ts +3 -3
  76. package/dist/components/filter-bar.js +4 -1
  77. package/dist/components/form-controls.d.ts +4 -4
  78. package/dist/components/form-layout.d.ts +7 -7
  79. package/dist/components/hotkeys.d.ts +2 -2
  80. package/dist/components/icon.d.ts +2 -2
  81. package/dist/components/input.d.ts +4 -4
  82. package/dist/components/input.js +3 -2
  83. package/dist/components/keyboard-shortcuts.d.ts +2 -2
  84. package/dist/components/keycap.d.ts +2 -2
  85. package/dist/components/layout.d.ts +15 -15
  86. package/dist/components/lightbox.d.ts +9 -3
  87. package/dist/components/lightbox.js +11 -8
  88. package/dist/components/link.d.ts +1 -1
  89. package/dist/components/locale.d.ts +32 -2
  90. package/dist/components/locale.js +25 -1
  91. package/dist/components/log-list.d.ts +3 -3
  92. package/dist/components/mention-input.d.ts +2 -2
  93. package/dist/components/menu.d.ts +2 -2
  94. package/dist/components/meter.d.ts +1 -1
  95. package/dist/components/navigation.d.ts +2 -2
  96. package/dist/components/notification-tray.d.ts +1 -1
  97. package/dist/components/overlays.d.ts +4 -4
  98. package/dist/components/page-frame.d.ts +4 -4
  99. package/dist/components/panel.d.ts +4 -4
  100. package/dist/components/profile-header.d.ts +1 -1
  101. package/dist/components/progress.d.ts +1 -1
  102. package/dist/components/project-avatar.d.ts +1 -1
  103. package/dist/components/radio-card.d.ts +2 -2
  104. package/dist/components/record.d.ts +4 -4
  105. package/dist/components/resolved-file-url.d.ts +19 -0
  106. package/dist/components/resolved-file-url.js +49 -0
  107. package/dist/components/scroll-area.d.ts +1 -1
  108. package/dist/components/secret-dialog.d.ts +1 -1
  109. package/dist/components/segmented-bar.d.ts +1 -1
  110. package/dist/components/select.d.ts +4 -4
  111. package/dist/components/settings.d.ts +4 -4
  112. package/dist/components/shell-skeleton.d.ts +1 -1
  113. package/dist/components/shell.d.ts +19 -19
  114. package/dist/components/shell.js +3 -1
  115. package/dist/components/side-panel.d.ts +3 -3
  116. package/dist/components/sidebar.d.ts +6 -6
  117. package/dist/components/site-banner.d.ts +2 -2
  118. package/dist/components/skeleton.d.ts +1 -1
  119. package/dist/components/skeletons.d.ts +5 -5
  120. package/dist/components/stages.d.ts +5 -5
  121. package/dist/components/stat-card.d.ts +3 -3
  122. package/dist/components/status-banner.d.ts +1 -1
  123. package/dist/components/status.d.ts +2 -2
  124. package/dist/components/steps.d.ts +1 -1
  125. package/dist/components/switch.d.ts +1 -1
  126. package/dist/components/tabs.d.ts +8 -8
  127. package/dist/components/theme-customizer.d.ts +2 -2
  128. package/dist/components/toast.d.ts +1 -1
  129. package/dist/components/use-new-version-available.d.ts +6 -0
  130. package/dist/components/use-new-version-available.js +29 -0
  131. package/dist/components/user-chip.d.ts +3 -3
  132. package/dist/components/wizard.d.ts +2 -2
  133. package/dist/feedback/contract.d.ts +136 -136
  134. package/dist/feedback/feedback-controller.d.ts +6 -6
  135. package/dist/feedback/generated/zod.gen.d.ts +28 -28
  136. package/dist/feedback/operator-contract.d.ts +11 -11
  137. package/dist/feedback/operator-controller.d.ts +32 -13
  138. package/dist/feedback/operator-controller.js +44 -11
  139. package/dist/styled-system/styles.css +203 -59
  140. package/dist/theme/tokens.js +17 -8
  141. package/package.json +32 -3
@@ -1,6 +1,5 @@
1
1
  import { type ComponentProps, type ReactNode } from "react";
2
- import type { ChatClient } from "../chat/chat-client.js";
3
- import type { ConversationId } from "../chat/contract.js";
2
+ import type { ChatConversationSummary } from "../chat/conversation-source.js";
4
3
  export { AgentTaskCard, AgentWork, AgentWorkButton, agentTaskAnchorId, jumpToAgentTask, type AgentTask, type AgentTaskAsk, type AgentTaskCardProps, type AgentTaskReply, type AgentWorkButtonProps, type AgentWorkProps, } from "./agent-work.js";
5
4
  export type ChatPageProps = ComponentProps<"div"> & {
6
5
  /** The open thread, such as a wide `ChatConversation`. */
@@ -21,14 +20,16 @@ export type ChatPageProps = ComponentProps<"div"> & {
21
20
  /** Which one column shows under 700px. */
22
21
  phoneView?: "history" | "conversation";
23
22
  });
24
- export declare function ChatPage({ variant, history, children, aside, phoneView, className, ...props }: ChatPageProps): import("@types/react").JSX.Element;
23
+ export declare function ChatPage({ variant, history, children, aside, phoneView, className, ...props }: ChatPageProps): import("react").JSX.Element;
25
24
  export type ChatHistoryProps = {
26
- /** Needs a `QueryClientProvider` above it. */
27
- client: ChatClient;
28
- selectedId: ConversationId | null;
29
- onSelect: (conversationId: ConversationId) => void;
25
+ /** Newest first; `useChatClientConversations` over the lib's chat client, or the app's own. */
26
+ conversations: readonly ChatConversationSummary[];
27
+ /** The list is loading: skeleton rows in its place. */
28
+ loading?: boolean;
29
+ selectedId: string | null;
30
+ onSelect: (conversationId: string) => void;
30
31
  onNew: () => void;
31
32
  className?: string;
32
33
  };
33
34
  /** The caller's conversations, newest first under day labels, with search and New chat. */
34
- export declare function ChatHistory({ client, selectedId, onSelect, onNew, className }: ChatHistoryProps): import("@types/react").JSX.Element;
35
+ export declare function ChatHistory({ conversations, loading, selectedId, onSelect, onNew, className, }: ChatHistoryProps): import("react").JSX.Element;
@@ -5,15 +5,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  * waits on the user) in the `aside` on the right; under 700px the aside goes and the page's
6
6
  * header carries `AgentWorkButton` instead. `variant="conversations"` lays out the
7
7
  * conversation history, the open conversation and an optional context column; `ChatHistory`
8
- * lists the caller's conversations from the chat client, searchable and grouped by day, with New
9
- * chat. Under 700px one column shows at a time, the history or the conversation; the context
8
+ * lists the caller's conversations (from `useChatClientConversations`, or the app's own),
9
+ * searchable and grouped by day, with New chat. Under 700px one column shows at a time, the history or the conversation; the context
10
10
  * column shows from 1000px up.
11
11
  */
12
12
  import { PlusIcon } from "@phosphor-icons/react";
13
13
  import { differenceInCalendarDays, isToday, isYesterday } from "date-fns";
14
14
  import { useState } from "react";
15
15
  import { css, cx } from "#primitives/css";
16
- import { useConversationList } from "../chat/use-conversation-list.js";
17
16
  import { IconButton } from "./button.js";
18
17
  import { icon, Spinner } from "./icon.js";
19
18
  import { SearchField } from "./input.js";
@@ -123,21 +122,18 @@ const emptyLine = css({
123
122
  });
124
123
  const skeletonRow = css({ height: "menu.item", display: "flex", alignItems: "center" });
125
124
  /** The caller's conversations, newest first under day labels, with search and New chat. */
126
- export function ChatHistory({ client, selectedId, onSelect, onNew, className }) {
125
+ export function ChatHistory({ conversations, loading = false, selectedId, onSelect, onNew, className, }) {
127
126
  const [query, setQuery] = useState("");
128
127
  const locale = useCiridaeLocale();
129
128
  const { labels } = locale;
130
- const list = useConversationList(client);
131
- const conversations = list.data?.pages.flatMap((listPage) => listPage.data) ?? [];
132
129
  const needle = query.trim().toLowerCase();
133
130
  const matching = needle
134
131
  ? conversations.filter((conversation) => [conversation.title, conversation.preview].some((text) => text?.toLowerCase().includes(needle)))
135
132
  : conversations;
136
133
  const groups = groupByDay(matching, locale);
137
- return (_jsxs("nav", { className: cx(column, css({ flex: "1" }), className), "aria-label": labels.chat.conversations, children: [_jsxs("div", { className: historyHeader, children: [_jsx(SearchField, { size: "compact", placeholder: labels.common.search, "aria-label": labels.chat.searchConversations, value: query, onChange: (event) => setQuery(event.target.value), onClear: query ? () => setQuery("") : undefined, wrapperClassName: css({ flex: "1" }) }), _jsx(IconButton, { "aria-label": labels.chat.newChat, size: "small", onClick: onNew, children: _jsx(PlusIcon, { className: icon({ size: "small" }) }) })] }), _jsxs("div", { className: historyList, children: [list.isPending &&
138
- Array.from({ length: 6 }, (_, index) => (_jsx("div", { className: skeletonRow, children: _jsx(Skeleton, { shape: "text", style: { width: `${72 - (index % 3) * 12}%` } }) }, index))), !list.isPending && matching.length === 0 && (_jsx("div", { className: emptyLine, children: labels.common.noResults })), groups.map((group) => (_jsxs("section", { children: [_jsx("div", { className: groupLabel, children: group.label }), group.conversations.map((conversation) => {
139
- const status = conversation.latest_response?.status;
140
- return (_jsxs("button", { type: "button", className: historyRow, "aria-current": conversation.id === selectedId ? "page" : undefined, onClick: () => onSelect(conversation.id), children: [_jsx("span", { "data-title": "", children: conversation.title ?? conversation.preview ?? labels.chat.newChat }), status === "queued" || status === "in_progress" ? (_jsx(Spinner, { size: "compact", label: labels.chat.running })) : (_jsx("time", { dateTime: conversation.updated_at, children: formatUpdatedAt(Date.parse(conversation.updated_at), locale) }))] }, conversation.id));
134
+ return (_jsxs("nav", { className: cx(column, css({ flex: "1" }), className), "aria-label": labels.chat.conversations, children: [_jsxs("div", { className: historyHeader, children: [_jsx(SearchField, { size: "compact", placeholder: labels.common.search, "aria-label": labels.chat.searchConversations, value: query, onChange: (event) => setQuery(event.target.value), onClear: query ? () => setQuery("") : undefined, wrapperClassName: css({ flex: "1" }) }), _jsx(IconButton, { "aria-label": labels.chat.newChat, size: "small", onClick: onNew, children: _jsx(PlusIcon, { className: icon({ size: "small" }) }) })] }), _jsxs("div", { className: historyList, children: [loading &&
135
+ Array.from({ length: 6 }, (_, index) => (_jsx("div", { className: skeletonRow, children: _jsx(Skeleton, { shape: "text", style: { width: `${72 - (index % 3) * 12}%` } }) }, index))), !loading && matching.length === 0 && (_jsx("div", { className: emptyLine, children: labels.common.noResults })), groups.map((group) => (_jsxs("section", { children: [_jsx("div", { className: groupLabel, children: group.label }), group.conversations.map((conversation) => {
136
+ return (_jsxs("button", { type: "button", className: historyRow, "aria-current": conversation.id === selectedId ? "page" : undefined, onClick: () => onSelect(conversation.id), children: [_jsx("span", { "data-title": "", children: conversation.title ?? conversation.preview ?? labels.chat.newChat }), conversation.running ? (_jsx(Spinner, { size: "compact", label: labels.chat.running })) : (_jsx("time", { dateTime: new Date(conversation.updatedAt).toISOString(), children: formatUpdatedAt(conversation.updatedAt, locale) }))] }, conversation.id));
141
137
  })] }, group.label)))] })] }));
142
138
  }
143
139
  /** Conversations under Today, Yesterday, Previous 7 days and Earlier, newest first. */
@@ -152,7 +148,7 @@ function groupByDay(conversations, { labels }) {
152
148
  : labels.dates.earlier;
153
149
  const groups = [];
154
150
  for (const conversation of conversations) {
155
- const label = labelOf(Date.parse(conversation.updated_at));
151
+ const label = labelOf(conversation.updatedAt);
156
152
  const group = groups.find((candidate) => candidate.label === label);
157
153
  if (group)
158
154
  group.conversations.push(conversation);
@@ -15,13 +15,13 @@ export type UseChatSheetControllerOptions = {
15
15
  };
16
16
  export declare function useChatSheetController({ hotkey, defaultPlacement, dockedQuery, persistKey, onOpenFullPage, }?: UseChatSheetControllerOptions): {
17
17
  open: boolean;
18
- setOpen: import("@types/react").Dispatch<import("@types/react").SetStateAction<boolean>>;
18
+ setOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
19
19
  toggle: () => void;
20
20
  draft: string;
21
- setDraft: import("@types/react").Dispatch<import("@types/react").SetStateAction<string>>;
22
- conversationId: (string & import("zod/index.cjs").$brand<"ConversationId">) | null;
23
- setConversationId: import("@types/react").Dispatch<import("@types/react").SetStateAction<(string & import("zod/index.cjs").$brand<"ConversationId">) | null>>;
24
- composerRef: import("@types/react").RefObject<HTMLDivElement | null>;
21
+ setDraft: import("react").Dispatch<import("react").SetStateAction<string>>;
22
+ conversationId: (string & import("zod").$brand<"ConversationId">) | null;
23
+ setConversationId: import("react").Dispatch<import("react").SetStateAction<(string & import("zod").$brand<"ConversationId">) | null>>;
24
+ composerRef: import("react").RefObject<HTMLDivElement | null>;
25
25
  focusComposer: (caret?: number) => void;
26
26
  prefill: (text: string) => void;
27
27
  placement: ChatSheetPlacement;
@@ -29,22 +29,18 @@ export declare function useChatSheetController({ hotkey, defaultPlacement, docke
29
29
  openInSheet: () => void;
30
30
  sheetProps: {
31
31
  open: boolean;
32
- onOpenChange: import("@types/react").Dispatch<import("@types/react").SetStateAction<boolean>>;
32
+ onOpenChange: import("react").Dispatch<import("react").SetStateAction<boolean>>;
33
33
  placement: ChatSheetPlacement;
34
34
  onPlacementChange: ((next: ChatSheetPlacement) => void) | undefined;
35
35
  onOpenFullPage: (() => void) | undefined;
36
36
  draft: string;
37
- onDraftChange: import("@types/react").Dispatch<import("@types/react").SetStateAction<string>>;
38
- composerRef: import("@types/react").RefObject<HTMLDivElement | null>;
39
- conversationId: (string & import("zod/index.cjs").$brand<"ConversationId">) | null;
40
- onConversationCreated: (conversation: {
41
- id: ConversationId;
42
- }) => void;
37
+ onDraftChange: import("react").Dispatch<import("react").SetStateAction<string>>;
38
+ composerRef: import("react").RefObject<HTMLDivElement | null>;
43
39
  };
44
40
  pageProps: {
45
41
  draft: string;
46
- onDraftChange: import("@types/react").Dispatch<import("@types/react").SetStateAction<string>>;
47
- composerRef: import("@types/react").RefObject<HTMLDivElement | null>;
42
+ onDraftChange: import("react").Dispatch<import("react").SetStateAction<string>>;
43
+ composerRef: import("react").RefObject<HTMLDivElement | null>;
48
44
  };
49
45
  };
50
46
  export type ChatSheetController = ReturnType<typeof useChatSheetController>;
@@ -4,7 +4,8 @@
4
4
  * sheet and a full chat page. `hotkey` (Cmd/Ctrl+J) opens the sheet on its composer, focuses the
5
5
  * composer when it is open elsewhere, and closes it from the composer. The sheet docks only where
6
6
  * `dockedQuery` matches and is a drawer below it. The app spreads `sheetProps` onto `ChatSheet`
7
- * (with its client, title and suggestions) and `pageProps` onto a full page's `ChatConversation`.
7
+ * (with its source, title and suggestions) and `pageProps` onto a full page's `ChatConversation`;
8
+ * `conversationId` is the open conversation, such as for `useChatClientSource`.
8
9
  */
9
10
  import { useCallback, useRef, useState, useSyncExternalStore } from "react";
10
11
  import { useHotkey } from "./hotkeys.js";
@@ -125,8 +126,6 @@ export function useChatSheetController({ hotkey = "Mod+J", defaultPlacement = "d
125
126
  draft,
126
127
  onDraftChange: setDraft,
127
128
  composerRef,
128
- conversationId,
129
- onConversationCreated: (conversation) => setConversationId(conversation.id),
130
129
  },
131
130
  pageProps: { draft, onDraftChange: setDraft, composerRef },
132
131
  };
@@ -2,8 +2,10 @@ import { type ReactNode, type Ref } from "react";
2
2
  import { type AgentTask, type AgentTaskReply } from "./agent-work.js";
3
3
  import { DrawerBody } from "./drawer.js";
4
4
  import type { MentionMark, MentionTrigger } from "./mention-input.js";
5
- import type { ChatClient } from "../chat/chat-client.js";
6
- import type { Conversation, ConversationId, Mention } from "../chat/contract.js";
5
+ import type { Mention } from "../chat/contract.js";
6
+ import type { ChatConversationSource } from "../chat/conversation-source.js";
7
+ export type { ChatConversationItem, ChatConversationSource, ChatConversationSummary, ChatOutgoingMessage, ChatTurnStatus, } from "../chat/conversation-source.js";
8
+ export { useChatClientConversations, useChatClientSource, type UseChatClientSourceOptions, } from "./chat-client-source.js";
7
9
  export type ChatSheetPlacement = "docked" | "drawer";
8
10
  /** A record the agent reads for this conversation, named in the row under the header. */
9
11
  export type ChatSheetContext = {
@@ -27,13 +29,10 @@ export type ChatConversationProps = {
27
29
  tasks?: readonly AgentTask[];
28
30
  /** The user's approval or answer on a waiting task's card. */
29
31
  onTaskReply?: (task: AgentTask, reply: AgentTaskReply) => void;
30
- /** Needs a `QueryClientProvider` above it. */
31
- client: ChatClient;
32
- /** Null before the first message; the conversation is created with it and reported. */
33
- conversationId: ConversationId | null;
34
- onConversationCreated: (conversation: Conversation) => void;
32
+ /** The conversation: `useChatClientSource` over the lib's chat client, or the app's own. */
33
+ source: ChatConversationSource;
35
34
  placeholder: string;
36
- /** The composer's text, when the host owns it, such as to start a question for the user. */
35
+ /** The composer's text, when the host owns it, such as a draft it keeps per conversation. */
37
36
  draft?: string;
38
37
  onDraftChange?: (draft: string) => void;
39
38
  /** The composer's field, so the host can focus it, such as from its shortcut. */
@@ -68,13 +67,13 @@ export type ChatSheetProps = ChatConversationProps & {
68
67
  /** Shows a header button that moves the conversation to a full page. */
69
68
  onOpenFullPage?: () => void;
70
69
  };
71
- export declare function ChatSheet({ open, onOpenChange, title, context, placement, onPlacementChange, onOpenFullPage, ...conversationProps }: ChatSheetProps): import("@types/react").JSX.Element | null;
70
+ export declare function ChatSheet({ open, onOpenChange, title, context, placement, onPlacementChange, onOpenFullPage, ...conversationProps }: ChatSheetProps): import("react").JSX.Element | null;
72
71
  /**
73
72
  * The thread and the composer: everything that reads or writes the conversation. `layout="wide"`
74
73
  * sets both in one readable column for a full page; the sheet uses `sheet`.
75
74
  */
76
- export declare function ChatConversation({ client, conversationId, onConversationCreated, placeholder, draft, onDraftChange, composerRef, mentions, mentionMark, onMentionSelect, mentionHref, events, assistantName: ownAssistantName, suggestions, copyReplies, variant, tasks, onTaskReply, layout, scrollBody: ScrollBody, }: ChatConversationProps & {
75
+ export declare function ChatConversation({ source, placeholder, draft, onDraftChange, composerRef, mentions, mentionMark, onMentionSelect, mentionHref, events, assistantName: ownAssistantName, suggestions, copyReplies, variant, tasks, onTaskReply, layout, scrollBody: ScrollBody, }: ChatConversationProps & {
77
76
  layout?: "sheet" | "wide";
78
77
  /** The drawer's body inside a `Drawer`, a plain element otherwise. */
79
78
  scrollBody?: typeof DrawerBody | "div";
80
- }): import("@types/react").JSX.Element;
79
+ }): import("react").JSX.Element;