Add Foundry mobile layout with Tauri iOS/Android support

- Add responsive mobile layout with bottom pill tab bar, swipe navigation, and task list as home screen
- Add platform detection (useIsMobile hook) with viewport breakpoint and VITE_MOBILE build flag
- Mobile-optimize settings/billing/account pages (single-column layout with horizontal tabs)
- Add iOS safe area inset handling with 47px minimum padding
- Scaffold Tauri v2 mobile targets (iOS/Android) with platform-gated sidecar and capabilities
- Add notification sound support and mobile build script

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nicholas Kissel 2026-03-12 22:35:54 -07:00
parent 436eb4a3a3
commit f464fa96ad
68 changed files with 8006 additions and 631 deletions

View file

@ -4,6 +4,7 @@ import { LabelXSmall } from "baseui/typography";
import { History } from "lucide-react";
import { useFoundryTokens } from "../../app/theme";
import { Tooltip } from "./ui";
import { formatMessageTimestamp, type HistoryEvent } from "./view-model";
export const HistoryMinimap = memo(function HistoryMinimap({ events, onSelect }: { events: HistoryEvent[]; onSelect: (event: HistoryEvent) => void }) {
@ -41,29 +42,31 @@ export const HistoryMinimap = memo(function HistoryMinimap({ events, onSelect }:
gap: "6px",
})}
>
<div
role="button"
tabIndex={0}
onClick={() => setOpen((prev) => !prev)}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") setOpen((prev) => !prev);
}}
className={css({
width: "26px",
height: "26px",
borderRadius: "6px",
display: "flex",
alignItems: "center",
justifyContent: "center",
cursor: "pointer",
color: open ? t.textSecondary : t.textTertiary,
backgroundColor: open ? t.interactiveHover : "transparent",
transition: "background 200ms ease, color 200ms ease",
":hover": { color: t.textSecondary, backgroundColor: t.interactiveHover },
})}
>
<History size={14} />
</div>
<Tooltip label="History" placement="left">
<div
role="button"
tabIndex={0}
onClick={() => setOpen((prev) => !prev)}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") setOpen((prev) => !prev);
}}
className={css({
width: "26px",
height: "26px",
borderRadius: "6px",
display: "flex",
alignItems: "center",
justifyContent: "center",
cursor: "pointer",
color: open ? t.textSecondary : t.textTertiary,
backgroundColor: open ? t.interactiveHover : "transparent",
transition: "background 200ms ease, color 200ms ease",
":hover": { color: t.textSecondary, backgroundColor: t.interactiveHover },
})}
>
<History size={14} />
</div>
</Tooltip>
{open ? (
<div