UX-audit remediation across the chat/agent family — 154 audited findings resolved. Almost all API is additive; the deliberate default changes are listed under Changed defaults.
Trust & failure states
BeuiToolApproval: details open by default whenever parameters exist; aseveritytier (normal/elevated/destructive) that re-weights the actions for irreversible commands;expired/timedOutstatuses;grantrecords once-vs-always and anonRevokeaffordance; the action row can no longer double-fire during its exit.BeuiStreamingResponse:erroris now visibly failed (destructive notice + retry) instead of pixel-identical tocomplete; newstoppedstatus with a Continue affordance.BeuiAgentActivity:failed/cancelledstatuses — a crashed run no longer summarizes as success.BeuiImageGeneration: determinateprogresshairline andonCancel.
Keyboard & screen readers
- Full keyboard contracts (focus, Enter/Space, Esc, visible focus ring) for tool-approval actions, the composer's
+menu and model picker,BeuiFileUpload, the feedback widget, and sidebar rows. - Esc now dismisses
BeuiOverlaysurfaces even withtrapFocus: false. - The transcript announces streamed text through one debounced live region. Terminal outcomes (Failed, Denied, Copied, Sent) are announced.
- Focus rings paint outside layout via the new
focusRingcolor role (≥3:1 in all 22 theme×brightness combos). - 44px minimum hit areas across the family.
Contrast
- Placeholders, tool slugs, metadata, line-number gutters, citation domains, and light-mode status badges move to AA-passing values.
Composer & uploads
BeuiPromptInput: attachment chip rail, keyboard-driven model picker, viewport-aware menu placement, Enter-while-streaming feedback.- Upload components: real
progress, cancel-in-flight,maxFileSize+ inline rejection, seekable audio scrubber. BeuiInput: left-aligned announced errors, label association, shake replay viaerrorNonce.BeuiFeedbackWidget: drafts survive dismissal, submit validates inline, optional sentiment row.
Reading long/streamed content
- Jump-to-latest pills with unread counts. Streaming viewports stop yanking the reader once they scroll away.
BeuiFileDiff: wrap or horizontal scroll, hunk-gap markers, change navigation.BeuiMessageScroller.builder— lazy sliver path for long transcripts.BeuiPreviewRailworks on touch.BeuiChatAppis responsive.
Changed defaults (deliberate, audit-driven)
BeuiMessage/BeuiMessageBubbleanimateInnow default to true (mount-only).BeuiToolApproval.defaultOpenresolves byparameters.isNotEmpty.BeuiPreviewRail.highlightActivedefaults to true.BeuiFileUploaddrag wording is opt-in (dragAndDrop).BeuiToolApproval/BeuiToolResulttool/title/description/metanarrowed fromObjectto typedString?+Widget?pairs (deprecated*Nodeparams still accepted).
Localization & theming
BeuiAgentStringscovers the full agent family.- New
BeuiColors.focusRingrole (WCAG 2.2 SC 1.4.11). - New
BeuiAgentTheme.statusLight/statusDark.
Fixes
LucideIcons.historyremoved in flutter_lucide 1.31.0 — replaced withrotate_ccw_clock.BeuiPullToRefreshindicator now follows the finger during the pull.- Reduced-motion arrival fixes so reveals reach their target state instead of freezing mid-transition.
Package: https://pub.dev/packages/beui/versions/1.2.0
Gallery: https://codenameakshay.github.io/beui/