@neuronection/assistant-ui 0.23.0 → 0.25.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/CHANGELOG.md +92 -0
- package/README.md +9 -0
- package/dist/about.js +1 -1
- package/dist/ai-magic-fill.js +1 -1
- package/dist/chat-branch-tree.d.ts +45 -0
- package/dist/chat-branch-tree.js +3 -0
- package/dist/chat-branch-tree.js.map +1 -0
- package/dist/chat-composer.d.ts +50 -0
- package/dist/chat-composer.js +3 -0
- package/dist/chat-composer.js.map +1 -0
- package/dist/chat-core.d.ts +154 -0
- package/dist/chat-core.js +4 -0
- package/dist/chat-core.js.map +1 -0
- package/dist/chat-drawer.d.ts +32 -0
- package/dist/chat-drawer.js +3 -0
- package/dist/chat-drawer.js.map +1 -0
- package/dist/chat-launcher.d.ts +28 -0
- package/dist/chat-launcher.js +3 -0
- package/dist/chat-launcher.js.map +1 -0
- package/dist/chat-markdown.d.ts +64 -0
- package/dist/chat-markdown.js +3 -0
- package/dist/chat-markdown.js.map +1 -0
- package/dist/chat-message.d.ts +108 -0
- package/dist/chat-message.js +3 -0
- package/dist/chat-message.js.map +1 -0
- package/dist/chat-panel.d.ts +28 -0
- package/dist/chat-panel.js +3 -0
- package/dist/chat-panel.js.map +1 -0
- package/dist/chat-reasoning.d.ts +27 -0
- package/dist/chat-reasoning.js +3 -0
- package/dist/chat-reasoning.js.map +1 -0
- package/dist/chat-session-list.d.ts +51 -0
- package/dist/chat-session-list.js +3 -0
- package/dist/chat-session-list.js.map +1 -0
- package/dist/chat-tool-card.d.ts +43 -0
- package/dist/chat-tool-card.js +3 -0
- package/dist/chat-tool-card.js.map +1 -0
- package/dist/chat-transcript.d.ts +33 -0
- package/dist/chat-transcript.js +3 -0
- package/dist/chat-transcript.js.map +1 -0
- package/dist/chat-turn-status.d.ts +26 -0
- package/dist/chat-turn-status.js +3 -0
- package/dist/chat-turn-status.js.map +1 -0
- package/dist/{chunk-CZ2BL2ZL.js → chunk-3JJ2WCPN.js} +2 -2
- package/dist/{chunk-CZ2BL2ZL.js.map → chunk-3JJ2WCPN.js.map} +1 -1
- package/dist/chunk-5IOLDMDY.js +3 -0
- package/dist/chunk-5IOLDMDY.js.map +1 -0
- package/dist/{chunk-EODV6JK7.js → chunk-5QTHDB3D.js} +3 -3
- package/dist/{chunk-EODV6JK7.js.map → chunk-5QTHDB3D.js.map} +1 -1
- package/dist/chunk-6E6RRLKU.js +3 -0
- package/dist/chunk-6E6RRLKU.js.map +1 -0
- package/dist/chunk-6GNLY2EB.js +272 -0
- package/dist/chunk-6GNLY2EB.js.map +1 -0
- package/dist/chunk-743FJDRA.js +184 -0
- package/dist/chunk-743FJDRA.js.map +1 -0
- package/dist/chunk-BSIWLVDX.js +217 -0
- package/dist/chunk-BSIWLVDX.js.map +1 -0
- package/dist/chunk-BVJT67B5.js +134 -0
- package/dist/chunk-BVJT67B5.js.map +1 -0
- package/dist/chunk-DZBTJZZV.js +201 -0
- package/dist/chunk-DZBTJZZV.js.map +1 -0
- package/dist/chunk-HQIYSW2D.js +131 -0
- package/dist/chunk-HQIYSW2D.js.map +1 -0
- package/dist/chunk-LSCWBNG3.js +3 -0
- package/dist/chunk-LSCWBNG3.js.map +1 -0
- package/dist/chunk-NBT7NLNU.js +120 -0
- package/dist/chunk-NBT7NLNU.js.map +1 -0
- package/dist/chunk-NKYPNEOX.js +198 -0
- package/dist/chunk-NKYPNEOX.js.map +1 -0
- package/dist/{chunk-INMAUGBK.js → chunk-OH7AJ3WY.js} +3 -3
- package/dist/{chunk-INMAUGBK.js.map → chunk-OH7AJ3WY.js.map} +1 -1
- package/dist/chunk-P75QKU5J.js +57 -0
- package/dist/chunk-P75QKU5J.js.map +1 -0
- package/dist/chunk-PAQ6YQ7Y.js +3 -0
- package/dist/chunk-PAQ6YQ7Y.js.map +1 -0
- package/dist/chunk-QVDCFZSE.js +72 -0
- package/dist/chunk-QVDCFZSE.js.map +1 -0
- package/dist/chunk-RPLEI6LQ.js +102 -0
- package/dist/chunk-RPLEI6LQ.js.map +1 -0
- package/dist/chunk-S62VJVWB.js +36 -0
- package/dist/chunk-S62VJVWB.js.map +1 -0
- package/dist/chunk-X3C2FBMR.js +141 -0
- package/dist/chunk-X3C2FBMR.js.map +1 -0
- package/dist/{chunk-7YLR4AGA.js → chunk-XZWLTTHA.js} +2 -2
- package/dist/{chunk-7YLR4AGA.js.map → chunk-XZWLTTHA.js.map} +1 -1
- package/dist/chunk-Z4IBQ53C.js +75 -0
- package/dist/chunk-Z4IBQ53C.js.map +1 -0
- package/dist/{chunk-7KD4MG75.js → chunk-ZK2V2LPA.js} +3 -3
- package/dist/chunk-ZK2V2LPA.js.map +1 -0
- package/dist/copy-button.js +1 -1
- package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +37 -23
- package/dist/index.js.map +1 -1
- package/dist/portal.js +1 -1
- package/dist/settings-shell.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/tree-YaIz73vo.d.ts +54 -0
- package/dist/types-DZwzmyKE.d.ts +44 -0
- package/package.json +60 -2
- package/dist/chunk-7KD4MG75.js.map +0 -1
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
4
|
+
import { X } from 'lucide-react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
function useIsNarrow(breakpointPx) {
|
|
8
|
+
const [narrow, setNarrow] = React.useState(
|
|
9
|
+
() => typeof window !== "undefined" && window.matchMedia !== void 0 ? window.matchMedia(`(max-width: ${breakpointPx - 1}px)`).matches : false
|
|
10
|
+
);
|
|
11
|
+
React.useEffect(() => {
|
|
12
|
+
if (typeof window === "undefined" || window.matchMedia === void 0) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const query = window.matchMedia(`(max-width: ${breakpointPx - 1}px)`);
|
|
16
|
+
const listener = (event) => setNarrow(event.matches);
|
|
17
|
+
query.addEventListener("change", listener);
|
|
18
|
+
setNarrow(query.matches);
|
|
19
|
+
return () => query.removeEventListener("change", listener);
|
|
20
|
+
}, [breakpointPx]);
|
|
21
|
+
return narrow;
|
|
22
|
+
}
|
|
23
|
+
var ChatDrawer = React.forwardRef(
|
|
24
|
+
function ChatDrawer2({
|
|
25
|
+
open,
|
|
26
|
+
onOpenChange,
|
|
27
|
+
panel,
|
|
28
|
+
side = "right",
|
|
29
|
+
width = 480,
|
|
30
|
+
onWidthChange,
|
|
31
|
+
minWidth = 320,
|
|
32
|
+
maxWidth = 860,
|
|
33
|
+
resizable = true,
|
|
34
|
+
closeLabel = "Close chat",
|
|
35
|
+
resizeLabel = "Resize chat panel",
|
|
36
|
+
title = "Chat",
|
|
37
|
+
fullScreenBreakpointPx = 768,
|
|
38
|
+
container,
|
|
39
|
+
overlayClassName,
|
|
40
|
+
className
|
|
41
|
+
}) {
|
|
42
|
+
const narrow = useIsNarrow(fullScreenBreakpointPx);
|
|
43
|
+
const draggingRef = React.useRef(false);
|
|
44
|
+
const clamp = (value) => Math.min(maxWidth, Math.max(minWidth, value));
|
|
45
|
+
const onHandleKeyDown = (event) => {
|
|
46
|
+
if (!resizable || narrow) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const step = event.shiftKey ? 48 : 16;
|
|
50
|
+
if (event.key === (side === "right" ? "ArrowLeft" : "ArrowRight")) {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
onWidthChange?.(clamp(width + step));
|
|
53
|
+
} else if (event.key === (side === "right" ? "ArrowRight" : "ArrowLeft")) {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
onWidthChange?.(clamp(width - step));
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const onHandlePointerDown = (event) => {
|
|
59
|
+
if (!resizable || narrow || event.button !== 0) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
draggingRef.current = true;
|
|
64
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
65
|
+
};
|
|
66
|
+
const onHandlePointerMove = (event) => {
|
|
67
|
+
if (!draggingRef.current) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const delta = side === "right" ? window.innerWidth - event.clientX : event.clientX;
|
|
71
|
+
onWidthChange?.(clamp(delta));
|
|
72
|
+
};
|
|
73
|
+
const onHandlePointerUp = (event) => {
|
|
74
|
+
if (!draggingRef.current) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
draggingRef.current = false;
|
|
78
|
+
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
79
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return /* @__PURE__ */ jsx(DialogPrimitive.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { container, children: [
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
DialogPrimitive.Overlay,
|
|
85
|
+
{
|
|
86
|
+
"data-as": "chat-drawer-overlay",
|
|
87
|
+
className: cn("as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]", overlayClassName)
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
/* @__PURE__ */ jsxs(
|
|
91
|
+
DialogPrimitive.Content,
|
|
92
|
+
{
|
|
93
|
+
"data-as": "chat-drawer",
|
|
94
|
+
"data-side": side,
|
|
95
|
+
"data-full-screen": narrow || void 0,
|
|
96
|
+
style: narrow ? void 0 : { width: `${width}px`, maxWidth: "100vw" },
|
|
97
|
+
className: cn(
|
|
98
|
+
"as-anim-drawer fixed top-0 z-[var(--as-z-modal)] flex h-dvh flex-col border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none",
|
|
99
|
+
narrow ? "inset-x-0 bottom-0 border-t" : side === "right" ? "bottom-0 right-0 border-l" : "bottom-0 left-0 border-r",
|
|
100
|
+
className
|
|
101
|
+
),
|
|
102
|
+
children: [
|
|
103
|
+
resizable && !narrow ? /* @__PURE__ */ jsx(
|
|
104
|
+
"div",
|
|
105
|
+
{
|
|
106
|
+
role: "separator",
|
|
107
|
+
"aria-orientation": "vertical",
|
|
108
|
+
"aria-label": resizeLabel,
|
|
109
|
+
tabIndex: 0,
|
|
110
|
+
onKeyDown: onHandleKeyDown,
|
|
111
|
+
onPointerDown: onHandlePointerDown,
|
|
112
|
+
onPointerMove: onHandlePointerMove,
|
|
113
|
+
onPointerUp: onHandlePointerUp,
|
|
114
|
+
onPointerCancel: onHandlePointerUp,
|
|
115
|
+
className: cn(
|
|
116
|
+
"group/handle absolute top-0 z-10 h-dvh w-1.5 cursor-col-resize focus-visible:outline-2 focus-visible:outline-[var(--as-focus-ring)]",
|
|
117
|
+
side === "right" ? "-left-1" : "-right-1"
|
|
118
|
+
),
|
|
119
|
+
children: /* @__PURE__ */ jsx("span", { className: "mx-auto block h-full w-px bg-transparent transition-colors group-hover/handle:bg-[var(--as-border)]" })
|
|
120
|
+
}
|
|
121
|
+
) : null,
|
|
122
|
+
/* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "sr-only", children: title }),
|
|
123
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: panel }),
|
|
124
|
+
/* @__PURE__ */ jsx(
|
|
125
|
+
DialogPrimitive.Close,
|
|
126
|
+
{
|
|
127
|
+
"aria-label": closeLabel,
|
|
128
|
+
className: "absolute right-3 top-2.5 rounded-[var(--as-radius-sm)] p-1 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
|
|
129
|
+
children: /* @__PURE__ */ jsx(X, { "aria-hidden": true, className: "size-4" })
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
] }) });
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
export { ChatDrawer };
|
|
140
|
+
//# sourceMappingURL=chunk-X3C2FBMR.js.map
|
|
141
|
+
//# sourceMappingURL=chunk-X3C2FBMR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/chat-drawer/ChatDrawer.tsx"],"names":["ChatDrawer"],"mappings":"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","file":"chunk-X3C2FBMR.js","sourcesContent":["import * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\n\nimport { cn } from '../../lib/utils'\n\nexport interface ChatDrawerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The sidepanel content — usually `ChatPanel variant=\"sidebar\"`. */\n panel: React.ReactNode\n side?: 'right' | 'left'\n /** Controlled width in px (persist app-side). Default 480. */\n width?: number\n onWidthChange?: (width: number) => void\n minWidth?: number\n maxWidth?: number\n resizable?: boolean\n closeLabel?: string\n resizeLabel?: string\n /** Accessible dialog name (visually hidden). Default \"Chat\". */\n title?: string\n /** Below this viewport width the drawer goes full-screen. Default 768. */\n fullScreenBreakpointPx?: number\n container?: HTMLElement | null\n overlayClassName?: string\n className?: string\n}\n\nfunction useIsNarrow(breakpointPx: number): boolean {\n const [narrow, setNarrow] = React.useState(() =>\n typeof window !== 'undefined' && window.matchMedia !== undefined\n ? window.matchMedia(`(max-width: ${breakpointPx - 1}px)`).matches\n : false,\n )\n React.useEffect(() => {\n if (typeof window === 'undefined' || window.matchMedia === undefined) {\n return\n }\n const query = window.matchMedia(`(max-width: ${breakpointPx - 1}px)`)\n const listener = (event: MediaQueryListEvent) => setNarrow(event.matches)\n query.addEventListener('change', listener)\n setNarrow(query.matches)\n return () => query.removeEventListener('change', listener)\n }, [breakpointPx])\n return narrow\n}\n\n/**\n * The resizable chat sidepanel (health's `AIDrawer` + study's resizable\n * sidebar, family-standard): portal overlay on Radix Dialog (focus trap,\n * Escape), drag + keyboard resize, full-screen below the breakpoint.\n */\nexport const ChatDrawer = React.forwardRef<HTMLDivElement, ChatDrawerProps>(\n function ChatDrawer({\n open,\n onOpenChange,\n panel,\n side = 'right',\n width = 480,\n onWidthChange,\n minWidth = 320,\n maxWidth = 860,\n resizable = true,\n closeLabel = 'Close chat',\n resizeLabel = 'Resize chat panel',\n title = 'Chat',\n fullScreenBreakpointPx = 768,\n container,\n overlayClassName,\n className,\n }) {\n const narrow = useIsNarrow(fullScreenBreakpointPx)\n const draggingRef = React.useRef(false)\n\n const clamp = (value: number) => Math.min(maxWidth, Math.max(minWidth, value))\n\n const onHandleKeyDown = (event: React.KeyboardEvent) => {\n if (!resizable || narrow) {\n return\n }\n const step = event.shiftKey ? 48 : 16\n if (event.key === (side === 'right' ? 'ArrowLeft' : 'ArrowRight')) {\n event.preventDefault()\n onWidthChange?.(clamp(width + step))\n } else if (event.key === (side === 'right' ? 'ArrowRight' : 'ArrowLeft')) {\n event.preventDefault()\n onWidthChange?.(clamp(width - step))\n }\n }\n\n const onHandlePointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!resizable || narrow || event.button !== 0) {\n return\n }\n event.preventDefault()\n draggingRef.current = true\n event.currentTarget.setPointerCapture(event.pointerId)\n }\n\n const onHandlePointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!draggingRef.current) {\n return\n }\n const delta = side === 'right' ? window.innerWidth - event.clientX : event.clientX\n onWidthChange?.(clamp(delta))\n }\n\n const onHandlePointerUp = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!draggingRef.current) {\n return\n }\n draggingRef.current = false\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId)\n }\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal container={container}>\n <DialogPrimitive.Overlay\n data-as=\"chat-drawer-overlay\"\n className={cn('as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]', overlayClassName)}\n />\n <DialogPrimitive.Content\n data-as=\"chat-drawer\"\n data-side={side}\n data-full-screen={narrow || undefined}\n style={narrow ? undefined : { width: `${width}px`, maxWidth: '100vw' }}\n className={cn(\n 'as-anim-drawer fixed top-0 z-[var(--as-z-modal)] flex h-dvh flex-col border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none',\n narrow\n ? 'inset-x-0 bottom-0 border-t'\n : side === 'right'\n ? 'bottom-0 right-0 border-l'\n : 'bottom-0 left-0 border-r',\n className,\n )}\n >\n {resizable && !narrow ? (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={resizeLabel}\n tabIndex={0}\n onKeyDown={onHandleKeyDown}\n onPointerDown={onHandlePointerDown}\n onPointerMove={onHandlePointerMove}\n onPointerUp={onHandlePointerUp}\n onPointerCancel={onHandlePointerUp}\n className={cn(\n 'group/handle absolute top-0 z-10 h-dvh w-1.5 cursor-col-resize focus-visible:outline-2 focus-visible:outline-[var(--as-focus-ring)]',\n side === 'right' ? '-left-1' : '-right-1',\n )}\n >\n <span className=\"mx-auto block h-full w-px bg-transparent transition-colors group-hover/handle:bg-[var(--as-border)]\" />\n </div>\n ) : null}\n <DialogPrimitive.Title className=\"sr-only\">{title}</DialogPrimitive.Title>\n <div className=\"flex min-h-0 flex-1 flex-col\">{panel}</div>\n <DialogPrimitive.Close\n aria-label={closeLabel}\n className=\"absolute right-3 top-2.5 rounded-[var(--as-radius-sm)] p-1 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X aria-hidden className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n },\n)\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/portal/Portal.tsx"],"names":[],"mappings":";;;AAQO,SAAS,MAAA,CAAO,EAAE,QAAA,EAAU,SAAA,EAAU,EAAgB;AAC3D,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,aAAa,QAAA,CAAS,IAAA;AACpC,EAAA,OAAO,YAAA,CAAa,UAAU,KAAK,CAAA;AACrC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/portal/Portal.tsx"],"names":[],"mappings":";;;AAQO,SAAS,MAAA,CAAO,EAAE,QAAA,EAAU,SAAA,EAAU,EAAgB;AAC3D,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,aAAa,QAAA,CAAS,IAAA;AACpC,EAAA,OAAO,YAAA,CAAa,UAAU,KAAK,CAAA;AACrC","file":"chunk-XZWLTTHA.js","sourcesContent":["import * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface PortalProps {\n children: React.ReactNode\n container?: HTMLElement | null\n}\n\nexport function Portal({ children, container }: PortalProps) {\n if (typeof document === 'undefined') return null\n const mount = container ?? document.body\n return createPortal(children, mount)\n}\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// src/components/chat-core/tree.ts
|
|
2
|
+
function buildBranchTree(input) {
|
|
3
|
+
const nodes = {};
|
|
4
|
+
for (const node of input.nodes) {
|
|
5
|
+
nodes[node.id] = { ...node, childIds: [] };
|
|
6
|
+
}
|
|
7
|
+
for (const node of Object.values(nodes)) {
|
|
8
|
+
if (node.parentId !== null && nodes[node.parentId] !== void 0) {
|
|
9
|
+
nodes[node.parentId].childIds.push(node.id);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
let activeRootId = input.activeRootId ?? null;
|
|
13
|
+
if (activeRootId === null || nodes[activeRootId] === void 0) {
|
|
14
|
+
const roots = Object.values(nodes).filter((node) => node.parentId === null);
|
|
15
|
+
activeRootId = roots.length > 0 ? roots[roots.length - 1].id : null;
|
|
16
|
+
}
|
|
17
|
+
return { activeRootId, nodes };
|
|
18
|
+
}
|
|
19
|
+
function linearTree(items) {
|
|
20
|
+
const nodes = {};
|
|
21
|
+
let previousId = null;
|
|
22
|
+
for (const item of items) {
|
|
23
|
+
nodes[item.id] = {
|
|
24
|
+
id: item.id,
|
|
25
|
+
role: item.role,
|
|
26
|
+
excerpt: item.excerpt,
|
|
27
|
+
parentId: previousId,
|
|
28
|
+
activeChildId: null,
|
|
29
|
+
childIds: []
|
|
30
|
+
};
|
|
31
|
+
if (previousId !== null) {
|
|
32
|
+
nodes[previousId].activeChildId = item.id;
|
|
33
|
+
nodes[previousId].childIds.push(item.id);
|
|
34
|
+
}
|
|
35
|
+
previousId = item.id;
|
|
36
|
+
}
|
|
37
|
+
return { activeRootId: items.length > 0 ? items[0].id : null, nodes };
|
|
38
|
+
}
|
|
39
|
+
function walkActivePath(tree) {
|
|
40
|
+
const path = [];
|
|
41
|
+
const visited = /* @__PURE__ */ new Set();
|
|
42
|
+
let currentId = tree.activeRootId;
|
|
43
|
+
while (currentId !== null && !visited.has(currentId)) {
|
|
44
|
+
const node = tree.nodes[currentId];
|
|
45
|
+
if (node === void 0) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
visited.add(currentId);
|
|
49
|
+
path.push(currentId);
|
|
50
|
+
const fallback = node.childIds.length > 0 ? node.childIds[node.childIds.length - 1] ?? null : null;
|
|
51
|
+
const nextId = node.activeChildId ?? fallback;
|
|
52
|
+
currentId = nextId !== null && tree.nodes[nextId] !== void 0 ? nextId : null;
|
|
53
|
+
}
|
|
54
|
+
return path;
|
|
55
|
+
}
|
|
56
|
+
function activePathSet(tree) {
|
|
57
|
+
return new Set(walkActivePath(tree));
|
|
58
|
+
}
|
|
59
|
+
function variantInfo(tree, nodeId) {
|
|
60
|
+
const node = tree.nodes[nodeId];
|
|
61
|
+
if (node === void 0) {
|
|
62
|
+
return { index: 1, count: 1, siblingIds: [nodeId] };
|
|
63
|
+
}
|
|
64
|
+
const siblingIds = node.parentId !== null && tree.nodes[node.parentId] !== void 0 ? tree.nodes[node.parentId].childIds : Object.values(tree.nodes).filter((candidate) => candidate.parentId === null).map((candidate) => candidate.id);
|
|
65
|
+
const index = siblingIds.indexOf(nodeId);
|
|
66
|
+
return {
|
|
67
|
+
index: index === -1 ? 1 : index + 1,
|
|
68
|
+
count: siblingIds.length,
|
|
69
|
+
siblingIds
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { activePathSet, buildBranchTree, linearTree, variantInfo, walkActivePath };
|
|
74
|
+
//# sourceMappingURL=chunk-Z4IBQ53C.js.map
|
|
75
|
+
//# sourceMappingURL=chunk-Z4IBQ53C.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/chat-core/tree.ts"],"names":[],"mappings":"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","file":"chunk-Z4IBQ53C.js","sourcesContent":["import type { ChatRole } from './types'\n\nexport interface BranchNode {\n id: string\n role: ChatRole\n excerpt?: string\n parentId: string | null\n activeChildId: string | null\n /** In insertion (sibling-order) order; the last entry is the newest sibling. */\n childIds: string[]\n}\n\nexport interface BranchTree {\n activeRootId: string | null\n nodes: Record<string, BranchNode>\n}\n\nexport type BranchNodeInput = Omit<BranchNode, 'childIds'>\n\n/**\n * Index the server's branch-tree projection (family contract: the read-only\n * `GET …/tree` shape) and compute child lists. Insertion order defines\n * sibling order — the last child is the newest variant (fallback when a\n * parent has no `activeChildId`).\n */\nexport function buildBranchTree(input: { activeRootId?: string | null; nodes: BranchNodeInput[] }): BranchTree {\n const nodes: Record<string, BranchNode> = {}\n for (const node of input.nodes) {\n nodes[node.id] = { ...node, childIds: [] }\n }\n for (const node of Object.values(nodes)) {\n if (node.parentId !== null && nodes[node.parentId] !== undefined) {\n nodes[node.parentId]!.childIds.push(node.id)\n }\n }\n let activeRootId = input.activeRootId ?? null\n if (activeRootId === null || nodes[activeRootId] === undefined) {\n const roots = Object.values(nodes).filter((node) => node.parentId === null)\n activeRootId = roots.length > 0 ? roots[roots.length - 1]!.id : null\n }\n return { activeRootId, nodes }\n}\n\n/**\n * Degenerate single-path tree from a visible (already active-path) message\n * list — for apps/backends without branching yet. Every message parents to\n * the previous one; the tree renders identically to a branched one.\n */\nexport function linearTree(items: { id: string; role: ChatRole; excerpt?: string }[]): BranchTree {\n const nodes: Record<string, BranchNode> = {}\n let previousId: string | null = null\n for (const item of items) {\n nodes[item.id] = {\n id: item.id,\n role: item.role,\n excerpt: item.excerpt,\n parentId: previousId,\n activeChildId: null,\n childIds: [],\n }\n if (previousId !== null) {\n nodes[previousId]!.activeChildId = item.id\n nodes[previousId]!.childIds.push(item.id)\n }\n previousId = item.id\n }\n return { activeRootId: items.length > 0 ? items[0]!.id : null, nodes }\n}\n\n/**\n * The visible conversation: pointer walk from the active root, following\n * each node's `activeChildId` (fallback: newest sibling). Cycle-safe.\n */\nexport function walkActivePath(tree: BranchTree): string[] {\n const path: string[] = []\n const visited = new Set<string>()\n let currentId = tree.activeRootId\n while (currentId !== null && !visited.has(currentId)) {\n const node = tree.nodes[currentId]\n if (node === undefined) {\n break\n }\n visited.add(currentId)\n path.push(currentId)\n const fallback = node.childIds.length > 0 ? node.childIds[node.childIds.length - 1] ?? null : null\n const nextId = node.activeChildId ?? fallback\n currentId = nextId !== null && tree.nodes[nextId] !== undefined ? nextId : null\n }\n return path\n}\n\nexport function activePathSet(tree: BranchTree): Set<string> {\n return new Set(walkActivePath(tree))\n}\n\n/**\n * Sibling variant info for the inline `‹ n/N ›` switcher: the 1-based index\n * of `nodeId` among its siblings (roots are siblings of each other) and the\n * ordered sibling ids.\n */\nexport function variantInfo(\n tree: BranchTree,\n nodeId: string,\n): { index: number; count: number; siblingIds: string[] } {\n const node = tree.nodes[nodeId]\n if (node === undefined) {\n return { index: 1, count: 1, siblingIds: [nodeId] }\n }\n const siblingIds =\n node.parentId !== null && tree.nodes[node.parentId] !== undefined\n ? tree.nodes[node.parentId]!.childIds\n : Object.values(tree.nodes)\n .filter((candidate) => candidate.parentId === null)\n .map((candidate) => candidate.id)\n const index = siblingIds.indexOf(nodeId)\n return {\n index: index === -1 ? 1 : index + 1,\n count: siblingIds.length,\n siblingIds,\n }\n}\n"]}
|
|
@@ -10,7 +10,7 @@ var SettingsShell = React.forwardRef(
|
|
|
10
10
|
{
|
|
11
11
|
ref,
|
|
12
12
|
"data-as": "settings-shell",
|
|
13
|
-
className: cn("grid
|
|
13
|
+
className: cn("grid gap-8", className),
|
|
14
14
|
children: [
|
|
15
15
|
/* @__PURE__ */ jsx(
|
|
16
16
|
"nav",
|
|
@@ -79,5 +79,5 @@ var SettingsShell = React.forwardRef(
|
|
|
79
79
|
);
|
|
80
80
|
|
|
81
81
|
export { SettingsShell };
|
|
82
|
-
//# sourceMappingURL=chunk-
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
82
|
+
//# sourceMappingURL=chunk-ZK2V2LPA.js.map
|
|
83
|
+
//# sourceMappingURL=chunk-ZK2V2LPA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/settings-shell/SettingsShell.tsx"],"names":["SettingsShell"],"mappings":";;;;AAyBO,IAAM,aAAA,GAAsB,KAAA,CAAA,UAAA;AAAA,EACjC,SAASA,cAAAA,CACP,EAAE,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,YAAA,EAAc,SAAA,EAAU,EAChF,GAAA,EACA;AACA,IAAA,MAAM,aAAa,MAAA,EAAQ,IAAA;AAC3B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,gBAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,QAErC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,eAAA;AAAA,cACV,YAAA,EAAW,mBAAA;AAAA,cACX,aAAA,EAAa,SAAA;AAAA,cAEb,QAAA,kBAAA,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,gIAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,MAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EACZ,QAAA,EAAA;AAAA,sBAAA,UAAA,mBACC,GAAA;AAAA,wBAAC,UAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,0CAAA;AAAA,0BACV,aAAA,EAAW;AAAA;AAAA,uBACb,GACE,IAAA;AAAA,sCACJ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gDAAA,EACb,iBAAO,KAAA,EACV;AAAA,qBAAA,EACF,CAAA,GACE,IAAA;AAAA,oBACH,GAAA,CAAI,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,OAAO,WAAA,EAAa,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS,KAAM;AAC7D,sBAAA,MAAM,WAAW,EAAA,KAAO,MAAA;AACxB,sBAAA,uBACE,IAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BAEC,IAAA,EAAK,QAAA;AAAA,0BACL,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,0BAClC,OAAA,EAAS,MAAM,UAAA,CAAW,EAAE,CAAA;AAAA,0BAC5B,SAAA,EAAW,EAAA;AAAA,4BACT,uNAAA;AAAA,4BACA,WACI,8FAAA,GACA;AAAA,2BACN;AAAA,0BAEC,QAAA,EAAA;AAAA,4BAAA,IAAA,mBACC,GAAA;AAAA,8BAAC,IAAA;AAAA,8BAAA;AAAA,gCACC,SAAA,EAAU,6BAAA;AAAA,gCACV,aAAA,EAAW;AAAA;AAAA,6BACb,GACE,IAAA;AAAA,4CACJ,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EACd,QAAA,EAAA;AAAA,8CAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,8BACjC,8BACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mDAAA,EACb,uBACH,CAAA,GACE;AAAA,6BAAA,EACN,CAAA;AAAA,4BACC,2BACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EACb,oBACH,CAAA,GACE;AAAA;AAAA,yBAAA;AAAA,wBA7BC;AAAA,uBA8BP;AAAA,oBAEJ,CAAC;AAAA;AAAA;AAAA;AACH;AAAA,WACF;AAAA,0BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAS;AAAA;AAAA;AAAA,KACnD;AAAA,EAEJ;AACF","file":"chunk-ZK2V2LPA.js","sourcesContent":["import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface SettingsNavItem {\n id: string\n label: string\n description?: string\n icon?: LucideIcon\n /** Optional trailing node (status dot, count, badge) at the row edge. */\n trailing?: React.ReactNode\n}\n\nexport interface SettingsShellProps {\n nav: SettingsNavItem[]\n active: string\n onNavigate: (id: string) => void\n header?: { icon?: LucideIcon; title: string }\n children: React.ReactNode\n className?: string\n navClassName?: string\n /** Test hook: data-testid for the `<nav>` element. */\n navTestId?: string\n}\n\nexport const SettingsShell = React.forwardRef<HTMLDivElement, SettingsShellProps>(\n function SettingsShell(\n { nav, active, onNavigate, header, children, className, navClassName, navTestId },\n ref,\n ) {\n const HeaderIcon = header?.icon\n return (\n <div\n ref={ref}\n data-as=\"settings-shell\"\n className={cn('grid gap-8', className)}\n >\n <nav\n className=\"lg:col-span-1\"\n aria-label=\"Settings sections\"\n data-testid={navTestId}\n >\n <div\n className={cn(\n 'space-y-1 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-3 lg:sticky lg:top-24',\n navClassName,\n )}\n >\n {header ? (\n <div className=\"mb-2 flex items-center gap-2.5 border-b border-[var(--as-border)] px-3 py-2\">\n {HeaderIcon ? (\n <HeaderIcon\n className=\"size-5 shrink-0 text-[var(--as-primary)]\"\n aria-hidden\n />\n ) : null}\n <span className=\"truncate text-sm font-bold text-[var(--as-fg)]\">\n {header.title}\n </span>\n </div>\n ) : null}\n {nav.map(({ id, label, description, icon: Icon, trailing }) => {\n const isActive = id === active\n return (\n <button\n key={id}\n type=\"button\"\n aria-current={isActive ? 'page' : undefined}\n onClick={() => onNavigate(id)}\n className={cn(\n 'flex w-full cursor-pointer items-start rounded-[var(--as-radius)] px-3 py-2.5 text-left text-sm transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n isActive\n ? 'bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] font-bold text-[var(--as-primary)]'\n : 'font-medium text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )}\n >\n {Icon ? (\n <Icon\n className=\"mr-3 mt-0.5 size-4 shrink-0\"\n aria-hidden\n />\n ) : null}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate\">{label}</span>\n {description ? (\n <span className=\"text-[11px] font-normal text-[var(--as-muted-fg)]\">\n {description}\n </span>\n ) : null}\n </span>\n {trailing ? (\n <span className=\"ml-auto flex items-center self-center pl-2\">\n {trailing}\n </span>\n ) : null}\n </button>\n )\n })}\n </div>\n </nav>\n <div className=\"min-w-0 lg:col-span-3\">{children}</div>\n </div>\n )\n },\n)\n"]}
|
package/dist/copy-button.js
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/index.d.ts
CHANGED
|
@@ -62,6 +62,21 @@ export { RichTextEditor, RichTextEditorIcons, RichTextEditorLabels, RichTextEdit
|
|
|
62
62
|
export { DictationButton, DictationButtonProps, DictationError, DictationResult, DictationStatus, DictationStrip, DictationStripLabels, DictationStripProps, UseDictationOptions, useDictation } from './dictation.js';
|
|
63
63
|
export { AiTextTransformEventHandlers, AiTextTransformStatus, AiTextTransformTransport, UseAiTextTransformOptions, useAiTextTransform } from './ai-text-transform.js';
|
|
64
64
|
export { DiffCell, DiffRow, DiffSegment, LineDiffOptions, LineDiffResult, TextDiffView, TextDiffViewLabels, TextDiffViewProps, computeLineDiff, wordSegments } from './text-diff-view.js';
|
|
65
|
+
export { a as ChatAttachmentView, b as ChatError, c as ChatMessageStatus, d as ChatMessageVariants, e as ChatMessageView, C as ChatRole } from './types-DZwzmyKE.js';
|
|
66
|
+
export { ChatStreamEvent, ChatStreamTransport, FlowStepInfo, LiveNodeState, LiveToolCall, LiveTurnAction, LiveTurnState, LiveTurnStatus, UseChatStreamOptions, UseChatStreamResult, initialLiveTurnState, liveTurnReducer, useChatStream } from './chat-core.js';
|
|
67
|
+
export { B as BranchNode, a as BranchNodeInput, b as BranchTree, c as activePathSet, d as buildBranchTree, l as linearTree, v as variantInfo, w as walkActivePath } from './tree-YaIz73vo.js';
|
|
68
|
+
export { MarkdownCodeBlock, MarkdownCodeBlockLabels, MarkdownCodeBlockProps, MarkdownComponents, MarkdownSurface, MarkdownSurfaceProps, MermaidDiagram, MermaidDiagramProps } from './chat-markdown.js';
|
|
69
|
+
export { ChatMessage, ChatMessageAction, ChatMessageActions, ChatMessageEditor, ChatMessageEditorLabels, ChatMessageEditorProps, ChatMessageLabels, ChatMessageProps, MessageVariantSwitcher, MessageVariantSwitcherLabels, MessageVariantSwitcherProps } from './chat-message.js';
|
|
70
|
+
export { ChatReasoning, ChatReasoningLabels, ChatReasoningProps } from './chat-reasoning.js';
|
|
71
|
+
export { ChatToolCard, ChatToolCardLabels, ChatToolCardProps } from './chat-tool-card.js';
|
|
72
|
+
export { ChatTurnStatus, ChatTurnStatusLabels, ChatTurnStatusProps } from './chat-turn-status.js';
|
|
73
|
+
export { ChatComposer, ChatComposerIcons, ChatComposerLabels, ChatComposerProps } from './chat-composer.js';
|
|
74
|
+
export { ChatTranscript, ChatTranscriptLabels, ChatTranscriptProps } from './chat-transcript.js';
|
|
75
|
+
export { ChatBranchTree, ChatBranchTreeIcons, ChatBranchTreeLabels, ChatBranchTreeNode, ChatBranchTreeProps } from './chat-branch-tree.js';
|
|
76
|
+
export { ChatSessionList, ChatSessionListIcons, ChatSessionListLabels, ChatSessionListProps, ChatSessionView } from './chat-session-list.js';
|
|
77
|
+
export { ChatPanel, ChatPanelProps, ChatPanelVariant } from './chat-panel.js';
|
|
78
|
+
export { ChatDrawer, ChatDrawerProps } from './chat-drawer.js';
|
|
79
|
+
export { ChatLauncher, ChatLauncherProps } from './chat-launcher.js';
|
|
65
80
|
import 'class-variance-authority/types';
|
|
66
81
|
import 'class-variance-authority';
|
|
67
82
|
import 'lucide-react';
|
|
@@ -70,6 +85,7 @@ import '@radix-ui/react-dialog';
|
|
|
70
85
|
import '@radix-ui/react-popover';
|
|
71
86
|
import '@radix-ui/react-tooltip';
|
|
72
87
|
import '@tiptap/react';
|
|
88
|
+
import 'react-markdown';
|
|
73
89
|
|
|
74
90
|
declare function cn(...inputs: ClassValue[]): string;
|
|
75
91
|
|
package/dist/index.js
CHANGED
|
@@ -1,58 +1,72 @@
|
|
|
1
|
-
export { ThemeScope } from './chunk-TGU3PKNM.js';
|
|
2
|
-
export { TimeList } from './chunk-GVOC3ARM.js';
|
|
3
|
-
export { TimePicker, TimePickerContent } from './chunk-CR42EAF4.js';
|
|
4
1
|
export { InfoTooltip, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-34NO2UOB.js';
|
|
5
2
|
export { UndoNotice } from './chunk-OUHUVACM.js';
|
|
6
3
|
export { ViewToggle } from './chunk-MXOBOS4Y.js';
|
|
7
4
|
export { Stepper, Wizard } from './chunk-YMCMUAIF.js';
|
|
8
|
-
export { ModelRegistry } from './chunk-BHHDCY2B.js';
|
|
9
|
-
export { SelectionBar } from './chunk-HSUCCANX.js';
|
|
10
5
|
export { Table } from './chunk-5LRRVD27.js';
|
|
11
6
|
export { TaskAssignmentPicker } from './chunk-Q5THPPNL.js';
|
|
12
|
-
export { SettingsShell } from './chunk-
|
|
7
|
+
export { SettingsShell } from './chunk-ZK2V2LPA.js';
|
|
13
8
|
export { SidebarNav } from './chunk-SW3YNICQ.js';
|
|
14
9
|
export { UserMenu } from './chunk-535TM7SK.js';
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
10
|
+
export { ThemeScope } from './chunk-TGU3PKNM.js';
|
|
11
|
+
export { TimeList } from './chunk-GVOC3ARM.js';
|
|
12
|
+
export { TimePicker, TimePickerContent } from './chunk-CR42EAF4.js';
|
|
17
13
|
export { RangeBar } from './chunk-PFAH25VU.js';
|
|
18
14
|
export { ScaleSlider, scaleColorForValue } from './chunk-PSFJN7WH.js';
|
|
19
15
|
export { SearchInput } from './chunk-H5U4KNXF.js';
|
|
16
|
+
export { ModelRegistry } from './chunk-BHHDCY2B.js';
|
|
20
17
|
export { CapabilityChips } from './chunk-G3DWN2DJ.js';
|
|
21
|
-
export {
|
|
22
|
-
export { useAiTextTransform } from './chunk-BKAO7BTU.js';
|
|
23
|
-
export { TextDiffView, computeLineDiff, wordSegments } from './chunk-2PR6POP6.js';
|
|
18
|
+
export { SelectionBar } from './chunk-HSUCCANX.js';
|
|
24
19
|
export { MarqueeBand, MarqueeSurface, hitTestIds, marqueeRect, rectsIntersect, useMarquee } from './chunk-RU3DEF2O.js';
|
|
25
20
|
export { ModelPicker } from './chunk-S4WHBQJ2.js';
|
|
26
21
|
export { PanelModal } from './chunk-G6557MEN.js';
|
|
27
|
-
export {
|
|
28
|
-
export { FieldLabel } from './chunk-I5J6SDLK.js';
|
|
29
|
-
export { InfoButton } from './chunk-OT6EQFMP.js';
|
|
30
|
-
export { PopoverButton } from './chunk-BE3XFZWU.js';
|
|
22
|
+
export { ProviderForm } from './chunk-4WDXLXHL.js';
|
|
31
23
|
export { Input } from './chunk-M4V7XHL7.js';
|
|
32
24
|
export { RichTextEditor } from './chunk-AY77TWLT.js';
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
36
|
-
export { DatePicker } from './chunk-6VCJX4CP.js';
|
|
25
|
+
export { DictationButton, DictationStrip, useDictation } from './chunk-KAC2DOLH.js';
|
|
26
|
+
export { useAiTextTransform } from './chunk-BKAO7BTU.js';
|
|
27
|
+
export { TextDiffView, computeLineDiff, wordSegments } from './chunk-2PR6POP6.js';
|
|
37
28
|
export { EmptyState } from './chunk-KDJLYKR6.js';
|
|
38
29
|
export { ErrorBanner } from './chunk-BJOY3XL7.js';
|
|
39
30
|
export { ExpandableSearch } from './chunk-4SW3ESVI.js';
|
|
40
31
|
export { FileQueue } from './chunk-IQKP2BWE.js';
|
|
41
32
|
export { FileCard, formatBytes } from './chunk-J4OELYDR.js';
|
|
42
|
-
export {
|
|
33
|
+
export { FlowStatusCard } from './chunk-PRHTQBCP.js';
|
|
34
|
+
export { FieldLabel } from './chunk-I5J6SDLK.js';
|
|
35
|
+
export { InfoButton } from './chunk-OT6EQFMP.js';
|
|
36
|
+
export { PopoverButton } from './chunk-BE3XFZWU.js';
|
|
43
37
|
export { CheckIndicator } from './chunk-XE4TFW63.js';
|
|
44
38
|
export { ChipInput } from './chunk-HIRR2F4R.js';
|
|
45
39
|
export { Combobox, ComboboxMulti } from './chunk-WDLUZS2G.js';
|
|
46
40
|
export { ConfirmationModal } from './chunk-2YQSA5AE.js';
|
|
41
|
+
export { ContextMenu } from './chunk-YIGLULRG.js';
|
|
42
|
+
export { ActionMenu, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuSeparator, MenuTrigger } from './chunk-XSJ3TWWZ.js';
|
|
43
|
+
export { DatePicker } from './chunk-6VCJX4CP.js';
|
|
44
|
+
export { ChatBranchTree } from './chunk-HQIYSW2D.js';
|
|
45
|
+
export { ChatDrawer } from './chunk-X3C2FBMR.js';
|
|
46
|
+
export { ChatReasoning } from './chunk-QVDCFZSE.js';
|
|
47
|
+
export { ChatSessionList } from './chunk-NKYPNEOX.js';
|
|
48
|
+
export { ChatToolCard } from './chunk-NBT7NLNU.js';
|
|
49
|
+
export { ChatTurnStatus } from './chunk-P75QKU5J.js';
|
|
50
|
+
export { ConnectionTestRow } from './chunk-OGQF4XJB.js';
|
|
51
|
+
export { initialLiveTurnState, liveTurnReducer, useChatStream } from './chunk-6GNLY2EB.js';
|
|
52
|
+
export { activePathSet, buildBranchTree, linearTree, variantInfo, walkActivePath } from './chunk-Z4IBQ53C.js';
|
|
53
|
+
export { ChatLauncher } from './chunk-RPLEI6LQ.js';
|
|
54
|
+
export { Portal } from './chunk-XZWLTTHA.js';
|
|
55
|
+
export { ChatComposer } from './chunk-743FJDRA.js';
|
|
56
|
+
export { ChatPanel } from './chunk-S62VJVWB.js';
|
|
57
|
+
export { ChatTranscript } from './chunk-BVJT67B5.js';
|
|
58
|
+
export { ChatMessage, ChatMessageEditor, MessageVariantSwitcher } from './chunk-BSIWLVDX.js';
|
|
59
|
+
export { MarkdownCodeBlock, MarkdownSurface, MermaidDiagram } from './chunk-DZBTJZZV.js';
|
|
60
|
+
export { CopyButton } from './chunk-3JJ2WCPN.js';
|
|
47
61
|
export { rawTokens, semanticTokens } from './chunk-GDGKARRB.js';
|
|
48
62
|
export { AiActionsDropdown } from './chunk-LWSLNCW2.js';
|
|
49
|
-
export { AboutCard, AboutFooterLine, AboutLinkList, AboutNote, AboutPanel, FamilyBadge, SponsorCard, TechChips } from './chunk-
|
|
63
|
+
export { AboutCard, AboutFooterLine, AboutLinkList, AboutNote, AboutPanel, FamilyBadge, SponsorCard, TechChips } from './chunk-OH7AJ3WY.js';
|
|
50
64
|
export { CareerMark, HealthMark, NeuronectionMark, NeuronectionWordmark, StudyMark, useLogoId } from './chunk-Q2JMEAKN.js';
|
|
51
|
-
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-RYE5YCFF.js';
|
|
52
65
|
export { ChipList } from './chunk-QUPGIPTT.js';
|
|
66
|
+
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-RYE5YCFF.js';
|
|
53
67
|
export { AiButton } from './chunk-3VCFRIIK.js';
|
|
54
68
|
export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './chunk-SIIY2EGI.js';
|
|
55
|
-
export { AiMagicFill } from './chunk-
|
|
69
|
+
export { AiMagicFill } from './chunk-5QTHDB3D.js';
|
|
56
70
|
export { FormModal } from './chunk-62GIJMWT.js';
|
|
57
71
|
export { Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants } from './chunk-Y7BKBG57.js';
|
|
58
72
|
export { Button, buttonVariants } from './chunk-GTXGTQ6F.js';
|