{"version":3,"file":"ArtifactOverlay-CeR90jOu.cjs","names":["useMultipleRefs"],"sources":["../src/components/_shared/store/store.tsx","../src/components/_shared/utils/index.ts","../src/components/_shared/artifact/ArtifactPortalTarget.tsx","../src/components/_shared/artifact/ArtifactOverlay.tsx"],"sourcesContent":["import { createContext, useContext, useEffect, useRef } from \"react\";\nimport { create } from \"zustand\";\nimport { useShallow } from \"zustand/react/shallow\";\n\ninterface ShellState {\n  isSidebarOpen: boolean;\n  agentName: string;\n  logoUrl: string;\n  showAssistantLogo: boolean;\n  setIsSidebarOpen: (isOpen: boolean) => void;\n  setAgentName: (name: string) => void;\n  setLogoUrl: (url: string) => void;\n  setShowAssistantLogo: (show: boolean) => void;\n}\n\nexport const createShellStore = ({\n  logoUrl,\n  agentName,\n  showAssistantLogo,\n}: {\n  logoUrl: string;\n  agentName: string;\n  showAssistantLogo: boolean;\n}) =>\n  create<ShellState>((set) => ({\n    isSidebarOpen: true,\n    agentName: agentName,\n    logoUrl: logoUrl,\n    showAssistantLogo,\n    setIsSidebarOpen: (isOpen: boolean) => set({ isSidebarOpen: isOpen }),\n    setAgentName: (name: string) => set({ agentName: name }),\n    setLogoUrl: (url: string) => set({ logoUrl: url }),\n    setShowAssistantLogo: (show: boolean) => set({ showAssistantLogo: show }),\n  }));\n\nexport const ShellStoreContext = createContext<ReturnType<typeof createShellStore> | null>(null);\n\nexport const useShellStore = <T,>(selector: (state: ShellState) => T): T => {\n  const store = useContext(ShellStoreContext);\n  if (!store) {\n    throw new Error(\"useShellStore must be used within ShellStoreProvider\");\n  }\n\n  return store(useShallow(selector));\n};\n\nexport const ShellStoreProvider = ({\n  children,\n  agentName,\n  logoUrl,\n  showAssistantLogo = false,\n}: {\n  children: React.ReactNode;\n  logoUrl: string;\n  agentName: string;\n  showAssistantLogo?: boolean;\n}) => {\n  const shellStoreRef = useRef<ReturnType<typeof createShellStore> | null>(null);\n  if (!shellStoreRef.current) {\n    shellStoreRef.current = createShellStore({ agentName, logoUrl, showAssistantLogo });\n  }\n  const shellStore = shellStoreRef.current;\n\n  useEffect(() => {\n    const { setAgentName, setLogoUrl, setShowAssistantLogo } = shellStore.getState();\n    setAgentName(agentName);\n    setLogoUrl(logoUrl);\n    setShowAssistantLogo(showAssistantLogo);\n  }, [agentName, logoUrl, shellStore, showAssistantLogo]);\n\n  return <ShellStoreContext.Provider value={shellStore}>{children}</ShellStoreContext.Provider>;\n};\n","import { Message } from \"@openuidev/react-headless\";\n\nexport const isChatEmpty = ({\n  isLoadingMessages,\n  messages,\n}: {\n  isLoadingMessages: boolean | undefined;\n  messages: Message[];\n}) => {\n  return !isLoadingMessages && messages.length === 0;\n};\n","import { useArtifactPortalTarget } from \"@openuidev/react-headless\";\nimport { forwardRef, useCallback, useRef } from \"react\";\n\n/**\n * Props for {@link ArtifactPortalTarget}.\n */\nexport type ArtifactPortalTargetProps = {\n  /** Additional CSS class name(s) applied to the container element. */\n  className?: string;\n};\n\n/**\n * Registers a DOM node as the render target for {@link ArtifactPanel} portals.\n *\n * Mount exactly one instance in your layout. Renders a `<div>` with\n * `display: contents` so it doesn't affect layout flow.\n *\n * @category Components\n */\nexport const ArtifactPortalTarget = forwardRef<HTMLDivElement, ArtifactPortalTargetProps>(\n  ({ className }, ref) => {\n    const { setNode } = useArtifactPortalTarget();\n    const forwardedRef = useRef(ref);\n    forwardedRef.current = ref;\n\n    const callbackRef = useCallback(\n      (node: HTMLDivElement | null) => {\n        setNode(node);\n        const fRef = forwardedRef.current;\n        if (typeof fRef === \"function\") {\n          fRef(node);\n        } else if (fRef) {\n          fRef.current = node;\n        }\n      },\n      [setNode],\n    );\n\n    return <div ref={callbackRef} className={className} style={{ display: \"contents\" }} />;\n  },\n);\n\nArtifactPortalTarget.displayName = \"ArtifactPortalTarget\";\n","import { useActiveArtifact } from \"@openuidev/react-headless\";\nimport clsx from \"clsx\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useMultipleRefs } from \"../../../hooks/useMultipleRefs\";\nimport { ArtifactPortalTarget } from \"./ArtifactPortalTarget\";\n\n/**\n * Props for {@link ArtifactOverlay}.\n *\n * @category Components\n */\nexport type ArtifactOverlayProps = {\n  /** Additional CSS class name(s) applied to the overlay container. */\n  className?: string;\n};\n\n/**\n * Shared overlay wrapper for the artifact portal target.\n * Used by CopilotShell, BottomTray, and Shell (mobile) layouts.\n * Renders an absolute-positioned overlay with slide-in/slide-out animations.\n *\n * @category Components\n */\nexport const ArtifactOverlay = forwardRef<HTMLDivElement, ArtifactOverlayProps>(\n  ({ className }, ref) => {\n    const { isArtifactActive } = useActiveArtifact();\n    const [shouldRender, setShouldRender] = useState(isArtifactActive);\n    const [isExiting, setIsExiting] = useState(false);\n    const internalRef = useRef<HTMLDivElement>(null);\n    const mergedRef = useMultipleRefs<HTMLDivElement>(ref, internalRef);\n\n    useEffect(() => {\n      if (isArtifactActive) {\n        // Opening: mount immediately, cancel any in-progress exit\n        setShouldRender(true);\n        setIsExiting(false);\n      } else if (shouldRender) {\n        // Closing: start exit animation, defer unmount\n        setIsExiting(true);\n      }\n    }, [isArtifactActive]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    const handleAnimationEnd = useCallback(\n      (e: React.AnimationEvent<HTMLDivElement>) => {\n        // Only react to our own animation, not children's animations bubbling up\n        if (e.target !== internalRef.current) return;\n        if (isExiting) {\n          setShouldRender(false);\n          setIsExiting(false);\n        }\n      },\n      [isExiting],\n    );\n\n    if (!shouldRender) return null;\n\n    return (\n      <div\n        ref={mergedRef}\n        className={clsx(\n          \"openui-artifact-overlay\",\n          { \"openui-artifact-overlay--exiting\": isExiting },\n          className,\n        )}\n        onAnimationEnd={handleAnimationEnd}\n      >\n        <ArtifactPortalTarget />\n      </div>\n    );\n  },\n);\n\nArtifactOverlay.displayName = \"ArtifactOverlay\";\n"],"mappings":"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"}