{"version":3,"file":"index.cjs","names":["useTheme","useLayoutContext","Button","Loader2","Check","Copy","Link","Dialog","IconButton","X","Input","useLayoutContext","useTheme","React","IconButton","Share2","Button","separateContentAndContext","wrapContext","BuiltinActionType","wrapContent","AssistantMessageContainer","BehindTheScenes","ToolCallComponent","ToolResult","Renderer","ChevronDown","separateContentAndContext","ThemeProvider","ChatProvider","WelcomeMessageRenderer","isChatEmpty","WelcomeScreen","CustomWelcome","ConversationStartersRenderer","ConversationStarter","MessageLoading","Trigger","Container","ThreadContainer","Header","ScrollArea","Messages","DefaultComposer","WelcomeMessageRenderer","isChatEmpty","WelcomeScreen","CustomWelcome","ConversationStartersRenderer","ConversationStarter","MessageLoading","Container","ThreadContainer","Header","ScrollArea","Messages","DefaultComposer","isChatEmpty","WelcomeScreen","CustomWelcome","ConversationStarter","MessageLoading","Container","SidebarContainer","SidebarHeader","SidebarContent","NewChatButton","SidebarSeparator","ThreadList","ThreadContainer","MobileHeader","ThreadHeader","ScrollArea","Messages","DefaultComposer"],"sources":["../../../src/components/OpenUIChat/CustomComposerAdapter.tsx","../../../src/components/OpenUIChat/ShareThreadModal.tsx","../../../src/components/OpenUIChat/useShareThread.ts","../../../src/components/OpenUIChat/ShareThread.tsx","../../../src/components/OpenUIChat/utils/index.ts","../../../src/components/OpenUIChat/GenUIAssistantMessage.tsx","../../../src/components/OpenUIChat/GenUIUserMessage.tsx","../../../src/components/OpenUIChat/withChatProvider.tsx","../../../src/components/OpenUIChat/ComposedBottomTray.tsx","../../../src/components/OpenUIChat/ComposedCopilot.tsx","../../../src/components/OpenUIChat/ComposedStandalone.tsx"],"sourcesContent":["import { useThread } from \"@openuidev/react-headless\";\nimport type { ComposerComponent } from \"./types\";\n\nexport const CustomComposerAdapter = ({ composer: Composer }: { composer: ComposerComponent }) => {\n  const processMessage = useThread((s) => s.processMessage);\n  const cancelMessage = useThread((s) => s.cancelMessage);\n  const isRunning = useThread((s) => s.isRunning);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  return (\n    <Composer\n      onSend={(message: string) => {\n        processMessage({ role: \"user\", content: message });\n      }}\n      onCancel={cancelMessage}\n      isRunning={isRunning}\n      isLoadingMessages={isLoadingMessages}\n    />\n  );\n};\n","import * as Dialog from \"@radix-ui/react-dialog\";\nimport clsx from \"clsx\";\nimport { Check, Copy, Link, Loader2, X } from \"lucide-react\";\nimport { forwardRef, type ReactNode, useCallback, useState } from \"react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { Input } from \"../Input\";\nimport { useTheme } from \"../ThemeProvider/ThemeProvider\";\n\n/**\n * Props for {@link ShareThreadModal}.\n *\n * @category Components\n */\nexport interface ShareThreadModalProps {\n  /** Modal title. Defaults to `\"Share chat\"`. */\n  title?: string;\n  /** The trigger element that opens the modal. */\n  trigger: ReactNode;\n  /** Async function that returns a shareable URL. */\n  generateLink: () => Promise<string>;\n  /** Theme class name for portal targeting. */\n  themeClassName?: string;\n}\n\nconst getErrorMessage = (error: Error) => {\n  if (error instanceof DOMException && error.name === \"NotAllowedError\") {\n    return \"Clipboard access denied. Please allow clipboard access in your browser settings, or copy the link manually from the text area above.\";\n  } else if (error instanceof DOMException && error.name === \"NotSupportedError\") {\n    return \"Clipboard not supported. Please copy the link manually from the text area above.\";\n  } else {\n    return \"Failed to copy to clipboard. Please copy the link manually from the text area above.\";\n  }\n};\n\n/**\n * Modal dialog for generating and copying a shareable link.\n *\n * @category Components\n */\nexport const ShareThreadModal = forwardRef<HTMLDivElement, ShareThreadModalProps>(\n  ({ title, trigger, generateLink, themeClassName }, _ref) => {\n    const { portalThemeClassName } = useTheme();\n    const { layout } = useLayoutContext() || {};\n    const isMobile = layout === \"mobile\";\n\n    const [isOpen, setIsOpen] = useState(false);\n    const [isLoading, setIsLoading] = useState(false);\n    const [generatedLink, setGeneratedLink] = useState<string | null>(null);\n    const [hasCopied, setHasCopied] = useState(false);\n    const [clipboardError, setClipboardError] = useState<string | null>(null);\n\n    const handleGenerateLink = useCallback(async () => {\n      setIsLoading(true);\n      try {\n        const link = await generateLink();\n        setGeneratedLink(link);\n      } catch (_error) {\n        // Consumer handles errors in their generateLink callback\n        console.error(_error);\n      } finally {\n        setIsLoading(false);\n      }\n    }, [generateLink]);\n\n    const handleCopy = useCallback(async () => {\n      if (!generatedLink) return;\n      setClipboardError(null);\n\n      if (!navigator.clipboard) {\n        setClipboardError(\n          \"Clipboard access not available. Please copy the link manually from the text area above.\",\n        );\n        return;\n      }\n\n      try {\n        await navigator.clipboard.writeText(generatedLink);\n        setHasCopied(true);\n        setTimeout(() => setHasCopied(false), 2000);\n      } catch (error) {\n        console.warn(\"Copy to clipboard failed:\", error);\n        setClipboardError(getErrorMessage(error as Error));\n      }\n    }, [generatedLink]);\n\n    const handleOnOpenChange = useCallback((open: boolean) => {\n      setIsOpen(open);\n      if (!open) {\n        setTimeout(() => {\n          setIsLoading(false);\n          setGeneratedLink(null);\n          setHasCopied(false);\n          setClipboardError(null);\n        }, 300);\n      }\n    }, []);\n\n    const renderActionButton = () => {\n      if (isLoading) {\n        return (\n          <Button onClick={handleCopy} size=\"medium\" disabled>\n            <Loader2 className=\"openui-share-thread-modal__loading-icon\" />\n            Generating...\n          </Button>\n        );\n      }\n\n      if (generatedLink) {\n        return (\n          <Button onClick={handleCopy} size=\"medium\">\n            {hasCopied ? <Check /> : <Copy />}\n            {hasCopied ? \"Copied!\" : \"Copy link\"}\n          </Button>\n        );\n      }\n\n      return (\n        <Button onClick={handleGenerateLink} size=\"medium\">\n          <Link />\n          Generate link\n        </Button>\n      );\n    };\n\n    return (\n      <Dialog.Root open={isOpen} onOpenChange={handleOnOpenChange}>\n        <Dialog.Trigger asChild>{trigger}</Dialog.Trigger>\n        <Dialog.Portal>\n          <Dialog.Overlay\n            className={clsx(\n              \"openui-share-thread-modal__overlay\",\n              themeClassName || portalThemeClassName,\n            )}\n          />\n          <Dialog.Content\n            className={clsx(\n              \"openui-share-thread-modal__content\",\n              isMobile ? \"openui-share-thread-modal__content--mobile\" : \"\",\n              themeClassName || portalThemeClassName,\n            )}\n          >\n            <div className=\"openui-share-thread-modal__header\">\n              <Dialog.Title className=\"openui-share-thread-modal__title\">\n                {title ?? \"Share chat\"}\n              </Dialog.Title>\n              <IconButton\n                icon={<X />}\n                variant=\"tertiary\"\n                size=\"small\"\n                onClick={() => handleOnOpenChange(false)}\n                className=\"openui-share-thread-modal__close-button\"\n              />\n            </div>\n\n            <div className=\"openui-share-thread-modal__body\">\n              <p className=\"openui-share-thread-modal__description\">\n                This conversation may include personal information. Take a moment to check the\n                content before sharing the link.\n              </p>\n\n              <div className=\"openui-share-thread-modal__input-section\">\n                <div className=\"openui-share-thread-modal__input-wrapper\">\n                  <Input\n                    value={generatedLink || \"\"}\n                    placeholder={\n                      generatedLink ? \"\" : 'Click \"Generate link\" to create a shareable link'\n                    }\n                    readOnly\n                    className=\"openui-share-thread-modal__input\"\n                  />\n                  <div className=\"openui-share-thread-modal__button-container\">\n                    {renderActionButton()}\n                  </div>\n                </div>\n\n                {clipboardError && (\n                  <p className=\"openui-share-thread-modal__error-message\">{clipboardError}</p>\n                )}\n              </div>\n            </div>\n          </Dialog.Content>\n        </Dialog.Portal>\n      </Dialog.Root>\n    );\n  },\n);\n\nShareThreadModal.displayName = \"ShareThreadModal\";\n","import { useThread, useThreadList } from \"@openuidev/react-headless\";\nimport { useCallback } from \"react\";\n\n/**\n * Hook for sharing conversation threads by threadId.\n * The consumer's backend looks up messages by threadId.\n *\n * @category Hooks\n */\nexport const useShareThread = ({\n  generateShareLink,\n}: {\n  generateShareLink: (threadId: string) => Promise<string>;\n}) => {\n  const { isRunning, isLoadingMessages, messages } = useThread();\n  const { selectedThreadId } = useThreadList();\n\n  const getShareThreadLink = useCallback(async () => {\n    if (!selectedThreadId) throw new Error(\"No thread selected\");\n    return generateShareLink(selectedThreadId);\n  }, [generateShareLink, selectedThreadId]);\n\n  return {\n    shouldDisableShareButton: isRunning || isLoadingMessages || !selectedThreadId,\n    hasMessages: messages.length > 0,\n    getShareThreadLink,\n  };\n};\n","import { Share2 } from \"lucide-react\";\nimport React, { type ReactNode } from \"react\";\nimport { useLayoutContext } from \"../../context/LayoutContext\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { useTheme } from \"../ThemeProvider/ThemeProvider\";\nimport { ShareThreadModal } from \"./ShareThreadModal\";\nimport { useShareThread } from \"./useShareThread\";\n\n/**\n * Props for {@link ShareThread}.\n *\n * @category Components\n */\nexport interface ShareThreadProps {\n  /** Async function that receives the threadId and returns a shareable URL. */\n  generateShareLink: (threadId: string) => Promise<string>;\n  /** Title for the share modal. Defaults to `\"Share chat\"`. */\n  modalTitle?: string;\n  /** Custom trigger element. When omitted, a default share button is rendered. */\n  customTrigger?: ReactNode;\n}\n\n/**\n * Share button that opens a modal for generating and copying a shareable link.\n * Renders nothing when there are no messages to share.\n *\n * @category Components\n */\nexport const ShareThread = ({ generateShareLink, modalTitle, customTrigger }: ShareThreadProps) => {\n  const { layout } = useLayoutContext() || {};\n  const isMobile = layout === \"mobile\";\n  const { portalThemeClassName } = useTheme();\n\n  const { hasMessages, getShareThreadLink, shouldDisableShareButton } = useShareThread({\n    generateShareLink,\n  });\n\n  if (!hasMessages) return null;\n\n  return (\n    <ShareThreadModal\n      title={modalTitle}\n      trigger={\n        customTrigger ?? (\n          <DefaultShareButton\n            isMobile={isMobile}\n            shouldDisableShareButton={shouldDisableShareButton}\n          />\n        )\n      }\n      generateLink={getShareThreadLink}\n      themeClassName={portalThemeClassName}\n    />\n  );\n};\n\nShareThread.displayName = \"ShareThread\";\n\ntype DefaultShareButtonProps = {\n  isMobile: boolean;\n  shouldDisableShareButton?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst DefaultShareButton = React.forwardRef<HTMLButtonElement, DefaultShareButtonProps>(\n  ({ isMobile, shouldDisableShareButton, ...props }, ref) => {\n    return isMobile ? (\n      <IconButton\n        ref={ref as React.RefObject<HTMLButtonElement>}\n        size=\"medium\"\n        icon={<Share2 size=\"1em\" />}\n        variant=\"secondary\"\n        disabled={shouldDisableShareButton}\n        {...props}\n      />\n    ) : (\n      <Button\n        ref={ref as React.RefObject<HTMLButtonElement>}\n        variant=\"secondary\"\n        disabled={shouldDisableShareButton}\n        {...props}\n      >\n        <Share2 />\n        Share\n      </Button>\n    );\n  },\n);\n\nDefaultShareButton.displayName = \"DefaultShareButton\";\n","import { WelcomeMessageConfig } from \"../types\";\n\n/**\n * Type guard to check if a WelcomeMessageConfig is a custom React component.\n *\n * Use this to differentiate between a custom component and a props-based\n * configuration when rendering the welcome message.\n *\n * @param config - The welcome message configuration to check\n * @returns `true` if config is a React component, `false` if it's a props object\n *\n * @example\n * if (isWelcomeComponent(welcomeMessage)) {\n *   // welcomeMessage is a React.ComponentType\n *   const CustomWelcome = welcomeMessage;\n *   return <CustomWelcome />;\n * } else {\n *   // welcomeMessage is { title?, description?, image? }\n *   return <WelcomeScreen {...welcomeMessage} />;\n * }\n */\nexport const isWelcomeComponent = (\n  config: WelcomeMessageConfig,\n): config is React.ComponentType<any> => {\n  return typeof config === \"function\";\n};\n\nexport { isChatEmpty } from \"../../_shared/utils\";\n","\"use client\";\n\nimport type { AssistantMessage, ToolMessage } from \"@openuidev/react-headless\";\nimport { useThread } from \"@openuidev/react-headless\";\nimport type { ActionEvent, Library } from \"@openuidev/react-lang\";\nimport { BuiltinActionType, Renderer } from \"@openuidev/react-lang\";\nimport { useCallback, useMemo } from \"react\";\nimport { separateContentAndContext, wrapContent, wrapContext } from \"../../utils/contentParser\";\nimport { AssistantMessageContainer } from \"../Shell\";\nimport { BehindTheScenes, ToolCallComponent } from \"../ToolCall\";\nimport { ToolResult } from \"../ToolResult\";\n\nexport const GenUIAssistantMessage = ({\n  message,\n  library,\n}: {\n  message: AssistantMessage;\n  library: Library;\n}) => {\n  const messages = useThread((s) => s.messages);\n  const isRunning = useThread((s) => s.isRunning);\n  const processMessage = useThread((s) => s.processMessage);\n  const updateMessage = useThread((s) => s.updateMessage);\n\n  const isStreaming = useMemo(() => {\n    if (!isRunning) return false;\n    for (let i = messages.length - 1; i >= 0; i--) {\n      if (messages[i]?.role === \"assistant\") {\n        return messages[i]?.id === message.id;\n      }\n    }\n    return false;\n  }, [isRunning, messages, message.id]);\n\n  // Separate openui-lang code from persisted form state\n  const { content: openuiCode, contextString } = useMemo(() => {\n    if (!message.content) return { content: null, contextString: null };\n    return separateContentAndContext(message.content);\n  }, [message.content]);\n\n  const initialState = useMemo(() => {\n    if (!contextString) return undefined;\n    try {\n      const parsed = JSON.parse(contextString);\n      if (Array.isArray(parsed) && typeof parsed[0] === \"object\") return parsed[0];\n      if (typeof parsed === \"object\" && !Array.isArray(parsed)) return parsed;\n      return undefined;\n    } catch {\n      return undefined;\n    }\n  }, [contextString]);\n\n  const toolMessages = useMemo(() => {\n    const result: ToolMessage[] = [];\n    const msgIndex = messages.findIndex((m) => m.id === message.id);\n    if (msgIndex !== -1) {\n      for (let i = msgIndex + 1; i < messages.length; i++) {\n        const m = messages[i];\n        if (m && m.role === \"tool\") {\n          result.push(m as ToolMessage);\n        } else {\n          break;\n        }\n      }\n    }\n    return result;\n  }, [messages, message.id]);\n\n  const getToolName = (toolCallId: string) => {\n    const toolCall = message.toolCalls?.find((tc) => tc.id === toolCallId);\n    return toolCall?.function.name;\n  };\n\n  // Persist form state into the message content (XML-wrapped)\n  const handleStateUpdate = useCallback(\n    (state: Record<string, any>) => {\n      const code = openuiCode ?? \"\";\n      const contextJson = JSON.stringify([state]);\n      const fullMessage = code + \"\\n\" + wrapContext(contextJson);\n      updateMessage({ ...message, content: fullMessage });\n    },\n    [updateMessage, message, openuiCode],\n  );\n\n  // Build LLM-friendly message from action + form state, then dispatch\n  const handleAction = useCallback(\n    (event: ActionEvent) => {\n      if (event.type === BuiltinActionType.ContinueConversation) {\n        const contentPart = event.humanFriendlyMessage\n          ? wrapContent(event.humanFriendlyMessage)\n          : \"\";\n        const messageCtx: (string | object)[] = [`User clicked: ${event.humanFriendlyMessage}`];\n        if (event.formState) {\n          messageCtx.push(event.formState);\n        }\n        const contextPart = wrapContext(JSON.stringify(messageCtx));\n        const llmMessage = `${contentPart}${contextPart}`;\n\n        processMessage({\n          role: \"user\",\n          content: llmMessage,\n        });\n      } else if (event.type === BuiltinActionType.OpenUrl) {\n        const url = event.params?.[\"url\"] as string | undefined;\n        if (typeof window !== \"undefined\" && url) {\n          window.open(url, \"_blank\");\n        }\n      }\n    },\n    [processMessage],\n  );\n\n  const hasToolActivity =\n    (message.toolCalls && message.toolCalls.length > 0) || toolMessages.length > 0;\n\n  return (\n    <AssistantMessageContainer>\n      {hasToolActivity && (\n        <BehindTheScenes isStreaming={isStreaming} toolCallsComplete={!!message.content}>\n          {message.toolCalls?.map((toolCall, idx) => (\n            <ToolCallComponent\n              key={toolCall.id}\n              toolCall={toolCall}\n              isStreaming={isStreaming}\n              toolsDone={!!message.content}\n              isLast={idx === (message.toolCalls?.length ?? 0) - 1 && toolMessages.length === 0}\n            />\n          ))}\n          {toolMessages.map((tm) => (\n            <ToolResult key={tm.id} message={tm} toolName={getToolName(tm.toolCallId)} />\n          ))}\n        </BehindTheScenes>\n      )}\n      <Renderer\n        response={openuiCode}\n        library={library}\n        isStreaming={isStreaming}\n        onAction={handleAction}\n        onStateUpdate={handleStateUpdate}\n        initialState={initialState}\n      />\n    </AssistantMessageContainer>\n  );\n};\n","\"use client\";\n\nimport type { UserMessage } from \"@openuidev/react-headless\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { separateContentAndContext } from \"../../utils/contentParser\";\n\n/**\n * Extracts the first plain object from a context string.\n * The triggerAction context format is: [\"action description string\", { formState }]\n */\nfunction parseContextForDisplay(contextString: string | null): Record<string, any> {\n  if (!contextString) return {};\n  try {\n    const parsed = JSON.parse(contextString);\n    if (Array.isArray(parsed)) {\n      const stateObj = parsed.find(\n        (item) => item !== null && typeof item === \"object\" && !Array.isArray(item),\n      );\n      return stateObj ?? {};\n    }\n    if (typeof parsed === \"object\" && parsed !== null) {\n      return parsed;\n    }\n    return {};\n  } catch {\n    return {};\n  }\n}\n\nfunction getEntries(state: Record<string, any>): { label: string; value: string }[] {\n  // Detect nested (form-named) shape\n  const isNested = Object.values(state).some(\n    (v) =>\n      v !== null &&\n      typeof v === \"object\" &&\n      !(\"value\" in v) &&\n      Object.values(v).some((f) => f !== null && typeof f === \"object\" && \"value\" in f),\n  );\n\n  const entries: { label: string; value: string }[] = [];\n\n  if (isNested) {\n    for (const [, fields] of Object.entries(state)) {\n      if (typeof fields !== \"object\" || fields === null) continue;\n      for (const [fieldName, field] of Object.entries(fields as Record<string, any>)) {\n        if (field && typeof field === \"object\" && \"value\" in field) {\n          const val = field.value;\n          if (val !== undefined && val !== null && val !== \"\") {\n            entries.push({ label: fieldName, value: String(val) });\n          }\n        }\n      }\n    }\n  } else {\n    for (const [fieldName, field] of Object.entries(state)) {\n      if (field && typeof field === \"object\" && \"value\" in field) {\n        const val = field.value;\n        if (val !== undefined && val !== null && val !== \"\") {\n          entries.push({ label: fieldName, value: String(val) });\n        }\n      }\n    }\n  }\n\n  return entries;\n}\n\nfunction FormDataAccordion({ state }: { state: Record<string, any> }) {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const entries = getEntries(state);\n\n  if (entries.length === 0) return null;\n\n  return (\n    <div className=\"openui-genui-user-message__form-state\">\n      <button\n        className=\"openui-genui-user-message__form-state-header\"\n        onClick={() => setIsExpanded((v) => !v)}\n        type=\"button\"\n      >\n        <span className=\"openui-genui-user-message__form-state-label\">\n          Form data ({entries.length} {entries.length === 1 ? \"field\" : \"fields\"})\n        </span>\n        <ChevronDown\n          size={14}\n          className={`openui-genui-user-message__form-state-chevron${isExpanded ? \" openui-genui-user-message__form-state-chevron--expanded\" : \"\"}`}\n        />\n      </button>\n      {isExpanded && (\n        <div className=\"openui-genui-user-message__form-state-content\">\n          {entries.map(({ label, value }) => (\n            <div key={label} className=\"openui-genui-user-message__form-field\">\n              <span className=\"openui-genui-user-message__form-field-label\">{label}:</span>\n              <span className=\"openui-genui-user-message__form-field-value\">{value}</span>\n            </div>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n\n/**\n * Renders a user message, handling both plain text messages and\n * XML-formatted messages from form submissions (which contain <content> and <context> tags).\n */\nexport const GenUIUserMessage = ({ message }: { message: UserMessage }) => {\n  const rawContent = typeof message.content === \"string\" ? message.content : \"\";\n  const { content: humanText, contextString } = separateContentAndContext(rawContent);\n  const formState = parseContextForDisplay(contextString);\n  const hasFormData = Object.keys(formState).length > 0;\n\n  return (\n    <div className=\"openui-shell-thread-message-user\">\n      <div className=\"openui-genui-user-message\">\n        {hasFormData && <FormDataAccordion state={formState} />}\n        <div className=\"openui-shell-thread-message-user__content\">\n          {humanText && <div>{humanText}</div>}\n        </div>\n      </div>\n    </div>\n  );\n};\n","import type { AssistantMessage, ChatProviderProps, UserMessage } from \"@openuidev/react-headless\";\nimport { ChatProvider } from \"@openuidev/react-headless\";\nimport type { Library } from \"@openuidev/react-lang\";\nimport { useMemo } from \"react\";\nimport { ThemeProps, ThemeProvider } from \"../ThemeProvider\";\nimport { GenUIAssistantMessage } from \"./GenUIAssistantMessage\";\nimport { GenUIUserMessage } from \"./GenUIUserMessage\";\nimport type { SharedChatUIProps } from \"./types\";\n\ntype ThemeWrapperProps = {\n  theme?: ThemeProps;\n  disableThemeProvider?: boolean;\n};\n\nexport type ChatLayoutProps<Extra = {}> = Omit<ChatProviderProps, \"children\"> &\n  SharedChatUIProps &\n  ThemeWrapperProps &\n  Extra;\n\nconst DummyThemeProvider = ({ children }: { children: React.ReactNode }) => {\n  return children;\n};\n\nconst CHAT_PROVIDER_PROP_KEYS: Set<keyof Omit<ChatProviderProps, \"children\">> = new Set([\n  \"apiUrl\",\n  \"processMessage\",\n  \"threadApiUrl\",\n  \"fetchThreadList\",\n  \"createThread\",\n  \"deleteThread\",\n  \"updateThread\",\n  \"loadThread\",\n  \"streamProtocol\",\n  \"messageFormat\",\n]);\n\nexport function withChatProvider<ExtraProps = {}>(WrappedComponent: React.ComponentType<any>) {\n  const WithChatProvider = (props: ChatLayoutProps<ExtraProps>) => {\n    const innerProps: Record<string, unknown> = {};\n    const chatProviderProps: Record<string, unknown> = {};\n    let theme: ThemeProps | undefined;\n    let disableThemeProvider = false;\n\n    for (const [key, value] of Object.entries(props)) {\n      if (key === \"theme\") {\n        theme = value as ThemeProps;\n      } else if (key === \"disableThemeProvider\") {\n        disableThemeProvider = value as boolean;\n      } else if (CHAT_PROVIDER_PROP_KEYS.has(key as keyof Omit<ChatProviderProps, \"children\">)) {\n        chatProviderProps[key] = value;\n      } else {\n        innerProps[key] = value;\n      }\n    }\n\n    const componentLibrary = innerProps[\"componentLibrary\"] as Library | undefined;\n    const customAssistantMessage = innerProps[\"assistantMessage\"];\n    const customUserMessage = innerProps[\"userMessage\"];\n\n    const genUIAssistantMessage = useMemo(() => {\n      if (customAssistantMessage || !componentLibrary) return undefined;\n      return ({ message }: { message: AssistantMessage }) => (\n        <GenUIAssistantMessage message={message} library={componentLibrary} />\n      );\n    }, [customAssistantMessage, componentLibrary]);\n\n    const genUIUserMessage = useMemo(() => {\n      if (customUserMessage || !componentLibrary) return undefined;\n      return ({ message }: { message: UserMessage }) => <GenUIUserMessage message={message} />;\n    }, [customUserMessage, componentLibrary]);\n\n    if (genUIAssistantMessage && !customAssistantMessage) {\n      innerProps[\"assistantMessage\"] = genUIAssistantMessage;\n    }\n    if (genUIUserMessage && !customUserMessage) {\n      innerProps[\"userMessage\"] = genUIUserMessage;\n    }\n\n    const ThemeProviderComponent = disableThemeProvider ? DummyThemeProvider : ThemeProvider;\n\n    return (\n      <ThemeProviderComponent {...theme}>\n        <ChatProvider {...(chatProviderProps as any)}>\n          <WrappedComponent {...innerProps} />\n        </ChatProvider>\n      </ThemeProviderComponent>\n    );\n  };\n\n  WithChatProvider.displayName = `withChatProvider(${WrappedComponent.displayName || WrappedComponent.name || \"Component\"})`;\n\n  return WithChatProvider;\n}\n","import { useThread } from \"@openuidev/react-headless\";\nimport { useState } from \"react\";\nimport {\n  Container,\n  ConversationStarter,\n  Composer as DefaultComposer,\n  Header,\n  MessageLoading,\n  Messages,\n  ScrollArea,\n  ThreadContainer,\n  Trigger,\n  WelcomeScreen,\n} from \"../BottomTray\";\nimport { CustomComposerAdapter } from \"./CustomComposerAdapter\";\nimport { ShareThread } from \"./ShareThread\";\nimport type { SharedChatUIProps } from \"./types\";\nimport { isChatEmpty, isWelcomeComponent } from \"./utils\";\nimport { withChatProvider } from \"./withChatProvider\";\n\ninterface BottomTraySpecificProps extends SharedChatUIProps {\n  isOpen?: boolean;\n  onOpenChange?: (isOpen: boolean) => void;\n  defaultOpen?: boolean;\n  headerActions?: React.ReactNode;\n}\n\nconst WelcomeMessageRenderer = ({ welcomeMessage }: Pick<SharedChatUIProps, \"welcomeMessage\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!welcomeMessage || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (isWelcomeComponent(welcomeMessage)) {\n    const CustomWelcome = welcomeMessage;\n    return (\n      <WelcomeScreen>\n        <CustomWelcome />\n      </WelcomeScreen>\n    );\n  }\n\n  return (\n    <WelcomeScreen\n      title={welcomeMessage.title}\n      description={welcomeMessage.description}\n      image={welcomeMessage.image}\n    />\n  );\n};\n\nconst ConversationStartersRenderer = ({\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!conversationStarters || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  return (\n    <ConversationStarter\n      variant={conversationStarters.variant}\n      starters={conversationStarters.options}\n    />\n  );\n};\n\nconst BottomTrayInner = ({\n  logoUrl = \"https://www.openui.com/favicon.svg\",\n  agentName = \"My Agent\",\n  showAssistantLogo = false,\n  messageLoading: MessageLoadingComponent = MessageLoading,\n  scrollVariant = \"user-message-anchor\",\n  isOpen: controlledIsOpen,\n  onOpenChange,\n  defaultOpen = false,\n  welcomeMessage,\n  conversationStarters,\n  assistantMessage,\n  userMessage,\n  composer: ComposerComponent,\n  headerActions,\n  generateShareLink,\n}: BottomTraySpecificProps) => {\n  const [uncontrolledIsOpen, setUncontrolledIsOpen] = useState(defaultOpen);\n\n  const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : uncontrolledIsOpen;\n\n  const handleOpenChange = (newIsOpen: boolean) => {\n    if (controlledIsOpen === undefined) {\n      setUncontrolledIsOpen(newIsOpen);\n    }\n    onOpenChange?.(newIsOpen);\n  };\n\n  const shareButton = generateShareLink ? (\n    <ShareThread generateShareLink={generateShareLink} />\n  ) : null;\n\n  return (\n    <>\n      <Trigger onClick={() => handleOpenChange(!isOpen)} isOpen={isOpen}>\n        {logoUrl ? (\n          <img src={logoUrl} alt=\"Logo\" className=\"openui-bottom-tray-trigger-logo\" />\n        ) : null}\n      </Trigger>\n\n      <Container\n        logoUrl={logoUrl}\n        agentName={agentName}\n        showAssistantLogo={showAssistantLogo}\n        isOpen={isOpen}\n      >\n        <ThreadContainer>\n          <Header\n            onMinimize={() => handleOpenChange(false)}\n            rightChildren={\n              <>\n                {shareButton}\n                {headerActions}\n              </>\n            }\n          />\n          <WelcomeMessageRenderer welcomeMessage={welcomeMessage} />\n          <ScrollArea scrollVariant={scrollVariant}>\n            <Messages\n              loader={<MessageLoadingComponent />}\n              assistantMessage={assistantMessage}\n              userMessage={userMessage}\n            />\n          </ScrollArea>\n          <ConversationStartersRenderer conversationStarters={conversationStarters} />\n          {ComposerComponent ? (\n            <CustomComposerAdapter composer={ComposerComponent} />\n          ) : (\n            <DefaultComposer />\n          )}\n        </ThreadContainer>\n      </Container>\n    </>\n  );\n};\n\nexport const BottomTray = withChatProvider<{\n  isOpen?: boolean;\n  onOpenChange?: (isOpen: boolean) => void;\n  defaultOpen?: boolean;\n  headerActions?: React.ReactNode;\n}>(BottomTrayInner);\n","import { useThread } from \"@openuidev/react-headless\";\nimport {\n  Container,\n  ConversationStarter,\n  Composer as DefaultComposer,\n  Header,\n  MessageLoading,\n  Messages,\n  ScrollArea,\n  ThreadContainer,\n  WelcomeScreen,\n} from \"../CopilotShell\";\nimport { CustomComposerAdapter } from \"./CustomComposerAdapter\";\nimport { ShareThread } from \"./ShareThread\";\nimport type { SharedChatUIProps } from \"./types\";\nimport { isChatEmpty, isWelcomeComponent } from \"./utils\";\nimport { withChatProvider } from \"./withChatProvider\";\n\nconst WelcomeMessageRenderer = ({ welcomeMessage }: Pick<SharedChatUIProps, \"welcomeMessage\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!welcomeMessage || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (isWelcomeComponent(welcomeMessage)) {\n    const CustomWelcome = welcomeMessage;\n    return (\n      <WelcomeScreen>\n        <CustomWelcome />\n      </WelcomeScreen>\n    );\n  }\n\n  return (\n    <WelcomeScreen\n      title={welcomeMessage.title}\n      description={welcomeMessage.description}\n      image={welcomeMessage.image}\n    />\n  );\n};\n\nconst ConversationStartersRenderer = ({\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!conversationStarters || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  return (\n    <ConversationStarter\n      variant={conversationStarters.variant}\n      starters={conversationStarters.options}\n    />\n  );\n};\n\ninterface CopilotSpecificProps extends SharedChatUIProps {\n  headerActions?: React.ReactNode;\n}\n\nconst CopilotInner = ({\n  logoUrl = \"https://www.openui.com/favicon.svg\",\n  agentName = \"My Agent\",\n  showAssistantLogo = false,\n  messageLoading: MessageLoadingComponent = MessageLoading,\n  scrollVariant = \"user-message-anchor\",\n  welcomeMessage,\n  conversationStarters,\n  assistantMessage,\n  userMessage,\n  composer: ComposerComponent,\n  headerActions,\n  generateShareLink,\n}: CopilotSpecificProps) => {\n  const shareButton = generateShareLink ? (\n    <ShareThread generateShareLink={generateShareLink} />\n  ) : null;\n\n  return (\n    <Container logoUrl={logoUrl} agentName={agentName} showAssistantLogo={showAssistantLogo}>\n      <ThreadContainer>\n        <Header\n          rightChildren={\n            <>\n              {shareButton}\n              {headerActions}\n            </>\n          }\n        />\n        <WelcomeMessageRenderer welcomeMessage={welcomeMessage} />\n        <ScrollArea scrollVariant={scrollVariant}>\n          <Messages\n            loader={<MessageLoadingComponent />}\n            assistantMessage={assistantMessage}\n            userMessage={userMessage}\n          />\n        </ScrollArea>\n        <ConversationStartersRenderer conversationStarters={conversationStarters} />\n        {ComposerComponent ? (\n          <CustomComposerAdapter composer={ComposerComponent} />\n        ) : (\n          <DefaultComposer />\n        )}\n      </ThreadContainer>\n    </Container>\n  );\n};\n\nexport const Copilot = withChatProvider<{\n  headerActions?: React.ReactNode;\n}>(CopilotInner);\n","import { useThread } from \"@openuidev/react-headless\";\nimport {\n  Container,\n  ConversationStarter,\n  Composer as DefaultComposer,\n  MessageLoading,\n  Messages,\n  MobileHeader,\n  NewChatButton,\n  ScrollArea,\n  SidebarContainer,\n  SidebarContent,\n  SidebarHeader,\n  SidebarSeparator,\n  ThreadContainer,\n  ThreadHeader,\n  ThreadList,\n  WelcomeScreen,\n} from \"../Shell\";\nimport { CustomComposerAdapter } from \"./CustomComposerAdapter\";\nimport { ShareThread } from \"./ShareThread\";\nimport type { SharedChatUIProps } from \"./types\";\nimport { isChatEmpty, isWelcomeComponent } from \"./utils\";\nimport { withChatProvider } from \"./withChatProvider\";\n\nconst WelcomeMessageRenderer = ({\n  welcomeMessage,\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"welcomeMessage\" | \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!welcomeMessage || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  if (isWelcomeComponent(welcomeMessage)) {\n    const CustomWelcome = welcomeMessage;\n    return (\n      <WelcomeScreen>\n        <CustomWelcome />\n      </WelcomeScreen>\n    );\n  }\n\n  return (\n    <WelcomeScreen\n      title={welcomeMessage.title}\n      description={welcomeMessage.description}\n      image={welcomeMessage.image}\n      starters={conversationStarters?.options}\n      starterVariant={conversationStarters?.variant}\n    />\n  );\n};\n\nconst ConversationStartersRenderer = ({\n  conversationStarters,\n}: Pick<SharedChatUIProps, \"conversationStarters\">) => {\n  const messages = useThread((s) => s.messages);\n  const isLoadingMessages = useThread((s) => s.isLoadingMessages);\n\n  if (!conversationStarters || !isChatEmpty({ isLoadingMessages, messages })) {\n    return null;\n  }\n\n  return (\n    <ConversationStarter\n      variant={conversationStarters.variant}\n      starters={conversationStarters.options}\n    />\n  );\n};\n\ninterface FullScreenSpecificProps extends SharedChatUIProps {\n  threadHeader?: React.ReactNode;\n  mobileHeaderActions?: React.ReactNode;\n}\n\nconst FullScreenInner = ({\n  logoUrl = \"https://www.openui.com/favicon.svg\",\n  agentName = \"My Agent\",\n  showAssistantLogo = false,\n  messageLoading: MessageLoadingComponent = MessageLoading,\n  scrollVariant = \"user-message-anchor\",\n  welcomeMessage,\n  conversationStarters,\n  assistantMessage,\n  userMessage,\n  composer: ComposerComponent,\n  threadHeader,\n  mobileHeaderActions,\n  generateShareLink,\n}: FullScreenSpecificProps) => {\n  const shareButton = generateShareLink ? (\n    <ShareThread generateShareLink={generateShareLink} />\n  ) : null;\n\n  return (\n    <Container logoUrl={logoUrl} agentName={agentName} showAssistantLogo={showAssistantLogo}>\n      <SidebarContainer>\n        <SidebarHeader />\n        <SidebarContent>\n          <NewChatButton />\n          <SidebarSeparator />\n          <ThreadList />\n        </SidebarContent>\n      </SidebarContainer>\n      <ThreadContainer>\n        <MobileHeader\n          rightChildren={\n            <>\n              {shareButton}\n              {mobileHeaderActions}\n            </>\n          }\n        />\n        {(threadHeader || shareButton) && (\n          <ThreadHeader>\n            {threadHeader}\n            {shareButton}\n          </ThreadHeader>\n        )}\n        <WelcomeMessageRenderer\n          welcomeMessage={welcomeMessage}\n          conversationStarters={conversationStarters}\n        />\n        <ScrollArea scrollVariant={scrollVariant}>\n          <Messages\n            loader={<MessageLoadingComponent />}\n            assistantMessage={assistantMessage}\n            userMessage={userMessage}\n          />\n        </ScrollArea>\n        <ConversationStartersRenderer conversationStarters={conversationStarters} />\n        {ComposerComponent ? (\n          <CustomComposerAdapter composer={ComposerComponent} />\n        ) : (\n          <DefaultComposer />\n        )}\n      </ThreadContainer>\n    </Container>\n  );\n};\n\nexport const FullScreen = withChatProvider<{\n  threadHeader?: React.ReactNode;\n  mobileHeaderActions?: React.ReactNode;\n}>(FullScreenInner);\n"],"mappings":"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"}