Skip to content

Toast notifications truncate long messages and swallow newlines (fix proposed in #558)Β #559

Description

@northwang-lucky

Hi @agegr πŸ‘‹

First off, thank you for building pi-web β€” it's been a pleasure to use.

I ran into a small usability issue with the floating toast notifications (the NoticeShelf):

  1. Long messages get truncated. The single-line nowrap + ellipsis span inside the fixed 60px / 620px container means longer notifications (e.g. the multi-field health report from the pi-fff extension) can never be read in full β€” there's no tooltip, expansion, or any other way to see the rest.
  2. Embedded newlines are lost. Extensions that compose multi-line messages with lines.join("\n") (again, pi-fff is a real-world example) render as one run-on line, because white-space: nowrap folds every \n into a space.
  3. The 5-second auto-dismiss can't be paused, so a toast may disappear before you finish reading it.

While looking into a fix I also found two subtle blockers worth mentioning:

  • The floating wrapper is intentionally click-through (pointer-events: none), which means hover events never reach the toast itself.
  • The notice-shelf-in entrance animation runs with fill: both, and its final keyframe pins the height to 60px β€” a completed forwards-fill animation keeps winning over inline styles, which silently defeats any attempt to let the toast grow.

I've put together a fix in PR #558: toasts now show their full text by default (newlines preserved via pre-line, long lines wrap within the existing max width) and live in the top-right corner with their right edge pinned, so the layout never shifts under the cursor. Hovering a toast no longer drives layout β€” it only pauses the dismiss timer, which resumes from the remaining time once you move the mouse away. The rest of the overlay stays click-through, and the changes are confined to NoticeShelf and the notice-expiry effect in useAgentSession.

Whenever you have a moment, I'd really appreciate a code review. I'm happy to iterate on the approach, adjust the UX details, or split the PR if you'd prefer smaller pieces. Thanks again for your time and for maintaining the project! πŸ™

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions