Files
amethyst/commons
Claude 9b26de4515 refactor(commonsUI): move the remaining movable layouts, feed helpers and link components
Most of the sweep's "Batch 4" had already landed in other PRs; this moves what
was left that had no real blocker.

- NewItemsBubble -> commonsUI components.
- ChatHeaderLayout, LeftPictureLayout, listItem/SlimListItemLayout -> commonsUI
  layouts. Their @Previews use app drawables, TimeAgo and TextCount, so the
  previews stay in the app as *Preview.kt files.
- WatchScrollToTop (list/grid/pager) -> commonsUI feeds; the
  CardFeedContentState overload stays in the app. The app's StickToTopOnPrepend
  was a copy of the commons one and is deleted; the commons one now collects
  with collectAsStateWithLifecycle, as the app copy did.
- ChannelFeedState, ChannelFeedContentState -> commons feeds (headless).
  checkNotInMainThread() becomes LocalCache.appHost.assertNotMainThread(),
  which Android wires to the same check.
- ClickableBuzzInviteLink, ClickableConcordInviteLink, ClickableRelayGroupLink,
  ClickableRelayUrl, OutlinedThinPaddingTextField -> commonsUI components.
- The app's ClickableEmail/ClickablePhone are deleted in favour of the commons
  ones, which open mailto:/tel: through LocalUriHandler rather than
  ACTION_SEND/ACTION_DIAL intents. The commons ClickablePhone is new.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UjQQN9CgWHVtNCSWqnKoqY
2026-09-26 21:13:14 +00:00
..