@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.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 { Role, Event, Config, UINode, UIContract } from 'melony';
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
- declare function groupEventsToMessages(events: Event[]): Message[];
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 { Role, Event, Config, UINode, UIContract } from 'melony';
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
- declare function groupEventsToMessages(events: Event[]): Message[];
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, useMemo, useEffect, useRef } from 'react';
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: groupEventsToMessages(state.events),
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.withDefault(initialThreadId)
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
- const newId = service.createThread ? await service.createThread() : generateId();
799
- return newId;
784
+ return null;
800
785
  },
801
- onSuccess: async (newId) => {
786
+ onSuccess: async () => {
802
787
  await queryClient.invalidateQueries({ queryKey: ["threads"] });
803
- await setActiveThreadId(newId);
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
- if (event.slot && latestSlotIndexes.get(event.slot) !== index) {
2781
- return null;
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 (event.type === "text-delta") {
2784
- return /* @__PURE__ */ jsx("span", { children: event.data?.delta }, index);
2777
+ if (displayEvent.type === "text-delta") {
2778
+ return /* @__PURE__ */ jsx("span", { children: displayEvent.data?.delta }, index);
2785
2779
  }
2786
- if (event.type === "text") {
2787
- return /* @__PURE__ */ jsx("p", { children: event.data?.content || event.data?.text }, index);
2780
+ if (displayEvent.type === "text") {
2781
+ return /* @__PURE__ */ jsx("p", { children: displayEvent.data?.content || displayEvent.data?.text }, index);
2788
2782
  }
2789
- if (event.ui) {
2790
- return /* @__PURE__ */ jsx(UIRenderer, { node: event.ui }, index);
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 ? "items-end" : "items-start"
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
- type: "text",
2901
- role: "user",
2902
- data: { content: text || "" },
2903
- state: {
2904
- ...state,
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, selectThread, deleteThread, isLoading } = useThreads();
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
- onThreadCreated?.(threadId);
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: `?threadId=${generateId()}`
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, groupEventsToMessages, useAuth, useMelony, useScreenSize, useSidebar, useTheme, useThreads };
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