init
This commit is contained in:
27
src/niceguiex/components/chat_input.py
Normal file
27
src/niceguiex/components/chat_input.py
Normal file
@@ -0,0 +1,27 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user