fix(mobile): coach padding with the keyboard up, chip remove targets

- The Coach thread kept 80 px free under the last message for the New
  conversation button while the keyboard hid that button.
- The remove buttons on lab alias chips and attached-document chips
  reached sideways into their own label and the next chip, and an
  alias is removed at once. Their tap area now stays inside the chip's
  gaps sideways and keeps its height.
- A capture menu comment described a dialog that is gone.
This commit is contained in:
Marc-André Bombeck committed 2026-11-12 15:09:34 +01:00
1 parent cb569b6c9d
commit 7b6d518ca6
6 files changed
+9 -9

No files matched your search

@@ -1088,7 +1088,7 @@
"components/layout/account-switcher-menu.tsx": 1,
"components/layout/auth-shell.tsx": 13,
"components/layout/bottom-nav.tsx": 8,
"components/layout/capture-picker.tsx": 4,
"components/layout/capture-picker.tsx": 3,
"components/layout/nav-model.ts": 17,
"components/layout/record-session-fence-bridge.tsx": 1,
"components/layout/shared-record-banner.tsx": 1,
@@ -258,8 +258,10 @@ describe("<MessageThread>", () => {
html.match(/<div[^>]*data-slot="coach-message-thread"[^>]*>/)?.[0] ?? "";
expect(scroller).toContain("pb-20");
// Back to the plain gutter once the button sits beside the composer.
// Back to the plain gutter once the button sits beside the composer,
// and while the keyboard hides it.
expect(scroller).toContain("@min-[57rem]/coach-thread:pb-6");
expect(scroller).toContain("keyboard-open:pb-6");
});
it("folds an older message's provenance into the thought-process row, never a raw key", () => {
@@ -657,8 +657,9 @@ export function MessageThread({
// bottom edge while the composer fills the column (`NewChatFab`),
// so the last message keeps the button's height free, as the
// shell clears the Coach button. The button moves beside a 54rem
// composer, which the column is at 57rem with its padding.
"pb-20 @min-[57rem]/coach-thread:pb-6",
// composer, which the column is at 57rem with its padding, and
// hides while the keyboard is up.
"keyboard-open:pb-6 pb-20 @min-[57rem]/coach-thread:pb-6",
)}
>
{[
+1 -1
View File
@@ -90,7 +90,7 @@ export function BiomarkerAliases({
{canEdit ? (
<button
type="button"
className="hover:text-foreground text-muted-foreground focus-visible:ring-ring/50 relative -my-1 -me-1 inline-flex size-6 items-center justify-center rounded-full after:absolute after:-inset-2.5 focus-visible:ring-[3px] focus-visible:outline-none"
className="hover:text-foreground text-muted-foreground focus-visible:ring-ring/50 relative -my-1 -me-1 inline-flex size-6 items-center justify-center rounded-full after:absolute after:-inset-x-1 after:-inset-y-2.5 focus-visible:ring-[3px] focus-visible:outline-none"
onClick={() =>
save.mutate(aliases.filter((a) => a !== alias))
}
-3
View File
@@ -179,9 +179,6 @@ export function CapturePicker({
// sheet that is already open. See `admittedCaptureKind`.
const openKind = admittedCaptureKind(kind, offered);
const [footerEl, setFooterEl] = useState<HTMLDivElement | null>(null);
// v1.30.1 — mirrors `QuickEntrySheets`' `confirmDiscardOpen`: hold a
// dismiss attempt here instead of closing outright when the form
// body carries unsaved input.
function chooseKind(next: CaptureKind) {
if (!offered.includes(next)) return;
@@ -430,7 +430,7 @@ export function ShareLinkCreateForm({
prev.filter((d) => d.id !== doc.id),
)
}
className="hover:bg-background/80 focus-visible:ring-ring/50 relative flex size-5 shrink-0 items-center justify-center rounded-full after:absolute after:-inset-3 focus-visible:ring-[3px] focus-visible:outline-none"
className="hover:bg-background/80 focus-visible:ring-ring/50 relative flex size-5 shrink-0 items-center justify-center rounded-full after:absolute after:-inset-x-1 after:-inset-y-3 focus-visible:ring-[3px] focus-visible:outline-none"
aria-label={t("settings.sharing.attachRemove", {
title: doc.title,
})}