From 439664a97d76f0f855d96b0bfd14bfd712403599 Mon Sep 17 00:00:00 2001 From: gosangam Date: Sat, 13 Jun 2026 02:24:42 +0530 Subject: [PATCH] chore: code refactor --- app/(app)/about/page.tsx | 2 +- app/(app)/books/bbd/[chapter]/page.tsx | 4 +- app/(app)/books/bbd/page.tsx | 2 +- app/(app)/books/bg/[chapter]/[verse]/page.tsx | 4 +- app/(app)/books/bg/page.tsx | 2 +- app/(app)/books/bk/[chapter]/page.tsx | 4 +- app/(app)/books/bk/page.tsx | 2 +- app/(app)/books/bs/[chapter]/[verse]/page.tsx | 4 +- app/(app)/books/bs/[chapter]/page.tsx | 2 +- app/(app)/books/bs/page.tsx | 2 +- app/(app)/books/cbhc/[chapter]/page.tsx | 4 +- app/(app)/books/cbhc/page.tsx | 2 +- .../cc/[lila]/[chapter]/[verse]/page.tsx | 4 +- app/(app)/books/cc/[lila]/page.tsx | 2 +- app/(app)/books/cc/page.tsx | 2 +- app/(app)/books/chapter-viewer.tsx | 2 +- app/(app)/books/ds/[chapter]/page.tsx | 4 +- app/(app)/books/ds/page.tsx | 2 +- app/(app)/books/ej/[chapter]/page.tsx | 4 +- app/(app)/books/ej/page.tsx | 2 +- app/(app)/books/ek/[chapter]/page.tsx | 4 +- app/(app)/books/ek/page.tsx | 2 +- app/(app)/books/gg/[chapter]/page.tsx | 4 +- app/(app)/books/gg/page.tsx | 2 +- app/(app)/books/hkh/[chapter]/page.tsx | 4 +- app/(app)/books/hkh/page.tsx | 2 +- app/(app)/books/iso/[mantra]/page.tsx | 4 +- app/(app)/books/iso/page.tsx | 2 +- app/(app)/books/kb/[volume]/[slug]/page.tsx | 4 +- app/(app)/books/kb/[volume]/page.tsx | 2 +- app/(app)/books/kb/page.tsx | 2 +- app/(app)/books/lcl/[chapter]/page.tsx | 4 +- app/(app)/books/lcl/page.tsx | 2 +- app/(app)/books/lob/[chapter]/page.tsx | 4 +- app/(app)/books/lob/page.tsx | 2 +- app/(app)/books/mg/[chapter]/page.tsx | 4 +- app/(app)/books/mg/page.tsx | 2 +- app/(app)/books/mm/[chapter]/[verse]/page.tsx | 4 +- app/(app)/books/mm/[chapter]/page.tsx | 2 +- app/(app)/books/mm/page.tsx | 2 +- app/(app)/books/mog/[chapter]/page.tsx | 4 +- app/(app)/books/mog/page.tsx | 2 +- .../books/nbs/[chapter]/[verse]/page.tsx | 4 +- app/(app)/books/nbs/[chapter]/page.tsx | 2 +- app/(app)/books/nbs/page.tsx | 2 +- app/(app)/books/nod/[chapter]/page.tsx | 4 +- app/(app)/books/nod/page.tsx | 2 +- app/(app)/books/noi/[text]/page.tsx | 4 +- app/(app)/books/noi/page.tsx | 2 +- app/(app)/books/ochkm/[chapter]/page.tsx | 4 +- app/(app)/books/ochkm/page.tsx | 2 +- app/(app)/books/owk/[chapter]/page.tsx | 4 +- app/(app)/books/owk/page.tsx | 2 +- app/(app)/books/page.tsx | 2 +- app/(app)/books/pk/[chapter]/page.tsx | 4 +- app/(app)/books/pk/page.tsx | 2 +- app/(app)/books/poy/[chapter]/page.tsx | 4 +- app/(app)/books/poy/page.tsx | 2 +- app/(app)/books/pqpa/[chapter]/page.tsx | 4 +- app/(app)/books/pqpa/page.tsx | 2 +- app/(app)/books/rv/[chapter]/page.tsx | 4 +- app/(app)/books/rv/page.tsx | 2 +- .../sb/[canto]/[chapter]/[verse]/page.tsx | 4 +- app/(app)/books/sb/[canto]/page.tsx | 2 +- app/(app)/books/sb/page.tsx | 2 +- .../books/sb1962/[chapter]/[verse]/page.tsx | 4 +- app/(app)/books/sb1962/page.tsx | 2 +- app/(app)/books/ssr/[chapter]/page.tsx | 4 +- app/(app)/books/ssr/page.tsx | 2 +- app/(app)/books/sva/[chapter]/page.tsx | 4 +- app/(app)/books/sva/page.tsx | 2 +- app/(app)/books/tlc/[chapter]/page.tsx | 4 +- app/(app)/books/tlc/page.tsx | 2 +- app/(app)/books/tlk/[chapter]/page.tsx | 4 +- app/(app)/books/tlk/page.tsx | 2 +- app/(app)/books/tqk/[chapter]/page.tsx | 4 +- app/(app)/books/tqk/page.tsx | 2 +- app/(app)/books/ttp/[chapter]/page.tsx | 4 +- app/(app)/books/ttp/page.tsx | 2 +- app/(app)/books/va/[chapter]/page.tsx | 4 +- app/(app)/books/va/page.tsx | 2 +- app/(app)/c/[id]/page.tsx | 2 +- app/(app)/disciples/page.tsx | 2 +- app/(app)/essays/[slug]/page.tsx | 4 +- app/(app)/essays/page.tsx | 2 +- app/(app)/journals/[slug]/[chapter]/page.tsx | 4 +- app/(app)/journals/[slug]/page.tsx | 2 +- app/(app)/journals/page.tsx | 2 +- app/(app)/layout.tsx | 8 +- app/(app)/letters/[slug]/page.tsx | 2 +- app/(app)/letters/page.tsx | 2 +- app/(app)/magazines/[slug]/[issue]/page.tsx | 4 +- app/(app)/magazines/[slug]/page.tsx | 2 +- app/(app)/magazines/page.tsx | 2 +- app/(app)/notifications/page.tsx | 48 +- .../other-documents/[slug]/[chapter]/page.tsx | 4 +- app/(app)/other-documents/[slug]/page.tsx | 2 +- app/(app)/other-documents/page.tsx | 2 +- app/(app)/search/search-content.tsx | 23 +- app/(app)/transcriptions/[slug]/page.tsx | 4 +- app/(app)/transcriptions/page.tsx | 2 +- .../transcriptions/place/[place]/page.tsx | 2 +- .../year/[year]/year-browser.tsx | 2 +- app/(app)/u/[handle]/collections/page.tsx | 2 +- app/(app)/u/[handle]/mentions/page.tsx | 2 +- app/(app)/u/[handle]/posts-grid.tsx | 2 +- app/(app)/u/[handle]/posts/scroll-feed.tsx | 2 +- app/(app)/u/me/collections/[id]/page.tsx | 4 +- app/(app)/u/me/collections/page.tsx | 2 +- app/(app)/u/me/mentions/page.tsx | 2 +- app/(app)/u/me/page.tsx | 2 +- app/(app)/u/me/posts/page.tsx | 2 +- app/(legal)/data-deletion/page.tsx | 2 +- app/(legal)/layout.tsx | 4 +- app/(legal)/privacy/page.tsx | 2 +- app/(legal)/terms/page.tsx | 2 +- components/{ => layout}/find-in-page.tsx | 0 components/{ => layout}/header-search.tsx | 0 components/{ => layout}/logo.tsx | 0 components/{ => layout}/mobile-nav.tsx | 0 components/{ => layout}/notification-bell.tsx | 0 components/{ => layout}/page-header.tsx | 0 components/{ => layout}/site-bottom-nav.tsx | 0 components/{ => layout}/site-footer.tsx | 0 components/{ => layout}/site-header.tsx | 2 +- components/{ => layout}/site-mobile-nav.tsx | 0 components/{ => layout}/site-sidebar.tsx | 0 components/profile/profile-header.tsx | 54 +- components/profile/profile-sidebar.tsx | 30 +- components/profile/profile-view-header.tsx | 35 +- .../{ => collection}/collection-grid-card.tsx | 2 +- .../collection-scroll-card.tsx | 4 +- .../{ => collection}/collection-views.tsx | 0 .../edit-collection-drawer.tsx | 0 components/social/comment/comment-menu.tsx | 144 ++++ .../social/comment/comment-report-modal.tsx | 135 ++++ components/social/comment/comment-row.tsx | 227 ++++++ .../social/comment/post-comments-drawer.tsx | 376 +++++++++ components/social/post-comments-drawer.tsx | 749 ------------------ .../social/{ => post}/post-actions-footer.tsx | 22 +- .../social/{ => post}/post-card-menu.tsx | 0 .../social/{ => post}/post-card-shared.tsx | 0 components/social/{ => post}/post-card.tsx | 33 +- .../social/{ => post}/post-grid-card.tsx | 2 +- .../social/{ => post}/post-likes-drawer.tsx | 0 .../social/{ => post}/post-scroll-card.tsx | 36 +- components/social/{ => post}/post-views.tsx | 0 components/ui/emoji-picker.tsx | 161 ++++ components/ui/user-avatar.tsx | 101 +++ lib/social.ts | 2 + lib/time.ts | 19 + 151 files changed, 1387 insertions(+), 1138 deletions(-) rename components/{ => layout}/find-in-page.tsx (100%) rename components/{ => layout}/header-search.tsx (100%) rename components/{ => layout}/logo.tsx (100%) rename components/{ => layout}/mobile-nav.tsx (100%) rename components/{ => layout}/notification-bell.tsx (100%) rename components/{ => layout}/page-header.tsx (100%) rename components/{ => layout}/site-bottom-nav.tsx (100%) rename components/{ => layout}/site-footer.tsx (100%) rename components/{ => layout}/site-header.tsx (97%) rename components/{ => layout}/site-mobile-nav.tsx (100%) rename components/{ => layout}/site-sidebar.tsx (100%) rename components/social/{ => collection}/collection-grid-card.tsx (97%) rename components/social/{ => collection}/collection-scroll-card.tsx (98%) rename components/social/{ => collection}/collection-views.tsx (100%) rename components/social/{ => collection}/edit-collection-drawer.tsx (100%) create mode 100644 components/social/comment/comment-menu.tsx create mode 100644 components/social/comment/comment-report-modal.tsx create mode 100644 components/social/comment/comment-row.tsx create mode 100644 components/social/comment/post-comments-drawer.tsx delete mode 100644 components/social/post-comments-drawer.tsx rename components/social/{ => post}/post-actions-footer.tsx (92%) rename components/social/{ => post}/post-card-menu.tsx (100%) rename components/social/{ => post}/post-card-shared.tsx (100%) rename components/social/{ => post}/post-card.tsx (89%) rename components/social/{ => post}/post-grid-card.tsx (98%) rename components/social/{ => post}/post-likes-drawer.tsx (100%) rename components/social/{ => post}/post-scroll-card.tsx (94%) rename components/social/{ => post}/post-views.tsx (100%) create mode 100644 components/ui/emoji-picker.tsx create mode 100644 components/ui/user-avatar.tsx create mode 100644 lib/time.ts diff --git a/app/(app)/about/page.tsx b/app/(app)/about/page.tsx index d3aad1b1..185c93e9 100644 --- a/app/(app)/about/page.tsx +++ b/app/(app)/about/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { buildOgMeta } from "@/lib/og"; import { BookOpen, diff --git a/app/(app)/books/bbd/[chapter]/page.tsx b/app/(app)/books/bbd/[chapter]/page.tsx index fb8c5532..0013b31b 100644 --- a/app/(app)/books/bbd/[chapter]/page.tsx +++ b/app/(app)/books/bbd/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/bbd/page.tsx b/app/(app)/books/bbd/page.tsx index 68d7c31f..876083e6 100644 --- a/app/(app)/books/bbd/page.tsx +++ b/app/(app)/books/bbd/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBbdMeta, getBbdIntroSegments } from "@/lib/bbd"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/bg/[chapter]/[verse]/page.tsx b/app/(app)/books/bg/[chapter]/[verse]/page.tsx index c2cc0b61..2c1b1ac6 100644 --- a/app/(app)/books/bg/[chapter]/[verse]/page.tsx +++ b/app/(app)/books/bg/[chapter]/[verse]/page.tsx @@ -1,10 +1,10 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { getBookMeta, getSingleVerse, getChapterVerseIndex } from "@/lib/api"; import { ChapterViewer } from "@/app/(app)/books/chapter-viewer"; -import type { MobileNavGroup } from "@/components/mobile-nav"; +import type { MobileNavGroup } from "@/components/layout/mobile-nav"; import { ogForVerse, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; export const dynamic = "force-dynamic"; diff --git a/app/(app)/books/bg/page.tsx b/app/(app)/books/bg/page.tsx index c0c7aa93..aead3082 100644 --- a/app/(app)/books/bg/page.tsx +++ b/app/(app)/books/bg/page.tsx @@ -3,7 +3,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBookMeta } from "@/lib/api"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { ExtractedVerseCount } from "../extracted-verse-count"; diff --git a/app/(app)/books/bk/[chapter]/page.tsx b/app/(app)/books/bk/[chapter]/page.tsx index bc062030..3534b78b 100644 --- a/app/(app)/books/bk/[chapter]/page.tsx +++ b/app/(app)/books/bk/[chapter]/page.tsx @@ -10,12 +10,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export const dynamic = "force-dynamic"; diff --git a/app/(app)/books/bk/page.tsx b/app/(app)/books/bk/page.tsx index 94b23d16..51d12754 100644 --- a/app/(app)/books/bk/page.tsx +++ b/app/(app)/books/bk/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBkMeta } from "@/lib/bk"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/bs/[chapter]/[verse]/page.tsx b/app/(app)/books/bs/[chapter]/[verse]/page.tsx index c55f8681..69d16830 100644 --- a/app/(app)/books/bs/[chapter]/[verse]/page.tsx +++ b/app/(app)/books/bs/[chapter]/[verse]/page.tsx @@ -2,7 +2,7 @@ import type { Metadata } from "next"; import fs from "fs"; import path from "path"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { getBookMeta, @@ -12,7 +12,7 @@ import { type VerseRecord, } from "@/lib/api"; import { ChapterViewer } from "@/app/(app)/books/chapter-viewer"; -import type { MobileNavGroup } from "@/components/mobile-nav"; +import type { MobileNavGroup } from "@/components/layout/mobile-nav"; import { ogForVerse, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; export const dynamic = "force-dynamic"; diff --git a/app/(app)/books/bs/[chapter]/page.tsx b/app/(app)/books/bs/[chapter]/page.tsx index 0d3b6fba..0c95d31e 100644 --- a/app/(app)/books/bs/[chapter]/page.tsx +++ b/app/(app)/books/bs/[chapter]/page.tsx @@ -7,7 +7,7 @@ import { getChapterVerseIndex } from "@/lib/api"; import { buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; import { Card, CardContent } from "@/components/ui/card"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import Link from "next/link"; import fs from "fs"; import path from "path"; diff --git a/app/(app)/books/bs/page.tsx b/app/(app)/books/bs/page.tsx index a59f9124..c2be5209 100644 --- a/app/(app)/books/bs/page.tsx +++ b/app/(app)/books/bs/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBookMeta } from "@/lib/api"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { ExtractedVerseCount } from "../extracted-verse-count"; import fs from "fs"; diff --git a/app/(app)/books/cbhc/[chapter]/page.tsx b/app/(app)/books/cbhc/[chapter]/page.tsx index 995a686c..7f7c5f01 100644 --- a/app/(app)/books/cbhc/[chapter]/page.tsx +++ b/app/(app)/books/cbhc/[chapter]/page.tsx @@ -10,12 +10,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export const dynamic = "force-dynamic"; diff --git a/app/(app)/books/cbhc/page.tsx b/app/(app)/books/cbhc/page.tsx index 858e5777..09bdfef3 100644 --- a/app/(app)/books/cbhc/page.tsx +++ b/app/(app)/books/cbhc/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getCbhcMeta } from "@/lib/cbhc"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/cc/[lila]/[chapter]/[verse]/page.tsx b/app/(app)/books/cc/[lila]/[chapter]/[verse]/page.tsx index 0c90bec6..4e333dfe 100644 --- a/app/(app)/books/cc/[lila]/[chapter]/[verse]/page.tsx +++ b/app/(app)/books/cc/[lila]/[chapter]/[verse]/page.tsx @@ -2,11 +2,11 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { getBookMeta, getSingleVerse, getChapterVerseIndex } from "@/lib/api"; import { ChapterViewer } from "@/app/(app)/books/chapter-viewer"; -import type { MobileNavGroup } from "@/components/mobile-nav"; +import type { MobileNavGroup } from "@/components/layout/mobile-nav"; import { ogForVerse, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; type ChapterInfo = { diff --git a/app/(app)/books/cc/[lila]/page.tsx b/app/(app)/books/cc/[lila]/page.tsx index bb6211aa..83dfb1d5 100644 --- a/app/(app)/books/cc/[lila]/page.tsx +++ b/app/(app)/books/cc/[lila]/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { Card, CardContent } from "@/components/ui/card"; import { ExtractedVerseCount } from "../../extracted-verse-count"; diff --git a/app/(app)/books/cc/page.tsx b/app/(app)/books/cc/page.tsx index 336cb325..3aa72b66 100644 --- a/app/(app)/books/cc/page.tsx +++ b/app/(app)/books/cc/page.tsx @@ -2,7 +2,7 @@ import type { Metadata } from "next"; import Link from "next/link"; import { getBookMeta } from "@/lib/api"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { ExtractedVerseCount } from "../extracted-verse-count"; diff --git a/app/(app)/books/chapter-viewer.tsx b/app/(app)/books/chapter-viewer.tsx index 9c840b13..3fd26d06 100644 --- a/app/(app)/books/chapter-viewer.tsx +++ b/app/(app)/books/chapter-viewer.tsx @@ -6,7 +6,7 @@ import { Card, CardHeader, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { ChevronLeft, ChevronRight, Loader2 } from "lucide-react"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Types diff --git a/app/(app)/books/ds/[chapter]/page.tsx b/app/(app)/books/ds/[chapter]/page.tsx index 31eec0bf..9952598a 100644 --- a/app/(app)/books/ds/[chapter]/page.tsx +++ b/app/(app)/books/ds/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/ds/page.tsx b/app/(app)/books/ds/page.tsx index 8130c6f0..4621b3bb 100644 --- a/app/(app)/books/ds/page.tsx +++ b/app/(app)/books/ds/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getDsMeta, getDsIntroSegments } from "@/lib/ds"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/ej/[chapter]/page.tsx b/app/(app)/books/ej/[chapter]/page.tsx index 4b910b97..26eac554 100644 --- a/app/(app)/books/ej/[chapter]/page.tsx +++ b/app/(app)/books/ej/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/ej/page.tsx b/app/(app)/books/ej/page.tsx index d93e9ead..f4b68651 100644 --- a/app/(app)/books/ej/page.tsx +++ b/app/(app)/books/ej/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getEjMeta, getEjIntroSegments } from "@/lib/ej"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/ek/[chapter]/page.tsx b/app/(app)/books/ek/[chapter]/page.tsx index fb6137b1..691da546 100644 --- a/app/(app)/books/ek/[chapter]/page.tsx +++ b/app/(app)/books/ek/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/ek/page.tsx b/app/(app)/books/ek/page.tsx index c2a92a63..7635d992 100644 --- a/app/(app)/books/ek/page.tsx +++ b/app/(app)/books/ek/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getEkMeta, getEkIntroSegments } from "@/lib/ek"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/gg/[chapter]/page.tsx b/app/(app)/books/gg/[chapter]/page.tsx index b9548296..b93a4e41 100644 --- a/app/(app)/books/gg/[chapter]/page.tsx +++ b/app/(app)/books/gg/[chapter]/page.tsx @@ -10,12 +10,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export const dynamic = "force-dynamic"; diff --git a/app/(app)/books/gg/page.tsx b/app/(app)/books/gg/page.tsx index 7a0d9c1e..11987df7 100644 --- a/app/(app)/books/gg/page.tsx +++ b/app/(app)/books/gg/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getGgMeta, getGgIntroSegments } from "@/lib/gg"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/hkh/[chapter]/page.tsx b/app/(app)/books/hkh/[chapter]/page.tsx index a4f84255..0a69e541 100644 --- a/app/(app)/books/hkh/[chapter]/page.tsx +++ b/app/(app)/books/hkh/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/hkh/page.tsx b/app/(app)/books/hkh/page.tsx index 8b07286d..8dca59e8 100644 --- a/app/(app)/books/hkh/page.tsx +++ b/app/(app)/books/hkh/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getHkhMeta, getHkhIntroSegments } from "@/lib/hkh"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/iso/[mantra]/page.tsx b/app/(app)/books/iso/[mantra]/page.tsx index 0caa1528..5a7c0b9f 100644 --- a/app/(app)/books/iso/[mantra]/page.tsx +++ b/app/(app)/books/iso/[mantra]/page.tsx @@ -11,12 +11,12 @@ import { type IsoSidebarItem, } from "@/lib/iso"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Type guards diff --git a/app/(app)/books/iso/page.tsx b/app/(app)/books/iso/page.tsx index a9c9210c..2a019a36 100644 --- a/app/(app)/books/iso/page.tsx +++ b/app/(app)/books/iso/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getIsoMeta, getIsoIntroSegments } from "@/lib/iso"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/kb/[volume]/[slug]/page.tsx b/app/(app)/books/kb/[volume]/[slug]/page.tsx index c2ce774b..006c9626 100644 --- a/app/(app)/books/kb/[volume]/[slug]/page.tsx +++ b/app/(app)/books/kb/[volume]/[slug]/page.tsx @@ -6,12 +6,12 @@ import { notFound } from "next/navigation"; import { getProseChapter, getProseChapters } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export async function generateMetadata({ params, diff --git a/app/(app)/books/kb/[volume]/page.tsx b/app/(app)/books/kb/[volume]/page.tsx index 521ad44b..bfbee865 100644 --- a/app/(app)/books/kb/[volume]/page.tsx +++ b/app/(app)/books/kb/[volume]/page.tsx @@ -4,7 +4,7 @@ import { notFound } from "next/navigation"; import { getBookMeta, getProseChapters } from "@/lib/api"; import { buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export async function generateMetadata({ diff --git a/app/(app)/books/kb/page.tsx b/app/(app)/books/kb/page.tsx index 0432ffb6..d2d4a4ef 100644 --- a/app/(app)/books/kb/page.tsx +++ b/app/(app)/books/kb/page.tsx @@ -3,7 +3,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBookMeta } from "@/lib/api"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; diff --git a/app/(app)/books/lcl/[chapter]/page.tsx b/app/(app)/books/lcl/[chapter]/page.tsx index f9e3bcbf..d52f20b6 100644 --- a/app/(app)/books/lcl/[chapter]/page.tsx +++ b/app/(app)/books/lcl/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/lcl/page.tsx b/app/(app)/books/lcl/page.tsx index 3c2722ee..b380aebd 100644 --- a/app/(app)/books/lcl/page.tsx +++ b/app/(app)/books/lcl/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getLclMeta, getLclIntroSegments } from "@/lib/lcl"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/lob/[chapter]/page.tsx b/app/(app)/books/lob/[chapter]/page.tsx index 89a7df3e..e08bf7c7 100644 --- a/app/(app)/books/lob/[chapter]/page.tsx +++ b/app/(app)/books/lob/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export async function generateMetadata({ params, diff --git a/app/(app)/books/lob/page.tsx b/app/(app)/books/lob/page.tsx index 8938fa7d..25451673 100644 --- a/app/(app)/books/lob/page.tsx +++ b/app/(app)/books/lob/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getLobMeta, getLobIntroSegments } from "@/lib/lob"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/mg/[chapter]/page.tsx b/app/(app)/books/mg/[chapter]/page.tsx index 5b95b33c..4614b1f4 100644 --- a/app/(app)/books/mg/[chapter]/page.tsx +++ b/app/(app)/books/mg/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export async function generateMetadata({ params, diff --git a/app/(app)/books/mg/page.tsx b/app/(app)/books/mg/page.tsx index d994f145..20ada080 100644 --- a/app/(app)/books/mg/page.tsx +++ b/app/(app)/books/mg/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getMgMeta, getMgIntroSegments } from "@/lib/mg"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/mm/[chapter]/[verse]/page.tsx b/app/(app)/books/mm/[chapter]/[verse]/page.tsx index b12106cd..be246ec0 100644 --- a/app/(app)/books/mm/[chapter]/[verse]/page.tsx +++ b/app/(app)/books/mm/[chapter]/[verse]/page.tsx @@ -1,7 +1,7 @@ import fs from "fs"; import path from "path"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { getBookMeta, @@ -11,7 +11,7 @@ import { type VerseRecord, } from "@/lib/api"; import { ChapterViewer } from "@/app/(app)/books/chapter-viewer"; -import type { MobileNavGroup } from "@/components/mobile-nav"; +import type { MobileNavGroup } from "@/components/layout/mobile-nav"; import type { Metadata } from "next"; import { ogForVerse, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; diff --git a/app/(app)/books/mm/[chapter]/page.tsx b/app/(app)/books/mm/[chapter]/page.tsx index 30f2048f..93862168 100644 --- a/app/(app)/books/mm/[chapter]/page.tsx +++ b/app/(app)/books/mm/[chapter]/page.tsx @@ -7,7 +7,7 @@ import { getChapterVerseIndex } from "@/lib/api"; import { buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; import { Card, CardContent } from "@/components/ui/card"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import Link from "next/link"; import fs from "fs"; import path from "path"; diff --git a/app/(app)/books/mm/page.tsx b/app/(app)/books/mm/page.tsx index 861f8767..b7ff039e 100644 --- a/app/(app)/books/mm/page.tsx +++ b/app/(app)/books/mm/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBookMeta } from "@/lib/api"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { ExtractedVerseCount } from "../extracted-verse-count"; import fs from "fs"; diff --git a/app/(app)/books/mog/[chapter]/page.tsx b/app/(app)/books/mog/[chapter]/page.tsx index 1141aa48..336f9434 100644 --- a/app/(app)/books/mog/[chapter]/page.tsx +++ b/app/(app)/books/mog/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/mog/page.tsx b/app/(app)/books/mog/page.tsx index b34388dc..182aab9e 100644 --- a/app/(app)/books/mog/page.tsx +++ b/app/(app)/books/mog/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getMogMeta, getMogIntroSegments } from "@/lib/mog"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/nbs/[chapter]/[verse]/page.tsx b/app/(app)/books/nbs/[chapter]/[verse]/page.tsx index 5a5f1054..61c46105 100644 --- a/app/(app)/books/nbs/[chapter]/[verse]/page.tsx +++ b/app/(app)/books/nbs/[chapter]/[verse]/page.tsx @@ -4,7 +4,7 @@ import type { Metadata } from "next"; import fs from "fs"; import path from "path"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { getBookMeta, @@ -15,7 +15,7 @@ import { } from "@/lib/api"; import { ogForVerse, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { ChapterViewer } from "@/app/(app)/books/chapter-viewer"; -import type { MobileNavGroup } from "@/components/mobile-nav"; +import type { MobileNavGroup } from "@/components/layout/mobile-nav"; type NbsMeta = { book: string; diff --git a/app/(app)/books/nbs/[chapter]/page.tsx b/app/(app)/books/nbs/[chapter]/page.tsx index aac93e1f..eafac9ea 100644 --- a/app/(app)/books/nbs/[chapter]/page.tsx +++ b/app/(app)/books/nbs/[chapter]/page.tsx @@ -7,7 +7,7 @@ import { getChapterVerseIndex } from "@/lib/api"; import { buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; import { Card, CardContent } from "@/components/ui/card"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import Link from "next/link"; import fs from "fs"; import path from "path"; diff --git a/app/(app)/books/nbs/page.tsx b/app/(app)/books/nbs/page.tsx index 794c1caa..6eee2ef3 100644 --- a/app/(app)/books/nbs/page.tsx +++ b/app/(app)/books/nbs/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBookMeta } from "@/lib/api"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { ExtractedVerseCount } from "../extracted-verse-count"; import fs from "fs"; diff --git a/app/(app)/books/nod/[chapter]/page.tsx b/app/(app)/books/nod/[chapter]/page.tsx index 763a089e..c878e923 100644 --- a/app/(app)/books/nod/[chapter]/page.tsx +++ b/app/(app)/books/nod/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/nod/page.tsx b/app/(app)/books/nod/page.tsx index de42eb30..181c926e 100644 --- a/app/(app)/books/nod/page.tsx +++ b/app/(app)/books/nod/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getNodMeta, getNodIntroSegments } from "@/lib/nod"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/noi/[text]/page.tsx b/app/(app)/books/noi/[text]/page.tsx index a0e2a5ca..b1cc157f 100644 --- a/app/(app)/books/noi/[text]/page.tsx +++ b/app/(app)/books/noi/[text]/page.tsx @@ -11,12 +11,12 @@ import { type NoiSidebarItem, } from "@/lib/noi"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Type guards diff --git a/app/(app)/books/noi/page.tsx b/app/(app)/books/noi/page.tsx index 6d0a0bc8..9dd8b8bd 100644 --- a/app/(app)/books/noi/page.tsx +++ b/app/(app)/books/noi/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getNoiMeta, getNoiIntroSegments } from "@/lib/noi"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/ochkm/[chapter]/page.tsx b/app/(app)/books/ochkm/[chapter]/page.tsx index 2c129a73..08cb78a0 100644 --- a/app/(app)/books/ochkm/[chapter]/page.tsx +++ b/app/(app)/books/ochkm/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/ochkm/page.tsx b/app/(app)/books/ochkm/page.tsx index 55aaf1b8..050090e7 100644 --- a/app/(app)/books/ochkm/page.tsx +++ b/app/(app)/books/ochkm/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getOchkmMeta, getOchkmIntroSegments } from "@/lib/ochkm"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/owk/[chapter]/page.tsx b/app/(app)/books/owk/[chapter]/page.tsx index 8bea2b20..1d555043 100644 --- a/app/(app)/books/owk/[chapter]/page.tsx +++ b/app/(app)/books/owk/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/owk/page.tsx b/app/(app)/books/owk/page.tsx index 9f16d5dd..7622eeb9 100644 --- a/app/(app)/books/owk/page.tsx +++ b/app/(app)/books/owk/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getOwkMeta, getOwkIntroSegments } from "@/lib/owk"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/page.tsx b/app/(app)/books/page.tsx index ba4b44d5..92deca2c 100644 --- a/app/(app)/books/page.tsx +++ b/app/(app)/books/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { getAllBooks, type BookMeta } from "@/lib/api"; import { buildOgMeta } from "@/lib/og"; import { BooksGrid, type BookInfo } from "./books-grid"; diff --git a/app/(app)/books/pk/[chapter]/page.tsx b/app/(app)/books/pk/[chapter]/page.tsx index b81b1050..0a3ed54b 100644 --- a/app/(app)/books/pk/[chapter]/page.tsx +++ b/app/(app)/books/pk/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/pk/page.tsx b/app/(app)/books/pk/page.tsx index 55e5d75c..db62114f 100644 --- a/app/(app)/books/pk/page.tsx +++ b/app/(app)/books/pk/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getPkMeta } from "@/lib/pk"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/poy/[chapter]/page.tsx b/app/(app)/books/poy/[chapter]/page.tsx index 672d9526..4849bd5e 100644 --- a/app/(app)/books/poy/[chapter]/page.tsx +++ b/app/(app)/books/poy/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/poy/page.tsx b/app/(app)/books/poy/page.tsx index 264bbfa0..76500f2a 100644 --- a/app/(app)/books/poy/page.tsx +++ b/app/(app)/books/poy/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getPoyMeta, getPoyIntroSegments } from "@/lib/poy"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/pqpa/[chapter]/page.tsx b/app/(app)/books/pqpa/[chapter]/page.tsx index 52ab51b2..28f4edcb 100644 --- a/app/(app)/books/pqpa/[chapter]/page.tsx +++ b/app/(app)/books/pqpa/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/pqpa/page.tsx b/app/(app)/books/pqpa/page.tsx index 64297058..77210529 100644 --- a/app/(app)/books/pqpa/page.tsx +++ b/app/(app)/books/pqpa/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getPqpaMeta, getPqpaIntroSegments } from "@/lib/pqpa"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/rv/[chapter]/page.tsx b/app/(app)/books/rv/[chapter]/page.tsx index 53d36ba3..6d4c6567 100644 --- a/app/(app)/books/rv/[chapter]/page.tsx +++ b/app/(app)/books/rv/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/rv/page.tsx b/app/(app)/books/rv/page.tsx index 6be5531c..4e33b0c6 100644 --- a/app/(app)/books/rv/page.tsx +++ b/app/(app)/books/rv/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getRvMeta, getRvIntroSegments } from "@/lib/rv"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/sb/[canto]/[chapter]/[verse]/page.tsx b/app/(app)/books/sb/[canto]/[chapter]/[verse]/page.tsx index 8b3b87ee..f027cc25 100644 --- a/app/(app)/books/sb/[canto]/[chapter]/[verse]/page.tsx +++ b/app/(app)/books/sb/[canto]/[chapter]/[verse]/page.tsx @@ -2,11 +2,11 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { getBookMeta, getSingleVerse, getChapterVerseIndex } from "@/lib/api"; import { ChapterViewer } from "@/app/(app)/books/chapter-viewer"; -import type { MobileNavGroup } from "@/components/mobile-nav"; +import type { MobileNavGroup } from "@/components/layout/mobile-nav"; import { ogForVerse, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; type ChapterInfo = { diff --git a/app/(app)/books/sb/[canto]/page.tsx b/app/(app)/books/sb/[canto]/page.tsx index 4545affe..0d663865 100644 --- a/app/(app)/books/sb/[canto]/page.tsx +++ b/app/(app)/books/sb/[canto]/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { Card, CardContent } from "@/components/ui/card"; import { ExtractedVerseCount } from "../../extracted-verse-count"; diff --git a/app/(app)/books/sb/page.tsx b/app/(app)/books/sb/page.tsx index 28e8ee91..97b5da3b 100644 --- a/app/(app)/books/sb/page.tsx +++ b/app/(app)/books/sb/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { ExtractedVerseCount } from "../extracted-verse-count"; diff --git a/app/(app)/books/sb1962/[chapter]/[verse]/page.tsx b/app/(app)/books/sb1962/[chapter]/[verse]/page.tsx index c9e05fc8..ab5f8399 100644 --- a/app/(app)/books/sb1962/[chapter]/[verse]/page.tsx +++ b/app/(app)/books/sb1962/[chapter]/[verse]/page.tsx @@ -1,10 +1,10 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { getBookMeta, getSingleVerse, getChapterVerseIndex } from "@/lib/api"; import { ChapterViewer } from "@/app/(app)/books/chapter-viewer"; -import type { MobileNavGroup } from "@/components/mobile-nav"; +import type { MobileNavGroup } from "@/components/layout/mobile-nav"; import { ogForVerse, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; export const dynamic = "force-dynamic"; diff --git a/app/(app)/books/sb1962/page.tsx b/app/(app)/books/sb1962/page.tsx index 9f765ff3..22fc0797 100644 --- a/app/(app)/books/sb1962/page.tsx +++ b/app/(app)/books/sb1962/page.tsx @@ -3,7 +3,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getBookMeta } from "@/lib/api"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { ExtractedVerseCount } from "../extracted-verse-count"; diff --git a/app/(app)/books/ssr/[chapter]/page.tsx b/app/(app)/books/ssr/[chapter]/page.tsx index b09b856b..15f353a8 100644 --- a/app/(app)/books/ssr/[chapter]/page.tsx +++ b/app/(app)/books/ssr/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/ssr/page.tsx b/app/(app)/books/ssr/page.tsx index c86c6ebb..4caa588b 100644 --- a/app/(app)/books/ssr/page.tsx +++ b/app/(app)/books/ssr/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getSsrMeta, getSsrIntroSegments } from "@/lib/ssr"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/sva/[chapter]/page.tsx b/app/(app)/books/sva/[chapter]/page.tsx index 799f7228..a40d9657 100644 --- a/app/(app)/books/sva/[chapter]/page.tsx +++ b/app/(app)/books/sva/[chapter]/page.tsx @@ -13,12 +13,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/sva/page.tsx b/app/(app)/books/sva/page.tsx index 3a559dbb..e6fece54 100644 --- a/app/(app)/books/sva/page.tsx +++ b/app/(app)/books/sva/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getSvaMeta, getSvaIntroSegments } from "@/lib/sva"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/tlc/[chapter]/page.tsx b/app/(app)/books/tlc/[chapter]/page.tsx index 86de2741..cbd45d6d 100644 --- a/app/(app)/books/tlc/[chapter]/page.tsx +++ b/app/(app)/books/tlc/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/tlc/page.tsx b/app/(app)/books/tlc/page.tsx index 9d098615..a262ce5c 100644 --- a/app/(app)/books/tlc/page.tsx +++ b/app/(app)/books/tlc/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getTlcMeta, getTlcIntroSegments } from "@/lib/tlc"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/tlk/[chapter]/page.tsx b/app/(app)/books/tlk/[chapter]/page.tsx index 749aeafc..dbc62140 100644 --- a/app/(app)/books/tlk/[chapter]/page.tsx +++ b/app/(app)/books/tlk/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/tlk/page.tsx b/app/(app)/books/tlk/page.tsx index b0a62189..2af3ade4 100644 --- a/app/(app)/books/tlk/page.tsx +++ b/app/(app)/books/tlk/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getTlkMeta, getTlkIntroSegments } from "@/lib/tlk"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/tqk/[chapter]/page.tsx b/app/(app)/books/tqk/[chapter]/page.tsx index bd48f9cf..8e6d8e32 100644 --- a/app/(app)/books/tqk/[chapter]/page.tsx +++ b/app/(app)/books/tqk/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/tqk/page.tsx b/app/(app)/books/tqk/page.tsx index 2a4f7a47..ba4769f1 100644 --- a/app/(app)/books/tqk/page.tsx +++ b/app/(app)/books/tqk/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getTqkMeta, getTqkIntroSegments } from "@/lib/tqk"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/ttp/[chapter]/page.tsx b/app/(app)/books/ttp/[chapter]/page.tsx index 799822dc..82b76c26 100644 --- a/app/(app)/books/ttp/[chapter]/page.tsx +++ b/app/(app)/books/ttp/[chapter]/page.tsx @@ -12,12 +12,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/ttp/page.tsx b/app/(app)/books/ttp/page.tsx index beafbd51..1a2d5149 100644 --- a/app/(app)/books/ttp/page.tsx +++ b/app/(app)/books/ttp/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getTtpMeta } from "@/lib/ttp"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/books/va/[chapter]/page.tsx b/app/(app)/books/va/[chapter]/page.tsx index 51de0be2..bb198271 100644 --- a/app/(app)/books/va/[chapter]/page.tsx +++ b/app/(app)/books/va/[chapter]/page.tsx @@ -11,12 +11,12 @@ import { import { getProseChapter } from "@/lib/api"; import { ogForChapter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/books/va/page.tsx b/app/(app)/books/va/page.tsx index 3b60a08a..827f2b1c 100644 --- a/app/(app)/books/va/page.tsx +++ b/app/(app)/books/va/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getVaMeta } from "@/lib/va"; import { ogForBook } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export function generateMetadata(): Metadata { diff --git a/app/(app)/c/[id]/page.tsx b/app/(app)/c/[id]/page.tsx index aca0f963..813db063 100644 --- a/app/(app)/c/[id]/page.tsx +++ b/app/(app)/c/[id]/page.tsx @@ -15,7 +15,7 @@ import { type Collection, type Post, } from "@/lib/social"; -import { PostViews } from "@/components/social/post-views"; +import { PostViews } from "@/components/social/post/post-views"; export default function PublicCollectionPage(props: { params: Promise<{ id: string }>; diff --git a/app/(app)/disciples/page.tsx b/app/(app)/disciples/page.tsx index ce9d6e45..8a476af2 100644 --- a/app/(app)/disciples/page.tsx +++ b/app/(app)/disciples/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { ogForDisciples } from "@/lib/og"; import { getTotalDiscipleCount, diff --git a/app/(app)/essays/[slug]/page.tsx b/app/(app)/essays/[slug]/page.tsx index 167662e4..4d298441 100644 --- a/app/(app)/essays/[slug]/page.tsx +++ b/app/(app)/essays/[slug]/page.tsx @@ -4,12 +4,12 @@ import type { Metadata } from "next"; import Link from "next/link"; import { notFound } from "next/navigation"; import { ogForEssay, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; import { bff, bffList } from "@/lib/bff"; // --------------------------------------------------------------------------- diff --git a/app/(app)/essays/page.tsx b/app/(app)/essays/page.tsx index 18e155ce..5d431cc3 100644 --- a/app/(app)/essays/page.tsx +++ b/app/(app)/essays/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { buildOgMeta } from "@/lib/og"; import { bffList } from "@/lib/bff"; import { EssaysGrid } from "./essays-grid"; diff --git a/app/(app)/journals/[slug]/[chapter]/page.tsx b/app/(app)/journals/[slug]/[chapter]/page.tsx index a9f39903..a7b484fb 100644 --- a/app/(app)/journals/[slug]/[chapter]/page.tsx +++ b/app/(app)/journals/[slug]/[chapter]/page.tsx @@ -11,12 +11,12 @@ import { type JournalSidebarItem, } from "@/lib/journals"; import { ogForJournal, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export async function generateMetadata({ params, diff --git a/app/(app)/journals/[slug]/page.tsx b/app/(app)/journals/[slug]/page.tsx index 26d79630..ec9dc2eb 100644 --- a/app/(app)/journals/[slug]/page.tsx +++ b/app/(app)/journals/[slug]/page.tsx @@ -9,7 +9,7 @@ import { type JournalChapterEntry, } from "@/lib/journals"; import { ogForJournal } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export async function generateMetadata({ diff --git a/app/(app)/journals/page.tsx b/app/(app)/journals/page.tsx index 00b49b55..073b8ded 100644 --- a/app/(app)/journals/page.tsx +++ b/app/(app)/journals/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { buildOgMeta } from "@/lib/og"; import { Card, diff --git a/app/(app)/layout.tsx b/app/(app)/layout.tsx index 263cbe4c..d00777fa 100644 --- a/app/(app)/layout.tsx +++ b/app/(app)/layout.tsx @@ -1,8 +1,8 @@ import { Suspense } from "react"; -import { SiteHeader } from "@/components/site-header"; -import { SiteSidebar } from "@/components/site-sidebar"; -import { SiteBottomNav } from "@/components/site-bottom-nav"; -import { SiteFooter } from "@/components/site-footer"; +import { SiteHeader } from "@/components/layout/site-header"; +import { SiteSidebar } from "@/components/layout/site-sidebar"; +import { SiteBottomNav } from "@/components/layout/site-bottom-nav"; +import { SiteFooter } from "@/components/layout/site-footer"; import { VerifyEmailBanner } from "@/components/auth/verify-email-banner"; import { TextSelectionToolbar } from "@/components/text-selection-toolbar"; import { TextHighlighter } from "@/components/text-highlighter"; diff --git a/app/(app)/letters/[slug]/page.tsx b/app/(app)/letters/[slug]/page.tsx index 24b98902..7c7e603e 100644 --- a/app/(app)/letters/[slug]/page.tsx +++ b/app/(app)/letters/[slug]/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getLetter, getAdjacentLetters } from "@/lib/letters"; import { ogForLetter, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; diff --git a/app/(app)/letters/page.tsx b/app/(app)/letters/page.tsx index 811279b1..902e65d6 100644 --- a/app/(app)/letters/page.tsx +++ b/app/(app)/letters/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { buildOgMeta } from "@/lib/og"; import { getLetterYears, diff --git a/app/(app)/magazines/[slug]/[issue]/page.tsx b/app/(app)/magazines/[slug]/[issue]/page.tsx index d94888f7..effa2f42 100644 --- a/app/(app)/magazines/[slug]/[issue]/page.tsx +++ b/app/(app)/magazines/[slug]/[issue]/page.tsx @@ -11,12 +11,12 @@ import { type MagazineSidebarItem, } from "@/lib/magazines"; import { ogForMagazine, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; export async function generateMetadata({ params, diff --git a/app/(app)/magazines/[slug]/page.tsx b/app/(app)/magazines/[slug]/page.tsx index 67e686a0..8d29f373 100644 --- a/app/(app)/magazines/[slug]/page.tsx +++ b/app/(app)/magazines/[slug]/page.tsx @@ -9,7 +9,7 @@ import { type MagazineChapterEntry, } from "@/lib/magazines"; import { ogForMagazine } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export async function generateMetadata({ diff --git a/app/(app)/magazines/page.tsx b/app/(app)/magazines/page.tsx index f7a2d257..700f4c1f 100644 --- a/app/(app)/magazines/page.tsx +++ b/app/(app)/magazines/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardHeader, diff --git a/app/(app)/notifications/page.tsx b/app/(app)/notifications/page.tsx index f2ce18da..f890f278 100644 --- a/app/(app)/notifications/page.tsx +++ b/app/(app)/notifications/page.tsx @@ -14,13 +14,14 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; -import Image from "next/image"; import Link from "next/link"; import { Bell } from "lucide-react"; import { useAuth } from "@/components/auth/auth-provider"; import { useAuthGate } from "@/components/auth/auth-gate"; import { useNotifications } from "@/components/notifications/notifications-provider"; import { notifications, type AppNotification } from "@/lib/social"; +import { UserAvatar } from "@/components/ui/user-avatar"; +import { timeAgo } from "@/lib/time"; export default function NotificationsPage() { const { user, loading } = useAuth(); @@ -122,7 +123,7 @@ function NotificationRow({
- +

{display} {message} @@ -194,34 +195,6 @@ function messageFor(n: AppNotification): string { } } -function Avatar({ src, name }: { src: string | null; name: string }) { - if (src) { - return ( - {name} - ); - } - const initials = - name - .replace(/^@/, "") - .split(/\s+/) - .map((p) => p[0]) - .slice(0, 2) - .join("") - .toUpperCase() || "?"; - return ( -

- {initials} -
- ); -} - function Empty() { return (
@@ -231,18 +204,3 @@ function Empty() { ); } -/** Compact relative time ("just now", "5m", "3h", "2d"), falling back to - * a date for anything older than a week. */ -function timeAgo(iso: string): string { - const then = new Date(iso).getTime(); - if (Number.isNaN(then)) return ""; - const secs = Math.max(0, Math.floor((Date.now() - then) / 1000)); - if (secs < 45) return "just now"; - const mins = Math.floor(secs / 60); - if (mins < 60) return `${mins}m ago`; - const hours = Math.floor(mins / 60); - if (hours < 24) return `${hours}h ago`; - const days = Math.floor(hours / 24); - if (days < 7) return `${days}d ago`; - return new Date(iso).toLocaleDateString(); -} diff --git a/app/(app)/other-documents/[slug]/[chapter]/page.tsx b/app/(app)/other-documents/[slug]/[chapter]/page.tsx index 54ad90f5..949b1458 100644 --- a/app/(app)/other-documents/[slug]/[chapter]/page.tsx +++ b/app/(app)/other-documents/[slug]/[chapter]/page.tsx @@ -11,12 +11,12 @@ import { type OtherDocumentSidebarItem, } from "@/lib/other-documents"; import { ogForOtherDocument, extractQuoteFromHl, buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { buttonVariants } from "@/components/ui/button"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; -import { MobileNav, type MobileNavGroup } from "@/components/mobile-nav"; +import { MobileNav, type MobileNavGroup } from "@/components/layout/mobile-nav"; // --------------------------------------------------------------------------- // Metadata diff --git a/app/(app)/other-documents/[slug]/page.tsx b/app/(app)/other-documents/[slug]/page.tsx index 2eb417d8..3122604d 100644 --- a/app/(app)/other-documents/[slug]/page.tsx +++ b/app/(app)/other-documents/[slug]/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getOtherDocumentMeta, slugToBookCode } from "@/lib/other-documents"; import { ogForOtherDocument } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; export async function generateMetadata({ diff --git a/app/(app)/other-documents/page.tsx b/app/(app)/other-documents/page.tsx index 331ab69c..4c38fd28 100644 --- a/app/(app)/other-documents/page.tsx +++ b/app/(app)/other-documents/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { getAllOtherDocuments, bookCodeToSlug } from "@/lib/other-documents"; import { OtherDocumentsGrid } from "./other-documents-grid"; import { buildOgMeta } from "@/lib/og"; diff --git a/app/(app)/search/search-content.tsx b/app/(app)/search/search-content.tsx index 03f9b5d9..3c9e4c0d 100644 --- a/app/(app)/search/search-content.tsx +++ b/app/(app)/search/search-content.tsx @@ -2,8 +2,8 @@ import { useState, useEffect, useCallback, useRef, Suspense } from "react"; import { useSearchParams, useRouter } from "next/navigation"; -import Image from "next/image"; import Link from "next/link"; +import { UserAvatar } from "@/components/ui/user-avatar"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; @@ -858,7 +858,6 @@ function ResultMeta({ result }: { result: SearchResult }) { // --------------------------------------------------------------------------- function UserResultCard({ user }: { user: UserResult }) { - const initial = user.name?.charAt(0)?.toUpperCase() || "?"; return ( - {user.avatar_url ? ( - {user.name} - ) : ( -
- {initial} -
- )} +

{user.name} diff --git a/app/(app)/transcriptions/[slug]/page.tsx b/app/(app)/transcriptions/[slug]/page.tsx index 3d837b91..f0b07eb1 100644 --- a/app/(app)/transcriptions/[slug]/page.tsx +++ b/app/(app)/transcriptions/[slug]/page.tsx @@ -8,14 +8,14 @@ import { getAdjacentTranscriptions, } from "@/lib/transcriptions"; import { buildOgMeta, ogForTranscription, extractQuoteFromHl } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { buttonVariants } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { ChevronLeft, ChevronRight, Clock, MapPin, Users } from "lucide-react"; import { PlayAudioButton } from "./play-audio-button"; -import { FindInPage } from "@/components/find-in-page"; +import { FindInPage } from "@/components/layout/find-in-page"; export async function generateMetadata({ params, diff --git a/app/(app)/transcriptions/page.tsx b/app/(app)/transcriptions/page.tsx index 05740832..ad164dbb 100644 --- a/app/(app)/transcriptions/page.tsx +++ b/app/(app)/transcriptions/page.tsx @@ -2,7 +2,7 @@ export const dynamic = "force-dynamic"; import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { ogForTranscriptions } from "@/lib/og"; import { getTranscriptionYears, diff --git a/app/(app)/transcriptions/place/[place]/page.tsx b/app/(app)/transcriptions/place/[place]/page.tsx index 58d742c8..5aba8f7d 100644 --- a/app/(app)/transcriptions/place/[place]/page.tsx +++ b/app/(app)/transcriptions/place/[place]/page.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getTranscriptionsByPlace } from "@/lib/transcriptions"; import { buildOgMeta } from "@/lib/og"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Clock } from "lucide-react"; diff --git a/app/(app)/transcriptions/year/[year]/year-browser.tsx b/app/(app)/transcriptions/year/[year]/year-browser.tsx index 8962e60a..a8af4a90 100644 --- a/app/(app)/transcriptions/year/[year]/year-browser.tsx +++ b/app/(app)/transcriptions/year/[year]/year-browser.tsx @@ -2,7 +2,7 @@ import { useState, useMemo } from "react"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; diff --git a/app/(app)/u/[handle]/collections/page.tsx b/app/(app)/u/[handle]/collections/page.tsx index 9b451126..e6a1c34d 100644 --- a/app/(app)/u/[handle]/collections/page.tsx +++ b/app/(app)/u/[handle]/collections/page.tsx @@ -8,7 +8,7 @@ * Layout owns the ProfileHeader + tabs + container. */ -import { CollectionViews } from "@/components/social/collection-views"; +import { CollectionViews } from "@/components/social/collection/collection-views"; import { usePublicProfile } from "../profile-context"; export default function PublicProfileCollectionsPage() { diff --git a/app/(app)/u/[handle]/mentions/page.tsx b/app/(app)/u/[handle]/mentions/page.tsx index 8b4efd6c..f98944b1 100644 --- a/app/(app)/u/[handle]/mentions/page.tsx +++ b/app/(app)/u/[handle]/mentions/page.tsx @@ -10,7 +10,7 @@ import { useEffect, useState } from "react"; import { profile, type Post } from "@/lib/social"; -import { PostViews } from "@/components/social/post-views"; +import { PostViews } from "@/components/social/post/post-views"; import { usePublicProfile } from "../profile-context"; export default function PublicProfileMentionsPage() { diff --git a/app/(app)/u/[handle]/posts-grid.tsx b/app/(app)/u/[handle]/posts-grid.tsx index fd6255f5..95150836 100644 --- a/app/(app)/u/[handle]/posts-grid.tsx +++ b/app/(app)/u/[handle]/posts-grid.tsx @@ -14,7 +14,7 @@ import { use, useEffect, useState } from "react"; import { profile, type Post } from "@/lib/social"; -import { PostViews } from "@/components/social/post-views"; +import { PostViews } from "@/components/social/post/post-views"; import { usePublicProfile } from "./profile-context"; export function PostsGrid({ diff --git a/app/(app)/u/[handle]/posts/scroll-feed.tsx b/app/(app)/u/[handle]/posts/scroll-feed.tsx index 42b507c9..80fd17b0 100644 --- a/app/(app)/u/[handle]/posts/scroll-feed.tsx +++ b/app/(app)/u/[handle]/posts/scroll-feed.tsx @@ -17,7 +17,7 @@ import { use, useEffect, useRef, useState } from "react"; import { notFound } from "next/navigation"; import { profile, SocialError, type Post } from "@/lib/social"; -import { PostScrollCard } from "@/components/social/post-scroll-card"; +import { PostScrollCard } from "@/components/social/post/post-scroll-card"; export function ScrollFeed({ params, diff --git a/app/(app)/u/me/collections/[id]/page.tsx b/app/(app)/u/me/collections/[id]/page.tsx index 5d1c96e2..9a013353 100644 --- a/app/(app)/u/me/collections/[id]/page.tsx +++ b/app/(app)/u/me/collections/[id]/page.tsx @@ -18,8 +18,8 @@ import { type Collection, type Post, } from "@/lib/social"; -import { CollectionScrollCard } from "@/components/social/collection-scroll-card"; -import { EditCollectionDrawer } from "@/components/social/edit-collection-drawer"; +import { CollectionScrollCard } from "@/components/social/collection/collection-scroll-card"; +import { EditCollectionDrawer } from "@/components/social/collection/edit-collection-drawer"; export default function CollectionDetailPage(props: { params: Promise<{ id: string }>; diff --git a/app/(app)/u/me/collections/page.tsx b/app/(app)/u/me/collections/page.tsx index 1e0272a6..066b4643 100644 --- a/app/(app)/u/me/collections/page.tsx +++ b/app/(app)/u/me/collections/page.tsx @@ -4,7 +4,7 @@ import { useEffect, useState } from "react"; import { Plus } from "lucide-react"; import { collections, SocialError, type Collection } from "@/lib/social"; import { useAuth } from "@/components/auth/auth-provider"; -import { CollectionViews } from "@/components/social/collection-views"; +import { CollectionViews } from "@/components/social/collection/collection-views"; export default function MyCollectionsPage() { const { user } = useAuth(); diff --git a/app/(app)/u/me/mentions/page.tsx b/app/(app)/u/me/mentions/page.tsx index 4a82082a..32798fe1 100644 --- a/app/(app)/u/me/mentions/page.tsx +++ b/app/(app)/u/me/mentions/page.tsx @@ -10,7 +10,7 @@ import { useEffect, useState } from "react"; import { useAuth } from "@/components/auth/auth-provider"; import { profile, type Post } from "@/lib/social"; -import { PostViews } from "@/components/social/post-views"; +import { PostViews } from "@/components/social/post/post-views"; export default function MentionsPage() { const { user } = useAuth(); diff --git a/app/(app)/u/me/page.tsx b/app/(app)/u/me/page.tsx index 92904eb1..7b34b446 100644 --- a/app/(app)/u/me/page.tsx +++ b/app/(app)/u/me/page.tsx @@ -17,7 +17,7 @@ import { useRouter, useSearchParams } from "next/navigation"; import { LayoutGrid } from "lucide-react"; import { useAuth } from "@/components/auth/auth-provider"; import { ProfileEditForm } from "@/components/profile/profile-edit-form"; -import { PostGridCard } from "@/components/social/post-grid-card"; +import { PostGridCard } from "@/components/social/post/post-grid-card"; import { ConfirmModal } from "@/components/ui/confirm-modal"; import { posts, SocialError, type Post } from "@/lib/social"; diff --git a/app/(app)/u/me/posts/page.tsx b/app/(app)/u/me/posts/page.tsx index fe5b6ef3..0ab3d7c1 100644 --- a/app/(app)/u/me/posts/page.tsx +++ b/app/(app)/u/me/posts/page.tsx @@ -12,7 +12,7 @@ import { useEffect, useRef, useState } from "react"; import { useAuth } from "@/components/auth/auth-provider"; -import { PostScrollCard } from "@/components/social/post-scroll-card"; +import { PostScrollCard } from "@/components/social/post/post-scroll-card"; import { ConfirmModal } from "@/components/ui/confirm-modal"; import { posts, SocialError, type Post } from "@/lib/social"; diff --git a/app/(legal)/data-deletion/page.tsx b/app/(legal)/data-deletion/page.tsx index 72c148ff..727bd8e2 100644 --- a/app/(legal)/data-deletion/page.tsx +++ b/app/(legal)/data-deletion/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { buildOgMeta } from "@/lib/og"; const EFFECTIVE_DATE = "June 1, 2026"; diff --git a/app/(legal)/layout.tsx b/app/(legal)/layout.tsx index ef545588..0c2e6f97 100644 --- a/app/(legal)/layout.tsx +++ b/app/(legal)/layout.tsx @@ -1,5 +1,5 @@ -import { SiteHeader } from "@/components/site-header"; -import { SiteFooter } from "@/components/site-footer"; +import { SiteHeader } from "@/components/layout/site-header"; +import { SiteFooter } from "@/components/layout/site-footer"; /** * Minimal layout for legal / informational pages (Privacy Policy, Terms of diff --git a/app/(legal)/privacy/page.tsx b/app/(legal)/privacy/page.tsx index 76290a77..9c47a387 100644 --- a/app/(legal)/privacy/page.tsx +++ b/app/(legal)/privacy/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { buildOgMeta } from "@/lib/og"; const EFFECTIVE_DATE = "June 1, 2026"; diff --git a/app/(legal)/terms/page.tsx b/app/(legal)/terms/page.tsx index b8dc39ed..5c90543c 100644 --- a/app/(legal)/terms/page.tsx +++ b/app/(legal)/terms/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { PageHeader } from "@/components/page-header"; +import { PageHeader } from "@/components/layout/page-header"; import { buildOgMeta } from "@/lib/og"; const EFFECTIVE_DATE = "June 1, 2026"; diff --git a/components/find-in-page.tsx b/components/layout/find-in-page.tsx similarity index 100% rename from components/find-in-page.tsx rename to components/layout/find-in-page.tsx diff --git a/components/header-search.tsx b/components/layout/header-search.tsx similarity index 100% rename from components/header-search.tsx rename to components/layout/header-search.tsx diff --git a/components/logo.tsx b/components/layout/logo.tsx similarity index 100% rename from components/logo.tsx rename to components/layout/logo.tsx diff --git a/components/mobile-nav.tsx b/components/layout/mobile-nav.tsx similarity index 100% rename from components/mobile-nav.tsx rename to components/layout/mobile-nav.tsx diff --git a/components/notification-bell.tsx b/components/layout/notification-bell.tsx similarity index 100% rename from components/notification-bell.tsx rename to components/layout/notification-bell.tsx diff --git a/components/page-header.tsx b/components/layout/page-header.tsx similarity index 100% rename from components/page-header.tsx rename to components/layout/page-header.tsx diff --git a/components/site-bottom-nav.tsx b/components/layout/site-bottom-nav.tsx similarity index 100% rename from components/site-bottom-nav.tsx rename to components/layout/site-bottom-nav.tsx diff --git a/components/site-footer.tsx b/components/layout/site-footer.tsx similarity index 100% rename from components/site-footer.tsx rename to components/layout/site-footer.tsx diff --git a/components/site-header.tsx b/components/layout/site-header.tsx similarity index 97% rename from components/site-header.tsx rename to components/layout/site-header.tsx index 1951c71b..1d86920c 100644 --- a/components/site-header.tsx +++ b/components/layout/site-header.tsx @@ -24,7 +24,7 @@ import Link from "next/link"; import { ReadingSettings } from "@/components/reading-settings"; -import { NotificationBell } from "@/components/notification-bell"; +import { NotificationBell } from "@/components/layout/notification-bell"; import { useAuth } from "@/components/auth/auth-provider"; export function SiteHeader() { diff --git a/components/site-mobile-nav.tsx b/components/layout/site-mobile-nav.tsx similarity index 100% rename from components/site-mobile-nav.tsx rename to components/layout/site-mobile-nav.tsx diff --git a/components/site-sidebar.tsx b/components/layout/site-sidebar.tsx similarity index 100% rename from components/site-sidebar.tsx rename to components/layout/site-sidebar.tsx diff --git a/components/profile/profile-header.tsx b/components/profile/profile-header.tsx index 57e89de2..989c006f 100644 --- a/components/profile/profile-header.tsx +++ b/components/profile/profile-header.tsx @@ -34,6 +34,7 @@ import { Settings, X } from "lucide-react"; import { cn } from "@/lib/utils"; import type { RelationshipResult, RelationshipState } from "@/lib/social"; import { ProfileActions } from "@/components/profile/profile-actions"; +import { UserAvatar } from "@/components/ui/user-avatar"; import { FollowListDrawer, type FollowMode, @@ -110,10 +111,14 @@ export function ProfileHeader({ return ( <>

- setZoomOpen(true) : undefined} + className="size-24 sm:size-28" + textClassName="text-3xl" + interactive + onClick={avatarURL ? () => setZoomOpen(true) : undefined} + ariaLabel={`View ${name}'s profile picture`} />
@@ -242,51 +247,6 @@ function Stat({ ); } -function Avatar({ - src, - name, - onZoom, -}: { - src: string | null; - name: string; - /** Provided when the avatar should be interactive — the parent shows - * the zoom modal on click. Omit (or pass undefined) to render the - * initials placeholder as a plain non-clickable element. */ - onZoom?: () => void; -}) { - if (src) { - return ( - - ); - } - const initials = - name - .split(/\s+/) - .map((p) => p[0]) - .slice(0, 2) - .join("") - .toUpperCase() || "?"; - return ( -
- {initials} -
- ); -} - /** * AvatarZoomModal — portaled full-screen overlay with the avatar shown * inside a large circular crop. Click the backdrop or press Escape to diff --git a/components/profile/profile-sidebar.tsx b/components/profile/profile-sidebar.tsx index 83080b10..3d1cb476 100644 --- a/components/profile/profile-sidebar.tsx +++ b/components/profile/profile-sidebar.tsx @@ -14,9 +14,9 @@ import { useState } from "react"; import Link from "next/link"; -import Image from "next/image"; import { usePathname, useRouter } from "next/navigation"; import { User as UserIcon, FolderOpen, Bookmark, LogOut, Menu } from "lucide-react"; +import { UserAvatar } from "@/components/ui/user-avatar"; import { Drawer, DrawerContent, @@ -98,7 +98,7 @@ function MobileSidebar({ user }: { user: User }) { function SidebarHeader({ user }: { user: User }) { return (
- +

{user.name} @@ -161,29 +161,3 @@ function SidebarFooter() { ); } -function Avatar({ src, name }: { src: string | null; name: string }) { - if (src) { - return ( - {name} - ); - } - const initials = - name - .split(/\s+/) - .map((p) => p[0]) - .slice(0, 2) - .join("") - .toUpperCase() || "?"; - return ( -

- {initials} -
- ); -} diff --git a/components/profile/profile-view-header.tsx b/components/profile/profile-view-header.tsx index a0ceb358..17a8de7e 100644 --- a/components/profile/profile-view-header.tsx +++ b/components/profile/profile-view-header.tsx @@ -6,8 +6,8 @@ * thing visitors do, plus an action slot for an "Edit profile" button. */ -import Image from "next/image"; import type { User } from "@/lib/auth"; +import { UserAvatar } from "@/components/ui/user-avatar"; export function ProfileViewHeader({ user, @@ -20,7 +20,12 @@ export function ProfileViewHeader({ }) { return (
- +
@@ -43,29 +48,3 @@ export function ProfileViewHeader({ ); } -function Avatar({ src, name }: { src: string | null; name: string }) { - if (src) { - return ( - {name} - ); - } - const initials = - name - .split(/\s+/) - .map((p) => p[0]) - .slice(0, 2) - .join("") - .toUpperCase() || "?"; - return ( -
- {initials} -
- ); -} diff --git a/components/social/collection-grid-card.tsx b/components/social/collection/collection-grid-card.tsx similarity index 97% rename from components/social/collection-grid-card.tsx rename to components/social/collection/collection-grid-card.tsx index 01898c08..20ba39d5 100644 --- a/components/social/collection-grid-card.tsx +++ b/components/social/collection/collection-grid-card.tsx @@ -19,7 +19,7 @@ import Link from "next/link"; import { Lock } from "lucide-react"; import { cn } from "@/lib/utils"; import type { Collection } from "@/lib/social"; -import { quoteCardBgStyle } from "./post-card-shared"; +import { quoteCardBgStyle } from "../post/post-card-shared"; export function CollectionGridCard({ collection: c, diff --git a/components/social/collection-scroll-card.tsx b/components/social/collection/collection-scroll-card.tsx similarity index 98% rename from components/social/collection-scroll-card.tsx rename to components/social/collection/collection-scroll-card.tsx index de298d50..66fd5fdc 100644 --- a/components/social/collection-scroll-card.tsx +++ b/components/social/collection/collection-scroll-card.tsx @@ -30,8 +30,8 @@ import { } from "lucide-react"; import { cn } from "@/lib/utils"; import { collections, type Collection, type Post } from "@/lib/social"; -import { PostGridCard } from "./post-grid-card"; -import { quoteCardBgStyle } from "./post-card-shared"; +import { PostGridCard } from "../post/post-grid-card"; +import { quoteCardBgStyle } from "../post/post-card-shared"; type FetchState = "idle" | "loading" | "loaded" | "error"; diff --git a/components/social/collection-views.tsx b/components/social/collection/collection-views.tsx similarity index 100% rename from components/social/collection-views.tsx rename to components/social/collection/collection-views.tsx diff --git a/components/social/edit-collection-drawer.tsx b/components/social/collection/edit-collection-drawer.tsx similarity index 100% rename from components/social/edit-collection-drawer.tsx rename to components/social/collection/edit-collection-drawer.tsx diff --git a/components/social/comment/comment-menu.tsx b/components/social/comment/comment-menu.tsx new file mode 100644 index 00000000..0436a4c5 --- /dev/null +++ b/components/social/comment/comment-menu.tsx @@ -0,0 +1,144 @@ +"use client"; + +/** + * CommentMenu — the kebab (⋮) overflow menu on a comment: Pin / Report / + * Delete (each shown only when permitted). Rendered in a portal with a + * transparent full-screen backdrop that swallows the dismiss click, so it + * can't reach (and accidentally close) the surrounding vaul comments drawer. + */ + +import { useRef, useState } from "react"; +import { createPortal } from "react-dom"; +import { Flag, MoreVertical, Pin, PinOff, Trash2 } from "lucide-react"; +import { cn } from "@/lib/utils"; + +export function CommentMenu({ + canPin, + isPinned, + canDelete, + canReport, + onPin, + onDelete, + onReport, +}: { + canPin: boolean; + isPinned: boolean; + canDelete: boolean; + canReport: boolean; + onPin: () => void; + onDelete: () => void; + onReport: () => void; +}) { + const [open, setOpen] = useState(false); + const [pos, setPos] = useState<{ top: number; right: number } | null>(null); + const btnRef = useRef(null); + + // Nothing actionable → no kebab at all. + if (!canPin && !canDelete && !canReport) return null; + + function openMenu() { + const r = btnRef.current?.getBoundingClientRect(); + if (r) setPos({ top: r.bottom + 4, right: window.innerWidth - r.right }); + setOpen(true); + } + + return ( + <> + + {open && pos && typeof document !== "undefined" + ? createPortal( + <> +
{ + e.stopPropagation(); + setOpen(false); + }} + /> +
+ {canPin ? ( + : } + onClick={() => { + setOpen(false); + onPin(); + }} + > + {isPinned ? "Unpin" : "Pin"} + + ) : null} + {canReport ? ( + } + onClick={() => { + setOpen(false); + onReport(); + }} + > + Report + + ) : null} + {canDelete ? ( + } + danger + onClick={() => { + setOpen(false); + onDelete(); + }} + > + Delete + + ) : null} +
+ , + document.body, + ) + : null} + + ); +} + +function MenuItem({ + icon, + children, + onClick, + danger = false, +}: { + icon: React.ReactNode; + children: React.ReactNode; + onClick: () => void; + danger?: boolean; +}) { + return ( + + ); +} diff --git a/components/social/comment/comment-report-modal.tsx b/components/social/comment/comment-report-modal.tsx new file mode 100644 index 00000000..64b05a3c --- /dev/null +++ b/components/social/comment/comment-report-modal.tsx @@ -0,0 +1,135 @@ +"use client"; + +/** + * ReportCommentModal — compact category + reason form for reporting a comment. + * Controlled by the parent via `comment` (null = closed). Submits through the + * comments API and toasts the outcome. + */ + +import { useEffect, useState } from "react"; +import { toast } from "sonner"; +import { cn } from "@/lib/utils"; +import { + comments as commentsApi, + SocialError, + type Comment, + type PostReportCategory, +} from "@/lib/social"; + +const REPORT_CATEGORIES: { value: PostReportCategory; label: string }[] = [ + { value: "spam", label: "Spam or misleading" }, + { value: "harassment", label: "Harassment or bullying" }, + { value: "misinformation", label: "Misinformation" }, + { value: "inappropriate", label: "Inappropriate content" }, + { value: "other", label: "Something else" }, +]; + +export function ReportCommentModal({ + comment, + onClose, +}: { + comment: Comment | null; + onClose: () => void; +}) { + const [category, setCategory] = useState("spam"); + const [reason, setReason] = useState(""); + const [working, setWorking] = useState(false); + + useEffect(() => { + if (comment) { + setCategory("spam"); + setReason(""); + setWorking(false); + } + }, [comment]); + + if (!comment) return null; + + async function submit() { + if (!comment) return; + setWorking(true); + try { + await commentsApi.report(comment.id, category, reason.trim()); + toast("Thanks — your report was submitted", { duration: 2500 }); + onClose(); + } catch (err) { + toast.error( + err instanceof SocialError ? err.message : "Could not submit report", + { duration: 3000 }, + ); + } finally { + setWorking(false); + } + } + + return ( +
+
!working && onClose()} + aria-hidden + /> +
+

+ Report comment +

+

+ Reports are private and reviewed by our team. +

+
+ {REPORT_CATEGORIES.map((c) => ( + + ))} +
+