@melony/react 0.1.15 → 0.1.18

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
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React11 = require('react');
3
+ var React10 = require('react');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var client = require('melony/client');
6
6
  var clsx = require('clsx');
@@ -37,7 +37,7 @@ function _interopNamespace(e) {
37
37
  return Object.freeze(n);
38
38
  }
39
39
 
40
- var React11__namespace = /*#__PURE__*/_interopNamespace(React11);
40
+ var React10__namespace = /*#__PURE__*/_interopNamespace(React10);
41
41
  var ICONS__namespace = /*#__PURE__*/_interopNamespace(ICONS);
42
42
 
43
43
  // src/providers/melony-provider.tsx
@@ -66,7 +66,7 @@ function groupEventsToMessages(events) {
66
66
  }
67
67
  return messages;
68
68
  }
69
- var MelonyContext = React11.createContext(
69
+ var MelonyContext = React10.createContext(
70
70
  void 0
71
71
  );
72
72
  var MelonyClientProvider = ({
@@ -74,20 +74,20 @@ var MelonyClientProvider = ({
74
74
  client,
75
75
  initialEvents
76
76
  }) => {
77
- const [state, setState] = React11.useState(client.getState());
78
- React11.useEffect(() => {
77
+ const [state, setState] = React10.useState(client.getState());
78
+ React10.useEffect(() => {
79
79
  if (initialEvents && initialEvents.length > 0 && client.getState().events.length === 0) {
80
80
  client.reset(initialEvents);
81
81
  }
82
82
  }, [client, initialEvents]);
83
- React11.useEffect(() => {
83
+ React10.useEffect(() => {
84
84
  setState(client.getState());
85
85
  const unsubscribe = client.subscribe(setState);
86
86
  return () => {
87
87
  unsubscribe();
88
88
  };
89
89
  }, [client]);
90
- const sendEvent = React11.useCallback(
90
+ const sendEvent = React10.useCallback(
91
91
  async (event, options) => {
92
92
  const generator = client.sendEvent(event, options);
93
93
  for await (const _ of generator) {
@@ -95,11 +95,11 @@ var MelonyClientProvider = ({
95
95
  },
96
96
  [client]
97
97
  );
98
- const reset = React11.useCallback(
98
+ const reset = React10.useCallback(
99
99
  (events) => client.reset(events),
100
100
  [client]
101
101
  );
102
- const value = React11.useMemo(
102
+ const value = React10.useMemo(
103
103
  () => ({
104
104
  ...state,
105
105
  messages: groupEventsToMessages(state.events),
@@ -111,16 +111,16 @@ var MelonyClientProvider = ({
111
111
  );
112
112
  return /* @__PURE__ */ jsxRuntime.jsx(MelonyContext.Provider, { value, children });
113
113
  };
114
- var AuthContext = React11.createContext(
114
+ var AuthContext = React10.createContext(
115
115
  void 0
116
116
  );
117
117
  var AuthProvider = ({
118
118
  children,
119
119
  service
120
120
  }) => {
121
- const [user, setUser] = React11.useState(null);
122
- const [isLoading, setIsLoading] = React11.useState(true);
123
- const fetchMe = React11.useCallback(async () => {
121
+ const [user, setUser] = React10.useState(null);
122
+ const [isLoading, setIsLoading] = React10.useState(true);
123
+ const fetchMe = React10.useCallback(async () => {
124
124
  setIsLoading(true);
125
125
  try {
126
126
  const userData = await service.getMe();
@@ -132,13 +132,13 @@ var AuthProvider = ({
132
132
  setIsLoading(false);
133
133
  }
134
134
  }, [service]);
135
- React11.useEffect(() => {
135
+ React10.useEffect(() => {
136
136
  fetchMe();
137
137
  }, [fetchMe]);
138
- const login = React11.useCallback(() => {
138
+ const login = React10.useCallback(() => {
139
139
  service.login();
140
140
  }, [service]);
141
- const logout = React11.useCallback(async () => {
141
+ const logout = React10.useCallback(async () => {
142
142
  try {
143
143
  await service.logout();
144
144
  setUser(null);
@@ -174,7 +174,7 @@ var AuthProvider = ({
174
174
  }
175
175
  return /* @__PURE__ */ jsxRuntime.jsx(AuthContext.Provider, { value, children });
176
176
  };
177
- var ThreadContext = React11.createContext(
177
+ var ThreadContext = React10.createContext(
178
178
  void 0
179
179
  );
180
180
  var ThreadProvider = ({
@@ -182,17 +182,17 @@ var ThreadProvider = ({
182
182
  service,
183
183
  initialThreadId: providedInitialThreadId
184
184
  }) => {
185
- const defaultInitialThreadId = React11.useMemo(() => client.generateId(), []);
185
+ const defaultInitialThreadId = React10.useMemo(() => client.generateId(), []);
186
186
  const initialThreadId = providedInitialThreadId || defaultInitialThreadId;
187
- const [threads, setThreads] = React11.useState([]);
188
- const [activeThreadId, setActiveThreadId] = React11.useState(
187
+ const [threads, setThreads] = React10.useState([]);
188
+ const [activeThreadId, setActiveThreadId] = React10.useState(
189
189
  initialThreadId
190
190
  );
191
- const [isLoading, setIsLoading] = React11.useState(true);
192
- const [error, setError] = React11.useState(null);
193
- const [threadEvents, setThreadEvents] = React11.useState([]);
194
- const [isLoadingEvents, setIsLoadingEvents] = React11.useState(false);
195
- const fetchThreads = React11.useCallback(async () => {
191
+ const [isLoading, setIsLoading] = React10.useState(true);
192
+ const [error, setError] = React10.useState(null);
193
+ const [threadEvents, setThreadEvents] = React10.useState([]);
194
+ const [isLoadingEvents, setIsLoadingEvents] = React10.useState(false);
195
+ const fetchThreads = React10.useCallback(async () => {
196
196
  setIsLoading(true);
197
197
  setError(null);
198
198
  try {
@@ -206,13 +206,13 @@ var ThreadProvider = ({
206
206
  setIsLoading(false);
207
207
  }
208
208
  }, [service]);
209
- React11.useEffect(() => {
209
+ React10.useEffect(() => {
210
210
  fetchThreads();
211
211
  }, [fetchThreads]);
212
- const selectThread = React11.useCallback((threadId) => {
212
+ const selectThread = React10.useCallback((threadId) => {
213
213
  setActiveThreadId(threadId);
214
214
  }, []);
215
- const createThread = React11.useCallback(async () => {
215
+ const createThread = React10.useCallback(async () => {
216
216
  const newId = service.createThread ? await service.createThread() : client.generateId();
217
217
  const newThread = {
218
218
  id: newId,
@@ -222,7 +222,7 @@ var ThreadProvider = ({
222
222
  setActiveThreadId(newId);
223
223
  return newId;
224
224
  }, [service]);
225
- const deleteThread = React11.useCallback(
225
+ const deleteThread = React10.useCallback(
226
226
  async (threadId) => {
227
227
  try {
228
228
  await service.deleteThread(threadId);
@@ -244,10 +244,10 @@ var ThreadProvider = ({
244
244
  },
245
245
  [service]
246
246
  );
247
- const refreshThreads = React11.useCallback(async () => {
247
+ const refreshThreads = React10.useCallback(async () => {
248
248
  await fetchThreads();
249
249
  }, [fetchThreads]);
250
- React11.useEffect(() => {
250
+ React10.useEffect(() => {
251
251
  if (!activeThreadId) {
252
252
  setThreadEvents([]);
253
253
  setIsLoadingEvents(false);
@@ -277,7 +277,7 @@ var ThreadProvider = ({
277
277
  cancelled = true;
278
278
  };
279
279
  }, [activeThreadId, service]);
280
- const value = React11.useMemo(
280
+ const value = React10.useMemo(
281
281
  () => ({
282
282
  threads,
283
283
  activeThreadId,
@@ -305,11 +305,11 @@ var ThreadProvider = ({
305
305
  );
306
306
  return /* @__PURE__ */ jsxRuntime.jsx(ThreadContext.Provider, { value, children });
307
307
  };
308
- var ThemeContext = React11.createContext(void 0);
308
+ var ThemeContext = React10.createContext(void 0);
309
309
  function ThemeProvider({ children }) {
310
- const [theme, setThemeState] = React11.useState("system");
311
- const [resolvedTheme, setResolvedTheme] = React11.useState("light");
312
- React11.useEffect(() => {
310
+ const [theme, setThemeState] = React10.useState("system");
311
+ const [resolvedTheme, setResolvedTheme] = React10.useState("light");
312
+ React10.useEffect(() => {
313
313
  if (typeof window !== "undefined") {
314
314
  const stored = localStorage.getItem("theme");
315
315
  if (stored) {
@@ -317,7 +317,7 @@ function ThemeProvider({ children }) {
317
317
  }
318
318
  }
319
319
  }, []);
320
- React11.useEffect(() => {
320
+ React10.useEffect(() => {
321
321
  if (typeof window !== "undefined") {
322
322
  if (theme === "system") {
323
323
  const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
@@ -332,7 +332,7 @@ function ThemeProvider({ children }) {
332
332
  }
333
333
  }
334
334
  }, [theme]);
335
- React11.useEffect(() => {
335
+ React10.useEffect(() => {
336
336
  if (typeof window !== "undefined") {
337
337
  const root = document.documentElement;
338
338
  if (resolvedTheme === "dark") {
@@ -351,20 +351,20 @@ function ThemeProvider({ children }) {
351
351
  return /* @__PURE__ */ jsxRuntime.jsx(ThemeContext.Provider, { value: { theme, setTheme, resolvedTheme }, children });
352
352
  }
353
353
  function useTheme() {
354
- const context = React11.useContext(ThemeContext);
354
+ const context = React10.useContext(ThemeContext);
355
355
  if (context === void 0) {
356
356
  throw new Error("useTheme must be used within a ThemeProvider");
357
357
  }
358
358
  return context;
359
359
  }
360
360
  var useMelony = (options) => {
361
- const context = React11.useContext(MelonyContext);
361
+ const context = React10.useContext(MelonyContext);
362
362
  if (context === void 0) {
363
363
  throw new Error("useMelony must be used within a MelonyClientProvider");
364
364
  }
365
365
  const { client, reset } = context;
366
366
  const { initialEvents } = options || {};
367
- React11.useEffect(() => {
367
+ React10.useEffect(() => {
368
368
  if (initialEvents && initialEvents.length > 0 && client.getState().events.length === 0) {
369
369
  reset(initialEvents);
370
370
  }
@@ -372,14 +372,14 @@ var useMelony = (options) => {
372
372
  return context;
373
373
  };
374
374
  var useAuth = () => {
375
- const context = React11.useContext(AuthContext);
375
+ const context = React10.useContext(AuthContext);
376
376
  if (context === void 0) {
377
377
  throw new Error("useAuth must be used within an AuthProvider");
378
378
  }
379
379
  return context;
380
380
  };
381
381
  var useThreads = () => {
382
- const context = React11.useContext(ThreadContext);
382
+ const context = React10.useContext(ThreadContext);
383
383
  if (context === void 0) {
384
384
  throw new Error("useThreads must be used within a ThreadProvider");
385
385
  }
@@ -573,7 +573,7 @@ function Composer({
573
573
  autoFocus = false,
574
574
  defaultSelectedIds = []
575
575
  }) {
576
- const [selectedOptions, setSelectedOptions] = React11__namespace.default.useState(
576
+ const [selectedOptions, setSelectedOptions] = React10__namespace.default.useState(
577
577
  () => new Set(defaultSelectedIds)
578
578
  );
579
579
  const toggleOption = (id, groupOptions, type = "multiple") => {
@@ -1187,9 +1187,9 @@ var Image = ({
1187
1187
  className,
1188
1188
  style
1189
1189
  }) => {
1190
- const [hasError, setHasError] = React11.useState(false);
1191
- const [isLoading, setIsLoading] = React11.useState(true);
1192
- const [open, setOpen] = React11.useState(false);
1190
+ const [hasError, setHasError] = React10.useState(false);
1191
+ const [isLoading, setIsLoading] = React10.useState(true);
1192
+ const [open, setOpen] = React10.useState(false);
1193
1193
  const sizes = {
1194
1194
  sm: "h-11",
1195
1195
  md: "h-22",
@@ -1387,7 +1387,7 @@ var Chart = ({
1387
1387
  className,
1388
1388
  style
1389
1389
  }) => {
1390
- const [tooltip, setTooltip] = React11.useState(null);
1390
+ const [tooltip, setTooltip] = React10.useState(null);
1391
1391
  if (!Array.isArray(data)) {
1392
1392
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 text-destructive border border-destructive/20 rounded-md bg-destructive/5", children: "Error: Chart data must be an array" });
1393
1393
  }
@@ -2143,7 +2143,7 @@ var Button2 = ({
2143
2143
  };
2144
2144
  var Form = ({ children, onSubmitAction, className, style }) => {
2145
2145
  const { sendEvent } = useMelony();
2146
- const [isSubmitted, setIsSubmitted] = React11.useState(false);
2146
+ const [isSubmitted, setIsSubmitted] = React10.useState(false);
2147
2147
  const handleSubmit = (e) => {
2148
2148
  e.preventDefault();
2149
2149
  if (isSubmitted) return;
@@ -2290,7 +2290,7 @@ function MessageBubble({ message }) {
2290
2290
  );
2291
2291
  }
2292
2292
  function LoadingIndicator({ status }) {
2293
- const [isExpanded, setIsExpanded] = React11.useState(false);
2293
+ const [isExpanded, setIsExpanded] = React10.useState(false);
2294
2294
  const message = status?.message || "Processing...";
2295
2295
  const details = status?.details;
2296
2296
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
@@ -2313,15 +2313,21 @@ function LoadingIndicator({ status }) {
2313
2313
  function ErrorDisplay({ error }) {
2314
2314
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-destructive p-2 border border-destructive rounded-md bg-destructive/10", children: error.message });
2315
2315
  }
2316
- function MessageList({ messages, isLoading, error, loadingStatus }) {
2316
+ function MessageList({
2317
+ messages,
2318
+ isLoading,
2319
+ error,
2320
+ loadingStatus
2321
+ }) {
2317
2322
  if (messages.length === 0) {
2318
2323
  return null;
2319
2324
  }
2320
- const isTextStreaming = React11.useMemo(() => {
2325
+ const isTextStreaming = React10.useMemo(() => {
2321
2326
  if (messages.length === 0 || !isLoading) return false;
2322
2327
  const lastMessage = messages[messages.length - 1];
2323
2328
  return lastMessage.content.some((event) => event.type === "text-delta");
2324
2329
  }, [messages, isLoading]);
2330
+ console.log("MESSAGES", messages);
2325
2331
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
2326
2332
  messages.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx(MessageBubble, { message }, index)),
2327
2333
  isLoading && !isTextStreaming && /* @__PURE__ */ jsxRuntime.jsx(LoadingIndicator, { status: loadingStatus }),
@@ -2338,9 +2344,9 @@ function Thread({
2338
2344
  defaultSelectedIds
2339
2345
  }) {
2340
2346
  const { messages, isLoading, error, sendEvent, loadingStatus } = useMelony();
2341
- const [input, setInput] = React11.useState("");
2342
- const messagesEndRef = React11.useRef(null);
2343
- React11.useEffect(() => {
2347
+ const [input, setInput] = React10.useState("");
2348
+ const messagesEndRef = React10.useRef(null);
2349
+ React10.useEffect(() => {
2344
2350
  messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
2345
2351
  }, [messages]);
2346
2352
  const handleSubmit = async (state, overrideInput) => {
@@ -2536,8 +2542,8 @@ function ChatPopup({
2536
2542
  headerProps,
2537
2543
  defaultSelectedIds
2538
2544
  }) {
2539
- const [isOpen, setIsOpen] = React11.useState(defaultOpen);
2540
- const [view, setView] = React11.useState("chat");
2545
+ const [isOpen, setIsOpen] = React10.useState(defaultOpen);
2546
+ const [view, setView] = React10.useState("chat");
2541
2547
  const { createThread } = useThreads();
2542
2548
  const handleNewChat = async () => {
2543
2549
  try {
@@ -2676,10 +2682,10 @@ function ChatFull({
2676
2682
  autoFocus = false,
2677
2683
  defaultSelectedIds
2678
2684
  }) {
2679
- const [internalLeftCollapsed, setInternalLeftCollapsed] = React11.useState(
2685
+ const [internalLeftCollapsed, setInternalLeftCollapsed] = React10.useState(
2680
2686
  defaultLeftSidebarCollapsed
2681
2687
  );
2682
- const [internalRightCollapsed, setInternalRightCollapsed] = React11.useState(
2688
+ const [internalRightCollapsed, setInternalRightCollapsed] = React10.useState(
2683
2689
  defaultRightSidebarCollapsed
2684
2690
  );
2685
2691
  const leftCollapsed = controlledLeftCollapsed !== void 0 ? controlledLeftCollapsed : internalLeftCollapsed;
@@ -2788,11 +2794,11 @@ function ChatFull({
2788
2794
  ] })
2789
2795
  ] });
2790
2796
  }
2791
- var PopoverContext = React11__namespace.createContext(
2797
+ var PopoverContext = React10__namespace.createContext(
2792
2798
  void 0
2793
2799
  );
2794
2800
  function usePopoverContext() {
2795
- const context = React11__namespace.useContext(PopoverContext);
2801
+ const context = React10__namespace.useContext(PopoverContext);
2796
2802
  if (!context) {
2797
2803
  throw new Error("Popover components must be used within a Popover");
2798
2804
  }
@@ -2804,10 +2810,10 @@ function Popover({
2804
2810
  open: controlledOpen,
2805
2811
  onOpenChange
2806
2812
  }) {
2807
- const [internalOpen, setInternalOpen] = React11__namespace.useState(defaultOpen);
2808
- const triggerRef = React11__namespace.useRef(null);
2813
+ const [internalOpen, setInternalOpen] = React10__namespace.useState(defaultOpen);
2814
+ const triggerRef = React10__namespace.useRef(null);
2809
2815
  const open = controlledOpen ?? internalOpen;
2810
- const setOpen = React11__namespace.useCallback(
2816
+ const setOpen = React10__namespace.useCallback(
2811
2817
  (newOpen) => {
2812
2818
  if (controlledOpen === void 0) {
2813
2819
  setInternalOpen(newOpen);
@@ -2816,7 +2822,7 @@ function Popover({
2816
2822
  },
2817
2823
  [controlledOpen, onOpenChange]
2818
2824
  );
2819
- const value = React11__namespace.useMemo(
2825
+ const value = React10__namespace.useMemo(
2820
2826
  () => ({
2821
2827
  open,
2822
2828
  setOpen,
@@ -2826,15 +2832,15 @@ function Popover({
2826
2832
  );
2827
2833
  return /* @__PURE__ */ jsxRuntime.jsx(PopoverContext.Provider, { value, children });
2828
2834
  }
2829
- var PopoverTrigger = React11__namespace.forwardRef(
2835
+ var PopoverTrigger = React10__namespace.forwardRef(
2830
2836
  ({ asChild, className, children, ...props }, ref) => {
2831
2837
  const { setOpen, triggerRef } = usePopoverContext();
2832
2838
  const handleClick = (e) => {
2833
2839
  setOpen(true);
2834
2840
  props.onClick?.(e);
2835
2841
  };
2836
- if (asChild && React11__namespace.isValidElement(children)) {
2837
- return React11__namespace.cloneElement(children, {
2842
+ if (asChild && React10__namespace.isValidElement(children)) {
2843
+ return React10__namespace.cloneElement(children, {
2838
2844
  ref: (node) => {
2839
2845
  triggerRef.current = node;
2840
2846
  if (typeof children.ref === "function") {
@@ -2866,7 +2872,7 @@ var PopoverTrigger = React11__namespace.forwardRef(
2866
2872
  }
2867
2873
  );
2868
2874
  PopoverTrigger.displayName = "PopoverTrigger";
2869
- var PopoverContent = React11__namespace.forwardRef(
2875
+ var PopoverContent = React10__namespace.forwardRef(
2870
2876
  ({
2871
2877
  className,
2872
2878
  side = "bottom",
@@ -2877,9 +2883,9 @@ var PopoverContent = React11__namespace.forwardRef(
2877
2883
  ...props
2878
2884
  }, ref) => {
2879
2885
  const { open, setOpen, triggerRef } = usePopoverContext();
2880
- const [position, setPosition] = React11__namespace.useState({ top: 0, left: 0 });
2881
- const contentRef = React11__namespace.useRef(null);
2882
- React11__namespace.useEffect(() => {
2886
+ const [position, setPosition] = React10__namespace.useState({ top: 0, left: 0 });
2887
+ const contentRef = React10__namespace.useRef(null);
2888
+ React10__namespace.useEffect(() => {
2883
2889
  if (!open || !triggerRef.current) return;
2884
2890
  const updatePosition = () => {
2885
2891
  if (!triggerRef.current || !contentRef.current) return;
@@ -2940,7 +2946,7 @@ var PopoverContent = React11__namespace.forwardRef(
2940
2946
  window.removeEventListener("scroll", updatePosition, true);
2941
2947
  };
2942
2948
  }, [open, side, align, sideOffset, alignOffset, triggerRef]);
2943
- React11__namespace.useEffect(() => {
2949
+ React10__namespace.useEffect(() => {
2944
2950
  if (!open) return;
2945
2951
  const handleClickOutside = (event) => {
2946
2952
  if (contentRef.current && !contentRef.current.contains(event.target) && triggerRef.current && !triggerRef.current.contains(event.target)) {
@@ -2996,7 +3002,7 @@ var ThreadPopover = ({
2996
3002
  emptyState,
2997
3003
  onThreadSelect
2998
3004
  }) => {
2999
- const [isOpen, setIsOpen] = React11__namespace.useState(false);
3005
+ const [isOpen, setIsOpen] = React10__namespace.useState(false);
3000
3006
  reactHotkeysHook.useHotkeys(
3001
3007
  "h",
3002
3008
  (e) => {
@@ -3051,7 +3057,7 @@ var CreateThreadButton = ({
3051
3057
  onThreadCreated
3052
3058
  }) => {
3053
3059
  const { createThread } = useThreads();
3054
- const [isCreating, setIsCreating] = React11__namespace.useState(false);
3060
+ const [isCreating, setIsCreating] = React10__namespace.useState(false);
3055
3061
  const handleCreateThread = async () => {
3056
3062
  if (isCreating) return;
3057
3063
  try {
@@ -3177,10 +3183,10 @@ var AccountDialog = ({
3177
3183
  size
3178
3184
  }) => {
3179
3185
  const { isLoading, isAuthenticated, user, login, logout } = useAuth();
3180
- const [open, setOpen] = React11__namespace.useState(false);
3181
- const [accountInfoOpen, setAccountInfoOpen] = React11__namespace.useState(false);
3182
- const [error, setError] = React11__namespace.useState(null);
3183
- const initials = React11__namespace.useMemo(() => {
3186
+ const [open, setOpen] = React10__namespace.useState(false);
3187
+ const [accountInfoOpen, setAccountInfoOpen] = React10__namespace.useState(false);
3188
+ const [error, setError] = React10__namespace.useState(null);
3189
+ const initials = React10__namespace.useMemo(() => {
3184
3190
  const name = user?.displayName || user?.name;
3185
3191
  if (!name) return "";
3186
3192
  return name.split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);