@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 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.withDefault(initialThreadId)
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
- const newId = service.createThread ? await service.createThread() : client.generateId();
820
- return newId;
829
+ return null;
821
830
  },
822
- onSuccess: async (newId) => {
831
+ onSuccess: async () => {
823
832
  await queryClient.invalidateQueries({ queryKey: ["threads"] });
824
- await setActiveThreadId(newId);
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
- if (event.slot && latestSlotIndexes.get(event.slot) !== index) {
2802
- return null;
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 (event.type === "text-delta") {
2805
- return /* @__PURE__ */ jsxRuntime.jsx("span", { children: event.data?.delta }, index);
2822
+ if (displayEvent.type === "text-delta") {
2823
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { children: displayEvent.data?.delta }, index);
2806
2824
  }
2807
- if (event.type === "text") {
2808
- return /* @__PURE__ */ jsxRuntime.jsx("p", { children: event.data?.content || event.data?.text }, index);
2825
+ if (displayEvent.type === "text") {
2826
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { children: displayEvent.data?.content || displayEvent.data?.text }, index);
2809
2827
  }
2810
- if (event.ui) {
2811
- return /* @__PURE__ */ jsxRuntime.jsx(UIRenderer, { node: event.ui }, index);
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, selectThread, deleteThread, isLoading } = useThreads();
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
- onThreadCreated?.(threadId);
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: `?threadId=${client.generateId()}`
3667
+ url: "?"
3649
3668
  }
3650
3669
  },
3651
3670
  className: cn(className),