From 1d179bd5049be8ae1ffab33e69a841c25e6b1391 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Fri, 5 Jan 2024 19:01:05 -0600 Subject: [PATCH 01/10] Remove auth session provider --- src/app/(auth-state)/layout.tsx | 11 +++++---- src/site/FooterAuth.tsx | 42 +++++++++++---------------------- 2 files changed, 20 insertions(+), 33 deletions(-) diff --git a/src/app/(auth-state)/layout.tsx b/src/app/(auth-state)/layout.tsx index 1093e968..a4ecefda 100644 --- a/src/app/(auth-state)/layout.tsx +++ b/src/app/(auth-state)/layout.tsx @@ -1,18 +1,19 @@ import FooterAuth from '@/site/FooterAuth'; import PageContentContainer from '@/components/PageContentContainer'; -import { SessionProvider } from 'next-auth/react'; +import { auth } from '@/auth'; -export default function RootLayout({ +export default async function RootLayout({ children, }: { children: React.ReactNode }) { + const session = await auth(); return ( - + <> {children} - - + + ); } diff --git a/src/site/FooterAuth.tsx b/src/site/FooterAuth.tsx index a4bb2e4a..19e634f4 100644 --- a/src/site/FooterAuth.tsx +++ b/src/site/FooterAuth.tsx @@ -1,8 +1,6 @@ 'use client'; import { clsx } from 'clsx/lite'; -import Link from 'next/link'; -import { useSession } from 'next-auth/react'; import ThemeSwitcher from '@/site/ThemeSwitcher'; import SiteGrid from '../components/SiteGrid'; import { usePathname } from 'next/navigation'; @@ -16,9 +14,11 @@ const LINK_STYLE = clsx( 'hover:dark:text-gray-600', ); -export default function FooterAuth() { - const { data: session, status } = useSession(); - +export default function FooterAuth({ + email, +}: { + email: string | null | undefined +}) { const path = usePathname(); return ( @@ -29,29 +29,15 @@ export default function FooterAuth() { 'text-dim', )}>
- {status === 'loading' - ? <>Loading ... - : <> - {session?.user?.email &&
- {session.user.email} -
} - {status === 'authenticated' && -
- - Sign Out - -
} - {status === 'unauthenticated' && - - Sign In - } - } +
{email}
+
+ + Sign Out + +
{!isPathSignIn(path) && } } From b77b4a3f61f5289a1a4fd3df80582a4e42e2a779 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 13:50:15 -0600 Subject: [PATCH 02/10] Refactor footer auth data handling --- src/app/(auth-state)/layout.tsx | 19 ------- src/app/(static)/layout.tsx | 17 ------ src/app/layout.tsx | 37 +++++++------ src/cache/index.ts | 4 ++ src/components/PageContentContainer.tsx | 11 ---- src/components/RepoLink.tsx | 9 ++-- src/site/Footer.tsx | 12 +++++ src/site/FooterAuth.tsx | 46 ---------------- src/site/FooterClient.tsx | 70 +++++++++++++++++++++++++ src/site/FooterStatic.tsx | 47 ----------------- src/site/Nav.tsx | 11 +--- src/site/ViewSwitcher.tsx | 2 +- src/site/globals.css | 5 ++ 13 files changed, 122 insertions(+), 168 deletions(-) delete mode 100644 src/app/(auth-state)/layout.tsx delete mode 100644 src/app/(static)/layout.tsx delete mode 100644 src/components/PageContentContainer.tsx create mode 100644 src/site/Footer.tsx delete mode 100644 src/site/FooterAuth.tsx create mode 100644 src/site/FooterClient.tsx delete mode 100644 src/site/FooterStatic.tsx diff --git a/src/app/(auth-state)/layout.tsx b/src/app/(auth-state)/layout.tsx deleted file mode 100644 index a4ecefda..00000000 --- a/src/app/(auth-state)/layout.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import FooterAuth from '@/site/FooterAuth'; -import PageContentContainer from '@/components/PageContentContainer'; -import { auth } from '@/auth'; - -export default async function RootLayout({ - children, -}: { - children: React.ReactNode -}) { - const session = await auth(); - return ( - <> - - {children} - - - - ); -} diff --git a/src/app/(static)/layout.tsx b/src/app/(static)/layout.tsx deleted file mode 100644 index f4fa896f..00000000 --- a/src/app/(static)/layout.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import FooterStatic from '@/site/FooterStatic'; -import PageContentContainer from '@/components/PageContentContainer'; - -export default function RootLayout({ - children, -}: { - children: React.ReactNode -}) { - return ( - <> - - {children} - - - - ); -} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 1f822b57..1adcaceb 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -9,6 +9,7 @@ import ThemeProviderClient from '@/site/ThemeProviderClient'; import Nav from '@/site/Nav'; import ToasterWithThemes from '@/toast/ToasterWithThemes'; import PhotoEscapeHandler from '@/photo/PhotoEscapeHandler'; +import Footer from '@/site/Footer'; import '../site/globals.css'; @@ -68,21 +69,27 @@ export default function RootLayout({ suppressHydrationWarning > - -
-
- - -
+ + +
+
+
+
+ + + + ); diff --git a/src/cache/index.ts b/src/cache/index.ts index db0f2387..ce35f63b 100644 --- a/src/cache/index.ts +++ b/src/cache/index.ts @@ -28,6 +28,8 @@ import { getBlobPhotoUrls, getBlobUploadUrls } from '@/services/blob'; import type { Session } from 'next-auth'; import { createCameraKey } from '@/camera'; import { PATHS_ADMIN } from '@/site/paths'; +import { cache } from 'react'; +import { auth } from '@/auth'; // Table key const KEY_PHOTOS = 'photos'; @@ -207,6 +209,8 @@ export const getUniqueFilmSimulationsCached = [KEY_PHOTOS, KEY_FILM_SIMULATIONS], ); +export const authCached = cache(auth); + // No Store export const getPhotoNoStore = (...args: Parameters) => { diff --git a/src/components/PageContentContainer.tsx b/src/components/PageContentContainer.tsx deleted file mode 100644 index 3915e9c4..00000000 --- a/src/components/PageContentContainer.tsx +++ /dev/null @@ -1,11 +0,0 @@ -export default function PageContentContainer({ - children, -}: { - children: React.ReactNode -}) { - return ( -
- {children} -
- ); -} diff --git a/src/components/RepoLink.tsx b/src/components/RepoLink.tsx index 0d4105e7..cc0b6469 100644 --- a/src/components/RepoLink.tsx +++ b/src/components/RepoLink.tsx @@ -12,12 +12,15 @@ export default function RepoLink() { href="http://github.com/sambecker/exif-photo-blog" target="_blank" className={clsx( - 'flex items-center gap-1', - 'text-black dark:text-white', + 'flex items-center gap-0.5', + 'text-main hover:text-main', 'hover:underline', )} > - + exif-photo-blog diff --git a/src/site/Footer.tsx b/src/site/Footer.tsx new file mode 100644 index 00000000..53bf1c7c --- /dev/null +++ b/src/site/Footer.tsx @@ -0,0 +1,12 @@ +import FooterClient from './FooterClient'; +import { Suspense } from 'react'; +import { authCached } from '@/cache'; + +export default async function Footer() { + const session = await authCached(); + return ( + }> + + + ); +} diff --git a/src/site/FooterAuth.tsx b/src/site/FooterAuth.tsx deleted file mode 100644 index 19e634f4..00000000 --- a/src/site/FooterAuth.tsx +++ /dev/null @@ -1,46 +0,0 @@ -'use client'; - -import { clsx } from 'clsx/lite'; -import ThemeSwitcher from '@/site/ThemeSwitcher'; -import SiteGrid from '../components/SiteGrid'; -import { usePathname } from 'next/navigation'; -import { isPathSignIn } from '@/site/paths'; -import { signOutAction } from '@/auth/action'; -import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus'; - -const LINK_STYLE = clsx( - 'cursor-pointer', - 'hover:text-gray-300', - 'hover:dark:text-gray-600', -); - -export default function FooterAuth({ - email, -}: { - email: string | null | undefined -}) { - const path = usePathname(); - - return ( - -
-
{email}
-
- - Sign Out - -
-
- {!isPathSignIn(path) && } - } - /> - ); -}; diff --git a/src/site/FooterClient.tsx b/src/site/FooterClient.tsx new file mode 100644 index 00000000..8e5defb9 --- /dev/null +++ b/src/site/FooterClient.tsx @@ -0,0 +1,70 @@ +'use client'; + +import { clsx } from 'clsx/lite'; +import SiteGrid from '../components/SiteGrid'; +import ThemeSwitcher from '@/site/ThemeSwitcher'; +import Link from 'next/link'; +import { SHOW_REPO_LINK } from '@/site/config'; +import RepoLink from '../components/RepoLink'; +import { usePathname } from 'next/navigation'; +import { isPathAdmin, isPathSignIn, pathForAdminPhotos } from './paths'; +import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus'; +import { signOutAction } from '@/auth/action'; +import Spinner from '@/components/Spinner'; +import AnimateItems from '@/components/AnimateItems'; + +export default function FooterClient({ + userEmail, +}: { + userEmail?: string | null | undefined +}) { + const pathname = usePathname(); + + const showFooter = !isPathSignIn(pathname); + + const shouldAnimate = !isPathAdmin(pathname); + + return ( + +
+ {isPathAdmin(pathname) + ? <> + {userEmail === undefined && + } + {userEmail && <> +
{userEmail}
+
+ + Sign out + +
+ } + + : <> + + Admin + + {SHOW_REPO_LINK && + } + } +
+
+ +
+ ] + : []} + />} + /> + ); +} diff --git a/src/site/FooterStatic.tsx b/src/site/FooterStatic.tsx deleted file mode 100644 index 5e2f6061..00000000 --- a/src/site/FooterStatic.tsx +++ /dev/null @@ -1,47 +0,0 @@ -'use client'; - -import { clsx } from 'clsx/lite'; -import SiteGrid from '../components/SiteGrid'; -import ThemeSwitcher from '@/site/ThemeSwitcher'; -import { signOut } from 'next-auth/react'; -import Link from 'next/link'; -import { SHOW_REPO_LINK } from '@/site/config'; -import RepoLink from '../components/RepoLink'; - -export default function FooterStatic({ - showSignOut, -}: { - showSignOut?: boolean -}) { - return ( - -
- - Admin - - {SHOW_REPO_LINK && - } - {showSignOut && -
signOut()} - > - Sign out -
} -
- - } - /> - ); -} diff --git a/src/site/Nav.tsx b/src/site/Nav.tsx index 577a04fe..aca0e5b5 100644 --- a/src/site/Nav.tsx +++ b/src/site/Nav.tsx @@ -7,7 +7,6 @@ import SiteGrid from '../components/SiteGrid'; import { SITE_DOMAIN_OR_TITLE } from '@/site/config'; import ViewSwitcher, { SwitcherSelection } from '@/site/ViewSwitcher'; import { - PATH_ADMIN, PATH_ROOT, isPathAdmin, isPathGrid, @@ -17,9 +16,7 @@ import { } from '@/site/paths'; import AnimateItems from '../components/AnimateItems'; -export default function Nav({ showTextLinks }: { showTextLinks?: boolean }) { - const isLoggedIn = false; - +export default function Nav() { const pathname = usePathname(); const showNav = !isPathSignIn(pathname); @@ -63,12 +60,8 @@ export default function Nav({ showTextLinks }: { showTextLinks?: boolean }) {
- {showTextLinks && <> - {renderLink('Home', PATH_ROOT)} - {renderLink('Admin', PATH_ADMIN)} - }
{renderLink(SITE_DOMAIN_OR_TITLE, PATH_ROOT)} diff --git a/src/site/ViewSwitcher.tsx b/src/site/ViewSwitcher.tsx index afa35afc..875dad9c 100644 --- a/src/site/ViewSwitcher.tsx +++ b/src/site/ViewSwitcher.tsx @@ -38,7 +38,7 @@ export default function ViewSwitcher({ /> {showAdmin && } + icon={} href="/admin/photos" active={currentSelection === 'admin'} />} diff --git a/src/site/globals.css b/src/site/globals.css index 6a71046c..b62a0eb4 100644 --- a/src/site/globals.css +++ b/src/site/globals.css @@ -107,6 +107,11 @@ p-0 min-h-0 border-none active:bg-transparent shadow-none } + a, .link { + @apply + hover:text-gray-600 + hover:dark:text-gray-400 + } /* Common Utilities */ .text-main { @apply From 3e456168706c4ad9cb63b4658666cf9eb4b36fec Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 14:14:03 -0600 Subject: [PATCH 03/10] Wrap nav in suspense --- src/site/Nav.tsx | 81 +++++------------------------------------- src/site/NavClient.tsx | 79 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 72 deletions(-) create mode 100644 src/site/NavClient.tsx diff --git a/src/site/Nav.tsx b/src/site/Nav.tsx index aca0e5b5..18691025 100644 --- a/src/site/Nav.tsx +++ b/src/site/Nav.tsx @@ -1,75 +1,12 @@ -'use client'; - -import { clsx } from 'clsx/lite'; -import { usePathname } from 'next/navigation'; -import Link from 'next/link'; -import SiteGrid from '../components/SiteGrid'; -import { SITE_DOMAIN_OR_TITLE } from '@/site/config'; -import ViewSwitcher, { SwitcherSelection } from '@/site/ViewSwitcher'; -import { - PATH_ROOT, - isPathAdmin, - isPathGrid, - isPathProtected, - isPathSets, - isPathSignIn, -} from '@/site/paths'; -import AnimateItems from '../components/AnimateItems'; - -export default function Nav() { - const pathname = usePathname(); - - const showNav = !isPathSignIn(pathname); - - const shouldAnimate = !isPathAdmin(pathname); - - const renderLink = ( - text: string, - linkOrAction: string | (() => void), - ) => - typeof linkOrAction === 'string' - ? {text} - : ; - - const switcherSelectionForPath = (): SwitcherSelection | undefined => { - if (pathname === PATH_ROOT) { - return 'full-frame'; - } else if (isPathGrid(pathname)) { - return 'grid'; - } else if (isPathSets(pathname)) { - return 'sets'; - } else if (isPathProtected(pathname)) { - return 'admin'; - } - }; +import { authCached } from '@/cache'; +import NavClient from './NavClient'; +import { Suspense } from 'react'; +export default async function Nav() { + const session = await authCached(); return ( - -
- -
-
- {renderLink(SITE_DOMAIN_OR_TITLE, PATH_ROOT)} -
-
] - : []} - /> - } - /> + }> + + ); -}; +} diff --git a/src/site/NavClient.tsx b/src/site/NavClient.tsx new file mode 100644 index 00000000..54493173 --- /dev/null +++ b/src/site/NavClient.tsx @@ -0,0 +1,79 @@ +'use client'; + +import { clsx } from 'clsx/lite'; +import { usePathname } from 'next/navigation'; +import Link from 'next/link'; +import SiteGrid from '../components/SiteGrid'; +import { SITE_DOMAIN_OR_TITLE } from '@/site/config'; +import ViewSwitcher, { SwitcherSelection } from '@/site/ViewSwitcher'; +import { + PATH_ROOT, + isPathAdmin, + isPathGrid, + isPathProtected, + isPathSets, + isPathSignIn, +} from '@/site/paths'; +import AnimateItems from '../components/AnimateItems'; + +export default function NavClient({ + showAdmin, +}: { + showAdmin?: boolean, +}) { + const pathname = usePathname(); + + const showNav = !isPathSignIn(pathname); + + const shouldAnimate = !isPathAdmin(pathname); + + const renderLink = ( + text: string, + linkOrAction: string | (() => void), + ) => + typeof linkOrAction === 'string' + ? {text} + : ; + + const switcherSelectionForPath = (): SwitcherSelection | undefined => { + if (pathname === PATH_ROOT) { + return 'full-frame'; + } else if (isPathGrid(pathname)) { + return 'grid'; + } else if (isPathSets(pathname)) { + return 'sets'; + } else if (isPathProtected(pathname)) { + return 'admin'; + } + }; + + return ( + +
+ +
+
+ {renderLink(SITE_DOMAIN_OR_TITLE, PATH_ROOT)} +
+ ] + : []} + /> + } + /> + ); +}; From 5791a73e7b637aee2c050cb845315bf9c08d6b50 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 14:27:28 -0600 Subject: [PATCH 04/10] Refactor sign in error handling --- src/auth/action.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auth/action.ts b/src/auth/action.ts index 734da6e9..c16db0bd 100644 --- a/src/auth/action.ts +++ b/src/auth/action.ts @@ -9,7 +9,7 @@ export const signInAction = async ( try { await signIn('credentials', Object.fromEntries(formData)); } catch (error) { - if ((error as Error).message.includes(CREDENTIALS_SIGN_IN_ERROR)) { + if ((`${error}`).includes(CREDENTIALS_SIGN_IN_ERROR)) { return CREDENTIALS_SIGN_IN_ERROR; } throw error; From 60f053ce9ecb674496429e57c219b1d73df74701 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 14:31:00 -0600 Subject: [PATCH 05/10] Bump dependencies --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 083cb621..53c6716b 100644 --- a/package.json +++ b/package.json @@ -17,10 +17,10 @@ "@testing-library/react": "^14.1.2", "@types/jest": "^29.5.11", "@types/node": "^20.10.6", - "@types/react": "18.2.46", + "@types/react": "18.2.47", "@types/react-dom": "18.2.18", - "@typescript-eslint/eslint-plugin": "^6.17.0", - "@typescript-eslint/parser": "^6.17.0", + "@typescript-eslint/eslint-plugin": "^6.18.0", + "@typescript-eslint/parser": "^6.18.0", "@vercel/analytics": "^1.1.1", "@vercel/blob": "^0.16.1", "@vercel/postgres": "0.5.1", @@ -44,7 +44,7 @@ "react-dom": "18.2.0", "react-icons": "^4.12.0", "sonner": "^1.3.1", - "tailwindcss": "3.4.0", + "tailwindcss": "3.4.1", "ts-exif-parser": "^0.2.2", "typescript": "5.3.3" } From 37de4c64f75f8671dbff81a1f9ba19797b7548e3 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 14:38:57 -0600 Subject: [PATCH 06/10] Remove (auth-state) route group --- src/app/{(auth-state) => }/admin/configuration/page.tsx | 0 src/app/{(auth-state) => }/admin/layout.tsx | 0 src/app/{(auth-state) => }/admin/photos/[photoId]/edit/page.tsx | 0 src/app/{(auth-state) => }/admin/photos/page.tsx | 0 src/app/{(auth-state) => }/admin/tags/[tag]/edit/page.tsx | 0 src/app/{(auth-state) => }/admin/tags/page.tsx | 0 src/app/{(auth-state) => }/admin/uploads/[uploadPath]/page.tsx | 0 src/app/{(auth-state) => }/admin/uploads/blob/route.tsx | 0 src/app/{(auth-state) => }/admin/uploads/page.tsx | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename src/app/{(auth-state) => }/admin/configuration/page.tsx (100%) rename src/app/{(auth-state) => }/admin/layout.tsx (100%) rename src/app/{(auth-state) => }/admin/photos/[photoId]/edit/page.tsx (100%) rename src/app/{(auth-state) => }/admin/photos/page.tsx (100%) rename src/app/{(auth-state) => }/admin/tags/[tag]/edit/page.tsx (100%) rename src/app/{(auth-state) => }/admin/tags/page.tsx (100%) rename src/app/{(auth-state) => }/admin/uploads/[uploadPath]/page.tsx (100%) rename src/app/{(auth-state) => }/admin/uploads/blob/route.tsx (100%) rename src/app/{(auth-state) => }/admin/uploads/page.tsx (100%) diff --git a/src/app/(auth-state)/admin/configuration/page.tsx b/src/app/admin/configuration/page.tsx similarity index 100% rename from src/app/(auth-state)/admin/configuration/page.tsx rename to src/app/admin/configuration/page.tsx diff --git a/src/app/(auth-state)/admin/layout.tsx b/src/app/admin/layout.tsx similarity index 100% rename from src/app/(auth-state)/admin/layout.tsx rename to src/app/admin/layout.tsx diff --git a/src/app/(auth-state)/admin/photos/[photoId]/edit/page.tsx b/src/app/admin/photos/[photoId]/edit/page.tsx similarity index 100% rename from src/app/(auth-state)/admin/photos/[photoId]/edit/page.tsx rename to src/app/admin/photos/[photoId]/edit/page.tsx diff --git a/src/app/(auth-state)/admin/photos/page.tsx b/src/app/admin/photos/page.tsx similarity index 100% rename from src/app/(auth-state)/admin/photos/page.tsx rename to src/app/admin/photos/page.tsx diff --git a/src/app/(auth-state)/admin/tags/[tag]/edit/page.tsx b/src/app/admin/tags/[tag]/edit/page.tsx similarity index 100% rename from src/app/(auth-state)/admin/tags/[tag]/edit/page.tsx rename to src/app/admin/tags/[tag]/edit/page.tsx diff --git a/src/app/(auth-state)/admin/tags/page.tsx b/src/app/admin/tags/page.tsx similarity index 100% rename from src/app/(auth-state)/admin/tags/page.tsx rename to src/app/admin/tags/page.tsx diff --git a/src/app/(auth-state)/admin/uploads/[uploadPath]/page.tsx b/src/app/admin/uploads/[uploadPath]/page.tsx similarity index 100% rename from src/app/(auth-state)/admin/uploads/[uploadPath]/page.tsx rename to src/app/admin/uploads/[uploadPath]/page.tsx diff --git a/src/app/(auth-state)/admin/uploads/blob/route.tsx b/src/app/admin/uploads/blob/route.tsx similarity index 100% rename from src/app/(auth-state)/admin/uploads/blob/route.tsx rename to src/app/admin/uploads/blob/route.tsx diff --git a/src/app/(auth-state)/admin/uploads/page.tsx b/src/app/admin/uploads/page.tsx similarity index 100% rename from src/app/(auth-state)/admin/uploads/page.tsx rename to src/app/admin/uploads/page.tsx From 115af8dd8d516b3a1f328561416ae7d966872572 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 14:44:54 -0600 Subject: [PATCH 07/10] Remove (static) route group --- src/app/{(static) => }/film-demo/animate/page.tsx | 0 src/app/{(static) => }/film-demo/page.tsx | 0 src/app/{(static) => }/film/[simulation]/[photoId]/layout.tsx | 0 src/app/{(static) => }/film/[simulation]/[photoId]/page.tsx | 0 src/app/{(static) => }/film/[simulation]/[photoId]/share/page.tsx | 0 src/app/{(static) => }/film/[simulation]/image/route.tsx | 0 src/app/{(static) => }/film/[simulation]/page.tsx | 0 src/app/{(static) => }/film/[simulation]/share/page.tsx | 0 src/app/{(static) => }/grid/page.tsx | 0 src/app/{(static) => }/home-image/route.tsx | 0 src/app/{(static) => }/og/page.tsx | 0 src/app/{(static) => }/p/[photoId]/image/route.tsx | 0 src/app/{(static) => }/p/[photoId]/layout.tsx | 0 src/app/{(static) => }/p/[photoId]/page.tsx | 0 src/app/{(static) => }/p/[photoId]/share/page.tsx | 0 src/app/{(static) => }/page.tsx | 0 src/app/{(static) => }/sets/page.tsx | 0 src/app/{(static) => }/shot-on/[camera]/[photoId]/layout.tsx | 0 src/app/{(static) => }/shot-on/[camera]/[photoId]/page.tsx | 0 src/app/{(static) => }/shot-on/[camera]/[photoId]/share/page.tsx | 0 src/app/{(static) => }/shot-on/[camera]/image/route.tsx | 0 src/app/{(static) => }/shot-on/[camera]/page.tsx | 0 src/app/{(static) => }/shot-on/[camera]/share/page.tsx | 0 src/app/{(static) => }/tag/[tag]/[photoId]/layout.tsx | 0 src/app/{(static) => }/tag/[tag]/[photoId]/page.tsx | 0 src/app/{(static) => }/tag/[tag]/[photoId]/share/page.tsx | 0 src/app/{(static) => }/tag/[tag]/image/route.tsx | 0 src/app/{(static) => }/tag/[tag]/page.tsx | 0 src/app/{(static) => }/tag/[tag]/share/page.tsx | 0 src/app/{(static) => }/template-image-tight/route.tsx | 0 src/app/{(static) => }/template-image/route.tsx | 0 src/app/{(static) => }/template-url/route.tsx | 0 32 files changed, 0 insertions(+), 0 deletions(-) rename src/app/{(static) => }/film-demo/animate/page.tsx (100%) rename src/app/{(static) => }/film-demo/page.tsx (100%) rename src/app/{(static) => }/film/[simulation]/[photoId]/layout.tsx (100%) rename src/app/{(static) => }/film/[simulation]/[photoId]/page.tsx (100%) rename src/app/{(static) => }/film/[simulation]/[photoId]/share/page.tsx (100%) rename src/app/{(static) => }/film/[simulation]/image/route.tsx (100%) rename src/app/{(static) => }/film/[simulation]/page.tsx (100%) rename src/app/{(static) => }/film/[simulation]/share/page.tsx (100%) rename src/app/{(static) => }/grid/page.tsx (100%) rename src/app/{(static) => }/home-image/route.tsx (100%) rename src/app/{(static) => }/og/page.tsx (100%) rename src/app/{(static) => }/p/[photoId]/image/route.tsx (100%) rename src/app/{(static) => }/p/[photoId]/layout.tsx (100%) rename src/app/{(static) => }/p/[photoId]/page.tsx (100%) rename src/app/{(static) => }/p/[photoId]/share/page.tsx (100%) rename src/app/{(static) => }/page.tsx (100%) rename src/app/{(static) => }/sets/page.tsx (100%) rename src/app/{(static) => }/shot-on/[camera]/[photoId]/layout.tsx (100%) rename src/app/{(static) => }/shot-on/[camera]/[photoId]/page.tsx (100%) rename src/app/{(static) => }/shot-on/[camera]/[photoId]/share/page.tsx (100%) rename src/app/{(static) => }/shot-on/[camera]/image/route.tsx (100%) rename src/app/{(static) => }/shot-on/[camera]/page.tsx (100%) rename src/app/{(static) => }/shot-on/[camera]/share/page.tsx (100%) rename src/app/{(static) => }/tag/[tag]/[photoId]/layout.tsx (100%) rename src/app/{(static) => }/tag/[tag]/[photoId]/page.tsx (100%) rename src/app/{(static) => }/tag/[tag]/[photoId]/share/page.tsx (100%) rename src/app/{(static) => }/tag/[tag]/image/route.tsx (100%) rename src/app/{(static) => }/tag/[tag]/page.tsx (100%) rename src/app/{(static) => }/tag/[tag]/share/page.tsx (100%) rename src/app/{(static) => }/template-image-tight/route.tsx (100%) rename src/app/{(static) => }/template-image/route.tsx (100%) rename src/app/{(static) => }/template-url/route.tsx (100%) diff --git a/src/app/(static)/film-demo/animate/page.tsx b/src/app/film-demo/animate/page.tsx similarity index 100% rename from src/app/(static)/film-demo/animate/page.tsx rename to src/app/film-demo/animate/page.tsx diff --git a/src/app/(static)/film-demo/page.tsx b/src/app/film-demo/page.tsx similarity index 100% rename from src/app/(static)/film-demo/page.tsx rename to src/app/film-demo/page.tsx diff --git a/src/app/(static)/film/[simulation]/[photoId]/layout.tsx b/src/app/film/[simulation]/[photoId]/layout.tsx similarity index 100% rename from src/app/(static)/film/[simulation]/[photoId]/layout.tsx rename to src/app/film/[simulation]/[photoId]/layout.tsx diff --git a/src/app/(static)/film/[simulation]/[photoId]/page.tsx b/src/app/film/[simulation]/[photoId]/page.tsx similarity index 100% rename from src/app/(static)/film/[simulation]/[photoId]/page.tsx rename to src/app/film/[simulation]/[photoId]/page.tsx diff --git a/src/app/(static)/film/[simulation]/[photoId]/share/page.tsx b/src/app/film/[simulation]/[photoId]/share/page.tsx similarity index 100% rename from src/app/(static)/film/[simulation]/[photoId]/share/page.tsx rename to src/app/film/[simulation]/[photoId]/share/page.tsx diff --git a/src/app/(static)/film/[simulation]/image/route.tsx b/src/app/film/[simulation]/image/route.tsx similarity index 100% rename from src/app/(static)/film/[simulation]/image/route.tsx rename to src/app/film/[simulation]/image/route.tsx diff --git a/src/app/(static)/film/[simulation]/page.tsx b/src/app/film/[simulation]/page.tsx similarity index 100% rename from src/app/(static)/film/[simulation]/page.tsx rename to src/app/film/[simulation]/page.tsx diff --git a/src/app/(static)/film/[simulation]/share/page.tsx b/src/app/film/[simulation]/share/page.tsx similarity index 100% rename from src/app/(static)/film/[simulation]/share/page.tsx rename to src/app/film/[simulation]/share/page.tsx diff --git a/src/app/(static)/grid/page.tsx b/src/app/grid/page.tsx similarity index 100% rename from src/app/(static)/grid/page.tsx rename to src/app/grid/page.tsx diff --git a/src/app/(static)/home-image/route.tsx b/src/app/home-image/route.tsx similarity index 100% rename from src/app/(static)/home-image/route.tsx rename to src/app/home-image/route.tsx diff --git a/src/app/(static)/og/page.tsx b/src/app/og/page.tsx similarity index 100% rename from src/app/(static)/og/page.tsx rename to src/app/og/page.tsx diff --git a/src/app/(static)/p/[photoId]/image/route.tsx b/src/app/p/[photoId]/image/route.tsx similarity index 100% rename from src/app/(static)/p/[photoId]/image/route.tsx rename to src/app/p/[photoId]/image/route.tsx diff --git a/src/app/(static)/p/[photoId]/layout.tsx b/src/app/p/[photoId]/layout.tsx similarity index 100% rename from src/app/(static)/p/[photoId]/layout.tsx rename to src/app/p/[photoId]/layout.tsx diff --git a/src/app/(static)/p/[photoId]/page.tsx b/src/app/p/[photoId]/page.tsx similarity index 100% rename from src/app/(static)/p/[photoId]/page.tsx rename to src/app/p/[photoId]/page.tsx diff --git a/src/app/(static)/p/[photoId]/share/page.tsx b/src/app/p/[photoId]/share/page.tsx similarity index 100% rename from src/app/(static)/p/[photoId]/share/page.tsx rename to src/app/p/[photoId]/share/page.tsx diff --git a/src/app/(static)/page.tsx b/src/app/page.tsx similarity index 100% rename from src/app/(static)/page.tsx rename to src/app/page.tsx diff --git a/src/app/(static)/sets/page.tsx b/src/app/sets/page.tsx similarity index 100% rename from src/app/(static)/sets/page.tsx rename to src/app/sets/page.tsx diff --git a/src/app/(static)/shot-on/[camera]/[photoId]/layout.tsx b/src/app/shot-on/[camera]/[photoId]/layout.tsx similarity index 100% rename from src/app/(static)/shot-on/[camera]/[photoId]/layout.tsx rename to src/app/shot-on/[camera]/[photoId]/layout.tsx diff --git a/src/app/(static)/shot-on/[camera]/[photoId]/page.tsx b/src/app/shot-on/[camera]/[photoId]/page.tsx similarity index 100% rename from src/app/(static)/shot-on/[camera]/[photoId]/page.tsx rename to src/app/shot-on/[camera]/[photoId]/page.tsx diff --git a/src/app/(static)/shot-on/[camera]/[photoId]/share/page.tsx b/src/app/shot-on/[camera]/[photoId]/share/page.tsx similarity index 100% rename from src/app/(static)/shot-on/[camera]/[photoId]/share/page.tsx rename to src/app/shot-on/[camera]/[photoId]/share/page.tsx diff --git a/src/app/(static)/shot-on/[camera]/image/route.tsx b/src/app/shot-on/[camera]/image/route.tsx similarity index 100% rename from src/app/(static)/shot-on/[camera]/image/route.tsx rename to src/app/shot-on/[camera]/image/route.tsx diff --git a/src/app/(static)/shot-on/[camera]/page.tsx b/src/app/shot-on/[camera]/page.tsx similarity index 100% rename from src/app/(static)/shot-on/[camera]/page.tsx rename to src/app/shot-on/[camera]/page.tsx diff --git a/src/app/(static)/shot-on/[camera]/share/page.tsx b/src/app/shot-on/[camera]/share/page.tsx similarity index 100% rename from src/app/(static)/shot-on/[camera]/share/page.tsx rename to src/app/shot-on/[camera]/share/page.tsx diff --git a/src/app/(static)/tag/[tag]/[photoId]/layout.tsx b/src/app/tag/[tag]/[photoId]/layout.tsx similarity index 100% rename from src/app/(static)/tag/[tag]/[photoId]/layout.tsx rename to src/app/tag/[tag]/[photoId]/layout.tsx diff --git a/src/app/(static)/tag/[tag]/[photoId]/page.tsx b/src/app/tag/[tag]/[photoId]/page.tsx similarity index 100% rename from src/app/(static)/tag/[tag]/[photoId]/page.tsx rename to src/app/tag/[tag]/[photoId]/page.tsx diff --git a/src/app/(static)/tag/[tag]/[photoId]/share/page.tsx b/src/app/tag/[tag]/[photoId]/share/page.tsx similarity index 100% rename from src/app/(static)/tag/[tag]/[photoId]/share/page.tsx rename to src/app/tag/[tag]/[photoId]/share/page.tsx diff --git a/src/app/(static)/tag/[tag]/image/route.tsx b/src/app/tag/[tag]/image/route.tsx similarity index 100% rename from src/app/(static)/tag/[tag]/image/route.tsx rename to src/app/tag/[tag]/image/route.tsx diff --git a/src/app/(static)/tag/[tag]/page.tsx b/src/app/tag/[tag]/page.tsx similarity index 100% rename from src/app/(static)/tag/[tag]/page.tsx rename to src/app/tag/[tag]/page.tsx diff --git a/src/app/(static)/tag/[tag]/share/page.tsx b/src/app/tag/[tag]/share/page.tsx similarity index 100% rename from src/app/(static)/tag/[tag]/share/page.tsx rename to src/app/tag/[tag]/share/page.tsx diff --git a/src/app/(static)/template-image-tight/route.tsx b/src/app/template-image-tight/route.tsx similarity index 100% rename from src/app/(static)/template-image-tight/route.tsx rename to src/app/template-image-tight/route.tsx diff --git a/src/app/(static)/template-image/route.tsx b/src/app/template-image/route.tsx similarity index 100% rename from src/app/(static)/template-image/route.tsx rename to src/app/template-image/route.tsx diff --git a/src/app/(static)/template-url/route.tsx b/src/app/template-url/route.tsx similarity index 100% rename from src/app/(static)/template-url/route.tsx rename to src/app/template-url/route.tsx From 3e15e149de159246539b65d8208fc6c1be497cad Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 14:48:17 -0600 Subject: [PATCH 08/10] Update lock file --- pnpm-lock.yaml | 126 ++++++++++++++++++++++++------------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2941470b..b6162f91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ dependencies: version: 14.0.4 '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.0) + version: 0.5.7(tailwindcss@3.4.1) '@testing-library/jest-dom': specifier: ^6.2.0 version: 6.2.0(@types/jest@29.5.11)(jest@29.7.0) @@ -30,17 +30,17 @@ dependencies: specifier: ^20.10.6 version: 20.10.6 '@types/react': - specifier: 18.2.46 - version: 18.2.46 + specifier: 18.2.47 + version: 18.2.47 '@types/react-dom': specifier: 18.2.18 version: 18.2.18 '@typescript-eslint/eslint-plugin': - specifier: ^6.17.0 - version: 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.18.0 + version: 6.18.0(@typescript-eslint/parser@6.18.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^6.17.0 - version: 6.17.0(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.18.0 + version: 6.18.0(eslint@8.56.0)(typescript@5.3.3) '@vercel/analytics': specifier: ^1.1.1 version: 1.1.1 @@ -111,8 +111,8 @@ dependencies: specifier: ^1.3.1 version: 1.3.1(react-dom@18.2.0)(react@18.2.0) tailwindcss: - specifier: 3.4.0 - version: 3.4.0 + specifier: 3.4.1 + version: 3.4.1 ts-exif-parser: specifier: ^0.2.2 version: 0.2.2 @@ -2118,13 +2118,13 @@ packages: tslib: 2.6.2 dev: false - /@tailwindcss/forms@0.5.7(tailwindcss@3.4.0): + /@tailwindcss/forms@0.5.7(tailwindcss@3.4.1): resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.0 + tailwindcss: 3.4.1 dev: false /@testing-library/dom@9.3.3: @@ -2289,11 +2289,11 @@ packages: /@types/react-dom@18.2.18: resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} dependencies: - '@types/react': 18.2.46 + '@types/react': 18.2.47 dev: false - /@types/react@18.2.46: - resolution: {integrity: sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==} + /@types/react@18.2.47: + resolution: {integrity: sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -2326,8 +2326,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: false - /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} + /@typescript-eslint/eslint-plugin@6.18.0(@typescript-eslint/parser@6.18.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-3lqEvQUdCozi6d1mddWqd+kf8KxmGq2Plzx36BlkjuQe3rSTm/O98cLf0A4uDO+a5N1KD2SeEEl6fW97YHY+6w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2338,11 +2338,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/parser': 6.18.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.0 + '@typescript-eslint/type-utils': 6.18.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.0 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -2355,8 +2355,8 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@6.17.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} + /@typescript-eslint/parser@6.18.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-v6uR68SFvqhNQT41frCMCQpsP+5vySy6IdgjlzUWoo7ALCnpaWYcz/Ij2k4L8cEsL0wkvOviCMpjmtRtHNOKzA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2365,10 +2365,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/scope-manager': 6.18.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/typescript-estree': 6.18.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.0 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -2376,16 +2376,16 @@ packages: - supports-color dev: false - /@typescript-eslint/scope-manager@6.17.0: - resolution: {integrity: sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==} + /@typescript-eslint/scope-manager@6.18.0: + resolution: {integrity: sha512-o/UoDT2NgOJ2VfHpfr+KBY2ErWvCySNUIX/X7O9g8Zzt/tXdpfEU43qbNk8LVuWUT2E0ptzTWXh79i74PP0twA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/visitor-keys': 6.18.0 dev: false - /@typescript-eslint/type-utils@6.17.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} + /@typescript-eslint/type-utils@6.18.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-ZeMtrXnGmTcHciJN1+u2CigWEEXgy1ufoxtWcHORt5kGvpjjIlK9MUhzHm4RM8iVy6dqSaZA/6PVkX6+r+ChjQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2394,8 +2394,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -2404,13 +2404,13 @@ packages: - supports-color dev: false - /@typescript-eslint/types@6.17.0: - resolution: {integrity: sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==} + /@typescript-eslint/types@6.18.0: + resolution: {integrity: sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA==} engines: {node: ^16.0.0 || >=18.0.0} dev: false - /@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3): - resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} + /@typescript-eslint/typescript-estree@6.18.0(typescript@5.3.3): + resolution: {integrity: sha512-klNvl+Ql4NsBNGB4W9TZ2Od03lm7aGvTbs0wYaFYsplVPhr+oeXjlPZCDI4U9jgJIDK38W1FKhacCFzCC+nbIg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2418,8 +2418,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/visitor-keys': 6.18.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -2431,8 +2431,8 @@ packages: - supports-color dev: false - /@typescript-eslint/utils@6.17.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} + /@typescript-eslint/utils@6.18.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-wiKKCbUeDPGaYEYQh1S580dGxJ/V9HI7K5sbGAVklyf+o5g3O+adnS4UNJajplF4e7z2q0uVBaTdT/yLb4XAVA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2440,9 +2440,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/typescript-estree': 6.18.0(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -2450,11 +2450,11 @@ packages: - typescript dev: false - /@typescript-eslint/visitor-keys@6.17.0: - resolution: {integrity: sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==} + /@typescript-eslint/visitor-keys@6.18.0: + resolution: {integrity: sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.17.0 + '@typescript-eslint/types': 6.18.0 eslint-visitor-keys: 3.4.3 dev: false @@ -3476,11 +3476,11 @@ packages: dependencies: '@next/eslint-plugin-next': 14.0.4 '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -3500,7 +3500,7 @@ packages: - supports-color dev: false - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3510,8 +3510,8 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -3523,7 +3523,7 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3544,16 +3544,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: false - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -3563,7 +3563,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3572,7 +3572,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -6305,8 +6305,8 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: false - /tailwindcss@3.4.0: - resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==} + /tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: From 48af9e822f9f395f42ef8823b78ff08ef728eabf Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sat, 6 Jan 2024 15:03:14 -0600 Subject: [PATCH 09/10] Hoist suspense boundary to root layout --- src/app/layout.tsx | 11 +++++++++-- src/site/Footer.tsx | 7 ++----- src/site/Nav.tsx | 5 +---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 1adcaceb..9aeff4bc 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -10,6 +10,9 @@ import Nav from '@/site/Nav'; import ToasterWithThemes from '@/toast/ToasterWithThemes'; import PhotoEscapeHandler from '@/photo/PhotoEscapeHandler'; import Footer from '@/site/Footer'; +import { Suspense } from 'react'; +import FooterClient from '@/site/FooterClient'; +import NavClient from '@/site/NavClient'; import '../site/globals.css'; @@ -75,14 +78,18 @@ export default function RootLayout({ 'mx-3 mb-3', 'lg:mx-6 lg:mb-6', )}> -