Compare commits
21 Commits
version_26
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 884911cbda | |||
|
|
8826f83bf2 | ||
| 31780164e7 | |||
|
|
a721f956f2 | ||
|
|
6bcf853ae9 | ||
| 8ff4b79a3a | |||
| 880bfc8721 | |||
| a904271708 | |||
| 431ae43bf5 | |||
| 3fe6520c1b | |||
| 7d6ee33171 | |||
| dc737bcd5d | |||
| b7a2e5d545 | |||
| 21ebeaf352 | |||
|
|
77e0e5e96d | ||
|
|
6873267e02 | ||
| b4f68e92c7 | |||
|
|
d8f3f2b4e2 | ||
|
|
7fdb84fdf5 | ||
| 26efa4420f | |||
| b1a7996407 |
@@ -3,12 +3,14 @@ import Layout from './components/Layout';
|
||||
import HomePage from './pages/HomePage';
|
||||
|
||||
import ProductsPage from "@/pages/ProductsPage";
|
||||
import FishingReelsPage from "@/pages/FishingReelsPage";
|
||||
export default function App() {
|
||||
return (
|
||||
<Routes>
|
||||
<Route element={<Layout />}>
|
||||
<Route path="/" element={<HomePage />} />
|
||||
<Route path="/products" element={<ProductsPage />} />
|
||||
<Route path="/fishing-reels" element={<FishingReelsPage />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
);
|
||||
|
||||
@@ -29,6 +29,8 @@ export default function Layout() {
|
||||
"name": "Brands", "href": "#brands"
|
||||
},
|
||||
{ name: "Products", href: "/products" },
|
||||
{ name: "Fishing Reels", href: "/fishing-reels" },
|
||||
|
||||
|
||||
];
|
||||
|
||||
|
||||
18
src/pages/FishingReelsPage.tsx
Normal file
18
src/pages/FishingReelsPage.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in the sibling sections/ folder (one file per section).
|
||||
// Edit those section files directly. Non-block content (wrappers,
|
||||
// non-inlinable sections) is preserved inline; extracted section blocks
|
||||
// become component refs.
|
||||
|
||||
import React from 'react';
|
||||
import HeroSplitSection from './FishingReelsPage/sections/HeroSplit';
|
||||
import ProductRatingCardsSection from './FishingReelsPage/sections/ProductRatingCards';
|
||||
|
||||
export default function FishingReelsPage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<HeroSplitSection />
|
||||
<ProductRatingCardsSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
15
src/pages/FishingReelsPage/sections/HeroSplit.tsx
Normal file
15
src/pages/FishingReelsPage/sections/HeroSplit.tsx
Normal file
@@ -0,0 +1,15 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "HeroSplit" section.
|
||||
|
||||
import React from 'react';
|
||||
import Button from "@/components/ui/Button";
|
||||
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
|
||||
export default function HeroSplitSection(): React.JSX.Element {
|
||||
return (
|
||||
<div data-webild-section="HeroSplit"><section aria-label="Hero section" className="relative flex items-center h-fit md:h-svh pt-25 pb-20 md:py-0"><HeroBackgroundSlot /><div className="flex flex-col md:flex-row items-center gap-12 md:gap-20 w-content-width mx-auto"><div className="w-full md:w-1/2"><div className="flex flex-col items-center md:items-start gap-3"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Premium Fishing Reels</p></div><TextAnimation text="Engineered for the Toughest Catch" variant="slide-up" gradientText={true} tag="h1" className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-left text-balance" /><TextAnimation text="Discover our rugged, high-performance fishing reels designed for marine professionals and serious anglers. Built to withstand saltwater and deliver unmatched reliability." variant="slide-up" gradientText={false} tag="p" className="md:max-w-8/10 text-lg md:text-xl leading-snug text-center md:text-left text-balance" /><div className="flex flex-wrap max-md:justify-center gap-3 mt-2 md:mt-3"><Button text="Shop Reels" href="#products" variant="primary" /><Button text="View Specs" href="#specifications" variant="secondary" animationDelay={0.1} /></div></div></div><ScrollReveal variant="fade-blur" delay={0.2} className="w-full md:w-1/2 h-100 md:h-[65vh] md:max-h-[75svh] p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden"><ImageOrVideo imageSrc="https://img.freepik.com/free-photo/close-up-fishing-rod-with-reel_23-2148813250.jpg" /></ScrollReveal></div></section></div>
|
||||
);
|
||||
}
|
||||
11
src/pages/FishingReelsPage/sections/ProductRatingCards.tsx
Normal file
11
src/pages/FishingReelsPage/sections/ProductRatingCards.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "ProductRatingCards" section.
|
||||
|
||||
import React from 'react';
|
||||
import { Star, Loader2 } from "lucide-react";
|
||||
|
||||
export default function ProductRatingCardsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div data-webild-section="ProductRatingCards"><section aria-label="Products section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
|
||||
);
|
||||
}
|
||||
@@ -7,4 +7,5 @@ export interface Route {
|
||||
export const routes: Route[] = [
|
||||
{ path: '/', label: 'Home', pageFile: 'HomePage' },
|
||||
{ path: '/products', label: 'Products', pageFile: 'ProductsPage' },
|
||||
{ path: '/fishing-reels', label: 'Fishing Reels', pageFile: 'FishingReelsPage' },
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user