UNPKG

@botonic/react

Version:

Build Chatbots using React

209 lines (186 loc) 4.77 kB
import React from 'react' import { SENDERS } from '../index-types' import { CoverComponentProps } from '../webchat/index-types' export type MessageType = | 'audio' | 'buttonmessage' | 'carousel' | 'custom' | 'document' | 'image' | 'location' | 'text' | 'video' export interface MessageProps { blob?: boolean children: React.ReactNode delay?: number enabletimestamps?: boolean sentBy?: SENDERS json?: Record<string, unknown> style?: Record<string, unknown> type?: MessageType typing?: number } export interface TextProps extends MessageProps { // converts markdown syntax to HTML markdown?: boolean feedbackEnabled?: boolean inferenceId?: string } export interface Webview { name: string } export interface ButtonProps { params?: any path?: string payload?: string target?: string url?: string webview?: Webview onClick?: () => void autodisable?: boolean disabled?: boolean disabledstyle?: boolean } export interface ReplyProps { path?: string payload?: string children: string } export interface PicProps { src: string } export type ImageProps = PicProps export interface TitleProps { children: React.ReactNode style: string } export type SubtitleProps = TitleProps export type CustomProp = { custom?: React.ComponentType } export type EnableProp = { enable?: boolean } export type ImageProp = { image?: string } // https URL or imported Image asset export type PersistentMenuCloseOption = { closeLabel: string } export type PersistentMenuOption = { label: string } & ButtonProps export type StyleProp = { style?: any } export type PersistentMenuTheme = ( | PersistentMenuCloseOption | PersistentMenuOption )[] export interface PersistentMenuProps { onClick: () => void options: any } export type BlockInputOption = { preprocess?: (message: string) => string match: RegExp[] message: string } export interface BlobProps { blobTick?: boolean blobTickStyle?: any blobWidth?: string imageStyle?: any } export interface ScrollbarProps { autoHide?: boolean thumb?: { bgcolor?: string border?: string color?: string opacity?: string } track?: { bgcolor?: string border?: string color?: string } } export interface ThemeProps extends StyleProp { mobileBreakpoint?: number mobileStyle?: any webview?: StyleProp & { header?: StyleProp } animations?: EnableProp intro?: StyleProp & ImageProp & CustomProp brand?: { color?: string } & ImageProp header?: { title?: string; subtitle?: string } & ImageProp & StyleProp & CustomProp message?: { bot?: BlobProps & ImageProp & StyleProp agent?: ImageProp user?: BlobProps & StyleProp customTypes?: React.ComponentType[] } & StyleProp & { timestamps?: { withImage?: boolean format: () => string } & StyleProp & EnableProp } button?: { autodisable?: boolean disabledstyle?: any hoverBackground?: string hoverTextColor?: string messageType?: 'text' | 'payload' urlIcon?: ImageProp & EnableProp } & StyleProp & CustomProp replies?: { align?: 'left' | 'center' | 'right' wrap?: 'wrap' | 'nowrap' } carousel?: { arrow?: { left: CustomProp right: CustomProp } enableArrows?: boolean } reply?: StyleProp & CustomProp triggerButton?: ImageProp & StyleProp & CustomProp notifications?: EnableProp & { banner?: CustomProp & EnableProp & { text?: string } triggerButton?: EnableProp } scrollButton?: EnableProp & CustomProp markdownStyle?: string // string template with css styles scrollbar?: ScrollbarProps & EnableProp userInput?: { attachments?: EnableProp & CustomProp blockInputs?: BlockInputOption[] box?: { placeholder: string } & StyleProp emojiPicker?: EnableProp & CustomProp menu?: { darkBackground?: boolean } & { custom?: React.ComponentType<PersistentMenuProps> } menuButton?: CustomProp persistentMenu?: PersistentMenuTheme sendButton?: EnableProp & CustomProp } & EnableProp & StyleProp imagePreviewer?: React.ComponentType<ImagePreviewerProps> } interface ImagePreviewerProps { src: string isPreviewerOpened: boolean closePreviewer: () => void } export interface CoverComponentOptions { component: React.ComponentType<CoverComponentProps> props?: any } export interface WebchatSettingsProps { blockInputs?: BlockInputOption[] enableAnimations?: boolean enableAttachments?: boolean enableEmojiPicker?: boolean enableUserInput?: boolean persistentMenu?: PersistentMenuTheme theme?: ThemeProps user?: { extra_data?: any } } export type WrappedComponent<Props> = React.FunctionComponent<Props> & { customTypeName: string }