diff --git a/apps/loopover-ui/src/components/site/breadcrumbs.tsx b/apps/loopover-ui/src/components/site/breadcrumbs.tsx deleted file mode 100644 index 255ba3cb0b..0000000000 --- a/apps/loopover-ui/src/components/site/breadcrumbs.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { Link } from "@tanstack/react-router"; -import { ChevronRight } from "lucide-react"; - -import { cn } from "@/lib/utils"; - -export interface Crumb { - to?: string; - label: string; -} - -/** - * Consistent breadcrumb rail used on /app, /docs, /api headers. - * The last crumb is always rendered as the current page (no link). - */ -export function Breadcrumbs({ items, className }: { items: Crumb[]; className?: string }) { - return ( - - ); -} diff --git a/apps/loopover-ui/src/components/site/scroll-flow.tsx b/apps/loopover-ui/src/components/site/scroll-flow.tsx deleted file mode 100644 index 50e9336448..0000000000 --- a/apps/loopover-ui/src/components/site/scroll-flow.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { motion } from "motion/react"; -import { useEffect, useRef, useState } from "react"; -import type { ReactNode } from "react"; - -import { cn } from "@/lib/utils"; - -export interface FlowStep { - k: string; - title: string; - body: string; - code?: string; - icon?: ReactNode; -} - -/** - * Vertical scroll-linked flow: as the user scrolls, the step closest to the - * viewport midline becomes the highlighted one. Static-export safe. - */ -export function ScrollFlow({ steps, className }: { steps: FlowStep[]; className?: string }) { - const [active, setActive] = useState(0); - const refs = useRef>([]); - - useEffect(() => { - const io = new IntersectionObserver( - (entries) => { - const visible = entries - .filter((e) => e.isIntersecting) - .sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0]; - if (visible) { - const idx = refs.current.findIndex((el) => el === visible.target); - if (idx >= 0) setActive(idx); - } - }, - { rootMargin: "-40% 0px -40% 0px", threshold: [0.25, 0.5, 0.75] }, - ); - refs.current.forEach((el) => el && io.observe(el)); - return () => io.disconnect(); - }, [steps.length]); - - return ( -
-
    - {steps.map((s, i) => ( -
  1. { - refs.current[i] = el; - }} - className="relative" - > - - {i + 1} - -

    - {s.title} -

    -

    {s.body}

    -
  2. - ))} -
- -
-
-
-
- - - step {active + 1} / {steps.length} - -
- - {steps[active].code ?? steps[active].body} - -
-
-
-
- ); -}