diff --git a/frontend/src/app/recollections/FlippingCardView.tsx b/frontend/src/app/recollections/FlippingCardView.tsx new file mode 100644 index 0000000..3c93932 --- /dev/null +++ b/frontend/src/app/recollections/FlippingCardView.tsx @@ -0,0 +1,35 @@ +/** + * Flipping card container: Logos on the front, Flux on the back. + * Uses CSS 3D transform for a performant flip animation when switching via the menubar. + */ + +import React from 'react' +import { useLocation, useParams } from 'react-router-dom' +import { LogosPage } from './logos/LogosPage' +import { FluxRoute } from './flux/FluxRoute' + +export function FlippingCardView() { + const { pathname } = useLocation() + const { recollectionId } = useParams<{ recollectionId: string }>() + const isFlux = pathname.endsWith('/flux') + + return ( +
+
+
+ +
+
+ {recollectionId && } +
+
+
+ ) +} diff --git a/frontend/src/app/recollections/RecollectionLayout.tsx b/frontend/src/app/recollections/RecollectionLayout.tsx index dce0eba..34f9ef8 100644 --- a/frontend/src/app/recollections/RecollectionLayout.tsx +++ b/frontend/src/app/recollections/RecollectionLayout.tsx @@ -1,12 +1,13 @@ /** - * Layout for a single recollection: shared menubar (with optional custom content from active page) and outlet. + * Layout for a single recollection: shared menubar and flipping card (Logos front / Flux back). */ import React, { useEffect } from 'react' -import { Link, Outlet, useParams } from 'react-router-dom' +import { Link, useParams } from 'react-router-dom' import { usePlatform } from '@/app/kosmos/KosmosContext' import { RecollectionMenubarProvider } from './RecollectionMenubarContext' import { RecollectionMenubar } from './RecollectionMenubar' +import { FlippingCardView } from './FlippingCardView' export function RecollectionLayout() { const { recollectionId } = useParams<{ recollectionId: string }>() @@ -35,7 +36,7 @@ export function RecollectionLayout() {
- +
diff --git a/frontend/src/app/recollections/RecollectionMenubar.tsx b/frontend/src/app/recollections/RecollectionMenubar.tsx index 319bf22..6629545 100644 --- a/frontend/src/app/recollections/RecollectionMenubar.tsx +++ b/frontend/src/app/recollections/RecollectionMenubar.tsx @@ -3,7 +3,7 @@ */ import React from 'react' -import { Link, NavLink, useParams } from 'react-router-dom' +import { Link, NavLink, useParams, useLocation } from 'react-router-dom' import { usePlatform } from '@/app/kosmos/KosmosContext' import { ArrowLeft } from 'lucide-react' import { FluxIcon, LogosIcon } from '@/lib/icons' @@ -11,14 +11,17 @@ import { useRecollectionMenubar } from './RecollectionMenubarContext' export function RecollectionMenubar() { const { recollectionId } = useParams<{ recollectionId: string }>() + const { pathname } = useLocation() const { recollections } = usePlatform() const { customContent } = useRecollectionMenubar() + const isFlux = pathname.endsWith('/flux') const recollection = recollectionId ? recollections.find((p) => p.id === recollectionId) : null const base = recollectionId ? `/recollections/${recollectionId}` : '' const defaultMiddle = recollection ? ( {recollection.name} ) : null + const middleContent = isFlux ? (customContent ?? defaultMiddle) : defaultMiddle return (
@@ -30,7 +33,7 @@ export function RecollectionMenubar() {
- {customContent ?? defaultMiddle} + {middleContent}
{base && (