@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.
Files changed (37) hide show
  1. package/README.md +185 -11
  2. package/dist/chat-conversation.d.ts +2 -1
  3. package/dist/chat-conversation.d.ts.map +1 -1
  4. package/dist/chat-conversation.js +30 -5
  5. package/dist/chat-conversation.js.map +1 -1
  6. package/dist/chat-history.d.ts +6 -0
  7. package/dist/chat-history.d.ts.map +1 -0
  8. package/dist/chat-history.js +53 -0
  9. package/dist/chat-history.js.map +1 -0
  10. package/dist/chat-tooltip.d.ts +8 -0
  11. package/dist/chat-tooltip.d.ts.map +1 -0
  12. package/dist/chat-tooltip.js +5 -0
  13. package/dist/chat-tooltip.js.map +1 -0
  14. package/dist/chat-widget.d.ts +17 -1
  15. package/dist/chat-widget.d.ts.map +1 -1
  16. package/dist/chat-widget.js +47 -21
  17. package/dist/chat-widget.js.map +1 -1
  18. package/dist/index.d.ts +3 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/provider.d.ts +25 -3
  23. package/dist/provider.d.ts.map +1 -1
  24. package/dist/provider.js +156 -1
  25. package/dist/provider.js.map +1 -1
  26. package/dist/renderers/ChartRenderer.d.ts +1 -1
  27. package/dist/renderers/ChartRenderer.d.ts.map +1 -1
  28. package/dist/renderers/ChartRenderer.js +20 -1
  29. package/dist/renderers/ChartRenderer.js.map +1 -1
  30. package/dist/renderers/ContentBlockRenderer.d.ts +1 -1
  31. package/dist/renderers/ContentBlockRenderer.d.ts.map +1 -1
  32. package/dist/renderers/MarkdownRenderer.d.ts +2 -2
  33. package/dist/renderers/MarkdownRenderer.d.ts.map +1 -1
  34. package/dist/renderers/MarkdownRenderer.js +6 -4
  35. package/dist/renderers/MarkdownRenderer.js.map +1 -1
  36. package/package.json +5 -5
  37. 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 modes:
134
+ `ChatWidget` supports two layout APIs:
135
135
 
136
- - `mode="overlay"` for floating chat
137
- - `mode="inline"` for embedded layouts
136
+ - `presentation`, the preferred API for new integrations
137
+ - `mode`, the legacy API retained for existing integrations
138
138
 
139
- For inline mode, there are two common host patterns:
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 `dockMode="viewport"` when the widget should behave like a fixed browser sidebar and the host page should reserve layout space only while the panel is open. In this mode, the host page is responsible for the viewport split; the widget stays pinned to the browser edge and the tab collapses back to that edge.
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
- mode="overlay"
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
- ### Page-Rail Inline Example
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 viewport dock
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
- mode="inline"
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): import("react/jsx-runtime").JSX.Element;
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":"AAqCA,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CAmUpE"}
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', title: copied ? 'Copied!' : 'Copy', children: copied ? _jsx(Check, { size: 16 }) : _jsx(Copy, { size: 16 }) }));
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
- 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." })] })), messages.map((message, index) => {
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", title: "Edit", 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("button", { type: "button", className: "tagIt-chat-message-action-btn", onClick: handleRetry, "aria-label": "Regenerate response", title: "Regenerate", children: _jsx(RotateCcw, { size: 16 }) }))] }))] })) }) }, message.id));
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,6 @@
1
+ import React from 'react';
2
+ export interface ChatHistoryPanelProps {
3
+ onClose: () => void;
4
+ }
5
+ export declare function ChatHistoryPanel({ onClose }: ChatHistoryPanelProps): React.JSX.Element;
6
+ //# sourceMappingURL=chat-history.d.ts.map
@@ -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"}
@@ -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/jsx-runtime").JSX.Element;
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":"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"}
1
+ {"version":3,"file":"chat-widget.d.ts","sourceRoot":"","sources":["../src/chat-widget.tsx"],"names":[],"mappings":"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"}