'use client'; import * as React from 'react'; import { m, Variants } from 'framer-motion'; import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay'; export interface ServicePanelData { id: string; title: string; icon: 'energy' | 'fiber' | 'hdd' | 'planning' | 'survey'; fullWidth?: boolean; lists: string[][]; } interface ServiceDetailGridProps { badge?: string; title?: string; descriptionParagraphs?: string[]; problemStatement?: { title: string; text: string; }; solutionStatement?: { title: string; text: string; }; panels: ServicePanelData[]; } const containerVariants: Variants = { hidden: { opacity: 0 }, visible: { opacity: 1, transition: { staggerChildren: 0.1, }, }, }; const itemVariants: Variants = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0, transition: { duration: 1.0, ease: [0.16, 1, 0.3, 1] } }, }; const Icons = { energy: ( ), fiber: ( ), hdd: ( ), planning: ( ), survey: ( ) }; export function ServiceDetailGrid({ badge, title, descriptionParagraphs, problemStatement, solutionStatement, panels }: ServiceDetailGridProps) { return ( {badge && {badge}} {title && ( {title} )} {descriptionParagraphs?.map((p, i) => { const parts = p.split('**'); if (parts.length > 1) { return ( {parts.map((part, j) => j % 2 === 1 ? {part} : part)} ); } return {p}; })} {(problemStatement || solutionStatement) && ( {problemStatement && ( {problemStatement.title} {problemStatement.text} )} {solutionStatement && ( {solutionStatement.title} {solutionStatement.text} )} )} {panels.map((panel, idx) => { const isFullWidth = panel.fullWidth; const number = String(idx + 1).padStart(2, '0'); return ( {/* Premium Watermark Number */} {number} {/* On a white card, a very subtle primary/grey shine works best */} {panel.title} {/* Glossy Icon Container */} {Icons[panel.icon]} {panel.lists.map((list, listIdx) => ( {list.map((item, itemIdx) => ( {item} ))} ))} ); })} ); }
{parts.map((part, j) => j % 2 === 1 ? {part} : part)}
{p}
{problemStatement.text}
{solutionStatement.text}