Closes #993 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added a detailed explanation page for the "Remember user" setting in the app documentation. - Introduced persistence of chat state across sessions, with options for local or session storage. - Enhanced bot functionality to store and retrieve initial chat replies and manage bot open state with improved storage handling. - Added a new callback for chat state persistence to bot component props. - **Improvements** - Updated the general settings form to clarify the description of the "Remember user" feature. - Enhanced custom CSS handling and progress value persistence in bot components. - Added conditional transition disabling in various components for smoother user experiences. - Simplified the handling of `onTransitionEnd` across multiple bubble components. - **Refactor** - Renamed `inputIndex` to `chunkIndex` or `index` in various components for consistency. - Removed unused ESLint disable comments related to reactivity rules. - Adjusted import statements and cleaned up code across several files. - **Bug Fixes** - Fixed potential issues with undefined callbacks by introducing optional chaining in component props. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import { BubbleProps } from './features/bubble'
|
|
import { PopupProps } from './features/popup'
|
|
import { BotProps } from './components/Bot'
|
|
import {
|
|
close,
|
|
hidePreviewMessage,
|
|
open,
|
|
setPrefilledVariables,
|
|
showPreviewMessage,
|
|
toggle,
|
|
setInputValue,
|
|
unmount,
|
|
} from './features/commands'
|
|
|
|
export const initStandard = (props: BotProps & { id?: string }) => {
|
|
const standardElement = props.id
|
|
? document.getElementById(props.id)
|
|
: document.querySelector('typebot-standard')
|
|
if (!standardElement) throw new Error('<typebot-standard> element not found.')
|
|
Object.assign(standardElement, props)
|
|
}
|
|
|
|
export const initPopup = (props: PopupProps) => {
|
|
const popupElement = document.createElement('typebot-popup')
|
|
Object.assign(popupElement, props)
|
|
document.body.prepend(popupElement)
|
|
}
|
|
|
|
export const initBubble = (props: BubbleProps) => {
|
|
const bubbleElement = document.createElement('typebot-bubble')
|
|
Object.assign(bubbleElement, props)
|
|
document.body.prepend(bubbleElement)
|
|
}
|
|
|
|
type Typebot = {
|
|
initStandard: typeof initStandard
|
|
initPopup: typeof initPopup
|
|
initBubble: typeof initBubble
|
|
close: typeof close
|
|
hidePreviewMessage: typeof hidePreviewMessage
|
|
open: typeof open
|
|
setPrefilledVariables: typeof setPrefilledVariables
|
|
showPreviewMessage: typeof showPreviewMessage
|
|
toggle: typeof toggle
|
|
setInputValue: typeof setInputValue
|
|
unmount: typeof unmount
|
|
}
|
|
|
|
declare const window:
|
|
| {
|
|
Typebot: Typebot | undefined
|
|
}
|
|
| undefined
|
|
|
|
export const parseTypebot = () => ({
|
|
initStandard,
|
|
initPopup,
|
|
initBubble,
|
|
close,
|
|
hidePreviewMessage,
|
|
open,
|
|
setPrefilledVariables,
|
|
showPreviewMessage,
|
|
toggle,
|
|
setInputValue,
|
|
unmount,
|
|
})
|
|
|
|
export const injectTypebotInWindow = (typebot: Typebot) => {
|
|
if (typeof window === 'undefined') return
|
|
window.Typebot = { ...typebot }
|
|
}
|