@tagit/ai-client-react 0.6.1 → 0.8.0-beta.10.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.
- package/README.md +185 -11
- package/dist/chat-conversation.d.ts +2 -1
- package/dist/chat-conversation.d.ts.map +1 -1
- package/dist/chat-conversation.js +30 -5
- package/dist/chat-conversation.js.map +1 -1
- package/dist/chat-history.d.ts +6 -0
- package/dist/chat-history.d.ts.map +1 -0
- package/dist/chat-history.js +53 -0
- package/dist/chat-history.js.map +1 -0
- package/dist/chat-tooltip.d.ts +8 -0
- package/dist/chat-tooltip.d.ts.map +1 -0
- package/dist/chat-tooltip.js +5 -0
- package/dist/chat-tooltip.js.map +1 -0
- package/dist/chat-widget.d.ts +17 -1
- package/dist/chat-widget.d.ts.map +1 -1
- package/dist/chat-widget.js +47 -21
- package/dist/chat-widget.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +25 -3
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +156 -1
- package/dist/provider.js.map +1 -1
- package/dist/renderers/ChartRenderer.d.ts +1 -1
- package/dist/renderers/ChartRenderer.d.ts.map +1 -1
- package/dist/renderers/ChartRenderer.js +20 -1
- package/dist/renderers/ChartRenderer.js.map +1 -1
- package/dist/renderers/ContentBlockRenderer.d.ts +1 -1
- package/dist/renderers/ContentBlockRenderer.d.ts.map +1 -1
- package/dist/renderers/MarkdownRenderer.d.ts +2 -2
- package/dist/renderers/MarkdownRenderer.d.ts.map +1 -1
- package/dist/renderers/MarkdownRenderer.js +6 -4
- package/dist/renderers/MarkdownRenderer.js.map +1 -1
- package/package.json +5 -5
- package/src/chat-widget.css +456 -31
package/README.md
CHANGED
|
@@ -131,23 +131,64 @@ Treat the core package as the engine and the React package as the UI layer on to
|
|
|
131
131
|
|
|
132
132
|
## Widget Modes
|
|
133
133
|
|
|
134
|
-
`ChatWidget` supports two
|
|
134
|
+
`ChatWidget` supports two layout APIs:
|
|
135
135
|
|
|
136
|
-
- `
|
|
137
|
-
- `mode
|
|
136
|
+
- `presentation`, the preferred API for new integrations
|
|
137
|
+
- `mode`, the legacy API retained for existing integrations
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
Use `presentation` when embedding the widget into production applications:
|
|
140
|
+
|
|
141
|
+
- `presentation="overlay"` for floating chat over host content
|
|
142
|
+
- `presentation="sidePanel"` for a viewport-docked panel where the host reserves side space
|
|
143
|
+
- `presentation="inline"` for embedded layouts inside the host page
|
|
144
|
+
|
|
145
|
+
The older `mode="overlay"` and `mode="inline"` props continue to work.
|
|
146
|
+
|
|
147
|
+
For legacy inline mode, there are two common host patterns:
|
|
140
148
|
|
|
141
149
|
- `dockMode="page"` for a page-anchored rail
|
|
142
150
|
- `dockMode="viewport"` for a viewport-docked rail that stays fixed to the browser edge
|
|
143
151
|
|
|
144
|
-
Use `
|
|
152
|
+
Use `presentation="sidePanel"` for new viewport sidebar integrations. The SDK keeps the panel pinned to the browser edge, owns resize math, and automatically switches to mobile fullscreen at the configured breakpoint. The host should only reserve page space from the controlled `open` and `width` values.
|
|
153
|
+
|
|
154
|
+
### Choosing a Presentation
|
|
155
|
+
|
|
156
|
+
| Use case | Recommended presentation | Host responsibility |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| Marketing site, support bubble, simple app assistant | `presentation="overlay"` | None, unless you want a backdrop or controlled open state. |
|
|
159
|
+
| Application copilot that should push content aside | `presentation="sidePanel"` | Reserve side space from `open` and `width`; let the SDK render and resize the panel. |
|
|
160
|
+
| Fully embedded chat region inside a page layout | `presentation="inline"` | Provide the parent container size. |
|
|
161
|
+
| Existing integrations already using `mode` | Keep `mode` for now | Migrate to `presentation` when you next touch layout code. |
|
|
162
|
+
|
|
163
|
+
### What The SDK Owns
|
|
164
|
+
|
|
165
|
+
The React package owns:
|
|
166
|
+
|
|
167
|
+
- panel shell rendering
|
|
168
|
+
- viewport docking
|
|
169
|
+
- resize handle behavior
|
|
170
|
+
- mobile fullscreen takeover
|
|
171
|
+
- tab positioning
|
|
172
|
+
- close and new-chat controls
|
|
173
|
+
- stock conversation body
|
|
174
|
+
|
|
175
|
+
The host application should not wrap the widget in invisible resize frames or constrain the panel with `max-width: 100%` when using `presentation="sidePanel"`. Those patterns can break bidirectional resize math.
|
|
176
|
+
|
|
177
|
+
### What The Host Owns
|
|
178
|
+
|
|
179
|
+
The host application owns:
|
|
180
|
+
|
|
181
|
+
- the `AIClientProvider` and configured core client
|
|
182
|
+
- whether the panel is controlled or uncontrolled
|
|
183
|
+
- reserved page space for `presentation="sidePanel"`
|
|
184
|
+
- theme/color values when the default palette is not enough
|
|
185
|
+
- application-specific quick actions, page context, or custom callbacks
|
|
145
186
|
|
|
146
187
|
### Overlay Example
|
|
147
188
|
|
|
148
189
|
```tsx
|
|
149
190
|
<ChatWidget
|
|
150
|
-
|
|
191
|
+
presentation="overlay"
|
|
151
192
|
side="right"
|
|
152
193
|
title="tagIt Assistant"
|
|
153
194
|
showBackdrop
|
|
@@ -155,7 +196,54 @@ Use `dockMode="viewport"` when the widget should behave like a fixed browser sid
|
|
|
155
196
|
/>
|
|
156
197
|
```
|
|
157
198
|
|
|
158
|
-
###
|
|
199
|
+
### Side-Panel Example
|
|
200
|
+
|
|
201
|
+
```tsx
|
|
202
|
+
const [open, setOpen] = useState(false);
|
|
203
|
+
const [width, setWidth] = useState('420px');
|
|
204
|
+
|
|
205
|
+
return (
|
|
206
|
+
<div
|
|
207
|
+
style={{
|
|
208
|
+
minHeight: '100dvh',
|
|
209
|
+
paddingRight: open ? width : 0,
|
|
210
|
+
transition: 'padding-right 180ms ease',
|
|
211
|
+
}}
|
|
212
|
+
>
|
|
213
|
+
<main>
|
|
214
|
+
<AppContent />
|
|
215
|
+
</main>
|
|
216
|
+
|
|
217
|
+
<ChatWidget
|
|
218
|
+
presentation="sidePanel"
|
|
219
|
+
side="right"
|
|
220
|
+
open={open}
|
|
221
|
+
onOpenChange={setOpen}
|
|
222
|
+
width={width}
|
|
223
|
+
onWidthChange={setWidth}
|
|
224
|
+
minWidthPx={360}
|
|
225
|
+
maxWidthPx={720}
|
|
226
|
+
mobileBreakpointPx={768}
|
|
227
|
+
mobilePresentation="fullscreen"
|
|
228
|
+
title="Tacky"
|
|
229
|
+
/>
|
|
230
|
+
</div>
|
|
231
|
+
);
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
For a left-side panel, reserve `paddingLeft` instead of `paddingRight`.
|
|
235
|
+
|
|
236
|
+
### Side-Panel Integration Checklist
|
|
237
|
+
|
|
238
|
+
- Use controlled `open` and `onOpenChange`.
|
|
239
|
+
- Store `width` as a string, for example `'420px'`.
|
|
240
|
+
- Pass the same `width` to the widget and to the host reserved space.
|
|
241
|
+
- Keep `minWidthPx` and `maxWidthPx` aligned with your application layout.
|
|
242
|
+
- Use `mobilePresentation="fullscreen"` unless your mobile layout has a strong reason not to.
|
|
243
|
+
- Do not put the widget inside a parent that clips overflow or limits width when using `presentation="sidePanel"`.
|
|
244
|
+
- Do not implement a separate resize handle in the host application.
|
|
245
|
+
|
|
246
|
+
### Legacy Page-Rail Inline Example
|
|
159
247
|
|
|
160
248
|
```tsx
|
|
161
249
|
<ChatWidget
|
|
@@ -168,7 +256,7 @@ Use `dockMode="viewport"` when the widget should behave like a fixed browser sid
|
|
|
168
256
|
/>
|
|
169
257
|
```
|
|
170
258
|
|
|
171
|
-
### Viewport-Docked Inline Example
|
|
259
|
+
### Legacy Viewport-Docked Inline Example
|
|
172
260
|
|
|
173
261
|
```tsx
|
|
174
262
|
<ChatWidget
|
|
@@ -186,6 +274,8 @@ Use `dockMode="viewport"` when the widget should behave like a fixed browser sid
|
|
|
186
274
|
/>
|
|
187
275
|
```
|
|
188
276
|
|
|
277
|
+
Prefer the new side-panel example for new application copilot integrations. The legacy viewport-docked inline mode remains available for existing apps that already use it.
|
|
278
|
+
|
|
189
279
|
## Widget Configuration Dictionary
|
|
190
280
|
|
|
191
281
|
This section documents the public `ChatWidget` props that matter for integrations. If a field is omitted, the widget uses its built-in default.
|
|
@@ -194,6 +284,7 @@ This section documents the public `ChatWidget` props that matter for integration
|
|
|
194
284
|
|
|
195
285
|
| Field | Type / values | Default | What it does | Example |
|
|
196
286
|
|---|---|---:|---|---|
|
|
287
|
+
| `presentation` | `'overlay' \| 'sidePanel' \| 'inline'` | derived from `mode` | Preferred layout API for new integrations. `sidePanel` is viewport-docked and designed for host-reserved side space. | `presentation="sidePanel"` |
|
|
197
288
|
| `mode` | `'overlay' \| 'inline'` | `overlay` | Chooses between floating chat and embedded chat. | `mode="inline"` |
|
|
198
289
|
| `dockMode` | `'page' \| 'viewport'` | `page` | Controls how inline mode is docked. `page` is a normal page rail. `viewport` pins the rail to the browser edge. | `dockMode="viewport"` |
|
|
199
290
|
| `side` | `'left' \| 'right'` | `right` | Chooses which side the tab and panel live on. | `side="right"` |
|
|
@@ -204,6 +295,8 @@ This section documents the public `ChatWidget` props that matter for integration
|
|
|
204
295
|
| `resizable` | `boolean` | `true` | Enables or disables the drag resize handle. | `resizable={false}` |
|
|
205
296
|
| `minWidthPx` | `number` | `280` | Minimum panel width in pixels when resizing. | `minWidthPx={360}` |
|
|
206
297
|
| `maxWidthPx` | `number` | `undefined` | Maximum panel width in pixels when resizing. | `maxWidthPx={520}` |
|
|
298
|
+
| `mobileBreakpointPx` | `number` | `720` | Width breakpoint where the widget switches to mobile behavior. | `mobileBreakpointPx={768}` |
|
|
299
|
+
| `mobilePresentation` | `'fullscreen' \| 'default'` | `fullscreen` | Controls mobile behavior. `fullscreen` makes the panel a 100vw x 100dvh takeover and disables resize. | `mobilePresentation="fullscreen"` |
|
|
207
300
|
| `tabHeightPercent` | `number` from `0` to `100` | `40` | Positions the tab vertically. `100` is near the top, `0` near the bottom. | `tabHeightPercent={18}` |
|
|
208
301
|
| `className` | `string` | `undefined` | Adds host styling hooks to the widget root. | `className="product-rail"` |
|
|
209
302
|
| `children` | `ReactNode` | `undefined` | Replaces the stock conversation body when intentionally supplied. | `<CustomConversation />` |
|
|
@@ -250,26 +343,107 @@ Use controlled state when the host page needs to:
|
|
|
250
343
|
- coordinate open state with surrounding page layout
|
|
251
344
|
- keep the tab at the browser edge in a viewport-docked integration
|
|
252
345
|
|
|
253
|
-
### Example: controlled
|
|
346
|
+
### Example: controlled side panel
|
|
254
347
|
|
|
255
348
|
```tsx
|
|
256
349
|
const [isOpen, setIsOpen] = useState(true);
|
|
350
|
+
const [width, setWidth] = useState('420px');
|
|
257
351
|
|
|
258
352
|
<ChatWidget
|
|
259
|
-
|
|
260
|
-
dockMode="viewport"
|
|
353
|
+
presentation="sidePanel"
|
|
261
354
|
side="right"
|
|
262
355
|
open={isOpen}
|
|
263
356
|
onOpenChange={setIsOpen}
|
|
357
|
+
width={width}
|
|
358
|
+
onWidthChange={setWidth}
|
|
264
359
|
title="tagIt Assistant"
|
|
265
360
|
tabLabel="AI Client"
|
|
266
361
|
/>
|
|
267
362
|
```
|
|
268
363
|
|
|
364
|
+
## Mobile Behavior
|
|
365
|
+
|
|
366
|
+
By default, the widget switches to fullscreen when the viewport is at or below `mobileBreakpointPx`.
|
|
367
|
+
|
|
368
|
+
Fullscreen mobile behavior means:
|
|
369
|
+
|
|
370
|
+
- the panel uses `100vw` and `100dvh`
|
|
371
|
+
- the panel is anchored to the viewport instead of the page
|
|
372
|
+
- resize is disabled
|
|
373
|
+
- the tab becomes a floating button near the lower-right edge
|
|
374
|
+
- the host should not reserve side-panel layout space for mobile
|
|
375
|
+
|
|
376
|
+
If your host reserves side-panel space, clear that reservation at the same breakpoint:
|
|
377
|
+
|
|
378
|
+
```tsx
|
|
379
|
+
const isMobile = useMediaQuery('(max-width: 768px)');
|
|
380
|
+
|
|
381
|
+
<div style={{ paddingRight: open && !isMobile ? width : 0 }}>
|
|
382
|
+
<AppContent />
|
|
383
|
+
<ChatWidget
|
|
384
|
+
presentation="sidePanel"
|
|
385
|
+
open={open}
|
|
386
|
+
onOpenChange={setOpen}
|
|
387
|
+
width={width}
|
|
388
|
+
onWidthChange={setWidth}
|
|
389
|
+
mobileBreakpointPx={768}
|
|
390
|
+
/>
|
|
391
|
+
</div>
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
## Troubleshooting Layout
|
|
395
|
+
|
|
396
|
+
| Symptom | Likely cause | Fix |
|
|
397
|
+
|---|---|---|
|
|
398
|
+
| Panel opens but leaves a blank rail after closing | Host always reserves width instead of checking `open`. | Reserve side space only when `open` is true and not mobile. |
|
|
399
|
+
| Panel can shrink but not grow | Parent container is constraining width. | Use `presentation="sidePanel"` and avoid parent `max-width: 100%` constraints around the widget. |
|
|
400
|
+
| Panel scrolls with the page | The host is using an embedded/inline layout when it wanted a viewport panel. | Use `presentation="sidePanel"` or `presentation="overlay"`. |
|
|
401
|
+
| Mobile inherits desktop side-panel behavior | Host is not clearing reserved side space at the mobile breakpoint. | Use `mobilePresentation="fullscreen"` and clear host padding/margin on mobile. |
|
|
402
|
+
| Backdrop shows in a side panel | `presentation="overlay"` is being used. | Use `presentation="sidePanel"` for app copilots that push content aside. |
|
|
403
|
+
|
|
269
404
|
## Conversation Action Options
|
|
270
405
|
|
|
271
406
|
The `useConversation()` hook exposes `sendMessage()`, `retry()`, `cancel()`, `clearHistory()`, and `reEditMessage()`. The request option bag belongs to the core client and is documented in [`@tagit/ai-client-core`](../ai-client-core/README.md).
|
|
272
407
|
|
|
408
|
+
## Conversation History UI
|
|
409
|
+
|
|
410
|
+
When `conversationHistory.enabled` is configured on the core client, the stock React UI adds first-class history controls:
|
|
411
|
+
|
|
412
|
+
- the widget header shows a conversation history button
|
|
413
|
+
- the empty state shows up to five recent conversations
|
|
414
|
+
- users can load a previous conversation
|
|
415
|
+
- users can rename conversations
|
|
416
|
+
- users can archive conversations
|
|
417
|
+
- the New Chat button starts a new durable conversation instead of only clearing local state
|
|
418
|
+
|
|
419
|
+
```tsx
|
|
420
|
+
const client = new AIClient(
|
|
421
|
+
createDefaultConfig('uc-platform-assistant-v2', 'https://ai.tagit.live', {
|
|
422
|
+
user: {
|
|
423
|
+
entityId: currentUser.uid,
|
|
424
|
+
userId: currentUser.uid,
|
|
425
|
+
},
|
|
426
|
+
conversationHistory: {
|
|
427
|
+
enabled: true,
|
|
428
|
+
recentLimit: 5,
|
|
429
|
+
surface: window.location.pathname,
|
|
430
|
+
source: 'platform',
|
|
431
|
+
},
|
|
432
|
+
})
|
|
433
|
+
);
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
For custom shells, use `useConversationHistory()` to render your own list, picker, rename action, archive action, or recent-conversation empty state.
|
|
437
|
+
|
|
438
|
+
```tsx
|
|
439
|
+
const history = useConversationHistory({ limit: 5 });
|
|
440
|
+
|
|
441
|
+
await history.loadConversation(conversationId);
|
|
442
|
+
await history.renameConversation(conversationId, 'Campaign planning');
|
|
443
|
+
await history.archiveConversation(conversationId);
|
|
444
|
+
await history.startNewConversation('New chat');
|
|
445
|
+
```
|
|
446
|
+
|
|
273
447
|
## `ChatConversation`
|
|
274
448
|
|
|
275
449
|
Use `ChatConversation` when you want a lighter conversation surface and you are already handling the shell yourself.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
export interface ChatConversationProps {
|
|
2
3
|
className?: string;
|
|
3
4
|
}
|
|
@@ -6,5 +7,5 @@ export interface ChatConversationProps {
|
|
|
6
7
|
* This renders the default welcome state, message list, tool call output,
|
|
7
8
|
* streaming indicator, inline errors, and composer footer.
|
|
8
9
|
*/
|
|
9
|
-
export declare function ChatConversation({ className }: ChatConversationProps):
|
|
10
|
+
export declare function ChatConversation({ className }: ChatConversationProps): React.JSX.Element;
|
|
10
11
|
//# sourceMappingURL=chat-conversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-conversation.d.ts","sourceRoot":"","sources":["../src/chat-conversation.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-conversation.d.ts","sourceRoot":"","sources":["../src/chat-conversation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AAuCzF,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,qBAgWpE"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
-
import { Check, Copy, Pencil, RotateCcw } from 'lucide-react';
|
|
4
|
-
import { useConversation } from './provider.js';
|
|
3
|
+
import { Check, Copy, MessageSquare, Pencil, RotateCcw } from 'lucide-react';
|
|
4
|
+
import { useConversation, useConversationHistory } from './provider.js';
|
|
5
|
+
import { ChatTooltip } from './chat-tooltip.js';
|
|
5
6
|
import { ContentBlockRenderer } from './renderers/ContentBlockRenderer.js';
|
|
6
7
|
function MessageCopyButton({ text }) {
|
|
7
8
|
const [copied, setCopied] = useState(false);
|
|
@@ -19,7 +20,27 @@ function MessageCopyButton({ text }) {
|
|
|
19
20
|
// Clipboard access is best-effort.
|
|
20
21
|
});
|
|
21
22
|
};
|
|
22
|
-
return (_jsx("button", { type: "button", className: "tagIt-chat-message-action-btn", onClick: handleCopy, "data-copied": copied ? '' : undefined, "aria-label": copied ? 'Copied' : 'Copy message',
|
|
23
|
+
return (_jsx(ChatTooltip, { label: copied ? 'Copied' : 'Copy', children: _jsx("button", { type: "button", className: "tagIt-chat-message-action-btn", onClick: handleCopy, "data-copied": copied ? '' : undefined, "aria-label": copied ? 'Copied' : 'Copy message', children: copied ? _jsx(Check, { size: 16 }) : _jsx(Copy, { size: 16 }) }) }));
|
|
24
|
+
}
|
|
25
|
+
function formatConversationTimestamp(summary) {
|
|
26
|
+
const raw = summary.lastMessageAt || summary.updatedAt || summary.createdAt;
|
|
27
|
+
if (!raw)
|
|
28
|
+
return '';
|
|
29
|
+
const date = new Date(raw);
|
|
30
|
+
if (Number.isNaN(date.getTime()))
|
|
31
|
+
return '';
|
|
32
|
+
return new Intl.DateTimeFormat(undefined, {
|
|
33
|
+
month: 'short',
|
|
34
|
+
day: 'numeric',
|
|
35
|
+
hour: 'numeric',
|
|
36
|
+
minute: '2-digit',
|
|
37
|
+
}).format(date);
|
|
38
|
+
}
|
|
39
|
+
function ConversationPreview({ conversation, onLoad, }) {
|
|
40
|
+
const label = conversation.title?.trim() || 'Untitled conversation';
|
|
41
|
+
const preview = conversation.lastMessagePreview?.trim();
|
|
42
|
+
const timestamp = formatConversationTimestamp(conversation);
|
|
43
|
+
return (_jsxs("button", { type: "button", className: "tagIt-chat-recent-conversation", onClick: () => onLoad(conversation.conversationId), children: [_jsx("span", { className: "tagIt-chat-recent-icon", "aria-hidden": true, children: _jsx(MessageSquare, { size: 15 }) }), _jsxs("span", { className: "tagIt-chat-recent-main", children: [_jsx("span", { className: "tagIt-chat-recent-title", children: label }), preview ? _jsx("span", { className: "tagIt-chat-recent-preview", children: preview }) : null] }), timestamp ? _jsx("span", { className: "tagIt-chat-recent-time", children: timestamp }) : null] }));
|
|
23
44
|
}
|
|
24
45
|
/**
|
|
25
46
|
* Fully self-contained chat surface for the TagIt AI client.
|
|
@@ -28,6 +49,7 @@ function MessageCopyButton({ text }) {
|
|
|
28
49
|
*/
|
|
29
50
|
export function ChatConversation({ className }) {
|
|
30
51
|
const { messages, sendMessage, cancel, retry, reEditMessage, isLoading, isStreaming, error, lastError, } = useConversation();
|
|
52
|
+
const conversationHistory = useConversationHistory({ limit: 5 });
|
|
31
53
|
const [inputValue, setInputValue] = useState('');
|
|
32
54
|
const [isReEditMode, setIsReEditMode] = useState(false);
|
|
33
55
|
const textareaRef = useRef(null);
|
|
@@ -148,10 +170,13 @@ export function ChatConversation({ className }) {
|
|
|
148
170
|
const lastMsg = messages.length > 0 ? messages[messages.length - 1] : null;
|
|
149
171
|
const showTypingIndicator = isLoading && !(isStreaming && lastMsg?.role === 'assistant');
|
|
150
172
|
const showError = Boolean(error) && !isLoading && lastError?.code !== 'CANCELED';
|
|
151
|
-
|
|
173
|
+
const loadingConversation = conversationHistory.conversations.find((conversation) => conversation.conversationId === conversationHistory.loadingConversationId);
|
|
174
|
+
return (_jsxs("div", { className: ['tagIt-chat-conversation', className || ''].join(' ').trim(), children: [_jsxs("div", { className: "tagIt-chat-viewport", ref: messagesAreaRef, onScroll: handleScroll, role: "log", "aria-label": "Conversation", "aria-live": "polite", children: [isEmpty && (_jsxs("div", { className: "tagIt-chat-empty", children: [_jsx("div", { className: "tagIt-chat-empty-icon", "aria-hidden": "true", children: "Chat" }), _jsx("h2", { className: "tagIt-chat-empty-title", children: "How can I help?" }), _jsx("p", { className: "tagIt-chat-empty-subtitle", children: "Ask me anything to get started." }), conversationHistory.enabled && conversationHistory.conversations.length > 0 ? (_jsxs("div", { className: "tagIt-chat-recent-list", "aria-label": "Recent conversations", children: [_jsx("div", { className: "tagIt-chat-recent-heading", children: "Previous Chats" }), conversationHistory.conversations.slice(0, 5).map((conversation) => (_jsx(ConversationPreview, { conversation: conversation, onLoad: (conversationId) => {
|
|
175
|
+
void conversationHistory.loadConversation(conversationId);
|
|
176
|
+
} }, conversation.conversationId))), conversationHistory.loadingConversationId ? (_jsxs("div", { className: "tagIt-chat-loading-inline", role: "status", "aria-live": "polite", children: [_jsx("span", { className: "tagIt-chat-loading-spinner", "aria-hidden": true }), _jsxs("span", { children: ["Loading ", loadingConversation?.title || 'conversation', "..."] }), _jsx("button", { type: "button", onClick: conversationHistory.cancelLoadConversation, children: "Cancel" })] })) : null] })) : null] })), messages.map((message, index) => {
|
|
152
177
|
const isLastMsg = index === messages.length - 1;
|
|
153
178
|
const isLastUserMsg = message.role === 'user' && isLastMsg;
|
|
154
|
-
return (_jsx("div", { ref: isLastUserMsg ? (el) => { lastUserMsgRef.current = el; } : undefined, className: "tagIt-chat-message", "data-role": message.role, children: _jsx("div", { className: "tagIt-chat-message-body", children: message.role === 'user' ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "tagIt-chat-message-bubble", children: _jsx(ContentBlockRenderer, { role: message.role, content: message.content }) }), !isLoading && (_jsxs("div", { className: "tagIt-chat-message-actions", children: [_jsx(MessageCopyButton, { text: message.content }), _jsx("button", { type: "button", className: "tagIt-chat-message-action-btn", onClick: () => handleReEdit(message.id), "aria-label": "Edit this message",
|
|
179
|
+
return (_jsx("div", { ref: isLastUserMsg ? (el) => { lastUserMsgRef.current = el; } : undefined, className: "tagIt-chat-message", "data-role": message.role, children: _jsx("div", { className: "tagIt-chat-message-body", children: message.role === 'user' ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "tagIt-chat-message-bubble", children: _jsx(ContentBlockRenderer, { role: message.role, content: message.content }) }), !isLoading && (_jsxs("div", { className: "tagIt-chat-message-actions", children: [_jsx(MessageCopyButton, { text: message.content }), _jsx(ChatTooltip, { label: "Edit", children: _jsx("button", { type: "button", className: "tagIt-chat-message-action-btn", onClick: () => handleReEdit(message.id), "aria-label": "Edit this message", children: _jsx(Pencil, { size: 16 }) }) })] }))] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "tagIt-chat-assistant-content", children: _jsx(ContentBlockRenderer, { role: message.role, content: message.content, showStreamingCursor: isStreaming && isLastMsg }) }), message.toolCalls && message.toolCalls.length > 0 && (_jsx("div", { className: "tagIt-chat-tool-calls", children: message.toolCalls.map((tool, idx) => (_jsxs("div", { className: "tagIt-chat-tool-call", children: [_jsx("span", { className: "tagIt-chat-tool-name", children: tool.name }), tool.status && (_jsx("span", { className: `tagIt-chat-tool-status tagIt-chat-tool-status-${tool.status}`, children: tool.status }))] }, idx))) })), !isLoading && !isStreaming && (_jsxs("div", { className: "tagIt-chat-message-actions", children: [_jsx(MessageCopyButton, { text: message.content }), isLastMsg && (_jsx(ChatTooltip, { label: "Regenerate", children: _jsx("button", { type: "button", className: "tagIt-chat-message-action-btn", onClick: handleRetry, "aria-label": "Regenerate response", children: _jsx(RotateCcw, { size: 16 }) }) }))] }))] })) }) }, message.id));
|
|
155
180
|
}), showTypingIndicator && (_jsx("div", { className: "tagIt-chat-message", "data-role": "assistant", "aria-label": "Assistant is typing", children: _jsx("div", { className: "tagIt-chat-message-body", children: _jsxs("div", { className: "tagIt-chat-typing-indicator", "aria-hidden": "true", children: [_jsx("span", {}), _jsx("span", {}), _jsx("span", {})] }) }) })), showError && (_jsxs("div", { className: "tagIt-chat-error-row", role: "alert", children: [_jsx("span", { className: "tagIt-chat-error-text", children: "Something went wrong - please try again." }), _jsx("button", { type: "button", className: "tagIt-chat-error-retry", onClick: handleRetry, children: "Retry" })] })), messages.length > 0 && _jsx("div", { className: "tagIt-chat-viewport-slack", "aria-hidden": "true" }), _jsx("div", { ref: scrollEndRef })] }), _jsx("div", { className: "tagIt-chat-scroll-to-bottom-anchor", children: _jsx("div", { className: "tagIt-chat-scroll-to-bottom-wrap", "data-visible": !isAtBottom ? '' : undefined, "aria-hidden": isAtBottom, children: _jsx("button", { type: "button", className: "tagIt-chat-scroll-to-bottom", onClick: scrollToBottom, "aria-label": "Scroll to bottom", tabIndex: isAtBottom ? -1 : 0, children: "v" }) }) }), _jsx("form", { onSubmit: handleSubmit, className: "tagIt-chat-input-form", children: _jsxs("div", { className: "tagIt-chat-input-wrap", children: [_jsx("textarea", { ref: textareaRef, value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, placeholder: "Type your message...", disabled: isLoading, className: "tagIt-chat-input", rows: 3, autoFocus: true }), _jsx("div", { className: "tagIt-chat-input-actions", children: isLoading ? (_jsx("button", { type: "button", onClick: () => cancel(), className: "tagIt-chat-stop-button", "aria-label": "Stop generating", children: "Stop" })) : (_jsx("button", { type: "submit", disabled: !inputValue.trim(), className: "tagIt-chat-send-button", "aria-label": "Send message", children: "Send" })) })] }) })] }));
|
|
156
181
|
}
|
|
157
182
|
//# sourceMappingURL=chat-conversation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-conversation.js","sourceRoot":"","sources":["../src/chat-conversation.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-conversation.js","sourceRoot":"","sources":["../src/chat-conversation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-history.d.ts","sourceRoot":"","sources":["../src/chat-history.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAyHxC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,qBAAqB,qBAuFlE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Archive, Check, History, Pencil, RefreshCw, X } from 'lucide-react';
|
|
4
|
+
import { useConversationHistory } from './provider.js';
|
|
5
|
+
import { ChatTooltip } from './chat-tooltip.js';
|
|
6
|
+
function formatHistoryDate(summary) {
|
|
7
|
+
const raw = summary.lastMessageAt || summary.updatedAt || summary.createdAt;
|
|
8
|
+
if (!raw)
|
|
9
|
+
return 'No activity yet';
|
|
10
|
+
const date = new Date(raw);
|
|
11
|
+
if (Number.isNaN(date.getTime()))
|
|
12
|
+
return 'No activity yet';
|
|
13
|
+
return new Intl.DateTimeFormat(undefined, {
|
|
14
|
+
month: 'short',
|
|
15
|
+
day: 'numeric',
|
|
16
|
+
year: 'numeric',
|
|
17
|
+
hour: 'numeric',
|
|
18
|
+
minute: '2-digit',
|
|
19
|
+
}).format(date);
|
|
20
|
+
}
|
|
21
|
+
function ConversationHistoryRow({ conversation, active, allowRename, allowArchive, onLoad, onRename, onArchive, }) {
|
|
22
|
+
const [isRenaming, setIsRenaming] = useState(false);
|
|
23
|
+
const [title, setTitle] = useState(conversation.title || '');
|
|
24
|
+
const displayTitle = conversation.title?.trim() || 'Untitled conversation';
|
|
25
|
+
const preview = conversation.lastMessagePreview?.trim();
|
|
26
|
+
return (_jsxs("div", { className: "tagIt-chat-history-row", "data-active": active ? '' : undefined, children: [_jsxs("button", { type: "button", className: "tagIt-chat-history-row-main", onClick: () => onLoad(conversation.conversationId), disabled: active || isRenaming, children: [_jsx("span", { className: "tagIt-chat-history-row-title", children: displayTitle }), preview ? _jsx("span", { className: "tagIt-chat-history-row-preview", children: preview }) : null, _jsx("span", { className: "tagIt-chat-history-row-meta", children: active ? 'Current conversation' : formatHistoryDate(conversation) })] }), isRenaming ? (_jsxs("form", { className: "tagIt-chat-history-rename", onSubmit: (event) => {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
const nextTitle = title.trim();
|
|
29
|
+
if (!nextTitle)
|
|
30
|
+
return;
|
|
31
|
+
onRename(conversation.conversationId, nextTitle);
|
|
32
|
+
setIsRenaming(false);
|
|
33
|
+
}, children: [_jsx("input", { value: title, onChange: (event) => setTitle(event.target.value), "aria-label": "Conversation title" }), _jsx(ChatTooltip, { label: "Save title", children: _jsx("button", { type: "submit", "aria-label": "Save title", children: _jsx(Check, { size: 16 }) }) }), _jsx(ChatTooltip, { label: "Cancel", children: _jsx("button", { type: "button", "aria-label": "Cancel rename", onClick: () => {
|
|
34
|
+
setTitle(conversation.title || '');
|
|
35
|
+
setIsRenaming(false);
|
|
36
|
+
}, children: _jsx(X, { size: 16 }) }) })] })) : (_jsxs("div", { className: "tagIt-chat-history-row-actions", children: [allowRename ? (_jsx(ChatTooltip, { label: "Rename", children: _jsx("button", { type: "button", "aria-label": "Rename conversation", onClick: () => setIsRenaming(true), children: _jsx(Pencil, { size: 16 }) }) })) : null, allowArchive && !active ? (_jsx(ChatTooltip, { label: "Archive", children: _jsx("button", { type: "button", "aria-label": "Archive conversation", onClick: () => onArchive(conversation.conversationId), children: _jsx(Archive, { size: 16 }) }) })) : null] }))] }));
|
|
37
|
+
}
|
|
38
|
+
export function ChatHistoryPanel({ onClose }) {
|
|
39
|
+
const history = useConversationHistory();
|
|
40
|
+
const allowRename = true;
|
|
41
|
+
const allowArchive = true;
|
|
42
|
+
const loadingConversation = history.conversations.find((conversation) => conversation.conversationId === history.loadingConversationId);
|
|
43
|
+
return (_jsxs("section", { className: "tagIt-chat-history-panel", "aria-label": "Conversation history", children: [_jsxs("header", { className: "tagIt-chat-history-header", children: [_jsxs("div", { children: [_jsxs("div", { className: "tagIt-chat-history-eyebrow", children: [_jsx(History, { size: 15 }), "History"] }), _jsx("h3", { children: "Conversations" })] }), _jsxs("div", { className: "tagIt-chat-history-header-actions", children: [_jsx(ChatTooltip, { label: "Refresh", children: _jsx("button", { type: "button", "aria-label": "Refresh conversations", onClick: () => {
|
|
44
|
+
void history.refresh();
|
|
45
|
+
}, children: _jsx(RefreshCw, { size: 17 }) }) }), _jsx(ChatTooltip, { label: "Close", children: _jsx("button", { type: "button", "aria-label": "Close history", onClick: onClose, children: _jsx(X, { size: 18 }) }) })] })] }), history.error ? _jsx("div", { className: "tagIt-chat-history-error", children: history.error }) : null, history.loadingConversationId ? (_jsx("div", { className: "tagIt-chat-loading-overlay", role: "status", "aria-live": "polite", children: _jsxs("div", { className: "tagIt-chat-loading-card", children: [_jsx("span", { className: "tagIt-chat-loading-spinner", "aria-hidden": true }), _jsxs("div", { children: [_jsx("strong", { children: "Loading conversation" }), _jsx("span", { children: loadingConversation?.title || 'Fetching saved messages...' })] }), _jsx("button", { type: "button", onClick: history.cancelLoadConversation, children: "Cancel" })] }) })) : null, !history.enabled ? (_jsx("div", { className: "tagIt-chat-history-empty", children: "Conversation history is not enabled for this assistant." })) : history.isLoading && history.conversations.length === 0 ? (_jsx("div", { className: "tagIt-chat-history-empty", children: "Loading conversations..." })) : history.conversations.length === 0 ? (_jsx("div", { className: "tagIt-chat-history-empty", children: "No saved conversations yet." })) : (_jsx("div", { className: "tagIt-chat-history-list", children: history.conversations.map((conversation) => (_jsx(ConversationHistoryRow, { conversation: conversation, active: conversation.conversationId === history.activeConversationId, allowRename: allowRename, allowArchive: allowArchive, onLoad: (conversationId) => {
|
|
46
|
+
void history.loadConversation(conversationId).then(onClose);
|
|
47
|
+
}, onRename: (conversationId, title) => {
|
|
48
|
+
void history.renameConversation(conversationId, title);
|
|
49
|
+
}, onArchive: (conversationId) => {
|
|
50
|
+
void history.archiveConversation(conversationId);
|
|
51
|
+
} }, conversation.conversationId))) }))] }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=chat-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-history.js","sourceRoot":"","sources":["../src/chat-history.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ChatTooltipProps {
|
|
3
|
+
label: string;
|
|
4
|
+
side?: 'left' | 'right';
|
|
5
|
+
children: React.ReactElement;
|
|
6
|
+
}
|
|
7
|
+
export declare function ChatTooltip({ label, side, children }: ChatTooltipProps): React.JSX.Element;
|
|
8
|
+
//# sourceMappingURL=chat-tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-tooltip.d.ts","sourceRoot":"","sources":["../src/chat-tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,IAAa,EAAE,QAAQ,EAAE,EAAE,gBAAgB,qBAS/E"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ChatTooltip({ label, side = 'left', children }) {
|
|
3
|
+
return (_jsxs("span", { className: "tagIt-chat-tooltip-wrap", "data-side": side, children: [children, _jsx("span", { className: "tagIt-chat-tooltip", role: "tooltip", children: label })] }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=chat-tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-tooltip.js","sourceRoot":"","sources":["../src/chat-tooltip.tsx"],"names":[],"mappings":";AAQA,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAoB;IAC9E,OAAO,CACL,gBAAM,SAAS,EAAC,yBAAyB,eAAY,IAAI,aACtD,QAAQ,EACT,eAAM,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAC,SAAS,YAChD,KAAK,GACD,IACF,CACR,CAAC;AACJ,CAAC"}
|
package/dist/chat-widget.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export type ChatWidgetMode = 'overlay' | 'inline';
|
|
2
|
+
export type ChatWidgetPresentation = 'overlay' | 'sidePanel' | 'inline';
|
|
3
|
+
export type ChatWidgetMobilePresentation = 'fullscreen' | 'default';
|
|
2
4
|
export type ChatWidgetSide = 'left' | 'right';
|
|
3
5
|
export type ChatWidgetTheme = 'light' | 'dark' | 'system';
|
|
4
6
|
export type ChatColorScheme = {
|
|
@@ -22,6 +24,18 @@ export type ChatColorScheme = {
|
|
|
22
24
|
scrim?: string;
|
|
23
25
|
};
|
|
24
26
|
export type ChatWidgetProps = {
|
|
27
|
+
/**
|
|
28
|
+
* Preferred layout API for new integrations.
|
|
29
|
+
*
|
|
30
|
+
* - `overlay`: viewport-docked floating panel over host content.
|
|
31
|
+
* - `sidePanel`: viewport-docked panel intended for hosts that reserve side space.
|
|
32
|
+
* - `inline`: embedded panel inside the host layout.
|
|
33
|
+
*/
|
|
34
|
+
presentation?: ChatWidgetPresentation;
|
|
35
|
+
/**
|
|
36
|
+
* Legacy layout API retained for existing integrations.
|
|
37
|
+
* New side-panel integrations should prefer `presentation="sidePanel"`.
|
|
38
|
+
*/
|
|
25
39
|
mode?: ChatWidgetMode;
|
|
26
40
|
dockMode?: 'page' | 'viewport';
|
|
27
41
|
side?: ChatWidgetSide;
|
|
@@ -44,11 +58,13 @@ export type ChatWidgetProps = {
|
|
|
44
58
|
minWidthPx?: number;
|
|
45
59
|
maxWidthPx?: number;
|
|
46
60
|
onWidthChange?: (width: string) => void;
|
|
61
|
+
mobileBreakpointPx?: number;
|
|
62
|
+
mobilePresentation?: ChatWidgetMobilePresentation;
|
|
47
63
|
showBackdrop?: boolean;
|
|
48
64
|
closeOnOutsideClick?: boolean;
|
|
49
65
|
onNewChat?: () => void;
|
|
50
66
|
className?: string;
|
|
51
67
|
children?: React.ReactNode;
|
|
52
68
|
};
|
|
53
|
-
export declare function ChatWidget({ mode, dockMode, side, title, titleIconUrl, open, defaultOpen, onOpenChange, theme, colorScheme, colorSchemes, tabIcon, tabLabel, tabTooltipOpen, tabTooltipClose, tabIconUrl, tabHeightPercent, width, resizable, minWidthPx, maxWidthPx, onWidthChange, showBackdrop, closeOnOutsideClick, onNewChat, className, children, }: ChatWidgetProps): import("react
|
|
69
|
+
export declare function ChatWidget({ presentation, mode, dockMode, side, title, titleIconUrl, open, defaultOpen, onOpenChange, theme, colorScheme, colorSchemes, tabIcon, tabLabel, tabTooltipOpen, tabTooltipClose, tabIconUrl, tabHeightPercent, width, resizable, minWidthPx, maxWidthPx, onWidthChange, mobileBreakpointPx, mobilePresentation, showBackdrop, closeOnOutsideClick, onNewChat, className, children, }: ChatWidgetProps): import("react").JSX.Element;
|
|
54
70
|
//# sourceMappingURL=chat-widget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-widget.d.ts","sourceRoot":"","sources":["../src/chat-widget.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-widget.d.ts","sourceRoot":"","sources":["../src/chat-widget.tsx"],"names":[],"mappings":"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"}
|