@asteby/metacore-ai-chat 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +39 -0
  2. package/dist/channel-list.d.ts +19 -0
  3. package/dist/channel-list.d.ts.map +1 -0
  4. package/dist/channel-list.js +42 -0
  5. package/dist/channel-list.js.map +1 -0
  6. package/dist/channel-thread.d.ts +9 -0
  7. package/dist/channel-thread.d.ts.map +1 -0
  8. package/dist/channel-thread.js +89 -0
  9. package/dist/channel-thread.js.map +1 -0
  10. package/dist/channels.d.ts +74 -0
  11. package/dist/channels.d.ts.map +1 -0
  12. package/dist/channels.js +59 -0
  13. package/dist/channels.js.map +1 -0
  14. package/dist/chat-header.d.ts +13 -0
  15. package/dist/chat-header.d.ts.map +1 -0
  16. package/dist/chat-header.js +8 -0
  17. package/dist/chat-header.js.map +1 -0
  18. package/dist/client.d.ts.map +1 -1
  19. package/dist/client.js +1 -0
  20. package/dist/client.js.map +1 -1
  21. package/dist/composer.d.ts +7 -0
  22. package/dist/composer.d.ts.map +1 -0
  23. package/dist/composer.js +25 -0
  24. package/dist/composer.js.map +1 -0
  25. package/dist/context.d.ts +12 -1
  26. package/dist/context.d.ts.map +1 -1
  27. package/dist/context.js +9 -2
  28. package/dist/context.js.map +1 -1
  29. package/dist/copilot-chat.d.ts +14 -1
  30. package/dist/copilot-chat.d.ts.map +1 -1
  31. package/dist/copilot-chat.js +15 -23
  32. package/dist/copilot-chat.js.map +1 -1
  33. package/dist/copilot-inbox.d.ts +24 -0
  34. package/dist/copilot-inbox.d.ts.map +1 -0
  35. package/dist/copilot-inbox.js +51 -0
  36. package/dist/copilot-inbox.js.map +1 -0
  37. package/dist/copilot-widget.d.ts +26 -1
  38. package/dist/copilot-widget.d.ts.map +1 -1
  39. package/dist/copilot-widget.js +103 -15
  40. package/dist/copilot-widget.js.map +1 -1
  41. package/dist/index.d.ts +15 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +12 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/markdown.d.ts +23 -0
  46. package/dist/markdown.d.ts.map +1 -0
  47. package/dist/markdown.js +82 -0
  48. package/dist/markdown.js.map +1 -0
  49. package/dist/text/normalize.d.ts +11 -0
  50. package/dist/text/normalize.d.ts.map +1 -0
  51. package/dist/text/normalize.js +32 -0
  52. package/dist/text/normalize.js.map +1 -0
  53. package/dist/text/plain-text.d.ts +3 -0
  54. package/dist/text/plain-text.d.ts.map +1 -0
  55. package/dist/text/plain-text.js +20 -0
  56. package/dist/text/plain-text.js.map +1 -0
  57. package/dist/text/tool-dump.d.ts +2 -0
  58. package/dist/text/tool-dump.d.ts.map +1 -0
  59. package/dist/text/tool-dump.js +30 -0
  60. package/dist/text/tool-dump.js.map +1 -0
  61. package/dist/types.d.ts +20 -0
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/types.js +14 -0
  64. package/dist/types.js.map +1 -1
  65. package/dist/use-channels.d.ts +15 -0
  66. package/dist/use-channels.d.ts.map +1 -0
  67. package/dist/use-channels.js +57 -0
  68. package/dist/use-channels.js.map +1 -0
  69. package/dist/use-chat.d.ts.map +1 -1
  70. package/dist/use-chat.js +1 -0
  71. package/dist/use-chat.js.map +1 -1
  72. package/package.json +5 -1
@@ -1,3 +1,4 @@
1
+ import { type ReactNode } from 'react';
1
2
  import type { ChatSessionSummary } from './types';
2
3
  export interface CopilotChatProps {
3
4
  className?: string;
@@ -11,7 +12,19 @@ export interface CopilotChatProps {
11
12
  sessions?: readonly ChatSessionSummary[];
12
13
  /** Called with the chosen session id. Pair with `sessionId` to load its history. */
13
14
  onSelectSession?: (id: string) => void;
15
+ /** Header title; defaults to the branding name. */
16
+ title?: string;
17
+ /** Header subtitle (e.g. the agent's role). */
18
+ subtitle?: string;
19
+ /** Header avatar; defaults to the mascot. */
20
+ avatar?: ReactNode;
21
+ /** Rendered before the avatar (e.g. a back button). */
22
+ headerStart?: ReactNode;
23
+ /** Rendered before the close button (e.g. expand / open-fullscreen). */
24
+ headerEnd?: ReactNode;
25
+ /** Escape inside the panel; defaults to `onClose`. Lets a host collapse before closing. */
26
+ onEscape?: () => void;
14
27
  }
15
28
  /** The chat panel: header, thread, starter prompts, composer. No positioning. */
16
- export declare function CopilotChat({ className, sessionId, onClose, demo, sessions, onSelectSession }: CopilotChatProps): import("react").JSX.Element;
29
+ export declare function CopilotChat({ className, sessionId, onClose, demo, sessions, onSelectSession, title, subtitle, avatar, headerStart, headerEnd, onEscape }: CopilotChatProps): import("react").JSX.Element;
17
30
  //# sourceMappingURL=copilot-chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-chat.d.ts","sourceRoot":"","sources":["../src/copilot-chat.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAuE9D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,yEAAyE;IACzE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACxC,oFAAoF;IACpF,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BA4J/G"}
1
+ {"version":3,"file":"copilot-chat.d.ts","sourceRoot":"","sources":["../src/copilot-chat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAWpF,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAwE9D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,yEAAyE;IACzE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACxC,oFAAoF;IACpF,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,uDAAuD;IACvD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,wEAAwE;IACxE,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BAuI1K"}
@@ -1,11 +1,14 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { createContext, useContext, useEffect, useRef, useState } from 'react';
3
- import { Check, Plus, RotateCw, Send, WifiOff, X } from 'lucide-react';
2
+ import { createContext, useContext, useEffect, useRef } from 'react';
3
+ import { Check, Plus, RotateCw, WifiOff, X } from 'lucide-react';
4
4
  import { Mascot } from '@asteby/metacore-app-providers';
5
- import { AGENT_CAPSULE, AGENT_CARD, AGENT_ENTER, AGENT_FOCUS } from './surfaces';
5
+ import { AGENT_CARD, AGENT_ENTER, AGENT_FOCUS } from './surfaces';
6
+ import { ChatHeader } from './chat-header';
7
+ import { Composer } from './composer';
6
8
  import { useCopilot, useCopilotSuggestions } from './context';
7
9
  import { useChat } from './use-chat';
8
10
  import { useOnline } from './use-online';
11
+ import { Markdown } from './markdown';
9
12
  import { useRevealText } from './use-reveal-text';
10
13
  const TOUCH = 'inline-flex min-h-11 min-w-11 items-center justify-center';
11
14
  const cx = (...c) => c.filter(Boolean).join(' ');
@@ -16,10 +19,10 @@ function Avatar({ size, thinking }) {
16
19
  return _jsx(Mascot, { skin: branding.mascotSkin, size: size, state: thinking ? 'thinking' : 'idle' });
17
20
  }
18
21
  function Bubble({ message, onFrame }) {
19
- const { permissions, labels } = useCopilot();
20
- const { text } = useRevealText(message.content, !!message.fresh && message.role === 'ai', onFrame);
22
+ const { permissions, labels, onLinkClick } = useCopilot();
23
+ const { text, revealing } = useRevealText(message.content, !!message.fresh && message.role === 'ai', onFrame);
21
24
  const mine = message.role === 'user';
22
- return (_jsx("div", { className: cx('flex', mine ? 'justify-end' : 'justify-start', AGENT_ENTER), children: _jsxs("div", { className: cx('max-w-[85%] whitespace-pre-wrap break-words rounded-2xl px-3 py-2 text-sm', mine ? 'bg-primary text-primary-foreground' : 'bg-muted text-foreground', message.error && 'border border-destructive/50 text-destructive'), role: message.error ? 'alert' : undefined, children: [text, message.proposals?.map((p) => (_jsx(ProposalCard, { proposal: p, canDecide: permissions.canDecideProposals, labels: labels }, p.id)))] }) }));
25
+ return (_jsx("div", { className: cx('flex', mine ? 'justify-end' : 'justify-start', AGENT_ENTER), children: _jsxs("div", { className: cx('max-w-[85%] break-words rounded-2xl px-3 py-2 text-sm', (mine || message.error) && 'whitespace-pre-wrap', mine ? 'bg-primary text-primary-foreground' : 'bg-muted text-foreground', message.error && 'border border-destructive/50 text-destructive'), role: message.error ? 'alert' : undefined, children: [mine || message.error ? text : _jsx(Markdown, { content: text, streaming: revealing, onLinkClick: onLinkClick }), message.proposals?.map((p) => (_jsx(ProposalCard, { proposal: p, canDecide: permissions.canDecideProposals, labels: labels }, p.id)))] }) }));
23
26
  }
24
27
  function ProposalCard({ proposal, canDecide, labels, }) {
25
28
  const { decide } = useChatBridge();
@@ -32,13 +35,12 @@ const ChatBridge = createContext({
32
35
  });
33
36
  const useChatBridge = () => useContext(ChatBridge);
34
37
  /** The chat panel: header, thread, starter prompts, composer. No positioning. */
35
- export function CopilotChat({ className, sessionId, onClose, demo, sessions, onSelectSession }) {
38
+ export function CopilotChat({ className, sessionId, onClose, demo, sessions, onSelectSession, title, subtitle, avatar, headerStart, headerEnd, onEscape }) {
36
39
  const { permissions, branding, labels, demo: ctxDemo } = useCopilot();
37
- const isDemo = demo ?? ctxDemo;
38
40
  const online = useOnline();
39
41
  const suggestions = useCopilotSuggestions();
40
42
  const chat = useChat(sessionId);
41
- const [draft, setDraft] = useState('');
43
+ const isDemo = demo ?? (ctxDemo || chat.messages.some((m) => m.demo));
42
44
  const endRef = useRef(null);
43
45
  const scroll = () => endRef.current?.scrollIntoView?.({ block: 'end' });
44
46
  useEffect(() => {
@@ -48,24 +50,14 @@ export function CopilotChat({ className, sessionId, onClose, demo, sessions, onS
48
50
  if (!permissions.canChat) {
49
51
  return (_jsx("div", { className: cx('p-4 text-sm text-muted-foreground', className), role: "status", children: labels.denied }));
50
52
  }
51
- const submit = (e) => {
52
- e?.preventDefault();
53
- if (!online)
54
- return;
55
- const text = draft;
56
- setDraft('');
57
- void chat.send(text);
58
- };
59
53
  const lastFailed = !chat.loading && chat.messages[chat.messages.length - 1]?.error === true;
60
54
  const retryBtn = (onClick) => (_jsxs("button", { type: "button", onClick: onClick, className: cx(TOUCH, 'gap-1 rounded-md border px-3 text-xs', AGENT_FOCUS), children: [_jsx(RotateCw, { className: "size-3", "aria-hidden": true }), " ", labels.retry] }));
61
55
  return (_jsx(ChatBridge.Provider, { value: { decide: chat.decide }, children: _jsxs("section", { className: cx('flex h-full min-h-0 flex-col', className), "aria-label": branding.name ?? 'Copiloto', onKeyDown: (e) => {
62
- if (e.key === 'Escape' && onClose && !e.nativeEvent.isComposing) {
56
+ const esc = onEscape ?? onClose;
57
+ if (e.key === 'Escape' && esc && !e.nativeEvent.isComposing) {
63
58
  e.stopPropagation();
64
- onClose();
59
+ esc();
65
60
  }
66
- }, children: [_jsxs("header", { className: "flex items-center gap-2 border-b border-border/50 px-3 py-2", children: [_jsx(Avatar, { size: 28, thinking: chat.loading }), _jsx("h2", { className: "flex-1 truncate text-sm font-semibold", children: branding.name ?? 'Copiloto' }), isDemo && (_jsx("span", { className: "shrink-0 rounded-full border px-2 py-0.5 text-[11px] font-medium text-muted-foreground", children: labels.demo })), sessions && sessions.length > 0 && onSelectSession && (_jsxs("select", { "aria-label": labels.sessions, className: cx('min-h-11 max-w-[8rem] truncate rounded-md border bg-transparent px-1 text-xs', AGENT_FOCUS), value: chat.sessionId ?? sessionId ?? '', onChange: (e) => e.target.value && onSelectSession(e.target.value), children: [!(chat.sessionId ?? sessionId) && _jsx("option", { value: "", children: labels.newSession }), sessions.map((x) => (_jsx("option", { value: x.id, children: x.title || x.id }, x.id)))] })), _jsx("button", { type: "button", "aria-label": labels.newChat, title: labels.newChat, className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS), onClick: chat.reset, children: _jsx(Plus, { className: "size-4", "aria-hidden": true }) }), onClose && (_jsx("button", { type: "button", "aria-label": labels.close, className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS), onClick: onClose, children: _jsx(X, { className: "size-4", "aria-hidden": true }) }))] }), !online && (_jsxs("div", { role: "status", className: "flex items-center gap-2 border-b bg-muted px-3 py-2 text-xs", children: [_jsx(WifiOff, { className: "size-3.5 shrink-0", "aria-hidden": true }), " ", labels.offline] })), _jsxs("div", { className: "min-h-0 flex-1 space-y-2 overflow-y-auto p-3", role: "log", "aria-live": "polite", "aria-busy": chat.loading, children: [chat.historyError && (_jsxs("div", { role: "alert", className: "flex items-center justify-between gap-2 rounded-md border border-destructive/50 p-2 text-xs text-destructive", children: [_jsx("span", { children: labels.historyError }), retryBtn(chat.reloadHistory)] })), chat.messages.length === 0 && !chat.historyError && (_jsxs("div", { className: "flex flex-col items-center gap-3 py-6 text-center", children: [_jsx(Avatar, { size: 56 }), _jsx("p", { className: "text-sm font-medium", children: labels.emptyTitle }), _jsx("div", { className: "flex flex-wrap justify-center gap-2", children: suggestions.map((s) => (_jsx("button", { type: "button", className: cx(TOUCH, 'rounded-full border px-3 text-xs hover:bg-muted', AGENT_FOCUS), onClick: () => void chat.send(s), children: s }, s))) })] })), chat.messages.map((m) => (_jsx(Bubble, { message: m, onFrame: scroll }, m.id))), chat.loading && (_jsx("div", { className: "text-xs text-muted-foreground", role: "status", children: labels.thinking })), lastFailed && _jsx("div", { className: "flex justify-start", children: retryBtn(() => void chat.retry()) }), chat.decideFailed && (_jsxs("div", { role: "alert", className: "flex items-center justify-between gap-2 rounded-md border border-destructive/50 p-2 text-xs text-destructive", children: [_jsx("span", { children: labels.decideError }), _jsx("button", { type: "button", onClick: chat.clearDecideError, "aria-label": labels.close, className: cx(TOUCH, 'rounded-md', AGENT_FOCUS), children: _jsx(X, { className: "size-3", "aria-hidden": true }) })] })), _jsx("div", { ref: endRef })] }), _jsxs("form", { onSubmit: submit, className: cx(AGENT_CAPSULE, 'm-3 flex items-end gap-2 p-2'), children: [_jsx("textarea", { "aria-label": labels.placeholder, className: "max-h-32 min-h-9 flex-1 resize-none bg-transparent px-2 py-1.5 text-sm outline-none", placeholder: labels.placeholder, rows: 1, value: draft, onChange: (e) => setDraft(e.target.value), onKeyDown: (e) => {
67
- if (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing)
68
- submit(e);
69
- } }), _jsx("button", { type: "submit", "aria-label": labels.send, disabled: !draft.trim() || chat.loading || !online, className: cx(TOUCH, 'rounded-full bg-primary text-primary-foreground disabled:opacity-50', AGENT_FOCUS), children: _jsx(Send, { className: "size-4", "aria-hidden": true }) })] })] }) }));
61
+ }, children: [_jsxs(ChatHeader, { start: headerStart, avatar: avatar ?? _jsx(Avatar, { size: 28, thinking: chat.loading }), title: title ?? branding.name ?? 'Copiloto', subtitle: subtitle, badge: isDemo && (_jsx("span", { className: "shrink-0 rounded-full border px-2 py-0.5 text-[11px] font-medium text-muted-foreground", children: labels.demo })), children: [sessions && sessions.length > 0 && onSelectSession && (_jsxs("select", { "aria-label": labels.sessions, className: cx('min-h-11 max-w-[8rem] truncate rounded-md border bg-transparent px-1 text-xs', AGENT_FOCUS), value: chat.sessionId ?? sessionId ?? '', onChange: (e) => e.target.value && onSelectSession(e.target.value), children: [!(chat.sessionId ?? sessionId) && _jsx("option", { value: "", children: labels.newSession }), sessions.map((x) => (_jsx("option", { value: x.id, children: x.title || x.id }, x.id)))] })), _jsx("button", { type: "button", "aria-label": labels.newChat, title: labels.newChat, className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS), onClick: chat.reset, children: _jsx(Plus, { className: "size-4", "aria-hidden": true }) }), headerEnd, onClose && (_jsx("button", { type: "button", "aria-label": labels.close, className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS), onClick: onClose, children: _jsx(X, { className: "size-4", "aria-hidden": true }) }))] }), !online && (_jsxs("div", { role: "status", className: "flex items-center gap-2 border-b bg-muted px-3 py-2 text-xs", children: [_jsx(WifiOff, { className: "size-3.5 shrink-0", "aria-hidden": true }), " ", labels.offline] })), _jsxs("div", { className: "min-h-0 flex-1 space-y-2 overflow-y-auto p-3", role: "log", "aria-live": "polite", "aria-busy": chat.loading, children: [chat.historyError && (_jsxs("div", { role: "alert", className: "flex items-center justify-between gap-2 rounded-md border border-destructive/50 p-2 text-xs text-destructive", children: [_jsx("span", { children: labels.historyError }), retryBtn(chat.reloadHistory)] })), chat.messages.length === 0 && !chat.historyError && (_jsxs("div", { className: "flex flex-col items-center gap-3 py-6 text-center", children: [_jsx(Avatar, { size: 56 }), _jsx("p", { className: "text-sm font-medium", children: labels.emptyTitle }), _jsx("div", { className: "flex flex-wrap justify-center gap-2", children: suggestions.map((s) => (_jsx("button", { type: "button", className: cx(TOUCH, 'rounded-full border px-3 text-xs hover:bg-muted', AGENT_FOCUS), onClick: () => void chat.send(s), children: s }, s))) })] })), chat.messages.map((m) => (_jsx(Bubble, { message: m, onFrame: scroll }, m.id))), chat.loading && (_jsx("div", { className: "text-xs text-muted-foreground", role: "status", children: labels.thinking })), lastFailed && _jsx("div", { className: "flex justify-start", children: retryBtn(() => void chat.retry()) }), chat.decideFailed && (_jsxs("div", { role: "alert", className: "flex items-center justify-between gap-2 rounded-md border border-destructive/50 p-2 text-xs text-destructive", children: [_jsx("span", { children: labels.decideError }), _jsx("button", { type: "button", onClick: chat.clearDecideError, "aria-label": labels.close, className: cx(TOUCH, 'rounded-md', AGENT_FOCUS), children: _jsx(X, { className: "size-3", "aria-hidden": true }) })] })), _jsx("div", { ref: endRef })] }), _jsx(Composer, { onSend: (t) => void chat.send(t), busy: chat.loading, online: online })] }) }));
70
62
  }
71
63
  //# sourceMappingURL=copilot-chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-chat.js","sourceRoot":"","sources":["../src/copilot-chat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot-chat.js","sourceRoot":"","sources":["../src/copilot-chat.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type ChannelAdapter } from './channels';
3
+ import type { useChannels } from './use-channels';
4
+ type ChannelsState = ReturnType<typeof useChannels>;
5
+ export interface CopilotInboxProps {
6
+ adapter: ChannelAdapter;
7
+ state: ChannelsState;
8
+ activeId: string | null;
9
+ onSelect: (id: string | null) => void;
10
+ /** Expanded (full screen): list and thread side by side from `md` up. */
11
+ expanded: boolean;
12
+ /** Show the built-in bot channel first. Default true. */
13
+ includeBot?: boolean;
14
+ /** Expand / fullscreen controls, rendered in every header. */
15
+ actions?: ReactNode;
16
+ onClose: () => void;
17
+ /** Escape: the host collapses before closing. */
18
+ onEscape: () => void;
19
+ className?: string;
20
+ }
21
+ /** Unified inbox: bot + agents + team channels, list ↔ thread (side by side when expanded). */
22
+ export declare function CopilotInbox({ adapter, state, activeId, onSelect, expanded, includeBot, actions, onClose, onEscape, className, }: CopilotInboxProps): import("react").JSX.Element;
23
+ export {};
24
+ //# sourceMappingURL=copilot-inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-inbox.d.ts","sourceRoot":"","sources":["../src/copilot-inbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5E,OAAO,EAAkB,KAAK,cAAc,EAAoB,MAAM,YAAY,CAAA;AAOlF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKjD,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;AAEnD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,EAAE,aAAa,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACrC,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAA;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAiB,EACjB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,iBAAiB,+BA+GnB"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { ArrowLeft, X } from 'lucide-react';
4
+ import { BOT_CHANNEL_ID } from './channels';
5
+ import { ChannelAvatar, ChannelList } from './channel-list';
6
+ import { ChannelThread } from './channel-thread';
7
+ import { ChatHeader } from './chat-header';
8
+ import { CopilotChat } from './copilot-chat';
9
+ import { CopilotScope, useCopilot } from './context';
10
+ import { AGENT_FOCUS } from './surfaces';
11
+ const cx = (...c) => c.filter(Boolean).join(' ');
12
+ const TOUCH = 'inline-flex min-h-11 min-w-11 items-center justify-center';
13
+ /** Unified inbox: bot + agents + team channels, list ↔ thread (side by side when expanded). */
14
+ export function CopilotInbox({ adapter, state, activeId, onSelect, expanded, includeBot = true, actions, onClose, onEscape, className, }) {
15
+ const { branding, labels } = useCopilot();
16
+ const botChannel = useMemo(() => ({ id: BOT_CHANNEL_ID, kind: 'bot', name: branding.name ?? 'Copiloto', description: labels.emptyTitle }), [branding.name, labels.emptyTitle]);
17
+ const channels = useMemo(() => (includeBot ? [botChannel, ...state.channels] : state.channels), [includeBot, botChannel, state.channels]);
18
+ const active = channels.find((c) => c.id === activeId) ?? null;
19
+ // AI panes stay mounted once visited, so going back to the list keeps the conversation.
20
+ const [visited, setVisited] = useState([]);
21
+ useEffect(() => {
22
+ if (active && (active.kind === 'bot' || active.client) && !visited.includes(active.id))
23
+ setVisited((v) => [...v, active.id]);
24
+ }, [active, visited]);
25
+ // Expanded on a wide screen always shows a thread beside the list.
26
+ useEffect(() => {
27
+ if (!expanded || activeId || !channels.length)
28
+ return;
29
+ if (typeof window !== 'undefined' && window.matchMedia?.('(min-width: 768px)').matches)
30
+ onSelect(channels[0].id);
31
+ }, [expanded, activeId, channels, onSelect]);
32
+ const open = (id) => {
33
+ onSelect(id);
34
+ state.clearUnread(id);
35
+ };
36
+ const back = (_jsx("button", { type: "button", "aria-label": labels.back, title: labels.back, onClick: () => onSelect(null), className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS, expanded && 'md:hidden'), children: _jsx(ArrowLeft, { className: "size-4", "aria-hidden": true }) }));
37
+ const aiPanes = channels.filter((c) => visited.includes(c.id) && (c.kind === 'bot' || c.client));
38
+ const threadChannel = active && !(active.kind === 'bot' || active.client) ? active : null;
39
+ const showList = !activeId || expanded;
40
+ return (_jsxs("div", { className: cx('flex h-full min-h-0 w-full', className), children: [_jsxs("aside", { className: cx('min-h-0 flex-col', expanded
41
+ ? cx('md:flex md:w-80 md:shrink-0 md:border-r md:border-border/50', activeId ? 'hidden' : 'flex flex-1 md:flex-none')
42
+ : showList
43
+ ? 'flex flex-1'
44
+ : 'hidden'), children: [_jsxs(ChatHeader, { title: labels.channels, className: "md:border-b-0", children: [actions, _jsx("button", { type: "button", "aria-label": labels.close, title: labels.close, onClick: onClose, className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS, expanded && 'md:hidden'), children: _jsx(X, { className: "size-4", "aria-hidden": true }) })] }), _jsx(ChannelList, { channels: channels, activeId: activeId, loading: state.loading, error: state.error, onSelect: open, onRetry: state.reload })] }), _jsxs("div", { className: cx('min-h-0 min-w-0 flex-col', expanded ? cx('md:flex md:flex-1', activeId ? 'flex flex-1' : 'hidden') : activeId ? 'flex flex-1' : 'hidden'), children: [aiPanes.map((c) => (_jsx("div", { hidden: c.id !== activeId, className: cx('min-h-0 flex-1 flex-col', c.id === activeId ? 'flex' : 'hidden'), children: _jsx(CopilotScope, { client: c.client, branding: c.kind === 'bot' ? undefined : { ...branding, name: c.name, avatar: c.avatar ?? branding.avatar }, children: _jsx(CopilotChat, { title: c.name, subtitle: c.kind === 'agent' ? c.description : undefined, avatar: c.kind === 'bot' ? undefined : _jsx(ChannelAvatar, { channel: c, size: 28 }), headerStart: back, headerEnd: actions, onClose: onClose, onEscape: onEscape }) }) }, c.id))), threadChannel && (_jsxs("section", { className: "flex min-h-0 flex-1 flex-col", "aria-label": threadChannel.name, onKeyDown: (e) => {
45
+ if (e.key === 'Escape' && !e.nativeEvent.isComposing) {
46
+ e.stopPropagation();
47
+ onEscape();
48
+ }
49
+ }, children: [_jsxs(ChatHeader, { start: back, avatar: _jsx(ChannelAvatar, { channel: threadChannel, size: 28 }), title: threadChannel.name, subtitle: threadChannel.online ? labels.online : threadChannel.description, children: [actions, _jsx("button", { type: "button", "aria-label": labels.close, title: labels.close, onClick: onClose, className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS), children: _jsx(X, { className: "size-4", "aria-hidden": true }) })] }), _jsx(ChannelThread, { adapter: adapter, channel: threadChannel, onRead: state.clearUnread }, threadChannel.id)] })), !active && expanded && (_jsx("div", { className: "hidden flex-1 items-center justify-center text-sm text-muted-foreground md:flex", children: labels.selectChannel }))] })] }));
50
+ }
51
+ //# sourceMappingURL=copilot-inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-inbox.js","sourceRoot":"","sources":["../src/copilot-inbox.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { ChannelAdapter } from './channels';
1
2
  import { type CopilotChatProps } from './copilot-chat';
2
3
  import { type FabPosition } from './use-draggable-fab';
3
4
  export interface CopilotWidgetProps {
@@ -11,7 +12,31 @@ export interface CopilotWidgetProps {
11
12
  onSelectSession?: CopilotChatProps['onSelectSession'];
12
13
  /** Forwarded to `CopilotChat`: shows the demo badge (overrides the provider). */
13
14
  demo?: CopilotChatProps['demo'];
15
+ /**
16
+ * Channel inbox: bot + agents + team conversations from your backend.
17
+ * Without it the widget is the single copilot chat (unchanged).
18
+ */
19
+ channels?: ChannelAdapter;
20
+ /** Show the built-in bot channel first in the inbox. Default true. */
21
+ includeBot?: boolean;
22
+ /** Route of the app's own full-screen workspace; adds an "open full view" link. */
23
+ fullscreenHref?: string;
24
+ /**
25
+ * Handle "open full view" yourself (SPA navigation). Receives the active
26
+ * channel id. The widget closes afterwards.
27
+ */
28
+ onOpenFullscreen?: (ctx: {
29
+ channelId: string | null;
30
+ }) => void;
31
+ /** Start expanded (viewport-filling). Users toggle it with the header button. */
32
+ defaultExpanded?: boolean;
33
+ /** Channel to open first when nothing was remembered. */
34
+ defaultChannelId?: string | null;
35
+ /** localStorage namespace for the last-opened channel. Default "metacore-ai-chat". */
36
+ storageKey?: string;
37
+ /** Hide the whole widget (e.g. on routes that already show the full workspace). */
38
+ hidden?: boolean;
14
39
  }
15
40
  /** Floating action button + anchored chat panel. Renders nothing without `canChat`. */
16
- export declare function CopilotWidget({ defaultPosition, defaultOpen, zIndex, sessions, onSelectSession, demo }: CopilotWidgetProps): import("react").JSX.Element | null;
41
+ export declare function CopilotWidget({ defaultPosition, defaultOpen, zIndex, sessions, onSelectSession, demo, channels, includeBot, fullscreenHref, onOpenFullscreen, defaultExpanded, defaultChannelId, storageKey, hidden, }: CopilotWidgetProps): import("react").JSX.Element | null;
17
42
  //# sourceMappingURL=copilot-widget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-widget.d.ts","sourceRoot":"","sources":["../src/copilot-widget.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGnE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEvE,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,eAAe,CAAC,EAAE,WAAW,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACvC,wEAAwE;IACxE,eAAe,CAAC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;IACrD,iFAAiF;IACjF,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;CAChC;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,EAAE,eAAe,EAAE,WAAmB,EAAE,MAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,kBAAkB,sCAiFvI"}
1
+ {"version":3,"file":"copilot-widget.d.ts","sourceRoot":"","sources":["../src/copilot-widget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAKnE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAOvE,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,eAAe,CAAC,EAAE,WAAW,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACvC,wEAAwE;IACxE,eAAe,CAAC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;IACrD,iFAAiF;IACjF,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,sEAAsE;IACtE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;IAC9D,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAgCD,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,EAC5B,eAAe,EACf,WAAmB,EACnB,MAAW,EACX,QAAQ,EACR,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,UAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAuB,EACvB,gBAAuB,EACvB,UAA+B,EAC/B,MAAc,GACf,EAAE,kBAAkB,sCAgMpB"}
@@ -1,18 +1,79 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useRef, useState } from 'react';
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { ExternalLink, Maximize2, Minimize2 } from 'lucide-react';
3
4
  import { Mascot } from '@asteby/metacore-app-providers';
4
5
  import { CopilotChat } from './copilot-chat';
6
+ import { CopilotInbox } from './copilot-inbox';
5
7
  import { useCopilot } from './context';
6
8
  import { AGENT_FOCUS, AGENT_PANEL } from './surfaces';
9
+ import { useChannels } from './use-channels';
7
10
  import { useDraggableFab } from './use-draggable-fab';
11
+ const cx = (...c) => c.filter(Boolean).join(' ');
12
+ const TOUCH = 'inline-flex min-h-11 min-w-11 items-center justify-center';
13
+ const EXPANDED_SURFACE = 'bg-[var(--surface-panel,var(--card))] [backdrop-filter:var(--backdrop-panel,none)] [-webkit-backdrop-filter:var(--backdrop-panel,none)]';
14
+ function useIsNarrow(maxWidth = 639) {
15
+ const query = `(max-width: ${maxWidth}px)`;
16
+ const [narrow, setNarrow] = useState(() => typeof window !== 'undefined' && !!window.matchMedia?.(query).matches);
17
+ useEffect(() => {
18
+ if (typeof window === 'undefined' || !window.matchMedia)
19
+ return;
20
+ const mq = window.matchMedia(query);
21
+ const on = () => setNarrow(mq.matches);
22
+ on();
23
+ mq.addEventListener?.('change', on);
24
+ return () => mq.removeEventListener?.('change', on);
25
+ }, [query]);
26
+ return narrow;
27
+ }
28
+ function readLast(key) {
29
+ try {
30
+ return localStorage.getItem(key);
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ function writeLast(key, value) {
37
+ try {
38
+ if (value)
39
+ localStorage.setItem(key, value);
40
+ else
41
+ localStorage.removeItem(key);
42
+ }
43
+ catch {
44
+ /* storage unavailable (private mode / blocked): the memory is a convenience */
45
+ }
46
+ }
8
47
  /** Floating action button + anchored chat panel. Renders nothing without `canChat`. */
9
- export function CopilotWidget({ defaultPosition, defaultOpen = false, zIndex = 50, sessions, onSelectSession, demo }) {
48
+ export function CopilotWidget({ defaultPosition, defaultOpen = false, zIndex = 50, sessions, onSelectSession, demo, channels, includeBot = true, fullscreenHref, onOpenFullscreen, defaultExpanded = false, defaultChannelId = null, storageKey = 'metacore-ai-chat', hidden = false, }) {
10
49
  const { permissions, branding, labels } = useCopilot();
11
50
  const [open, setOpen] = useState(defaultOpen);
51
+ const [expanded, setExpanded] = useState(defaultExpanded);
52
+ const narrow = useIsNarrow();
53
+ const lastKey = `${storageKey}:channel`;
54
+ const [activeId, setActiveId] = useState(() => (channels ? readLast(lastKey) ?? defaultChannelId : null));
55
+ const channelState = useChannels(channels, activeId);
12
56
  const fab = useDraggableFab(defaultPosition);
13
57
  const fabRef = useRef(null);
14
58
  const panelRef = useRef(null);
15
59
  const wasOpen = useRef(defaultOpen);
60
+ // Phones always get the viewport-filling layout.
61
+ const filling = expanded || narrow;
62
+ const select = useCallback((id) => {
63
+ setActiveId(id);
64
+ writeLast(lastKey, id);
65
+ }, [lastKey]);
66
+ const close = useCallback(() => {
67
+ setOpen(false);
68
+ setExpanded(false);
69
+ }, []);
70
+ // Escape steps back: expanded → floating, then closes.
71
+ const escape = useCallback(() => {
72
+ if (expanded)
73
+ setExpanded(false);
74
+ else
75
+ setOpen(false);
76
+ }, [expanded]);
16
77
  // Focus management: into the composer on open, back to the FAB on close.
17
78
  useEffect(() => {
18
79
  if (open === wasOpen.current)
@@ -42,25 +103,52 @@ export function CopilotWidget({ defaultPosition, defaultOpen = false, zIndex = 5
42
103
  if (t.closest('input, textarea, select, [contenteditable]:not([contenteditable="false"])'))
43
104
  return;
44
105
  }
45
- setOpen(false);
106
+ escape();
46
107
  };
47
108
  document.addEventListener('keydown', onKey);
48
109
  return () => document.removeEventListener('keydown', onKey);
49
- }, [open]);
50
- if (!permissions.canChat)
110
+ }, [open, escape]);
111
+ if (!permissions.canChat || hidden)
51
112
  return null;
52
113
  const { panelLayout: p } = fab;
53
- return (_jsxs(_Fragment, { children: [open && (_jsx("div", { ref: panelRef, role: "dialog", "aria-modal": "false" /* non-modal: the page stays usable behind the floating panel */, "aria-label": branding.name ?? 'Copiloto', tabIndex: -1, className: AGENT_PANEL, style: {
54
- position: 'fixed',
55
- zIndex,
56
- bottom: p.bottom,
57
- right: p.right,
58
- width: p.width,
59
- height: p.height,
60
- overflow: 'hidden',
61
- }, children: _jsx(CopilotChat, { onClose: () => setOpen(false), sessions: sessions, onSelectSession: onSelectSession, demo: demo }) })), _jsx("button", { type: "button", "aria-label": open ? labels.close : labels.open, "aria-expanded": open, ref: fabRef, className: `fixed flex size-12 items-center justify-center rounded-full border bg-background shadow-lg ${AGENT_FOCUS}`, style: { ...fab.fabStyle, zIndex }, onPointerDown: fab.onFabPointerDown, onPointerMove: fab.onFabPointerMove, onPointerUp: fab.onFabPointerUp, onClick: () => {
114
+ const unread = channelState.totalUnread;
115
+ const openFullscreen = (e) => {
116
+ if (!onOpenFullscreen)
117
+ return;
118
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0)
119
+ return;
120
+ e.preventDefault();
121
+ onOpenFullscreen({ channelId: activeId });
122
+ close();
123
+ };
124
+ const actions = (_jsxs(_Fragment, { children: [!narrow && (_jsx("button", { type: "button", "aria-label": expanded ? labels.collapse : labels.expand, title: expanded ? labels.collapse : labels.expand, "aria-pressed": expanded, onClick: () => setExpanded((x) => !x), className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS), children: expanded ? _jsx(Minimize2, { className: "size-4", "aria-hidden": true }) : _jsx(Maximize2, { className: "size-4", "aria-hidden": true }) })), (fullscreenHref || onOpenFullscreen) && (_jsx("a", { href: fullscreenHref ?? '#', "aria-label": labels.openFullscreen, title: labels.openFullscreen, onClick: openFullscreen, className: cx(TOUCH, 'rounded-md hover:bg-muted', AGENT_FOCUS), children: _jsx(ExternalLink, { className: "size-4", "aria-hidden": true }) }))] }));
125
+ const surface = filling
126
+ ? {
127
+ className: cx(EXPANDED_SURFACE, 'animate-in fade-in-0 duration-200 motion-reduce:animate-none'),
128
+ style: {
129
+ position: 'fixed',
130
+ zIndex,
131
+ inset: 0,
132
+ paddingTop: 'env(safe-area-inset-top, 0px)',
133
+ paddingBottom: 'env(safe-area-inset-bottom, 0px)',
134
+ overflow: 'hidden',
135
+ },
136
+ }
137
+ : {
138
+ className: cx(AGENT_PANEL, 'animate-in fade-in-0 zoom-in-95 slide-in-from-bottom-2 duration-200 ease-out motion-reduce:animate-none'),
139
+ style: {
140
+ position: 'fixed',
141
+ zIndex,
142
+ bottom: p.bottom,
143
+ right: p.right,
144
+ width: p.width,
145
+ height: p.height,
146
+ overflow: 'hidden',
147
+ },
148
+ };
149
+ return (_jsxs(_Fragment, { children: [open && (_jsx("div", { ref: panelRef, role: "dialog", "aria-modal": filling ? 'true' : 'false', "aria-label": branding.name ?? 'Copiloto', tabIndex: -1, className: surface.className, style: surface.style, children: channels ? (_jsx(CopilotInbox, { adapter: channels, state: channelState, activeId: activeId, onSelect: select, expanded: filling, includeBot: includeBot, actions: actions, onClose: close, onEscape: escape })) : (_jsx("div", { className: cx('mx-auto h-full w-full', filling && 'max-w-3xl'), children: _jsx(CopilotChat, { onClose: close, onEscape: escape, headerEnd: actions, sessions: sessions, onSelectSession: onSelectSession, demo: demo }) })) })), !(open && filling) && (_jsxs("button", { type: "button", "aria-label": open ? labels.close : labels.open, "aria-expanded": open, ref: fabRef, className: cx('fixed flex size-12 items-center justify-center rounded-full border bg-background shadow-lg', AGENT_FOCUS), style: { ...fab.fabStyle, zIndex }, onPointerDown: fab.onFabPointerDown, onPointerMove: fab.onFabPointerMove, onPointerUp: fab.onFabPointerUp, onClick: () => {
62
150
  if (!fab.shouldSkipFabClick())
63
151
  setOpen((o) => !o);
64
- }, children: branding.avatar ?? _jsx(Mascot, { skin: branding.mascotSkin, size: 36 }) })] }));
152
+ }, children: [branding.avatar ?? _jsx(Mascot, { skin: branding.mascotSkin, size: 36 }), unread > 0 && !open && (_jsx("span", { "aria-label": `${unread} ${labels.unread}`, className: "absolute -right-1 -top-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-destructive px-1 text-[10px] font-bold text-destructive-foreground", children: unread > 9 ? '9+' : unread }))] }))] }));
65
153
  }
66
154
  //# sourceMappingURL=copilot-widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-widget.js","sourceRoot":"","sources":["../src/copilot-widget.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot-widget.js","sourceRoot":"","sources":["../src/copilot-widget.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { CopilotProvider, useCopilot, useCopilotSuggestions } from './context';
1
+ export { CopilotProvider, CopilotScope, useCopilot, useCopilotSuggestions } from './context';
2
2
  export type { CopilotProviderProps, CopilotContextValue } from './context';
3
3
  export { CopilotChat } from './copilot-chat';
4
4
  export type { CopilotChatProps } from './copilot-chat';
@@ -17,4 +17,18 @@ export { useRevealText, revealSlice, revealStep } from './use-reveal-text';
17
17
  export { AGENT_PANEL, AGENT_BAR, AGENT_CAPSULE, AGENT_CARD, AGENT_CARD_INTERACTIVE, AGENT_ENTER, AGENT_FOCUS } from './surfaces';
18
18
  export { DEFAULT_LABELS } from './types';
19
19
  export type * from './types';
20
+ export { Markdown } from './markdown';
21
+ export type { MarkdownProps } from './markdown';
22
+ export { normalizeMarkdown, closeOpenFences } from './text/normalize';
23
+ export { scrubToolDump } from './text/tool-dump';
24
+ export { stripMarkdownLite } from './text/plain-text';
25
+ export { BOT_CHANNEL_ID, applyChannelEvent, sortChannels, formatRelativeTime } from './channels';
26
+ export type { ChannelAdapter, ChannelEvent, ChannelKind, ChannelMessage, ChatChannel } from './channels';
27
+ export { useChannels } from './use-channels';
28
+ export { CopilotInbox } from './copilot-inbox';
29
+ export type { CopilotInboxProps } from './copilot-inbox';
30
+ export { ChannelList, ChannelAvatar, UnreadBadge } from './channel-list';
31
+ export { ChannelThread } from './channel-thread';
32
+ export { ChatHeader } from './chat-header';
33
+ export { Composer } from './composer';
20
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAC9E,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChG,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,mBAAmB,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAC5F,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChG,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,mBAAmB,SAAS,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAChG,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { CopilotProvider, useCopilot, useCopilotSuggestions } from './context';
1
+ export { CopilotProvider, CopilotScope, useCopilot, useCopilotSuggestions } from './context';
2
2
  export { CopilotChat } from './copilot-chat';
3
3
  export { CopilotWidget } from './copilot-widget';
4
4
  export { createHttpChatClient, toChatMessage } from './client';
@@ -10,4 +10,15 @@ export { useDraggableFab, computePanelLayout, bottomLeftFabPosition } from './us
10
10
  export { useRevealText, revealSlice, revealStep } from './use-reveal-text';
11
11
  export { AGENT_PANEL, AGENT_BAR, AGENT_CAPSULE, AGENT_CARD, AGENT_CARD_INTERACTIVE, AGENT_ENTER, AGENT_FOCUS } from './surfaces';
12
12
  export { DEFAULT_LABELS } from './types';
13
+ export { Markdown } from './markdown';
14
+ export { normalizeMarkdown, closeOpenFences } from './text/normalize';
15
+ export { scrubToolDump } from './text/tool-dump';
16
+ export { stripMarkdownLite } from './text/plain-text';
17
+ export { BOT_CHANNEL_ID, applyChannelEvent, sortChannels, formatRelativeTime } from './channels';
18
+ export { useChannels } from './use-channels';
19
+ export { CopilotInbox } from './copilot-inbox';
20
+ export { ChannelList, ChannelAvatar, UnreadBadge } from './channel-list';
21
+ export { ChannelThread } from './channel-thread';
22
+ export { ChatHeader } from './chat-header';
23
+ export { Composer } from './composer';
13
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhG,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhG,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEhG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { type MouseEvent } from 'react';
2
+ export interface MarkdownProps {
3
+ content: string;
4
+ className?: string;
5
+ /** The text is still being typed in: unterminated code fences are closed virtually. */
6
+ streaming?: boolean;
7
+ /**
8
+ * Intercept link clicks (SPA navigation for in-app links). Return `true` when
9
+ * handled; the browser navigation is then cancelled. Receives the raw href.
10
+ */
11
+ onLinkClick?: (href: string, event: MouseEvent<HTMLAnchorElement>) => boolean | void;
12
+ /** Label of the code copy button. */
13
+ copyLabel?: string;
14
+ copiedLabel?: string;
15
+ }
16
+ /**
17
+ * Safe Markdown + GFM for AI replies. No raw HTML (react-markdown drops it),
18
+ * dangerous URL schemes are neutralised by `defaultUrlTransform`, links open
19
+ * with `noopener noreferrer`, images are limited to http(s)/same-origin.
20
+ * Styled with theme tokens only (no typography plugin needed).
21
+ */
22
+ export declare const Markdown: import("react").MemoExoticComponent<({ content, className, streaming, onLinkClick, copyLabel, copiedLabel }: MarkdownProps) => import("react").JSX.Element>;
23
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,UAAU,EAAkB,MAAM,OAAO,CAAA;AASvE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uFAAuF;IACvF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,OAAO,GAAG,IAAI,CAAA;IACpF,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAiHD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,+GAAkG,aAAa,iCAalI,CAAA"}