import { createSignal, Show, splitProps, onCleanup, createEffect } from 'solid-js'; import styles from '../../../assets/index.css'; import { BubbleButton } from './BubbleButton'; import { BubbleParams } from '../types'; import { Bot, BotProps } from '../../../components/Bot'; import Tooltip from './Tooltip'; import { getBubbleButtonSize } from '@/utils'; const defaultButtonColor = '#3B81F6'; const defaultIconColor = 'white'; export type BubbleProps = BotProps & BubbleParams; export const Bubble = (props: BubbleProps) => { const [bubbleProps] = splitProps(props, ['theme']); const [isBotOpened, setIsBotOpened] = createSignal(false); const [isBotStarted, setIsBotStarted] = createSignal(false); const [buttonPosition, setButtonPosition] = createSignal({ bottom: bubbleProps.theme?.button?.bottom ?? 20, right: bubbleProps.theme?.button?.left !== undefined ? undefined : (bubbleProps.theme?.button?.right ?? 20), left: bubbleProps.theme?.button?.left ?? undefined, }); const openBot = () => { if (!isBotStarted()) setIsBotStarted(true); setIsBotOpened(true); }; const closeBot = () => { setIsBotOpened(false); }; const toggleBot = () => { isBotOpened() ? closeBot() : openBot(); }; onCleanup(() => { setIsBotStarted(false); }); const buttonSize = getBubbleButtonSize(props.theme?.button?.size); // Default to 48px if size is not provided const buttonBottom = props.theme?.button?.bottom ?? 20; const chatWindowBottom = buttonBottom + buttonSize + 10; // Adjust the offset here for slight shift // Add viewport meta tag dynamically createEffect(() => { const meta = document.createElement('meta'); meta.name = 'viewport'; meta.content = 'width=device-width, initial-scale=1.0, interactive-widget=resizes-content'; document.head.appendChild(meta); return () => { document.head.removeChild(meta); }; }); const showTooltip = bubbleProps.theme?.tooltip?.showTooltip ?? false; return ( <>
); };