ant-design-x-vue
Version: 
Craft AI-driven interfaces effortlessly
129 lines (128 loc) • 4.36 kB
TypeScript
import type { ButtonProps, TextAreaProps } from "ant-design-vue";
import { Input } from "ant-design-vue";
import type { ChangeEvent, ClipboardEventHandler, KeyboardEventHandler } from "ant-design-vue/es/_util/EventInterface";
import type { ConfigProviderProps } from "ant-design-vue/es/config-provider/context";
import type { CSSProperties, VNode } from "vue";
import type { AllowSpeech } from "./useSpeech";
import type { InputRef } from "ant-design-vue/es/vc-input/inputProps";
import type { AvoidValidation } from '../type-utility';
import SendButton from "./components/SendButton.vue";
import ClearButton from "./components/ClearButton.vue";
import LoadingButton from "./components/LoadingButton.vue";
import SpeechButton from "./components/SpeechButton/index.vue";
export type SubmitType = 'enter' | 'shiftEnter' | false;
export interface SenderComponents {
    input?: typeof Input.TextArea;
}
export type ActionsComponents = {
    SendButton: typeof SendButton;
    ClearButton: typeof ClearButton;
    LoadingButton: typeof LoadingButton;
    SpeechButton: typeof SpeechButton;
};
export type ActionsRender = (ori: VNode, info: {
    components: ActionsComponents;
}) => VNode;
export type FooterRender = (info: {
    components: ActionsComponents;
}) => VNode;
export interface SenderProps {
    onKeyPress?: KeyboardEventHandler;
    onFocus?: TextAreaProps['onFocus'];
    onBlur?: TextAreaProps['onBlur'];
    prefixCls?: string;
    defaultValue?: string;
    value?: string;
    loading?: boolean;
    placeholder?: TextAreaProps['placeholder'];
    readOnly?: boolean;
    submitType?: SubmitType;
    disabled?: boolean;
    onSubmit?: (message: string) => void;
    onChange?: (value: string, event?: ChangeEvent) => void;
    onCancel?: VoidFunction;
    onKeyDown?: KeyboardEventHandler;
    onPaste?: ClipboardEventHandler;
    onPasteFile?: (firstFile: File, files: FileList) => void;
    components?: SenderComponents;
    styles?: {
        prefix?: CSSProperties;
        input?: CSSProperties;
        actions?: CSSProperties;
        footer?: CSSProperties;
    };
    rootClassName?: string;
    classNames?: {
        prefix?: string;
        input?: string;
        actions?: string;
        footer?: string;
    };
    style?: CSSProperties;
    className?: string;
    actions?: VNode | ActionsRender | false;
    allowSpeech?: AvoidValidation<AllowSpeech>;
    prefix?: VNode;
    footer?: VNode | FooterRender;
    header?: VNode;
    autoSize?: boolean | {
        minRows?: number;
        maxRows?: number;
    };
}
export type SenderRef = {
    nativeElement: HTMLDivElement;
} & Pick<InputRef, 'focus' | 'blur'>;
export interface SenderHeaderContextProps {
    prefixCls?: ConfigProviderProps['prefixCls'];
}
export type SemanticType = 'header' | 'content';
export interface SenderHeaderProps {
    forceRender?: boolean;
    open?: boolean;
    onOpenChange?: (open: boolean) => void;
    title?: VNode | string;
    children?: VNode;
    className?: string;
    style?: CSSProperties;
    classNames?: Partial<Record<SemanticType, string>>;
    styles?: Partial<Record<SemanticType, CSSProperties>>;
    closable?: boolean;
}
export interface RecordingIconProps {
    className?: string;
}
export interface ActionButtonContextProps {
    prefixCls?: ConfigProviderProps['prefixCls'];
    onSend?: VoidFunction;
    onSendDisabled?: boolean;
    onClear?: VoidFunction;
    onClearDisabled?: boolean;
    onCancel?: VoidFunction;
    onCancelDisabled?: boolean;
    onSpeech?: VoidFunction;
    onSpeechDisabled?: boolean;
    speechRecording?: boolean;
    disabled?: boolean;
}
export interface AntdButtonProps {
    prefixCls?: ButtonProps['prefixCls'];
    type?: ButtonProps['type'];
    htmlType?: ButtonProps['htmlType'];
    shape?: ButtonProps['shape'];
    size?: ButtonProps['size'];
    loading?: ButtonProps['loading'];
    disabled?: ButtonProps['disabled'];
    ghost?: ButtonProps['ghost'];
    block?: ButtonProps['block'];
    danger?: ButtonProps['danger'];
    icon?: ButtonProps['icon'];
    href?: ButtonProps['href'];
    target?: ButtonProps['target'];
    title?: ButtonProps['title'];
    onClick?: ButtonProps['onClick'];
    onMousedown?: ButtonProps['onMousedown'];
}
export interface ActionButtonProps extends AntdButtonProps {
    action: 'onSend' | 'onClear' | 'onCancel' | 'onSpeech';
}