import styled from '@emotion/styled'; import { Button, ActionIcon, Textarea } from '@mantine/core'; import { useCallback, useMemo } from 'react'; import { useLocation } from 'react-router-dom'; import { useAppContext } from '../context'; const Container = styled.div` background: #292933; border-top: thin solid #393933; padding: 1rem 1rem 0 1rem; .inner { max-width: 50rem; margin: auto; text-align: right; } .settings-button { margin: 0.5rem -0.4rem 0.5rem 1rem; font-size: 0.7rem; color: #999; } `; export declare type OnSubmit = (name?: string) => Promise; function PaperPlaneSubmitButton(props: { onSubmit: any, disabled?: boolean }) { return ( ); } export interface MessageInputProps { disabled?: boolean; } export default function MessageInput(props: MessageInputProps) { const context = useAppContext(); const pathname = useLocation().pathname; const onChange = useCallback((e: React.ChangeEvent) => { context.setMessage(e.target.value); }, [context.setMessage]); const onSubmit = useCallback(async () => { if (await context.onNewMessage(context.message)) { context.setMessage(''); } }, [context.message, context.onNewMessage, context.setMessage]); const onKeyDown = useCallback((e: React.KeyboardEvent) => { if (e.key === 'Enter' && e.shiftKey === false && !props.disabled) { e.preventDefault(); onSubmit(); } }, [onSubmit, props.disabled]); const rightSection = useMemo(() => { return (
); }, [onSubmit, props.disabled]); const openSystemPromptPanel = useCallback(() => context.settings.open('options', 'system-prompt'), []); const openTemperaturePanel = useCallback(() => context.settings.open('options', 'temperature'), []); const messagesToDisplay = context.currentChat.messagesToDisplay; const disabled = context.generating || messagesToDisplay[messagesToDisplay.length - 1]?.role === 'user' || (messagesToDisplay.length > 0 && !messagesToDisplay[messagesToDisplay.length - 1]?.done); const isLandingPage = pathname === '/'; if (context.isShare || (!isLandingPage && !context.id)) { return null; } return