@melony/react 0.1.28 → 0.1.31

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/group-events-to-messages.ts","../src/providers/melony-provider.tsx","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/hooks/use-auth.ts","../src/components/welcome-screen.tsx","../src/providers/auth-provider.tsx","../src/providers/thread-provider.tsx","../src/hooks/use-screen-size.ts","../src/providers/sidebar-provider.tsx","../src/providers/theme-provider.tsx","../src/hooks/use-melony.ts","../src/hooks/use-threads.ts","../src/components/ui/textarea.tsx","../src/components/ui/badge.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/composer.tsx","../src/components/ui/card.tsx","../src/components/elements/Card.tsx","../src/components/elements/Row.tsx","../src/components/elements/Col.tsx","../src/components/elements/Box.tsx","../src/components/elements/Spacer.tsx","../src/components/ui/separator.tsx","../src/components/elements/Divider.tsx","../src/components/elements/List.tsx","../src/components/elements/ListItem.tsx","../src/components/ui/dialog.tsx","../src/components/elements/Image.tsx","../src/components/elements/Icon.tsx","../src/components/elements/Badge.tsx","../src/components/elements/Chart.tsx","../src/components/elements/Text.tsx","../src/components/elements/Heading.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/field.tsx","../src/components/elements/Input.tsx","../src/components/elements/Textarea.tsx","../src/components/ui/select.tsx","../src/components/elements/Select.tsx","../src/components/elements/Label.tsx","../src/components/elements/Checkbox.tsx","../src/components/elements/RadioGroup.tsx","../src/components/elements/Button.tsx","../src/components/elements/Form.tsx","../src/components/starter-prompts.tsx","../src/components/ui-renderer.tsx","../src/components/message-content.tsx","../src/components/message.tsx","../src/components/loading-indicator.tsx","../src/components/error-display.tsx","../src/components/message-list.tsx","../src/components/thread.tsx","../src/components/chat-header.tsx","../src/components/thread-list.tsx","../src/components/popup-chat.tsx","../src/components/sidebar.tsx","../src/components/full-chat.tsx","../src/components/sidebar-toggle.tsx","../src/components/ui/popover.tsx","../src/components/thread-popover.tsx","../src/components/create-thread-button.tsx","../src/components/ui/alert-dialog.tsx","../src/components/account-dialog.tsx","../src/components/theme-toggle.tsx"],"names":["jsx","ButtonPrimitive","createContext","useQuery","useCallback","useQueryClient","useMemo","useMutation","useState","useEffect","useContext","cva","MenuPrimitive","jsxs","React","Card","SeparatorPrimitive","DialogPrimitive","Badge","InputPrimitive","Input","Textarea","SelectPrimitive","IconCheck","IconChevronDown","Select","value","Label","Button","Fragment","IconLoader2","IconChevronUp","useRef","React9","IconPlus","IconX","IconMessage","React12","IconHistory","React13","useHotkeys","AlertDialogPrimitive","React14","IconBrandGoogle"],"mappings":"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","file":"index.js","sourcesContent":["import { Event } from \"melony\";\nimport { Message } from \"@/types\";\n\nexport function groupEventsToMessages(events: Event[]): Message[] {\n if (events.length === 0) return [];\n\n const messages: Message[] = [];\n let currentMessage: Message | null = null;\n\n for (const event of events) {\n const role = event.role || \"assistant\";\n const runId = event.runId;\n\n // Start a new message if:\n // 1. No current message\n // 2. Role changed\n // 3. runId changed (and both have runIds)\n if (\n !currentMessage ||\n currentMessage.role !== role ||\n (runId && currentMessage.runId && runId !== currentMessage.runId)\n ) {\n currentMessage = {\n role: role,\n content: [event],\n runId,\n };\n messages.push(currentMessage);\n } else {\n currentMessage.content.push(event);\n // If the current message didn't have a runId but this event does, update it\n if (!currentMessage.runId && runId) {\n currentMessage.runId = runId;\n }\n }\n }\n\n return messages;\n}\n","import React, {\n createContext,\n useEffect,\n useState,\n useMemo,\n useCallback,\n ReactNode,\n} from \"react\";\nimport { MelonyClient, ClientState } from \"melony/client\";\nimport { Config, Event } from \"melony\";\nimport { Message } from \"@/types\";\nimport { groupEventsToMessages } from \"@/lib/group-events-to-messages\";\nimport { NuqsAdapter } from \"nuqs/adapters/react\";\nimport {\n QueryClient,\n QueryClientProvider,\n useQuery,\n} from \"@tanstack/react-query\";\n\nexport interface MelonyContextValue extends ClientState {\n messages: Message[];\n sendEvent: (\n event: Event,\n options?: { runId?: string; state?: Record<string, any> }\n ) => Promise<void>;\n reset: (events?: Event[]) => void;\n client: MelonyClient;\n config?: Config;\n}\n\nexport const MelonyContext = createContext<MelonyContextValue | undefined>(\n undefined\n);\n\nexport interface MelonyProviderProps {\n children: ReactNode;\n client: MelonyClient;\n initialEvents?: Event[];\n queryClient?: QueryClient;\n}\n\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n },\n },\n});\n\ninterface MelonyContextProviderInnerProps {\n children: ReactNode;\n client: MelonyClient;\n initialEvents?: Event[];\n setContextValue: (value: MelonyContextValue) => void;\n}\n\nconst MelonyContextProviderInner: React.FC<MelonyContextProviderInnerProps> = ({\n children,\n client,\n initialEvents,\n setContextValue,\n}) => {\n const [state, setState] = useState<ClientState>(client.getState());\n\n const { data: config } = useQuery({\n queryKey: [\"melony-config\", client.url],\n queryFn: () => client.getConfig(),\n staleTime: Infinity,\n });\n\n useEffect(() => {\n if (\n initialEvents &&\n initialEvents.length > 0 &&\n client.getState().events.length === 0\n ) {\n client.reset(initialEvents);\n }\n }, [client, initialEvents]);\n\n useEffect(() => {\n setState(client.getState());\n const unsubscribe = client.subscribe(setState);\n return () => {\n unsubscribe();\n };\n }, [client]);\n\n const reset = useCallback(\n (events?: Event[]) => client.reset(events),\n [client]\n );\n\n const dispatchClientAction = useCallback(\n async (event: Event) => {\n if (!event.type.startsWith(\"client:\")) return false;\n\n switch (event.type) {\n case \"client:navigate\": {\n const url = event.data?.url;\n if (url) {\n window.history.pushState(null, \"\", url);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }\n return true;\n }\n case \"client:open-url\": {\n const { url, target = \"_blank\" } = event.data || {};\n if (url) {\n window.open(url, target);\n }\n return true;\n }\n case \"client:copy\": {\n const { text } = event.data || {};\n if (text) {\n await navigator.clipboard.writeText(text);\n }\n return true;\n }\n case \"client:reset\": {\n reset([]);\n return true;\n }\n default:\n return false;\n }\n },\n [client, reset]\n );\n\n const sendEvent = useCallback(\n async (\n event: Event,\n options?: {\n runId?: string;\n state?: Record<string, any>;\n }\n ) => {\n const handled = await dispatchClientAction(event);\n if (handled) return;\n\n const generator = client.sendEvent(event, options);\n for await (const incomingEvent of generator) {\n // Also allow server to trigger client actions\n await dispatchClientAction(incomingEvent);\n }\n },\n [client, dispatchClientAction]\n );\n\n const value = useMemo(\n () => ({\n ...state,\n messages: groupEventsToMessages(state.events),\n sendEvent,\n reset,\n client,\n config: config as Config,\n }),\n [state, sendEvent, reset, client, config]\n );\n\n useEffect(() => {\n setContextValue(value);\n }, [value, setContextValue]);\n\n return <NuqsAdapter>{children}</NuqsAdapter>;\n};\n\nexport const MelonyProvider: React.FC<MelonyProviderProps> = ({\n children,\n client,\n initialEvents,\n queryClient = defaultQueryClient,\n}) => {\n const [contextValue, setContextValue] = useState<\n MelonyContextValue | undefined\n >(undefined);\n\n return (\n <MelonyContext.Provider value={contextValue}>\n <QueryClientProvider client={queryClient}>\n <MelonyContextProviderInner\n client={client}\n initialEvents={initialEvents}\n setContextValue={setContextValue}\n >\n {children}\n </MelonyContextProviderInner>\n </QueryClientProvider>\n </MelonyContext.Provider>\n );\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { Button as ButtonPrimitive } from \"@base-ui/react/button\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-4xl border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline: \"border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost: \"hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground\",\n destructive: \"bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5\",\n xs: \"h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n lg: \"h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n return (\n <ButtonPrimitive\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { useContext } from \"react\";\nimport { AuthContext, AuthContextValue } from \"@/providers/auth-provider\";\n\nexport const useAuth = (): AuthContextValue => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n return context;\n};\n\n","import React from \"react\";\nimport { Button } from \"./ui/button\";\nimport { useAuth } from \"@/hooks/use-auth\";\nimport { IconBrandGoogle } from \"@tabler/icons-react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface WelcomeScreenProps {\n title?: string;\n description?: string;\n features?: { title: string; description: string }[];\n className?: string;\n onLoginClick?: () => void;\n termsUrl?: string;\n privacyUrl?: string;\n imageUrl?: string;\n imageAlt?: string;\n}\n\nexport function WelcomeScreen({\n title = \"Welcome to Melony\",\n description = \"The most powerful AI agent framework for building modern applications. Connect your tools, build your brain, and ship faster.\",\n features = [\n {\n title: \"Context Aware\",\n description: \"Built-in state management for complex LLM flows.\",\n },\n {\n title: \"Extensible\",\n description: \"Plugin architecture for easy integrations.\",\n },\n {\n title: \"Real-time\",\n description: \"Streaming responses and live state updates.\",\n },\n {\n title: \"Tool-ready\",\n description: \"Ready-to-use actions for common tasks.\",\n },\n ],\n className,\n onLoginClick,\n termsUrl = \"#\",\n privacyUrl = \"#\",\n imageUrl,\n imageAlt = \"Product screenshot\",\n}: WelcomeScreenProps) {\n const { login, isLoading } = useAuth();\n\n const handleLogin = () => {\n if (onLoginClick) {\n onLoginClick();\n } else {\n login();\n }\n };\n\n return (\n <div\n className={cn(\n \"flex min-h-[600px] h-full w-full flex-col md:flex-row bg-background overflow-hidden\",\n className\n )}\n >\n {/* Left side: Introduction */}\n <div className=\"flex w-8/12 flex-col bg-sidebar text-foreground relative overflow-hidden\">\n {/* Decorative background element - these are now contained by overflow-hidden */}\n <div className=\"absolute -top-24 -left-24 size-96 bg-primary/5 rounded-full blur-3xl\" />\n <div className=\"absolute -bottom-24 -right-24 size-96 bg-primary/5 rounded-full blur-3xl\" />\n\n {/* Scrollable content wrapper */}\n <div className=\"flex-1 overflow-y-auto overflow-x-hidden relative z-10 flex flex-col p-8 md:p-12 lg:p-20\">\n <div className=\"max-w-xl mx-auto w-full my-auto\">\n <h1 className=\"mb-6 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-foreground\">\n {title}\n </h1>\n <p className=\"mb-12 text-lg text-muted-foreground md:text-xl leading-relaxed\">\n {description}\n </p>\n\n {imageUrl && (\n <div className=\"mb-12 relative group\">\n <div className=\"absolute -inset-1 bg-gradient-to-r from-primary/20 to-primary/10 rounded-xl blur opacity-25 group-hover:opacity-50 transition duration-1000 group-hover:duration-200\"></div>\n <img\n src={imageUrl}\n alt={imageAlt}\n className=\"relative rounded-xl border border-border/50 shadow-2xl transition-transform duration-500 hover:scale-[1.02] w-full\"\n />\n </div>\n )}\n\n <div className=\"grid grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2\">\n {features.map((feature, i) => (\n <div key={i} className=\"space-y-2\">\n <h3 className=\"font-bold text-lg text-foreground\">{feature.title}</h3>\n <p className=\"text-sm text-muted-foreground leading-relaxed\">\n {feature.description}\n </p>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n\n {/* Right side: Login */}\n <div className=\"flex w-4/12 flex-col overflow-y-auto p-8 md:p-12 lg:p-20 bg-background transition-colors duration-300\">\n <div className=\"w-full max-w-sm space-y-8 my-auto mx-auto\">\n <div className=\"space-y-3 text-center md:text-left\">\n <h2 className=\"text-3xl font-bold tracking-tight text-foreground\">Get Started</h2>\n <p className=\"text-muted-foreground text-lg\">\n Sign in to your account to continue\n </p>\n </div>\n\n <div className=\"space-y-4\">\n <Button\n size=\"lg\"\n variant=\"outline\"\n className=\"w-full h-16 text-lg shadow-sm hover:shadow-md transition-all flex items-center justify-center gap-3 border-2 font-medium bg-background text-foreground hover:bg-accent\"\n onClick={handleLogin}\n disabled={isLoading}\n >\n <IconBrandGoogle className=\"size-6\" />\n {isLoading ? \"Signing in...\" : \"Continue with Google\"}\n </Button>\n\n <div className=\"relative py-4\">\n <div className=\"absolute inset-0 flex items-center\">\n <span className=\"w-full border-t border-border\" />\n </div>\n <div className=\"relative flex justify-center text-xs uppercase\">\n <span className=\"bg-background px-3 text-muted-foreground tracking-widest font-medium\">\n Secure access\n </span>\n </div>\n </div>\n </div>\n\n <p className=\"text-sm text-muted-foreground leading-relaxed text-center md:text-left\">\n By continuing, you agree to our <br className=\"hidden md:block\" />\n <a\n href={termsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline underline-offset-4 hover:text-primary transition-colors font-medium\"\n >\n Terms of Service\n </a>{\" \"}\n and{\" \"}\n <a\n href={privacyUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline underline-offset-4 hover:text-primary transition-colors font-medium\"\n >\n Privacy Policy\n </a>\n .\n </p>\n </div>\n </div>\n </div>\n );\n}\n\n","import React, { createContext, useCallback, ReactNode } from \"react\";\nimport { User, AuthService } from \"@/types\";\nimport { WelcomeScreen, WelcomeScreenProps } from \"@/components/welcome-screen\";\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nexport interface AuthContextValue {\n user: User | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n login: () => void;\n logout: () => void;\n getToken: () => string | null;\n}\n\nexport const AuthContext = createContext<AuthContextValue | undefined>(\n undefined\n);\n\nexport interface AuthProviderProps {\n children: ReactNode;\n service: AuthService;\n welcomeScreenProps?: WelcomeScreenProps;\n}\n\nexport const AuthProvider: React.FC<AuthProviderProps> = ({\n children,\n service,\n welcomeScreenProps,\n}) => {\n const queryClient = useQueryClient();\n\n const { data: user, isLoading } = useQuery({\n queryKey: [\"auth-user\", service],\n queryFn: () => service.getMe(),\n retry: false,\n });\n\n const logoutMutation = useMutation({\n mutationFn: () => service.logout(),\n onSuccess: () => {\n queryClient.setQueryData([\"auth-user\", service], null);\n },\n });\n\n const login = useCallback(() => {\n service.login();\n }, [service]);\n\n const logout = useCallback(async () => {\n try {\n await logoutMutation.mutateAsync();\n } catch (error) {\n console.error(\"Failed to logout:\", error);\n }\n }, [logoutMutation]);\n\n if (isLoading) {\n return (\n <div\n style={{\n height: \"100vh\",\n width: \"100vw\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: \"0.875rem\",\n letterSpacing: \"0.01em\",\n }}\n className=\"text-muted-foreground animate-pulse\"\n >\n Loading...\n </div>\n );\n }\n\n const value = {\n user: user || null,\n isAuthenticated: !!user,\n isLoading,\n login,\n logout,\n getToken: service.getToken,\n };\n\n return (\n <AuthContext.Provider value={value}>\n {!value.isAuthenticated && welcomeScreenProps ? (\n <WelcomeScreen {...welcomeScreenProps} />\n ) : (\n children\n )}\n </AuthContext.Provider>\n );\n};\n","import React, {\n createContext,\n useCallback,\n ReactNode,\n useMemo,\n} from \"react\";\nimport { Event } from \"melony\";\nimport { generateId } from \"melony/client\";\nimport { ThreadData, ThreadService } from \"@/types\";\nimport { useQueryState, parseAsString } from \"nuqs\";\nimport {\n useQuery,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nexport interface ThreadContextValue {\n threads: ThreadData[];\n activeThreadId: string | null;\n isLoading: boolean;\n error: Error | null;\n selectThread: (threadId: string) => void;\n createThread: () => Promise<string>;\n deleteThread: (threadId: string) => Promise<void>;\n refreshThreads: () => Promise<void>;\n threadEvents: Event[];\n isLoadingEvents: boolean;\n}\n\nexport const ThreadContext = createContext<ThreadContextValue | undefined>(\n undefined\n);\n\nexport interface ThreadProviderProps {\n children: ReactNode;\n service: ThreadService;\n initialThreadId?: string;\n}\n\nexport const ThreadProvider: React.FC<ThreadProviderProps> = ({\n children,\n service,\n initialThreadId: providedInitialThreadId,\n}) => {\n const queryClient = useQueryClient();\n const defaultInitialThreadId = useMemo(() => generateId(), []);\n const initialThreadId = providedInitialThreadId || defaultInitialThreadId;\n\n const [activeThreadId, setActiveThreadId] = useQueryState(\n \"threadId\",\n parseAsString.withDefault(initialThreadId)\n );\n\n // Fetch all threads\n const {\n data: threads = [],\n isLoading,\n error: threadsError,\n refetch: refreshThreads,\n } = useQuery({\n queryKey: [\"threads\"],\n queryFn: () => service.getThreads(),\n });\n\n // Fetch events for active thread\n const { data: threadEvents = [], isLoading: isLoadingEvents } = useQuery({\n queryKey: [\"threads\", activeThreadId, \"events\"],\n queryFn: () => service.getEvents(activeThreadId!),\n enabled: !!activeThreadId,\n });\n\n const createMutation = useMutation({\n mutationFn: async () => {\n const newId = service.createThread\n ? await service.createThread()\n : generateId();\n return newId;\n },\n onSuccess: async (newId) => {\n await queryClient.invalidateQueries({ queryKey: [\"threads\"] });\n await setActiveThreadId(newId);\n },\n });\n\n const deleteMutation = useMutation({\n mutationFn: (threadId: string) => service.deleteThread(threadId),\n onSuccess: async (_, threadId) => {\n await queryClient.invalidateQueries({ queryKey: [\"threads\"] });\n if (activeThreadId === threadId) {\n const remainingThreads = threads.filter((t) => t.id !== threadId);\n const nextId = remainingThreads.length > 0 ? remainingThreads[0].id : null;\n await setActiveThreadId(nextId);\n }\n },\n });\n\n const selectThread = useCallback(\n (threadId: string) => {\n setActiveThreadId(threadId);\n },\n [setActiveThreadId]\n );\n\n const createThread = useCallback(async () => {\n return createMutation.mutateAsync();\n }, [createMutation]);\n\n const deleteThread = useCallback(\n async (threadId: string) => {\n return deleteMutation.mutateAsync(threadId);\n },\n [deleteMutation]\n );\n\n const value = useMemo(\n () => ({\n threads,\n activeThreadId,\n isLoading,\n error: (threadsError as Error) || null,\n selectThread,\n createThread,\n deleteThread,\n refreshThreads: async () => {\n await refreshThreads();\n },\n threadEvents,\n isLoadingEvents,\n }),\n [\n threads,\n activeThreadId,\n isLoading,\n threadsError,\n selectThread,\n createThread,\n deleteThread,\n refreshThreads,\n threadEvents,\n isLoadingEvents,\n ]\n );\n\n return (\n <ThreadContext.Provider value={value}>{children}</ThreadContext.Provider>\n );\n};\n","import { useState, useEffect } from \"react\";\n\nexport interface ScreenSize {\n width: number;\n height: number;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n}\n\n/**\n * Hook to detect screen size and breakpoints\n * @param mobileBreakpoint - Breakpoint for mobile (default: 768px, Tailwind's md)\n * @param tabletBreakpoint - Breakpoint for tablet (default: 1024px, Tailwind's lg)\n */\nexport function useScreenSize(\n mobileBreakpoint: number = 768,\n tabletBreakpoint: number = 1024\n): ScreenSize {\n const [screenSize, setScreenSize] = useState<ScreenSize>(() => {\n // SSR-safe default\n if (typeof window === \"undefined\") {\n return {\n width: 1024,\n height: 768,\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n };\n }\n\n const width = window.innerWidth;\n return {\n width,\n height: window.innerHeight,\n isMobile: width < mobileBreakpoint,\n isTablet: width >= mobileBreakpoint && width < tabletBreakpoint,\n isDesktop: width >= tabletBreakpoint,\n };\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const updateScreenSize = () => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n setScreenSize({\n width,\n height,\n isMobile: width < mobileBreakpoint,\n isTablet: width >= mobileBreakpoint && width < tabletBreakpoint,\n isDesktop: width >= tabletBreakpoint,\n });\n };\n\n // Set initial size\n updateScreenSize();\n\n // Listen for resize events\n window.addEventListener(\"resize\", updateScreenSize);\n\n return () => {\n window.removeEventListener(\"resize\", updateScreenSize);\n };\n }, [mobileBreakpoint, tabletBreakpoint]);\n\n return screenSize;\n}\n\n","import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from \"react\";\nimport { useScreenSize } from \"@/hooks/use-screen-size\";\n\nexport interface SidebarContextValue {\n leftCollapsed: boolean;\n rightCollapsed: boolean;\n setLeftCollapsed: (collapsed: boolean) => void;\n setRightCollapsed: (collapsed: boolean) => void;\n leftCollapsible: boolean;\n rightCollapsible: boolean;\n}\n\nexport const SidebarContext = createContext<SidebarContextValue | undefined>(\n undefined\n);\n\nexport function useSidebar() {\n const context = useContext(SidebarContext);\n if (context === undefined) {\n throw new Error(\"useSidebar must be used within a SidebarProvider\");\n }\n return context;\n}\n\nexport interface SidebarProviderProps {\n children: React.ReactNode;\n defaultLeftCollapsed?: boolean;\n defaultRightCollapsed?: boolean;\n}\n\nexport function SidebarProvider({\n children,\n defaultLeftCollapsed,\n defaultRightCollapsed,\n}: SidebarProviderProps) {\n const { isMobile, isTablet } = useScreenSize();\n const isSmallScreen = isMobile || isTablet;\n\n // Internal state for uncontrolled mode\n const [leftCollapsed, setLeftCollapsed] = useState(() => {\n if (defaultLeftCollapsed !== undefined) return defaultLeftCollapsed;\n // Initialize collapsed on small screens\n if (typeof window !== \"undefined\") {\n return window.innerWidth < 1024;\n }\n return false;\n });\n\n const [rightCollapsed, setRightCollapsed] = useState(() => {\n if (defaultRightCollapsed !== undefined) return defaultRightCollapsed;\n // Initialize collapsed on small screens\n if (typeof window !== \"undefined\") {\n return window.innerWidth < 1024;\n }\n return false;\n });\n\n // Auto-collapse sidebars when transitioning to mobile/tablet devices\n useEffect(() => {\n if (isSmallScreen) {\n setLeftCollapsed(true);\n setRightCollapsed(true);\n }\n }, [isSmallScreen]);\n\n const handleLeftToggle = useCallback((collapsed: boolean) => {\n setLeftCollapsed(collapsed);\n }, []);\n\n const handleRightToggle = useCallback((collapsed: boolean) => {\n setRightCollapsed(collapsed);\n }, []);\n\n const contextValue = useMemo(\n () => ({\n leftCollapsed,\n rightCollapsed,\n setLeftCollapsed: handleLeftToggle,\n setRightCollapsed: handleRightToggle,\n leftCollapsible: true,\n rightCollapsible: true,\n }),\n [leftCollapsed, rightCollapsed, handleLeftToggle, handleRightToggle]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\n","import { createContext, useContext, useEffect, useState } from \"react\";\n\ntype Theme = \"light\" | \"dark\" | \"system\";\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n resolvedTheme: \"light\" | \"dark\";\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [theme, setThemeState] = useState<Theme>(\"system\");\n const [resolvedTheme, setResolvedTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n // Initialize theme from localStorage on client side only\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n const stored = localStorage.getItem(\"theme\") as Theme | null;\n if (stored) {\n setThemeState(stored);\n }\n }\n }, []);\n\n // Update resolved theme based on theme preference\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n if (theme === \"system\") {\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const updateResolvedTheme = () => {\n setResolvedTheme(mediaQuery.matches ? \"dark\" : \"light\");\n };\n\n updateResolvedTheme();\n mediaQuery.addEventListener(\"change\", updateResolvedTheme);\n\n return () => mediaQuery.removeEventListener(\"change\", updateResolvedTheme);\n } else {\n setResolvedTheme(theme);\n }\n }\n }, [theme]);\n\n // Apply theme class to document\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n const root = document.documentElement;\n \n if (resolvedTheme === \"dark\") {\n root.classList.add(\"dark\");\n } else {\n root.classList.remove(\"dark\");\n }\n }\n }, [resolvedTheme]);\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n if (typeof window !== \"undefined\") {\n localStorage.setItem(\"theme\", newTheme);\n }\n };\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, resolvedTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n}\n\n","import { useContext, useEffect, useRef } from \"react\";\nimport { MelonyContext, MelonyContextValue } from \"@/providers/melony-provider\";\nimport { Event } from \"melony\";\n\nexport interface UseMelonyOptions {\n initialEvents?: Event[];\n}\n\nexport const useMelony = (options?: UseMelonyOptions): MelonyContextValue => {\n const context = useContext(MelonyContext);\n if (context === undefined) {\n throw new Error(\"useMelony must be used within a MelonyClientProvider\");\n }\n\n const { client, reset } = context;\n const { initialEvents } = options || {};\n const prevInitialEventsRef = useRef<string | undefined>(undefined);\n\n useEffect(() => {\n // Serialize current initialEvents for comparison\n const currentSerialized = initialEvents\n ? JSON.stringify(initialEvents)\n : undefined;\n\n // Reset when initialEvents changes (e.g., when switching threads)\n if (currentSerialized !== prevInitialEventsRef.current) {\n if (initialEvents) {\n reset(initialEvents);\n } else {\n reset([]);\n }\n prevInitialEventsRef.current = currentSerialized;\n }\n }, [client, initialEvents, reset]);\n\n return context;\n};\n","import { useContext } from \"react\";\nimport { ThreadContext, ThreadContextValue } from \"@/providers/thread-provider\";\n\nexport const useThreads = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (context === undefined) {\n throw new Error(\"useThreads must be used within a ThreadProvider\");\n }\n return context;\n};\n\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 resize-none rounded-xl border px-3 py-3 text-base transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n \"h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-colors overflow-hidden group/badge\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary:\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\n destructive:\n \"bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20\",\n outline:\n \"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/30\",\n ghost:\n \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nfunction Badge({\n className,\n variant = \"default\",\n render,\n ...props\n}: useRender.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>) {\n return useRender({\n defaultTagName: \"span\",\n props: mergeProps<\"span\">(\n {\n className: cn(badgeVariants({ className, variant })),\n },\n props\n ),\n render,\n state: {\n slot: \"badge\",\n variant,\n },\n });\n}\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/lib/utils\"\nimport { IconChevronRight, IconCheck } from \"@tabler/icons-react\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100 z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"text-muted-foreground px-3 py-2.5 text-xs data-[inset]:pl-8\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-xl px-3 py-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <IconChevronRight className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-36 rounded-2xl p-1 shadow-2xl ring-1 duration-100 w-auto\", className)}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <IconCheck\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <IconCheck\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border/50 -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest\", className)}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import React from \"react\";\nimport { Button } from \"./ui/button\";\nimport { Textarea } from \"./ui/textarea\";\nimport { Badge } from \"./ui/badge\";\nimport { cn } from \"@/lib/utils\";\nimport {\n IconArrowUp,\n IconAdjustmentsHorizontal,\n IconChevronDown,\n IconLoader2,\n IconPaperclip,\n IconPlus,\n IconX,\n IconFile,\n IconFileText,\n} from \"@tabler/icons-react\";\nimport { ComposerOption, ComposerOptionGroup } from \"../types\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\";\n\ninterface ComposerProps {\n value: string;\n onChange: (value: string) => void;\n onSubmit: (state?: Record<string, any>) => void;\n placeholder?: string;\n isLoading?: boolean;\n className?: string;\n options?: ComposerOptionGroup[];\n autoFocus?: boolean;\n defaultSelectedIds?: string[];\n fileAttachments?: {\n enabled?: boolean;\n accept?: string; // e.g., \"image/*,.pdf\" for file input accept attribute\n maxFiles?: number; // Maximum number of files allowed\n maxFileSize?: number; // Maximum file size in bytes\n };\n}\n\nexport function Composer({\n value,\n onChange,\n onSubmit,\n placeholder = \"Type a message...\",\n isLoading,\n className,\n options = [],\n autoFocus = false,\n defaultSelectedIds = [],\n fileAttachments,\n}: ComposerProps) {\n const enabled = fileAttachments?.enabled || false;\n const accept = fileAttachments?.accept;\n const maxFiles = fileAttachments?.maxFiles ?? 10;\n const maxFileSize = fileAttachments?.maxFileSize ?? 10 * 1024 * 1024;\n const [selectedOptions, setSelectedOptions] = React.useState<Set<string>>(\n () => new Set(defaultSelectedIds)\n );\n const [attachedFiles, setAttachedFiles] = React.useState<File[]>([]);\n const [previews, setPreviews] = React.useState<\n { name: string; type: string; url: string; size: number }[]\n >([]);\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n const newPreviews = attachedFiles.map((file) => ({\n name: file.name,\n type: file.type,\n size: file.size,\n url: file.type.startsWith(\"image/\") ? URL.createObjectURL(file) : \"\",\n }));\n setPreviews(newPreviews);\n\n return () => {\n newPreviews.forEach((p) => {\n if (p.url) URL.revokeObjectURL(p.url);\n });\n };\n }, [attachedFiles]);\n\n const toggleOption = (\n id: string,\n groupOptions?: ComposerOption[],\n type: \"single\" | \"multiple\" = \"multiple\"\n ) => {\n const next = new Set(selectedOptions);\n if (type === \"single\") {\n const isAlreadySelected = next.has(id);\n // Remove all other options from this group\n if (groupOptions) {\n groupOptions.forEach((o) => next.delete(o.id));\n }\n\n if (!isAlreadySelected) {\n next.add(id);\n }\n } else {\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n }\n setSelectedOptions(next);\n };\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n\n // Filter out files that are too large\n const validFiles = files.filter((file) => {\n if (file.size > maxFileSize) {\n // You might want to show a toast/error here\n console.warn(\n `File ${file.name} exceeds maximum size of ${maxFileSize} bytes`\n );\n return false;\n }\n return true;\n });\n\n // Check if adding these files would exceed maxFiles\n const remainingSlots = maxFiles - attachedFiles.length;\n const filesToAdd = validFiles.slice(0, remainingSlots);\n\n if (filesToAdd.length < validFiles.length) {\n console.warn(\n `Only ${filesToAdd.length} files can be added (max: ${maxFiles})`\n );\n }\n\n setAttachedFiles((prev) => [...prev, ...filesToAdd]);\n\n // Reset the input so the same file can be selected again\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const handleRemoveFile = (index: number) => {\n setAttachedFiles((prev) => prev.filter((_, i) => i !== index));\n };\n\n const formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n };\n\n const handleInternalSubmit = async () => {\n const state: Record<string, any> = {};\n\n // Handle grouped options\n options.forEach((group) => {\n const selectedInGroup = group.options.filter((o) =>\n selectedOptions.has(o.id)\n );\n\n if (selectedInGroup.length > 0) {\n if (group.type === \"single\") {\n state[group.id] = selectedInGroup[0].value;\n } else {\n state[group.id] = selectedInGroup.map((o) => ({\n id: o.id,\n value: o.value,\n }));\n }\n }\n });\n\n // Convert files to base64 before including in state\n if (attachedFiles.length > 0) {\n const filePromises = attachedFiles.map((file) => {\n return new Promise<{\n name: string;\n type: string;\n size: number;\n data: string; // base64 string\n }>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const base64 = reader.result as string;\n if (!base64) {\n reject(new Error(\"FileReader returned empty result\"));\n return;\n }\n\n resolve({\n name: file.name,\n type: file.type,\n size: file.size,\n data: base64,\n });\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = (error) => {\n reject(new Error(`Failed to read file ${file.name}: ${error}`));\n };\n reader.onabort = () => {\n reject(new Error(`File read aborted for ${file.name}`));\n };\n reader.readAsDataURL(file);\n });\n });\n\n try {\n const convertedFiles = await Promise.all(filePromises);\n if (convertedFiles.length > 0) {\n state.files = convertedFiles;\n }\n } catch (error) {\n console.error(\"Failed to convert files to base64:\", error);\n // Don't include files if conversion fails\n }\n }\n\n onSubmit(state);\n\n // Clear files after submission\n setAttachedFiles([]);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleInternalSubmit().catch(console.error);\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent) => {\n if (!enabled) return;\n\n const items = Array.from(e.clipboardData.items);\n const files = items\n .map((item) => item.getAsFile())\n .filter((file): file is File => file !== null);\n\n if (files.length > 0) {\n // Create a fake ChangeEvent-like object or just call a shared handler\n const remainingSlots = maxFiles - attachedFiles.length;\n const validFiles = files.filter((f) => f.size <= maxFileSize);\n const filesToAdd = validFiles.slice(0, remainingSlots);\n\n if (filesToAdd.length > 0) {\n setAttachedFiles((prev) => [...prev, ...filesToAdd]);\n }\n }\n };\n\n return (\n <div className={cn(\"relative flex flex-col w-full\", className)}>\n <div className=\"relative flex flex-col w-full border-input border-[1.5px] rounded-3xl bg-background shadow-sm focus-within:border-ring transition-all p-2\">\n {previews.length > 0 && (\n <div className=\"flex flex-wrap gap-3 p-2 px-3 pb-3\">\n {previews.map((preview, index) => (\n <div\n key={index}\n className=\"group relative flex flex-col items-center justify-center w-20 h-20 rounded-xl border bg-muted/30 overflow-hidden shadow-sm\"\n >\n {preview.type.startsWith(\"image/\") ? (\n <img\n src={preview.url}\n alt={preview.name}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center p-2 text-center\">\n {preview.type.includes(\"text\") ||\n preview.type.includes(\"pdf\") ? (\n <IconFileText className=\"h-8 w-8 text-muted-foreground\" />\n ) : (\n <IconFile className=\"h-8 w-8 text-muted-foreground\" />\n )}\n <span className=\"text-[9px] truncate w-full px-1 mt-1 text-muted-foreground\">\n {preview.name}\n </span>\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => handleRemoveFile(index)}\n className=\"absolute top-1 right-1 p-1 rounded-full bg-foreground/10 hover:bg-foreground/20 backdrop-blur-md opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n <Textarea\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n className=\"min-h-[44px] max-h-[200px] border-none bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0 px-3 py-2 text-[15px] resize-none\"\n autoFocus={autoFocus}\n />\n <div className=\"flex justify-between items-center px-1\">\n <div className=\"flex items-center gap-1\">\n {/* File attachment UI - only show if enabled */}\n {enabled && (\n <>\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={accept}\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={isLoading || attachedFiles.length >= maxFiles}\n />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => fileInputRef.current?.click()}\n disabled={isLoading || attachedFiles.length >= maxFiles}\n className=\"text-muted-foreground\"\n title=\"Attach file\"\n >\n <IconPaperclip className=\"h-4 w-4\" />\n {attachedFiles.length > 0 && (\n <Badge className=\"ml-1 h-[18px] min-w-[18px] px-1.5 text-[10px]\">\n {attachedFiles.length}\n </Badge>\n )}\n </Button>\n </>\n )}\n\n {/* Grouped options dropdowns */}\n {options.map((group) => {\n const selectedInGroup = group.options.filter((o) =>\n selectedOptions.has(o.id)\n );\n const label =\n selectedInGroup.length === 0\n ? group.label\n : selectedInGroup.length === 1\n ? selectedInGroup[0].label\n : group.label;\n\n const isSingle = group.type === \"single\";\n\n return (\n <DropdownMenu key={group.id}>\n <DropdownMenuTrigger\n render={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"gap-2\",\n selectedInGroup.length > 0\n ? \"text-foreground bg-muted/50\"\n : \"text-muted-foreground\"\n )}\n >\n {label}\n {selectedInGroup.length > 1 && (\n <Badge className=\"h-[18px] min-w-[18px] px-1.5 text-[10px]\">\n {selectedInGroup.length}\n </Badge>\n )}\n <IconChevronDown className=\"h-3 w-3 opacity-50\" />\n </Button>\n }\n />\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuGroup>\n <DropdownMenuLabel>{group.label}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {group.options.map((option) => (\n <DropdownMenuCheckboxItem\n key={option.id}\n checked={selectedOptions.has(option.id)}\n onCheckedChange={() =>\n toggleOption(\n option.id,\n group.options,\n isSingle ? \"single\" : \"multiple\"\n )\n }\n onSelect={(e) => e.preventDefault()}\n >\n {option.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n })}\n </div>\n <Button\n type=\"submit\"\n disabled={\n (!value.trim() && attachedFiles.length === 0 && !isLoading) ||\n isLoading\n }\n size=\"icon-lg\"\n onClick={() => handleInternalSubmit().catch(console.error)}\n >\n {isLoading ? (\n <IconLoader2 className=\"h-5 w-5 animate-spin\" />\n ) : (\n <IconArrowUp className=\"h-5 w-5\" />\n )}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-2xl py-6 text-sm ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-2 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-base font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import React from \"react\";\nimport {\n Card as CardBase,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n} from \"../ui/card\";\nimport { CardProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n subtitle,\n className,\n style,\n}) => {\n return (\n <CardBase\n className={cn(\"min-w-96\", className)}\n style={style}\n >\n {(title || subtitle) && (\n <CardHeader className=\"pb-3\">\n {title && <CardTitle className=\"text-lg\">{title}</CardTitle>}\n {subtitle && <CardDescription>{subtitle}</CardDescription>}\n </CardHeader>\n )}\n <CardContent className=\"flex flex-col gap-4\">\n {children as React.ReactNode}\n </CardContent>\n </CardBase>\n );\n};\n","import React from \"react\";\nimport { RowProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Row: React.FC<RowProps> = ({\n children,\n gap = \"md\",\n align = \"start\",\n justify = \"start\",\n wrap = false,\n className,\n style,\n}) => {\n const gapClasses: Record<string, string> = {\n xs: \"gap-0\",\n sm: \"gap-1\",\n md: \"gap-2\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n };\n\n const alignClasses: Record<string, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses: Record<string, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n };\n\n return (\n <div\n className={cn(\n \"flex flex-row w-full\",\n gapClasses[gap as keyof typeof gapClasses] || \"gap-4\",\n alignClasses[align as keyof typeof alignClasses] || \"items-start\",\n justifyClasses[justify as keyof typeof justifyClasses] || \"justify-start\",\n wrap ? \"flex-wrap\" : \"flex-nowrap\",\n className\n )}\n style={style}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { ColProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Col: React.FC<ColProps> = ({\n children,\n gap = \"sm\",\n align = \"start\",\n justify = \"start\",\n width,\n height,\n padding,\n overflow,\n position = \"static\",\n className,\n style,\n}) => {\n const gapClasses: Record<string, string> = {\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n xl: \"gap-8\",\n };\n\n const alignClasses: Record<string, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses: Record<string, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n };\n\n // Automatically add scrollable className for auto/scroll overflow\n const overflowClasses = {\n auto: \"overflow-auto\",\n hidden: \"overflow-hidden\",\n scroll: \"overflow-scroll\",\n visible: \"overflow-visible\",\n };\n\n const positionClasses = {\n static: \"static\",\n relative: \"relative\",\n absolute: \"absolute\",\n fixed: \"fixed\",\n sticky: \"sticky\",\n };\n\n return (\n <div\n className={cn(\n \"flex flex-col\",\n gapClasses[gap as keyof typeof gapClasses] || \"gap-2\",\n alignClasses[align as keyof typeof alignClasses] || \"items-start\",\n justifyClasses[justify as keyof typeof justifyClasses] ||\n \"justify-start\",\n overflow && overflowClasses[overflow as keyof typeof overflowClasses],\n position && positionClasses[position as keyof typeof positionClasses],\n className\n )}\n style={{\n width: width,\n height: height,\n padding: padding,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { BoxProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n padding = \"md\",\n margin,\n background,\n border = false,\n borderRadius,\n width,\n height,\n overflow = \"visible\",\n className,\n style,\n}) => {\n const paddingClasses: Record<string, string> = {\n xs: \"p-1\",\n sm: \"p-2\",\n md: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\",\n };\n\n const overflowClasses = {\n auto: \"overflow-auto\",\n hidden: \"overflow-hidden\",\n scroll: \"overflow-scroll\",\n visible: \"overflow-visible\",\n };\n\n return (\n <div\n className={cn(\n paddingClasses[padding as keyof typeof paddingClasses] || \"p-4\",\n border && \"border rounded-md\",\n overflowClasses[overflow as keyof typeof overflowClasses],\n className\n )}\n style={{\n margin: margin,\n background: background ?? undefined,\n borderRadius: borderRadius,\n width: width,\n height: height,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { SpacerProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Spacer: React.FC<SpacerProps> = ({\n size = \"md\",\n direction = \"vertical\",\n className,\n style,\n}) => {\n const sizeClasses: Record<string, string> = {\n xs: \"p-0.5\",\n sm: \"p-1\",\n md: \"p-2\",\n lg: \"p-4\",\n xl: \"p-8\",\n };\n\n return (\n <div\n className={cn(\n direction === \"vertical\" ? \"w-full\" : \"h-full\",\n sizeClasses[size as keyof typeof sizeClasses] || \"p-2\",\n className\n )}\n style={style}\n />\n );\n};\n","import { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: SeparatorPrimitive.Props) {\n return (\n <SeparatorPrimitive\n data-slot=\"separator\"\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import React from \"react\";\nimport { Separator } from \"../ui/separator\";\nimport { DividerProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = \"horizontal\",\n className,\n style,\n}) => {\n return (\n <Separator\n orientation={orientation as \"horizontal\" | \"vertical\"}\n className={cn(\"my-4\", className)}\n style={style}\n />\n );\n};\n","import React from \"react\";\nimport { ListProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const List: React.FC<ListProps> = ({ children, width, className, style }) => {\n return (\n <div\n className={cn(\"flex flex-col list-none p-0 m-0\", className)}\n style={{\n width: width,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { ListItemProps } from \"./component-types\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\n\nexport const ListItem: React.FC<ListItemProps> = ({\n children,\n orientation = \"horizontal\",\n gap = \"md\",\n align,\n justify = \"start\",\n onClickAction,\n width,\n padding = \"md\",\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const paddingClasses: Record<string, string> = {\n xs: \"px-1.5 py-1\",\n sm: \"px-2 py-1.5\",\n md: \"px-3 py-2\",\n lg: \"px-4 py-3\",\n xl: \"px-6 py-4\",\n };\n\n const isInteractive = !!onClickAction;\n \n const gapClasses: Record<string, string> = {\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n };\n\n const resolvedAlign = align ?? (orientation === \"vertical\" ? \"start\" : \"center\");\n\n const alignClasses: Record<string, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses: Record<string, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n };\n\n const handleClick = () => {\n if (onClickAction) {\n sendEvent(onClickAction as any);\n }\n };\n\n return (\n <div\n onClick={isInteractive ? handleClick : undefined}\n className={cn(\n \"flex rounded-md transition-colors\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n gapClasses[gap as keyof typeof gapClasses] || \"gap-3\",\n alignClasses[resolvedAlign as keyof typeof alignClasses],\n justifyClasses[justify as keyof typeof justifyClasses],\n paddingClasses[padding as keyof typeof paddingClasses] || \"px-3 py-2\",\n isInteractive ? \"cursor-pointer hover:bg-muted\" : \"cursor-default\",\n className\n )}\n style={{\n width: width,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return (\n <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n )\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return (\n <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n )\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-200 supports-backdrop-filter:backdrop-blur-sm fixed inset-0 isolate z-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n ...props\n}: DialogPrimitive.Popup.Props) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 sm:rounded-lg outline-none\",\n className\n )}\n {...props}\n />\n </DialogPortal>\n )\n}\n\nfunction DialogClose({\n className,\n ...props\n}: DialogPrimitive.Close.Props) {\n return (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className={cn(\n \"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n DialogOverlay,\n DialogPortal,\n}\n\n","import React, { useState } from \"react\";\nimport { ImageProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogTrigger,\n DialogClose,\n} from \"@/components/ui/dialog\";\n\nexport const Image: React.FC<ImageProps> = ({\n src,\n alt,\n size = \"sm\",\n className,\n style,\n}) => {\n const [hasError, setHasError] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [open, setOpen] = useState(false);\n\n const sizes = {\n sm: \"h-11\",\n md: \"h-22\",\n lg: \"h-44\",\n };\n\n const handleError = () => {\n setHasError(true);\n setIsLoading(false);\n };\n\n const handleLoad = () => {\n setIsLoading(false);\n };\n\n if (hasError) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center rounded-md border bg-muted text-muted-foreground\",\n sizes[size as keyof typeof sizes] || \"h-11 w-11\",\n className\n )}\n style={style}\n >\n <span className=\"text-[10px]\">Error</span>\n </div>\n );\n }\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger>\n <div\n className={cn(\"relative overflow-hidden rounded-md border cursor-pointer\", className)}\n style={style}\n >\n <img\n src={src}\n alt={alt}\n onError={handleError}\n onLoad={handleLoad}\n className={cn(\n \"block h-auto w-full transition-opacity duration-200 hover:opacity-90\",\n isLoading ? \"opacity-0\" : \"opacity-100\",\n sizes[size as keyof typeof sizes]\n )}\n />\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-muted animate-pulse\" />\n )}\n </div>\n </DialogTrigger>\n <DialogContent\n className=\"max-w-[90vw] max-h-[90vh] p-0 bg-transparent border-none shadow-none\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"relative flex items-center justify-center\">\n <DialogClose className=\"absolute -top-10 right-0 text-white hover:text-gray-300 transition-colors z-10 bg-black/50 rounded-full p-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </DialogClose>\n <img\n src={src}\n alt={alt || \"Enlarged image\"}\n className=\"max-w-full max-h-[90vh] object-contain rounded-lg\"\n />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import React from \"react\";\nimport * as ICONS from \"@tabler/icons-react\";\nimport { IconProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Icon: React.FC<IconProps> = ({\n name,\n size,\n color,\n className,\n style,\n}) => {\n const IconComponent = ICONS[name as keyof typeof ICONS];\n\n if (!IconComponent) return null;\n\n const sizeMap = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 28,\n xxl: 32,\n };\n\n const resolvedSize =\n typeof size === \"string\" && size in sizeMap\n ? sizeMap[size as keyof typeof sizeMap]\n : typeof size === \"number\"\n ? size\n : 20;\n\n return (\n <div\n className={cn(\"inline-flex items-center justify-center\", className)}\n style={style}\n >\n <IconComponent\n size={resolvedSize}\n color={color || \"currentColor\"}\n strokeWidth={1.5}\n />\n </div>\n );\n};\n","import React from \"react\";\nimport { Badge as BadgeBase } from \"../ui/badge\";\nimport { BadgeProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Badge: React.FC<BadgeProps> = ({\n label,\n variant = \"primary\",\n className,\n style,\n}) => {\n const variantMap: Record<string, \"default\" | \"secondary\" | \"destructive\" | \"outline\"> = {\n primary: \"default\",\n secondary: \"secondary\",\n danger: \"destructive\",\n success: \"default\", // Mapping success to default/primary\n warning: \"secondary\", // Mapping warning to secondary\n };\n\n return (\n <BadgeBase\n variant={variantMap[variant as keyof typeof variantMap] || \"default\"}\n className={className}\n style={style}\n >\n {label}\n </BadgeBase>\n );\n};\n","import React, { useState } from \"react\";\nimport { ChartProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Chart: React.FC<ChartProps> = ({\n data,\n chartType = \"bar\",\n size = \"md\",\n showValues = false,\n showGrid = false,\n showTooltips = true,\n className,\n style,\n}) => {\n const [tooltip, setTooltip] = useState<{\n visible: boolean;\n x: number;\n y: number;\n label: string;\n value: number;\n } | null>(null);\n\n // Ensure data is an array\n if (!Array.isArray(data)) {\n return (\n <div className=\"p-4 text-destructive border border-destructive/20 rounded-md bg-destructive/5\">\n Error: Chart data must be an array\n </div>\n );\n }\n\n // Calculate max value for scaling\n const maxValue = Math.max(...data.map((d) => d.value), 1);\n const padding = { top: 40, right: 20, bottom: 40, left: 20 };\n \n const chartWidth =\n size === \"sm\" ? 300 : size === \"md\" ? 450 : size === \"lg\" ? 600 : 800;\n const chartHeight =\n size === \"sm\" ? 150 : size === \"md\" ? 250 : size === \"lg\" ? 350 : 450;\n\n const defaultColors = [\n \"hsl(var(--primary))\",\n \"hsl(var(--chart-1, 217 91% 60%))\",\n \"hsl(var(--chart-2, 142 71% 45%))\",\n \"hsl(var(--chart-3, 31 92% 55%))\",\n \"hsl(var(--chart-4, 346 84% 61%))\",\n \"hsl(var(--chart-5, 271 81% 56%))\",\n ];\n\n const getColor = (index: number, color?: string) => {\n if (color) return color;\n return defaultColors[index % defaultColors.length];\n };\n\n const renderGrid = () => {\n if (!showGrid) return null;\n return [0, 0.25, 0.5, 0.75, 1].map((fraction, i) => (\n <line\n key={i}\n x1={padding.left}\n y1={padding.top + chartHeight * (1 - fraction)}\n x2={chartWidth - padding.right}\n y2={padding.top + chartHeight * (1 - fraction)}\n stroke=\"currentColor\"\n className=\"text-border\"\n strokeDasharray=\"4,4\"\n strokeOpacity={0.5}\n />\n ));\n };\n\n const renderTooltip = () => {\n if (!tooltip || !tooltip.visible) return null;\n\n return (\n <g className=\"pointer-events-none\">\n <rect\n x={tooltip.x - 40}\n y={tooltip.y - 45}\n width={80}\n height={40}\n fill=\"hsl(var(--popover))\"\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n rx={6}\n className=\"shadow-md\"\n />\n <text\n x={tooltip.x}\n y={tooltip.y - 28}\n textAnchor=\"middle\"\n className=\"fill-popover-foreground text-[10px] font-semibold\"\n >\n {tooltip.value}\n </text>\n <text\n x={tooltip.x}\n y={tooltip.y - 14}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[9px]\"\n >\n {tooltip.label}\n </text>\n </g>\n );\n };\n\n const renderBarChart = () => {\n const totalBarSpace = chartWidth - padding.left - padding.right;\n const barSpacing = data.length > 1 ? (totalBarSpace * 0.1) / data.length : 0;\n const actualBarWidth = (totalBarSpace - barSpacing * (data.length + 1)) / data.length;\n\n return (\n <svg width={chartWidth} height={chartHeight + padding.bottom} className=\"overflow-visible\">\n {renderGrid()}\n {data.map((item, index) => {\n const barHeight = (item.value / maxValue) * chartHeight;\n const x = padding.left + barSpacing + index * (actualBarWidth + barSpacing);\n const y = padding.top + chartHeight - barHeight;\n\n return (\n <g key={index}>\n <rect\n x={x}\n y={y}\n width={actualBarWidth}\n height={barHeight}\n fill={getColor(index, item.color)}\n rx={4}\n onMouseEnter={() => showTooltips && setTooltip({ visible: true, x: x + actualBarWidth / 2, y: y - 5, label: item.label, value: item.value })}\n onMouseLeave={() => setTooltip({ visible: false, x: 0, y: 0, label: \"\", value: 0 })}\n className=\"transition-all hover:opacity-80 cursor-pointer\"\n />\n <text\n x={x + actualBarWidth / 2}\n y={padding.top + chartHeight + 20}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[10px]\"\n >\n {item.label}\n </text>\n </g>\n );\n })}\n {showTooltips && renderTooltip()}\n </svg>\n );\n };\n\n const renderLineChart = () => {\n const points = data.map((item, index) => ({\n x: padding.left + (index / Math.max(data.length - 1, 1)) * (chartWidth - padding.left - padding.right),\n y: padding.top + chartHeight - (item.value / maxValue) * chartHeight,\n ...item\n }));\n\n const pathData = points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x} ${p.y}`).join(\" \");\n\n return (\n <svg width={chartWidth} height={chartHeight + padding.bottom} className=\"overflow-visible\">\n {renderGrid()}\n <path d={pathData} fill=\"none\" stroke={getColor(0)} strokeWidth={3} className=\"transition-all\" />\n {points.map((point, index) => (\n <g key={index}>\n <circle\n cx={point.x}\n cy={point.y}\n r={5}\n fill={getColor(index, point.color)}\n stroke=\"hsl(var(--background))\"\n strokeWidth={2}\n onMouseEnter={() => showTooltips && setTooltip({ visible: true, x: point.x, y: point.y - 5, label: point.label, value: point.value })}\n onMouseLeave={() => setTooltip({ visible: false, x: 0, y: 0, label: \"\", value: 0 })}\n className=\"hover:r-6 transition-all cursor-pointer\"\n />\n <text\n x={point.x}\n y={padding.top + chartHeight + 20}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[10px]\"\n >\n {point.label}\n </text>\n </g>\n ))}\n {showTooltips && renderTooltip()}\n </svg>\n );\n };\n\n const renderChart = () => {\n switch (chartType) {\n case \"line\":\n return renderLineChart();\n case \"bar\":\n default:\n return renderBarChart();\n }\n };\n\n return (\n <div className={cn(\"py-4 overflow-x-auto\", className)} style={style}>\n {renderChart()}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { TextProps } from \"./component-types\";\n\nexport const Text: React.FC<TextProps> = ({\n value,\n size = \"md\",\n weight = \"normal\",\n align = \"start\",\n className,\n style,\n}) => {\n const sizeClasses: Record<string, string> = {\n xs: \"text-xs\",\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\",\n xl: \"text-xl\",\n };\n\n const weightClasses: Record<string, string> = {\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n };\n\n const alignClasses: Record<string, string> = {\n start: \"text-left\",\n center: \"text-center\",\n end: \"text-right\",\n stretch: \"text-justify\",\n };\n\n return (\n <span\n className={cn(\n sizeClasses[size as keyof typeof sizeClasses] || \"text-base\",\n weightClasses[weight as keyof typeof weightClasses] || \"font-normal\",\n alignClasses[align as keyof typeof alignClasses] || \"text-left\",\n className\n )}\n style={style}\n >\n {value}\n </span>\n );\n};\n","import React from \"react\";\nimport { HeadingProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Heading: React.FC<HeadingProps> = ({\n value,\n level = 2,\n className,\n style,\n}) => {\n const Tag = `h${level}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n\n const levelClasses: Record<string, string> = {\n h1: \"text-3xl font-bold tracking-tight\",\n h2: \"text-2xl font-semibold tracking-tight\",\n h3: \"text-xl font-semibold tracking-tight\",\n h4: \"text-lg font-semibold tracking-tight\",\n h5: \"text-base font-semibold\",\n h6: \"text-sm font-semibold\",\n };\n\n return (\n <Tag\n className={cn(\n levelClasses[Tag] || levelClasses.h2,\n \"text-foreground\",\n className\n )}\n style={style}\n >\n {value}\n </Tag>\n );\n};\n","import * as React from \"react\"\nimport { Input as InputPrimitive } from \"@base-ui/react/input\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n \"bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-4xl border px-3 py-1 text-base transition-colors file:h-7 file:text-sm file:font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({ className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n \"gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\nimport { Separator } from \"@/components/ui/separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\"gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3 flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\"mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base\", className)}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4 group/field-group @container/field-group flex w-full flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\"data-[invalid=true]:text-destructive gap-3 group/field flex w-full\", {\n variants: {\n orientation: {\n vertical:\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n horizontal:\n \"flex-row items-center [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n responsive:\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n})\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"gap-1 group/field-content flex flex-1 flex-col leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"has-data-checked:bg-primary/5 has-data-checked:border-primary/50 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-xl has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4 group/field-label peer/field-label flex w-fit leading-snug\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50 flex w-fit items-center leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\"-my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2 relative\", className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"text-muted-foreground px-2 bg-background relative mx-auto block w-fit\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { Input as InputBase } from \"../ui/input\";\nimport { Field, FieldTitle } from \"../ui/field\";\nimport { InputProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Input: React.FC<InputProps> = ({\n inputType = \"text\",\n placeholder,\n defaultValue,\n value,\n label,\n name,\n disabled,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n value: e.target.value,\n },\n } as any);\n }\n };\n\n return (\n <Field className={cn(\"w-full\", className)} style={style}>\n {label && <FieldTitle>{label}</FieldTitle>}\n <InputBase\n type={inputType}\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n onChange={handleChange}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { Textarea as TextareaBase } from \"../ui/textarea\";\nimport { Field, FieldTitle } from \"../ui/field\";\nimport { TextareaProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Textarea: React.FC<TextareaProps> = ({\n placeholder,\n defaultValue,\n value,\n label,\n name,\n disabled,\n rows,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n value: e.target.value,\n },\n } as any);\n }\n };\n\n return (\n <Field className={cn(\"w-full\", className)} style={style}>\n {label && <FieldTitle>{label}</FieldTitle>}\n <TextareaBase\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n rows={rows}\n onChange={handleChange}\n />\n </Field>\n );\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\n\nimport { cn } from \"@/lib/utils\"\nimport { IconSelector, IconCheck, IconChevronUp, IconChevronDown } from \"@tabler/icons-react\"\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1 p-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn(\"flex flex-1 text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-4xl border px-3 py-2 text-sm transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={\n <IconSelector className=\"text-muted-foreground size-4 pointer-events-none\" />\n }\n />\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-36 rounded-2xl shadow-2xl ring-1 duration-100 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto\", className )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-3 py-2.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className=\"flex flex-1 gap-2 shrink-0 whitespace-nowrap\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={<span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\" />}\n >\n <IconCheck className=\"pointer-events-none\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border/50 -mx-1 my-1 h-px pointer-events-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full\", className)}\n {...props}\n >\n <IconChevronUp\n />\n </SelectPrimitive.ScrollUpArrow>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full\", className)}\n {...props}\n >\n <IconChevronDown\n />\n </SelectPrimitive.ScrollDownArrow>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport {\n Select as SelectRoot,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { Field, FieldTitle } from \"../ui/field\";\nimport { SelectProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Select: React.FC<SelectProps> = ({\n options,\n defaultValue,\n value,\n label,\n name,\n disabled,\n placeholder,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleValueChange = (val: string) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n value: val,\n },\n } as any);\n }\n };\n\n return (\n <Field className={cn(\"w-full\", className)} style={style}>\n {label && <FieldTitle>{label}</FieldTitle>}\n <SelectRoot\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n onValueChange={(value) => handleValueChange(value || \"\")}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n </Field>\n );\n};\n","import React from \"react\";\nimport { Label as LabelBase } from \"../ui/label\";\nimport { LabelProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Label: React.FC<LabelProps> = ({\n value,\n htmlFor,\n required,\n className,\n style,\n}) => {\n return (\n <LabelBase\n htmlFor={htmlFor}\n className={cn(\"flex items-center gap-1\", className)}\n style={style}\n >\n {value}\n {required && <span className=\"text-destructive\">*</span>}\n </LabelBase>\n );\n};\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { CheckboxProps } from \"./component-types\";\nimport { Label } from \"./Label\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n name,\n checked,\n defaultChecked,\n disabled,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n checked: e.target.checked,\n },\n } as any);\n }\n };\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)} style={style}>\n <input\n type=\"checkbox\"\n name={name}\n id={name}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n onChange={handleChange}\n className=\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary disabled:cursor-not-allowed disabled:opacity-50\"\n />\n {label && (\n <Label\n htmlFor={name}\n value={label}\n className={cn(\n \"cursor-pointer select-none text-sm font-medium leading-none\",\n disabled && \"cursor-not-allowed opacity-50\"\n )}\n />\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { RadioGroupProps } from \"./component-types\";\nimport { Label } from \"./Label\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n name,\n options,\n defaultValue,\n value,\n label,\n disabled,\n orientation = \"vertical\",\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name,\n value: e.target.value,\n },\n } as any);\n }\n };\n\n return (\n <div className={cn(\"flex flex-col gap-3\", className)} style={style}>\n {label && <Label value={label} className=\"text-sm font-semibold\" />}\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"flex-row gap-4\" : \"flex-col gap-2\"\n )}\n >\n {options.map((option, index) => {\n const radioId = `${name}-${index}`;\n const isDisabled = disabled || option.disabled;\n\n return (\n <div\n key={index}\n className=\"flex items-center gap-2\"\n >\n <input\n type=\"radio\"\n name={name}\n id={radioId}\n value={option.value}\n defaultChecked={\n defaultValue === option.value ? true : undefined\n }\n checked={value === option.value}\n disabled={isDisabled}\n onChange={handleChange}\n className=\"h-4 w-4 border-gray-300 text-primary focus:ring-primary disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <Label\n htmlFor={radioId}\n value={option.label}\n className={cn(\n \"cursor-pointer select-none text-sm font-medium leading-none\",\n isDisabled && \"cursor-not-allowed opacity-50\"\n )}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { Button as ButtonBase } from \"../ui/button\";\nimport { ButtonProps } from \"./component-types\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Button: React.FC<ButtonProps> = ({\n label,\n variant = \"primary\",\n size = \"default\",\n disabled = false,\n fullWidth = false,\n onClickAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const variantMap: Record<string, \"default\" | \"secondary\" | \"destructive\" | \"outline\" | \"ghost\" | \"link\"> = {\n primary: \"default\",\n secondary: \"secondary\",\n danger: \"destructive\",\n outline: \"outline\",\n ghost: \"ghost\",\n link: \"link\",\n success: \"default\", // Success doesn't have a direct shadcn mapping in base variant, default is usually primary\n };\n\n return (\n <ButtonBase\n variant={variantMap[variant as keyof typeof variantMap] || \"default\"}\n size={size === \"md\" ? \"default\" : (size as any)}\n disabled={disabled}\n className={cn(fullWidth ? \"w-full\" : undefined, className)}\n style={style}\n onClick={() => {\n if (onClickAction) {\n sendEvent(onClickAction as any);\n }\n }}\n >\n {label}\n </ButtonBase>\n );\n};\n","import React, { useState } from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { FormProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Form: React.FC<FormProps> = ({ children, onSubmitAction, className, style }) => {\n const { sendEvent } = useMelony();\n const [isSubmitted, setIsSubmitted] = useState(false);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n \n // Prevent double submission\n if (isSubmitted) return;\n \n const formData = new FormData(e.currentTarget);\n const data: Record<string, any> = {};\n formData.forEach((value, key) => {\n data[key] = value;\n });\n\n if (onSubmitAction) {\n setIsSubmitted(true);\n sendEvent({\n ...onSubmitAction,\n data: {\n ...(onSubmitAction.data || {}),\n ...data,\n },\n } as any);\n }\n };\n\n return (\n <form \n onSubmit={handleSubmit} \n className={cn(\"w-full\", className)}\n style={style}\n >\n <fieldset \n disabled={isSubmitted} \n className=\"m-0 border-0 p-0\"\n >\n <div\n className={cn(\n \"flex flex-col gap-4 transition-opacity\",\n isSubmitted && \"opacity-60 pointer-events-none\"\n )}\n >\n {children as React.ReactNode}\n </div>\n </fieldset>\n </form>\n );\n};\n","import React from \"react\";\nimport { StarterPrompt } from \"@/types\";\nimport { Button } from \"./elements\";\n\ninterface StarterPromptsProps {\n prompts: StarterPrompt[];\n onPromptClick: (prompt: string) => void;\n}\n\nexport function StarterPrompts({\n prompts,\n onPromptClick,\n}: StarterPromptsProps) {\n if (!prompts || prompts.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col space-y-4 animate-in fade-in slide-in-from-bottom-4 duration-500 mt-auto max-w-2xl\">\n <div className=\"space-y-2\">\n <h2 className=\"text-2xl font-semibold tracking-tight\">\n What can I help with today?\n </h2>\n </div>\n <div className=\"flex flex-col gap-2 w-full\">\n {prompts.map((item, index) => (\n <Button\n key={index}\n label={item.label}\n variant=\"ghost\"\n size=\"lg\"\n onClickAction={{\n type: \"text\",\n role: \"user\",\n data: { content: item.prompt },\n }}\n className=\"w-full justify-start\"\n />\n ))}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { UINode } from \"melony\";\nimport * as Elements from \"./elements\";\n\nexport interface UIRendererProps {\n node: UINode;\n}\n\n/**\n * Maps UINode types to refined React elements aligned with shadcn.\n * UI is built via elements always starting with a card element as a root.\n * Children are always rendered elements, never raw strings.\n */\nexport function UIRenderer({ node }: UIRendererProps) {\n const { type, props, children } = node;\n\n // Map node type to element component\n const typeMap: Record<string, React.FC<any>> = {\n card: Elements.Card,\n button: Elements.Button,\n row: Elements.Row,\n col: Elements.Col,\n text: Elements.Text,\n heading: Elements.Heading,\n badge: Elements.Badge,\n input: Elements.Input,\n textarea: Elements.Textarea,\n select: Elements.Select,\n checkbox: Elements.Checkbox,\n radioGroup: Elements.RadioGroup,\n spacer: Elements.Spacer,\n divider: Elements.Divider,\n box: Elements.Box,\n image: Elements.Image,\n icon: Elements.Icon,\n list: Elements.List,\n listItem: Elements.ListItem,\n form: Elements.Form,\n chart: Elements.Chart,\n label: Elements.Label,\n };\n\n const Component = typeMap[type];\n\n if (!Component) {\n return (\n <div className=\"text-destructive italic text-sm p-2 border border-dashed rounded border-destructive/50 bg-destructive/5\">\n [Unknown component: {type}]\n </div>\n );\n }\n\n // Recursively render children\n // These will be passed as React.ReactNode to the components\n const renderedChildren = children?.map((child, i) => (\n <UIRenderer key={i} node={child} />\n ));\n\n const componentProps = { ...props };\n\n return <Component {...componentProps}>{renderedChildren}</Component>;\n}\n","import React from \"react\";\nimport { Event } from \"melony\";\nimport { UIRenderer } from \"@/components/ui-renderer\";\n\ninterface MessageContentProps {\n events: Event[];\n}\n\nexport function MessageContent({ events }: MessageContentProps) {\n return (\n <>\n {events.map((event, index) => {\n if (event.type === \"text-delta\") {\n return <span key={index}>{event.data?.delta}</span>;\n }\n if (event.type === \"text\") {\n return (\n <p key={index}>\n {event.data?.content || event.data?.text}\n </p>\n );\n }\n if (event.ui) {\n return <UIRenderer key={index} node={event.ui} />;\n }\n return null;\n })}\n </>\n );\n}\n\n","import React from \"react\";\nimport { Message } from \"@/types\";\nimport { cn } from \"@/lib/utils\";\nimport { MessageContent } from \"./message-content\";\n\ninterface MessageProps {\n message: Message;\n}\n\nexport function MessageBubble({ message }: MessageProps) {\n const isUser = message.role === \"user\";\n\n return (\n <div\n className={cn(\n \"flex flex-col\",\n isUser ? \"items-end\" : \"items-start\"\n )}\n >\n <div\n className={cn(\n \"flex flex-col items-start max-w-[85%] rounded-2xl px-4 py-2 space-y-4 whitespace-pre-wrap\",\n isUser\n ? \"bg-primary text-primary-foreground\"\n : \"px-0 py-0 text-foreground\"\n )}\n >\n <MessageContent events={message.content} />\n </div>\n </div>\n );\n}\n\n","import { useState } from \"react\";\nimport {\n IconChevronUp,\n IconChevronDown,\n IconLoader2,\n} from \"@tabler/icons-react\";\n\ninterface LoadingIndicatorProps {\n status?: {\n message: string;\n details?: string;\n };\n}\n\nexport function LoadingIndicator({ status }: LoadingIndicatorProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const message = status?.message || \"Processing...\";\n const details = status?.details;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2 text-muted-foreground group\">\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n <div className=\"animate-pulse\">{message}</div>\n {details && (\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"p-0.5 hover:bg-muted rounded-sm transition-colors flex items-center justify-center\"\n title={isExpanded ? \"Hide details\" : \"Show details\"}\n >\n {isExpanded ? (\n <IconChevronUp className=\"size-3.5 opacity-50 group-hover:opacity-100\" />\n ) : (\n <IconChevronDown className=\"size-3.5 opacity-50 group-hover:opacity-100\" />\n )}\n </button>\n )}\n </div>\n {isExpanded && details && (\n <div className=\"text-[10px] leading-relaxed font-mono bg-muted/30 p-2.5 rounded border border-border/50 max-h-64 overflow-y-auto whitespace-pre-wrap text-muted-foreground shadow-sm\">\n {details}\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\n\ninterface ErrorDisplayProps {\n error: Error;\n}\n\nexport function ErrorDisplay({ error }: ErrorDisplayProps) {\n return (\n <div className=\"text-destructive p-2 border border-destructive rounded-md bg-destructive/10\">\n {error.message}\n </div>\n );\n}\n\n","import { useMemo } from \"react\";\nimport { Message } from \"@/types\";\nimport { MessageBubble } from \"./message\";\nimport { LoadingIndicator } from \"./loading-indicator\";\nimport { ErrorDisplay } from \"./error-display\";\n\ninterface MessageListProps {\n messages: Message[];\n isLoading?: boolean;\n error?: Error | null;\n loadingStatus?: {\n message: string;\n details?: string;\n };\n}\n\nexport function MessageList({\n messages,\n isLoading,\n error,\n loadingStatus,\n}: MessageListProps) {\n if (messages.length === 0) {\n return null;\n }\n\n // Check if the last message has text-delta events (text is streaming)\n const isTextStreaming = useMemo(() => {\n if (messages.length === 0 || !isLoading) return false;\n const lastMessage = messages[messages.length - 1];\n return lastMessage.content.some((event) => event.type === \"text-delta\");\n }, [messages, isLoading]);\n\n console.log(\"MESSAGES\", messages);\n\n return (\n <div className=\"space-y-6\">\n {messages.map((message, index) => (\n <MessageBubble key={index} message={message} />\n ))}\n {isLoading && !isTextStreaming && (\n <LoadingIndicator status={loadingStatus} />\n )}\n {error && <ErrorDisplay error={error} />}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useMemo } from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\nimport { StarterPrompt, ComposerOptionGroup } from \"@/types\";\nimport { Composer } from \"./composer\";\nimport { StarterPrompts } from \"./starter-prompts\";\nimport { MessageList } from \"./message-list\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { LoadingIndicator } from \"./loading-indicator\";\n\ninterface ThreadProps {\n className?: string;\n placeholder?: string;\n starterPrompts?: StarterPrompt[];\n onStarterPromptClick?: (prompt: string) => void;\n options?: ComposerOptionGroup[];\n autoFocus?: boolean;\n defaultSelectedIds?: string[];\n}\n\nexport function Thread({\n className,\n placeholder = \"Type a message...\",\n starterPrompts: localStarterPrompts,\n onStarterPromptClick,\n options: localOptions,\n autoFocus = false,\n defaultSelectedIds,\n}: ThreadProps) {\n const { activeThreadId, threadEvents, isLoadingEvents } = useThreads();\n\n const { messages, isLoading, error, sendEvent, loadingStatus, config } =\n useMelony({\n initialEvents: threadEvents,\n });\n\n const starterPrompts = localStarterPrompts ?? config?.starterPrompts;\n const options = localOptions ?? config?.options;\n\n const fileAttachments = config?.fileAttachments;\n\n // Extract defaultSelectedIds from all option groups and combine with explicitly passed ones\n const allDefaultSelectedIds = useMemo(() => {\n const defaultSelectedIdsFromOptions =\n options?.flatMap((group) => group.defaultSelectedIds ?? []) ?? [];\n\n return [\n ...new Set([\n ...defaultSelectedIdsFromOptions,\n ...(defaultSelectedIds ?? []),\n ]),\n ];\n }, [options, defaultSelectedIds]);\n\n const [input, setInput] = useState(\"\");\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }, [messages]);\n\n const handleSubmit = async (\n state?: Record<string, any>,\n overrideInput?: string\n ) => {\n const text = (overrideInput ?? input).trim();\n const hasFiles =\n state?.files && Array.isArray(state.files) && state.files.length > 0;\n\n // Allow submission if there's text OR files\n if ((!text && !hasFiles) || isLoading) return;\n\n if (!overrideInput) setInput(\"\");\n\n await sendEvent(\n {\n type: \"text\",\n role: \"user\",\n data: { content: text || \"\" },\n },\n { state: { ...state, threadId: activeThreadId ?? undefined } }\n );\n };\n\n const handleStarterPromptClick = (prompt: string) => {\n if (onStarterPromptClick) {\n onStarterPromptClick(prompt);\n } else {\n handleSubmit(undefined, prompt);\n }\n };\n\n const showStarterPrompts =\n messages.length === 0 &&\n starterPrompts &&\n starterPrompts.length > 0 &&\n !isLoadingEvents;\n\n return (\n <div\n className={cn(\"relative flex flex-col h-full bg-background\", className)}\n >\n <div className=\"flex-1 overflow-y-auto p-4 pb-36\">\n <div\n className={cn(\n \"max-w-[48rem] mx-auto w-full p-4\",\n showStarterPrompts && \"min-h-full flex flex-col\"\n )}\n >\n {isLoadingEvents && messages.length === 0 ? (\n <div className=\"flex items-center justify-center py-20\">\n <LoadingIndicator status={{ message: \"Loading messages...\" }} />\n </div>\n ) : (\n <>\n {showStarterPrompts && (\n <StarterPrompts\n prompts={starterPrompts}\n onPromptClick={handleStarterPromptClick}\n />\n )}\n <MessageList\n messages={messages}\n isLoading={isLoading}\n error={error}\n loadingStatus={loadingStatus}\n />\n </>\n )}\n </div>\n <div ref={messagesEndRef} />\n </div>\n\n <div className=\"absolute bottom-0 p-4 w-full\">\n <div className=\"max-w-[48rem] mx-auto\">\n <Composer\n value={input}\n onChange={setInput}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n isLoading={isLoading}\n options={options}\n autoFocus={autoFocus}\n defaultSelectedIds={allDefaultSelectedIds}\n fileAttachments={fileAttachments}\n />\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface ChatHeaderProps {\n /**\n * The title to display in the header. Can be a string or a React node for custom content.\n */\n title?: string | React.ReactNode;\n\n /**\n * Content to render on the left side of the header (e.g., back button).\n */\n leftContent?: React.ReactNode;\n\n /**\n * Content to render on the right side of the header (e.g., action buttons).\n */\n rightContent?: React.ReactNode;\n\n /**\n * Custom className for the header container.\n */\n className?: string;\n\n /**\n * Custom className for the title element (only applies when title is a string).\n */\n titleClassName?: string;\n\n /**\n * Custom children to render inside the header. If provided, this takes precedence over title/leftContent/rightContent.\n */\n children?: React.ReactNode;\n}\n\n/**\n * A shared, customizable header component for chat interfaces.\n * Used consistently across ChatFull, ChatSidebar, and ChatPopup components.\n */\nexport function ChatHeader({\n leftContent,\n rightContent,\n className,\n children,\n}: ChatHeaderProps) {\n // If children are provided, use them for complete customization\n if (children) {\n return (\n <div\n className={cn(\n \"px-2 border-b border-border h-14 flex items-center shrink-0\",\n className\n )}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"px-2 border-b border-border h-14 flex items-center justify-between shrink-0\",\n className\n )}\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {leftContent}\n </div>\n {rightContent && (\n <div className=\"flex items-center gap-1 shrink-0 ml-2\">\n {rightContent}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\nimport {\n IconMessage,\n IconTrash,\n IconLoader2,\n IconDotsVertical,\n} from \"@tabler/icons-react\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\n\nexport interface ThreadListProps {\n className?: string;\n emptyState?: React.ReactNode;\n onThreadSelect?: (threadId: string) => void;\n}\n\nexport const ThreadList: React.FC<ThreadListProps> = ({\n className,\n emptyState,\n onThreadSelect,\n}) => {\n const { threads, activeThreadId, selectThread, deleteThread, isLoading } =\n useThreads();\n\n const sortedThreads = React.useMemo(() => {\n return [...threads].sort((a, b) => {\n const dateA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;\n const dateB = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;\n return dateB - dateA;\n });\n }, [threads]);\n\n const handleThreadClick = (threadId: string) => {\n if (threadId !== activeThreadId) {\n selectThread(threadId);\n }\n onThreadSelect?.(threadId);\n };\n\n const handleDelete = async (threadId: string) => {\n try {\n await deleteThread(threadId);\n } catch (error) {\n console.error(\"Failed to delete thread:\", error);\n }\n };\n\n return (\n <div className={cn(\"flex flex-col h-full\", className)}>\n <div className=\"flex-1 overflow-y-auto\">\n {isLoading && threads.length === 0 ? (\n <div className=\"flex items-center justify-center py-8\">\n <IconLoader2 className=\"size-5 animate-spin text-muted-foreground\" />\n </div>\n ) : threads.length === 0 ? (\n <div className=\"p-4 text-center text-muted-foreground\">\n {emptyState || (\n <div className=\"space-y-2\">\n <IconMessage className=\"size-8 mx-auto opacity-50\" />\n <p className=\"text-sm\">No threads yet</p>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-2 space-y-1\">\n {sortedThreads.map((thread) => {\n const isActive = thread.id === activeThreadId;\n return (\n <div\n key={thread.id}\n onClick={() => handleThreadClick(thread.id)}\n className={cn(\n \"group relative flex items-center gap-3 px-3 py-1.5 rounded-lg cursor-pointer transition-colors\",\n isActive\n ? \"bg-muted text-foreground\"\n : \"hover:bg-muted/50 text-muted-foreground hover:text-foreground\"\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">\n {thread.title || `Thread ${thread.id.slice(0, 8)}`}\n </p>\n </div>\n\n <div className=\"shrink-0 flex items-center opacity-0 group-hover:opacity-100 transition-opacity\">\n <DropdownMenu>\n <DropdownMenuTrigger\n render={(props) => (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n {...props}\n onClick={(e) => {\n e.stopPropagation();\n props.onClick?.(e);\n }}\n >\n <IconDotsVertical className=\"size-3.5\" />\n </Button>\n )}\n />\n <DropdownMenuContent align=\"start\" className=\"w-32\">\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(thread.id);\n }}\n >\n <IconTrash className=\"size-4 mr-2\" />\n <span>Delete</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n IconArrowLeft,\n IconHistory,\n IconMessage,\n IconPlus,\n IconX,\n} from \"@tabler/icons-react\";\nimport { Thread } from \"./thread\";\nimport { ThreadList } from \"./thread-list\";\nimport { Button } from \"./ui/button\";\nimport { Card } from \"./ui/card\";\nimport { cn } from \"@/lib/utils\";\nimport { StarterPrompt, ComposerOptionGroup } from \"@/types\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { ChatHeader, ChatHeaderProps } from \"./chat-header\";\n\nexport interface PopupChatProps {\n title?: string;\n placeholder?: string;\n starterPrompts?: StarterPrompt[];\n options?: ComposerOptionGroup[];\n defaultOpen?: boolean;\n /**\n * Props for customizing the header. Note: leftContent and rightContent in headerProps\n * will be merged with the default popup header actions (back, history, new chat, close).\n */\n headerProps?: Omit<ChatHeaderProps, \"title\" | \"leftContent\" | \"rightContent\">;\n /**\n * IDs of options to be selected by default\n */\n defaultSelectedIds?: string[];\n}\n\nexport function PopupChat({\n title = \"Chat\",\n placeholder = \"Message the AI\",\n starterPrompts,\n options,\n defaultOpen = false,\n headerProps,\n defaultSelectedIds,\n}: PopupChatProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [view, setView] = useState<\"chat\" | \"history\">(\"chat\");\n const { createThread } = useThreads();\n\n const handleNewChat = async () => {\n try {\n await createThread();\n setView(\"chat\");\n } catch (error) {\n console.error(\"Failed to create new chat:\", error);\n }\n };\n\n return (\n <div className=\"fixed bottom-6 right-6 z-50 flex flex-col items-end gap-4 font-sans\">\n {isOpen && (\n <Card className=\"py-0 w-[440px] h-[640px] gap-0 flex flex-col overflow-hidden border bg-background/95 backdrop-blur supports-backdrop-filter:bg-background/60 shadow-2xl animate-in fade-in zoom-in-95 duration-200 origin-bottom-right\">\n <ChatHeader\n title={view === \"history\" ? \"History\" : title}\n leftContent={\n view === \"history\" ? (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => setView(\"chat\")}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconArrowLeft className=\"size-4\" />\n </Button>\n ) : undefined\n }\n rightContent={\n <>\n {view === \"chat\" && (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => setView(\"history\")}\n className=\"text-muted-foreground hover:text-foreground\"\n title=\"History\"\n >\n <IconHistory className=\"size-4\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={handleNewChat}\n className=\"text-muted-foreground hover:text-foreground\"\n title=\"New Chat\"\n >\n <IconPlus className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => setIsOpen(false)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"size-4\" />\n </Button>\n </>\n }\n {...headerProps}\n />\n <div className=\"flex-1 overflow-hidden\">\n {view === \"chat\" ? (\n <Thread\n placeholder={placeholder}\n starterPrompts={starterPrompts}\n options={options}\n className=\"h-full\"\n defaultSelectedIds={defaultSelectedIds}\n />\n ) : (\n <ThreadList\n onThreadSelect={() => setView(\"chat\")}\n className=\"h-full\"\n />\n )}\n </div>\n </Card>\n )}\n\n <Button\n size=\"icon-lg\"\n className={cn(\n \"h-14 w-14 rounded-full shadow-2xl transition-all hover:scale-105 active:scale-95\",\n isOpen\n ? \"bg-muted text-muted-foreground hover:bg-muted/80\"\n : \"bg-primary text-primary-foreground\"\n )}\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <IconX className=\"size-6\" />\n ) : (\n <IconMessage className=\"size-6\" />\n )}\n </Button>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useSidebar } from \"../providers/sidebar-provider\";\n\nexport interface SidebarProps {\n side: \"left\" | \"right\";\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * A sidebar component that responds to ChatSidebarContext.\n * Typically used within ChatFull or a layout with ChatSidebarProvider.\n */\nexport function Sidebar({ side, children, className }: SidebarProps) {\n const { leftCollapsed, rightCollapsed } = useSidebar();\n const collapsed = side === \"left\" ? leftCollapsed : rightCollapsed;\n\n return (\n <div\n className={cn(\n \"flex-shrink-0 border-border bg-background transition-all duration-300 ease-in-out overflow-hidden flex flex-col\",\n side === \"left\" ? \"border-r\" : \"border-l\",\n collapsed ? \"w-0 border-r-0 border-l-0 min-w-0\" : \"\",\n !collapsed && className\n )}\n >\n <div className=\"flex-1 overflow-hidden min-h-0\">{children}</div>\n </div>\n );\n}\n\n","import { Thread } from \"./thread\";\nimport { cn } from \"@/lib/utils\";\nimport { StarterPrompt, ComposerOptionGroup } from \"@/types\";\nimport { ChatHeader, ChatHeaderProps } from \"./chat-header\";\n\nexport interface FullChatProps {\n title?: string;\n placeholder?: string;\n starterPrompts?: StarterPrompt[];\n options?: ComposerOptionGroup[];\n className?: string;\n /**\n * Props for customizing the header. If provided, title prop will be passed to header.\n */\n headerProps?: Omit<ChatHeaderProps, \"title\">;\n /**\n * Whether the composer should be auto focused\n */\n autoFocus?: boolean;\n /**\n * IDs of options to be selected by default\n */\n defaultSelectedIds?: string[];\n}\n\nexport function FullChat({\n title = \"Chat\",\n placeholder,\n starterPrompts,\n options,\n className,\n headerProps,\n autoFocus = false,\n defaultSelectedIds,\n}: FullChatProps) {\n return (\n <div className={cn(\"flex flex-col h-full w-full bg-background\", className)}>\n {title && <ChatHeader title={title} {...headerProps} />}\n <div className=\"flex-1 overflow-hidden flex relative\">\n <div className=\"flex-1 overflow-hidden min-w-0\">\n <Thread\n placeholder={placeholder}\n starterPrompts={starterPrompts}\n options={options}\n autoFocus={autoFocus}\n defaultSelectedIds={defaultSelectedIds}\n />\n </div>\n </div>\n </div>\n );\n}\n","import { Button } from \"./ui/button\";\nimport {\n IconLayoutSidebarLeftCollapse,\n IconLayoutSidebarLeftExpand,\n IconLayoutSidebarRightCollapse,\n IconLayoutSidebarRightExpand,\n} from \"@tabler/icons-react\";\nimport { useSidebar } from \"../providers/sidebar-provider\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface SidebarToggleProps {\n side: \"left\" | \"right\";\n className?: string;\n}\n\nexport function SidebarToggle({ side, className }: SidebarToggleProps) {\n const {\n leftCollapsed,\n rightCollapsed,\n setLeftCollapsed,\n setRightCollapsed,\n leftCollapsible,\n rightCollapsible,\n } = useSidebar();\n\n if (side === \"left\") {\n if (!leftCollapsible) return null;\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setLeftCollapsed(!leftCollapsed)}\n aria-label={\n leftCollapsed ? \"Expand left sidebar\" : \"Collapse left sidebar\"\n }\n className={cn(\"\", className)}\n >\n {leftCollapsed ? (\n <IconLayoutSidebarLeftExpand className=\"h-4 w-4\" />\n ) : (\n <IconLayoutSidebarLeftCollapse className=\"h-4 w-4\" />\n )}\n </Button>\n );\n }\n\n if (side === \"right\") {\n if (!rightCollapsible) return null;\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setRightCollapsed(!rightCollapsed)}\n aria-label={\n rightCollapsed ? \"Expand right sidebar\" : \"Collapse right sidebar\"\n }\n className={cn(\"\", className)}\n >\n {rightCollapsed ? (\n <IconLayoutSidebarRightExpand className=\"h-4 w-4\" />\n ) : (\n <IconLayoutSidebarRightCollapse className=\"h-4 w-4\" />\n )}\n </Button>\n );\n }\n\n return null;\n}\n","import * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | undefined>(\n undefined\n);\n\nfunction usePopoverContext() {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"Popover components must be used within a Popover\");\n }\n return context;\n}\n\ninterface PopoverProps {\n children: React.ReactNode;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction Popover({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const triggerRef = React.useRef<HTMLElement>(null);\n\n const open = controlledOpen ?? internalOpen;\n const setOpen = React.useCallback(\n (newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const value = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n }),\n [open, setOpen]\n );\n\n return (\n <PopoverContext.Provider value={value}>{children}</PopoverContext.Provider>\n );\n}\n\ninterface PopoverTriggerProps extends React.ComponentPropsWithoutRef<\"button\"> {\n asChild?: boolean;\n}\n\nconst PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ asChild, className, children, ...props }, ref) => {\n const { setOpen, triggerRef } = usePopoverContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(true);\n props.onClick?.(e);\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ref: (node: HTMLElement) => {\n triggerRef.current = node;\n if (typeof (children as any).ref === \"function\") {\n (children as any).ref(node);\n } else if ((children as any).ref) {\n (children as any).ref.current = node;\n }\n },\n onClick: handleClick,\n } as any);\n }\n\n return (\n <button\n ref={(node) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={className}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\ninterface PopoverContentProps extends React.ComponentPropsWithoutRef<\"div\"> {\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n alignOffset?: number;\n}\n\nconst PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(\n (\n {\n className,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n alignOffset = 0,\n children,\n ...props\n },\n ref\n ) => {\n const { open, setOpen, triggerRef } = usePopoverContext();\n const [position, setPosition] = React.useState({ top: 0, left: 0 });\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!open || !triggerRef.current) return;\n\n const updatePosition = () => {\n if (!triggerRef.current || !contentRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case \"bottom\":\n top = triggerRect.bottom + sideOffset + scrollY;\n break;\n case \"top\":\n top = triggerRect.top - contentRect.height - sideOffset + scrollY;\n break;\n case \"right\":\n top = triggerRect.top + scrollY;\n left = triggerRect.right + sideOffset + scrollX;\n break;\n case \"left\":\n top = triggerRect.top + scrollY;\n left = triggerRect.left - contentRect.width - sideOffset + scrollX;\n break;\n }\n\n switch (align) {\n case \"start\":\n if (side === \"top\" || side === \"bottom\") {\n left = triggerRect.left + scrollX + alignOffset;\n } else {\n top += alignOffset;\n }\n break;\n case \"center\":\n if (side === \"top\" || side === \"bottom\") {\n left =\n triggerRect.left +\n triggerRect.width / 2 -\n contentRect.width / 2 +\n scrollX +\n alignOffset;\n } else {\n top += triggerRect.height / 2 - contentRect.height / 2 + alignOffset;\n }\n break;\n case \"end\":\n if (side === \"top\" || side === \"bottom\") {\n left =\n triggerRect.left +\n triggerRect.width -\n contentRect.width +\n scrollX +\n alignOffset;\n } else {\n top += triggerRect.height - contentRect.height + alignOffset;\n }\n break;\n }\n\n setPosition({ top, left });\n };\n\n // Use requestAnimationFrame to ensure content is rendered\n requestAnimationFrame(() => {\n updatePosition();\n });\n\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [open, side, align, sideOffset, alignOffset, triggerRef]);\n\n React.useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open, setOpen, triggerRef]);\n\n if (!open) return null;\n\n const content = (\n <div\n ref={(node) => {\n contentRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(\n \"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/5 rounded-2xl shadow-2xl ring-1 z-50 min-w-48 max-h-96 overflow-hidden\",\n className\n )}\n style={{\n position: \"absolute\",\n top: `${position.top}px`,\n left: `${position.left}px`,\n }}\n {...props}\n >\n {children}\n </div>\n );\n\n return createPortal(content, document.body);\n }\n);\n\nPopoverContent.displayName = \"PopoverContent\";\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","import * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from \"@/components/ui/popover\";\nimport { ThreadList } from \"./thread-list\";\nimport { IconHistory } from \"@tabler/icons-react\";\nimport { cn } from \"@/lib/utils\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\n\nexport interface ThreadPopoverProps {\n className?: string;\n buttonClassName?: string;\n buttonVariant?:\n | \"default\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n buttonSize?:\n | \"default\"\n | \"xs\"\n | \"sm\"\n | \"lg\"\n | \"icon\"\n | \"icon-xs\"\n | \"icon-sm\"\n | \"icon-lg\";\n emptyState?: React.ReactNode;\n onThreadSelect?: (threadId: string) => void;\n}\n\nexport const ThreadPopover: React.FC<ThreadPopoverProps> = ({\n className,\n buttonClassName,\n buttonVariant = \"ghost\",\n buttonSize = \"icon\",\n emptyState,\n onThreadSelect,\n}) => {\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Hotkey to toggle popover: Press 'H' to open/close\n // Scopes ensure it doesn't trigger when typing in inputs/textareas\n useHotkeys(\n \"h\",\n (e: KeyboardEvent) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n },\n {\n enableOnFormTags: false, // Don't trigger when typing in form inputs\n enableOnContentEditable: false, // Don't trigger in contenteditable elements\n }\n );\n\n const handleThreadSelect = (threadId: string) => {\n setIsOpen(false);\n onThreadSelect?.(threadId);\n };\n\n return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild>\n <Button\n variant={buttonVariant}\n size={buttonSize}\n className={cn(buttonClassName)}\n >\n <IconHistory className=\"size-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\"w-80 p-0\", className)}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n >\n <div className=\"flex flex-col h-[400px]\">\n <ThreadList\n emptyState={emptyState}\n onThreadSelect={handleThreadSelect}\n className=\"h-full\"\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n","import * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { IconPlus } from \"@tabler/icons-react\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { cn } from \"@/lib/utils\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\n\nexport interface CreateThreadButtonProps {\n className?: string;\n variant?:\n | \"default\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n size?:\n | \"default\"\n | \"xs\"\n | \"sm\"\n | \"lg\"\n | \"icon\"\n | \"icon-xs\"\n | \"icon-sm\"\n | \"icon-lg\";\n children?: React.ReactNode;\n onThreadCreated?: (threadId: string) => void;\n}\n\nexport const CreateThreadButton: React.FC<CreateThreadButtonProps> = ({\n className,\n variant = \"ghost\",\n size = \"default\",\n children,\n onThreadCreated,\n}) => {\n const { createThread } = useThreads();\n const [isCreating, setIsCreating] = React.useState(false);\n\n const handleCreateThread = async () => {\n if (isCreating) return; // Prevent multiple simultaneous creations\n try {\n setIsCreating(true);\n const threadId = await createThread();\n onThreadCreated?.(threadId);\n } catch (error) {\n console.error(\"Failed to create thread:\", error);\n } finally {\n setIsCreating(false);\n }\n };\n\n // Hotkey to create new thread: Press 'N' to create\n // Scopes ensure it doesn't trigger when typing in inputs/textareas\n useHotkeys(\n \"n\",\n (e: KeyboardEvent) => {\n e.preventDefault();\n handleCreateThread();\n },\n {\n enableOnFormTags: false, // Don't trigger when typing in form inputs\n enableOnContentEditable: false, // Don't trigger in contenteditable elements\n }\n );\n\n return (\n <Button\n variant={variant}\n size={size}\n onClick={handleCreateThread}\n disabled={isCreating}\n className={cn(className)}\n >\n <IconPlus className=\"size-4\" />\n New chat\n </Button>\n );\n};\n","import * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"@base-ui/react/alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nfunction AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({ ...props }: AlertDialogPrimitive.Portal.Props) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: AlertDialogPrimitive.Backdrop.Props) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: AlertDialogPrimitive.Popup.Props & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/5 gap-6 rounded-4xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 outline-none\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\"bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-full sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof Button>) {\n return (\n <Button\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: AlertDialogPrimitive.Close.Props &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n render={<Button variant={variant} size={size} />}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","import * as React from \"react\";\nimport {\n AlertDialog,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { useAuth } from \"@/hooks/use-auth\";\nimport {\n IconBrandGoogle,\n IconLogout,\n IconUser,\n IconX,\n} from \"@tabler/icons-react\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/lib/utils\";\nimport { Separator } from \"@/components/ui/separator\";\n\nexport interface AccountDialogProps {\n className?: string;\n variant?:\n | \"default\"\n | \"destructive\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"link\";\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\n}\n\nexport const AccountDialog: React.FC<AccountDialogProps> = ({\n className,\n variant = \"outline\",\n size,\n}) => {\n const { isLoading, isAuthenticated, user, login, logout } = useAuth();\n const [open, setOpen] = React.useState(false);\n const [accountInfoOpen, setAccountInfoOpen] = React.useState(false);\n const [error, setError] = React.useState<string | null>(null);\n\n const initials = React.useMemo(() => {\n const name = user?.displayName || user?.name;\n if (!name) return \"\";\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n }, [user?.displayName, user?.name]);\n\n const handleGoogleSignIn = async () => {\n login();\n };\n\n if (isAuthenticated) {\n return (\n <>\n <DropdownMenu>\n <DropdownMenuTrigger\n render={(props) => (\n <Button\n variant={variant}\n size=\"icon\"\n {...props}\n className={cn(\"rounded-full\", className)}\n >\n {user?.picture ? (\n <img\n src={user.picture}\n alt={user.displayName || user.name}\n className=\"size-7 rounded-full object-cover\"\n />\n ) : (\n <div className=\"flex size-7 items-center justify-center rounded-full bg-muted text-xs font-bold\">\n {initials || <IconUser className=\"size-4\" />}\n </div>\n )}\n </Button>\n )}\n />\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <div className=\"flex items-center gap-2 p-2\">\n {user?.picture ? (\n <img\n src={user.picture}\n alt={user.displayName || user.name}\n className=\"size-8 rounded-full object-cover\"\n />\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-muted text-xs font-bold\">\n {initials || <IconUser className=\"size-4\" />}\n </div>\n )}\n <div className=\"flex flex-col space-y-0.5 overflow-hidden\">\n <p className=\"truncate text-sm font-medium\">\n {user?.displayName || user?.name}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">\n {user?.email}\n </p>\n </div>\n </div>\n <Separator className=\"my-1\" />\n <DropdownMenuItem onClick={() => setAccountInfoOpen(true)}>\n <IconUser className=\"mr-2 size-4\" />\n Account Settings\n </DropdownMenuItem>\n <DropdownMenuItem onClick={logout} className=\"text-destructive\">\n <IconLogout className=\"mr-2 size-4\" />\n Logout\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Dialog open={accountInfoOpen} onOpenChange={setAccountInfoOpen}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Account Information</DialogTitle>\n <DialogDescription>\n Your account details and settings.\n </DialogDescription>\n </DialogHeader>\n <DialogClose>\n <IconX className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n <div className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex items-center gap-4\">\n {user?.picture ? (\n <img\n src={user.picture}\n alt={user.displayName || user.name}\n className=\"size-16 rounded-full object-cover\"\n />\n ) : (\n <div className=\"flex size-16 items-center justify-center rounded-full bg-muted text-xl font-bold\">\n {initials || (\n <IconUser className=\"size-8 text-muted-foreground\" />\n )}\n </div>\n )}\n <div className=\"flex flex-col\">\n <h3 className=\"text-lg font-semibold\">\n {user?.displayName || user?.name}\n </h3>\n <p className=\"text-sm text-muted-foreground\">{user?.email}</p>\n </div>\n </div>\n <Separator />\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-muted-foreground\">\n User ID\n </p>\n <p className=\"font-mono text-xs truncate\">\n {user?.uid || user?.id}\n </p>\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-muted-foreground\">\n Created At\n </p>\n <p className=\"text-xs\">{user?.createdAt || \"N/A\"}</p>\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n }\n\n return (\n <>\n <Button\n variant={variant}\n size={size}\n onClick={() => setOpen(true)}\n className={className}\n >\n Sign in\n </Button>\n\n <AlertDialog open={open} onOpenChange={setOpen}>\n <AlertDialogContent className=\"sm:max-w-md\">\n <AlertDialogHeader>\n <AlertDialogTitle>Sign in to continue</AlertDialogTitle>\n <AlertDialogDescription>\n Choose your preferred sign-in method to access your account.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <div className=\"flex flex-col gap-3 py-4\">\n {error && (\n <div className=\"rounded-lg bg-destructive/10 p-3 text-sm text-destructive\">\n {error}\n </div>\n )}\n <Button\n onClick={handleGoogleSignIn}\n disabled={isLoading}\n variant=\"outline\"\n className=\"w-full\"\n size=\"lg\"\n >\n <IconBrandGoogle className=\"mr-2 size-5\" />\n {isLoading ? \"Signing in...\" : \"Continue with Google\"}\n </Button>\n </div>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n};\n","import { useTheme } from \"../providers/theme-provider\";\nimport { IconMoon, IconSun, IconDeviceDesktop } from \"@tabler/icons-react\";\nimport { Button } from \"./ui/button\";\n\nexport function ThemeToggle() {\n const { theme, setTheme, resolvedTheme } = useTheme();\n\n const cycleTheme = () => {\n if (theme === \"light\") {\n setTheme(\"dark\");\n } else if (theme === \"dark\") {\n setTheme(\"system\");\n } else {\n setTheme(\"light\");\n }\n };\n\n const getIcon = () => {\n if (theme === \"system\") {\n return <IconDeviceDesktop className=\"h-4 w-4\" />;\n }\n return resolvedTheme === \"dark\" ? (\n <IconMoon className=\"h-4 w-4\" />\n ) : (\n <IconSun className=\"h-4 w-4\" />\n );\n };\n\n const getLabel = () => {\n if (theme === \"system\") {\n return \"System\";\n }\n return resolvedTheme === \"dark\" ? \"Dark\" : \"Light\";\n };\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={cycleTheme}\n aria-label={`Toggle theme (current: ${getLabel()})`}\n title={`Current: ${getLabel()}. Click to cycle: Light → Dark → System`}\n >\n {getIcon()}\n </Button>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/group-events-to-messages.ts","../src/providers/melony-provider.tsx","../src/hooks/use-auth.ts","../src/lib/utils.ts","../src/components/ui/dialog.tsx","../src/components/ui/button.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/separator.tsx","../src/components/account-button.tsx","../src/components/welcome-screen.tsx","../src/providers/auth-provider.tsx","../src/providers/thread-provider.tsx","../src/hooks/use-screen-size.ts","../src/providers/sidebar-provider.tsx","../src/providers/theme-provider.tsx","../src/hooks/use-melony.ts","../src/hooks/use-threads.ts","../src/components/ui/textarea.tsx","../src/components/ui/badge.tsx","../src/components/composer.tsx","../src/components/ui/card.tsx","../src/components/elements/Card.tsx","../src/components/elements/Row.tsx","../src/components/elements/Col.tsx","../src/components/elements/Box.tsx","../src/components/elements/Spacer.tsx","../src/components/elements/Divider.tsx","../src/components/elements/List.tsx","../src/components/elements/ListItem.tsx","../src/components/elements/Image.tsx","../src/components/elements/Icon.tsx","../src/components/elements/Badge.tsx","../src/components/elements/Chart.tsx","../src/components/elements/Text.tsx","../src/components/elements/Heading.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/field.tsx","../src/components/elements/Input.tsx","../src/components/elements/Textarea.tsx","../src/components/ui/select.tsx","../src/components/elements/Select.tsx","../src/components/elements/Label.tsx","../src/components/elements/Checkbox.tsx","../src/components/elements/RadioGroup.tsx","../src/components/elements/Button.tsx","../src/components/elements/Form.tsx","../src/components/starter-prompts.tsx","../src/components/ui-renderer.tsx","../src/components/message-content.tsx","../src/components/message.tsx","../src/components/loading-indicator.tsx","../src/components/error-display.tsx","../src/components/message-list.tsx","../src/components/thread.tsx","../src/components/chat-header.tsx","../src/components/elements/Dropdown.tsx","../src/components/thread-list.tsx","../src/components/popup-chat.tsx","../src/components/sidebar.tsx","../src/components/full-chat.tsx","../src/components/sidebar-toggle.tsx","../src/components/ui/popover.tsx","../src/components/thread-popover.tsx","../src/components/create-thread-button.tsx","../src/components/theme-toggle.tsx","../src/components/create-thread-nav-item.tsx"],"names":["jsx","DialogPrimitive","ButtonPrimitive","MenuPrimitive","jsxs","SeparatorPrimitive","React2","createContext","useQuery","useCallback","useQueryClient","useMemo","useMutation","useState","useEffect","useContext","cva","React","IconX","Fragment","Card","Badge","InputPrimitive","Input","Textarea","SelectPrimitive","IconCheck","IconChevronDown","Select","value","Label","Button","IconLoader2","IconChevronUp","useRef","React10","React12","IconHistory","React13","useHotkeys","IconPlus","React14","generateId"],"mappings":"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","file":"index.js","sourcesContent":["import { Event } from \"melony\";\nimport { Message } from \"@/types\";\n\nexport function groupEventsToMessages(events: Event[]): Message[] {\n if (events.length === 0) return [];\n\n const messages: Message[] = [];\n let currentMessage: Message | null = null;\n\n for (const event of events) {\n const role = event.role || \"assistant\";\n const runId = event.runId;\n\n // Start a new message if:\n // 1. No current message\n // 2. Role changed\n // 3. runId changed (and both have runIds)\n if (\n !currentMessage ||\n currentMessage.role !== role ||\n (runId && currentMessage.runId && runId !== currentMessage.runId)\n ) {\n currentMessage = {\n role: role,\n content: [event],\n runId,\n };\n messages.push(currentMessage);\n } else {\n currentMessage.content.push(event);\n // If the current message didn't have a runId but this event does, update it\n if (!currentMessage.runId && runId) {\n currentMessage.runId = runId;\n }\n }\n }\n\n return messages;\n}\n","import React, {\n createContext,\n useEffect,\n useState,\n useMemo,\n useCallback,\n ReactNode,\n} from \"react\";\nimport { MelonyClient, ClientState } from \"melony/client\";\nimport { Config, Event } from \"melony\";\nimport { Message } from \"@/types\";\nimport { groupEventsToMessages } from \"@/lib/group-events-to-messages\";\nimport { NuqsAdapter } from \"nuqs/adapters/react\";\nimport {\n QueryClient,\n QueryClientProvider,\n useQuery,\n} from \"@tanstack/react-query\";\n\nexport interface MelonyContextValue extends ClientState {\n messages: Message[];\n sendEvent: (\n event: Event\n ) => Promise<void>;\n reset: (events?: Event[]) => void;\n client: MelonyClient;\n config?: Config;\n}\n\nexport const MelonyContext = createContext<MelonyContextValue | undefined>(\n undefined\n);\n\nexport interface MelonyProviderProps {\n children: ReactNode;\n client: MelonyClient;\n initialEvents?: Event[];\n queryClient?: QueryClient;\n}\n\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n },\n },\n});\n\ninterface MelonyContextProviderInnerProps {\n children: ReactNode;\n client: MelonyClient;\n initialEvents?: Event[];\n setContextValue: (value: MelonyContextValue) => void;\n}\n\nconst MelonyContextProviderInner: React.FC<MelonyContextProviderInnerProps> = ({\n children,\n client,\n initialEvents,\n setContextValue,\n}) => {\n const [state, setState] = useState<ClientState>(client.getState());\n\n const { data: config } = useQuery({\n queryKey: [\"melony-config\", client.url],\n queryFn: () => client.getConfig(),\n staleTime: Infinity,\n });\n\n useEffect(() => {\n if (\n initialEvents &&\n initialEvents.length > 0 &&\n client.getState().events.length === 0\n ) {\n client.reset(initialEvents);\n }\n }, [client, initialEvents]);\n\n useEffect(() => {\n setState(client.getState());\n const unsubscribe = client.subscribe(setState);\n return () => {\n unsubscribe();\n };\n }, [client]);\n\n const reset = useCallback(\n (events?: Event[]) => client.reset(events),\n [client]\n );\n\n const dispatchClientAction = useCallback(\n async (event: Event) => {\n if (!event.type.startsWith(\"client:\")) return false;\n\n switch (event.type) {\n case \"client:navigate\": {\n const url = event.data?.url;\n if (url) {\n window.history.pushState(null, \"\", url);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }\n return true;\n }\n case \"client:open-url\": {\n const { url, target = \"_blank\" } = event.data || {};\n if (url) {\n window.open(url, target);\n }\n return true;\n }\n case \"client:copy\": {\n const { text } = event.data || {};\n if (text) {\n await navigator.clipboard.writeText(text);\n }\n return true;\n }\n case \"client:reset\": {\n reset([]);\n return true;\n }\n default:\n return false;\n }\n },\n [client, reset]\n );\n\n const sendEvent = useCallback(\n async (\n event: Event\n ) => {\n const handled = await dispatchClientAction(event);\n if (handled) return;\n\n const generator = client.sendEvent(event);\n for await (const incomingEvent of generator) {\n // Also allow server to trigger client actions\n await dispatchClientAction(incomingEvent);\n }\n },\n [client, dispatchClientAction]\n );\n\n const value = useMemo(\n () => ({\n ...state,\n messages: groupEventsToMessages(state.events),\n sendEvent,\n reset,\n client,\n config: config as Config,\n }),\n [state, sendEvent, reset, client, config]\n );\n\n useEffect(() => {\n setContextValue(value);\n }, [value, setContextValue]);\n\n return <NuqsAdapter>{children}</NuqsAdapter>;\n};\n\nexport const MelonyProvider: React.FC<MelonyProviderProps> = ({\n children,\n client,\n initialEvents,\n queryClient = defaultQueryClient,\n}) => {\n const [contextValue, setContextValue] = useState<\n MelonyContextValue | undefined\n >(undefined);\n\n return (\n <MelonyContext.Provider value={contextValue}>\n <QueryClientProvider client={queryClient}>\n <MelonyContextProviderInner\n client={client}\n initialEvents={initialEvents}\n setContextValue={setContextValue}\n >\n {children}\n </MelonyContextProviderInner>\n </QueryClientProvider>\n </MelonyContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { AuthContext, AuthContextValue } from \"@/providers/auth-provider\";\n\nexport const useAuth = (): AuthContextValue => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n return context;\n};\n\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return (\n <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n )\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return (\n <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n )\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-200 supports-backdrop-filter:backdrop-blur-sm fixed inset-0 isolate z-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n ...props\n}: DialogPrimitive.Popup.Props) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 sm:rounded-lg outline-none\",\n className\n )}\n {...props}\n />\n </DialogPortal>\n )\n}\n\nfunction DialogClose({\n className,\n ...props\n}: DialogPrimitive.Close.Props) {\n return (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className={cn(\n \"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n DialogOverlay,\n DialogPortal,\n}\n\n","import { Button as ButtonPrimitive } from \"@base-ui/react/button\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-4xl border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline: \"border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost: \"hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground\",\n destructive: \"bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5\",\n xs: \"h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n lg: \"h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n return (\n <ButtonPrimitive\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/lib/utils\"\nimport { IconChevronRight, IconCheck } from \"@tabler/icons-react\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100 z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"text-muted-foreground px-3 py-2.5 text-xs data-[inset]:pl-8\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-xl px-3 py-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <IconChevronRight className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-36 rounded-2xl p-1 shadow-2xl ring-1 duration-100 w-auto\", className)}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <IconCheck\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <IconCheck\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border/50 -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest\", className)}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: SeparatorPrimitive.Props) {\n return (\n <SeparatorPrimitive\n data-slot=\"separator\"\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { useAuth } from \"@/hooks/use-auth\";\nimport {\n IconBrandGoogle,\n IconLogout,\n IconUser,\n IconX,\n} from \"@tabler/icons-react\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/lib/utils\";\nimport { Separator } from \"@/components/ui/separator\";\n\nexport interface AccountButtonProps {\n className?: string;\n variant?:\n | \"default\"\n | \"destructive\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"link\";\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\n}\n\nexport const AccountButton: React.FC<AccountButtonProps> = ({\n className,\n variant = \"outline\",\n size,\n}) => {\n const { isLoading, isAuthenticated, user, login, logout } = useAuth();\n const [open, setOpen] = React.useState(false);\n const [accountInfoOpen, setAccountInfoOpen] = React.useState(false);\n const [error, setError] = React.useState<string | null>(null);\n\n const initials = React.useMemo(() => {\n const name = user?.displayName || user?.name;\n if (!name) return \"\";\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n }, [user?.displayName, user?.name]);\n\n const handleGoogleSignIn = async () => {\n login();\n };\n\n if (isAuthenticated) {\n return (\n <>\n <DropdownMenu>\n <DropdownMenuTrigger\n render={(props) => (\n <Button\n variant={variant}\n size=\"icon\"\n {...props}\n className={cn(\"rounded-full\", className)}\n >\n {user?.picture ? (\n <img\n src={user.picture}\n alt={user.displayName || user.name}\n className=\"size-7 rounded-full object-cover\"\n />\n ) : (\n <div className=\"flex size-7 items-center justify-center rounded-full bg-muted text-xs font-bold\">\n {initials || <IconUser className=\"size-4\" />}\n </div>\n )}\n </Button>\n )}\n />\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <div className=\"flex items-center gap-2 p-2\">\n {user?.picture ? (\n <img\n src={user.picture}\n alt={user.displayName || user.name}\n className=\"size-8 rounded-full object-cover\"\n />\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-muted text-xs font-bold\">\n {initials || <IconUser className=\"size-4\" />}\n </div>\n )}\n <div className=\"flex flex-col space-y-0.5 overflow-hidden\">\n <p className=\"truncate text-sm font-medium\">\n {user?.displayName || user?.name}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">\n {user?.email}\n </p>\n </div>\n </div>\n <Separator className=\"my-1\" />\n <DropdownMenuItem onClick={() => setAccountInfoOpen(true)}>\n <IconUser className=\"mr-2 size-4\" />\n Account Settings\n </DropdownMenuItem>\n <DropdownMenuItem onClick={logout} className=\"text-destructive\">\n <IconLogout className=\"mr-2 size-4\" />\n Logout\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Dialog open={accountInfoOpen} onOpenChange={setAccountInfoOpen}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Account Information</DialogTitle>\n <DialogDescription>\n Your account details and settings.\n </DialogDescription>\n </DialogHeader>\n <DialogClose>\n <IconX className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n <div className=\"flex flex-col gap-4 py-4\">\n <div className=\"flex items-center gap-4\">\n {user?.picture ? (\n <img\n src={user.picture}\n alt={user.displayName || user.name}\n className=\"size-16 rounded-full object-cover\"\n />\n ) : (\n <div className=\"flex size-16 items-center justify-center rounded-full bg-muted text-xl font-bold\">\n {initials || (\n <IconUser className=\"size-8 text-muted-foreground\" />\n )}\n </div>\n )}\n <div className=\"flex flex-col\">\n <h3 className=\"text-lg font-semibold\">\n {user?.displayName || user?.name}\n </h3>\n <p className=\"text-sm text-muted-foreground\">{user?.email}</p>\n </div>\n </div>\n <Separator />\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-muted-foreground\">\n User ID\n </p>\n <p className=\"font-mono text-xs truncate\">\n {user?.uid || user?.id}\n </p>\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-muted-foreground\">\n Created At\n </p>\n <p className=\"text-xs\">{user?.createdAt || \"N/A\"}</p>\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n }\n\n return (\n <>\n <Button\n variant={variant}\n size={size}\n onClick={() => setOpen(true)}\n className={className}\n >\n Sign in\n </Button>\n\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Sign in to continue</DialogTitle>\n <DialogDescription>\n Choose your preferred sign-in method to access your account.\n </DialogDescription>\n </DialogHeader>\n <DialogClose>\n <IconX className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n <div className=\"flex flex-col gap-3\">\n {error && (\n <div className=\"rounded-lg bg-destructive/10 p-3 text-sm text-destructive\">\n {error}\n </div>\n )}\n <Button\n onClick={handleGoogleSignIn}\n disabled={isLoading}\n variant=\"outline\"\n className=\"w-full\"\n size=\"lg\"\n >\n <IconBrandGoogle className=\"mr-2 size-5\" />\n {isLoading ? \"Signing in...\" : \"Continue with Google\"}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n","import { useAuth } from \"@/hooks/use-auth\";\nimport { cn } from \"@/lib/utils\";\nimport { AccountButton } from \"./account-button\";\n\nexport interface WelcomeScreenProps {\n title?: string;\n description?: string;\n features?: { title: string; description: string }[];\n className?: string;\n onLoginClick?: () => void;\n termsUrl?: string;\n privacyUrl?: string;\n imageUrl?: string;\n imageAlt?: string;\n}\n\nexport function WelcomeScreen({\n title = \"Welcome to Melony\",\n description = \"The most powerful AI agent framework for building modern applications. Connect your tools, build your brain, and ship faster.\",\n features = [\n {\n title: \"Context Aware\",\n description: \"Built-in state management for complex LLM flows.\",\n },\n {\n title: \"Extensible\",\n description: \"Plugin architecture for easy integrations.\",\n },\n {\n title: \"Real-time\",\n description: \"Streaming responses and live state updates.\",\n },\n {\n title: \"Tool-ready\",\n description: \"Ready-to-use actions for common tasks.\",\n },\n ],\n className,\n onLoginClick,\n termsUrl = \"#\",\n privacyUrl = \"#\",\n imageUrl,\n imageAlt = \"Product screenshot\",\n}: WelcomeScreenProps) {\n const { login, isLoading } = useAuth();\n\n const handleLogin = () => {\n if (onLoginClick) {\n onLoginClick();\n } else {\n login();\n }\n };\n\n return (\n <div\n className={cn(\n \"flex min-h-[600px] h-full w-full flex-col md:flex-row bg-background overflow-hidden\",\n className\n )}\n >\n {/* Left side: Introduction */}\n <div className=\"flex w-8/12 flex-col bg-sidebar text-foreground relative overflow-hidden\">\n {/* Decorative background element - these are now contained by overflow-hidden */}\n <div className=\"absolute -top-24 -left-24 size-96 bg-primary/5 rounded-full blur-3xl\" />\n <div className=\"absolute -bottom-24 -right-24 size-96 bg-primary/5 rounded-full blur-3xl\" />\n\n {/* Scrollable content wrapper */}\n <div className=\"flex-1 overflow-y-auto overflow-x-hidden relative z-10 flex flex-col p-8 md:p-12 lg:p-20\">\n <div className=\"max-w-xl mx-auto w-full my-auto\">\n <h1 className=\"mb-6 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-foreground\">\n {title}\n </h1>\n <p className=\"mb-12 text-lg text-muted-foreground md:text-xl leading-relaxed\">\n {description}\n </p>\n\n {imageUrl && (\n <div className=\"mb-12 relative group\">\n <div className=\"absolute -inset-1 bg-gradient-to-r from-primary/20 to-primary/10 rounded-xl blur opacity-25 group-hover:opacity-50 transition duration-1000 group-hover:duration-200\"></div>\n <img\n src={imageUrl}\n alt={imageAlt}\n className=\"relative rounded-xl border border-border/50 shadow-2xl transition-transform duration-500 hover:scale-[1.02] w-full\"\n />\n </div>\n )}\n\n <div className=\"grid grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2\">\n {features.map((feature, i) => (\n <div key={i} className=\"space-y-2\">\n <h3 className=\"font-bold text-lg text-foreground\">\n {feature.title}\n </h3>\n <p className=\"text-sm text-muted-foreground leading-relaxed\">\n {feature.description}\n </p>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n\n {/* Right side: Login */}\n <div className=\"flex w-4/12 flex-col overflow-y-auto p-8 md:p-12 lg:p-20 bg-background transition-colors duration-300\">\n <div className=\"w-full max-w-sm space-y-8 my-auto mx-auto\">\n <div className=\"space-y-3 text-center md:text-left\">\n <h2 className=\"text-3xl font-bold tracking-tight text-foreground\">\n Get Started\n </h2>\n <p className=\"text-muted-foreground text-lg\">\n Sign in to your account to continue\n </p>\n </div>\n\n <div className=\"space-y-4\">\n <AccountButton />\n </div>\n\n <p className=\"text-sm text-muted-foreground leading-relaxed text-center md:text-left\">\n By continuing, you agree to our <br className=\"hidden md:block\" />\n <a\n href={termsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline underline-offset-4 hover:text-primary transition-colors font-medium\"\n >\n Terms of Service\n </a>{\" \"}\n and{\" \"}\n <a\n href={privacyUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline underline-offset-4 hover:text-primary transition-colors font-medium\"\n >\n Privacy Policy\n </a>\n .\n </p>\n </div>\n </div>\n </div>\n );\n}\n","import React, { createContext, useCallback, ReactNode } from \"react\";\nimport { User, AuthService } from \"@/types\";\nimport { WelcomeScreen, WelcomeScreenProps } from \"@/components/welcome-screen\";\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nexport interface AuthContextValue {\n user: User | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n login: () => void;\n logout: () => void;\n getToken: () => string | null;\n}\n\nexport const AuthContext = createContext<AuthContextValue | undefined>(\n undefined\n);\n\nexport interface AuthProviderProps {\n children: ReactNode;\n service: AuthService;\n welcomeScreenProps?: WelcomeScreenProps;\n}\n\nexport const AuthProvider: React.FC<AuthProviderProps> = ({\n children,\n service,\n welcomeScreenProps,\n}) => {\n const queryClient = useQueryClient();\n\n const { data: user, isLoading } = useQuery({\n queryKey: [\"auth-user\", service],\n queryFn: () => service.getMe(),\n retry: false,\n });\n\n const logoutMutation = useMutation({\n mutationFn: () => service.logout(),\n onSuccess: () => {\n queryClient.setQueryData([\"auth-user\", service], null);\n },\n });\n\n const login = useCallback(() => {\n service.login();\n }, [service]);\n\n const logout = useCallback(async () => {\n try {\n await logoutMutation.mutateAsync();\n } catch (error) {\n console.error(\"Failed to logout:\", error);\n }\n }, [logoutMutation]);\n\n if (isLoading) {\n return (\n <div\n style={{\n height: \"100vh\",\n width: \"100vw\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: \"0.875rem\",\n letterSpacing: \"0.01em\",\n }}\n className=\"text-muted-foreground animate-pulse\"\n >\n Loading...\n </div>\n );\n }\n\n const value = {\n user: user || null,\n isAuthenticated: !!user,\n isLoading,\n login,\n logout,\n getToken: service.getToken,\n };\n\n return (\n <AuthContext.Provider value={value}>\n {!value.isAuthenticated && welcomeScreenProps ? (\n <WelcomeScreen {...welcomeScreenProps} />\n ) : (\n children\n )}\n </AuthContext.Provider>\n );\n};\n","import React, {\n createContext,\n useCallback,\n ReactNode,\n useMemo,\n} from \"react\";\nimport { Event } from \"melony\";\nimport { generateId } from \"melony/client\";\nimport { ThreadData, ThreadService } from \"@/types\";\nimport { useQueryState, parseAsString } from \"nuqs\";\nimport {\n useQuery,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nexport interface ThreadContextValue {\n threads: ThreadData[];\n activeThreadId: string | null;\n isLoading: boolean;\n error: Error | null;\n selectThread: (threadId: string) => void;\n createThread: () => Promise<string>;\n deleteThread: (threadId: string) => Promise<void>;\n refreshThreads: () => Promise<void>;\n threadEvents: Event[];\n isLoadingEvents: boolean;\n}\n\nexport const ThreadContext = createContext<ThreadContextValue | undefined>(\n undefined\n);\n\nexport interface ThreadProviderProps {\n children: ReactNode;\n service: ThreadService;\n initialThreadId?: string;\n}\n\nexport const ThreadProvider: React.FC<ThreadProviderProps> = ({\n children,\n service,\n initialThreadId: providedInitialThreadId,\n}) => {\n const queryClient = useQueryClient();\n const defaultInitialThreadId = useMemo(() => generateId(), []);\n const initialThreadId = providedInitialThreadId || defaultInitialThreadId;\n\n const [activeThreadId, setActiveThreadId] = useQueryState(\n \"threadId\",\n parseAsString.withDefault(initialThreadId)\n );\n\n // Fetch all threads\n const {\n data: threads = [],\n isLoading,\n error: threadsError,\n refetch: refreshThreads,\n } = useQuery({\n queryKey: [\"threads\"],\n queryFn: () => service.getThreads(),\n });\n\n // Fetch events for active thread\n const { data: threadEvents = [], isLoading: isLoadingEvents } = useQuery({\n queryKey: [\"threads\", activeThreadId, \"events\"],\n queryFn: () => service.getEvents(activeThreadId!),\n enabled: !!activeThreadId,\n });\n\n const createMutation = useMutation({\n mutationFn: async () => {\n const newId = service.createThread\n ? await service.createThread()\n : generateId();\n return newId;\n },\n onSuccess: async (newId) => {\n await queryClient.invalidateQueries({ queryKey: [\"threads\"] });\n await setActiveThreadId(newId);\n },\n });\n\n const deleteMutation = useMutation({\n mutationFn: (threadId: string) => service.deleteThread(threadId),\n onSuccess: async (_, threadId) => {\n await queryClient.invalidateQueries({ queryKey: [\"threads\"] });\n if (activeThreadId === threadId) {\n const remainingThreads = threads.filter((t) => t.id !== threadId);\n const nextId = remainingThreads.length > 0 ? remainingThreads[0].id : null;\n await setActiveThreadId(nextId);\n }\n },\n });\n\n const selectThread = useCallback(\n (threadId: string) => {\n setActiveThreadId(threadId);\n },\n [setActiveThreadId]\n );\n\n const createThread = useCallback(async () => {\n return createMutation.mutateAsync();\n }, [createMutation]);\n\n const deleteThread = useCallback(\n async (threadId: string) => {\n return deleteMutation.mutateAsync(threadId);\n },\n [deleteMutation]\n );\n\n const value = useMemo(\n () => ({\n threads,\n activeThreadId,\n isLoading,\n error: (threadsError as Error) || null,\n selectThread,\n createThread,\n deleteThread,\n refreshThreads: async () => {\n await refreshThreads();\n },\n threadEvents,\n isLoadingEvents,\n }),\n [\n threads,\n activeThreadId,\n isLoading,\n threadsError,\n selectThread,\n createThread,\n deleteThread,\n refreshThreads,\n threadEvents,\n isLoadingEvents,\n ]\n );\n\n return (\n <ThreadContext.Provider value={value}>{children}</ThreadContext.Provider>\n );\n};\n","import { useState, useEffect } from \"react\";\n\nexport interface ScreenSize {\n width: number;\n height: number;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n}\n\n/**\n * Hook to detect screen size and breakpoints\n * @param mobileBreakpoint - Breakpoint for mobile (default: 768px, Tailwind's md)\n * @param tabletBreakpoint - Breakpoint for tablet (default: 1024px, Tailwind's lg)\n */\nexport function useScreenSize(\n mobileBreakpoint: number = 768,\n tabletBreakpoint: number = 1024\n): ScreenSize {\n const [screenSize, setScreenSize] = useState<ScreenSize>(() => {\n // SSR-safe default\n if (typeof window === \"undefined\") {\n return {\n width: 1024,\n height: 768,\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n };\n }\n\n const width = window.innerWidth;\n return {\n width,\n height: window.innerHeight,\n isMobile: width < mobileBreakpoint,\n isTablet: width >= mobileBreakpoint && width < tabletBreakpoint,\n isDesktop: width >= tabletBreakpoint,\n };\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const updateScreenSize = () => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n setScreenSize({\n width,\n height,\n isMobile: width < mobileBreakpoint,\n isTablet: width >= mobileBreakpoint && width < tabletBreakpoint,\n isDesktop: width >= tabletBreakpoint,\n });\n };\n\n // Set initial size\n updateScreenSize();\n\n // Listen for resize events\n window.addEventListener(\"resize\", updateScreenSize);\n\n return () => {\n window.removeEventListener(\"resize\", updateScreenSize);\n };\n }, [mobileBreakpoint, tabletBreakpoint]);\n\n return screenSize;\n}\n\n","import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from \"react\";\nimport { useScreenSize } from \"@/hooks/use-screen-size\";\n\nexport interface SidebarContextValue {\n leftCollapsed: boolean;\n rightCollapsed: boolean;\n setLeftCollapsed: (collapsed: boolean) => void;\n setRightCollapsed: (collapsed: boolean) => void;\n leftCollapsible: boolean;\n rightCollapsible: boolean;\n}\n\nexport const SidebarContext = createContext<SidebarContextValue | undefined>(\n undefined\n);\n\nexport function useSidebar() {\n const context = useContext(SidebarContext);\n if (context === undefined) {\n throw new Error(\"useSidebar must be used within a SidebarProvider\");\n }\n return context;\n}\n\nexport interface SidebarProviderProps {\n children: React.ReactNode;\n defaultLeftCollapsed?: boolean;\n defaultRightCollapsed?: boolean;\n}\n\nexport function SidebarProvider({\n children,\n defaultLeftCollapsed,\n defaultRightCollapsed,\n}: SidebarProviderProps) {\n const { isMobile, isTablet } = useScreenSize();\n const isSmallScreen = isMobile || isTablet;\n\n // Internal state for uncontrolled mode\n const [leftCollapsed, setLeftCollapsed] = useState(() => {\n if (defaultLeftCollapsed !== undefined) return defaultLeftCollapsed;\n // Initialize collapsed on small screens\n if (typeof window !== \"undefined\") {\n return window.innerWidth < 1024;\n }\n return false;\n });\n\n const [rightCollapsed, setRightCollapsed] = useState(() => {\n if (defaultRightCollapsed !== undefined) return defaultRightCollapsed;\n // Initialize collapsed on small screens\n if (typeof window !== \"undefined\") {\n return window.innerWidth < 1024;\n }\n return false;\n });\n\n // Auto-collapse sidebars when transitioning to mobile/tablet devices\n useEffect(() => {\n if (isSmallScreen) {\n setLeftCollapsed(true);\n setRightCollapsed(true);\n }\n }, [isSmallScreen]);\n\n const handleLeftToggle = useCallback((collapsed: boolean) => {\n setLeftCollapsed(collapsed);\n }, []);\n\n const handleRightToggle = useCallback((collapsed: boolean) => {\n setRightCollapsed(collapsed);\n }, []);\n\n const contextValue = useMemo(\n () => ({\n leftCollapsed,\n rightCollapsed,\n setLeftCollapsed: handleLeftToggle,\n setRightCollapsed: handleRightToggle,\n leftCollapsible: true,\n rightCollapsible: true,\n }),\n [leftCollapsed, rightCollapsed, handleLeftToggle, handleRightToggle]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\n","import { createContext, useContext, useEffect, useState } from \"react\";\n\ntype Theme = \"light\" | \"dark\" | \"system\";\n\ninterface ThemeContextType {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n resolvedTheme: \"light\" | \"dark\";\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [theme, setThemeState] = useState<Theme>(\"system\");\n const [resolvedTheme, setResolvedTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n // Initialize theme from localStorage on client side only\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n const stored = localStorage.getItem(\"theme\") as Theme | null;\n if (stored) {\n setThemeState(stored);\n }\n }\n }, []);\n\n // Update resolved theme based on theme preference\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n if (theme === \"system\") {\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const updateResolvedTheme = () => {\n setResolvedTheme(mediaQuery.matches ? \"dark\" : \"light\");\n };\n\n updateResolvedTheme();\n mediaQuery.addEventListener(\"change\", updateResolvedTheme);\n\n return () => mediaQuery.removeEventListener(\"change\", updateResolvedTheme);\n } else {\n setResolvedTheme(theme);\n }\n }\n }, [theme]);\n\n // Apply theme class to document\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n const root = document.documentElement;\n \n if (resolvedTheme === \"dark\") {\n root.classList.add(\"dark\");\n } else {\n root.classList.remove(\"dark\");\n }\n }\n }, [resolvedTheme]);\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n if (typeof window !== \"undefined\") {\n localStorage.setItem(\"theme\", newTheme);\n }\n };\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, resolvedTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n}\n\n","import { useContext, useEffect, useRef } from \"react\";\nimport { MelonyContext, MelonyContextValue } from \"@/providers/melony-provider\";\nimport { Event } from \"melony\";\n\nexport interface UseMelonyOptions {\n initialEvents?: Event[];\n}\n\nexport const useMelony = (options?: UseMelonyOptions): MelonyContextValue => {\n const context = useContext(MelonyContext);\n if (context === undefined) {\n throw new Error(\"useMelony must be used within a MelonyClientProvider\");\n }\n\n const { client, reset } = context;\n const { initialEvents } = options || {};\n const prevInitialEventsRef = useRef<string | undefined>(undefined);\n\n useEffect(() => {\n // Serialize current initialEvents for comparison\n const currentSerialized = initialEvents\n ? JSON.stringify(initialEvents)\n : undefined;\n\n // Reset when initialEvents changes (e.g., when switching threads)\n if (currentSerialized !== prevInitialEventsRef.current) {\n if (initialEvents) {\n reset(initialEvents);\n } else {\n reset([]);\n }\n prevInitialEventsRef.current = currentSerialized;\n }\n }, [client, initialEvents, reset]);\n\n return context;\n};\n","import { useContext } from \"react\";\nimport { ThreadContext, ThreadContextValue } from \"@/providers/thread-provider\";\n\nexport const useThreads = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (context === undefined) {\n throw new Error(\"useThreads must be used within a ThreadProvider\");\n }\n return context;\n};\n\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 resize-none rounded-xl border px-3 py-3 text-base transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n \"h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-colors overflow-hidden group/badge\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary:\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\n destructive:\n \"bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20\",\n outline:\n \"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/30\",\n ghost:\n \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nfunction Badge({\n className,\n variant = \"default\",\n render,\n ...props\n}: useRender.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>) {\n return useRender({\n defaultTagName: \"span\",\n props: mergeProps<\"span\">(\n {\n className: cn(badgeVariants({ className, variant })),\n },\n props\n ),\n render,\n state: {\n slot: \"badge\",\n variant,\n },\n });\n}\n\nexport { Badge, badgeVariants };\n","import React from \"react\";\nimport { Button } from \"./ui/button\";\nimport { Textarea } from \"./ui/textarea\";\nimport { Badge } from \"./ui/badge\";\nimport { cn } from \"@/lib/utils\";\nimport {\n IconArrowUp,\n IconChevronDown,\n IconLoader2,\n IconPaperclip,\n IconX,\n IconFile,\n IconFileText,\n} from \"@tabler/icons-react\";\nimport { ComposerOption, ComposerOptionGroup } from \"../types\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\";\n\ninterface ComposerProps {\n value: string;\n onChange: (value: string) => void;\n onSubmit: (state?: Record<string, any>) => void;\n placeholder?: string;\n isLoading?: boolean;\n className?: string;\n options?: ComposerOptionGroup[];\n autoFocus?: boolean;\n defaultSelectedIds?: string[];\n fileAttachments?: {\n enabled?: boolean;\n accept?: string; // e.g., \"image/*,.pdf\" for file input accept attribute\n maxFiles?: number; // Maximum number of files allowed\n maxFileSize?: number; // Maximum file size in bytes\n };\n}\n\nexport function Composer({\n value,\n onChange,\n onSubmit,\n placeholder = \"Type a message...\",\n isLoading,\n className,\n options = [],\n autoFocus = false,\n defaultSelectedIds = [],\n fileAttachments,\n}: ComposerProps) {\n const enabled = fileAttachments?.enabled || false;\n const accept = fileAttachments?.accept;\n const maxFiles = fileAttachments?.maxFiles ?? 10;\n const maxFileSize = fileAttachments?.maxFileSize ?? 10 * 1024 * 1024;\n const [selectedOptions, setSelectedOptions] = React.useState<Set<string>>(\n () => new Set(defaultSelectedIds)\n );\n const [attachedFiles, setAttachedFiles] = React.useState<File[]>([]);\n const [previews, setPreviews] = React.useState<\n { name: string; type: string; url: string; size: number }[]\n >([]);\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n const newPreviews = attachedFiles.map((file) => ({\n name: file.name,\n type: file.type,\n size: file.size,\n url: file.type.startsWith(\"image/\") ? URL.createObjectURL(file) : \"\",\n }));\n setPreviews(newPreviews);\n\n return () => {\n newPreviews.forEach((p) => {\n if (p.url) URL.revokeObjectURL(p.url);\n });\n };\n }, [attachedFiles]);\n\n const toggleOption = (\n id: string,\n groupOptions?: ComposerOption[],\n type: \"single\" | \"multiple\" = \"multiple\"\n ) => {\n const next = new Set(selectedOptions);\n if (type === \"single\") {\n const isAlreadySelected = next.has(id);\n // Remove all other options from this group\n if (groupOptions) {\n groupOptions.forEach((o) => next.delete(o.id));\n }\n\n if (!isAlreadySelected) {\n next.add(id);\n }\n } else {\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n }\n setSelectedOptions(next);\n };\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n\n // Filter out files that are too large\n const validFiles = files.filter((file) => {\n if (file.size > maxFileSize) {\n // You might want to show a toast/error here\n console.warn(\n `File ${file.name} exceeds maximum size of ${maxFileSize} bytes`\n );\n return false;\n }\n return true;\n });\n\n // Check if adding these files would exceed maxFiles\n const remainingSlots = maxFiles - attachedFiles.length;\n const filesToAdd = validFiles.slice(0, remainingSlots);\n\n if (filesToAdd.length < validFiles.length) {\n console.warn(\n `Only ${filesToAdd.length} files can be added (max: ${maxFiles})`\n );\n }\n\n setAttachedFiles((prev) => [...prev, ...filesToAdd]);\n\n // Reset the input so the same file can be selected again\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const handleRemoveFile = (index: number) => {\n setAttachedFiles((prev) => prev.filter((_, i) => i !== index));\n };\n\n const handleInternalSubmit = async () => {\n const state: Record<string, any> = {};\n\n // Handle grouped options\n options.forEach((group) => {\n const selectedInGroup = group.options.filter((o) =>\n selectedOptions.has(o.id)\n );\n\n if (selectedInGroup.length > 0) {\n if (group.type === \"single\") {\n state[group.id] = selectedInGroup[0].value;\n } else {\n state[group.id] = selectedInGroup.map((o) => ({\n id: o.id,\n value: o.value,\n }));\n }\n }\n });\n\n // Convert files to base64 before including in state\n if (attachedFiles.length > 0) {\n const filePromises = attachedFiles.map((file) => {\n return new Promise<{\n name: string;\n type: string;\n size: number;\n data: string; // base64 string\n }>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const base64 = reader.result as string;\n if (!base64) {\n reject(new Error(\"FileReader returned empty result\"));\n return;\n }\n\n resolve({\n name: file.name,\n type: file.type,\n size: file.size,\n data: base64,\n });\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = (error) => {\n reject(new Error(`Failed to read file ${file.name}: ${error}`));\n };\n reader.onabort = () => {\n reject(new Error(`File read aborted for ${file.name}`));\n };\n reader.readAsDataURL(file);\n });\n });\n\n try {\n const convertedFiles = await Promise.all(filePromises);\n if (convertedFiles.length > 0) {\n state.files = convertedFiles;\n }\n } catch (error) {\n console.error(\"Failed to convert files to base64:\", error);\n // Don't include files if conversion fails\n }\n }\n\n onSubmit(state);\n\n // Clear files after submission\n setAttachedFiles([]);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleInternalSubmit().catch(console.error);\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent) => {\n if (!enabled) return;\n\n const items = Array.from(e.clipboardData.items);\n const files = items\n .map((item) => item.getAsFile())\n .filter((file): file is File => file !== null);\n\n if (files.length > 0) {\n // Create a fake ChangeEvent-like object or just call a shared handler\n const remainingSlots = maxFiles - attachedFiles.length;\n const validFiles = files.filter((f) => f.size <= maxFileSize);\n const filesToAdd = validFiles.slice(0, remainingSlots);\n\n if (filesToAdd.length > 0) {\n setAttachedFiles((prev) => [...prev, ...filesToAdd]);\n }\n }\n };\n\n return (\n <div className={cn(\"relative flex flex-col w-full\", className)}>\n <div className=\"relative flex flex-col w-full border-input border-[1.5px] rounded-3xl bg-background shadow-sm focus-within:border-ring transition-all p-2\">\n {previews.length > 0 && (\n <div className=\"flex flex-wrap gap-3 p-2 px-3 pb-3\">\n {previews.map((preview, index) => (\n <div\n key={index}\n className=\"group relative flex flex-col items-center justify-center w-20 h-20 rounded-xl border bg-muted/30 overflow-hidden shadow-sm\"\n >\n {preview.type.startsWith(\"image/\") ? (\n <img\n src={preview.url}\n alt={preview.name}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center p-2 text-center\">\n {preview.type.includes(\"text\") ||\n preview.type.includes(\"pdf\") ? (\n <IconFileText className=\"h-8 w-8 text-muted-foreground\" />\n ) : (\n <IconFile className=\"h-8 w-8 text-muted-foreground\" />\n )}\n <span className=\"text-[9px] truncate w-full px-1 mt-1 text-muted-foreground\">\n {preview.name}\n </span>\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => handleRemoveFile(index)}\n className=\"absolute top-1 right-1 p-1 rounded-full bg-foreground/10 hover:bg-foreground/20 backdrop-blur-md opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n <Textarea\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n className=\"min-h-[44px] max-h-[200px] border-none bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0 px-3 py-2 text-[15px] resize-none\"\n autoFocus={autoFocus}\n />\n <div className=\"flex justify-between items-center px-1\">\n <div className=\"flex items-center gap-1\">\n {/* File attachment UI - only show if enabled */}\n {enabled && (\n <>\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={accept}\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={isLoading || attachedFiles.length >= maxFiles}\n />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => fileInputRef.current?.click()}\n disabled={isLoading || attachedFiles.length >= maxFiles}\n className=\"text-muted-foreground\"\n title=\"Attach file\"\n >\n <IconPaperclip className=\"h-4 w-4\" />\n {attachedFiles.length > 0 && (\n <Badge className=\"ml-1 h-[18px] min-w-[18px] px-1.5 text-[10px]\">\n {attachedFiles.length}\n </Badge>\n )}\n </Button>\n </>\n )}\n\n {/* Grouped options dropdowns */}\n {options.map((group) => {\n const selectedInGroup = group.options.filter((o) =>\n selectedOptions.has(o.id)\n );\n const label =\n selectedInGroup.length === 0\n ? group.label\n : selectedInGroup.length === 1\n ? selectedInGroup[0].label\n : group.label;\n\n const isSingle = group.type === \"single\";\n\n return (\n <DropdownMenu key={group.id}>\n <DropdownMenuTrigger\n render={(props) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n {...props}\n className={cn(\n \"gap-2\",\n selectedInGroup.length > 0\n ? \"text-foreground bg-muted/50\"\n : \"text-muted-foreground\"\n )}\n >\n {label}\n {selectedInGroup.length > 1 && (\n <Badge className=\"h-[18px] min-w-[18px] px-1.5 text-[10px]\">\n {selectedInGroup.length}\n </Badge>\n )}\n <IconChevronDown className=\"h-3 w-3 opacity-50\" />\n </Button>\n )}\n />\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuGroup>\n <DropdownMenuLabel>{group.label}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {group.options.map((option) => (\n <DropdownMenuCheckboxItem\n key={option.id}\n checked={selectedOptions.has(option.id)}\n onCheckedChange={() =>\n toggleOption(\n option.id,\n group.options,\n isSingle ? \"single\" : \"multiple\"\n )\n }\n onSelect={(e) => e.preventDefault()}\n >\n {option.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n })}\n </div>\n <Button\n type=\"submit\"\n disabled={\n (!value.trim() &&\n attachedFiles.length === 0 &&\n selectedOptions.size === 0 &&\n !isLoading) ||\n isLoading\n }\n size=\"icon-lg\"\n onClick={() => handleInternalSubmit().catch(console.error)}\n >\n {isLoading ? (\n <IconLoader2 className=\"h-5 w-5 animate-spin\" />\n ) : (\n <IconArrowUp className=\"h-5 w-5\" />\n )}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-2xl py-6 text-sm ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-2 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-base font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import React from \"react\";\nimport {\n Card as CardBase,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n} from \"../ui/card\";\nimport { CardProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n subtitle,\n className,\n style,\n}) => {\n return (\n <CardBase\n className={cn(\"min-w-96\", className)}\n style={style}\n >\n {(title || subtitle) && (\n <CardHeader className=\"pb-3\">\n {title && <CardTitle className=\"text-lg\">{title}</CardTitle>}\n {subtitle && <CardDescription>{subtitle}</CardDescription>}\n </CardHeader>\n )}\n <CardContent className=\"flex flex-col gap-4\">\n {children as React.ReactNode}\n </CardContent>\n </CardBase>\n );\n};\n","import React from \"react\";\nimport { RowProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Row: React.FC<RowProps> = ({\n children,\n gap = \"md\",\n align = \"start\",\n justify = \"start\",\n wrap = false,\n className,\n style,\n}) => {\n const gapClasses: Record<string, string> = {\n xs: \"gap-0\",\n sm: \"gap-1\",\n md: \"gap-2\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n };\n\n const alignClasses: Record<string, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses: Record<string, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n };\n\n return (\n <div\n className={cn(\n \"flex flex-row w-full\",\n gapClasses[gap as keyof typeof gapClasses] || \"gap-4\",\n alignClasses[align as keyof typeof alignClasses] || \"items-start\",\n justifyClasses[justify as keyof typeof justifyClasses] || \"justify-start\",\n wrap ? \"flex-wrap\" : \"flex-nowrap\",\n className\n )}\n style={style}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { ColProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Col: React.FC<ColProps> = ({\n children,\n gap = \"sm\",\n align = \"start\",\n justify = \"start\",\n width,\n height,\n padding,\n overflow,\n position = \"static\",\n className,\n style,\n}) => {\n const gapClasses: Record<string, string> = {\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n xl: \"gap-8\",\n };\n\n const alignClasses: Record<string, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses: Record<string, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n };\n\n // Automatically add scrollable className for auto/scroll overflow\n const overflowClasses = {\n auto: \"overflow-auto\",\n hidden: \"overflow-hidden\",\n scroll: \"overflow-scroll\",\n visible: \"overflow-visible\",\n };\n\n const positionClasses = {\n static: \"static\",\n relative: \"relative\",\n absolute: \"absolute\",\n fixed: \"fixed\",\n sticky: \"sticky\",\n };\n\n return (\n <div\n className={cn(\n \"flex flex-col\",\n gapClasses[gap as keyof typeof gapClasses] || \"gap-2\",\n alignClasses[align as keyof typeof alignClasses] || \"items-start\",\n justifyClasses[justify as keyof typeof justifyClasses] ||\n \"justify-start\",\n overflow && overflowClasses[overflow as keyof typeof overflowClasses],\n position && positionClasses[position as keyof typeof positionClasses],\n className\n )}\n style={{\n width: width,\n height: height,\n padding: padding,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { BoxProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n padding = \"md\",\n margin,\n background,\n border = false,\n borderRadius,\n width,\n height,\n overflow = \"visible\",\n className,\n style,\n}) => {\n const paddingClasses: Record<string, string> = {\n xs: \"p-1\",\n sm: \"p-2\",\n md: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\",\n };\n\n const overflowClasses = {\n auto: \"overflow-auto\",\n hidden: \"overflow-hidden\",\n scroll: \"overflow-scroll\",\n visible: \"overflow-visible\",\n };\n\n return (\n <div\n className={cn(\n paddingClasses[padding as keyof typeof paddingClasses] || \"p-4\",\n border && \"border rounded-md\",\n overflowClasses[overflow as keyof typeof overflowClasses],\n className\n )}\n style={{\n margin: margin,\n background: background ?? undefined,\n borderRadius: borderRadius,\n width: width,\n height: height,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { SpacerProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Spacer: React.FC<SpacerProps> = ({\n size = \"md\",\n direction = \"vertical\",\n className,\n style,\n}) => {\n const sizeClasses: Record<string, string> = {\n xs: \"p-0.5\",\n sm: \"p-1\",\n md: \"p-2\",\n lg: \"p-4\",\n xl: \"p-8\",\n };\n\n return (\n <div\n className={cn(\n direction === \"vertical\" ? \"w-full\" : \"h-full\",\n sizeClasses[size as keyof typeof sizeClasses] || \"p-2\",\n className\n )}\n style={style}\n />\n );\n};\n","import React from \"react\";\nimport { Separator } from \"../ui/separator\";\nimport { DividerProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = \"horizontal\",\n className,\n style,\n}) => {\n return (\n <Separator\n orientation={orientation as \"horizontal\" | \"vertical\"}\n className={cn(\"my-4\", className)}\n style={style}\n />\n );\n};\n","import React from \"react\";\nimport { ListProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const List: React.FC<ListProps> = ({ children, width, className, style }) => {\n return (\n <div\n className={cn(\"flex flex-col list-none p-0 m-0\", className)}\n style={{\n width: width,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React from \"react\";\nimport { ListItemProps } from \"./component-types\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\n\nexport const ListItem: React.FC<ListItemProps> = ({\n children,\n orientation = \"horizontal\",\n gap = \"md\",\n align,\n justify = \"start\",\n onClickAction,\n width,\n padding = \"md\",\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const paddingClasses: Record<string, string> = {\n xs: \"px-1.5 py-1\",\n sm: \"px-2 py-1.5\",\n md: \"px-3 py-1.5\",\n lg: \"px-4 py-3\",\n xl: \"px-6 py-4\",\n };\n\n const isInteractive = !!onClickAction;\n \n const gapClasses: Record<string, string> = {\n xs: \"gap-1\",\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n xl: \"gap-6\",\n };\n\n const resolvedAlign = align ?? (orientation === \"vertical\" ? \"start\" : \"center\");\n\n const alignClasses: Record<string, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses: Record<string, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n };\n\n const handleClick = () => {\n if (onClickAction) {\n sendEvent(onClickAction as any);\n }\n };\n\n return (\n <div\n onClick={isInteractive ? handleClick : undefined}\n className={cn(\n \"flex rounded-md transition-colors text-sm\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n gapClasses[gap as keyof typeof gapClasses] || \"gap-3\",\n alignClasses[resolvedAlign as keyof typeof alignClasses],\n justifyClasses[justify as keyof typeof justifyClasses],\n paddingClasses[padding as keyof typeof paddingClasses] || \"px-3 py-2\",\n isInteractive ? \"cursor-pointer hover:bg-muted\" : \"cursor-default\",\n className\n )}\n style={{\n width: width,\n ...style,\n }}\n >\n {children as React.ReactNode}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { ImageProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogTrigger,\n DialogClose,\n} from \"@/components/ui/dialog\";\n\nexport const Image: React.FC<ImageProps> = ({\n src,\n alt,\n size = \"sm\",\n className,\n style,\n}) => {\n const [hasError, setHasError] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [open, setOpen] = useState(false);\n\n const sizes = {\n sm: \"h-11\",\n md: \"h-22\",\n lg: \"h-44\",\n };\n\n const handleError = () => {\n setHasError(true);\n setIsLoading(false);\n };\n\n const handleLoad = () => {\n setIsLoading(false);\n };\n\n if (hasError) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center rounded-md border bg-muted text-muted-foreground\",\n sizes[size as keyof typeof sizes] || \"h-11 w-11\",\n className\n )}\n style={style}\n >\n <span className=\"text-[10px]\">Error</span>\n </div>\n );\n }\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger>\n <div\n className={cn(\"relative overflow-hidden rounded-md border cursor-pointer\", className)}\n style={style}\n >\n <img\n src={src}\n alt={alt}\n onError={handleError}\n onLoad={handleLoad}\n className={cn(\n \"block h-auto w-full transition-opacity duration-200 hover:opacity-90\",\n isLoading ? \"opacity-0\" : \"opacity-100\",\n sizes[size as keyof typeof sizes]\n )}\n />\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-muted animate-pulse\" />\n )}\n </div>\n </DialogTrigger>\n <DialogContent\n className=\"max-w-[90vw] max-h-[90vh] p-0 bg-transparent border-none shadow-none\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"relative flex items-center justify-center\">\n <DialogClose className=\"absolute -top-10 right-0 text-white hover:text-gray-300 transition-colors z-10 bg-black/50 rounded-full p-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </DialogClose>\n <img\n src={src}\n alt={alt || \"Enlarged image\"}\n className=\"max-w-full max-h-[90vh] object-contain rounded-lg\"\n />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import React from \"react\";\nimport * as ICONS from \"@tabler/icons-react\";\nimport { IconProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Icon: React.FC<IconProps> = ({\n name,\n size,\n color,\n className,\n style,\n}) => {\n const IconComponent = ICONS[name as keyof typeof ICONS];\n\n if (!IconComponent) return null;\n\n const sizeMap = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 28,\n xxl: 32,\n };\n\n const resolvedSize =\n typeof size === \"string\" && size in sizeMap\n ? sizeMap[size as keyof typeof sizeMap]\n : typeof size === \"number\"\n ? size\n : 20;\n\n return (\n <div\n className={cn(\"inline-flex items-center justify-center\", className)}\n style={style}\n >\n <IconComponent\n size={resolvedSize}\n color={color || \"currentColor\"}\n strokeWidth={1.5}\n />\n </div>\n );\n};\n","import React from \"react\";\nimport { Badge as BadgeBase } from \"../ui/badge\";\nimport { BadgeProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Badge: React.FC<BadgeProps> = ({\n label,\n variant = \"primary\",\n className,\n style,\n}) => {\n const variantMap: Record<string, \"default\" | \"secondary\" | \"destructive\" | \"outline\"> = {\n primary: \"default\",\n secondary: \"secondary\",\n danger: \"destructive\",\n success: \"default\", // Mapping success to default/primary\n warning: \"secondary\", // Mapping warning to secondary\n };\n\n return (\n <BadgeBase\n variant={variantMap[variant as keyof typeof variantMap] || \"default\"}\n className={className}\n style={style}\n >\n {label}\n </BadgeBase>\n );\n};\n","import React, { useState } from \"react\";\nimport { ChartProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Chart: React.FC<ChartProps> = ({\n data,\n chartType = \"bar\",\n size = \"md\",\n showValues = false,\n showGrid = false,\n showTooltips = true,\n className,\n style,\n}) => {\n const [tooltip, setTooltip] = useState<{\n visible: boolean;\n x: number;\n y: number;\n label: string;\n value: number;\n } | null>(null);\n\n // Ensure data is an array\n if (!Array.isArray(data)) {\n return (\n <div className=\"p-4 text-destructive border border-destructive/20 rounded-md bg-destructive/5\">\n Error: Chart data must be an array\n </div>\n );\n }\n\n // Calculate max value for scaling\n const maxValue = Math.max(...data.map((d) => d.value), 1);\n const padding = { top: 40, right: 20, bottom: 40, left: 20 };\n \n const chartWidth =\n size === \"sm\" ? 300 : size === \"md\" ? 450 : size === \"lg\" ? 600 : 800;\n const chartHeight =\n size === \"sm\" ? 150 : size === \"md\" ? 250 : size === \"lg\" ? 350 : 450;\n\n const defaultColors = [\n \"hsl(var(--primary))\",\n \"hsl(var(--chart-1, 217 91% 60%))\",\n \"hsl(var(--chart-2, 142 71% 45%))\",\n \"hsl(var(--chart-3, 31 92% 55%))\",\n \"hsl(var(--chart-4, 346 84% 61%))\",\n \"hsl(var(--chart-5, 271 81% 56%))\",\n ];\n\n const getColor = (index: number, color?: string) => {\n if (color) return color;\n return defaultColors[index % defaultColors.length];\n };\n\n const renderGrid = () => {\n if (!showGrid) return null;\n return [0, 0.25, 0.5, 0.75, 1].map((fraction, i) => (\n <line\n key={i}\n x1={padding.left}\n y1={padding.top + chartHeight * (1 - fraction)}\n x2={chartWidth - padding.right}\n y2={padding.top + chartHeight * (1 - fraction)}\n stroke=\"currentColor\"\n className=\"text-border\"\n strokeDasharray=\"4,4\"\n strokeOpacity={0.5}\n />\n ));\n };\n\n const renderTooltip = () => {\n if (!tooltip || !tooltip.visible) return null;\n\n return (\n <g className=\"pointer-events-none\">\n <rect\n x={tooltip.x - 40}\n y={tooltip.y - 45}\n width={80}\n height={40}\n fill=\"hsl(var(--popover))\"\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n rx={6}\n className=\"shadow-md\"\n />\n <text\n x={tooltip.x}\n y={tooltip.y - 28}\n textAnchor=\"middle\"\n className=\"fill-popover-foreground text-[10px] font-semibold\"\n >\n {tooltip.value}\n </text>\n <text\n x={tooltip.x}\n y={tooltip.y - 14}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[9px]\"\n >\n {tooltip.label}\n </text>\n </g>\n );\n };\n\n const renderBarChart = () => {\n const totalBarSpace = chartWidth - padding.left - padding.right;\n const barSpacing = data.length > 1 ? (totalBarSpace * 0.1) / data.length : 0;\n const actualBarWidth = (totalBarSpace - barSpacing * (data.length + 1)) / data.length;\n\n return (\n <svg width={chartWidth} height={chartHeight + padding.bottom} className=\"overflow-visible\">\n {renderGrid()}\n {data.map((item, index) => {\n const barHeight = (item.value / maxValue) * chartHeight;\n const x = padding.left + barSpacing + index * (actualBarWidth + barSpacing);\n const y = padding.top + chartHeight - barHeight;\n\n return (\n <g key={index}>\n <rect\n x={x}\n y={y}\n width={actualBarWidth}\n height={barHeight}\n fill={getColor(index, item.color)}\n rx={4}\n onMouseEnter={() => showTooltips && setTooltip({ visible: true, x: x + actualBarWidth / 2, y: y - 5, label: item.label, value: item.value })}\n onMouseLeave={() => setTooltip({ visible: false, x: 0, y: 0, label: \"\", value: 0 })}\n className=\"transition-all hover:opacity-80 cursor-pointer\"\n />\n <text\n x={x + actualBarWidth / 2}\n y={padding.top + chartHeight + 20}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[10px]\"\n >\n {item.label}\n </text>\n </g>\n );\n })}\n {showTooltips && renderTooltip()}\n </svg>\n );\n };\n\n const renderLineChart = () => {\n const points = data.map((item, index) => ({\n x: padding.left + (index / Math.max(data.length - 1, 1)) * (chartWidth - padding.left - padding.right),\n y: padding.top + chartHeight - (item.value / maxValue) * chartHeight,\n ...item\n }));\n\n const pathData = points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x} ${p.y}`).join(\" \");\n\n return (\n <svg width={chartWidth} height={chartHeight + padding.bottom} className=\"overflow-visible\">\n {renderGrid()}\n <path d={pathData} fill=\"none\" stroke={getColor(0)} strokeWidth={3} className=\"transition-all\" />\n {points.map((point, index) => (\n <g key={index}>\n <circle\n cx={point.x}\n cy={point.y}\n r={5}\n fill={getColor(index, point.color)}\n stroke=\"hsl(var(--background))\"\n strokeWidth={2}\n onMouseEnter={() => showTooltips && setTooltip({ visible: true, x: point.x, y: point.y - 5, label: point.label, value: point.value })}\n onMouseLeave={() => setTooltip({ visible: false, x: 0, y: 0, label: \"\", value: 0 })}\n className=\"hover:r-6 transition-all cursor-pointer\"\n />\n <text\n x={point.x}\n y={padding.top + chartHeight + 20}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[10px]\"\n >\n {point.label}\n </text>\n </g>\n ))}\n {showTooltips && renderTooltip()}\n </svg>\n );\n };\n\n const renderChart = () => {\n switch (chartType) {\n case \"line\":\n return renderLineChart();\n case \"bar\":\n default:\n return renderBarChart();\n }\n };\n\n return (\n <div className={cn(\"py-4 overflow-x-auto\", className)} style={style}>\n {renderChart()}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { TextProps } from \"./component-types\";\n\nexport const Text: React.FC<TextProps> = ({\n value,\n size = \"md\",\n weight = \"normal\",\n align = \"start\",\n className,\n style,\n}) => {\n const sizeClasses: Record<string, string> = {\n xs: \"text-xs\",\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\",\n xl: \"text-xl\",\n };\n\n const weightClasses: Record<string, string> = {\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n };\n\n const alignClasses: Record<string, string> = {\n start: \"text-left\",\n center: \"text-center\",\n end: \"text-right\",\n stretch: \"text-justify\",\n };\n\n return (\n <span\n className={cn(\n sizeClasses[size as keyof typeof sizeClasses] || \"text-base\",\n weightClasses[weight as keyof typeof weightClasses] || \"font-normal\",\n alignClasses[align as keyof typeof alignClasses] || \"text-left\",\n className\n )}\n style={style}\n >\n {value}\n </span>\n );\n};\n","import React from \"react\";\nimport { HeadingProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Heading: React.FC<HeadingProps> = ({\n value,\n level = 2,\n className,\n style,\n}) => {\n const Tag = `h${level}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n\n const levelClasses: Record<string, string> = {\n h1: \"text-3xl font-bold tracking-tight\",\n h2: \"text-2xl font-semibold tracking-tight\",\n h3: \"text-xl font-semibold tracking-tight\",\n h4: \"text-lg font-semibold tracking-tight\",\n h5: \"text-base font-semibold\",\n h6: \"text-sm font-semibold\",\n };\n\n return (\n <Tag\n className={cn(\n levelClasses[Tag] || levelClasses.h2,\n \"text-foreground\",\n className\n )}\n style={style}\n >\n {value}\n </Tag>\n );\n};\n","import * as React from \"react\"\nimport { Input as InputPrimitive } from \"@base-ui/react/input\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n \"bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-4xl border px-3 py-1 text-base transition-colors file:h-7 file:text-sm file:font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({ className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n \"gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\nimport { Separator } from \"@/components/ui/separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\"gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3 flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\"mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base\", className)}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4 group/field-group @container/field-group flex w-full flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\"data-[invalid=true]:text-destructive gap-3 group/field flex w-full\", {\n variants: {\n orientation: {\n vertical:\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n horizontal:\n \"flex-row items-center [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n responsive:\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n})\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"gap-1 group/field-content flex flex-1 flex-col leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"has-data-checked:bg-primary/5 has-data-checked:border-primary/50 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-xl has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4 group/field-label peer/field-label flex w-fit leading-snug\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50 flex w-fit items-center leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\"-my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2 relative\", className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"text-muted-foreground px-2 bg-background relative mx-auto block w-fit\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { Input as InputBase } from \"../ui/input\";\nimport { Field, FieldTitle } from \"../ui/field\";\nimport { InputProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Input: React.FC<InputProps> = ({\n inputType = \"text\",\n placeholder,\n defaultValue,\n value,\n label,\n name,\n disabled,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n value: e.target.value,\n },\n } as any);\n }\n };\n\n return (\n <Field className={cn(\"w-full\", className)} style={style}>\n {label && <FieldTitle>{label}</FieldTitle>}\n <InputBase\n type={inputType}\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n onChange={handleChange}\n />\n </Field>\n );\n};\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { Textarea as TextareaBase } from \"../ui/textarea\";\nimport { Field, FieldTitle } from \"../ui/field\";\nimport { TextareaProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Textarea: React.FC<TextareaProps> = ({\n placeholder,\n defaultValue,\n value,\n label,\n name,\n disabled,\n rows,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n value: e.target.value,\n },\n } as any);\n }\n };\n\n return (\n <Field className={cn(\"w-full\", className)} style={style}>\n {label && <FieldTitle>{label}</FieldTitle>}\n <TextareaBase\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n rows={rows}\n onChange={handleChange}\n />\n </Field>\n );\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\n\nimport { cn } from \"@/lib/utils\"\nimport { IconSelector, IconCheck, IconChevronUp, IconChevronDown } from \"@tabler/icons-react\"\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1 p-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn(\"flex flex-1 text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-4xl border px-3 py-2 text-sm transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={\n <IconSelector className=\"text-muted-foreground size-4 pointer-events-none\" />\n }\n />\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-36 rounded-2xl shadow-2xl ring-1 duration-100 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto\", className )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-3 py-2.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className=\"flex flex-1 gap-2 shrink-0 whitespace-nowrap\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={<span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\" />}\n >\n <IconCheck className=\"pointer-events-none\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border/50 -mx-1 my-1 h-px pointer-events-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full\", className)}\n {...props}\n >\n <IconChevronUp\n />\n </SelectPrimitive.ScrollUpArrow>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full\", className)}\n {...props}\n >\n <IconChevronDown\n />\n </SelectPrimitive.ScrollDownArrow>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport {\n Select as SelectRoot,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { Field, FieldTitle } from \"../ui/field\";\nimport { SelectProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Select: React.FC<SelectProps> = ({\n options,\n defaultValue,\n value,\n label,\n name,\n disabled,\n placeholder,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleValueChange = (val: string) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n value: val,\n },\n } as any);\n }\n };\n\n return (\n <Field className={cn(\"w-full\", className)} style={style}>\n {label && <FieldTitle>{label}</FieldTitle>}\n <SelectRoot\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n onValueChange={(value) => handleValueChange(value || \"\")}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n </Field>\n );\n};\n","import React from \"react\";\nimport { Label as LabelBase } from \"../ui/label\";\nimport { LabelProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Label: React.FC<LabelProps> = ({\n value,\n htmlFor,\n required,\n className,\n style,\n}) => {\n return (\n <LabelBase\n htmlFor={htmlFor}\n className={cn(\"flex items-center gap-1\", className)}\n style={style}\n >\n {value}\n {required && <span className=\"text-destructive\">*</span>}\n </LabelBase>\n );\n};\n","import React from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { CheckboxProps } from \"./component-types\";\nimport { Label } from \"./Label\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n name,\n checked,\n defaultChecked,\n disabled,\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name || \"\",\n checked: e.target.checked,\n },\n } as any);\n }\n };\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)} style={style}>\n <input\n type=\"checkbox\"\n name={name}\n id={name}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n onChange={handleChange}\n className=\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary disabled:cursor-not-allowed disabled:opacity-50\"\n />\n {label && (\n <Label\n htmlFor={name}\n value={label}\n className={cn(\n \"cursor-pointer select-none text-sm font-medium leading-none\",\n disabled && \"cursor-not-allowed opacity-50\"\n )}\n />\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { RadioGroupProps } from \"./component-types\";\nimport { Label } from \"./Label\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n name,\n options,\n defaultValue,\n value,\n label,\n disabled,\n orientation = \"vertical\",\n onChangeAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChangeAction) {\n sendEvent({\n ...onChangeAction,\n data: {\n name: name,\n value: e.target.value,\n },\n } as any);\n }\n };\n\n return (\n <div className={cn(\"flex flex-col gap-3\", className)} style={style}>\n {label && <Label value={label} className=\"text-sm font-semibold\" />}\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"flex-row gap-4\" : \"flex-col gap-2\"\n )}\n >\n {options.map((option, index) => {\n const radioId = `${name}-${index}`;\n const isDisabled = disabled || option.disabled;\n\n return (\n <div\n key={index}\n className=\"flex items-center gap-2\"\n >\n <input\n type=\"radio\"\n name={name}\n id={radioId}\n value={option.value}\n defaultChecked={\n defaultValue === option.value ? true : undefined\n }\n checked={value === option.value}\n disabled={isDisabled}\n onChange={handleChange}\n className=\"h-4 w-4 border-gray-300 text-primary focus:ring-primary disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <Label\n htmlFor={radioId}\n value={option.label}\n className={cn(\n \"cursor-pointer select-none text-sm font-medium leading-none\",\n isDisabled && \"cursor-not-allowed opacity-50\"\n )}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { Button as ButtonBase } from \"../ui/button\";\nimport { ButtonProps } from \"./component-types\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Button: React.FC<ButtonProps> = ({\n label,\n variant = \"primary\",\n size = \"default\",\n disabled = false,\n fullWidth = false,\n onClickAction,\n className,\n style,\n}) => {\n const { sendEvent } = useMelony();\n\n const variantMap: Record<string, \"default\" | \"secondary\" | \"destructive\" | \"outline\" | \"ghost\" | \"link\"> = {\n primary: \"default\",\n secondary: \"secondary\",\n danger: \"destructive\",\n outline: \"outline\",\n ghost: \"ghost\",\n link: \"link\",\n success: \"default\", // Success doesn't have a direct shadcn mapping in base variant, default is usually primary\n };\n\n return (\n <ButtonBase\n variant={variantMap[variant as keyof typeof variantMap] || \"default\"}\n size={size === \"md\" ? \"default\" : (size as any)}\n disabled={disabled}\n className={cn(fullWidth ? \"w-full\" : undefined, className)}\n style={style}\n onClick={() => {\n if (onClickAction) {\n sendEvent(onClickAction as any);\n }\n }}\n >\n {label}\n </ButtonBase>\n );\n};\n","import React, { useState } from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { FormProps } from \"./component-types\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Form: React.FC<FormProps> = ({ children, onSubmitAction, className, style }) => {\n const { sendEvent } = useMelony();\n const [isSubmitted, setIsSubmitted] = useState(false);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n \n // Prevent double submission\n if (isSubmitted) return;\n \n const formData = new FormData(e.currentTarget);\n const data: Record<string, any> = {};\n formData.forEach((value, key) => {\n data[key] = value;\n });\n\n if (onSubmitAction) {\n setIsSubmitted(true);\n sendEvent({\n ...onSubmitAction,\n data: {\n ...(onSubmitAction.data || {}),\n ...data,\n },\n } as any);\n }\n };\n\n return (\n <form \n onSubmit={handleSubmit} \n className={cn(\"w-full\", className)}\n style={style}\n >\n <fieldset \n disabled={isSubmitted} \n className=\"m-0 border-0 p-0\"\n >\n <div\n className={cn(\n \"flex flex-col gap-4 transition-opacity\",\n isSubmitted && \"opacity-60 pointer-events-none\"\n )}\n >\n {children as React.ReactNode}\n </div>\n </fieldset>\n </form>\n );\n};\n","import React from \"react\";\nimport { StarterPrompt } from \"@/types\";\nimport { Button } from \"./elements\";\n\ninterface StarterPromptsProps {\n prompts: StarterPrompt[];\n onPromptClick: (prompt: string) => void;\n}\n\nexport function StarterPrompts({\n prompts,\n onPromptClick,\n}: StarterPromptsProps) {\n if (!prompts || prompts.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col space-y-4 animate-in fade-in slide-in-from-bottom-4 duration-500 mt-auto max-w-2xl\">\n <div className=\"space-y-2\">\n <h2 className=\"text-2xl font-semibold tracking-tight\">\n What can I help with today?\n </h2>\n </div>\n <div className=\"flex flex-col gap-2 w-full\">\n {prompts.map((item, index) => (\n <Button\n key={index}\n label={item.label}\n variant=\"ghost\"\n size=\"lg\"\n onClickAction={{\n type: \"text\",\n role: \"user\",\n data: { content: item.prompt },\n }}\n className=\"w-full justify-start\"\n />\n ))}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { UINode } from \"melony\";\nimport * as Elements from \"./elements\";\n\nexport interface UIRendererProps {\n node: UINode;\n}\n\n/**\n * Maps UINode types to refined React elements aligned with shadcn.\n * UI is built via elements always starting with a card element as a root.\n * Children are always rendered elements, never raw strings.\n */\nexport function UIRenderer({ node }: UIRendererProps) {\n const { type, props, children } = node;\n\n // Map node type to element component\n const typeMap: Record<string, React.FC<any>> = {\n card: Elements.Card,\n button: Elements.Button,\n row: Elements.Row,\n col: Elements.Col,\n text: Elements.Text,\n heading: Elements.Heading,\n badge: Elements.Badge,\n input: Elements.Input,\n textarea: Elements.Textarea,\n select: Elements.Select,\n checkbox: Elements.Checkbox,\n radioGroup: Elements.RadioGroup,\n spacer: Elements.Spacer,\n divider: Elements.Divider,\n box: Elements.Box,\n image: Elements.Image,\n icon: Elements.Icon,\n list: Elements.List,\n listItem: Elements.ListItem,\n form: Elements.Form,\n chart: Elements.Chart,\n label: Elements.Label,\n };\n\n const Component = typeMap[type];\n\n if (!Component) {\n return (\n <div className=\"text-destructive italic text-sm p-2 border border-dashed rounded border-destructive/50 bg-destructive/5\">\n [Unknown component: {type}]\n </div>\n );\n }\n\n // Recursively render children\n // These will be passed as React.ReactNode to the components\n const renderedChildren = children?.map((child, i) => (\n <UIRenderer key={i} node={child} />\n ));\n\n const componentProps = { ...props };\n\n return <Component {...componentProps}>{renderedChildren}</Component>;\n}\n","import React from \"react\";\nimport { Event } from \"melony\";\nimport { UIRenderer } from \"@/components/ui-renderer\";\n\ninterface MessageContentProps {\n events: Event[];\n}\n\nexport function MessageContent({ events }: MessageContentProps) {\n // Identify the latest index for each named slot in this message\n const latestSlotIndexes = new Map<string, number>();\n events.forEach((event, index) => {\n if (event.slot) {\n latestSlotIndexes.set(event.slot, index);\n }\n });\n\n return (\n <>\n {events.map((event, index) => {\n // \"Latest Wins\" Logic:\n // If this event has a slot but a newer event exists for that same slot, hide this one.\n if (event.slot && latestSlotIndexes.get(event.slot) !== index) {\n return null;\n }\n\n if (event.type === \"text-delta\") {\n return <span key={index}>{event.data?.delta}</span>;\n }\n if (event.type === \"text\") {\n return (\n <p key={index}>\n {event.data?.content || event.data?.text}\n </p>\n );\n }\n if (event.ui) {\n return <UIRenderer key={index} node={event.ui} />;\n }\n return null;\n })}\n </>\n );\n}\n\n","import React from \"react\";\nimport { Message } from \"@/types\";\nimport { cn } from \"@/lib/utils\";\nimport { MessageContent } from \"./message-content\";\n\ninterface MessageProps {\n message: Message;\n}\n\nexport function MessageBubble({ message }: MessageProps) {\n const isUser = message.role === \"user\";\n\n return (\n <div\n className={cn(\n \"flex flex-col\",\n isUser ? \"items-end\" : \"items-start\"\n )}\n >\n <div\n className={cn(\n \"flex flex-col items-start max-w-[85%] rounded-2xl px-4 py-2 space-y-4 whitespace-pre-wrap\",\n isUser\n ? \"bg-primary text-primary-foreground\"\n : \"px-0 py-0 text-foreground\"\n )}\n >\n <MessageContent events={message.content} />\n </div>\n </div>\n );\n}\n\n","import { useState } from \"react\";\nimport {\n IconChevronUp,\n IconChevronDown,\n IconLoader2,\n} from \"@tabler/icons-react\";\n\ninterface LoadingIndicatorProps {\n status?: {\n message: string;\n details?: string;\n };\n}\n\nexport function LoadingIndicator({ status }: LoadingIndicatorProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const message = status?.message || \"Processing...\";\n const details = status?.details;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2 text-muted-foreground group\">\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n <div className=\"animate-pulse\">{message}</div>\n {details && (\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"p-0.5 hover:bg-muted rounded-sm transition-colors flex items-center justify-center\"\n title={isExpanded ? \"Hide details\" : \"Show details\"}\n >\n {isExpanded ? (\n <IconChevronUp className=\"size-3.5 opacity-50 group-hover:opacity-100\" />\n ) : (\n <IconChevronDown className=\"size-3.5 opacity-50 group-hover:opacity-100\" />\n )}\n </button>\n )}\n </div>\n {isExpanded && details && (\n <div className=\"text-[10px] leading-relaxed font-mono bg-muted/30 p-2.5 rounded border border-border/50 max-h-64 overflow-y-auto whitespace-pre-wrap text-muted-foreground shadow-sm\">\n {details}\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\n\ninterface ErrorDisplayProps {\n error: Error;\n}\n\nexport function ErrorDisplay({ error }: ErrorDisplayProps) {\n return (\n <div className=\"text-destructive p-2 border border-destructive rounded-md bg-destructive/10\">\n {error.message}\n </div>\n );\n}\n\n","import { useMemo } from \"react\";\nimport { Message } from \"@/types\";\nimport { MessageBubble } from \"./message\";\nimport { LoadingIndicator } from \"./loading-indicator\";\nimport { ErrorDisplay } from \"./error-display\";\n\ninterface MessageListProps {\n messages: Message[];\n isLoading?: boolean;\n error?: Error | null;\n loadingStatus?: {\n message: string;\n details?: string;\n };\n}\n\nexport function MessageList({\n messages,\n isLoading,\n error,\n loadingStatus,\n}: MessageListProps) {\n if (messages.length === 0) {\n return null;\n }\n\n // Check if the last message has text-delta events (text is streaming)\n const isTextStreaming = useMemo(() => {\n if (messages.length === 0 || !isLoading) return false;\n const lastMessage = messages[messages.length - 1];\n return lastMessage.content.some((event) => event.type === \"text-delta\");\n }, [messages, isLoading]);\n\n console.log(\"MESSAGES\", messages);\n\n return (\n <div className=\"space-y-6\">\n {messages.map((message, index) => (\n <MessageBubble key={index} message={message} />\n ))}\n {isLoading && !isTextStreaming && (\n <LoadingIndicator status={loadingStatus} />\n )}\n {error && <ErrorDisplay error={error} />}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useMemo } from \"react\";\nimport { useMelony } from \"@/hooks/use-melony\";\nimport { cn } from \"@/lib/utils\";\nimport { StarterPrompt, ComposerOptionGroup, Message } from \"@/types\";\nimport { Event } from \"melony\";\nimport { Composer } from \"./composer\";\nimport { StarterPrompts } from \"./starter-prompts\";\nimport { MessageList } from \"./message-list\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { LoadingIndicator } from \"./loading-indicator\";\n\ninterface ThreadProps {\n className?: string;\n placeholder?: string;\n starterPrompts?: StarterPrompt[];\n onStarterPromptClick?: (prompt: string) => void;\n options?: ComposerOptionGroup[];\n autoFocus?: boolean;\n defaultSelectedIds?: string[];\n}\n\nexport function Thread({\n className,\n placeholder = \"Type a message...\",\n starterPrompts: localStarterPrompts,\n onStarterPromptClick,\n options: localOptions,\n autoFocus = false,\n defaultSelectedIds,\n}: ThreadProps) {\n const { activeThreadId, threadEvents, isLoadingEvents } = useThreads();\n\n const { messages, isLoading, error, sendEvent, loadingStatus, config } =\n useMelony({\n initialEvents: threadEvents,\n });\n\n const starterPrompts = localStarterPrompts ?? config?.starterPrompts;\n const options = localOptions ?? config?.options;\n\n const fileAttachments = config?.fileAttachments;\n\n // Extract defaultSelectedIds from all option groups and combine with explicitly passed ones\n const allDefaultSelectedIds = useMemo(() => {\n const defaultSelectedIdsFromOptions =\n options?.flatMap((group) => group.defaultSelectedIds ?? []) ?? [];\n\n return [\n ...new Set([\n ...defaultSelectedIdsFromOptions,\n ...(defaultSelectedIds ?? []),\n ]),\n ];\n }, [options, defaultSelectedIds]);\n\n const [input, setInput] = useState(\"\");\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }, [messages]);\n\n const handleSubmit = async (\n state?: Record<string, any>,\n overrideInput?: string\n ) => {\n const text = (overrideInput ?? input).trim();\n const hasFiles =\n state?.files && Array.isArray(state.files) && state.files.length > 0;\n const hasOptions =\n state && Object.keys(state).filter((k) => k !== \"threadId\").length > 0;\n\n // Allow submission if there's text OR files OR options\n if ((!text && !hasFiles && !hasOptions) || isLoading) return;\n\n if (!overrideInput) setInput(\"\");\n\n await sendEvent(\n {\n type: \"text\",\n role: \"user\",\n data: { content: text || \"\" },\n state: {\n ...state,\n threadId: activeThreadId ?? undefined,\n },\n }\n );\n };\n\n const handleStarterPromptClick = (prompt: string) => {\n if (onStarterPromptClick) {\n onStarterPromptClick(prompt);\n } else {\n handleSubmit(undefined, prompt);\n }\n };\n\n const showStarterPrompts =\n messages.length === 0 &&\n starterPrompts &&\n starterPrompts.length > 0 &&\n !isLoadingEvents;\n\n return (\n <div\n className={cn(\"relative flex flex-col h-full bg-background\", className)}\n >\n <div className=\"flex-1 overflow-y-auto p-4 pb-36\">\n <div\n className={cn(\n \"max-w-[48rem] mx-auto w-full p-4\",\n showStarterPrompts && \"min-h-full flex flex-col\"\n )}\n >\n {isLoadingEvents && messages.length === 0 ? (\n <div className=\"flex items-center justify-center py-20\">\n <LoadingIndicator status={{ message: \"Loading messages...\" }} />\n </div>\n ) : (\n <>\n {showStarterPrompts && (\n <StarterPrompts\n prompts={starterPrompts}\n onPromptClick={handleStarterPromptClick}\n />\n )}\n <MessageList\n messages={messages}\n isLoading={isLoading}\n error={error}\n loadingStatus={loadingStatus}\n />\n </>\n )}\n </div>\n <div ref={messagesEndRef} />\n </div>\n\n <div className=\"absolute bottom-0 p-4 w-full\">\n <div className=\"max-w-[48rem] mx-auto\">\n <Composer\n value={input}\n onChange={setInput}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n isLoading={isLoading}\n options={options}\n autoFocus={autoFocus}\n defaultSelectedIds={allDefaultSelectedIds}\n fileAttachments={fileAttachments}\n />\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface ChatHeaderProps {\n /**\n * The title to display in the header. Can be a string or a React node for custom content.\n */\n title?: string | React.ReactNode;\n\n /**\n * Content to render on the left side of the header (e.g., back button).\n */\n leftContent?: React.ReactNode;\n\n /**\n * Content to render on the right side of the header (e.g., action buttons).\n */\n rightContent?: React.ReactNode;\n\n /**\n * Custom className for the header container.\n */\n className?: string;\n\n /**\n * Custom className for the title element (only applies when title is a string).\n */\n titleClassName?: string;\n\n /**\n * Custom children to render inside the header. If provided, this takes precedence over title/leftContent/rightContent.\n */\n children?: React.ReactNode;\n}\n\n/**\n * A shared, customizable header component for chat interfaces.\n * Used consistently across ChatFull, ChatSidebar, and ChatPopup components.\n */\nexport function ChatHeader({\n leftContent,\n rightContent,\n className,\n children,\n}: ChatHeaderProps) {\n // If children are provided, use them for complete customization\n if (children) {\n return (\n <div\n className={cn(\n \"px-2 border-b border-border h-14 flex items-center shrink-0\",\n className\n )}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"px-2 border-b border-border h-14 flex items-center justify-between shrink-0\",\n className\n )}\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {leftContent}\n </div>\n {rightContent && (\n <div className=\"flex items-center gap-1 shrink-0 ml-2\">\n {rightContent}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { IconDotsVertical } from \"@tabler/icons-react\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface DropdownProps {\n className?: string;\n trigger?: React.ReactNode;\n triggerClassName?: string;\n items: {\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n }[];\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n className,\n trigger,\n triggerClassName,\n items,\n}) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={triggerClassName}\n render={(props) => (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n {...props}\n onClick={(e) => {\n e.stopPropagation();\n props.onClick?.(e);\n }}\n >\n {trigger || <IconDotsVertical className=\"size-3.5\" />}\n </Button>\n )}\n />\n <DropdownMenuContent align=\"start\" className={cn(\"w-32\", className)}>\n {items.map((item) => (\n <DropdownMenuItem key={item.label} onClick={item.onClick}>\n {item.icon}\n <span>{item.label}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n","import * as React from \"react\";\nimport { IconTrash } from \"@tabler/icons-react\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { Dropdown } from \"./elements/Dropdown\";\nimport { List, ListItem } from \"./elements\";\n\nexport interface ThreadListProps {\n className?: string;\n emptyState?: React.ReactNode;\n}\n\nexport const ThreadList: React.FC<ThreadListProps> = ({ className }) => {\n const { threads, activeThreadId, selectThread, deleteThread, isLoading } =\n useThreads();\n\n const sortedThreads = React.useMemo(() => {\n return [...threads].sort((a, b) => {\n const dateA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;\n const dateB = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;\n return dateB - dateA;\n });\n }, [threads]);\n\n const handleDelete = async (threadId: string) => {\n try {\n await deleteThread(threadId);\n } catch (error) {\n console.error(\"Failed to delete thread:\", error);\n }\n };\n\n return (\n <List className={className}>\n {sortedThreads.map((thread) => {\n const isActive = thread.id === activeThreadId;\n return (\n <ListItem\n key={thread.id}\n onClickAction={{\n type: \"client:navigate\",\n data: {\n url: `?threadId=${thread.id}`,\n },\n }}\n className={\n isActive\n ? \"bg-muted text-foreground group\"\n : \"hover:bg-muted/50 text-muted-foreground hover:text-foreground group\"\n }\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">\n {thread.title || `Thread ${thread.id.slice(0, 8)}`}\n </p>\n </div>\n\n <div className=\"shrink-0 flex items-center opacity-0 group-hover:opacity-100 transition-opacity\">\n <Dropdown\n items={[\n {\n label: \"Delete\",\n icon: <IconTrash className=\"size-4\" />,\n onClick: () => handleDelete(thread.id),\n },\n ]}\n />\n </div>\n </ListItem>\n );\n })}\n </List>\n );\n};\n","import { useState } from \"react\";\nimport {\n IconArrowLeft,\n IconHistory,\n IconMessage,\n IconPlus,\n IconX,\n} from \"@tabler/icons-react\";\nimport { Thread } from \"./thread\";\nimport { Button } from \"./ui/button\";\nimport { Card } from \"./ui/card\";\nimport { cn } from \"@/lib/utils\";\nimport { StarterPrompt, ComposerOptionGroup } from \"@/types\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { ChatHeader, ChatHeaderProps } from \"./chat-header\";\nimport { ThreadList } from \"./thread-list\";\n\nexport interface PopupChatProps {\n title?: string;\n placeholder?: string;\n starterPrompts?: StarterPrompt[];\n options?: ComposerOptionGroup[];\n defaultOpen?: boolean;\n /**\n * Props for customizing the header. Note: leftContent and rightContent in headerProps\n * will be merged with the default popup header actions (back, history, new chat, close).\n */\n headerProps?: Omit<ChatHeaderProps, \"title\" | \"leftContent\" | \"rightContent\">;\n /**\n * IDs of options to be selected by default\n */\n defaultSelectedIds?: string[];\n}\n\nexport function PopupChat({\n title = \"Chat\",\n placeholder = \"Message the AI\",\n starterPrompts,\n options,\n defaultOpen = false,\n headerProps,\n defaultSelectedIds,\n}: PopupChatProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [view, setView] = useState<\"chat\" | \"history\">(\"chat\");\n const { createThread } = useThreads();\n\n const handleNewChat = async () => {\n try {\n await createThread();\n setView(\"chat\");\n } catch (error) {\n console.error(\"Failed to create new chat:\", error);\n }\n };\n\n return (\n <div className=\"fixed bottom-6 right-6 z-50 flex flex-col items-end gap-4 font-sans\">\n {isOpen && (\n <Card className=\"py-0 w-[440px] h-[640px] gap-0 flex flex-col overflow-hidden border bg-background/95 backdrop-blur supports-backdrop-filter:bg-background/60 shadow-2xl animate-in fade-in zoom-in-95 duration-200 origin-bottom-right\">\n <ChatHeader\n title={view === \"history\" ? \"History\" : title}\n leftContent={\n view === \"history\" ? (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => setView(\"chat\")}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconArrowLeft className=\"size-4\" />\n </Button>\n ) : undefined\n }\n rightContent={\n <>\n {view === \"chat\" && (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => setView(\"history\")}\n className=\"text-muted-foreground hover:text-foreground\"\n title=\"History\"\n >\n <IconHistory className=\"size-4\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={handleNewChat}\n className=\"text-muted-foreground hover:text-foreground\"\n title=\"New Chat\"\n >\n <IconPlus className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => setIsOpen(false)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"size-4\" />\n </Button>\n </>\n }\n {...headerProps}\n />\n <div className=\"flex-1 overflow-hidden\">\n {view === \"chat\" ? (\n <Thread\n placeholder={placeholder}\n starterPrompts={starterPrompts}\n options={options}\n className=\"h-full\"\n defaultSelectedIds={defaultSelectedIds}\n />\n ) : (\n <ThreadList\n className=\"h-full\"\n />\n )}\n </div>\n </Card>\n )}\n\n <Button\n size=\"icon-lg\"\n className={cn(\n \"h-14 w-14 rounded-full shadow-2xl transition-all hover:scale-105 active:scale-95\",\n isOpen\n ? \"bg-muted text-muted-foreground hover:bg-muted/80\"\n : \"bg-primary text-primary-foreground\"\n )}\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <IconX className=\"size-6\" />\n ) : (\n <IconMessage className=\"size-6\" />\n )}\n </Button>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useSidebar } from \"../providers/sidebar-provider\";\n\nexport interface SidebarProps {\n side: \"left\" | \"right\";\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * A sidebar component that responds to ChatSidebarContext.\n * Typically used within ChatFull or a layout with ChatSidebarProvider.\n */\nexport function Sidebar({ side, children, className }: SidebarProps) {\n const { leftCollapsed, rightCollapsed } = useSidebar();\n const collapsed = side === \"left\" ? leftCollapsed : rightCollapsed;\n\n return (\n <div\n className={cn(\n \"flex-shrink-0 border-border bg-background transition-all duration-300 ease-in-out overflow-hidden flex flex-col\",\n side === \"left\" ? \"border-r\" : \"border-l\",\n collapsed ? \"w-0 border-r-0 border-l-0 min-w-0\" : \"\",\n !collapsed && className\n )}\n >\n <div className=\"flex-1 overflow-hidden min-h-0\">{children}</div>\n </div>\n );\n}\n\n","import { Thread } from \"./thread\";\nimport { cn } from \"@/lib/utils\";\nimport { StarterPrompt, ComposerOptionGroup } from \"@/types\";\nimport { ChatHeader, ChatHeaderProps } from \"./chat-header\";\n\nexport interface FullChatProps {\n title?: string;\n placeholder?: string;\n starterPrompts?: StarterPrompt[];\n options?: ComposerOptionGroup[];\n className?: string;\n /**\n * Props for customizing the header. If provided, title prop will be passed to header.\n */\n headerProps?: Omit<ChatHeaderProps, \"title\">;\n /**\n * Whether the composer should be auto focused\n */\n autoFocus?: boolean;\n /**\n * IDs of options to be selected by default\n */\n defaultSelectedIds?: string[];\n}\n\nexport function FullChat({\n title = \"Chat\",\n placeholder,\n starterPrompts,\n options,\n className,\n headerProps,\n autoFocus = false,\n defaultSelectedIds,\n}: FullChatProps) {\n return (\n <div className={cn(\"flex flex-col h-full w-full bg-background\", className)}>\n {title && <ChatHeader title={title} {...headerProps} />}\n <div className=\"flex-1 overflow-hidden flex relative\">\n <div className=\"flex-1 overflow-hidden min-w-0\">\n <Thread\n placeholder={placeholder}\n starterPrompts={starterPrompts}\n options={options}\n autoFocus={autoFocus}\n defaultSelectedIds={defaultSelectedIds}\n />\n </div>\n </div>\n </div>\n );\n}\n","import { Button } from \"./ui/button\";\nimport {\n IconLayoutSidebarLeftCollapse,\n IconLayoutSidebarLeftExpand,\n IconLayoutSidebarRightCollapse,\n IconLayoutSidebarRightExpand,\n} from \"@tabler/icons-react\";\nimport { useSidebar } from \"../providers/sidebar-provider\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface SidebarToggleProps {\n side: \"left\" | \"right\";\n className?: string;\n}\n\nexport function SidebarToggle({ side, className }: SidebarToggleProps) {\n const {\n leftCollapsed,\n rightCollapsed,\n setLeftCollapsed,\n setRightCollapsed,\n leftCollapsible,\n rightCollapsible,\n } = useSidebar();\n\n if (side === \"left\") {\n if (!leftCollapsible) return null;\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setLeftCollapsed(!leftCollapsed)}\n aria-label={\n leftCollapsed ? \"Expand left sidebar\" : \"Collapse left sidebar\"\n }\n className={cn(\"\", className)}\n >\n {leftCollapsed ? (\n <IconLayoutSidebarLeftExpand className=\"h-4 w-4\" />\n ) : (\n <IconLayoutSidebarLeftCollapse className=\"h-4 w-4\" />\n )}\n </Button>\n );\n }\n\n if (side === \"right\") {\n if (!rightCollapsible) return null;\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setRightCollapsed(!rightCollapsed)}\n aria-label={\n rightCollapsed ? \"Expand right sidebar\" : \"Collapse right sidebar\"\n }\n className={cn(\"\", className)}\n >\n {rightCollapsed ? (\n <IconLayoutSidebarRightExpand className=\"h-4 w-4\" />\n ) : (\n <IconLayoutSidebarRightCollapse className=\"h-4 w-4\" />\n )}\n </Button>\n );\n }\n\n return null;\n}\n","import * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | undefined>(\n undefined\n);\n\nfunction usePopoverContext() {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"Popover components must be used within a Popover\");\n }\n return context;\n}\n\ninterface PopoverProps {\n children: React.ReactNode;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction Popover({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const triggerRef = React.useRef<HTMLElement>(null);\n\n const open = controlledOpen ?? internalOpen;\n const setOpen = React.useCallback(\n (newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const value = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n }),\n [open, setOpen]\n );\n\n return (\n <PopoverContext.Provider value={value}>{children}</PopoverContext.Provider>\n );\n}\n\ninterface PopoverTriggerProps extends React.ComponentPropsWithoutRef<\"button\"> {\n asChild?: boolean;\n}\n\nconst PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ asChild, className, children, ...props }, ref) => {\n const { setOpen, triggerRef } = usePopoverContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(true);\n props.onClick?.(e);\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ref: (node: HTMLElement) => {\n triggerRef.current = node;\n if (typeof (children as any).ref === \"function\") {\n (children as any).ref(node);\n } else if ((children as any).ref) {\n (children as any).ref.current = node;\n }\n },\n onClick: handleClick,\n } as any);\n }\n\n return (\n <button\n ref={(node) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={className}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\ninterface PopoverContentProps extends React.ComponentPropsWithoutRef<\"div\"> {\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n alignOffset?: number;\n}\n\nconst PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(\n (\n {\n className,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n alignOffset = 0,\n children,\n ...props\n },\n ref\n ) => {\n const { open, setOpen, triggerRef } = usePopoverContext();\n const [position, setPosition] = React.useState({ top: 0, left: 0 });\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!open || !triggerRef.current) return;\n\n const updatePosition = () => {\n if (!triggerRef.current || !contentRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case \"bottom\":\n top = triggerRect.bottom + sideOffset + scrollY;\n break;\n case \"top\":\n top = triggerRect.top - contentRect.height - sideOffset + scrollY;\n break;\n case \"right\":\n top = triggerRect.top + scrollY;\n left = triggerRect.right + sideOffset + scrollX;\n break;\n case \"left\":\n top = triggerRect.top + scrollY;\n left = triggerRect.left - contentRect.width - sideOffset + scrollX;\n break;\n }\n\n switch (align) {\n case \"start\":\n if (side === \"top\" || side === \"bottom\") {\n left = triggerRect.left + scrollX + alignOffset;\n } else {\n top += alignOffset;\n }\n break;\n case \"center\":\n if (side === \"top\" || side === \"bottom\") {\n left =\n triggerRect.left +\n triggerRect.width / 2 -\n contentRect.width / 2 +\n scrollX +\n alignOffset;\n } else {\n top += triggerRect.height / 2 - contentRect.height / 2 + alignOffset;\n }\n break;\n case \"end\":\n if (side === \"top\" || side === \"bottom\") {\n left =\n triggerRect.left +\n triggerRect.width -\n contentRect.width +\n scrollX +\n alignOffset;\n } else {\n top += triggerRect.height - contentRect.height + alignOffset;\n }\n break;\n }\n\n setPosition({ top, left });\n };\n\n // Use requestAnimationFrame to ensure content is rendered\n requestAnimationFrame(() => {\n updatePosition();\n });\n\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [open, side, align, sideOffset, alignOffset, triggerRef]);\n\n React.useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open, setOpen, triggerRef]);\n\n if (!open) return null;\n\n const content = (\n <div\n ref={(node) => {\n contentRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(\n \"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/5 rounded-2xl shadow-2xl ring-1 z-50 min-w-48 max-h-96 overflow-hidden\",\n className\n )}\n style={{\n position: \"absolute\",\n top: `${position.top}px`,\n left: `${position.left}px`,\n }}\n {...props}\n >\n {children}\n </div>\n );\n\n return createPortal(content, document.body);\n }\n);\n\nPopoverContent.displayName = \"PopoverContent\";\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","import * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from \"@/components/ui/popover\";\nimport { ThreadList } from \"./thread-list\";\nimport { IconHistory } from \"@tabler/icons-react\";\nimport { cn } from \"@/lib/utils\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\n\nexport interface ThreadPopoverProps {\n className?: string;\n buttonClassName?: string;\n buttonVariant?:\n | \"default\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n buttonSize?:\n | \"default\"\n | \"xs\"\n | \"sm\"\n | \"lg\"\n | \"icon\"\n | \"icon-xs\"\n | \"icon-sm\"\n | \"icon-lg\";\n emptyState?: React.ReactNode;\n}\n\nexport const ThreadPopover: React.FC<ThreadPopoverProps> = ({\n className,\n buttonClassName,\n buttonVariant = \"ghost\",\n buttonSize = \"icon\",\n emptyState,\n}) => {\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Hotkey to toggle popover: Press 'H' to open/close\n // Scopes ensure it doesn't trigger when typing in inputs/textareas\n useHotkeys(\n \"h\",\n (e: KeyboardEvent) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n },\n {\n enableOnFormTags: false, // Don't trigger when typing in form inputs\n enableOnContentEditable: false, // Don't trigger in contenteditable elements\n }\n );\n\n return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild>\n <Button\n variant={buttonVariant}\n size={buttonSize}\n className={cn(buttonClassName)}\n >\n <IconHistory className=\"size-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\"w-80 p-0\", className)}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n >\n <div className=\"flex flex-col h-[400px]\">\n <ThreadList emptyState={emptyState} className=\"h-full\" />\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n","import * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { IconPlus } from \"@tabler/icons-react\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { cn } from \"@/lib/utils\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\n\nexport interface CreateThreadButtonProps {\n className?: string;\n variant?:\n | \"default\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n size?:\n | \"default\"\n | \"xs\"\n | \"sm\"\n | \"lg\"\n | \"icon\"\n | \"icon-xs\"\n | \"icon-sm\"\n | \"icon-lg\";\n children?: React.ReactNode;\n onThreadCreated?: (threadId: string) => void;\n}\n\nexport const CreateThreadButton: React.FC<CreateThreadButtonProps> = ({\n className,\n variant = \"ghost\",\n size = \"default\",\n children,\n onThreadCreated,\n}) => {\n const { createThread } = useThreads();\n const [isCreating, setIsCreating] = React.useState(false);\n\n const handleCreateThread = async () => {\n if (isCreating) return; // Prevent multiple simultaneous creations\n try {\n setIsCreating(true);\n const threadId = await createThread();\n onThreadCreated?.(threadId);\n } catch (error) {\n console.error(\"Failed to create thread:\", error);\n } finally {\n setIsCreating(false);\n }\n };\n\n // Hotkey to create new thread: Press 'N' to create\n // Scopes ensure it doesn't trigger when typing in inputs/textareas\n useHotkeys(\n \"n\",\n (e: KeyboardEvent) => {\n e.preventDefault();\n handleCreateThread();\n },\n {\n enableOnFormTags: false, // Don't trigger when typing in form inputs\n enableOnContentEditable: false, // Don't trigger in contenteditable elements\n }\n );\n\n return (\n <Button\n variant={variant}\n size={size}\n onClick={handleCreateThread}\n disabled={isCreating}\n className={cn(className)}\n >\n <IconPlus className=\"size-4\" />\n New chat\n </Button>\n );\n};\n","import { useTheme } from \"../providers/theme-provider\";\nimport { IconMoon, IconSun, IconDeviceDesktop } from \"@tabler/icons-react\";\nimport { Button } from \"./ui/button\";\n\nexport function ThemeToggle() {\n const { theme, setTheme, resolvedTheme } = useTheme();\n\n const cycleTheme = () => {\n if (theme === \"light\") {\n setTheme(\"dark\");\n } else if (theme === \"dark\") {\n setTheme(\"system\");\n } else {\n setTheme(\"light\");\n }\n };\n\n const getIcon = () => {\n if (theme === \"system\") {\n return <IconDeviceDesktop className=\"h-4 w-4\" />;\n }\n return resolvedTheme === \"dark\" ? (\n <IconMoon className=\"h-4 w-4\" />\n ) : (\n <IconSun className=\"h-4 w-4\" />\n );\n };\n\n const getLabel = () => {\n if (theme === \"system\") {\n return \"System\";\n }\n return resolvedTheme === \"dark\" ? \"Dark\" : \"Light\";\n };\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={cycleTheme}\n aria-label={`Toggle theme (current: ${getLabel()})`}\n title={`Current: ${getLabel()}. Click to cycle: Light → Dark → System`}\n >\n {getIcon()}\n </Button>\n );\n}\n","import * as React from \"react\";\nimport { IconPlus } from \"@tabler/icons-react\";\nimport { useThreads } from \"@/hooks/use-threads\";\nimport { cn } from \"@/lib/utils\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\nimport { ListItem } from \"./elements\";\nimport { generateId } from \"melony/client\";\n\nexport interface CreateThreadNavItemProps {\n className?: string;\n}\n\nexport const CreateThreadNavItem: React.FC<CreateThreadNavItemProps> = ({\n className,\n}) => {\n const { createThread } = useThreads();\n const [isCreating, setIsCreating] = React.useState(false);\n\n const handleCreateThread = async () => {\n if (isCreating) return; // Prevent multiple simultaneous creations\n try {\n setIsCreating(true);\n const threadId = await createThread();\n } catch (error) {\n console.error(\"Failed to create thread:\", error);\n } finally {\n setIsCreating(false);\n }\n };\n\n // Hotkey to create new thread: Press 'N' to create\n // Scopes ensure it doesn't trigger when typing in inputs/textareas\n useHotkeys(\n \"n\",\n (e: KeyboardEvent) => {\n e.preventDefault();\n handleCreateThread();\n },\n {\n enableOnFormTags: false, // Don't trigger when typing in form inputs\n enableOnContentEditable: false, // Don't trigger in contenteditable elements\n }\n );\n\n return (\n <ListItem\n onClickAction={{\n type: \"client:navigate\",\n data: {\n url: `?threadId=${generateId()}`,\n },\n }}\n className={cn(className)}\n >\n <IconPlus className=\"size-4\" />\n New chat\n </ListItem>\n );\n};\n"]}