fix: ui fixes minor
This commit is contained in:
@@ -2,6 +2,7 @@ import { Suspense } from "react";
|
|||||||
import { SiteHeader } from "@/components/site-header";
|
import { SiteHeader } from "@/components/site-header";
|
||||||
import { SiteSidebar } from "@/components/site-sidebar";
|
import { SiteSidebar } from "@/components/site-sidebar";
|
||||||
import { SiteBottomNav } from "@/components/site-bottom-nav";
|
import { SiteBottomNav } from "@/components/site-bottom-nav";
|
||||||
|
import { SiteFooter } from "@/components/site-footer";
|
||||||
import { VerifyEmailBanner } from "@/components/auth/verify-email-banner";
|
import { VerifyEmailBanner } from "@/components/auth/verify-email-banner";
|
||||||
import { TextSelectionToolbar } from "@/components/text-selection-toolbar";
|
import { TextSelectionToolbar } from "@/components/text-selection-toolbar";
|
||||||
import { TextHighlighter } from "@/components/text-highlighter";
|
import { TextHighlighter } from "@/components/text-highlighter";
|
||||||
@@ -28,6 +29,7 @@ export default function AppLayout({
|
|||||||
<div className="flex-1 flex flex-col md:pl-16 pb-16 md:pb-0">
|
<div className="flex-1 flex flex-col md:pl-16 pb-16 md:pb-0">
|
||||||
<SiteHeader />
|
<SiteHeader />
|
||||||
{children}
|
{children}
|
||||||
|
<SiteFooter />
|
||||||
</div>
|
</div>
|
||||||
<SiteBottomNav />
|
<SiteBottomNav />
|
||||||
<TextSelectionToolbar />
|
<TextSelectionToolbar />
|
||||||
|
|||||||
+1
-8
@@ -1,7 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { Compass, LogIn, MessageSquare, Sparkles } from "lucide-react";
|
import { Compass, LogIn, Sparkles } from "lucide-react";
|
||||||
import { useAuth } from "@/components/auth/auth-provider";
|
import { useAuth } from "@/components/auth/auth-provider";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,13 +79,6 @@ export default function HomePage() {
|
|||||||
</p>
|
</p>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
<Link
|
|
||||||
href="/feedback"
|
|
||||||
className="mt-8 inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground underline-offset-4 hover:underline"
|
|
||||||
>
|
|
||||||
<MessageSquare className="size-3.5" />
|
|
||||||
Send feedback
|
|
||||||
</Link>
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
);
|
);
|
||||||
|
|||||||
+18
-11
@@ -92,18 +92,25 @@ function SignOutSection() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Renders as a full-width clickable row matching LegalLink — same
|
||||||
|
// padding, same hover, with LogOut taking the slot ChevronRight uses
|
||||||
|
// on link rows. The whole row is the click target.
|
||||||
return (
|
return (
|
||||||
<section className="pt-4">
|
<ul className="divide-y divide-border">
|
||||||
<button
|
<li>
|
||||||
type="button"
|
<button
|
||||||
onClick={onSignOut}
|
type="button"
|
||||||
disabled={busy}
|
onClick={onSignOut}
|
||||||
className="inline-flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/5 px-4 py-2.5 text-base font-medium text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-60"
|
disabled={busy}
|
||||||
>
|
className="w-full flex items-center justify-between py-3.5 group disabled:opacity-60"
|
||||||
<LogOut className="size-5" />
|
>
|
||||||
{busy ? "Signing out…" : "Sign out"}
|
<span className="text-base text-foreground group-hover:text-primary transition-colors">
|
||||||
</button>
|
{busy ? "Signing out…" : "Sign out from this device"}
|
||||||
</section>
|
</span>
|
||||||
|
<LogOut className="size-5 text-muted-foreground group-hover:text-foreground transition-colors" />
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import { SiteHeader } from "@/components/site-header";
|
import { SiteHeader } from "@/components/site-header";
|
||||||
|
import { SiteFooter } from "@/components/site-footer";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Minimal layout for legal / informational pages (Privacy Policy, Terms of
|
* Minimal layout for legal / informational pages (Privacy Policy, Terms of
|
||||||
* Use, Data Deletion). Just the global SiteHeader and the content — no
|
* Use, Data Deletion). Just the global SiteHeader, the content, and the
|
||||||
* sidebar, no bottom nav, no in-page reading affordances. Keeps these
|
* site-wide feedback footer — no sidebar, no bottom nav, no in-page
|
||||||
* pages focused on the text they exist to deliver.
|
* reading affordances. Keeps these pages focused on the text they exist
|
||||||
|
* to deliver.
|
||||||
*/
|
*/
|
||||||
export default function LegalLayout({
|
export default function LegalLayout({
|
||||||
children,
|
children,
|
||||||
@@ -15,6 +17,7 @@ export default function LegalLayout({
|
|||||||
<div className="flex-1 flex flex-col">
|
<div className="flex-1 flex flex-col">
|
||||||
<SiteHeader />
|
<SiteHeader />
|
||||||
{children}
|
{children}
|
||||||
|
<SiteFooter />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-38
@@ -1,52 +1,27 @@
|
|||||||
/**
|
/**
|
||||||
* SiteFooter — one slim row. Wordmark on the left, dedication on the
|
* SiteFooter — a single slim row carrying the feedback link. Mounted in
|
||||||
* right, About link in the middle. That's all.
|
* both (app) and (legal) layouts so the affordance follows the user
|
||||||
|
* everywhere on the site without taking up perceptible vertical space.
|
||||||
|
*
|
||||||
|
* No wordmark, no about / privacy / terms links, no dedication line —
|
||||||
|
* those live in settings and the legal pages themselves. This footer
|
||||||
|
* exists solely to keep "send us feedback" one tap away from anywhere.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { MessageSquare } from "lucide-react";
|
||||||
|
|
||||||
export function SiteFooter() {
|
export function SiteFooter() {
|
||||||
return (
|
return (
|
||||||
<footer className="mt-auto border-t border-border bg-secondary text-secondary-foreground">
|
<footer className="mt-auto border-t border-border bg-secondary text-secondary-foreground">
|
||||||
<div className="max-w-5xl mx-auto px-4 sm:px-6 py-4 flex flex-col sm:flex-row items-center justify-between gap-2 text-xs text-muted-foreground">
|
<div className="max-w-5xl mx-auto px-4 sm:px-6 py-3 flex items-center justify-center">
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/feedback"
|
||||||
aria-label="Prabhupāda Says — home"
|
className="inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground underline-offset-4 hover:underline transition-colors"
|
||||||
className="font-[family-name:var(--font-title)] font-semibold uppercase tracking-[0.12em] text-[0.7rem] text-foreground/80 hover:text-foreground transition-colors"
|
|
||||||
>
|
>
|
||||||
Prabhupāda Says
|
<MessageSquare className="size-3.5" />
|
||||||
|
Send feedback
|
||||||
</Link>
|
</Link>
|
||||||
<div className="flex flex-wrap items-center justify-center gap-x-3 gap-y-1">
|
|
||||||
<Link
|
|
||||||
href="/about"
|
|
||||||
className="hover:text-foreground transition-colors"
|
|
||||||
>
|
|
||||||
About
|
|
||||||
</Link>
|
|
||||||
<span aria-hidden>·</span>
|
|
||||||
<Link
|
|
||||||
href="/privacy"
|
|
||||||
className="hover:text-foreground transition-colors"
|
|
||||||
>
|
|
||||||
Privacy
|
|
||||||
</Link>
|
|
||||||
<span aria-hidden>·</span>
|
|
||||||
<Link
|
|
||||||
href="/terms"
|
|
||||||
className="hover:text-foreground transition-colors"
|
|
||||||
>
|
|
||||||
Terms
|
|
||||||
</Link>
|
|
||||||
<span aria-hidden>·</span>
|
|
||||||
<Link
|
|
||||||
href="/data-deletion"
|
|
||||||
className="hover:text-foreground transition-colors"
|
|
||||||
>
|
|
||||||
Data Deletion
|
|
||||||
</Link>
|
|
||||||
<span aria-hidden>·</span>
|
|
||||||
<span>All glories to Śrīla Prabhupāda</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user