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 (
<>