{"version":3,"file":"chat-panel-parts.cjs","sources":["../../../components/chat-panel/chat-panel-parts.tsx"],"sourcesContent":["'use client';\n\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { cx } from 'class-variance-authority';\nimport { ComponentProps, MouseEvent, PointerEvent, ReactNode } from 'react';\nimport { ExpandIcon, ShrinkIcon } from '~/icons';\nimport { IconButton, type IconButtonProps } from '../icon-button/icon-button';\nimport styles from './chat-panel.module.css';\nimport { useChatPanelContext } from './chat-panel-context';\n\nexport interface ChatPanelHeaderProps extends ComponentProps<'header'> {}\n\nexport function ChatPanelHeader({\n  className,\n  onPointerDown,\n  ref,\n  ...props\n}: ChatPanelHeaderProps) {\n  const { dragHandleRef, dragListeners } = useChatPanelContext('Header');\n  const mergedRef = useMergedRefs(dragHandleRef, ref);\n\n  const handlePointerDown = (event: PointerEvent<HTMLElement>) => {\n    onPointerDown?.(event);\n    if (event.defaultPrevented) return;\n    dragListeners?.onPointerDown?.(event);\n  };\n\n  return (\n    <header\n      ref={mergedRef}\n      className={cx(styles.header, className)}\n      onPointerDown={handlePointerDown}\n      data-slot='chat-panel-header'\n      {...props}\n    />\n  );\n}\n\nChatPanelHeader.displayName = 'ChatPanel.Header';\n\nexport interface ChatPanelTitleProps extends ComponentProps<'h2'> {}\n\nexport function ChatPanelTitle({ className, ...props }: ChatPanelTitleProps) {\n  return (\n    <h2\n      className={cx(styles.title, className)}\n      data-slot='chat-panel-title'\n      {...props}\n    />\n  );\n}\n\nChatPanelTitle.displayName = 'ChatPanel.Title';\n\nexport interface ChatPanelActionsProps extends ComponentProps<'div'> {}\n\nexport function ChatPanelActions({\n  className,\n  ...props\n}: ChatPanelActionsProps) {\n  return (\n    <div\n      className={cx(styles.actions, className)}\n      data-slot='chat-panel-actions'\n      {...props}\n    />\n  );\n}\n\nChatPanelActions.displayName = 'ChatPanel.Actions';\n\nexport interface ChatPanelContentProps extends ComponentProps<'div'> {}\n\nexport function ChatPanelContent({\n  className,\n  ...props\n}: ChatPanelContentProps) {\n  return (\n    <div\n      className={cx(styles.content, className)}\n      data-slot='chat-panel-content'\n      {...props}\n    />\n  );\n}\n\nChatPanelContent.displayName = 'ChatPanel.Content';\n\nexport interface ChatPanelMinimizeTriggerProps extends IconButtonProps {}\n\nexport function ChatPanelMinimizeTrigger({\n  children,\n  onClick,\n  'aria-label': ariaLabel = 'Minimize chat panel',\n  ...props\n}: ChatPanelMinimizeTriggerProps) {\n  const { minimize } = useChatPanelContext('MinimizeTrigger');\n\n  const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n    onClick?.(event);\n    if (event.defaultPrevented) return;\n    minimize();\n  };\n\n  return (\n    <IconButton\n      size={2}\n      aria-label={ariaLabel}\n      onClick={handleClick}\n      data-slot='chat-panel-minimize-trigger'\n      {...props}\n    >\n      {children ?? <ShrinkIcon />}\n    </IconButton>\n  );\n}\n\nChatPanelMinimizeTrigger.displayName = 'ChatPanel.MinimizeTrigger';\n\nexport interface ChatPanelExpandTriggerState {\n  /** Whether the panel is currently floating (true) or docked (false). */\n  floating: boolean;\n}\n\nexport interface ChatPanelExpandTriggerProps\n  extends Omit<IconButtonProps, 'children'> {\n  /**\n   * The icon. Defaults to a size icon in both states; pass a render\n   * function to swap icons based on the current state.\n   */\n  children?: ReactNode | ((state: ChatPanelExpandTriggerState) => ReactNode);\n}\n\nexport function ChatPanelExpandTrigger({\n  children,\n  onClick,\n  'aria-label': ariaLabel,\n  ...props\n}: ChatPanelExpandTriggerProps) {\n  const { mode, toggleFloating } = useChatPanelContext('ExpandTrigger');\n  const floating = mode === 'floating';\n\n  const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n    onClick?.(event);\n    if (event.defaultPrevented) return;\n    toggleFloating();\n  };\n\n  const resolvedChildren =\n    typeof children === 'function' ? children({ floating }) : children;\n\n  return (\n    <IconButton\n      size={2}\n      aria-label={\n        ariaLabel ?? (floating ? 'Dock chat panel' : 'Pop out chat panel')\n      }\n      onClick={handleClick}\n      data-slot='chat-panel-expand-trigger'\n      {...props}\n    >\n      {resolvedChildren ?? <ExpandIcon />}\n    </IconButton>\n  );\n}\n\nChatPanelExpandTrigger.displayName = 'ChatPanel.ExpandTrigger';\n"],"names":[],"mappings":";;;;;;;;;;;;AAYgB;;;AASd;AACE;;;AAEA;AACF;;AAWF;AAEA;AAIM;AACJ;AAOF;AAEA;AAIM;AAIJ;AAOF;AAEA;AAIM;AAIJ;AAOF;AAEA;;;AAYE;AACE;;;AAEA;AACF;;AAaF;AAEA;AAgBgB;;AAOd;AAEA;AACE;;;AAEA;AACF;AAEA;AAGA;AAaF;AAEA;;;;;;;"}