@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.cjs
CHANGED
|
@@ -12,7 +12,6 @@ var classVarianceAuthority = require('class-variance-authority');
|
|
|
12
12
|
var ICONS = require('@tabler/icons-react');
|
|
13
13
|
var menu = require('@base-ui/react/menu');
|
|
14
14
|
var separator = require('@base-ui/react/separator');
|
|
15
|
-
var client = require('melony/client');
|
|
16
15
|
var nuqs = require('nuqs');
|
|
17
16
|
var mergeProps = require('@base-ui/react/merge-props');
|
|
18
17
|
var useRender = require('@base-ui/react/use-render');
|
|
@@ -86,6 +85,7 @@ var MelonyContextProviderInner = ({
|
|
|
86
85
|
setContextValue
|
|
87
86
|
}) => {
|
|
88
87
|
const [state, setState] = React11.useState(client.getState());
|
|
88
|
+
const queryClient = reactQuery.useQueryClient();
|
|
89
89
|
const { data: config } = reactQuery.useQuery({
|
|
90
90
|
queryKey: ["melony-config", client.url],
|
|
91
91
|
queryFn: () => client.getConfig(),
|
|
@@ -137,11 +137,18 @@ var MelonyContextProviderInner = ({
|
|
|
137
137
|
reset([]);
|
|
138
138
|
return true;
|
|
139
139
|
}
|
|
140
|
+
case "client:invalidate-query": {
|
|
141
|
+
const { queryKey } = event.data || {};
|
|
142
|
+
if (queryKey) {
|
|
143
|
+
await queryClient.invalidateQueries({ queryKey });
|
|
144
|
+
}
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
140
147
|
default:
|
|
141
148
|
return false;
|
|
142
149
|
}
|
|
143
150
|
},
|
|
144
|
-
[client, reset]
|
|
151
|
+
[client, reset, queryClient]
|
|
145
152
|
);
|
|
146
153
|
const sendEvent = React11.useCallback(
|
|
147
154
|
async (event) => {
|
|
@@ -794,12 +801,15 @@ var ThreadProvider = ({
|
|
|
794
801
|
initialThreadId: providedInitialThreadId
|
|
795
802
|
}) => {
|
|
796
803
|
const queryClient = reactQuery.useQueryClient();
|
|
797
|
-
const defaultInitialThreadId = React11.useMemo(() => client.generateId(), []);
|
|
798
|
-
const initialThreadId = providedInitialThreadId || defaultInitialThreadId;
|
|
799
804
|
const [activeThreadId, setActiveThreadId] = nuqs.useQueryState(
|
|
800
805
|
"threadId",
|
|
801
|
-
nuqs.parseAsString
|
|
806
|
+
nuqs.parseAsString
|
|
802
807
|
);
|
|
808
|
+
React11.useEffect(() => {
|
|
809
|
+
if (!activeThreadId && providedInitialThreadId) {
|
|
810
|
+
setActiveThreadId(providedInitialThreadId);
|
|
811
|
+
}
|
|
812
|
+
}, [activeThreadId, providedInitialThreadId, setActiveThreadId]);
|
|
803
813
|
const {
|
|
804
814
|
data: threads = [],
|
|
805
815
|
isLoading,
|
|
@@ -816,12 +826,11 @@ var ThreadProvider = ({
|
|
|
816
826
|
});
|
|
817
827
|
const createMutation = reactQuery.useMutation({
|
|
818
828
|
mutationFn: async () => {
|
|
819
|
-
|
|
820
|
-
return newId;
|
|
829
|
+
return null;
|
|
821
830
|
},
|
|
822
|
-
onSuccess: async (
|
|
831
|
+
onSuccess: async () => {
|
|
823
832
|
await queryClient.invalidateQueries({ queryKey: ["threads"] });
|
|
824
|
-
await setActiveThreadId(
|
|
833
|
+
await setActiveThreadId(null);
|
|
825
834
|
}
|
|
826
835
|
});
|
|
827
836
|
const deleteMutation = reactQuery.useMutation({
|
|
@@ -2791,24 +2800,33 @@ function UIRenderer({ node }) {
|
|
|
2791
2800
|
return /* @__PURE__ */ jsxRuntime.jsx(Component, { ...componentProps, children: renderedChildren });
|
|
2792
2801
|
}
|
|
2793
2802
|
function MessageContent({ events }) {
|
|
2803
|
+
const firstSlotIndexes = /* @__PURE__ */ new Map();
|
|
2794
2804
|
const latestSlotIndexes = /* @__PURE__ */ new Map();
|
|
2795
2805
|
events.forEach((event, index) => {
|
|
2796
2806
|
if (event.slot) {
|
|
2807
|
+
if (!firstSlotIndexes.has(event.slot)) {
|
|
2808
|
+
firstSlotIndexes.set(event.slot, index);
|
|
2809
|
+
}
|
|
2797
2810
|
latestSlotIndexes.set(event.slot, index);
|
|
2798
2811
|
}
|
|
2799
2812
|
});
|
|
2800
2813
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: events.map((event, index) => {
|
|
2801
|
-
|
|
2802
|
-
|
|
2814
|
+
let displayEvent = event;
|
|
2815
|
+
if (event.slot) {
|
|
2816
|
+
if (firstSlotIndexes.get(event.slot) !== index) {
|
|
2817
|
+
return null;
|
|
2818
|
+
}
|
|
2819
|
+
const latestIndex = latestSlotIndexes.get(event.slot);
|
|
2820
|
+
displayEvent = events[latestIndex];
|
|
2803
2821
|
}
|
|
2804
|
-
if (
|
|
2805
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
2822
|
+
if (displayEvent.type === "text-delta") {
|
|
2823
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { children: displayEvent.data?.delta }, index);
|
|
2806
2824
|
}
|
|
2807
|
-
if (
|
|
2808
|
-
return /* @__PURE__ */ jsxRuntime.jsx("p", { children:
|
|
2825
|
+
if (displayEvent.type === "text") {
|
|
2826
|
+
return /* @__PURE__ */ jsxRuntime.jsx("p", { children: displayEvent.data?.content || displayEvent.data?.text }, index);
|
|
2809
2827
|
}
|
|
2810
|
-
if (
|
|
2811
|
-
return /* @__PURE__ */ jsxRuntime.jsx(UIRenderer, { node:
|
|
2828
|
+
if (displayEvent.ui) {
|
|
2829
|
+
return /* @__PURE__ */ jsxRuntime.jsx(UIRenderer, { node: displayEvent.ui }, index);
|
|
2812
2830
|
}
|
|
2813
2831
|
return null;
|
|
2814
2832
|
}) });
|
|
@@ -3054,7 +3072,7 @@ var Dropdown = ({
|
|
|
3054
3072
|
] });
|
|
3055
3073
|
};
|
|
3056
3074
|
var ThreadList = ({ className }) => {
|
|
3057
|
-
const { threads, activeThreadId,
|
|
3075
|
+
const { threads, activeThreadId, deleteThread } = useThreads();
|
|
3058
3076
|
const sortedThreads = React11__namespace.useMemo(() => {
|
|
3059
3077
|
return [...threads].sort((a, b) => {
|
|
3060
3078
|
const dateA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
@@ -3530,7 +3548,6 @@ var CreateThreadButton = ({
|
|
|
3530
3548
|
className,
|
|
3531
3549
|
variant = "ghost",
|
|
3532
3550
|
size = "default",
|
|
3533
|
-
children,
|
|
3534
3551
|
onThreadCreated
|
|
3535
3552
|
}) => {
|
|
3536
3553
|
const { createThread } = useThreads();
|
|
@@ -3540,7 +3557,9 @@ var CreateThreadButton = ({
|
|
|
3540
3557
|
try {
|
|
3541
3558
|
setIsCreating(true);
|
|
3542
3559
|
const threadId = await createThread();
|
|
3543
|
-
|
|
3560
|
+
if (threadId) {
|
|
3561
|
+
onThreadCreated?.(threadId);
|
|
3562
|
+
}
|
|
3544
3563
|
} catch (error) {
|
|
3545
3564
|
console.error("Failed to create thread:", error);
|
|
3546
3565
|
} finally {
|
|
@@ -3645,7 +3664,7 @@ var CreateThreadNavItem = ({
|
|
|
3645
3664
|
onClickAction: {
|
|
3646
3665
|
type: "client:navigate",
|
|
3647
3666
|
data: {
|
|
3648
|
-
url:
|
|
3667
|
+
url: "?"
|
|
3649
3668
|
}
|
|
3650
3669
|
},
|
|
3651
3670
|
className: cn(className),
|