"use client" import * as React from "react" import { ListPageViewFrame } from "../ui/list-page-view-frame" import { DotPattern } from "../ui/dot-pattern" import { cn } from "../../lib/utils" export interface DedicatedSearchLandingTemplateProps { /** Page title — string or rich node (e.g. styled heading). */ title: React.ReactNode /** Primary search control (typically {@link DedicatedSearchUrlComposer}). */ composer: React.ReactNode /** Optional block below composer (e.g. {@link DedicatedSearchRecents}). */ trailing?: React.ReactNode /** Forwarded to {@link ListPageViewFrame}. */ maxWidthClassName?: string frameClassName?: string gutterClassName?: string } const DEFAULT_GUTTER = "mx-auto flex min-h-[min(72vh,36rem)] w-full min-w-0 flex-col justify-center gap-0 px-6 py-8 sm:px-8 sm:py-10 md:px-12 md:py-12 lg:px-16" /** Feather into page white / header so the hero never reads as a hard horizontal slab. */ const HERO_BACKDROP_MASK = "[mask-image:linear-gradient(to_bottom,transparent_0%,black_5%,black_95%,transparent_100%)] [-webkit-mask-image:linear-gradient(to_bottom,transparent_0%,black_5%,black_95%,transparent_100%)]" /** * Soft blurred blobs using only Ask Leo surface tints (`--leo-surface-tint-a|b` in `globals.css`). */ function DedicatedSearchLandingBackdrop() { return (
{/* Static dot field — same primitive as `AiThinkingOverlay` (no motion here). */}
) } /** * Centered dedicated-search landing — empty `?q=` shell (hero title + composer + optional trailing). */ export function DedicatedSearchLandingTemplate({ title, composer, trailing, maxWidthClassName = "max-w-5xl", frameClassName = "min-w-0", gutterClassName = DEFAULT_GUTTER, }: DedicatedSearchLandingTemplateProps) { return (
{typeof title === "string" ? (

{title}

) : ( title )}
{composer}
{trailing ?
{trailing}
: null}
) }