@nextclaw/agent-chat-ui 0.3.0 → 0.3.1

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 (3) hide show
  1. package/dist/index.d.ts +246 -237
  2. package/dist/index.js +3037 -3643
  3. package/package.json +2 -3
package/dist/index.d.ts CHANGED
@@ -1,322 +1,331 @@
1
- import * as react from 'react';
2
- import { ReactNode, RefObject } from 'react';
3
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _$react from "react";
2
+ import { ReactNode, RefObject } from "react";
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
+ //#region src/components/chat/view-models/chat-ui.types.d.ts
5
6
  type ChatTexts = {
6
- slashLoadingLabel: string;
7
- slashSectionLabel: string;
8
- slashEmptyLabel: string;
9
- slashHintLabel: string;
10
- slashSkillHintLabel: string;
11
- sendButtonLabel: string;
12
- stopButtonLabel: string;
7
+ slashLoadingLabel: string;
8
+ slashSectionLabel: string;
9
+ slashEmptyLabel: string;
10
+ slashHintLabel: string;
11
+ slashSkillHintLabel: string;
12
+ sendButtonLabel: string;
13
+ stopButtonLabel: string;
13
14
  };
14
15
  type ChatSlashItem = {
15
- key: string;
16
- title: string;
17
- subtitle: string;
18
- description: string;
19
- detailLines: string[];
20
- value?: string;
16
+ key: string;
17
+ title: string;
18
+ subtitle: string;
19
+ description: string;
20
+ detailLines: string[];
21
+ value?: string;
21
22
  };
22
23
  type ChatSelectedItem = {
23
- key: string;
24
- label: string;
24
+ key: string;
25
+ label: string;
25
26
  };
26
27
  type ChatComposerTokenKind = "skill" | "file";
27
28
  type ChatComposerTextNode = {
28
- id: string;
29
- type: "text";
30
- text: string;
29
+ id: string;
30
+ type: "text";
31
+ text: string;
31
32
  };
32
33
  type ChatComposerTokenNode = {
33
- id: string;
34
- type: "token";
35
- tokenKind: ChatComposerTokenKind;
36
- tokenKey: string;
37
- label: string;
34
+ id: string;
35
+ type: "token";
36
+ tokenKind: ChatComposerTokenKind;
37
+ tokenKey: string;
38
+ label: string;
38
39
  };
39
40
  type ChatComposerNode = ChatComposerTextNode | ChatComposerTokenNode;
40
41
  type ChatComposerSelection = {
41
- start: number;
42
- end: number;
42
+ start: number;
43
+ end: number;
43
44
  };
44
45
  type ChatToolbarIcon = "sparkles" | "brain";
45
46
  type ChatToolbarAccessoryIcon = ChatToolbarIcon | "paperclip";
46
47
  type ChatToolbarSelectOption = {
47
- value: string;
48
- label: string;
49
- description?: string;
48
+ value: string;
49
+ label: string;
50
+ description?: string;
50
51
  };
51
52
  type ChatToolbarSelectGroup = {
52
- key: string;
53
- label?: string;
54
- options: ChatToolbarSelectOption[];
53
+ key: string;
54
+ label?: string;
55
+ options: ChatToolbarSelectOption[];
55
56
  };
56
57
  type ChatToolbarSelect = {
57
- key: string;
58
- value?: string;
59
- placeholder: string;
60
- selectedLabel?: string;
61
- icon?: ChatToolbarIcon;
62
- options: ChatToolbarSelectOption[];
63
- groups?: ChatToolbarSelectGroup[];
64
- disabled?: boolean;
65
- loading?: boolean;
66
- emptyLabel?: string;
67
- onValueChange: (value: string) => void;
58
+ key: string;
59
+ value?: string;
60
+ placeholder: string;
61
+ selectedLabel?: string;
62
+ icon?: ChatToolbarIcon;
63
+ options: ChatToolbarSelectOption[];
64
+ groups?: ChatToolbarSelectGroup[];
65
+ disabled?: boolean;
66
+ loading?: boolean;
67
+ emptyLabel?: string;
68
+ onValueChange: (value: string) => void;
68
69
  };
69
70
  type ChatToolbarAccessory = {
70
- key: string;
71
- label: string;
72
- icon?: ChatToolbarAccessoryIcon;
73
- iconOnly?: boolean;
74
- disabled?: boolean;
75
- tooltip?: string;
76
- onClick?: () => void;
71
+ key: string;
72
+ label: string;
73
+ icon?: ChatToolbarAccessoryIcon;
74
+ iconOnly?: boolean;
75
+ disabled?: boolean;
76
+ tooltip?: string;
77
+ onClick?: () => void;
77
78
  };
78
79
  type ChatSkillPickerOption = {
79
- key: string;
80
- label: string;
81
- description?: string;
82
- badgeLabel?: string;
80
+ key: string;
81
+ label: string;
82
+ description?: string;
83
+ badgeLabel?: string;
83
84
  };
84
85
  type ChatSkillPickerOptionGroup = {
85
- key: string;
86
- label?: string;
87
- options: ChatSkillPickerOption[];
86
+ key: string;
87
+ label?: string;
88
+ options: ChatSkillPickerOption[];
88
89
  };
89
90
  type ChatSkillPickerProps = {
90
- title: string;
91
- searchPlaceholder: string;
92
- emptyLabel: string;
93
- loadingLabel: string;
94
- isLoading?: boolean;
95
- manageLabel?: string;
96
- manageHref?: string;
97
- options: ChatSkillPickerOption[];
98
- groups?: ChatSkillPickerOptionGroup[];
99
- selectedKeys: string[];
100
- onSelectedKeysChange: (next: string[]) => void;
91
+ title: string;
92
+ searchPlaceholder: string;
93
+ emptyLabel: string;
94
+ loadingLabel: string;
95
+ isLoading?: boolean;
96
+ manageLabel?: string;
97
+ manageHref?: string;
98
+ options: ChatSkillPickerOption[];
99
+ groups?: ChatSkillPickerOptionGroup[];
100
+ selectedKeys: string[];
101
+ onSelectedKeysChange: (next: string[]) => void;
101
102
  };
102
103
  type ChatInputBarActionsProps = {
103
- sendError?: string | null;
104
- isSending: boolean;
105
- canStopGeneration: boolean;
106
- sendDisabled: boolean;
107
- stopDisabled: boolean;
108
- stopHint: string;
109
- sendButtonLabel: string;
110
- stopButtonLabel: string;
111
- onSend: () => Promise<void> | void;
112
- onStop: () => Promise<void> | void;
104
+ sendError?: string | null;
105
+ isSending: boolean;
106
+ canStopGeneration: boolean;
107
+ sendDisabled: boolean;
108
+ stopDisabled: boolean;
109
+ stopHint: string;
110
+ sendButtonLabel: string;
111
+ stopButtonLabel: string;
112
+ onSend: () => Promise<void> | void;
113
+ onStop: () => Promise<void> | void;
113
114
  };
114
115
  type ChatInputBarToolbarProps = {
115
- selects: ChatToolbarSelect[];
116
- accessories?: ChatToolbarAccessory[];
117
- skillPicker?: ChatSkillPickerProps | null;
118
- actions: ChatInputBarActionsProps;
116
+ selects: ChatToolbarSelect[];
117
+ accessories?: ChatToolbarAccessory[];
118
+ skillPicker?: ChatSkillPickerProps | null;
119
+ actions: ChatInputBarActionsProps;
119
120
  };
120
121
  type ChatInlineHint = {
121
- tone: "neutral" | "warning";
122
- loading?: boolean;
123
- text?: string;
124
- actionLabel?: string;
125
- onAction?: () => void;
122
+ tone: "neutral" | "warning";
123
+ loading?: boolean;
124
+ text?: string;
125
+ actionLabel?: string;
126
+ onAction?: () => void;
126
127
  };
127
128
  type ChatSlashMenuProps = {
128
- isOpen: boolean;
129
- isLoading: boolean;
130
- items: ChatSlashItem[];
131
- activeIndex: number;
132
- activeItem: ChatSlashItem | null;
133
- texts: Pick<ChatTexts, "slashLoadingLabel" | "slashSectionLabel" | "slashEmptyLabel" | "slashHintLabel" | "slashSkillHintLabel">;
134
- onSelectItem: (item: ChatSlashItem) => void;
135
- onOpenChange: (open: boolean) => void;
136
- onSetActiveIndex: (index: number) => void;
129
+ isOpen: boolean;
130
+ isLoading: boolean;
131
+ items: ChatSlashItem[];
132
+ activeIndex: number;
133
+ activeItem: ChatSlashItem | null;
134
+ texts: Pick<ChatTexts, "slashLoadingLabel" | "slashSectionLabel" | "slashEmptyLabel" | "slashHintLabel" | "slashSkillHintLabel">;
135
+ onSelectItem: (item: ChatSlashItem) => void;
136
+ onOpenChange: (open: boolean) => void;
137
+ onSetActiveIndex: (index: number) => void;
137
138
  };
138
139
  type ChatInputBarProps = {
139
- composer: {
140
- nodes: ChatComposerNode[];
141
- placeholder: string;
142
- disabled: boolean;
143
- onNodesChange: (nodes: ChatComposerNode[]) => void;
144
- onFilesAdd?: (files: File[]) => Promise<void> | void;
145
- onSlashQueryChange?: (query: string | null) => void;
146
- };
147
- slashMenu: Pick<ChatSlashMenuProps, "isLoading" | "items" | "texts"> & {
148
- onSelectItem?: (item: ChatSlashItem) => void;
149
- };
150
- hint?: ChatInlineHint | null;
151
- toolbar: ChatInputBarToolbarProps;
140
+ composer: {
141
+ nodes: ChatComposerNode[];
142
+ placeholder: string;
143
+ disabled: boolean;
144
+ onNodesChange: (nodes: ChatComposerNode[]) => void;
145
+ onFilesAdd?: (files: File[]) => Promise<void> | void;
146
+ onSlashQueryChange?: (query: string | null) => void;
147
+ };
148
+ slashMenu: Pick<ChatSlashMenuProps, "isLoading" | "items" | "texts"> & {
149
+ onSelectItem?: (item: ChatSlashItem) => void;
150
+ };
151
+ hint?: ChatInlineHint | null;
152
+ toolbar: ChatInputBarToolbarProps;
152
153
  };
153
154
  type ChatMessageRole = "user" | "assistant" | "tool" | "system" | "message";
154
155
  type ChatFileOperationLineViewModel = {
155
- kind: "context" | "add" | "remove";
156
- text: string;
157
- oldLineNumber?: number;
158
- newLineNumber?: number;
156
+ kind: "context" | "add" | "remove";
157
+ text: string;
158
+ oldLineNumber?: number;
159
+ newLineNumber?: number;
159
160
  };
160
161
  type ChatFileOperationBlockViewModel = {
161
- key: string;
162
- path: string;
163
- display?: "preview" | "diff";
164
- caption?: string;
165
- lines: ChatFileOperationLineViewModel[];
166
- rawText?: string;
167
- truncated?: boolean;
162
+ key: string;
163
+ path: string;
164
+ display?: "preview" | "diff";
165
+ caption?: string;
166
+ lines: ChatFileOperationLineViewModel[];
167
+ rawText?: string;
168
+ truncated?: boolean;
168
169
  };
169
170
  type ChatToolActionViewModel = {
170
- kind: "open-session";
171
- sessionId: string;
172
- sessionKind: "child" | "session";
173
- agentId?: string;
174
- label?: string;
175
- parentSessionId?: string;
171
+ kind: "open-session";
172
+ sessionId: string;
173
+ sessionKind: "child" | "session";
174
+ agentId?: string;
175
+ label?: string;
176
+ parentSessionId?: string;
176
177
  };
177
178
  type ChatToolPartViewModel = {
178
- kind: "call" | "result";
179
- toolName: string;
180
- agentId?: string;
181
- summary?: string;
182
- inputLabel?: string;
183
- input?: string;
184
- output?: string;
185
- outputData?: unknown;
186
- hasResult: boolean;
187
- statusTone: "running" | "success" | "error" | "cancelled";
188
- statusLabel: string;
189
- titleLabel: string;
190
- outputLabel: string;
191
- emptyLabel: string;
192
- action?: ChatToolActionViewModel;
193
- fileOperation?: {
194
- blocks: ChatFileOperationBlockViewModel[];
195
- };
179
+ kind: "call" | "result";
180
+ toolName: string;
181
+ agentId?: string;
182
+ summary?: string;
183
+ inputLabel?: string;
184
+ input?: string;
185
+ output?: string;
186
+ outputData?: unknown;
187
+ hasResult: boolean;
188
+ statusTone: "running" | "success" | "error" | "cancelled";
189
+ statusLabel: string;
190
+ titleLabel: string;
191
+ outputLabel: string;
192
+ emptyLabel: string;
193
+ action?: ChatToolActionViewModel;
194
+ fileOperation?: {
195
+ blocks: ChatFileOperationBlockViewModel[];
196
+ };
196
197
  };
197
198
  type ChatInlineTokenViewModel = {
198
- kind: string;
199
- key: string;
200
- label: string;
201
- rawText: string;
199
+ kind: string;
200
+ key: string;
201
+ label: string;
202
+ rawText: string;
202
203
  };
203
204
  type ChatInlineContentSegmentViewModel = {
204
- type: "markdown";
205
- text: string;
205
+ type: "markdown";
206
+ text: string;
206
207
  } | {
207
- type: "token";
208
- token: ChatInlineTokenViewModel;
208
+ type: "token";
209
+ token: ChatInlineTokenViewModel;
209
210
  };
210
211
  type ChatMessagePartViewModel = {
211
- type: "markdown";
212
- text: string;
213
- } | {
214
- type: "inline-content";
215
- segments: ChatInlineContentSegmentViewModel[];
212
+ type: "markdown";
213
+ text: string;
216
214
  } | {
217
- type: "reasoning";
218
- text: string;
219
- label: string;
215
+ type: "inline-content";
216
+ segments: ChatInlineContentSegmentViewModel[];
220
217
  } | {
221
- type: "tool-card";
222
- card: ChatToolPartViewModel;
218
+ type: "reasoning";
219
+ text: string;
220
+ label: string;
223
221
  } | {
224
- type: "file";
225
- file: {
226
- label: string;
227
- mimeType: string;
228
- dataUrl?: string;
229
- sizeBytes?: number;
230
- isImage: boolean;
231
- };
222
+ type: "tool-card";
223
+ card: ChatToolPartViewModel;
232
224
  } | {
233
- type: "unknown";
225
+ type: "file";
226
+ file: {
234
227
  label: string;
235
- rawType: string;
236
- text?: string;
228
+ mimeType: string;
229
+ dataUrl?: string;
230
+ sizeBytes?: number;
231
+ isImage: boolean;
232
+ };
233
+ } | {
234
+ type: "unknown";
235
+ label: string;
236
+ rawType: string;
237
+ text?: string;
237
238
  };
238
239
  type ChatMessageViewModel = {
239
- id: string;
240
- role: ChatMessageRole;
241
- roleLabel: string;
242
- timestampLabel: string;
243
- parts: ChatMessagePartViewModel[];
244
- status?: string;
240
+ id: string;
241
+ role: ChatMessageRole;
242
+ roleLabel: string;
243
+ timestampLabel: string;
244
+ parts: ChatMessagePartViewModel[];
245
+ status?: string;
245
246
  };
246
247
  type ChatMessageTexts = {
247
- copyCodeLabel: string;
248
- copiedCodeLabel: string;
249
- copyMessageLabel: string;
250
- copiedMessageLabel: string;
251
- typingLabel: string;
248
+ copyCodeLabel: string;
249
+ copiedCodeLabel: string;
250
+ copyMessageLabel: string;
251
+ copiedMessageLabel: string;
252
+ typingLabel: string;
252
253
  };
253
254
  type ChatMessageListProps = {
254
- messages: ChatMessageViewModel[];
255
- isSending: boolean;
256
- hasAssistantDraft: boolean;
257
- texts: ChatMessageTexts;
258
- className?: string;
259
- onToolAction?: (action: ChatToolActionViewModel) => void;
260
- renderToolAgent?: (agentId: string) => ReactNode;
261
- };
262
-
255
+ messages: ChatMessageViewModel[];
256
+ isSending: boolean;
257
+ hasAssistantDraft: boolean;
258
+ texts: ChatMessageTexts;
259
+ className?: string;
260
+ onToolAction?: (action: ChatToolActionViewModel) => void;
261
+ renderToolAgent?: (agentId: string) => ReactNode;
262
+ };
263
+ //#endregion
264
+ //#region src/components/chat/ui/chat-input-bar/chat-input-bar.d.ts
263
265
  type ChatInputBarHandle = {
264
- insertFileToken: (tokenKey: string, label: string) => void;
265
- insertFileTokens: (tokens: Array<{
266
- tokenKey: string;
267
- label: string;
268
- }>) => void;
269
- focusComposer: () => void;
270
- };
271
- declare const ChatInputBar: react.ForwardRefExoticComponent<ChatInputBarProps & react.RefAttributes<ChatInputBarHandle>>;
272
-
273
- declare function ChatMessageList(props: ChatMessageListProps): react_jsx_runtime.JSX.Element;
274
-
266
+ insertFileToken: (tokenKey: string, label: string) => void;
267
+ insertFileTokens: (tokens: Array<{
268
+ tokenKey: string;
269
+ label: string;
270
+ }>) => void;
271
+ focusComposer: () => void;
272
+ };
273
+ declare const ChatInputBar: _$react.ForwardRefExoticComponent<ChatInputBarProps & _$react.RefAttributes<ChatInputBarHandle>>;
274
+ //#endregion
275
+ //#region src/components/chat/ui/chat-message-list/chat-message-list.d.ts
276
+ declare function ChatMessageList(props: ChatMessageListProps): _$react_jsx_runtime0.JSX.Element;
277
+ //#endregion
278
+ //#region src/components/chat/hooks/use-active-item-scroll.d.ts
275
279
  type UseActiveItemScrollParams = {
276
- containerRef: RefObject<HTMLElement>;
277
- activeIndex: number;
278
- itemCount: number;
279
- isEnabled: boolean;
280
- getItemSelector?: (index: number) => string;
280
+ containerRef: RefObject<HTMLElement>;
281
+ activeIndex: number;
282
+ itemCount: number;
283
+ isEnabled: boolean;
284
+ getItemSelector?: (index: number) => string;
281
285
  };
282
286
  declare function useActiveItemScroll(params: UseActiveItemScrollParams): void;
283
-
287
+ //#endregion
288
+ //#region src/components/chat/hooks/use-copy-feedback.d.ts
284
289
  type UseCopyFeedbackParams = {
285
- text: string;
286
- resetDelayMs?: number;
290
+ text: string;
291
+ resetDelayMs?: number;
287
292
  };
288
293
  type UseCopyFeedbackResult = {
289
- copied: boolean;
290
- copy: () => Promise<void>;
294
+ copied: boolean;
295
+ copy: () => Promise<void>;
291
296
  };
292
297
  declare function useCopyFeedback(params: UseCopyFeedbackParams): UseCopyFeedbackResult;
293
-
298
+ //#endregion
299
+ //#region src/components/chat/hooks/use-element-width.d.ts
294
300
  type UseElementWidthResult<T extends HTMLElement> = {
295
- elementRef: RefObject<T>;
296
- width: number | null;
301
+ elementRef: RefObject<T>;
302
+ width: number | null;
297
303
  };
298
304
  declare function useElementWidth<T extends HTMLElement>(): UseElementWidthResult<T>;
299
-
305
+ //#endregion
306
+ //#region src/components/chat/hooks/use-sticky-bottom-scroll.d.ts
300
307
  type UseStickyBottomScrollParams = {
301
- scrollRef: RefObject<HTMLElement>;
302
- resetKey: string | null;
303
- isLoading: boolean;
304
- hasContent: boolean;
305
- contentVersion: unknown;
306
- stickyThresholdPx?: number;
308
+ scrollRef: RefObject<HTMLElement>;
309
+ resetKey: string | null;
310
+ isLoading: boolean;
311
+ hasContent: boolean;
312
+ contentVersion: unknown;
313
+ stickyThresholdPx?: number;
307
314
  };
308
315
  type UseStickyBottomScrollResult = {
309
- onScroll: () => void;
316
+ onScroll: () => void;
310
317
  };
311
318
  declare function useStickyBottomScroll(params: UseStickyBottomScrollParams): UseStickyBottomScrollResult;
312
-
319
+ //#endregion
320
+ //#region src/components/chat/utils/copy-text.d.ts
313
321
  declare function copyText(text: string): Promise<boolean>;
314
-
322
+ //#endregion
323
+ //#region src/components/chat/ui/chat-input-bar/chat-composer.utils.d.ts
315
324
  declare function createChatComposerTextNode(text?: string): ChatComposerTextNode;
316
325
  declare function createChatComposerTokenNode(params: {
317
- tokenKind: ChatComposerTokenKind;
318
- tokenKey: string;
319
- label: string;
326
+ tokenKind: ChatComposerTokenKind;
327
+ tokenKey: string;
328
+ label: string;
320
329
  }): ChatComposerTokenNode;
321
330
  declare function createEmptyChatComposerNodes(): ChatComposerNode[];
322
331
  declare function createChatComposerNodesFromText(text: string): ChatComposerNode[];
@@ -327,9 +336,9 @@ declare function extractChatComposerTokenKeys(nodes: ChatComposerNode[], tokenKi
327
336
  declare function replaceChatComposerRange(nodes: ChatComposerNode[], start: number, end: number, replacement: ChatComposerNode[]): ChatComposerNode[];
328
337
  declare function removeChatComposerTokenNodes(nodes: ChatComposerNode[], predicate: (node: ChatComposerTokenNode) => boolean): ChatComposerNode[];
329
338
  declare function resolveChatComposerSlashTrigger(nodes: ChatComposerNode[], selection: ChatComposerSelection | null): {
330
- query: string;
331
- start: number;
332
- end: number;
339
+ query: string;
340
+ start: number;
341
+ end: number;
333
342
  } | null;
334
-
335
- export { type ChatComposerNode, type ChatComposerSelection, type ChatComposerTextNode, type ChatComposerTokenKind, type ChatComposerTokenNode, type ChatFileOperationBlockViewModel, type ChatFileOperationLineViewModel, type ChatInlineContentSegmentViewModel, type ChatInlineHint, type ChatInlineTokenViewModel, ChatInputBar, type ChatInputBarActionsProps, type ChatInputBarHandle, type ChatInputBarProps, type ChatInputBarToolbarProps, ChatMessageList, type ChatMessageListProps, type ChatMessagePartViewModel, type ChatMessageRole, type ChatMessageTexts, type ChatMessageViewModel, type ChatSelectedItem, type ChatSkillPickerOption, type ChatSkillPickerProps, type ChatSlashItem, type ChatSlashMenuProps, type ChatTexts, type ChatToolActionViewModel, type ChatToolPartViewModel, type ChatToolbarAccessory, type ChatToolbarAccessoryIcon, type ChatToolbarIcon, type ChatToolbarSelect, type ChatToolbarSelectGroup, type ChatToolbarSelectOption, copyText, createChatComposerNodesFromText, createChatComposerTextNode, createChatComposerTokenNode, createEmptyChatComposerNodes, extractChatComposerTokenKeys, normalizeChatComposerNodes, removeChatComposerTokenNodes, replaceChatComposerRange, resolveChatComposerSlashTrigger, serializeChatComposerDocument, serializeChatComposerPlainText, useActiveItemScroll, useCopyFeedback, useElementWidth, useStickyBottomScroll };
343
+ //#endregion
344
+ export { type ChatComposerNode, type ChatComposerSelection, type ChatComposerTextNode, type ChatComposerTokenKind, type ChatComposerTokenNode, type ChatFileOperationBlockViewModel, type ChatFileOperationLineViewModel, type ChatInlineContentSegmentViewModel, type ChatInlineHint, type ChatInlineTokenViewModel, ChatInputBar, type ChatInputBarActionsProps, type ChatInputBarHandle, type ChatInputBarProps, type ChatInputBarToolbarProps, ChatMessageList, type ChatMessageListProps, type ChatMessagePartViewModel, type ChatMessageRole, type ChatMessageTexts, type ChatMessageViewModel, type ChatSelectedItem, type ChatSkillPickerOption, type ChatSkillPickerProps, type ChatSlashItem, type ChatSlashMenuProps, type ChatTexts, type ChatToolActionViewModel, type ChatToolPartViewModel, type ChatToolbarAccessory, type ChatToolbarAccessoryIcon, type ChatToolbarIcon, type ChatToolbarSelect, type ChatToolbarSelectGroup, type ChatToolbarSelectOption, copyText, createChatComposerNodesFromText, createChatComposerTextNode, createChatComposerTokenNode, createEmptyChatComposerNodes, extractChatComposerTokenKeys, normalizeChatComposerNodes, removeChatComposerTokenNodes, replaceChatComposerRange, resolveChatComposerSlashTrigger, serializeChatComposerDocument, serializeChatComposerPlainText, useActiveItemScroll, useCopyFeedback, useElementWidth, useStickyBottomScroll };