- Add paperclip button to ChatInput (both stacked and inline variants)
- File picker accepts images (jpeg/png/gif/webp) and PDFs up to 10MB
- Attachments are converted to FileUIPart (data URLs) via FileReader
- Preview chips shown in input: thumbnails for images, filename for PDFs
- Remove-chip button on hover
- handleSend forwards FileUIPart[] to sendMessage via AI SDK
- UserMessage renders image thumbnails and PDF file chips inline
- canSend allows sending with attachments even when text is empty