@melony/react 0.1.31 → 0.1.39
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/dist/index.cjs +55 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +19 -27
- package/dist/index.d.ts +19 -27
- package/dist/index.js +57 -73
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
import React__default, { ReactNode, CSSProperties } from 'react';
|
|
3
3
|
import { ClientState, MelonyClient } from 'melony/client';
|
|
4
|
-
import {
|
|
4
|
+
import { Message, Event, Config, UINode, UIContract } from 'melony';
|
|
5
5
|
import { QueryClient } from '@tanstack/react-query';
|
|
6
6
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
|
+
interface MelonyContextValue extends ClientState {
|
|
9
|
+
messages: Message[];
|
|
10
|
+
sendEvent: (event: Event) => Promise<void>;
|
|
11
|
+
reset: (events?: Event[]) => void;
|
|
12
|
+
client: MelonyClient;
|
|
13
|
+
config?: Config;
|
|
14
|
+
}
|
|
15
|
+
declare const MelonyContext: React__default.Context<MelonyContextValue | undefined>;
|
|
16
|
+
interface MelonyProviderProps {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
client: MelonyClient;
|
|
19
|
+
initialEvents?: Event[];
|
|
20
|
+
queryClient?: QueryClient;
|
|
21
|
+
}
|
|
22
|
+
declare const MelonyProvider: React__default.FC<MelonyProviderProps>;
|
|
23
|
+
|
|
8
24
|
interface User {
|
|
9
25
|
id?: string;
|
|
10
26
|
uid: string;
|
|
@@ -16,12 +32,6 @@ interface User {
|
|
|
16
32
|
lastSignIn?: string | null;
|
|
17
33
|
emailVerified?: boolean;
|
|
18
34
|
}
|
|
19
|
-
interface Message {
|
|
20
|
-
role: Role;
|
|
21
|
-
content: Event[];
|
|
22
|
-
runId?: string;
|
|
23
|
-
threadId?: string;
|
|
24
|
-
}
|
|
25
35
|
interface ThreadData {
|
|
26
36
|
id: string;
|
|
27
37
|
title?: string;
|
|
@@ -57,22 +67,6 @@ interface ThreadService {
|
|
|
57
67
|
getEvents: (threadId: string) => Promise<Event[]>;
|
|
58
68
|
}
|
|
59
69
|
|
|
60
|
-
interface MelonyContextValue extends ClientState {
|
|
61
|
-
messages: Message[];
|
|
62
|
-
sendEvent: (event: Event) => Promise<void>;
|
|
63
|
-
reset: (events?: Event[]) => void;
|
|
64
|
-
client: MelonyClient;
|
|
65
|
-
config?: Config;
|
|
66
|
-
}
|
|
67
|
-
declare const MelonyContext: React__default.Context<MelonyContextValue | undefined>;
|
|
68
|
-
interface MelonyProviderProps {
|
|
69
|
-
children: ReactNode;
|
|
70
|
-
client: MelonyClient;
|
|
71
|
-
initialEvents?: Event[];
|
|
72
|
-
queryClient?: QueryClient;
|
|
73
|
-
}
|
|
74
|
-
declare const MelonyProvider: React__default.FC<MelonyProviderProps>;
|
|
75
|
-
|
|
76
70
|
interface WelcomeScreenProps {
|
|
77
71
|
title?: string;
|
|
78
72
|
description?: string;
|
|
@@ -111,7 +105,7 @@ interface ThreadContextValue {
|
|
|
111
105
|
isLoading: boolean;
|
|
112
106
|
error: Error | null;
|
|
113
107
|
selectThread: (threadId: string) => void;
|
|
114
|
-
createThread: () => Promise<string>;
|
|
108
|
+
createThread: () => Promise<string | null>;
|
|
115
109
|
deleteThread: (threadId: string) => Promise<void>;
|
|
116
110
|
refreshThreads: () => Promise<void>;
|
|
117
111
|
threadEvents: Event[];
|
|
@@ -484,6 +478,4 @@ declare const Text: React__default.FC<TextProps>;
|
|
|
484
478
|
|
|
485
479
|
declare const Badge: React__default.FC<BadgeProps>;
|
|
486
480
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
export { AccountButton, type AccountButtonProps, AuthContext, type AuthContextValue, AuthProvider, type AuthProviderProps, type AuthService, Badge, Box, Button, Card, Chart, ChatHeader, type ChatHeaderProps, Checkbox, Col, Composer, type ComposerOption, type ComposerOptionGroup, CreateThreadButton, type CreateThreadButtonProps, CreateThreadNavItem, type CreateThreadNavItemProps, Divider, Dropdown, type DropdownProps, Form, FullChat, type FullChatProps, Heading, Image, Input, Label, List, ListItem, MelonyContext, type MelonyContextValue, MelonyProvider, type MelonyProviderProps, type Message, PopupChat, type PopupChatProps, RadioGroup, Row, type ScreenSize, Select, Sidebar, SidebarContext, type SidebarContextValue, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarToggle, type SidebarToggleProps, Spacer, type StarterPrompt, Text, Textarea, ThemeProvider, ThemeToggle, Thread, ThreadContext, type ThreadContextValue, type ThreadData, ThreadList, type ThreadListProps, ThreadPopover, type ThreadPopoverProps, ThreadProvider, type ThreadProviderProps, type ThreadService, UIRenderer, type UIRendererProps, type UseMelonyOptions, type User, WelcomeScreen, type WelcomeScreenProps, groupEventsToMessages, useAuth, useMelony, useScreenSize, useSidebar, useTheme, useThreads };
|
|
481
|
+
export { AccountButton, type AccountButtonProps, AuthContext, type AuthContextValue, AuthProvider, type AuthProviderProps, type AuthService, Badge, Box, Button, Card, Chart, ChatHeader, type ChatHeaderProps, Checkbox, Col, Composer, type ComposerOption, type ComposerOptionGroup, CreateThreadButton, type CreateThreadButtonProps, CreateThreadNavItem, type CreateThreadNavItemProps, Divider, Dropdown, type DropdownProps, Form, FullChat, type FullChatProps, Heading, Image, Input, Label, List, ListItem, MelonyContext, type MelonyContextValue, MelonyProvider, type MelonyProviderProps, PopupChat, type PopupChatProps, RadioGroup, Row, type ScreenSize, Select, Sidebar, SidebarContext, type SidebarContextValue, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarToggle, type SidebarToggleProps, Spacer, type StarterPrompt, Text, Textarea, ThemeProvider, ThemeToggle, Thread, ThreadContext, type ThreadContextValue, type ThreadData, ThreadList, type ThreadListProps, ThreadPopover, type ThreadPopoverProps, ThreadProvider, type ThreadProviderProps, type ThreadService, UIRenderer, type UIRendererProps, type UseMelonyOptions, type User, WelcomeScreen, type WelcomeScreenProps, useAuth, useMelony, useScreenSize, useSidebar, useTheme, useThreads };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
import React__default, { ReactNode, CSSProperties } from 'react';
|
|
3
3
|
import { ClientState, MelonyClient } from 'melony/client';
|
|
4
|
-
import {
|
|
4
|
+
import { Message, Event, Config, UINode, UIContract } from 'melony';
|
|
5
5
|
import { QueryClient } from '@tanstack/react-query';
|
|
6
6
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
|
+
interface MelonyContextValue extends ClientState {
|
|
9
|
+
messages: Message[];
|
|
10
|
+
sendEvent: (event: Event) => Promise<void>;
|
|
11
|
+
reset: (events?: Event[]) => void;
|
|
12
|
+
client: MelonyClient;
|
|
13
|
+
config?: Config;
|
|
14
|
+
}
|
|
15
|
+
declare const MelonyContext: React__default.Context<MelonyContextValue | undefined>;
|
|
16
|
+
interface MelonyProviderProps {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
client: MelonyClient;
|
|
19
|
+
initialEvents?: Event[];
|
|
20
|
+
queryClient?: QueryClient;
|
|
21
|
+
}
|
|
22
|
+
declare const MelonyProvider: React__default.FC<MelonyProviderProps>;
|
|
23
|
+
|
|
8
24
|
interface User {
|
|
9
25
|
id?: string;
|
|
10
26
|
uid: string;
|
|
@@ -16,12 +32,6 @@ interface User {
|
|
|
16
32
|
lastSignIn?: string | null;
|
|
17
33
|
emailVerified?: boolean;
|
|
18
34
|
}
|
|
19
|
-
interface Message {
|
|
20
|
-
role: Role;
|
|
21
|
-
content: Event[];
|
|
22
|
-
runId?: string;
|
|
23
|
-
threadId?: string;
|
|
24
|
-
}
|
|
25
35
|
interface ThreadData {
|
|
26
36
|
id: string;
|
|
27
37
|
title?: string;
|
|
@@ -57,22 +67,6 @@ interface ThreadService {
|
|
|
57
67
|
getEvents: (threadId: string) => Promise<Event[]>;
|
|
58
68
|
}
|
|
59
69
|
|
|
60
|
-
interface MelonyContextValue extends ClientState {
|
|
61
|
-
messages: Message[];
|
|
62
|
-
sendEvent: (event: Event) => Promise<void>;
|
|
63
|
-
reset: (events?: Event[]) => void;
|
|
64
|
-
client: MelonyClient;
|
|
65
|
-
config?: Config;
|
|
66
|
-
}
|
|
67
|
-
declare const MelonyContext: React__default.Context<MelonyContextValue | undefined>;
|
|
68
|
-
interface MelonyProviderProps {
|
|
69
|
-
children: ReactNode;
|
|
70
|
-
client: MelonyClient;
|
|
71
|
-
initialEvents?: Event[];
|
|
72
|
-
queryClient?: QueryClient;
|
|
73
|
-
}
|
|
74
|
-
declare const MelonyProvider: React__default.FC<MelonyProviderProps>;
|
|
75
|
-
|
|
76
70
|
interface WelcomeScreenProps {
|
|
77
71
|
title?: string;
|
|
78
72
|
description?: string;
|
|
@@ -111,7 +105,7 @@ interface ThreadContextValue {
|
|
|
111
105
|
isLoading: boolean;
|
|
112
106
|
error: Error | null;
|
|
113
107
|
selectThread: (threadId: string) => void;
|
|
114
|
-
createThread: () => Promise<string>;
|
|
108
|
+
createThread: () => Promise<string | null>;
|
|
115
109
|
deleteThread: (threadId: string) => Promise<void>;
|
|
116
110
|
refreshThreads: () => Promise<void>;
|
|
117
111
|
threadEvents: Event[];
|
|
@@ -484,6 +478,4 @@ declare const Text: React__default.FC<TextProps>;
|
|
|
484
478
|
|
|
485
479
|
declare const Badge: React__default.FC<BadgeProps>;
|
|
486
480
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
export { AccountButton, type AccountButtonProps, AuthContext, type AuthContextValue, AuthProvider, type AuthProviderProps, type AuthService, Badge, Box, Button, Card, Chart, ChatHeader, type ChatHeaderProps, Checkbox, Col, Composer, type ComposerOption, type ComposerOptionGroup, CreateThreadButton, type CreateThreadButtonProps, CreateThreadNavItem, type CreateThreadNavItemProps, Divider, Dropdown, type DropdownProps, Form, FullChat, type FullChatProps, Heading, Image, Input, Label, List, ListItem, MelonyContext, type MelonyContextValue, MelonyProvider, type MelonyProviderProps, type Message, PopupChat, type PopupChatProps, RadioGroup, Row, type ScreenSize, Select, Sidebar, SidebarContext, type SidebarContextValue, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarToggle, type SidebarToggleProps, Spacer, type StarterPrompt, Text, Textarea, ThemeProvider, ThemeToggle, Thread, ThreadContext, type ThreadContextValue, type ThreadData, ThreadList, type ThreadListProps, ThreadPopover, type ThreadPopoverProps, ThreadProvider, type ThreadProviderProps, type ThreadService, UIRenderer, type UIRendererProps, type UseMelonyOptions, type User, WelcomeScreen, type WelcomeScreenProps, groupEventsToMessages, useAuth, useMelony, useScreenSize, useSidebar, useTheme, useThreads };
|
|
481
|
+
export { AccountButton, type AccountButtonProps, AuthContext, type AuthContextValue, AuthProvider, type AuthProviderProps, type AuthService, Badge, Box, Button, Card, Chart, ChatHeader, type ChatHeaderProps, Checkbox, Col, Composer, type ComposerOption, type ComposerOptionGroup, CreateThreadButton, type CreateThreadButtonProps, CreateThreadNavItem, type CreateThreadNavItemProps, Divider, Dropdown, type DropdownProps, Form, FullChat, type FullChatProps, Heading, Image, Input, Label, List, ListItem, MelonyContext, type MelonyContextValue, MelonyProvider, type MelonyProviderProps, PopupChat, type PopupChatProps, RadioGroup, Row, type ScreenSize, Select, Sidebar, SidebarContext, type SidebarContextValue, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarToggle, type SidebarToggleProps, Spacer, type StarterPrompt, Text, Textarea, ThemeProvider, ThemeToggle, Thread, ThreadContext, type ThreadContextValue, type ThreadData, ThreadList, type ThreadListProps, ThreadPopover, type ThreadPopoverProps, ThreadProvider, type ThreadProviderProps, type ThreadService, UIRenderer, type UIRendererProps, type UseMelonyOptions, type User, WelcomeScreen, type WelcomeScreenProps, useAuth, useMelony, useScreenSize, useSidebar, useTheme, useThreads };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React11 from 'react';
|
|
2
|
-
import React11__default, { createContext, useState, useContext, useCallback,
|
|
2
|
+
import React11__default, { createContext, useState, useContext, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
3
|
+
import { convertEventsToMessages } from 'melony';
|
|
3
4
|
import { NuqsAdapter } from 'nuqs/adapters/react';
|
|
4
5
|
import { QueryClient, QueryClientProvider, useQueryClient, useQuery, useMutation } from '@tanstack/react-query';
|
|
5
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -12,7 +13,6 @@ import * as ICONS from '@tabler/icons-react';
|
|
|
12
13
|
import { IconUser, IconLogout, IconX, IconBrandGoogle, IconFileText, IconFile, IconPaperclip, IconChevronDown, IconLoader2, IconArrowUp, IconDotsVertical, IconTrash, IconHistory, IconPlus, IconArrowLeft, IconMessage, IconLayoutSidebarLeftExpand, IconLayoutSidebarLeftCollapse, IconLayoutSidebarRightExpand, IconLayoutSidebarRightCollapse, IconDeviceDesktop, IconMoon, IconSun, IconCheck, IconSelector, IconChevronUp } from '@tabler/icons-react';
|
|
13
14
|
import { Menu } from '@base-ui/react/menu';
|
|
14
15
|
import { Separator as Separator$1 } from '@base-ui/react/separator';
|
|
15
|
-
import { generateId } from 'melony/client';
|
|
16
16
|
import { useQueryState, parseAsString } from 'nuqs';
|
|
17
17
|
import { mergeProps } from '@base-ui/react/merge-props';
|
|
18
18
|
import { useRender } from '@base-ui/react/use-render';
|
|
@@ -22,31 +22,6 @@ import { createPortal } from 'react-dom';
|
|
|
22
22
|
import { useHotkeys } from 'react-hotkeys-hook';
|
|
23
23
|
|
|
24
24
|
// src/providers/melony-provider.tsx
|
|
25
|
-
|
|
26
|
-
// src/lib/group-events-to-messages.ts
|
|
27
|
-
function groupEventsToMessages(events) {
|
|
28
|
-
if (events.length === 0) return [];
|
|
29
|
-
const messages = [];
|
|
30
|
-
let currentMessage = null;
|
|
31
|
-
for (const event of events) {
|
|
32
|
-
const role = event.role || "assistant";
|
|
33
|
-
const runId = event.runId;
|
|
34
|
-
if (!currentMessage || currentMessage.role !== role || runId && currentMessage.runId && runId !== currentMessage.runId) {
|
|
35
|
-
currentMessage = {
|
|
36
|
-
role,
|
|
37
|
-
content: [event],
|
|
38
|
-
runId
|
|
39
|
-
};
|
|
40
|
-
messages.push(currentMessage);
|
|
41
|
-
} else {
|
|
42
|
-
currentMessage.content.push(event);
|
|
43
|
-
if (!currentMessage.runId && runId) {
|
|
44
|
-
currentMessage.runId = runId;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return messages;
|
|
49
|
-
}
|
|
50
25
|
var MelonyContext = createContext(
|
|
51
26
|
void 0
|
|
52
27
|
);
|
|
@@ -65,6 +40,7 @@ var MelonyContextProviderInner = ({
|
|
|
65
40
|
setContextValue
|
|
66
41
|
}) => {
|
|
67
42
|
const [state, setState] = useState(client.getState());
|
|
43
|
+
const queryClient = useQueryClient();
|
|
68
44
|
const { data: config } = useQuery({
|
|
69
45
|
queryKey: ["melony-config", client.url],
|
|
70
46
|
queryFn: () => client.getConfig(),
|
|
@@ -116,11 +92,18 @@ var MelonyContextProviderInner = ({
|
|
|
116
92
|
reset([]);
|
|
117
93
|
return true;
|
|
118
94
|
}
|
|
95
|
+
case "client:invalidate-query": {
|
|
96
|
+
const { queryKey } = event.data || {};
|
|
97
|
+
if (queryKey) {
|
|
98
|
+
await queryClient.invalidateQueries({ queryKey });
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
119
102
|
default:
|
|
120
103
|
return false;
|
|
121
104
|
}
|
|
122
105
|
},
|
|
123
|
-
[client, reset]
|
|
106
|
+
[client, reset, queryClient]
|
|
124
107
|
);
|
|
125
108
|
const sendEvent = useCallback(
|
|
126
109
|
async (event) => {
|
|
@@ -136,7 +119,7 @@ var MelonyContextProviderInner = ({
|
|
|
136
119
|
const value = useMemo(
|
|
137
120
|
() => ({
|
|
138
121
|
...state,
|
|
139
|
-
messages:
|
|
122
|
+
messages: convertEventsToMessages(state.events),
|
|
140
123
|
sendEvent,
|
|
141
124
|
reset,
|
|
142
125
|
client,
|
|
@@ -773,12 +756,15 @@ var ThreadProvider = ({
|
|
|
773
756
|
initialThreadId: providedInitialThreadId
|
|
774
757
|
}) => {
|
|
775
758
|
const queryClient = useQueryClient();
|
|
776
|
-
const defaultInitialThreadId = useMemo(() => generateId(), []);
|
|
777
|
-
const initialThreadId = providedInitialThreadId || defaultInitialThreadId;
|
|
778
759
|
const [activeThreadId, setActiveThreadId] = useQueryState(
|
|
779
760
|
"threadId",
|
|
780
|
-
parseAsString
|
|
761
|
+
parseAsString
|
|
781
762
|
);
|
|
763
|
+
useEffect(() => {
|
|
764
|
+
if (!activeThreadId && providedInitialThreadId) {
|
|
765
|
+
setActiveThreadId(providedInitialThreadId);
|
|
766
|
+
}
|
|
767
|
+
}, [activeThreadId, providedInitialThreadId, setActiveThreadId]);
|
|
782
768
|
const {
|
|
783
769
|
data: threads = [],
|
|
784
770
|
isLoading,
|
|
@@ -795,12 +781,11 @@ var ThreadProvider = ({
|
|
|
795
781
|
});
|
|
796
782
|
const createMutation = useMutation({
|
|
797
783
|
mutationFn: async () => {
|
|
798
|
-
|
|
799
|
-
return newId;
|
|
784
|
+
return null;
|
|
800
785
|
},
|
|
801
|
-
onSuccess: async (
|
|
786
|
+
onSuccess: async () => {
|
|
802
787
|
await queryClient.invalidateQueries({ queryKey: ["threads"] });
|
|
803
|
-
await setActiveThreadId(
|
|
788
|
+
await setActiveThreadId(null);
|
|
804
789
|
}
|
|
805
790
|
});
|
|
806
791
|
const deleteMutation = useMutation({
|
|
@@ -2770,49 +2755,49 @@ function UIRenderer({ node }) {
|
|
|
2770
2755
|
return /* @__PURE__ */ jsx(Component, { ...componentProps, children: renderedChildren });
|
|
2771
2756
|
}
|
|
2772
2757
|
function MessageContent({ events }) {
|
|
2758
|
+
const firstSlotIndexes = /* @__PURE__ */ new Map();
|
|
2773
2759
|
const latestSlotIndexes = /* @__PURE__ */ new Map();
|
|
2774
2760
|
events.forEach((event, index) => {
|
|
2775
2761
|
if (event.slot) {
|
|
2762
|
+
if (!firstSlotIndexes.has(event.slot)) {
|
|
2763
|
+
firstSlotIndexes.set(event.slot, index);
|
|
2764
|
+
}
|
|
2776
2765
|
latestSlotIndexes.set(event.slot, index);
|
|
2777
2766
|
}
|
|
2778
2767
|
});
|
|
2779
2768
|
return /* @__PURE__ */ jsx(Fragment, { children: events.map((event, index) => {
|
|
2780
|
-
|
|
2781
|
-
|
|
2769
|
+
let displayEvent = event;
|
|
2770
|
+
if (event.slot) {
|
|
2771
|
+
if (firstSlotIndexes.get(event.slot) !== index) {
|
|
2772
|
+
return null;
|
|
2773
|
+
}
|
|
2774
|
+
const latestIndex = latestSlotIndexes.get(event.slot);
|
|
2775
|
+
displayEvent = events[latestIndex];
|
|
2782
2776
|
}
|
|
2783
|
-
if (
|
|
2784
|
-
return /* @__PURE__ */ jsx("span", { children:
|
|
2777
|
+
if (displayEvent.type === "text-delta") {
|
|
2778
|
+
return /* @__PURE__ */ jsx("span", { children: displayEvent.data?.delta }, index);
|
|
2785
2779
|
}
|
|
2786
|
-
if (
|
|
2787
|
-
return /* @__PURE__ */ jsx("p", { children:
|
|
2780
|
+
if (displayEvent.type === "text") {
|
|
2781
|
+
return /* @__PURE__ */ jsx("p", { children: displayEvent.data?.content || displayEvent.data?.text }, index);
|
|
2788
2782
|
}
|
|
2789
|
-
if (
|
|
2790
|
-
return /* @__PURE__ */ jsx(UIRenderer, { node:
|
|
2783
|
+
if (displayEvent.ui) {
|
|
2784
|
+
return /* @__PURE__ */ jsx(UIRenderer, { node: displayEvent.ui }, index);
|
|
2791
2785
|
}
|
|
2792
2786
|
return null;
|
|
2793
2787
|
}) });
|
|
2794
2788
|
}
|
|
2795
2789
|
function MessageBubble({ message }) {
|
|
2796
2790
|
const isUser = message.role === "user";
|
|
2797
|
-
return /* @__PURE__ */ jsx(
|
|
2791
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col", isUser ? "items-end" : "items-start"), children: /* @__PURE__ */ jsx(
|
|
2798
2792
|
"div",
|
|
2799
2793
|
{
|
|
2800
2794
|
className: cn(
|
|
2801
|
-
"flex flex-col",
|
|
2802
|
-
isUser ? "
|
|
2795
|
+
"flex flex-col items-start max-w-[85%] rounded-2xl px-4 py-2 space-y-4 whitespace-pre-wrap",
|
|
2796
|
+
isUser ? "bg-primary text-primary-foreground" : "px-0 py-0 text-foreground"
|
|
2803
2797
|
),
|
|
2804
|
-
children: /* @__PURE__ */ jsx(
|
|
2805
|
-
"div",
|
|
2806
|
-
{
|
|
2807
|
-
className: cn(
|
|
2808
|
-
"flex flex-col items-start max-w-[85%] rounded-2xl px-4 py-2 space-y-4 whitespace-pre-wrap",
|
|
2809
|
-
isUser ? "bg-primary text-primary-foreground" : "px-0 py-0 text-foreground"
|
|
2810
|
-
),
|
|
2811
|
-
children: /* @__PURE__ */ jsx(MessageContent, { events: message.content })
|
|
2812
|
-
}
|
|
2813
|
-
)
|
|
2798
|
+
children: /* @__PURE__ */ jsx(MessageContent, { events: message.content })
|
|
2814
2799
|
}
|
|
2815
|
-
);
|
|
2800
|
+
) });
|
|
2816
2801
|
}
|
|
2817
2802
|
function LoadingIndicator({ status }) {
|
|
2818
2803
|
const [isExpanded, setIsExpanded] = useState(false);
|
|
@@ -2895,17 +2880,15 @@ function Thread({
|
|
|
2895
2880
|
const hasOptions = state && Object.keys(state).filter((k) => k !== "threadId").length > 0;
|
|
2896
2881
|
if (!text && !hasFiles && !hasOptions || isLoading) return;
|
|
2897
2882
|
if (!overrideInput) setInput("");
|
|
2898
|
-
await sendEvent(
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
state
|
|
2904
|
-
|
|
2905
|
-
threadId: activeThreadId ?? void 0
|
|
2906
|
-
}
|
|
2883
|
+
await sendEvent({
|
|
2884
|
+
type: "text",
|
|
2885
|
+
role: "user",
|
|
2886
|
+
data: { content: text || "" },
|
|
2887
|
+
state: {
|
|
2888
|
+
...state,
|
|
2889
|
+
threadId: activeThreadId ?? void 0
|
|
2907
2890
|
}
|
|
2908
|
-
);
|
|
2891
|
+
});
|
|
2909
2892
|
};
|
|
2910
2893
|
const handleStarterPromptClick = (prompt) => {
|
|
2911
2894
|
if (onStarterPromptClick) {
|
|
@@ -3033,7 +3016,7 @@ var Dropdown = ({
|
|
|
3033
3016
|
] });
|
|
3034
3017
|
};
|
|
3035
3018
|
var ThreadList = ({ className }) => {
|
|
3036
|
-
const { threads, activeThreadId,
|
|
3019
|
+
const { threads, activeThreadId, deleteThread } = useThreads();
|
|
3037
3020
|
const sortedThreads = React11.useMemo(() => {
|
|
3038
3021
|
return [...threads].sort((a, b) => {
|
|
3039
3022
|
const dateA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
@@ -3509,7 +3492,6 @@ var CreateThreadButton = ({
|
|
|
3509
3492
|
className,
|
|
3510
3493
|
variant = "ghost",
|
|
3511
3494
|
size = "default",
|
|
3512
|
-
children,
|
|
3513
3495
|
onThreadCreated
|
|
3514
3496
|
}) => {
|
|
3515
3497
|
const { createThread } = useThreads();
|
|
@@ -3519,7 +3501,9 @@ var CreateThreadButton = ({
|
|
|
3519
3501
|
try {
|
|
3520
3502
|
setIsCreating(true);
|
|
3521
3503
|
const threadId = await createThread();
|
|
3522
|
-
|
|
3504
|
+
if (threadId) {
|
|
3505
|
+
onThreadCreated?.(threadId);
|
|
3506
|
+
}
|
|
3523
3507
|
} catch (error) {
|
|
3524
3508
|
console.error("Failed to create thread:", error);
|
|
3525
3509
|
} finally {
|
|
@@ -3624,7 +3608,7 @@ var CreateThreadNavItem = ({
|
|
|
3624
3608
|
onClickAction: {
|
|
3625
3609
|
type: "client:navigate",
|
|
3626
3610
|
data: {
|
|
3627
|
-
url:
|
|
3611
|
+
url: "?"
|
|
3628
3612
|
}
|
|
3629
3613
|
},
|
|
3630
3614
|
className: cn(className),
|
|
@@ -3636,6 +3620,6 @@ var CreateThreadNavItem = ({
|
|
|
3636
3620
|
);
|
|
3637
3621
|
};
|
|
3638
3622
|
|
|
3639
|
-
export { AccountButton, AuthContext, AuthProvider, Badge2 as Badge, Box, Button2 as Button, Card2 as Card, Chart, ChatHeader, Checkbox, Col, Composer, CreateThreadButton, CreateThreadNavItem, Divider, Dropdown, Form, FullChat, Heading, Image, Input2 as Input, Label2 as Label, List, ListItem, MelonyContext, MelonyProvider, PopupChat, RadioGroup, Row, Select2 as Select, Sidebar, SidebarContext, SidebarProvider, SidebarToggle, Spacer, Text, Textarea2 as Textarea, ThemeProvider, ThemeToggle, Thread, ThreadContext, ThreadList, ThreadPopover, ThreadProvider, UIRenderer, WelcomeScreen,
|
|
3623
|
+
export { AccountButton, AuthContext, AuthProvider, Badge2 as Badge, Box, Button2 as Button, Card2 as Card, Chart, ChatHeader, Checkbox, Col, Composer, CreateThreadButton, CreateThreadNavItem, Divider, Dropdown, Form, FullChat, Heading, Image, Input2 as Input, Label2 as Label, List, ListItem, MelonyContext, MelonyProvider, PopupChat, RadioGroup, Row, Select2 as Select, Sidebar, SidebarContext, SidebarProvider, SidebarToggle, Spacer, Text, Textarea2 as Textarea, ThemeProvider, ThemeToggle, Thread, ThreadContext, ThreadList, ThreadPopover, ThreadProvider, UIRenderer, WelcomeScreen, useAuth, useMelony, useScreenSize, useSidebar, useTheme, useThreads };
|
|
3640
3624
|
//# sourceMappingURL=index.js.map
|
|
3641
3625
|
//# sourceMappingURL=index.js.map
|