from typing import Optional, Callable, Awaitable from nicegui import ui class ChatInput(ui.textarea): def __init__(self, placeholder: str = 'Type your message...', on_enter: Optional[Callable[[str], Awaitable[None]]] = None, *args, **kwargs) -> None: super().__init__(placeholder=placeholder, *args, **kwargs) self._on_enter_callback = on_enter self.classes('flex-grow').props('outlined dense autogrow') self.on('keydown', self._handle_keydown) async def _handle_keydown(self, event) -> None: """Handle keyboard shortcuts for message input""" if hasattr(event, 'args') and event.args: key_event = event.args if key_event.get('key') == 'Enter' and not key_event.get('shiftKey', False): # Enter without Shift: Send message event.args['preventDefault'] = True if self._on_enter_callback and self.value: await self._on_enter_callback(self.value) self.value = '' # Shift+Enter: Allow default behavior (new line)