Writing on a phone: the composer rises as a sheet

On a phone the composer opened at the top of the feed whether or not the feed was scrolled there, and a reply, quote
or edit opened inside its card's 228px column. New PhoneSheet shows them as a sheet from the bottom of the screen below
md, over a dimmed page, with a heading and a close button (a tap outside or Escape closes it too); from md they stay in
place as before. On a phone a new post starts from a round button under the thumb (the feed keeps room for it at the
bottom), and the tabs' Post button shows from md. Opening the composer scrolls the feed to its top, and the composer's
words take the focus (DTextarea.Element). Picking a suggested mention or hashtag keeps the focus, and the phone's
keyboard, in the words (DButton.KeepFocus, and the words are focused again). The character count sits under the words
instead of over their last line, and the visibility menu names each choice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-06 23:15:54 +02:00
1 parent b3bb2a28c3
commit 071bcce4b0
9 files changed
+108 -30

No files matched your search

+7 -9
View File
@@ -406,18 +406,16 @@
</div>
</footer>
@if (isReplying)
{
@* under the post on a desktop, as a sheet over the page on a phone, where the card's column is too narrow *@
<PhoneSheet IsOpen="isReplying" OnClose="() => isReplying = false" Heading="@Localizer["Reply to {0}", "@" + status.Account?.Acct]">
<Composer InReplyTo="status" OnPublished="Replied" />
}
@if (isQuoting)
{
</PhoneSheet>
<PhoneSheet IsOpen="isQuoting" OnClose="() => isQuoting = false" Heading="@Localizer["Quote"]">
<Composer Quoting="status" OnPublished="Quoted" />
}
@if (isEditing)
{
</PhoneSheet>
<PhoneSheet IsOpen="isEditing" OnClose="() => isEditing = false" Heading="@Localizer["Edit"]">
<Composer Editing="status" OnPublished="Edited" />
}
</PhoneSheet>
@if (isReporting && status.Account is { } reported)
{
<ReportDialog Account="reported" Post="status" OnClosed="@(() => isReporting = false)" />