@melony/react 0.1.31 → 0.1.38
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 +40 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +41 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -111,7 +111,7 @@ interface ThreadContextValue {
|
|
|
111
111
|
isLoading: boolean;
|
|
112
112
|
error: Error | null;
|
|
113
113
|
selectThread: (threadId: string) => void;
|
|
114
|
-
createThread: () => Promise<string>;
|
|
114
|
+
createThread: () => Promise<string | null>;
|
|
115
115
|
deleteThread: (threadId: string) => Promise<void>;
|
|
116
116
|
refreshThreads: () => Promise<void>;
|
|
117
117
|
threadEvents: Event[];
|
package/dist/index.d.ts
CHANGED
|
@@ -111,7 +111,7 @@ interface ThreadContextValue {
|
|
|
111
111
|
isLoading: boolean;
|
|
112
112
|
error: Error | null;
|
|
113
113
|
selectThread: (threadId: string) => void;
|
|
114
|
-
createThread: () => Promise<string>;
|
|
114
|
+
createThread: () => Promise<string | null>;
|
|
115
115
|
deleteThread: (threadId: string) => Promise<void>;
|
|
116
116
|
refreshThreads: () => Promise<void>;
|
|
117
117
|
threadEvents: Event[];
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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
3
|
import { NuqsAdapter } from 'nuqs/adapters/react';
|
|
4
4
|
import { QueryClient, QueryClientProvider, useQueryClient, useQuery, useMutation } from '@tanstack/react-query';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -12,7 +12,6 @@ import * as ICONS from '@tabler/icons-react';
|
|
|
12
12
|
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
13
|
import { Menu } from '@base-ui/react/menu';
|
|
14
14
|
import { Separator as Separator$1 } from '@base-ui/react/separator';
|
|
15
|
-
import { generateId } from 'melony/client';
|
|
16
15
|
import { useQueryState, parseAsString } from 'nuqs';
|
|
17
16
|
import { mergeProps } from '@base-ui/react/merge-props';
|
|
18
17
|
import { useRender } from '@base-ui/react/use-render';
|
|
@@ -65,6 +64,7 @@ var MelonyContextProviderInner = ({
|
|
|
65
64
|
setContextValue
|
|
66
65
|
}) => {
|
|
67
66
|
const [state, setState] = useState(client.getState());
|
|
67
|
+
const queryClient = useQueryClient();
|
|
68
68
|
const { data: config } = useQuery({
|
|
69
69
|
queryKey: ["melony-config", client.url],
|
|
70
70
|
queryFn: () => client.getConfig(),
|
|
@@ -116,11 +116,18 @@ var MelonyContextProviderInner = ({
|
|
|
116
116
|
reset([]);
|
|
117
117
|
return true;
|
|
118
118
|
}
|
|
119
|
+
case "client:invalidate-query": {
|
|
120
|
+
const { queryKey } = event.data || {};
|
|
121
|
+
if (queryKey) {
|
|
122
|
+
await queryClient.invalidateQueries({ queryKey });
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
119
126
|
default:
|
|
120
127
|
return false;
|
|
121
128
|
}
|
|
122
129
|
},
|
|
123
|
-
[client, reset]
|
|
130
|
+
[client, reset, queryClient]
|
|
124
131
|
);
|
|
125
132
|
const sendEvent = useCallback(
|
|
126
133
|
async (event) => {
|
|
@@ -773,12 +780,15 @@ var ThreadProvider = ({
|
|
|
773
780
|
initialThreadId: providedInitialThreadId
|
|
774
781
|
}) => {
|
|
775
782
|
const queryClient = useQueryClient();
|
|
776
|
-
const defaultInitialThreadId = useMemo(() => generateId(), []);
|
|
777
|
-
const initialThreadId = providedInitialThreadId || defaultInitialThreadId;
|
|
778
783
|
const [activeThreadId, setActiveThreadId] = useQueryState(
|
|
779
784
|
"threadId",
|
|
780
|
-
parseAsString
|
|
785
|
+
parseAsString
|
|
781
786
|
);
|
|
787
|
+
useEffect(() => {
|
|
788
|
+
if (!activeThreadId && providedInitialThreadId) {
|
|
789
|
+
setActiveThreadId(providedInitialThreadId);
|
|
790
|
+
}
|
|
791
|
+
}, [activeThreadId, providedInitialThreadId, setActiveThreadId]);
|
|
782
792
|
const {
|
|
783
793
|
data: threads = [],
|
|
784
794
|
isLoading,
|
|
@@ -795,12 +805,11 @@ var ThreadProvider = ({
|
|
|
795
805
|
});
|
|
796
806
|
const createMutation = useMutation({
|
|
797
807
|
mutationFn: async () => {
|
|
798
|
-
|
|
799
|
-
return newId;
|
|
808
|
+
return null;
|
|
800
809
|
},
|
|
801
|
-
onSuccess: async (
|
|
810
|
+
onSuccess: async () => {
|
|
802
811
|
await queryClient.invalidateQueries({ queryKey: ["threads"] });
|
|
803
|
-
await setActiveThreadId(
|
|
812
|
+
await setActiveThreadId(null);
|
|
804
813
|
}
|
|
805
814
|
});
|
|
806
815
|
const deleteMutation = useMutation({
|
|
@@ -2770,24 +2779,33 @@ function UIRenderer({ node }) {
|
|
|
2770
2779
|
return /* @__PURE__ */ jsx(Component, { ...componentProps, children: renderedChildren });
|
|
2771
2780
|
}
|
|
2772
2781
|
function MessageContent({ events }) {
|
|
2782
|
+
const firstSlotIndexes = /* @__PURE__ */ new Map();
|
|
2773
2783
|
const latestSlotIndexes = /* @__PURE__ */ new Map();
|
|
2774
2784
|
events.forEach((event, index) => {
|
|
2775
2785
|
if (event.slot) {
|
|
2786
|
+
if (!firstSlotIndexes.has(event.slot)) {
|
|
2787
|
+
firstSlotIndexes.set(event.slot, index);
|
|
2788
|
+
}
|
|
2776
2789
|
latestSlotIndexes.set(event.slot, index);
|
|
2777
2790
|
}
|
|
2778
2791
|
});
|
|
2779
2792
|
return /* @__PURE__ */ jsx(Fragment, { children: events.map((event, index) => {
|
|
2780
|
-
|
|
2781
|
-
|
|
2793
|
+
let displayEvent = event;
|
|
2794
|
+
if (event.slot) {
|
|
2795
|
+
if (firstSlotIndexes.get(event.slot) !== index) {
|
|
2796
|
+
return null;
|
|
2797
|
+
}
|
|
2798
|
+
const latestIndex = latestSlotIndexes.get(event.slot);
|
|
2799
|
+
displayEvent = events[latestIndex];
|
|
2782
2800
|
}
|
|
2783
|
-
if (
|
|
2784
|
-
return /* @__PURE__ */ jsx("span", { children:
|
|
2801
|
+
if (displayEvent.type === "text-delta") {
|
|
2802
|
+
return /* @__PURE__ */ jsx("span", { children: displayEvent.data?.delta }, index);
|
|
2785
2803
|
}
|
|
2786
|
-
if (
|
|
2787
|
-
return /* @__PURE__ */ jsx("p", { children:
|
|
2804
|
+
if (displayEvent.type === "text") {
|
|
2805
|
+
return /* @__PURE__ */ jsx("p", { children: displayEvent.data?.content || displayEvent.data?.text }, index);
|
|
2788
2806
|
}
|
|
2789
|
-
if (
|
|
2790
|
-
return /* @__PURE__ */ jsx(UIRenderer, { node:
|
|
2807
|
+
if (displayEvent.ui) {
|
|
2808
|
+
return /* @__PURE__ */ jsx(UIRenderer, { node: displayEvent.ui }, index);
|
|
2791
2809
|
}
|
|
2792
2810
|
return null;
|
|
2793
2811
|
}) });
|
|
@@ -3033,7 +3051,7 @@ var Dropdown = ({
|
|
|
3033
3051
|
] });
|
|
3034
3052
|
};
|
|
3035
3053
|
var ThreadList = ({ className }) => {
|
|
3036
|
-
const { threads, activeThreadId,
|
|
3054
|
+
const { threads, activeThreadId, deleteThread } = useThreads();
|
|
3037
3055
|
const sortedThreads = React11.useMemo(() => {
|
|
3038
3056
|
return [...threads].sort((a, b) => {
|
|
3039
3057
|
const dateA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
@@ -3509,7 +3527,6 @@ var CreateThreadButton = ({
|
|
|
3509
3527
|
className,
|
|
3510
3528
|
variant = "ghost",
|
|
3511
3529
|
size = "default",
|
|
3512
|
-
children,
|
|
3513
3530
|
onThreadCreated
|
|
3514
3531
|
}) => {
|
|
3515
3532
|
const { createThread } = useThreads();
|
|
@@ -3519,7 +3536,9 @@ var CreateThreadButton = ({
|
|
|
3519
3536
|
try {
|
|
3520
3537
|
setIsCreating(true);
|
|
3521
3538
|
const threadId = await createThread();
|
|
3522
|
-
|
|
3539
|
+
if (threadId) {
|
|
3540
|
+
onThreadCreated?.(threadId);
|
|
3541
|
+
}
|
|
3523
3542
|
} catch (error) {
|
|
3524
3543
|
console.error("Failed to create thread:", error);
|
|
3525
3544
|
} finally {
|
|
@@ -3624,7 +3643,7 @@ var CreateThreadNavItem = ({
|
|
|
3624
3643
|
onClickAction: {
|
|
3625
3644
|
type: "client:navigate",
|
|
3626
3645
|
data: {
|
|
3627
|
-
url:
|
|
3646
|
+
url: "?"
|
|
3628
3647
|
}
|
|
3629
3648
|
},
|
|
3630
3649
|
className: cn(className),
|