v0.1.0 - Gemini-style "Sticky Top" Scrolling & Progressive Disclosure UX
馃殌 New Features
- "Push and Pin" Scrolling Physics: Implements a custom, optimistic layout anchor system. When you send a message, the view smoothly anchors the message and pushes it upward as the AI response streams in, finally pinning it gracefully to the top of the screen.
- Progressive Disclosure APIs: Introduces new environment modifiers that let you inject custom views without cluttering initializers:
.messageActions: Inject custom toolbars (Thumbs Up/Down, Copy) below AI messages..conversationDisclaimer: Inject custom privacy text below the most recent AI message.
- Interruptible Generation: Tracks execution state within
MessageComposerView. While a generation task runs, the composer transforms the "Send" button into an active "Stop" button that supports cooperative task cancellation.
馃拕 UI Improvements
- Distinct Chat Bubbles: Updates the user message bubble to use an
UnevenRoundedRectangle, giving it a distinct "tail" effect. The library now renders AI messages directly into the view without a background bubble. - Smart Loading State: Automatically renders a bouncing-dot
TypingIndicatorif you temporarily add an AI message withcontent == nil. - High-Contrast Disabled State: Relies strictly on native platform styling for the empty composer "Send" button, ensuring high-contrast accessibility in both Light and Dark modes.
- Proportional Stop Icon: Scales the font size of the
stop.fillicon to perfectly balance its visual weight against the default send arrow.
鈿欙笍 Other Changes
- Comprehensive Architecture Documentation: Adds a new
ARCHITECTURE.mdfile that explains the deep SwiftUI Scroll Physics & Concurrency design decisions. - Concurrency Fixes: Eliminates 1-frame micro-delay layout bugs associated with Swift 6 Concurrency by utilizing a local
optimisticUserMessagestate to guarantee perfect keyboard-dismissal anchoring.
Full Changelog: v0.0.4...v0.1.0