@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.
- package/README.md +39 -0
- package/dist/channel-list.d.ts +19 -0
- package/dist/channel-list.d.ts.map +1 -0
- package/dist/channel-list.js +42 -0
- package/dist/channel-list.js.map +1 -0
- package/dist/channel-thread.d.ts +9 -0
- package/dist/channel-thread.d.ts.map +1 -0
- package/dist/channel-thread.js +89 -0
- package/dist/channel-thread.js.map +1 -0
- package/dist/channels.d.ts +74 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +59 -0
- package/dist/channels.js.map +1 -0
- package/dist/chat-header.d.ts +13 -0
- package/dist/chat-header.d.ts.map +1 -0
- package/dist/chat-header.js +8 -0
- package/dist/chat-header.js.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -0
- package/dist/client.js.map +1 -1
- package/dist/composer.d.ts +7 -0
- package/dist/composer.d.ts.map +1 -0
- package/dist/composer.js +25 -0
- package/dist/composer.js.map +1 -0
- package/dist/context.d.ts +12 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +9 -2
- package/dist/context.js.map +1 -1
- package/dist/copilot-chat.d.ts +14 -1
- package/dist/copilot-chat.d.ts.map +1 -1
- package/dist/copilot-chat.js +15 -23
- package/dist/copilot-chat.js.map +1 -1
- package/dist/copilot-inbox.d.ts +24 -0
- package/dist/copilot-inbox.d.ts.map +1 -0
- package/dist/copilot-inbox.js +51 -0
- package/dist/copilot-inbox.js.map +1 -0
- package/dist/copilot-widget.d.ts +26 -1
- package/dist/copilot-widget.d.ts.map +1 -1
- package/dist/copilot-widget.js +103 -15
- package/dist/copilot-widget.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/markdown.d.ts +23 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +82 -0
- package/dist/markdown.js.map +1 -0
- package/dist/text/normalize.d.ts +11 -0
- package/dist/text/normalize.d.ts.map +1 -0
- package/dist/text/normalize.js +32 -0
- package/dist/text/normalize.js.map +1 -0
- package/dist/text/plain-text.d.ts +3 -0
- package/dist/text/plain-text.d.ts.map +1 -0
- package/dist/text/plain-text.js +20 -0
- package/dist/text/plain-text.js.map +1 -0
- package/dist/text/tool-dump.d.ts +2 -0
- package/dist/text/tool-dump.d.ts.map +1 -0
- package/dist/text/tool-dump.js +30 -0
- package/dist/text/tool-dump.js.map +1 -0
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -1
- package/dist/use-channels.d.ts +15 -0
- package/dist/use-channels.d.ts.map +1 -0
- package/dist/use-channels.js +57 -0
- package/dist/use-channels.js.map +1 -0
- package/dist/use-chat.d.ts.map +1 -1
- package/dist/use-chat.js +1 -0
- package/dist/use-chat.js.map +1 -1
- package/package.json +5 -1
package/dist/copilot-chat.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/copilot-chat.js
CHANGED
|
@@ -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
|
|
3
|
-
import { Check, Plus, RotateCw,
|
|
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 {
|
|
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%]
|
|
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
|
|
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
|
-
|
|
56
|
+
const esc = onEscape ?? onClose;
|
|
57
|
+
if (e.key === 'Escape' && esc && !e.nativeEvent.isComposing) {
|
|
63
58
|
e.stopPropagation();
|
|
64
|
-
|
|
59
|
+
esc();
|
|
65
60
|
}
|
|
66
|
-
}, children: [_jsxs(
|
|
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
|
package/dist/copilot-chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-chat.js","sourceRoot":"","sources":["../src/copilot-chat.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,
|
|
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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"}
|
package/dist/copilot-widget.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/copilot-widget.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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"}
|