Skip to content

v1.2.0 — Chat/agent UX-audit remediation

Latest

Choose a tag to compare

@codenameakshay codenameakshay released this 18 Aug 15:09
fe63896

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; a severity tier (normal/elevated/destructive) that re-weights the actions for irreversible commands; expired/timedOut statuses; grant records once-vs-always and an onRevoke affordance; the action row can no longer double-fire during its exit.
  • BeuiStreamingResponse: error is now visibly failed (destructive notice + retry) instead of pixel-identical to complete; new stopped status with a Continue affordance.
  • BeuiAgentActivity: failed/cancelled statuses — a crashed run no longer summarizes as success.
  • BeuiImageGeneration: determinate progress hairline and onCancel.

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 BeuiOverlay surfaces even with trapFocus: 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 focusRing color 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 via errorNonce.
  • 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.
  • BeuiPreviewRail works on touch. BeuiChatApp is responsive.

Changed defaults (deliberate, audit-driven)

  • BeuiMessage/BeuiMessageBubble animateIn now default to true (mount-only).
  • BeuiToolApproval.defaultOpen resolves by parameters.isNotEmpty.
  • BeuiPreviewRail.highlightActive defaults to true.
  • BeuiFileUpload drag wording is opt-in (dragAndDrop).
  • BeuiToolApproval/BeuiToolResult tool/title/description/meta narrowed from Object to typed String? + Widget? pairs (deprecated *Node params still accepted).

Localization & theming

  • BeuiAgentStrings covers the full agent family.
  • New BeuiColors.focusRing role (WCAG 2.2 SC 1.4.11).
  • New BeuiAgentTheme.statusLight/statusDark.

Fixes

  • LucideIcons.history removed in flutter_lucide 1.31.0 — replaced with rotate_ccw_clock.
  • BeuiPullToRefresh indicator 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/