@olwiba/ui 0.2.12 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context/OlwibaUIContext.tsx","../src/primitives/Button.tsx","../src/primitives/Card.tsx","../src/primitives/Badge.tsx","../src/primitives/Input.tsx","../src/primitives/Textarea.tsx","../src/primitives/Checkbox.tsx","../src/primitives/Switch.tsx","../src/layout/Grid.tsx","../src/layout/Stack.tsx","../src/layout/Section.tsx","../src/layout/AppContent.tsx","../src/layout/AppGrid.tsx","../src/layout/PublicPageFrame.tsx","../src/app/AppShell.tsx","../src/app/AuthSection.tsx","../src/app/SettingsSection.tsx","../src/components/DataTable.tsx","../src/app/TeamMembersPanel.tsx","../src/app/BillingPanel.tsx","../src/app/OnboardingWizard.tsx","../src/app/EmptyState.tsx","../src/app/ErrorPage.tsx","../src/app/UpgradePrompt.tsx","../src/app/UpdateBanner.tsx","../src/motion/FadeIn.tsx","../src/marketing/SectionTitle.tsx","../src/marketing/section-spacing.ts","../src/components/PhoneFrame.tsx","../src/marketing/HeroSection.tsx","../src/components/FeatureCard.tsx","../src/mechanics/Carousel.tsx","../src/motion/StaggerChildren.tsx","../src/marketing/FeaturesSection.tsx","../src/marketing/GroupedFeaturesSection.tsx","../src/marketing/StepsSection.tsx","../src/marketing/TechStackSection.tsx","../src/marketing/FeatureMarqueeSection.tsx","../src/hooks/use-intersection-observer.ts","../src/marketing/CtaSection.tsx","../src/motion/AnimatedSwap.tsx","../src/components/PricingCard.tsx","../src/motion/CountdownTimer.tsx","../src/marketing/PricingSection.tsx","../src/components/TestimonialCard.tsx","../src/marketing/TestimonialsSection.tsx","../src/marketing/TeamSection.tsx","../src/marketing/FaqSection.tsx","../src/motion/CountUp.tsx","../src/marketing/StatsSection.tsx","../src/marketing/NewsletterSection.tsx","../src/marketing/ContactSection.tsx","../src/marketing/ComparisonSection.tsx","../src/marketing/QualificationSection.tsx","../src/marketing/Navbar.tsx","../src/marketing/Footer.tsx","../src/marketing/LogoStrip.tsx","../src/overlays/Underlay.tsx","../src/overlays/Overlay.tsx","../src/motion/AnimatedPill.tsx","../src/motion/PageTransition.tsx","../src/mechanics/Sortable.tsx","../src/components/Spotlight.tsx","../src/components/Dock.tsx","../src/components/ContextMenu.tsx","../src/components/ConfirmDialog.tsx","../src/components/RegisterHotkeys.tsx","../src/hooks/use-controlled-open.ts","../src/components/CommandMenu.tsx","../src/app/DataView.tsx","../src/components/Chart.tsx","../src/components/FileUpload.tsx","../src/components/Notify.tsx","../src/components/NotificationsPopover.tsx","../src/components/ActivityFeed.tsx","../src/components/AppScreen.tsx","../src/components/GlassCard.tsx","../src/components/StatCard.tsx","../src/components/ImageCard.tsx","../src/components/MediaCard.tsx","../src/components/ViewToggle.tsx","../src/components/FlowConnector.tsx","../src/components/FlowBracket.tsx","../src/components/Spinner.tsx","../src/components/PageHeader.tsx","../src/components/Suspensed.tsx","../src/components/ThemeSwitchMinimal.tsx","../src/components/ModeSwitchMinimal.tsx","../src/components/BrandColorSwitchMinimal.tsx","../src/components/ThemeColorUpdater.tsx","../src/components/VersionBanner.tsx","../src/components/DevBanner.tsx","../src/components/RootErrorFallback.tsx","../src/blog/PostCard.tsx","../src/blog/PostList.tsx","../src/blog/ChangelogCard.tsx","../src/blog/ChangelogList.tsx","../src/hooks/use-mounted.ts","../src/hooks/use-confirm.ts","../src/hooks/use-scrolled-past.ts","../src/hooks/use-copy-to-clipboard.ts","../src/hooks/use-debounce.ts","../src/hooks/use-local-storage.ts","../src/hooks/use-view-mode.ts","../src/hooks/use-media-query.ts","../src/hooks/use-pagination.ts"],"names":["React","React2","jsx","CNButton","React3","CNCard","CNBadge","React4","CNInput","React5","CNTextarea","React6","CNCheckbox","React7","CNSwitch","gapMap","spanMap","spacingMap","maxWidthMap","jsxs","cn","defaultRenderLink","Badge","React8","CardHeader","CardTitle","CardDescription","Fragment","CardContent","form","Checkbox","React9","React10","Label","Avatar","AvatarImage","AvatarFallback","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","React11","React12","Loader2","Button","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","React13","Card","Sparkles","React14","useUIVariant","ArrowRight","React15","ChevronLeft","ChevronRight","translateMap","React16","React17","React18","React19","Separator","Check","React21","React22","badge","React23","React24","defaults","React25","Mail","X","React26","speedDuration","React27","useRef","useEffect","React28","React29","React30","Search","React31","RadixContextMenu","React32","React33","React34","CommandDialog","CommandInput","CommandList","CommandEmpty","CommandSeparator","CommandGroup","CommandItem","React35","Tooltip","React36","FileIcon","CheckCircle2","AlertCircle","Inbox","blurClass","React37","React38","Spinner","React39","LayoutGrid","React40","Popover","PopoverTrigger","PopoverContent","React41","React42","AlertTriangle","formatDate","useState","React43","React44","React45","React46","React47","React48","React49"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useIsMobile, UIVariantProvider, type UIVariant } from '@olwiba/cn';\n\nexport type UIMode = 'default' | 'playful' | 'smooth';\n\ninterface OlwibaUIContextValue {\n isMobile: boolean;\n mode: UIMode;\n setMode: (mode: UIMode) => void;\n}\n\nconst OlwibaUIContext = React.createContext<OlwibaUIContextValue>({\n isMobile: false,\n mode: 'default',\n setMode: () => {},\n});\n\nexport interface OlwibaUIProviderProps {\n children: React.ReactNode;\n /**\n * Override the mobile detection. If omitted, uses useIsMobile() from @olwiba/cn\n * which detects based on a 768px viewport breakpoint.\n */\n isMobile?: boolean;\n /**\n * Global component mode. Primitives imported from @olwiba/ui will automatically\n * apply this mode unless overridden at the component level.\n *\n * - `'default'` — standard square shadcn/Radix appearance\n * - `'playful'` — slight rotation + offset drop shadow backdrop\n * - `'smooth'` — softer, larger border-radius across all components\n */\n mode?: UIMode;\n}\n\nexport function OlwibaUIProvider({ children, isMobile: isMobileProp, mode: initialMode = 'default' }: OlwibaUIProviderProps) {\n const detectedMobile = useIsMobile();\n const isMobile = isMobileProp ?? detectedMobile;\n const [mode, setMode] = React.useState<UIMode>(initialMode);\n\n const variant = mode !== 'default' ? (mode as UIVariant) : undefined;\n\n return (\n <OlwibaUIContext.Provider value={{ isMobile, mode, setMode }}>\n <UIVariantProvider mode={variant}>\n {children}\n </UIVariantProvider>\n </OlwibaUIContext.Provider>\n );\n}\n\nexport function useOlwibaUI() {\n return React.useContext(OlwibaUIContext);\n}\n\n/** Returns just the current UI mode from context. */\nexport function useUIMode(): UIMode {\n return React.useContext(OlwibaUIContext).mode;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Button as CNButton, type ButtonProps as CNButtonProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type ButtonProps = CNButtonProps;\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNButton mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nButton.displayName = 'Button';\n","'use client';\n\nimport * as React from 'react';\nimport {\n Card as CNCard, type CardProps as CNCardProps,\n CardHeader, CardTitle, CardDescription, CardContent, CardFooter,\n} from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type CardProps = CNCardProps;\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNCard mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nCard.displayName = 'Card';\n\n// Sub-components are pass-throughs — no mode logic needed.\nexport { CardHeader, CardTitle, CardDescription, CardContent, CardFooter };\n","'use client';\n\nimport * as React from 'react';\nimport { Badge as CNBadge, type BadgeProps as CNBadgeProps } from '@olwiba/cn';\n\n// Badge no longer supports mode — variant/size/disabled only.\nexport type BadgeProps = CNBadgeProps;\n\nexport function Badge(props: BadgeProps) {\n return <CNBadge {...props} />;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Input as CNInput, type InputProps as CNInputProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type InputProps = CNInputProps;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNInput mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nInput.displayName = 'Input';\n","'use client';\n\nimport * as React from 'react';\nimport { Textarea as CNTextarea, type TextareaProps as CNTextareaProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type TextareaProps = CNTextareaProps;\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNTextarea mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nTextarea.displayName = 'Textarea';\n","'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CNCheckbox, type CheckboxProps as CNCheckboxProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type CheckboxProps = CNCheckboxProps;\n\nexport const Checkbox = React.forwardRef<\n React.ElementRef<typeof CNCheckbox>,\n CheckboxProps\n>(({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNCheckbox mode={resolvedMode} {...props} ref={ref} />;\n});\nCheckbox.displayName = 'Checkbox';\n","'use client';\n\nimport * as React from 'react';\nimport { Switch as CNSwitch, type SwitchProps as CNSwitchProps } from '@olwiba/cn';\n\nexport type SwitchProps = CNSwitchProps & {\n mode?: 'default' | 'playful' | 'smooth';\n};\n\nexport const Switch = React.forwardRef<\n React.ElementRef<typeof CNSwitch>,\n SwitchProps\n>(({ mode: _mode, ...props }, ref) => {\n return <CNSwitch {...props} ref={ref} />;\n});\nSwitch.displayName = 'Switch';\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst colsMap: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n 12: 'grid-cols-12',\n}\n\nconst gapMap = {\n none: 'gap-0',\n xs: 'gap-2',\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n}\n\nconst spanMap: Record<number, string> = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n}\n\nconst rowSpanMap: Record<number, string> = {\n 1: 'row-span-1',\n 2: 'row-span-2',\n 3: 'row-span-3',\n 4: 'row-span-4',\n}\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: 1 | 2 | 3 | 4 | 5 | 6 | 12\n gap?: keyof typeof gapMap\n}\n\nexport function Grid({ columns = 3, gap = 'md', className, children, ...props }: GridProps) {\n return (\n <div className={cn('grid', colsMap[columns], gapMap[gap], className)} {...props}>\n {children}\n </div>\n )\n}\n\nexport interface GridItemProps extends React.HTMLAttributes<HTMLDivElement> {\n span?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n rowSpan?: 1 | 2 | 3 | 4\n}\n\nexport function GridItem({ span = 1, rowSpan, className, children, ...props }: GridItemProps) {\n return (\n <div\n className={cn(spanMap[span], rowSpan != null && rowSpanMap[rowSpan], className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst gapMap = {\n none: 'gap-0',\n xs: 'gap-2',\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n}\n\nconst alignMap = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n}\n\nconst justifyMap = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n}\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'col' | 'row'\n gap?: keyof typeof gapMap\n align?: keyof typeof alignMap\n justify?: keyof typeof justifyMap\n wrap?: boolean\n}\n\nexport function Stack({\n direction = 'col',\n gap = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n className,\n children,\n ...props\n}: StackProps) {\n return (\n <div\n className={cn(\n 'flex',\n direction === 'col' ? 'flex-col' : 'flex-row',\n gapMap[gap],\n alignMap[align],\n justifyMap[justify],\n wrap && 'flex-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst paddingMap = {\n none: '',\n sm: 'py-4',\n md: 'py-8',\n lg: 'py-16',\n}\n\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n title?: string\n description?: string\n padding?: keyof typeof paddingMap\n}\n\nexport function Section({ title, description, padding = 'md', className, children, ...props }: SectionProps) {\n return (\n <section className={cn('w-full', paddingMap[padding], className)} {...props}>\n {(title || description) && (\n <div className=\"mb-6\">\n {title && <h2 className=\"text-xl font-semibold text-foreground\">{title}</h2>}\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n )}\n {children}\n </section>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst spacingMap = {\n sm: 'space-y-4',\n md: 'space-y-6',\n lg: 'space-y-8',\n}\n\nconst maxWidthMap = {\n none: '',\n 'screen-lg': 'mx-auto max-w-screen-lg',\n 'screen-xl': 'mx-auto max-w-screen-xl',\n 'screen-2xl': 'mx-auto max-w-screen-2xl',\n}\n\nexport interface AppContentProps extends React.HTMLAttributes<HTMLDivElement> {\n spacing?: keyof typeof spacingMap\n maxWidth?: keyof typeof maxWidthMap\n}\n\nexport function AppContent({\n spacing = 'md',\n maxWidth = 'none',\n className,\n children,\n ...props\n}: AppContentProps) {\n return (\n <div className={cn('p-6', maxWidthMap[maxWidth], spacingMap[spacing], className)} {...props}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Responsive ramps per column count. Every ramp starts at a single column —\n * a card grid that stays multi-column on a phone is unreadable — and adds\n * columns at breakpoints wide enough to keep each card legible.\n *\n * Written out in full rather than composed, because Tailwind scans source for\n * complete class strings; a template literal like `xl:grid-cols-${n}` produces\n * nothing at build time.\n */\nconst columnsMap = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6',\n}\n\nconst gapMap = {\n none: 'gap-0',\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst spanMap = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'xl:col-span-4',\n full: 'col-span-full',\n}\n\nexport type AppGridColumns = keyof typeof columnsMap\n\nexport interface AppGridProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Columns at the widest breakpoint. Narrower screens step down through the\n * ramp automatically, so this is \"how dense at full width\", not a fixed\n * count. Default 3.\n */\n columns?: AppGridColumns\n gap?: keyof typeof gapMap\n}\n\nexport function AppGrid({ columns = 3, gap = 'md', className, children, ...props }: AppGridProps) {\n return (\n <div className={cn('grid', columnsMap[columns], gapMap[gap], className)} {...props}>\n {children}\n </div>\n )\n}\n\nexport interface AppGridCellProps extends React.HTMLAttributes<HTMLDivElement> {\n span?: keyof typeof spanMap\n}\n\nexport function AppGridCell({ span = 1, className, children, ...props }: AppGridCellProps) {\n return (\n <div className={cn(spanMap[span], className)} {...props}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst surfaceMap = {\n default: 'bg-background',\n muted: 'bg-muted/50',\n}\n\nconst spacingMap = {\n sm: 'gap-4 p-4',\n md: 'gap-5 p-4 sm:gap-6 sm:p-6',\n lg: 'gap-6 p-4 sm:gap-8 sm:p-6',\n}\n\nconst maxWidthMap = {\n none: '',\n 'screen-xl': 'mx-auto max-w-screen-xl',\n 'screen-2xl': 'mx-auto max-w-screen-2xl',\n}\n\nexport interface PublicPageFrameProps extends React.HTMLAttributes<HTMLDivElement> {\n surface?: keyof typeof surfaceMap\n spacing?: keyof typeof spacingMap\n maxWidth?: keyof typeof maxWidthMap\n}\n\nexport function PublicPageFrame({\n surface = 'muted',\n spacing = 'md',\n maxWidth = 'none',\n className,\n children,\n ...props\n}: PublicPageFrameProps) {\n return (\n <div className={cn('min-h-screen', surfaceMap[surface], className)} {...props}>\n <div className={cn('flex flex-col', spacingMap[spacing], maxWidthMap[maxWidth])}>\n {children}\n </div>\n </div>\n )\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport {\n BellIcon,\n CreditCardIcon,\n LogOutIcon,\n MoreVerticalIcon,\n PlusCircleIcon,\n} from 'lucide-react';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n cn,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Separator,\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n useSidebar,\n} from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface AppNavItem {\n icon: LucideIcon;\n label: string;\n href: string;\n isActive?: boolean;\n}\n\nexport interface AppShellAction {\n icon?: LucideIcon;\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface AppShellUser {\n email: string;\n name?: string;\n avatar?: string;\n /** Displayed as a sub-label (e.g. plan tier). */\n plan?: string;\n onSignOut?: () => void;\n onBilling?: () => void;\n onNotifications?: () => void;\n}\n\nexport interface AppShellBrand {\n name: ReactNode;\n logo?: ReactNode;\n href?: string;\n}\n\n/**\n * Render a navigation link. Override to integrate your router's Link component.\n * @example renderLink={({ href, children }) => <Link to={href}>{children}</Link>}\n */\nexport type AppShellRenderLink = (props: {\n href: string;\n children: ReactNode;\n className?: string;\n}) => ReactNode;\n\nexport interface AppShellProps {\n brand?: AppShellBrand;\n navItems?: AppNavItem[];\n /** Primary CTA rendered above nav (e.g. \"New project\", \"Quick create\") */\n action?: AppShellAction;\n user?: AppShellUser;\n /** Text shown in the top header bar */\n pageTitle?: string;\n /** Slot rendered at the start of the top header bar, after the sidebar trigger. */\n headerStart?: ReactNode;\n /** Slot rendered at the end of the top header bar. */\n headerEnd?: ReactNode;\n /** Override link rendering for SPA navigation. Defaults to a native <a>. */\n renderLink?: AppShellRenderLink;\n children?: ReactNode;\n /**\n * Sidebar collapse behaviour.\n * - `\"icon\"` — collapses to a narrow icon rail (default, recommended for desktop)\n * - `\"offcanvas\"` — slides off-screen as a drawer overlay\n * - `\"none\"` — always fully visible\n */\n collapsible?: 'icon' | 'offcanvas' | 'none';\n /**\n * Layout scope.\n * - `\"viewport\"` (default) — fills the full browser viewport; use for top-level app shells.\n * - `\"contained\"` — fills its parent container; use in docs sandboxes, modals, or embedded previews.\n */\n sidebarPosition?: 'viewport' | 'contained';\n /** Which side the sidebar sits on. @default \"left\" */\n side?: 'left' | 'right';\n /**\n * Class applied to the content wrapper around `children`, between the\n * header and the page content. Every consuming page otherwise has to\n * remember its own padding — some do, some don't, and the ones that don't\n * end up flush against the sidebar/header chrome. Override to `''` for a\n * genuinely edge-to-edge page (a full-width table, a map/canvas).\n * @default \"p-6\"\n */\n contentClassName?: string;\n}\n\n// ─── Internal sub-components ──────────────────────────────────────────────────\n\n/**\n * Shared by the two `size=\"lg\"` buttons that bookend the sidebar (brand, user).\n * Both hold a 32px square — a logo badge, an avatar — so in the collapsed rail\n * they shrink to exactly that instead of the size's default 48px.\n *\n * `transition-[width,height]` drops `padding` from the transition while\n * collapsed, and is load-bearing: the base variant animates padding, but\n * `!max-w-8` clamps the button to 32px instantly (max-width isn't\n * transitionable), so a padding still animating 16px→0 leaves a 0px-wide\n * content box on the first frame and `overflow-hidden` clips the corner off\n * the 32px badge for the whole 150ms. Snapping padding makes it fit from frame\n * one. Expanding is deliberately left on the base transition — there width and\n * padding animate together and the content box never drops below 32px.\n */\nconst RAIL_SQUARE =\n 'group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!min-w-8 group-data-[collapsible=icon]:!max-w-8 group-data-[collapsible=icon]:!p-0 group-data-[collapsible=icon]:transition-[width,height]';\n\nfunction NavUser({ user }: { user: AppShellUser }) {\n const { isMobile } = useSidebar();\n const uiMode = useUIMode();\n const avatarMode = uiMode !== 'default' ? (uiMode as 'playful' | 'smooth') : undefined;\n const initials = (user.name ?? user.email).slice(0, 2).toUpperCase();\n\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n // Collapsed, this is a bare avatar with no affordance saying it\n // opens anything — every other item in the rail has a tooltip,\n // so its absence reads as \"not a button\".\n tooltip={user.name ?? user.email}\n className={cn(\n 'data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground',\n RAIL_SQUARE,\n )}\n >\n <Avatar mode={avatarMode} size=\"sm\" className=\"grayscale\">\n {user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">{user.name ?? user.email}</span>\n <span className=\"truncate text-xs text-muted-foreground\">\n {user.plan ? `${user.plan} plan` : user.email}\n </span>\n </div>\n <MoreVerticalIcon className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg\"\n side={isMobile ? 'bottom' : 'right'}\n align=\"end\"\n sideOffset={4}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <Avatar mode={avatarMode} size=\"sm\">\n {user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">{user.name ?? user.email}</span>\n <span className=\"truncate text-xs text-muted-foreground\">{user.email}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n {(user.onBilling || user.onNotifications) && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n {user.onBilling && (\n <DropdownMenuItem onClick={user.onBilling}>\n <CreditCardIcon />\n Billing\n </DropdownMenuItem>\n )}\n {user.onNotifications && (\n <DropdownMenuItem onClick={user.onNotifications}>\n <BellIcon />\n Notifications\n </DropdownMenuItem>\n )}\n </DropdownMenuGroup>\n </>\n )}\n {user.onSignOut && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={user.onSignOut}>\n <LogOutIcon />\n Sign out\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n );\n}\n\nfunction ShellSidebar({\n brand,\n navItems,\n action,\n user,\n renderLink,\n collapsible,\n side,\n sidebarPosition,\n}: {\n brand: AppShellBrand;\n navItems: AppNavItem[];\n action?: AppShellAction;\n user: AppShellUser;\n renderLink: AppShellRenderLink;\n collapsible: 'icon' | 'offcanvas' | 'none';\n side: 'left' | 'right';\n sidebarPosition: 'viewport' | 'contained';\n}) {\n const fallbackLogo = typeof brand.name === 'string' ? brand.name.slice(0, 1).toUpperCase() : null;\n\n return (\n <Sidebar side={side} collapsible={collapsible} sidebarPosition={sidebarPosition}>\n <SidebarHeader className=\"py-3\">\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton\n asChild\n size=\"lg\"\n // No tooltip: unlike a nav item, the collapsed rail's logo is\n // still the logo — a hover label repeating the app's own name\n // is noise. Nav items keep theirs because a bare icon doesn't\n // say where it goes.\n className={RAIL_SQUARE}\n >\n {renderLink({\n href: brand.href ?? '#',\n children: (\n <>\n {brand.logo ? (\n // Neutral slot: the consumer's logo owns its own chrome\n // (background, radius). Sized to fill the collapsed icon rail.\n <span className=\"flex size-8 shrink-0 items-center justify-center [&>svg]:size-5\">\n {brand.logo}\n </span>\n ) : (\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary text-sm font-semibold text-primary-foreground\">\n {fallbackLogo}\n </span>\n )}\n <span className=\"min-w-0 truncate text-base font-semibold group-data-[collapsible=icon]:hidden\">\n {brand.name}\n </span>\n </>\n ),\n })}\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupContent className=\"flex flex-col gap-2\">\n {action && (\n <SidebarMenu>\n <SidebarMenuItem>\n {action.href ? (\n <SidebarMenuButton\n asChild\n tooltip={action.label}\n className=\"min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground\"\n >\n {renderLink({\n href: action.href,\n children: (\n <>\n {action.icon && <action.icon />}\n <span>{action.label}</span>\n </>\n ),\n })}\n </SidebarMenuButton>\n ) : (\n <SidebarMenuButton\n tooltip={action.label}\n onClick={action.onClick}\n className=\"min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground\"\n >\n {action.icon && <action.icon />}\n <span>{action.label}</span>\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n </SidebarMenu>\n )}\n\n <SidebarMenu>\n {navItems.map((item) => (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton asChild tooltip={item.label} isActive={item.isActive}>\n {renderLink({\n href: item.href,\n children: (\n <>\n <item.icon />\n <span>{item.label}</span>\n </>\n ),\n })}\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n\n <SidebarFooter>\n <NavUser user={user} />\n </SidebarFooter>\n </Sidebar>\n );\n}\n\nfunction ShellHeader({\n pageTitle,\n headerStart,\n headerEnd,\n}: {\n pageTitle: string;\n headerStart?: ReactNode;\n headerEnd?: ReactNode;\n}) {\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n <div className=\"flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6\">\n <SidebarTrigger className=\"-ml-1\" />\n {headerStart && (\n <div className=\"flex items-center gap-1\">\n {headerStart}\n </div>\n )}\n <Separator orientation=\"vertical\" className=\"mx-2 data-[orientation=vertical]:h-4\" />\n <h1 className=\"text-base font-medium\">{pageTitle}</h1>\n {headerEnd && (\n <div className=\"ml-auto flex items-center gap-1\">\n {headerEnd}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n// ─── Default placeholder values (keeps the shell renderable without required props) ─\n\nconst defaultBrand: AppShellBrand = {\n name: 'App',\n href: '#',\n};\n\nconst defaultUser: AppShellUser = {\n name: 'User',\n email: 'user@example.com',\n};\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\n// ─── Main export ──────────────────────────────────────────────────────────────\n\nexport function AppShell({\n brand = defaultBrand,\n navItems = [],\n action,\n user = defaultUser,\n pageTitle = 'Dashboard',\n headerStart,\n headerEnd,\n renderLink = defaultRenderLink,\n collapsible = 'icon',\n sidebarPosition = 'viewport',\n side = 'left',\n contentClassName = 'p-6',\n children,\n}: AppShellProps = {}) {\n const isContained = sidebarPosition === 'contained';\n\n const inner = (\n <SidebarProvider\n layout={isContained ? 'embedded' : 'viewport'}\n className={isContained ? 'overflow-hidden' : 'h-svh overflow-hidden'}\n >\n <ShellSidebar\n brand={brand}\n navItems={navItems}\n action={action}\n user={user}\n renderLink={renderLink}\n collapsible={collapsible}\n side={side}\n sidebarPosition={sidebarPosition}\n />\n <SidebarInset className={isContained ? undefined : 'overflow-y-auto'}>\n <ShellHeader pageTitle={pageTitle} headerStart={headerStart} headerEnd={headerEnd} />\n <div className={contentClassName}>{children}</div>\n </SidebarInset>\n </SidebarProvider>\n );\n\n if (isContained) {\n return (\n <div className=\"relative flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden\">\n {inner}\n </div>\n );\n }\n\n return inner;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Building2, Loader2, ShieldCheck, Sparkles } from 'lucide-react';\nimport {\n Badge,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n Label,\n cn,\n} from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { Card } from '../primitives/Card';\nimport { Input } from '../primitives/Input';\nimport type { AppShellRenderLink } from './AppShell';\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\n// ─── Centered layout ──────────────────────────────────────────────────────────\n\nfunction CenteredAuth({ children, brand, className }: { children: React.ReactNode; brand?: React.ReactNode; className?: string }) {\n return (\n // `min-h-dvh`, not `min-h-screen`: on mobile `100vh` is the viewport with\n // the browser chrome *retracted*, so a screen-height box is always taller\n // than what you can actually see, and it resizes under you as the URL bar\n // hides and shows.\n <section className={cn('flex min-h-dvh flex-col bg-background px-4 py-10 sm:px-6 sm:py-12 lg:px-8', className)}>\n {/*\n Auto margins rather than `justify-center`, and only from `sm` up.\n\n A flex item centred with `justify-center` that's taller than its\n container overflows in *both* directions, and the overflow above the\n top edge is unreachable — no scrolling gets you back to it. That's the\n sign-up form on a phone: name, email, password and social buttons\n already run long, and focusing a field drops the keyboard over half\n the viewport. The top of the card, title included, becomes\n unscrollable.\n\n Auto margins collapse to zero when there's no free space, so the card\n stays reachable. Below `sm` there's no vertical centring at all — the\n form flows from the top like the contact page.\n */}\n <div className=\"mx-auto w-full max-w-md sm:my-auto\">\n {brand && <div className=\"mb-8 text-center\">{brand}</div>}\n {children}\n </div>\n </section>\n );\n}\n\n// ─── Split layout ─────────────────────────────────────────────────────────────\n\nfunction SplitAuth({ children, panel }: { children: React.ReactNode; panel?: React.ReactNode }) {\n const defaultPanel = (\n <div className=\"flex flex-col gap-6\">\n <Badge variant=\"secondary\" className=\"w-fit\">Welcome</Badge>\n <div className=\"space-y-3\">\n <h2 className=\"text-3xl font-semibold tracking-tight\">Build better, ship faster</h2>\n <p className=\"max-w-md text-muted-foreground\">\n Sign in to continue building with ready-made components and layouts.\n </p>\n </div>\n <div className=\"space-y-3 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2\"><ShieldCheck className=\"size-4\" /> Type-safe components</div>\n <div className=\"flex items-center gap-2\"><Sparkles className=\"size-4\" /> Polished defaults</div>\n <div className=\"flex items-center gap-2\"><Building2 className=\"size-4\" /> Plug-and-play shells</div>\n </div>\n </div>\n );\n\n return (\n <section className=\"grid h-full min-h-[560px] overflow-hidden rounded-2xl border bg-card lg:grid-cols-2\">\n <div className=\"relative hidden p-8 pb-16 lg:flex lg:flex-col lg:justify-center\">\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/20 via-transparent to-muted\" />\n <div className=\"relative z-10\">{panel ?? defaultPanel}</div>\n </div>\n <div className=\"flex items-center justify-center p-6 lg:p-10\">\n {children}\n </div>\n </section>\n );\n}\n\n// ─── Shared form slot ─────────────────────────────────────────────────────────\n\nexport interface AuthFormProps {\n /**\n * Controls form title, fields, and footer text.\n * - `'signin'` / `'signup'` — email + password\n * - `'forgot-password'` — email only, sends a reset link\n * - `'reset-password'` — new password + confirmation\n * - `'verify'` — one-time code entry (email verification or 2FA)\n * @default 'signin'\n */\n mode?: 'signin' | 'signup' | 'forgot-password' | 'reset-password' | 'verify';\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n onSso?: () => void;\n /** (signin) Link to the sign-up page */\n signUpHref?: string;\n /** (signup / forgot-password / reset-password / verify) Link back to the sign-in page */\n signInHref?: string;\n forgotPasswordHref?: string;\n /** (verify) Re-sends the one-time code */\n onResend?: () => void;\n /** (verify) Address the code was sent to, shown in the description */\n destination?: string;\n /** (verify) Number of digits in the code. @default 6 */\n codeLength?: number;\n /** Brand node — in centered layout renders above the card; in split layout renders inside the card */\n brand?: React.ReactNode;\n /** Error message displayed below the form fields */\n error?: string;\n /** Positive confirmation message displayed below the form fields (e.g. \"Reset link sent\") */\n success?: string;\n /** Disables the submit button and shows a loading label */\n loading?: boolean;\n /** Render prop for links — use to inject framework-native link components (e.g. TanStack Router Link) */\n renderLink?: AppShellRenderLink;\n /** Optional content rendered below the form — use for social auth buttons or other additions */\n footer?: React.ReactNode;\n /** Pre-fill the email field (e.g. from demo credential links). Triggers a brief border highlight animation. */\n defaultEmail?: string;\n /** Pre-fill the password field (e.g. from demo credential links). Triggers a brief border highlight animation. */\n defaultPassword?: string;\n}\n\nconst authCopy = {\n signin: { title: 'Sign in', description: 'Enter your email and password to continue.', submit: 'Sign in' },\n signup: { title: 'Create an account', description: 'Enter your details to create your account.', submit: 'Create account' },\n 'forgot-password': { title: 'Reset your password', description: 'Enter the email on your account and we’ll send you a link to reset your password.', submit: 'Send reset link' },\n 'reset-password': { title: 'Choose a new password', description: 'Your new password must be different from previous passwords.', submit: 'Reset password' },\n verify: { title: 'Enter your code', description: 'We sent a verification code to your email.', submit: 'Verify' },\n} as const;\n\nfunction DefaultForm({\n mode = 'signin',\n onSubmit,\n onSso,\n signUpHref = '#',\n signInHref = '#',\n forgotPasswordHref = '#',\n onResend,\n destination,\n codeLength = 6,\n brand,\n error,\n success,\n loading,\n renderLink = defaultRenderLink,\n footer,\n defaultEmail,\n defaultPassword,\n}: AuthFormProps) {\n const isSignUp = mode === 'signup';\n const isForgotPassword = mode === 'forgot-password';\n const isResetPassword = mode === 'reset-password';\n const isVerify = mode === 'verify';\n const [code, setCode] = React.useState('');\n const hasPrefill = !!(defaultEmail || defaultPassword);\n const prefillStyle = (active: boolean): React.CSSProperties | undefined =>\n active ? { animation: 'auth-prefill 1.6s ease-out 0.35s 1 both' } : undefined;\n const copy = authCopy[mode];\n\n return (\n <Card className=\"w-full\">\n {hasPrefill && (\n // Theme tokens hold full color values (oklch), so opacity must come from color-mix, not hsl(var()/a)\n <style>{`@keyframes auth-prefill{0%{box-shadow:0 0 0 0 transparent}40%{box-shadow:0 0 0 3px color-mix(in oklab,var(--primary) 45%,transparent),0 0 16px 2px color-mix(in oklab,var(--primary) 35%,transparent)}100%{box-shadow:0 0 0 0 transparent}}`}</style>\n )}\n <CardHeader>\n {brand && <div className=\"mb-2\">{brand}</div>}\n <CardTitle>{copy.title}</CardTitle>\n <CardDescription>\n {isVerify && destination ? (\n <>We sent a verification code to <span className=\"font-medium text-foreground\">{destination}</span>.</>\n ) : copy.description}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n {isSignUp && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-name\">Name</Label>\n <Input id=\"auth-name\" name=\"name\" type=\"text\" placeholder=\"Your name\" autoComplete=\"name\" />\n </div>\n )}\n\n {(mode === 'signin' || mode === 'signup' || isForgotPassword) && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-email\">Email address</Label>\n <Input\n id=\"auth-email\"\n name=\"email\"\n type=\"email\"\n placeholder=\"name@company.com\"\n autoComplete=\"email\"\n defaultValue={defaultEmail}\n style={prefillStyle(!!defaultEmail)}\n />\n </div>\n )}\n\n {(mode === 'signin' || mode === 'signup') && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"auth-password\">Password</Label>\n {!isSignUp && forgotPasswordHref && renderLink({\n href: forgotPasswordHref,\n className: 'text-xs text-muted-foreground underline underline-offset-4 hover:text-foreground',\n children: 'Forgot password?',\n })}\n </div>\n <Input\n id=\"auth-password\"\n name=\"password\"\n type=\"password\"\n placeholder=\"••••••••\"\n autoComplete={isSignUp ? 'new-password' : 'current-password'}\n defaultValue={defaultPassword}\n style={prefillStyle(!!defaultPassword)}\n />\n </div>\n )}\n\n {isResetPassword && (\n <>\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-new-password\">New password</Label>\n <Input id=\"auth-new-password\" name=\"password\" type=\"password\" placeholder=\"••••••••\" autoComplete=\"new-password\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-confirm-password\">Confirm password</Label>\n <Input id=\"auth-confirm-password\" name=\"confirmPassword\" type=\"password\" placeholder=\"••••••••\" autoComplete=\"new-password\" />\n </div>\n </>\n )}\n\n {isVerify && (\n <div className=\"space-y-2\">\n <input type=\"hidden\" name=\"code\" value={code} />\n <div className=\"flex justify-center py-2\">\n <InputOTP maxLength={codeLength} value={code} onChange={setCode} containerClassName=\"justify-center\">\n <InputOTPGroup>\n {Array.from({ length: codeLength }).map((_, i) => (\n <InputOTPSlot key={i} index={i} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n </div>\n </div>\n )}\n\n {error && (\n <p role=\"alert\" className=\"text-sm font-medium text-destructive\">{error}</p>\n )}\n {success && (\n <p role=\"status\" className=\"text-sm font-medium text-primary\">{success}</p>\n )}\n\n <div className=\"flex flex-col gap-2\">\n <Button type=\"submit\" className=\"w-full\" disabled={loading || (isVerify && code.length < codeLength)}>\n {loading && <Loader2 className=\"size-4 animate-spin\" />}\n {loading ? 'Please wait…' : copy.submit}\n </Button>\n {onSso && (mode === 'signin' || mode === 'signup') && (\n <Button type=\"button\" variant=\"outline\" className=\"w-full\" onClick={onSso} disabled={loading}>\n Use SSO\n </Button>\n )}\n </div>\n </form>\n\n {isVerify && onResend && (\n <p className=\"text-center text-xs text-muted-foreground\">\n Didn&rsquo;t get a code?{' '}\n <button type=\"button\" onClick={onResend} className=\"text-foreground underline underline-offset-4\">\n Resend\n </button>\n </p>\n )}\n\n {(mode === 'signin' || mode === 'signup') && (\n <p className=\"text-center text-xs text-muted-foreground\">\n {isSignUp ? (\n <>\n Already have an account?{' '}\n {renderLink({ href: signInHref, className: 'text-foreground underline underline-offset-4', children: 'Sign in' })}\n </>\n ) : (\n signUpHref && (\n <>\n New here?{' '}\n {renderLink({ href: signUpHref, className: 'text-foreground underline underline-offset-4', children: 'Create an account' })}\n </>\n )\n )}\n </p>\n )}\n\n {(isForgotPassword || isResetPassword || isVerify) && (\n <p className=\"text-center text-xs text-muted-foreground\">\n {renderLink({ href: signInHref, className: 'text-foreground underline underline-offset-4', children: 'Back to sign in' })}\n </p>\n )}\n\n {footer && <div>{footer}</div>}\n </CardContent>\n </Card>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport interface AuthSectionProps extends AuthFormProps {\n /** Visual layout of the auth screen. @default 'centered' */\n layout?: 'centered' | 'split';\n /** Custom form/card content. Defaults to the built-in form. */\n children?: React.ReactNode;\n /** (split layout only) Custom content for the left decorative panel */\n panel?: React.ReactNode;\n className?: string;\n}\n\nexport function AuthSection({\n layout = 'centered',\n children,\n panel,\n className,\n ...formProps\n}: AuthSectionProps) {\n if (layout === 'split') {\n const form = children ?? <DefaultForm {...formProps} />;\n return (\n <div className={cn('h-full', className)}>\n <SplitAuth panel={panel}>{form}</SplitAuth>\n </div>\n );\n }\n\n // Centered: brand renders above the card, not inside it\n const { brand, ...restFormProps } = formProps;\n const form = children ?? <DefaultForm {...restFormProps} />;\n return (\n <CenteredAuth brand={brand} className={className}>\n {form}\n </CenteredAuth>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface SettingsSectionProps {\n title: string;\n description?: string;\n /** Form fields, buttons, or any content for the right-hand column — e.g. a `<form>`. */\n children: React.ReactNode;\n /** Marks the section as a destructive action (e.g. \"Delete account\") — renders the title in the destructive color. @default false */\n danger?: boolean;\n className?: string;\n}\n\n/**\n * One title+description+content row for a settings page. Stack a few inside\n * a `<div className=\"divide-y divide-border\">` to build a full settings\n * page — one block reused per row, rather than a bespoke layout each time.\n */\nexport function SettingsSection({ title, description, children, danger = false, className }: SettingsSectionProps) {\n return (\n <div className={cn('grid grid-cols-1 gap-x-8 gap-y-6 py-10 sm:grid-cols-3', className)}>\n <div>\n <h2 className={cn('text-base font-semibold', danger && 'text-destructive')}>{title}</h2>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n <div className=\"sm:col-span-2\">{children}</div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n type ColumnDef,\n type SortingState,\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight, Search } from 'lucide-react';\nimport { Checkbox, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\n\nexport interface DataTableProps<TData> {\n columns: ColumnDef<TData>[];\n data: TData[];\n /** Shows a quick-filter input above the table, matching against `searchKey`. */\n searchKey?: string;\n searchPlaceholder?: string;\n /** Adds a checkbox column and reports the selected rows. */\n selectable?: boolean;\n onSelectionChange?: (rows: TData[]) => void;\n /** Rows per page. Set to `0` to disable pagination entirely. @default 10 */\n pageSize?: number;\n /** Slot rendered top-right of the toolbar — e.g. an \"Add\" button. */\n toolbar?: React.ReactNode;\n onRowClick?: (row: TData) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst selectColumn: ColumnDef<Record<string, unknown>> = {\n id: '__select',\n header: ({ table }) => (\n <Checkbox\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n ),\n enableSorting: false,\n};\n\n/**\n * Sortable, paginated, optionally-selectable data table. One component —\n * toggle `searchKey`/`selectable`/`pageSize` rather than reaching for a\n * different table component per use case.\n */\nexport function DataTable<TData>({\n columns,\n data,\n searchKey,\n searchPlaceholder = 'Search…',\n selectable = false,\n onSelectionChange,\n pageSize = 10,\n toolbar,\n onRowClick,\n emptyMessage = 'No results.',\n className,\n}: DataTableProps<TData>) {\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [rowSelection, setRowSelection] = React.useState({});\n const [globalFilter, setGlobalFilter] = React.useState('');\n\n const allColumns = React.useMemo(\n () => (selectable ? [selectColumn as ColumnDef<TData>, ...columns] : columns),\n [selectable, columns],\n );\n\n const table = useReactTable({\n data,\n columns: allColumns,\n state: { sorting, rowSelection, globalFilter },\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onGlobalFilterChange: setGlobalFilter,\n globalFilterFn: (row, _columnId, filterValue) => {\n if (!searchKey) return true;\n const value = row.getValue(searchKey);\n return String(value ?? '').toLowerCase().includes(String(filterValue).toLowerCase());\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n ...(pageSize > 0 ? { getPaginationRowModel: getPaginationRowModel() } : {}),\n initialState: pageSize > 0 ? { pagination: { pageSize } } : undefined,\n enableRowSelection: selectable,\n });\n\n React.useEffect(() => {\n if (!onSelectionChange) return;\n onSelectionChange(table.getSelectedRowModel().rows.map((r) => r.original));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rowSelection]);\n\n const rows = table.getRowModel().rows;\n\n return (\n <div className={cn('space-y-4', className)}>\n {(searchKey || toolbar) && (\n <div className=\"flex items-center justify-between gap-4\">\n {searchKey ? (\n <div className=\"relative max-w-sm flex-1\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={globalFilter}\n onChange={(e) => setGlobalFilter(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-8\"\n />\n </div>\n ) : <div />}\n {toolbar}\n </div>\n )}\n\n <div className=\"overflow-hidden rounded-lg border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const canSort = header.column.getCanSort();\n const sortDir = header.column.getIsSorted();\n return (\n <TableHead\n key={header.id}\n aria-sort={sortDir === 'asc' ? 'ascending' : sortDir === 'desc' ? 'descending' : canSort ? 'none' : undefined}\n >\n {header.isPlaceholder ? null : canSort ? (\n <button\n type=\"button\"\n className=\"flex items-center gap-1.5 font-medium hover:text-foreground\"\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? <ArrowUp className=\"size-3.5\" /> : sortDir === 'desc' ? <ArrowDown className=\"size-3.5\" /> : <ArrowUpDown className=\"size-3.5 text-muted-foreground/50\" />}\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {rows.length ? (\n rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() ? 'selected' : undefined}\n onClick={() => onRowClick?.(row.original)}\n tabIndex={onRowClick ? 0 : undefined}\n onKeyDown={onRowClick ? (e) => {\n if (e.key === 'Enter' && e.target === e.currentTarget) onRowClick(row.original);\n } : undefined}\n className={cn(onRowClick && 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring')}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={allColumns.length} className=\"h-24 text-center text-muted-foreground\">\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {(selectable || (pageSize > 0 && table.getPageCount() > 1)) && (\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n {selectable && `${table.getFilteredSelectedRowModel().rows.length} of ${table.getFilteredRowModel().rows.length} selected`}\n {selectable && pageSize > 0 && table.getPageCount() > 1 && ' · '}\n {pageSize > 0 && table.getPageCount() > 1 && `Page ${table.getState().pagination.pageIndex + 1} of ${table.getPageCount()}`}\n </p>\n {pageSize > 0 && table.getPageCount() > 1 && (\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>\n <ChevronLeft className=\"size-4\" /> Previous\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport type { ColumnDef as DataTableColumn };\n","'use client';\n\nimport * as React from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { MoreHorizontal, UserPlus } from 'lucide-react';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Badge,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Dialog,\n} from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\nimport { DataTable } from '../components/DataTable';\n\nexport interface TeamMemberRecord {\n id: string;\n name: string;\n email: string;\n avatar?: string;\n role: string;\n}\n\nexport interface TeamMembersPanelProps {\n members: TeamMemberRecord[];\n /** Roles offered in the invite dialog and the per-row role menu. @default ['Owner', 'Admin', 'Member'] */\n roles?: string[];\n onInvite?: (email: string, role: string) => void;\n onRoleChange?: (memberId: string, role: string) => void;\n onRemove?: (memberId: string) => void;\n title?: string;\n description?: string;\n}\n\nfunction InviteDialog({ roles, onInvite, onClose }: { roles: string[]; onInvite?: (email: string, role: string) => void; onClose: () => void }) {\n const [email, setEmail] = React.useState('');\n const [role, setRole] = React.useState(roles[roles.length - 1] ?? roles[0]);\n\n return (\n <DialogContent>\n <form\n onSubmit={(e) => {\n e.preventDefault();\n onInvite?.(email, role);\n onClose();\n }}\n >\n <DialogHeader>\n <DialogTitle>Invite a team member</DialogTitle>\n <DialogDescription>They&rsquo;ll get an email invite to join this workspace.</DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"invite-email\">Email address</Label>\n <Input id=\"invite-email\" type=\"email\" required placeholder=\"name@company.com\" value={email} onChange={(e) => setEmail(e.target.value)} />\n </div>\n <div className=\"space-y-2\">\n <Label>Role</Label>\n <Select value={role} onValueChange={setRole}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {roles.map((r) => <SelectItem key={r} value={r}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n </div>\n <DialogFooter>\n <DialogClose asChild>\n <Button type=\"button\" variant=\"outline\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Send invite</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n );\n}\n\n/**\n * Member list with role management and an invite dialog. One block for\n * team/org administration — built on `DataTable` rather than a bespoke list.\n */\nexport function TeamMembersPanel({\n members,\n roles = ['Owner', 'Admin', 'Member'],\n onInvite,\n onRoleChange,\n onRemove,\n title = 'Team members',\n description = 'Manage who has access to this workspace.',\n}: TeamMembersPanelProps) {\n const [inviteOpen, setInviteOpen] = React.useState(false);\n const columns = React.useMemo<ColumnDef<TeamMemberRecord>[]>(() => [\n {\n accessorKey: 'name',\n header: 'Name',\n cell: ({ row }) => (\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-8\">\n <AvatarImage src={row.original.avatar} alt=\"\" />\n <AvatarFallback>{row.original.name.slice(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n <div>\n <p className=\"text-sm font-medium leading-none\">{row.original.name}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{row.original.email}</p>\n </div>\n </div>\n ),\n },\n {\n accessorKey: 'role',\n header: 'Role',\n cell: ({ row }) =>\n onRoleChange ? (\n <Select value={row.original.role} onValueChange={(value) => onRoleChange(row.original.id, value)}>\n <SelectTrigger className=\"h-8 w-32\"><SelectValue /></SelectTrigger>\n <SelectContent>\n {roles.map((r) => <SelectItem key={r} value={r}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n ) : (\n <Badge variant=\"secondary\">{row.original.role}</Badge>\n ),\n },\n ...(onRemove ? [{\n id: 'actions',\n header: '',\n cell: ({ row }) => (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\">\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">Row actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem className=\"text-destructive\" onClick={() => onRemove(row.original.id)}>\n Remove member\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n ),\n enableSorting: false,\n } satisfies ColumnDef<TeamMemberRecord>] : []),\n ], [roles, onRoleChange, onRemove]);\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-4\">\n <div>\n <h2 className=\"text-base font-semibold\">{title}</h2>\n <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n </div>\n {onInvite && (\n <Dialog open={inviteOpen} onOpenChange={setInviteOpen}>\n <DialogTrigger asChild>\n <Button><UserPlus className=\"size-4\" /> Invite member</Button>\n </DialogTrigger>\n {/* key resets the form fields each time the dialog opens */}\n <InviteDialog key={String(inviteOpen)} roles={roles} onInvite={onInvite} onClose={() => setInviteOpen(false)} />\n </Dialog>\n )}\n </div>\n <DataTable columns={columns} data={members} searchKey=\"name\" searchPlaceholder=\"Search members…\" pageSize={0} />\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { CreditCard, Download } from 'lucide-react';\nimport { Badge, Progress } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { DataTable } from '../components/DataTable';\nimport { SettingsSection } from './SettingsSection';\n\nexport interface BillingUsageMetric {\n label: string;\n used: number;\n limit: number;\n unit?: string;\n}\n\nexport interface BillingInvoice {\n id: string;\n date: string;\n amount: string;\n status: 'paid' | 'open' | 'void';\n downloadUrl?: string;\n}\n\nexport interface BillingPaymentMethod {\n brand: string;\n last4: string;\n expiry: string;\n}\n\nexport interface BillingPanelProps {\n planName: string;\n planPrice?: string;\n renewalDate?: string;\n usage?: BillingUsageMetric[];\n paymentMethod?: BillingPaymentMethod;\n invoices?: BillingInvoice[];\n onManagePlan?: () => void;\n onUpdatePaymentMethod?: () => void;\n className?: string;\n}\n\nconst invoiceStatusVariant = {\n paid: 'secondary',\n open: 'outline',\n void: 'destructive',\n} as const;\n\n/**\n * In-app billing summary — current plan + usage, payment method, invoice\n * history. Built from `SettingsSection` rows and `DataTable`, rather than a\n * one-off billing page each time. Marketing plan comparisons stay in\n * `PricingSection`/`UpgradePrompt` — this is the account-side view.\n */\nexport function BillingPanel({\n planName,\n planPrice,\n renewalDate,\n usage,\n paymentMethod,\n invoices,\n onManagePlan,\n onUpdatePaymentMethod,\n className,\n}: BillingPanelProps) {\n // Dates and amounts are display strings — sorting them would be lexicographic, so keep it off\n const invoiceColumns = React.useMemo<ColumnDef<BillingInvoice>[]>(() => [\n { accessorKey: 'date', header: 'Date', enableSorting: false },\n { accessorKey: 'amount', header: 'Amount', enableSorting: false },\n {\n accessorKey: 'status',\n header: 'Status',\n enableSorting: false,\n cell: ({ row }) => (\n <Badge variant={invoiceStatusVariant[row.original.status]} className=\"capitalize\">\n {row.original.status}\n </Badge>\n ),\n },\n {\n id: 'download',\n header: '',\n cell: ({ row }) =>\n row.original.downloadUrl ? (\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\" asChild>\n <a href={row.original.downloadUrl} download>\n <Download className=\"size-4\" />\n <span className=\"sr-only\">Download invoice</span>\n </a>\n </Button>\n ) : null,\n enableSorting: false,\n },\n ], []);\n\n return (\n <div className={className}>\n <div className=\"divide-y divide-border\">\n <SettingsSection title=\"Current plan\" description=\"Your subscription and usage against plan limits.\">\n <div className=\"flex flex-wrap items-center justify-between gap-4 rounded-lg border bg-card/60 p-4\">\n <div>\n <div className=\"flex items-center gap-2\">\n <p className=\"text-lg font-semibold\">{planName}</p>\n {planPrice && <Badge variant=\"secondary\">{planPrice}</Badge>}\n </div>\n {renewalDate && <p className=\"mt-1 text-sm text-muted-foreground\">Renews {renewalDate}</p>}\n </div>\n {onManagePlan && <Button onClick={onManagePlan}>Manage plan</Button>}\n </div>\n {usage && usage.length > 0 && (\n <div className=\"mt-4 space-y-4\">\n {usage.map((metric) => {\n const overLimit = metric.limit > 0 && metric.used > metric.limit;\n const percent = metric.limit > 0 ? Math.min(100, (metric.used / metric.limit) * 100) : 0;\n return (\n <div key={metric.label} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-sm\">\n <span>{metric.label}</span>\n <span className={overLimit ? 'font-medium text-destructive' : 'text-muted-foreground'}>\n {metric.used}{metric.unit} / {metric.limit}{metric.unit}\n </span>\n </div>\n <Progress value={percent} className={overLimit ? '[&>div]:bg-destructive' : undefined} />\n </div>\n );\n })}\n </div>\n )}\n </SettingsSection>\n\n {paymentMethod && (\n <SettingsSection title=\"Payment method\" description=\"Used for your subscription renewal.\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-card/60 p-4\">\n <div className=\"flex items-center gap-3\">\n <CreditCard className=\"size-5 text-muted-foreground\" />\n <p className=\"text-sm\">\n <span className=\"font-medium capitalize\">{paymentMethod.brand}</span> ending in {paymentMethod.last4}\n <span className=\"text-muted-foreground\"> · expires {paymentMethod.expiry}</span>\n </p>\n </div>\n {onUpdatePaymentMethod && <Button variant=\"outline\" onClick={onUpdatePaymentMethod}>Update</Button>}\n </div>\n </SettingsSection>\n )}\n\n {invoices && invoices.length > 0 && (\n <SettingsSection title=\"Billing history\" description=\"Download past invoices for your records.\">\n <DataTable columns={invoiceColumns} data={invoices} pageSize={5} />\n </SettingsSection>\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Check, Loader2 } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface OnboardingStep {\n id: string;\n title: string;\n description?: string;\n content: React.ReactNode;\n /** Runs before advancing past this step. Return `false`/an error string to block. */\n onNext?: () => boolean | string | Promise<boolean | string>;\n}\n\nexport interface OnboardingWizardProps {\n steps: OnboardingStep[];\n /** Called after the last step's `onNext` succeeds. */\n onComplete?: () => void;\n onStepChange?: (index: number) => void;\n /** Controlled current step index — omit to let the component manage it internally. */\n step?: number;\n onStepIndexChange?: (index: number) => void;\n completeLabel?: string;\n className?: string;\n}\n\n/**\n * Stateful multi-step onboarding flow. One component driven by a `steps`\n * prop — swap the array to reshape the flow rather than hand-building a\n * new wizard per feature.\n */\nexport function OnboardingWizard({\n steps,\n onComplete,\n onStepChange,\n step: stepProp,\n onStepIndexChange,\n completeLabel = 'Finish',\n className,\n}: OnboardingWizardProps) {\n const [internalStep, setInternalStep] = React.useState(0);\n const [error, setError] = React.useState<string | null>(null);\n const [pending, setPending] = React.useState(false);\n const index = stepProp ?? internalStep;\n const current = steps[index];\n const isLast = index === steps.length - 1;\n\n const goTo = (next: number) => {\n setError(null);\n if (stepProp === undefined) setInternalStep(next);\n onStepIndexChange?.(next);\n onStepChange?.(next);\n };\n\n const handleNext = async () => {\n if (current.onNext) {\n setPending(true);\n let result: boolean | string;\n try {\n result = await current.onNext();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Something went wrong. Please try again.');\n return;\n } finally {\n setPending(false);\n }\n if (result === false) { setError('Please complete this step before continuing.'); return; }\n if (typeof result === 'string') { setError(result); return; }\n }\n if (isLast) {\n onComplete?.();\n } else {\n goTo(index + 1);\n }\n };\n\n const handleBack = () => {\n if (index > 0) goTo(index - 1);\n };\n\n return (\n <div className={cn('w-full max-w-lg space-y-8', className)}>\n <ol className=\"flex items-center\" aria-label=\"Progress\">\n {steps.map((step, i) => (\n <li\n key={step.id}\n aria-current={i === index ? 'step' : undefined}\n className={cn('flex items-center', i !== steps.length - 1 && 'flex-1')}\n >\n <div\n className={cn(\n 'flex size-8 shrink-0 items-center justify-center rounded-full border text-xs font-medium',\n i < index ? 'border-primary bg-primary text-primary-foreground' : i === index ? 'border-primary text-primary' : 'border-border text-muted-foreground',\n )}\n >\n {i < index ? <Check className=\"size-4\" /> : i + 1}\n <span className=\"sr-only\">{step.title}{i < index ? ' (completed)' : ''}</span>\n </div>\n {i !== steps.length - 1 && (\n <div className={cn('mx-2 h-px flex-1', i < index ? 'bg-primary' : 'bg-border')} />\n )}\n </li>\n ))}\n </ol>\n\n <div className=\"space-y-4\">\n <div>\n <h2 className=\"text-xl font-semibold tracking-tight\">{current.title}</h2>\n {current.description && <p className=\"mt-1 text-sm text-muted-foreground\">{current.description}</p>}\n </div>\n <div>{current.content}</div>\n {error && <p role=\"alert\" className=\"text-sm font-medium text-destructive\">{error}</p>}\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Button type=\"button\" variant=\"ghost\" onClick={handleBack} disabled={index === 0 || pending}>\n Back\n </Button>\n <Button type=\"button\" onClick={handleNext} disabled={pending}>\n {pending && <Loader2 className=\"size-4 animate-spin\" />}\n {pending ? 'Please wait…' : isLast ? completeLabel : 'Continue'}\n </Button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: LucideIcon;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport function EmptyState({ icon: Icon, title, description, action, className, ...props }: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center justify-center gap-3 py-12 text-center', className)}\n {...props}\n >\n {Icon && (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl border bg-muted\">\n <Icon className=\"size-6 text-muted-foreground\" />\n </div>\n )}\n <div className=\"space-y-1\">\n <h3 className=\"font-semibold\">{title}</h3>\n {description && (\n <p className=\"max-w-xs text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {action}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ArrowLeft, ArrowUpRight } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport type { AppShellRenderLink } from './AppShell';\n\nexport interface ErrorPageLink {\n label: string;\n href: string;\n description?: string;\n icon?: ReactNode;\n}\n\nexport interface ErrorPageProps {\n statusCode?: string;\n title?: string;\n description?: string;\n action?: { label: string; href: string };\n backAction?: { label: string; href?: string; onClick?: () => void };\n /** Optional \"maybe you were looking for\" links rendered below the actions. */\n links?: ErrorPageLink[];\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function ErrorPage({\n statusCode = '404',\n title = 'Page not found',\n description = \"The page you're looking for doesn't exist or has been moved. Check the URL or head back home.\",\n action = { label: 'Take me home', href: '/' },\n backAction = { label: 'Go back' },\n links,\n renderLink = defaultRenderLink,\n}: ErrorPageProps) {\n const hasLinks = links && links.length > 0;\n\n return (\n <section className=\"relative overflow-hidden rounded-2xl border bg-card\">\n {/* Dot grid, faded toward the edges */}\n <div\n aria-hidden\n className=\"absolute inset-0 bg-[radial-gradient(hsl(var(--border))_1px,transparent_1px)] [background-size:24px_24px] [mask-image:radial-gradient(ellipse_at_center,black_30%,transparent_75%)]\"\n />\n {/* Soft brand glow behind the numerals */}\n <div\n aria-hidden\n className=\"absolute left-1/2 top-24 h-64 w-[36rem] max-w-full -translate-x-1/2 rounded-full bg-primary/10 blur-3xl\"\n />\n\n <div\n className={cn(\n 'relative mx-auto flex max-w-3xl flex-col items-center px-6 pt-20 text-center sm:pt-24',\n hasLinks ? 'pb-16' : 'pb-24 sm:pb-28',\n )}\n >\n <span className=\"inline-flex items-center gap-2 rounded-full border bg-background/80 px-3 py-1 font-mono text-xs text-muted-foreground backdrop-blur\">\n <span className=\"relative flex size-1.5\">\n <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-primary opacity-60\" />\n <span className=\"relative inline-flex size-1.5 rounded-full bg-primary\" />\n </span>\n HTTP {statusCode}\n </span>\n\n <div\n aria-hidden\n className=\"pointer-events-none -mb-8 mt-2 select-none bg-gradient-to-b from-foreground/15 via-foreground/[0.06] to-transparent bg-clip-text text-[9rem] font-black leading-none tracking-tighter text-transparent sm:-mb-12 sm:text-[13rem]\"\n >\n {statusCode}\n </div>\n\n <h1 className=\"text-balance text-2xl font-semibold tracking-tight sm:text-3xl\">{title}</h1>\n <p className=\"mx-auto mt-3 max-w-md text-pretty text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n\n <div className=\"mt-8 flex flex-wrap items-center justify-center gap-3\">\n {backAction &&\n (backAction.href ? (\n renderLink({\n href: backAction.href,\n children: (\n <Button variant=\"outline\">\n <ArrowLeft className=\"mr-2 size-4\" />\n {backAction.label}\n </Button>\n ),\n })\n ) : (\n <Button variant=\"outline\" onClick={backAction.onClick}>\n <ArrowLeft className=\"mr-2 size-4\" />\n {backAction.label}\n </Button>\n ))}\n {action &&\n renderLink({\n href: action.href,\n children: <Button>{action.label}</Button>,\n })}\n </div>\n\n {hasLinks && (\n <div className=\"mt-14 w-full\">\n <p className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Maybe you were looking for\n </p>\n <div className=\"mt-4 grid gap-3 text-left sm:grid-cols-2 lg:grid-cols-3\">\n {links.map((link) =>\n renderLink({\n href: link.href,\n className:\n 'group flex items-start gap-3 rounded-xl border bg-background/60 p-4 backdrop-blur transition-colors hover:border-primary/40 hover:bg-accent',\n children: (\n <>\n {link.icon && (\n <span className=\"mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-lg border bg-muted text-muted-foreground\">\n {link.icon}\n </span>\n )}\n <span className=\"min-w-0 grow\">\n <span className=\"flex items-center gap-1 text-sm font-medium\">\n {link.label}\n <ArrowUpRight className=\"size-3.5 text-muted-foreground transition-transform group-hover:-translate-y-0.5 group-hover:translate-x-0.5 group-hover:text-foreground\" />\n </span>\n {link.description && (\n <span className=\"mt-0.5 block text-xs leading-5 text-muted-foreground\">\n {link.description}\n </span>\n )}\n </span>\n </>\n ),\n }),\n )}\n </div>\n </div>\n )}\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { X } from 'lucide-react';\nimport {\n Button,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from '@olwiba/cn';\n\nexport interface UpgradeComparisonRow {\n key?: React.Key;\n label: React.ReactNode;\n currentValue: React.ReactNode;\n upgradedValue: React.ReactNode;\n}\n\nexport interface UpgradePromptProps {\n /** Layout variant. `banner` is an inline strip; `comparison` is a full feature-table block. */\n variant: 'banner' | 'comparison';\n /** Primary heading shown in both variants. */\n title: React.ReactNode;\n /** Supporting copy shown below the title. */\n description: React.ReactNode;\n /** Label for the primary upgrade CTA. Include pricing here if relevant. */\n primaryActionLabel: React.ReactNode;\n /** Called when the primary upgrade CTA is clicked. */\n onPrimaryAction: () => void;\n /** Optional secondary action label, typically for \"maybe later\" or dismiss behavior. */\n secondaryActionLabel?: React.ReactNode;\n /** Called when the optional secondary action is clicked. */\n onSecondaryAction?: () => void;\n /** Small eyebrow label shown above the title in the comparison variant. */\n eyebrow?: React.ReactNode;\n /** Feature comparison rows for the comparison variant. */\n rows?: UpgradeComparisonRow[];\n /** Column header for the current plan. Defaults to \"Current\". */\n currentPlanLabel?: React.ReactNode;\n /** Column header for the upgraded plan. Defaults to \"Upgrade\". */\n upgradedPlanLabel?: React.ReactNode;\n /** Small body text shown below the comparison table, before the action buttons. */\n footer?: React.ReactNode;\n /** Optional close icon action for the comparison variant. */\n onClose?: () => void;\n /** Accessible label for the comparison close icon. Defaults to \"Close\". */\n closeLabel?: string;\n className?: string;\n}\n\nexport function UpgradePrompt({\n variant,\n title,\n description,\n primaryActionLabel,\n onPrimaryAction,\n secondaryActionLabel,\n onSecondaryAction,\n eyebrow,\n rows,\n currentPlanLabel = 'Current',\n upgradedPlanLabel = 'Upgrade',\n footer,\n onClose,\n closeLabel = 'Close',\n className,\n}: UpgradePromptProps) {\n const hasSecondaryAction = Boolean(secondaryActionLabel && onSecondaryAction);\n\n if (variant === 'banner') {\n return (\n <section\n className={cn(\n 'rounded-xl border border-dashed bg-card/40 p-5 sm:p-6',\n className,\n )}\n >\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n <p className=\"mt-2 max-w-xl text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n </div>\n\n <div className=\"flex flex-wrap gap-2\">\n {hasSecondaryAction ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onSecondaryAction}\n className=\"border\"\n >\n {secondaryActionLabel}\n </Button>\n ) : null}\n <Button type=\"button\" onClick={onPrimaryAction}>\n {primaryActionLabel}\n </Button>\n </div>\n </div>\n </section>\n );\n }\n\n return (\n <section\n className={cn(\n 'w-full max-w-3xl rounded-2xl border bg-card p-6 shadow-sm sm:p-7',\n className,\n )}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n {eyebrow ? (\n <div className=\"font-mono text-[11px] uppercase tracking-[0.08em] text-primary\">\n {eyebrow}\n </div>\n ) : null}\n <h3\n className={cn(\n 'text-2xl font-semibold sm:text-[1.75rem]',\n eyebrow ? 'mt-3' : '',\n )}\n >\n {title}\n </h3>\n <p className=\"mt-3 max-w-2xl text-sm leading-6 text-muted-foreground sm:text-base\">\n {description}\n </p>\n </div>\n\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"inline-flex size-9 shrink-0 items-center justify-center rounded-lg border transition-colors hover:bg-muted\"\n aria-label={closeLabel}\n >\n <X className=\"size-4\" />\n </button>\n ) : null}\n </div>\n\n {rows && rows.length > 0 ? (\n <div className=\"mt-6 overflow-hidden rounded-xl border bg-muted/30\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead />\n <TableHead className=\"font-mono text-xs uppercase tracking-wider text-muted-foreground\">\n {currentPlanLabel}\n </TableHead>\n <TableHead className=\"font-mono text-xs uppercase tracking-wider text-primary\">\n {upgradedPlanLabel}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={row.key ?? index}>\n <TableCell className=\"font-medium\">{row.label}</TableCell>\n <TableCell className=\"font-mono text-muted-foreground\">\n {row.currentValue}\n </TableCell>\n <TableCell className=\"font-mono\">{row.upgradedValue}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n ) : null}\n\n <div\n className={cn(\n 'mt-6 flex flex-col gap-3 sm:flex-row sm:items-center',\n footer || hasSecondaryAction ? 'sm:justify-between' : 'sm:justify-end',\n )}\n >\n {footer ? <p className=\"text-sm text-muted-foreground\">{footer}</p> : null}\n <div className=\"flex flex-wrap gap-2\">\n {hasSecondaryAction ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onSecondaryAction}\n className=\"border\"\n >\n {secondaryActionLabel}\n </Button>\n ) : null}\n <Button type=\"button\" onClick={onPrimaryAction}>\n {primaryActionLabel}\n </Button>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { RefreshCw, Sparkles } from 'lucide-react';\nimport { Button, Card, cn } from '@olwiba/cn';\n\nexport interface UpdateBannerProps {\n /** Version baked into the running client bundle (e.g. a git short SHA embedded at build time). */\n currentVersion: string;\n /**\n * Fetches the currently deployed version from the server. The host app wires\n * its own endpoint — the component stays app-agnostic.\n */\n fetchVersion: () => Promise<{ version: string }>;\n /** Poll interval in ms. */\n intervalMs?: number;\n /** Force the banner to show (demos/testing). */\n forceShow?: boolean;\n /** Called on refresh click; defaults to a full page reload. Use it to hook a celebration first. */\n onRefresh?: () => void;\n message?: React.ReactNode;\n buttonLabel?: string;\n className?: string;\n}\n\nexport function UpdateBanner({\n currentVersion,\n fetchVersion,\n intervalMs = 5 * 60 * 1000,\n forceShow = false,\n onRefresh,\n message = (\n <>\n <span className=\"font-semibold\">App update available!</span> Refresh to get the latest features\n and improvements.\n </>\n ),\n buttonLabel = 'Refresh now',\n className,\n}: UpdateBannerProps) {\n const [show, setShow] = React.useState(forceShow);\n const [entered, setEntered] = React.useState(false);\n const [refreshing, setRefreshing] = React.useState(false);\n\n React.useEffect(() => {\n if (forceShow) {\n setShow(true);\n return;\n }\n setShow(false);\n\n let cancelled = false;\n\n const check = async () => {\n try {\n const server = await fetchVersion();\n if (!cancelled && server.version && server.version !== currentVersion) {\n setShow(true);\n }\n } catch {\n // Version checks are best-effort; stay quiet on failure.\n }\n };\n\n void check();\n const id = setInterval(check, intervalMs);\n return () => {\n cancelled = true;\n clearInterval(id);\n };\n }, [currentVersion, fetchVersion, forceShow, intervalMs]);\n\n // Two-frame mount so the enter transition actually plays.\n React.useEffect(() => {\n if (!show) {\n setEntered(false);\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\n }, [show]);\n\n const handleRefresh = () => {\n setRefreshing(true);\n setTimeout(() => {\n if (onRefresh) {\n onRefresh();\n setRefreshing(false);\n if (forceShow) setShow(false);\n } else {\n window.location.reload();\n }\n }, 400);\n };\n\n if (!show) return null;\n\n return (\n <div className=\"pointer-events-none fixed inset-x-0 top-4 z-50 flex justify-center px-4\">\n <div\n className={cn(\n 'pointer-events-auto transition-all duration-500 ease-out',\n entered ? 'translate-y-0 opacity-100' : '-translate-y-24 opacity-0',\n )}\n >\n <Card\n className={cn(\n 'max-w-3xl border-amber-300/60 bg-amber-50 dark:border-amber-700/60 dark:bg-amber-950',\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-6 p-4\">\n <div className=\"flex items-center gap-3\">\n <Sparkles className=\"size-5 shrink-0 text-amber-600 dark:text-amber-400\" aria-hidden=\"true\" />\n <p className=\"text-sm text-amber-800 dark:text-amber-200\">{message}</p>\n </div>\n <Button\n onClick={handleRefresh}\n disabled={refreshing}\n size=\"sm\"\n className=\"shrink-0 bg-amber-600 text-white hover:bg-amber-700 dark:bg-amber-600 dark:hover:bg-amber-700\"\n >\n {refreshing ? <RefreshCw className=\"size-4 animate-spin\" /> : buttonLabel}\n </Button>\n </div>\n </Card>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface FadeInProps extends React.HTMLAttributes<HTMLDivElement> {\n delay?: number;\n duration?: number;\n direction?: 'up' | 'down' | 'left' | 'right' | 'none';\n once?: boolean;\n children: React.ReactNode;\n}\n\nconst translateMap = {\n up: 'translate-y-6',\n down: '-translate-y-6',\n left: 'translate-x-6',\n right: '-translate-x-6',\n none: '',\n};\n\nexport function FadeIn({\n delay = 0,\n duration = 600,\n direction = 'up',\n once = true,\n children,\n className,\n style,\n ...props\n}: FadeInProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n if (once) observer.disconnect();\n } else if (!once) {\n setVisible(false);\n }\n },\n { threshold: 0.1 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [once]);\n\n return (\n <div\n ref={ref}\n className={cn(\n 'transition-all',\n visible ? 'opacity-100 translate-x-0 translate-y-0' : `opacity-0 ${translateMap[direction]}`,\n className,\n )}\n style={{ transitionDuration: `${duration}ms`, transitionDelay: `${delay}ms`, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, cn } from '@olwiba/cn';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface SectionTitleProps {\n title: string;\n description?: string;\n badge?: string;\n className?: string;\n}\n\nexport function SectionTitle({ title, description, badge, className }: SectionTitleProps) {\n return (\n <FadeIn direction=\"up\">\n <div className={cn('text-center', className)}>\n {badge && <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>}\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n </FadeIn>\n );\n}\n","export const marketingSectionSpacing = {\n standard: 'px-6 py-14 sm:px-10 sm:py-20',\n hero: 'px-6 pb-14 pt-10 sm:px-10 sm:py-20',\n} as const;\n\nexport type MarketingSectionSpacing = keyof typeof marketingSectionSpacing;\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nconst sizes = {\n sm: { outer: 'w-44', height: 'h-80', notch: 'w-16 h-4', border: 'rounded-[2rem]', screen: 'rounded-[1.75rem]' },\n md: { outer: 'w-56', height: 'h-[26rem]', notch: 'w-20 h-5', border: 'rounded-[2.5rem]', screen: 'rounded-[2.25rem]' },\n lg: { outer: 'w-72', height: 'h-[34rem]', notch: 'w-24 h-6', border: 'rounded-[3rem]', screen: 'rounded-[2.75rem]' },\n} as const;\n\nexport interface PhoneFrameProps {\n children?: React.ReactNode;\n size?: keyof typeof sizes;\n className?: string;\n float?: boolean;\n}\n\nexport function PhoneFrame({ children, size = 'md', className, float = true }: PhoneFrameProps) {\n const s = sizes[size];\n return (\n <>\n {float && (\n <style>{`\n @keyframes olwiba-phone-float {\n 0%, 100% { transform: translateY(0px); }\n 50% { transform: translateY(-10px); }\n }\n .olwiba-phone-float { animation: olwiba-phone-float 5s ease-in-out infinite; }\n `}</style>\n )}\n <div\n className={cn(\n 'relative mx-auto',\n s.outer,\n float && 'olwiba-phone-float',\n className,\n )}\n >\n {/* Device body */}\n <div\n className={cn(\n 'relative flex w-full flex-col overflow-hidden border-[3px] border-foreground/15 bg-muted shadow-2xl',\n s.border,\n s.height,\n )}\n >\n {/* Status bar / notch area */}\n <div className=\"relative flex justify-center pt-3 pb-1 shrink-0\">\n <div className={cn('rounded-full bg-foreground/10', s.notch)} />\n </div>\n\n {/* Screen */}\n <div className={cn('mx-1.5 mb-1.5 flex-1 overflow-hidden bg-background', s.screen)}>\n {children}\n </div>\n </div>\n\n {/* Side buttons */}\n <div className=\"absolute right-[-5px] top-24 h-12 w-[3px] rounded-l-sm bg-foreground/15\" />\n <div className=\"absolute left-[-5px] top-20 h-8 w-[3px] rounded-r-sm bg-foreground/15\" />\n <div className=\"absolute left-[-5px] top-32 h-8 w-[3px] rounded-r-sm bg-foreground/15\" />\n <div className=\"absolute left-[-5px] top-44 h-8 w-[3px] rounded-r-sm bg-foreground/15\" />\n </div>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\nimport { Button } from '../primitives/Button';\nimport { FadeIn } from '../motion/FadeIn';\nimport { PhoneFrame } from '../components/PhoneFrame';\nimport type { AppShellRenderLink } from '../app/AppShell';\nimport { marketingSectionSpacing } from './section-spacing';\n\nexport interface HeroSectionProps {\n heading: string;\n badge?: string;\n description: string;\n primaryCta: { label: string; href: string };\n secondaryCta?: { label: string; href: string };\n heroImage?: React.ReactNode;\n media?: 'image' | 'phone' | 'none';\n phoneSize?: 'sm' | 'md' | 'lg';\n avatarUrls?: string[];\n socialProofText?: string;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function HeroSection({\n heading,\n badge,\n description,\n primaryCta,\n secondaryCta,\n heroImage,\n media = 'image',\n phoneSize = 'lg',\n avatarUrls,\n socialProofText,\n renderLink = defaultRenderLink,\n}: HeroSectionProps) {\n const mode = useUIVariant();\n return (\n <section className=\"overflow-hidden\">\n <div className={marketingSectionSpacing.hero}>\n <div className=\"mx-auto grid max-w-6xl items-center gap-10 lg:grid-cols-2 lg:gap-16\">\n {/* Left - text content */}\n <FadeIn direction=\"left\">\n <div className=\"flex flex-col gap-6\">\n {badge && (\n <div>\n <Badge variant=\"secondary\">{badge}</Badge>\n </div>\n )}\n <h1 className=\"text-balance text-4xl font-semibold tracking-tight sm:text-5xl lg:text-6xl\">\n {heading}\n </h1>\n <p className=\"max-w-lg text-pretty text-lg text-muted-foreground\">\n {description}\n </p>\n <div className=\"flex flex-wrap items-center gap-3\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n {secondaryCta &&\n renderLink({\n href: secondaryCta.href,\n children: (\n <Button size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n ),\n })}\n </div>\n </div>\n </FadeIn>\n\n {/* Right - media */}\n {media !== 'none' && (\n <FadeIn direction=\"right\" delay={200}>\n {media === 'phone' ? (\n <div className=\"flex justify-center\">\n <PhoneFrame size={phoneSize}>\n {heroImage}\n </PhoneFrame>\n </div>\n ) : (\n <div className={cn('overflow-hidden', mode === 'smooth' ? 'rounded-3xl' : 'rounded-2xl')}>\n {heroImage}\n </div>\n )}\n </FadeIn>\n )}\n </div>\n\n {/* Avatar social proof row */}\n {(avatarUrls?.length || socialProofText) && (\n <FadeIn direction=\"up\" delay={400}>\n <div className=\"mx-auto mt-12 flex max-w-6xl items-center gap-4\">\n {avatarUrls && avatarUrls.length > 0 && (\n <div className=\"flex -space-x-3\">\n {avatarUrls.map((url, i) => (\n <Avatar key={i} className=\"size-9 border-2 border-background\">\n <AvatarImage src={url} alt=\"\" />\n <AvatarFallback className=\"text-xs\">\n {String.fromCharCode(65 + (i % 26))}\n </AvatarFallback>\n </Avatar>\n ))}\n </div>\n )}\n {socialProofText && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {socialProofText}\n </p>\n )}\n </div>\n </FadeIn>\n )}\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\n\nexport interface FeatureCardProps extends React.HTMLAttributes<HTMLDivElement> {\n icon: LucideIcon;\n title: string;\n description: string;\n href?: string;\n}\n\nexport function FeatureCard({ icon: Icon, title, description, href, className, ...props }: FeatureCardProps) {\n const mode = useUIVariant();\n\n const cardInner = (\n <div\n className={cn(\n 'group relative flex h-full flex-col gap-4 border bg-card p-6 transition-all duration-200',\n mode === 'playful'\n ? 'rounded-2xl rotate-[0.3deg]'\n : mode === 'smooth'\n ? 'rounded-3xl hover:-translate-y-0.5 hover:shadow-md'\n : 'rounded-2xl hover:-translate-y-0.5 hover:shadow-md',\n href && 'cursor-pointer',\n mode !== 'playful' && className,\n )}\n {...(mode !== 'playful' ? props : {})}\n >\n <div\n className={cn(\n 'flex h-10 w-10 items-center justify-center bg-primary/10 text-primary transition-colors group-hover:bg-primary group-hover:text-primary-foreground',\n mode === 'smooth' ? 'rounded-2xl' : 'rounded-xl',\n )}\n >\n <Icon className=\"size-5\" />\n </div>\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"font-semibold leading-tight\">{title}</h3>\n {href && (\n <ArrowRight className=\"size-4 shrink-0 text-muted-foreground opacity-0 transition-all group-hover:translate-x-0.5 group-hover:opacity-100\" />\n )}\n </div>\n <p className=\"text-sm leading-relaxed text-muted-foreground\">{description}</p>\n </div>\n </div>\n );\n\n const content =\n mode === 'playful' ? (\n <div className={cn('group/playful relative h-full', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 rounded-2xl bg-border transition-transform duration-200 translate-x-[5px] translate-y-[5px] -rotate-[0.5deg] group-hover/playful:-rotate-[1.5deg] group-hover/playful:translate-x-[6px] group-hover/playful:translate-y-[6px]\"\n />\n {cardInner}\n </div>\n ) : (\n cardInner\n );\n\n if (href) {\n return <a href={href} className=\"block h-full\">{content}</a>;\n }\n\n return content;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\n\nexport interface CarouselProps {\n /** Items to scroll through — each child becomes one snap slide. */\n children: React.ReactNode;\n /** Width classes applied to each slide. @default 'w-[280px] sm:w-[320px]' */\n itemClassName?: string;\n /** Prev/next control placement. @default 'top-right' */\n controls?: 'top-right' | 'none';\n /** Accessible label for the scroll region. */\n ariaLabel?: string;\n className?: string;\n}\n\n/**\n * Scroll-snap carousel behavior — wraps any children in a horizontally\n * scrolling track with prev/next controls. A mechanic, not a section:\n * feed it cards, images, or whole blocks. No carousel dependency.\n */\nexport function Carousel({\n children,\n itemClassName = 'w-[280px] sm:w-[320px]',\n controls = 'top-right',\n ariaLabel,\n className,\n}: CarouselProps) {\n const mode = useUIVariant();\n const trackRef = React.useRef<HTMLDivElement>(null);\n const [canPrev, setCanPrev] = React.useState(false);\n const [canNext, setCanNext] = React.useState(true);\n\n const updateScrollState = React.useCallback(() => {\n const track = trackRef.current;\n if (!track) return;\n setCanPrev(track.scrollLeft > 8);\n setCanNext(track.scrollLeft < track.scrollWidth - track.clientWidth - 8);\n }, []);\n\n React.useEffect(() => {\n const track = trackRef.current;\n if (!track) return;\n updateScrollState();\n track.addEventListener('scroll', updateScrollState, { passive: true });\n const observer = new ResizeObserver(updateScrollState);\n observer.observe(track);\n return () => {\n track.removeEventListener('scroll', updateScrollState);\n observer.disconnect();\n };\n }, [updateScrollState]);\n\n const scrollByItem = (direction: 1 | -1) => {\n const track = trackRef.current;\n if (!track) return;\n const item = track.querySelector<HTMLElement>('[data-carousel-item]');\n const gap = parseFloat(getComputedStyle(track).columnGap) || 24;\n const step = item ? item.offsetWidth + gap : track.clientWidth * 0.8;\n track.scrollBy({ left: direction * step, behavior: 'smooth' });\n };\n\n const controlClasses = cn(\n 'flex size-9 items-center justify-center border bg-background text-foreground transition-colors',\n 'hover:bg-muted disabled:opacity-40 disabled:hover:bg-background',\n mode === 'smooth' ? 'rounded-2xl' : 'rounded-xl',\n );\n\n return (\n <div className={className}>\n {controls === 'top-right' && (\n <div className=\"mb-4 flex items-center justify-end gap-2\">\n <button\n type=\"button\"\n aria-label=\"Previous\"\n className={controlClasses}\n onClick={() => scrollByItem(-1)}\n disabled={!canPrev}\n >\n <ChevronLeft className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next\"\n className={controlClasses}\n onClick={() => scrollByItem(1)}\n disabled={!canNext}\n >\n <ChevronRight className=\"size-4\" />\n </button>\n </div>\n )}\n\n <div\n ref={trackRef}\n role=\"region\"\n aria-label={ariaLabel}\n className=\"flex snap-x snap-mandatory gap-6 overflow-x-auto pb-4 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n >\n {React.Children.map(children, (child) =>\n child == null ? null : (\n <div data-carousel-item className={cn('shrink-0 snap-start', itemClassName)}>\n {child}\n </div>\n ),\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface StaggerChildrenProps extends React.HTMLAttributes<HTMLDivElement> {\n stagger?: number;\n delay?: number;\n duration?: number;\n direction?: 'up' | 'down' | 'left' | 'right' | 'none';\n once?: boolean;\n children: React.ReactNode;\n}\n\nconst translateMap = {\n up: [0, 20],\n down: [0, -20],\n left: [20, 0],\n right: [-20, 0],\n none: [0, 0],\n};\n\nexport function StaggerChildren({\n stagger = 80,\n delay = 0,\n duration = 500,\n direction = 'up',\n once = true,\n children,\n className,\n ...props\n}: StaggerChildrenProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n if (once) observer.disconnect();\n } else if (!once) {\n setVisible(false);\n }\n },\n { threshold: 0.1 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [once]);\n\n const [tx, ty] = translateMap[direction];\n\n return (\n <div ref={ref} className={cn(className)} {...props}>\n {React.Children.map(children, (child, i) => (\n <div\n className=\"h-full\"\n style={{\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n transitionDelay: `${delay + i * stagger}ms`,\n opacity: visible ? 1 : 0,\n transform: visible ? 'translate(0,0)' : `translate(${tx}px,${ty}px)`,\n }}\n >\n {child}\n </div>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { FeatureCard } from '../components/FeatureCard';\nimport { Carousel } from '../mechanics/Carousel';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface FeaturesSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n features: Array<{ icon: LucideIcon; title: string; description: string; href?: string }>;\n /** How the feature cards are arranged. @default 'grid' */\n layout?: 'grid' | 'carousel';\n}\n\nexport function FeaturesSection({\n title = 'Everything you need to ship fast',\n description = 'A complete system of components, blocks, and hooks designed to work together - and get out of your way.',\n badge = 'Features',\n features,\n layout = 'grid',\n}: FeaturesSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n const cards = features.map((feature) => (\n <FeatureCard\n key={feature.title}\n icon={feature.icon}\n title={feature.title}\n description={feature.description}\n href={feature.href}\n />\n ));\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className={cn('mx-auto', layout === 'carousel' ? 'max-w-5xl' : 'max-w-4xl')}>\n <SectionTitle title={title} description={description} badge={badge} />\n\n {layout === 'carousel' ? (\n <FadeIn direction=\"up\">\n <Carousel className=\"mt-10\" ariaLabel={title}>\n {cards}\n </Carousel>\n </FadeIn>\n ) : (\n <StaggerChildren className=\"mt-12 grid gap-8 sm:grid-cols-2 lg:grid-cols-3\">\n {cards}\n </StaggerChildren>\n )}\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { FeatureCard } from '../components/FeatureCard';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface GroupedFeatureGroup {\n label: string;\n features: Array<{ icon: LucideIcon; title: string; description: string; href?: string }>;\n}\n\nexport interface GroupedFeaturesSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n groups: GroupedFeatureGroup[];\n}\n\nexport function GroupedFeaturesSection({\n badge = 'Features',\n title = 'Everything you need to ship',\n description,\n groups,\n}: GroupedFeaturesSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <div className=\"mt-14 space-y-14\">\n {groups.map((group, i) => (\n <div key={group.label}>\n <FadeIn direction=\"up\" delay={i * 60}>\n <div className=\"mb-6 flex items-center gap-3\">\n <span className=\"text-sm font-semibold tracking-wide text-muted-foreground uppercase\">\n {group.label}\n </span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n </FadeIn>\n <StaggerChildren className=\"grid gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n {group.features.map((feature) => (\n <FeatureCard\n key={feature.title}\n icon={feature.icon}\n title={feature.title}\n description={feature.description}\n href={feature.href}\n />\n ))}\n </StaggerChildren>\n </div>\n ))}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface StepItem {\n emoji?: string;\n title: string;\n description: React.ReactNode;\n}\n\nexport interface StepGroup {\n steps: StepItem[];\n /** Content rendered after this group, outside the timeline (e.g. a CTA card). */\n after?: React.ReactNode;\n}\n\nexport interface StepsSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n steps?: StepItem[];\n /** 'default': horizontal row (vertical on mobile). 'timeline': vertical numbered timeline with a fading accent line. */\n variant?: 'default' | 'timeline';\n /** Timeline only — step groups with optional interstitial content; overrides `steps`. Numbering continues across groups. */\n groups?: StepGroup[];\n}\n\nfunction TimelineGroup({\n steps,\n startNumber,\n fadeIn,\n}: {\n steps: StepItem[];\n startNumber: number;\n fadeIn: boolean;\n}) {\n const fadePx = 48;\n return (\n <div className=\"relative\">\n {/* Accent line: optional fade-in head, solid middle, fade-out tail */}\n {fadeIn && (\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[19px] w-1 bg-gradient-to-b from-transparent to-primary\"\n style={{ top: 0, height: fadePx }}\n />\n )}\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[19px] w-1 bg-primary\"\n style={{\n top: fadeIn ? fadePx : 20,\n height: fadeIn ? `calc(100% - ${fadePx}px)` : 'calc(100% - 20px)',\n }}\n />\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[19px] w-1 bg-gradient-to-b from-primary to-transparent\"\n style={{ top: '100%', height: fadePx }}\n />\n\n <div className=\"space-y-10\" style={fadeIn ? { paddingTop: fadePx } : undefined}>\n {steps.map((step, i) => (\n <FadeIn key={step.title} direction=\"up\" delay={i * 80}>\n <div className=\"relative flex gap-5\">\n <div className=\"relative z-10 flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full border-2 border-primary bg-primary text-lg font-bold text-primary-foreground\">\n {step.emoji ?? startNumber + i}\n </div>\n <div className=\"flex-1 pt-1 pb-2\">\n <h3 className=\"mb-2 text-xl font-semibold text-foreground\">{step.title}</h3>\n <div className=\"text-sm leading-relaxed text-muted-foreground\">{step.description}</div>\n </div>\n </div>\n </FadeIn>\n ))}\n </div>\n </div>\n );\n}\n\nexport function StepsSection({\n badge = 'How it works',\n title = 'From zero to shipped',\n description,\n steps,\n variant = 'default',\n groups,\n}: StepsSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n if (variant === 'timeline') {\n const resolvedGroups: StepGroup[] = groups ?? (steps ? [{ steps }] : []);\n let nextNumber = 1;\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-3xl\">\n <SectionTitle badge={badge} title={title} description={description} className=\"text-left [&>p]:mx-0\" />\n <div className=\"mt-12\">\n {resolvedGroups.map((group, groupIndex) => {\n const startNumber = nextNumber;\n nextNumber += group.steps.length;\n return (\n <React.Fragment key={groupIndex}>\n <div className={cn(groupIndex > 0 && 'mt-10')}>\n <TimelineGroup steps={group.steps} startNumber={startNumber} fadeIn={groupIndex > 0} />\n </div>\n {group.after && <div className=\"mt-16\">{group.after}</div>}\n </React.Fragment>\n );\n })}\n </div>\n </div>\n </div>\n </section>\n );\n }\n\n const resolvedSteps = steps ?? [];\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <div className=\"mt-12\">\n {/* Desktop: horizontal row */}\n <div className=\"hidden sm:grid\" style={{ gridTemplateColumns: `repeat(${resolvedSteps.length}, 1fr)` }}>\n {resolvedSteps.map((step, i) => (\n <FadeIn key={step.title} direction=\"up\" delay={i * 80}>\n <div className=\"relative flex flex-col items-center text-center px-4\">\n {/* Dashed connector to next step */}\n {i < resolvedSteps.length - 1 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute top-6 left-1/2 w-full border-t border-dashed border-border\"\n />\n )}\n {/* Emoji badge (or fallback number) */}\n <div className=\"relative z-10 mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-muted text-2xl\">\n {step.emoji ?? (\n <span className=\"text-sm font-semibold text-primary\">{i + 1}</span>\n )}\n </div>\n <h3 className=\"font-semibold text-foreground\">{step.title}</h3>\n <div className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{step.description}</div>\n </div>\n </FadeIn>\n ))}\n </div>\n\n {/* Mobile: vertical timeline */}\n <div className=\"flex flex-col gap-0 sm:hidden\">\n {resolvedSteps.map((step, i) => (\n <FadeIn key={step.title} direction=\"up\" delay={i * 80}>\n <div className=\"relative flex gap-4 pb-8 last:pb-0\">\n {/* Vertical connector */}\n {i < resolvedSteps.length - 1 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[23px] top-14 bottom-0 w-px border-l border-dashed border-border\"\n />\n )}\n {/* Emoji badge (or fallback number) */}\n <div className=\"relative z-10 flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-muted text-2xl\">\n {step.emoji ?? (\n <span className=\"text-sm font-semibold text-primary\">{i + 1}</span>\n )}\n </div>\n <div className=\"pt-3\">\n <h3 className=\"font-semibold text-foreground\">{step.title}</h3>\n <div className=\"mt-1.5 text-sm leading-relaxed text-muted-foreground\">{step.description}</div>\n </div>\n </div>\n </FadeIn>\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface TechStackItem {\n icon: LucideIcon;\n name: string;\n description: string;\n href?: string;\n}\n\nexport interface TechStackSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n items: TechStackItem[];\n}\n\nexport function TechStackSection({\n badge = 'Built on',\n title = 'The stack',\n description,\n items,\n}: TechStackSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <StaggerChildren className=\"mt-12 grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {items.map((item) => {\n const Icon = item.icon;\n const card = (\n <div\n className={cn(\n 'group flex flex-col gap-3 border bg-background p-5 transition-all duration-200',\n mode === 'smooth'\n ? 'rounded-2xl hover:-translate-y-0.5 hover:shadow-md'\n : 'rounded-xl hover:-translate-y-0.5 hover:shadow-md',\n )}\n >\n <div\n className={cn(\n 'flex h-9 w-9 items-center justify-center bg-muted text-muted-foreground transition-colors group-hover:bg-primary/10 group-hover:text-primary',\n mode === 'smooth' ? 'rounded-xl' : 'rounded-lg',\n )}\n >\n <Icon className=\"size-4\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold leading-tight\">{item.name}</p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">{item.description}</p>\n </div>\n </div>\n );\n\n if (item.href) {\n return (\n <a key={item.name} href={item.href} className=\"block\">\n {card}\n </a>\n );\n }\n return <div key={item.name}>{card}</div>;\n })}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface FeatureMarqueeItem {\n icon: LucideIcon;\n title: string;\n}\n\nexport interface FeatureMarqueeRow {\n items: FeatureMarqueeItem[];\n direction?: 'left' | 'right';\n}\n\nexport interface FeatureMarqueeSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n rows: FeatureMarqueeRow[];\n speed?: 'slow' | 'normal' | 'fast';\n pauseOnHover?: boolean;\n}\n\nconst speedDuration = {\n slow: '280s',\n normal: '180s',\n fast: '100s',\n} as const;\n\nexport function FeatureMarqueeSection({\n badge,\n title,\n description,\n rows,\n speed = 'normal',\n pauseOnHover = true,\n}: FeatureMarqueeSectionProps) {\n const mode = useUIVariant();\n const duration = speedDuration[speed];\n\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"py-14 sm:py-20\">\n {(title || badge || description) && (\n <FadeIn direction=\"up\">\n <div className=\"mx-auto mb-10 max-w-4xl px-6 sm:px-10\">\n <SectionTitle title={title ?? ''} description={description} badge={badge} />\n </div>\n </FadeIn>\n )}\n\n <div className=\"space-y-3\">\n {rows.map((row, i) => {\n const direction = row.direction ?? (i % 2 === 0 ? 'left' : 'right');\n const reversed = direction === 'right';\n // Repeat enough that one set exceeds 4K viewport (~3840px).\n const set = Array.from({ length: 4 }, () => row.items).flat();\n const items = [...set, ...set];\n\n return (\n <div\n key={i}\n className=\"group relative overflow-hidden\"\n style={{\n maskImage:\n 'linear-gradient(to right, transparent, black 8%, black 92%, transparent)',\n WebkitMaskImage:\n 'linear-gradient(to right, transparent, black 8%, black 92%, transparent)',\n }}\n >\n <div\n className={cn(\n 'flex w-max gap-3 py-0.5',\n pauseOnHover && 'group-hover:[animation-play-state:paused]',\n )}\n style={{\n animation: `${reversed ? 'feature-marquee-right' : 'feature-marquee-left'} ${duration} linear infinite`,\n }}\n >\n {items.map((item, j) => {\n const Icon = item.icon;\n return (\n <div\n key={`${item.title}-${j}`}\n className=\"flex shrink-0 items-center gap-2 rounded-full border bg-background px-4 py-2 text-sm shadow-sm\"\n >\n <Icon className=\"size-3.5 shrink-0 text-primary\" />\n <span className=\"whitespace-nowrap text-foreground\">{item.title}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <style>{`\n @keyframes feature-marquee-left {\n from { transform: translateX(0); }\n to { transform: translateX(-50%); }\n }\n @keyframes feature-marquee-right {\n from { transform: translateX(-50%); }\n to { transform: translateX(0); }\n }\n `}</style>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useIntersectionObserver(\n options?: IntersectionObserverInit,\n): [React.RefObject<Element | null>, boolean] {\n const ref = React.useRef<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(([entry]) => {\n setIsIntersecting(entry.isIntersecting);\n }, options);\n\n observer.observe(el);\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [ref, isIntersecting];\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight, Rocket, Sparkles } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { FadeIn } from '../motion/FadeIn';\nimport { useIntersectionObserver } from '../hooks/use-intersection-observer';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface CtaSectionProps {\n heading: string;\n description?: string;\n primaryCta: { label: string; href: string };\n secondaryCta?: { label: string; href: string };\n footnote?: string;\n /**\n * Visual treatment of the section.\n * - `'default'` — badge icon, radial glow, primary + secondary CTAs\n * - `'showcase'` — large watermark icon with a scroll-reveal, single pill CTA\n * @default 'default'\n */\n variant?: 'default' | 'showcase';\n /** (showcase) Watermark icon rendered behind the content. @default <Rocket /> */\n icon?: React.ReactNode;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nfunction ShowcaseCta({\n heading,\n description,\n primaryCta,\n footnote,\n icon,\n renderLink = defaultRenderLink,\n sectionClasses,\n}: CtaSectionProps & { sectionClasses: string }) {\n const [ref, intersecting] = useIntersectionObserver({ threshold: 0.15 });\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n if (intersecting) setVisible(true);\n }, [intersecting]);\n\n return (\n <section\n ref={ref as React.RefObject<HTMLElement>}\n className={cn(\n sectionClasses,\n 'relative transition-[opacity,transform] duration-700 ease-out',\n visible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-6',\n )}\n >\n {/* Decorative watermark icon */}\n <div\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\n style={{\n opacity: visible ? 0.1 : 0,\n transform: visible ? 'scale(1) rotate(0deg)' : 'scale(0.9) rotate(-5deg)',\n transition: 'opacity 700ms ease 200ms, transform 700ms ease 200ms',\n }}\n >\n {icon ?? <Rocket className=\"size-72 text-foreground\" strokeWidth={0.75} />}\n </div>\n\n <div className=\"relative z-10 px-6 py-20 text-center sm:px-10 sm:py-28\">\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {heading}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-lg text-pretty text-muted-foreground\">{description}</p>\n )}\n <div className=\"mt-8\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\" className=\"rounded-full px-6\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n </div>\n {footnote && (\n <p className=\"mt-5 text-sm text-muted-foreground\">{footnote}</p>\n )}\n </div>\n </section>\n );\n}\n\nexport function CtaSection(props: CtaSectionProps) {\n const {\n heading,\n description,\n primaryCta,\n secondaryCta,\n footnote,\n variant = 'default',\n renderLink = defaultRenderLink,\n } = props;\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n\n if (variant === 'showcase') {\n return <ShowcaseCta {...props} sectionClasses={sectionClasses} />;\n }\n\n return (\n <section className={sectionClasses}>\n <div className=\"relative px-6 py-16 sm:px-10 sm:py-24\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_center,hsl(var(--primary)/0.15),transparent_70%)]\" />\n <FadeIn direction=\"up\">\n <div className=\"relative mx-auto max-w-2xl text-center\">\n <div className={cn('mb-4 inline-flex h-10 w-10 items-center justify-center bg-primary/10 text-primary', mode === 'smooth' ? 'rounded-3xl' : 'rounded-2xl')}>\n <Sparkles className=\"size-5\" />\n </div>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {heading}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-lg text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n <div className=\"mt-8 flex flex-wrap items-center justify-center gap-3\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n {secondaryCta &&\n renderLink({\n href: secondaryCta.href,\n children: (\n <Button size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n ),\n })}\n </div>\n {footnote && (\n <p className=\"mt-4 text-sm text-muted-foreground\">\n {footnote}\n </p>\n )}\n </div>\n </FadeIn>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\nimport { useUIMode, type UIMode } from '../context/OlwibaUIContext';\n\n/**\n * A transition is pure data: two layers, each with a start and an end style.\n * Adding an effect means adding an entry to {@link EFFECTS} — the component\n * itself never learns what \"roll\" means. Consumers can pass a spec object\n * directly for anything not in the set.\n */\nexport interface AnimatedSwapSpec {\n /** Hide overflow on the container. Required by effects that travel further than they fade. */\n clip: boolean;\n duration: number;\n easing: string;\n /** The incoming layer: where it starts, where it lands. */\n enter: { from: React.CSSProperties; to: React.CSSProperties };\n /** The outgoing layer: where it starts, where it leaves. */\n exit: { from: React.CSSProperties; to: React.CSSProperties };\n}\n\nexport type AnimatedSwapEffect = 'roll' | 'fade' | 'slide' | 'none';\n\nconst EFFECTS: Record<Exclude<AnimatedSwapEffect, 'none'>, AnimatedSwapSpec> = {\n // Odometer. No opacity at all — the two values are solid and one physically\n // displaces the other, which is what makes it read as a mechanism rather\n // than a crossfade. Needs `clip`, or the departing value is legible above\n // the container the whole way out.\n roll: {\n clip: true,\n duration: 320,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n enter: { from: { transform: 'translateY(100%)' }, to: { transform: 'translateY(0)' } },\n exit: { from: { transform: 'translateY(0)' }, to: { transform: 'translateY(-100%)' } },\n },\n // The neutral one. No movement, so it never fights a layout that's also\n // reflowing around it.\n fade: {\n clip: false,\n duration: 220,\n easing: 'ease',\n enter: { from: { opacity: 0 }, to: { opacity: 1 } },\n exit: { from: { opacity: 1 }, to: { opacity: 0 } },\n },\n // Horizontal, and short: 0.75rem of travel carried by opacity, so it needs\n // no clipping and won't crop a ring or drop shadow on whatever it wraps.\n slide: {\n clip: false,\n duration: 280,\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n enter: {\n from: { opacity: 0, transform: 'translateX(0.75rem)' },\n to: { opacity: 1, transform: 'translateX(0)' },\n },\n exit: {\n from: { opacity: 1, transform: 'translateX(0)' },\n to: { opacity: 0, transform: 'translateX(-0.75rem)' },\n },\n },\n};\n\n/** Mode picks the effect when the caller doesn't. An explicit `effect` always wins. */\nconst MODE_EFFECT: Record<UIMode, AnimatedSwapEffect> = {\n default: 'fade',\n playful: 'roll',\n smooth: 'slide',\n};\n\nexport interface AnimatedSwapProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Changing this is the swap. Nothing else triggers one — the component\n * can't see inside `children`, so re-rendering with different content under\n * the same key updates in place with no animation.\n */\n swapKey: React.Key;\n /** Named effect, or a spec of your own. Defaults from the current UI mode. */\n effect?: AnimatedSwapEffect | AnimatedSwapSpec;\n /** Override the effect's duration, in ms. */\n duration?: number;\n children: React.ReactNode;\n}\n\n/**\n * Animates the replacement of arbitrary content when `swapKey` changes: a\n * price when the billing cadence toggles, a chart when the range changes, a\n * status pill when a job finishes.\n *\n * Both versions are mounted for the length of the transition. The incoming\n * one stays in normal flow so the container sizes to it immediately; the\n * outgoing one is lifted out of flow and overlaid, so content below settles\n * once, at the start, under cover of the animation — rather than snapping\n * when the old copy unmounts.\n *\n * CSS transitions only: no keyframes to register in a consumer's Tailwind\n * config, and no motion library.\n */\nexport function AnimatedSwap({\n swapKey,\n effect,\n duration,\n children,\n className,\n style,\n ...props\n}: AnimatedSwapProps) {\n const mode = useUIMode();\n const resolved = effect ?? MODE_EFFECT[mode];\n const spec = typeof resolved !== 'string' ? resolved : resolved === 'none' ? null : EFFECTS[resolved];\n const ms = duration ?? spec?.duration ?? 0;\n\n const reduced = usePrefersReducedMotion();\n const animated = spec !== null && !reduced;\n\n // What was on screen last commit. Read during the render that notices the\n // key changed — by then `children` is already the new content, so the\n // outgoing copy can only come from here.\n const previous = React.useRef(children);\n const seenKey = React.useRef(swapKey);\n\n const [swap, setSwap] = React.useState<{ key: React.Key; out: React.ReactNode; running: boolean } | null>(null);\n\n if (seenKey.current !== swapKey) {\n const out = previous.current;\n seenKey.current = swapKey;\n if (animated) setSwap({ key: swapKey, out, running: false });\n }\n\n React.useEffect(() => {\n previous.current = children;\n });\n\n // Mount the incoming layer at its start style first, then flip on the next\n // frame. Committing both in one pass gives the browser no start value to\n // transition from and the swap just snaps.\n React.useEffect(() => {\n if (!swap || swap.running) return;\n const raf = requestAnimationFrame(() => {\n setSwap((s) => (s && s.key === swap.key ? { ...s, running: true } : s));\n });\n return () => cancelAnimationFrame(raf);\n }, [swap]);\n\n // Timer rather than onTransitionEnd: an effect may animate a property the\n // wrapped node also transitions on its own, and there's no reliable single\n // event marking the end of both layers.\n React.useEffect(() => {\n if (!swap?.running) return;\n const done = setTimeout(() => {\n setSwap((s) => (s && s.key === swap.key ? null : s));\n }, ms);\n return () => clearTimeout(done);\n }, [swap, ms]);\n\n const phase = (layer: 'enter' | 'exit'): React.CSSProperties | undefined => {\n if (!swap || !spec) return undefined;\n return {\n ...spec[layer][swap.running ? 'to' : 'from'],\n transition: `transform ${ms}ms ${spec.easing}, opacity ${ms}ms ${spec.easing}`,\n };\n };\n\n return (\n <span\n className={cn('relative inline-block', swap && spec?.clip && 'overflow-hidden', className)}\n style={style}\n {...props}\n >\n <span className=\"block\" style={phase('enter')}>\n {children}\n </span>\n {swap && (\n // Pinned rather than inset-0: stretching the outgoing copy to the\n // incoming one's box would resize it mid-exit.\n <span className=\"absolute left-0 top-0 block\" aria-hidden=\"true\" style={phase('exit')}>\n {swap.out}\n </span>\n )}\n </span>\n );\n}\n\nfunction usePrefersReducedMotion() {\n // Not read during render on the server: the query is unknowable there, and\n // guessing either way produces a hydration mismatch. Every swap happens\n // after mount, by which point this is settled.\n const [reduced, setReduced] = React.useState(false);\n\n React.useEffect(() => {\n const query = window.matchMedia?.('(prefers-reduced-motion: reduce)');\n if (!query) return;\n setReduced(query.matches);\n const onChange = (e: MediaQueryListEvent) => setReduced(e.matches);\n query.addEventListener('change', onChange);\n return () => query.removeEventListener('change', onChange);\n }, []);\n\n return reduced;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Check, Minus } from 'lucide-react';\nimport { Badge, Button, cn, Separator, useUIVariant } from '@olwiba/cn';\nimport { AnimatedSwap } from '../motion/AnimatedSwap';\n\nexport interface PricingFeature {\n label: string;\n included: boolean;\n}\n\nexport interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n price: string;\n period?: string;\n description: string;\n features: PricingFeature[];\n cta: string;\n highlighted?: boolean;\n disabled?: boolean;\n /** Disables only the CTA button, leaving the rest of the card interactive. */\n ctaDisabled?: boolean;\n badge?: React.ReactNode;\n /** Rendered directly below the CTA button (e.g. a \"Get notified\" link). */\n footer?: React.ReactNode;\n onSelect?: () => void;\n}\n\nexport function PricingCard({\n name,\n price,\n period = '/mo',\n description,\n features,\n cta,\n highlighted = false,\n disabled = false,\n ctaDisabled = false,\n badge,\n footer,\n onSelect,\n className,\n ...props\n}: PricingCardProps) {\n const mode = useUIVariant();\n\n const cardInner = (\n <div\n className={cn(\n 'relative flex flex-col border p-6 transition-opacity',\n mode === 'playful'\n ? 'rounded-2xl rotate-[0.3deg]'\n : mode === 'smooth'\n ? 'rounded-3xl'\n : 'rounded-2xl',\n highlighted ? 'border-primary bg-primary/5 shadow-sm' : 'bg-card',\n disabled && 'pointer-events-none opacity-40 select-none',\n mode !== 'playful' && className,\n )}\n {...(mode !== 'playful' ? props : {})}\n >\n {badge && (\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2\">\n {typeof badge === 'string' ? <Badge>{badge}</Badge> : badge}\n </div>\n )}\n\n <div className=\"space-y-1\">\n <div className=\"text-sm font-medium text-muted-foreground\">{name}</div>\n <div className=\"flex items-end gap-1\">\n {/* Animates when a billing-cadence toggle swaps the price out. The\n price is its own swap key: a card whose price never changes never\n animates. */}\n <AnimatedSwap swapKey={price} className=\"text-4xl font-bold tracking-tight\">\n {price}\n </AnimatedSwap>\n <span className=\"mb-1 text-sm text-muted-foreground\">{period}</span>\n </div>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n\n <Button\n variant={highlighted ? 'default' : 'outline'}\n className=\"mt-6 w-full\"\n onClick={onSelect}\n disabled={disabled || ctaDisabled}\n >\n {cta}\n </Button>\n\n {footer && <div className=\"mt-3 text-center text-sm\">{footer}</div>}\n\n <Separator className=\"my-6\" />\n\n <ul className=\"space-y-3 text-sm\">\n {features.map((feat) => (\n <li key={feat.label} className=\"flex items-center gap-2\">\n {feat.included ? (\n <>\n <Check className=\"size-4 shrink-0 text-primary\" />\n <span>{feat.label}</span>\n </>\n ) : (\n <>\n <Minus className=\"size-4 shrink-0 text-muted-foreground/40\" />\n <span className=\"text-muted-foreground/40\">{feat.label}</span>\n </>\n )}\n </li>\n ))}\n </ul>\n </div>\n );\n\n if (mode === 'playful') {\n return (\n <div className={cn('group/playful relative', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className={cn(\n 'absolute inset-0 rounded-2xl transition-transform duration-200 translate-x-[5px] translate-y-[5px] -rotate-[0.5deg] group-hover/playful:-rotate-[1.5deg] group-hover/playful:translate-x-[6px] group-hover/playful:translate-y-[6px]',\n highlighted ? 'bg-primary/20' : 'bg-border',\n )}\n />\n {cardInner}\n </div>\n );\n }\n\n return cardInner;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\ninterface TimeLeft {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nfunction getTimeLeft(deadline: string): TimeLeft | null {\n const diff = new Date(deadline).getTime() - Date.now();\n if (diff <= 0) return null;\n return {\n days: Math.floor(diff / (1000 * 60 * 60 * 24)),\n hours: Math.floor((diff / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((diff / 1000 / 60) % 60),\n seconds: Math.floor((diff / 1000) % 60),\n };\n}\n\nexport interface CountdownTimerProps {\n deadline: string;\n label?: string;\n className?: string;\n /** Compact inline mode — renders as \"29d · 11h · 22m\", no seconds, no label. For use inside badges. */\n compact?: boolean;\n}\n\nexport function CountdownTimer({\n deadline,\n label = 'Founding price closes in',\n className,\n compact = false,\n}: CountdownTimerProps) {\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft | null>(() => getTimeLeft(deadline));\n\n React.useEffect(() => {\n setTimeLeft(getTimeLeft(deadline));\n const id = setInterval(() => setTimeLeft(getTimeLeft(deadline)), 1000);\n return () => clearInterval(id);\n }, [deadline]);\n\n if (!timeLeft) return null;\n\n if (compact) {\n return (\n <span className={cn('font-mono tabular-nums', className)}>\n {timeLeft.days}d · {String(timeLeft.hours).padStart(2, '0')}h · {String(timeLeft.minutes).padStart(2, '0')}m · {String(timeLeft.seconds).padStart(2, '0')}s\n </span>\n );\n }\n\n const units = [\n { value: timeLeft.days, unit: 'd' },\n { value: timeLeft.hours, unit: 'h' },\n { value: timeLeft.minutes, unit: 'm' },\n { value: timeLeft.seconds, unit: 's' },\n ];\n\n return (\n <div className={cn('flex items-center justify-center gap-2 text-sm', className)}>\n <span className=\"text-muted-foreground\">{label}</span>\n <span className=\"flex items-center gap-1 font-mono font-semibold tabular-nums\">\n {units.map(({ value, unit }, i) => (\n <React.Fragment key={unit}>\n <span>\n {String(value).padStart(2, '0')}\n <span className=\"font-normal text-muted-foreground\">{unit}</span>\n </span>\n {i < units.length - 1 && (\n <span className=\"text-muted-foreground/50\">·</span>\n )}\n </React.Fragment>\n ))}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, Button, cn, useUIVariant } from '@olwiba/cn';\nimport { PricingCard, type PricingFeature } from '../components/PricingCard';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { CountdownTimer } from '../motion/CountdownTimer';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\n/**\n * One billing period a plan can be bought at.\n *\n * Products are not all sold monthly-or-annually: weekly, quarterly, and\n * one-off all exist. Pass `cadences` to describe whatever this product\n * actually sells and the section renders a tab per entry, rather than the\n * fixed Monthly/Annual pair it assumes otherwise.\n */\nexport interface PricingCadence {\n /** Matches the keys of `PricingPlan.prices`. */\n key: string;\n label: string;\n /**\n * Billing periods in a year — 52 weekly, 12 monthly, 1 annual. Used only to\n * compare cadences for the savings badge; omit it and no badge is computed\n * for this cadence.\n */\n periodsPerYear?: number;\n /** Price suffix, e.g. \"/ week\". Falls back to `PricingPlan.periodDisplay`. */\n suffix?: string;\n}\n\nexport interface PricingPlan {\n name: string;\n monthly: number;\n annual: number;\n /**\n * Price per cadence key, for products using `cadences`. The `monthly` and\n * `annual` fields above stay as the fallback for callers that don't.\n */\n prices?: Record<string, number>;\n description: string;\n cta: string;\n highlighted?: boolean;\n disabled?: boolean;\n /** Disables only the CTA button, leaving the rest of the card interactive. */\n ctaDisabled?: boolean;\n features: PricingFeature[];\n /** Overrides computed price display (e.g. \"$?\" for community/reach-out tiers). */\n priceDisplay?: string;\n /** Overrides computed period display. */\n periodDisplay?: string;\n}\n\n/**\n * Cheapest-per-year wins: annualise every cadence across all plans and return\n * a `Save N%` label for each one that costs less than the default.\n *\n * Computed rather than configured because a hand-written \"Save 34%\" silently\n * stops being true the first time a price changes.\n */\nfunction computeSaveBadges(\n plans: PricingPlan[],\n cadences: PricingCadence[],\n defaultKey: string,\n): Record<string, string> {\n const annualised = (key: string) => {\n const cadence = cadences.find((c) => c.key === key);\n if (!cadence?.periodsPerYear) return null;\n // Plans priced by `priceDisplay` (pay-what-you-can, \"contact us\") carry no\n // comparable number, so they're left out of the comparison entirely.\n const totals = plans\n .filter((plan) => plan.priceDisplay === undefined && plan.prices?.[key] !== undefined)\n .map((plan) => plan.prices![key]! * cadence.periodsPerYear!);\n return totals.length > 0 ? totals.reduce((sum, n) => sum + n, 0) : null;\n };\n\n const baseline = annualised(defaultKey);\n if (!baseline) return {};\n\n const badges: Record<string, string> = {};\n for (const cadence of cadences) {\n if (cadence.key === defaultKey) continue;\n const total = annualised(cadence.key);\n if (!total || total >= baseline) continue;\n const percent = Math.round(((baseline - total) / baseline) * 100);\n if (percent > 0) badges[cadence.key] = `Save ${percent}%`;\n }\n return badges;\n}\n\n/**\n * Column layout for the number of plans actually being shown.\n *\n * A fixed three-column grid leaves one or two plans hugging the left edge with\n * dead space beside them, which reads as a rendering fault rather than a\n * deliberate layout. Width is capped per count so cards keep a sensible size\n * instead of stretching to fill.\n */\nfunction gridClassesFor(count: number): string {\n if (count <= 1) return 'mx-auto max-w-sm';\n if (count === 2) return 'mx-auto max-w-3xl sm:grid-cols-2';\n if (count === 3) return 'mx-auto max-w-5xl lg:grid-cols-3';\n if (count === 4) return 'mx-auto max-w-6xl sm:grid-cols-2 lg:grid-cols-4';\n // Beyond four, wrapping at three keeps each card readable. A carousel is the\n // answer if a catalogue ever genuinely needs it.\n return 'mx-auto max-w-5xl sm:grid-cols-2 lg:grid-cols-3';\n}\n\nexport interface PricingSectionProps {\n title?: string;\n description?: string;\n badge?: React.ReactNode;\n plans: PricingPlan[];\n saveBadge?: string;\n isAuthenticated?: boolean;\n renderLink?: AppShellRenderLink;\n footnote?: string;\n mode?: 'subscription' | 'one-time';\n foundingDeadline?: string;\n /** Symbol prepended to the computed price. Ignored by plans with `priceDisplay`. */\n currency?: string;\n /** Badge label for `highlighted` plans with no active `foundingDeadline` countdown. Pass '' to show no badge. */\n highlightedBadgeLabel?: string;\n /** Rendered below each plan's CTA button (e.g. a \"Get notified\" link). */\n renderPlanFooter?: (plan: PricingPlan) => React.ReactNode;\n /**\n * Billing periods this product sells at. One entry renders no toggle at all;\n * two or more render a tab each, with savings badges computed from\n * `periodsPerYear`. Omit to keep the built-in Monthly/Annual pair.\n */\n cadences?: PricingCadence[];\n /** Which cadence opens selected. Defaults to the first in `cadences`. */\n defaultCadence?: string;\n /**\n * Called when a plan's CTA is pressed, with the cadence currently selected —\n * which is the half the caller can't otherwise know, since the toggle's state\n * lives in here. Without it the CTA is inert: `PricingCard` takes an\n * `onSelect` and this section had never passed one.\n */\n onSelectPlan?: (plan: PricingPlan, cadence?: string) => void;\n /** Marks one plan as busy (e.g. its checkout is being created). */\n pendingPlanName?: string;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function PricingSection({\n title = 'Simple, transparent pricing',\n description = 'Start for free. Scale as you grow. No hidden fees.',\n badge = 'Pricing',\n plans,\n saveBadge = 'Save 34%',\n isAuthenticated,\n renderLink = defaultRenderLink,\n footnote,\n mode = 'subscription',\n foundingDeadline,\n currency = '$',\n highlightedBadgeLabel = 'Founding member',\n renderPlanFooter,\n cadences,\n defaultCadence,\n onSelectPlan,\n pendingPlanName,\n}: PricingSectionProps) {\n const [annual, setAnnual] = React.useState(false);\n const isOneTime = mode === 'one-time';\n\n // Explicit cadences replace the built-in Monthly/Annual pair entirely.\n const useCadences = !!cadences?.length;\n const initialCadence =\n (defaultCadence && cadences?.some((c) => c.key === defaultCadence) ? defaultCadence : null) ??\n cadences?.[0]?.key ??\n '';\n const [activeCadence, setActiveCadence] = React.useState(initialCadence);\n const cadence = cadences?.find((c) => c.key === activeCadence);\n const saveBadges = React.useMemo(\n () => (useCadences ? computeSaveBadges(plans, cadences!, initialCadence) : {}),\n [useCadences, plans, cadences, initialCadence],\n );\n // A single cadence is just a label for the price — nothing to switch between.\n const showToggle = useCadences ? cadences!.length > 1 : !isOneTime;\n const uiMode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n uiMode === 'smooth' && 'rounded-3xl border',\n uiMode === 'playful' && 'rounded-2xl border-primary/25 border',\n !uiMode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n {/* Header */}\n <div className=\"text-center\">\n {badge && (\n typeof badge === 'string'\n ? <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>\n : <div className=\"mb-4\">{badge}</div>\n )}\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-xl text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n\n {/* Billing toggle: one tab per cadence, or the legacy Monthly/Annual pair */}\n {showToggle && (\n <div className=\"mt-6 inline-flex items-center gap-3 rounded-full border bg-muted p-1\">\n {useCadences\n ? cadences!.map((entry) => (\n <Button\n key={entry.key}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setActiveCadence(entry.key)}\n className={cn(\n 'flex items-center gap-2 rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n entry.key === activeCadence\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {entry.label}\n {saveBadges[entry.key] && (\n // `default` (primary), not `secondary`: the toggle is\n // `bg-muted` with a `bg-background` active tab, and a\n // secondary badge is the same grey as both — the\n // saving is the incentive, so it has to carry brand\n // colour to read at all.\n <Badge variant=\"default\" className=\"text-xs\">\n {saveBadges[entry.key]}\n </Badge>\n )}\n </Button>\n ))\n : (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setAnnual(false)}\n className={cn(\n 'rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n !annual ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',\n )}\n >\n Monthly\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setAnnual(true)}\n className={cn(\n 'flex items-center gap-2 rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n annual ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',\n )}\n >\n Annual\n {saveBadge && (\n <Badge variant=\"default\" className=\"text-xs\">{saveBadge}</Badge>\n )}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n\n {/* Plan cards */}\n <StaggerChildren className={cn('mt-10 grid gap-4', gridClassesFor(plans.length))}>\n {plans.map((plan) => {\n const rawPrice = useCadences\n ? (plan.prices?.[activeCadence] ?? plan.monthly)\n : isOneTime\n ? plan.monthly\n : annual\n ? plan.annual\n : plan.monthly;\n const price = plan.priceDisplay ?? `${currency}${rawPrice}`;\n // With cadences the suffix follows the selected tab, so a plan's\n // own periodDisplay would pin it to whichever it was written for.\n const period = useCadences\n ? (cadence?.suffix ?? plan.periodDisplay ?? '')\n : (plan.periodDisplay ?? (isOneTime ? 'one-time' : rawPrice > 0 ? '/mo' : ''));\n const badge = plan.highlighted && foundingDeadline\n ? (\n <span className=\"inline-flex items-center rounded-full border bg-secondary px-2.5 py-0.5 text-xs font-semibold text-secondary-foreground\">\n <CountdownTimer deadline={foundingDeadline} compact />\n </span>\n )\n : plan.highlighted && highlightedBadgeLabel\n ? highlightedBadgeLabel\n : undefined;\n return (\n <PricingCard\n key={plan.name}\n name={plan.name}\n price={price}\n period={period}\n description={plan.description}\n features={plan.features}\n cta={pendingPlanName === plan.name ? 'Redirecting…' : plan.cta}\n highlighted={plan.highlighted}\n disabled={plan.disabled}\n // A plan mid-checkout is disabled too, so a second click\n // can't open a second session.\n ctaDisabled={plan.ctaDisabled || pendingPlanName === plan.name}\n badge={badge}\n footer={renderPlanFooter?.(plan)}\n onSelect={\n onSelectPlan\n ? () => onSelectPlan(plan, useCadences ? activeCadence : undefined)\n : undefined\n }\n />\n );\n })}\n </StaggerChildren>\n\n {/* Footnote */}\n {footnote && (\n <p className=\"mt-8 text-center text-sm text-muted-foreground\">\n {footnote}\n </p>\n )}\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Quote, Star } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn, useUIVariant } from '@olwiba/cn';\n\nexport interface TestimonialCardProps extends React.HTMLAttributes<HTMLDivElement> {\n quote: string;\n name: string;\n role: string;\n company?: string;\n avatar?: string;\n initials?: string;\n rating?: number;\n}\n\nexport function TestimonialCard({\n quote,\n name,\n role,\n company,\n avatar,\n initials,\n rating,\n className,\n ...props\n}: TestimonialCardProps) {\n const mode = useUIVariant();\n\n const cardInner = (\n <div\n className={cn(\n 'flex flex-col gap-4 border bg-card p-6',\n mode === 'playful'\n ? 'rounded-2xl rotate-[0.3deg]'\n : mode === 'smooth'\n ? 'rounded-3xl'\n : 'rounded-2xl',\n mode !== 'playful' && className,\n )}\n {...(mode !== 'playful' ? props : {})}\n >\n <Quote className=\"size-4 text-muted-foreground/40\" />\n {rating != null && (\n <div className=\"flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n className={cn(\n 'size-4',\n i < rating\n ? 'fill-current text-amber-400'\n : 'text-muted-foreground/30',\n )}\n />\n ))}\n </div>\n )}\n <p className=\"flex-1 text-sm leading-relaxed\">{quote}</p>\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-9\">\n <AvatarImage src={avatar} alt={name} />\n <AvatarFallback className=\"text-xs\">{initials ?? name.slice(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n <div>\n <div className=\"text-sm font-medium leading-tight\">{name}</div>\n <div className=\"text-xs text-muted-foreground\">\n {role}{company ? ` · ${company}` : ''}\n </div>\n </div>\n </div>\n </div>\n );\n\n if (mode === 'playful') {\n return (\n <div className={cn('group/playful relative', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 rounded-2xl bg-border transition-transform duration-200 translate-x-[5px] translate-y-[5px] -rotate-[0.5deg] group-hover/playful:-rotate-[1.5deg] group-hover/playful:translate-x-[6px] group-hover/playful:translate-y-[6px]\"\n />\n {cardInner}\n </div>\n );\n }\n\n return cardInner;\n}\n","'use client';\n\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { TestimonialCard } from '../components/TestimonialCard';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface TestimonialsSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n testimonials: Array<{\n quote: string;\n name: string;\n role: string;\n company?: string;\n avatar?: string;\n initials?: string;\n rating?: number;\n }>;\n}\n\nexport function TestimonialsSection({\n title = 'Trusted by teams shipping real products',\n description = \"Here's what engineers and product teams say after using Olwiba in production.\",\n badge = 'Testimonials',\n testimonials,\n}: TestimonialsSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <StaggerChildren className=\"mt-12 columns-1 gap-4 sm:columns-2 lg:columns-3\">\n {testimonials.map((t) => (\n <div\n key={t.name}\n className=\"mb-4 break-inside-avoid transition-transform hover:-translate-y-0.5\"\n >\n <TestimonialCard\n quote={t.quote}\n name={t.name}\n role={t.role}\n company={t.company}\n avatar={t.avatar}\n initials={t.initials}\n rating={t.rating}\n />\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Github, Linkedin, Twitter } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\n\nexport interface TeamMember {\n name: string;\n role: string;\n bio: string;\n avatar?: string;\n initials: string;\n social?: {\n twitter?: string | null;\n github?: string | null;\n linkedin?: string | null;\n };\n}\n\nconst defaultTeam: TeamMember[] = [\n {\n name: 'Olivia Reed',\n role: 'Co-Founder & CEO',\n bio: 'Previously led product at two YC companies. Obsessed with design systems and developer experience.',\n avatar: 'https://ui.shadcn.com/avatars/01.png',\n initials: 'OR',\n social: { twitter: '#', github: '#', linkedin: '#' },\n },\n {\n name: 'Marcus Webb',\n role: 'Co-Founder & CTO',\n bio: 'Full-stack engineer with 12 years building UI infrastructure. Open source maintainer.',\n avatar: 'https://ui.shadcn.com/avatars/02.png',\n initials: 'MW',\n social: { twitter: '#', github: '#', linkedin: '#' },\n },\n {\n name: 'Priya Nair',\n role: 'Head of Design',\n bio: 'Interaction designer turned design systems engineer. Bridges the gap between Figma and production.',\n avatar: 'https://ui.shadcn.com/avatars/03.png',\n initials: 'PN',\n social: { twitter: '#', github: null, linkedin: '#' },\n },\n];\n\nexport interface TeamSectionProps {\n members?: TeamMember[];\n badge?: string;\n title?: string;\n description?: string;\n}\n\nexport function TeamSection({\n members = defaultTeam,\n badge = 'Team',\n title = 'The people behind Olwiba',\n description = 'A small team with deep experience in design systems, open source, and developer tooling.',\n}: TeamSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n <div className=\"text-center\">\n <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n <p className=\"mx-auto mt-4 max-w-xl text-pretty text-muted-foreground\">\n {description}\n </p>\n </div>\n\n <div className=\"mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n {members.map((member) => (\n <div key={member.name} className=\"rounded-2xl border bg-muted/40 p-5\">\n <div className=\"flex items-start gap-4\">\n <Avatar className=\"size-12 rounded-xl\">\n <AvatarImage src={member.avatar} alt={member.name} />\n <AvatarFallback className=\"rounded-xl\">{member.initials}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"font-semibold leading-tight\">{member.name}</div>\n <div className=\"text-sm text-muted-foreground\">{member.role}</div>\n </div>\n </div>\n <p className=\"mt-3 text-sm leading-relaxed text-muted-foreground\">{member.bio}</p>\n {member.social && (\n <div className=\"mt-4 flex items-center gap-2\">\n {member.social.twitter && (\n <a href={member.social.twitter} aria-label=\"Twitter\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Twitter className=\"size-3.5\" />\n </a>\n )}\n {member.social.github && (\n <a href={member.social.github} aria-label=\"GitHub\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Github className=\"size-3.5\" />\n </a>\n )}\n {member.social.linkedin && (\n <a href={member.social.linkedin} aria-label=\"LinkedIn\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Linkedin className=\"size-3.5\" />\n </a>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger, cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface FaqSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n items: Array<{ question: string; answer: string }>;\n}\n\nexport function FaqSection({\n title = 'Frequently asked questions',\n description = 'Everything you need to know before getting started.',\n badge = 'FAQ',\n items,\n}: FaqSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-3xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <FadeIn direction=\"up\">\n <Accordion type=\"single\" collapsible className=\"mt-10 w-full\">\n {items.map((item, i) => (\n <AccordionItem key={i} value={`item-${i}`}>\n <AccordionTrigger className=\"text-left text-sm font-medium\">\n {item.question}\n </AccordionTrigger>\n <AccordionContent className=\"text-sm text-muted-foreground\">\n {item.answer}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </FadeIn>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface CountUpProps extends React.HTMLAttributes<HTMLSpanElement> {\n from?: number;\n to: number;\n duration?: number;\n decimals?: number;\n prefix?: string;\n suffix?: string;\n once?: boolean;\n}\n\nexport function CountUp({\n from = 0,\n to,\n duration = 1500,\n decimals = 0,\n prefix = '',\n suffix = '',\n once = true,\n className,\n ...props\n}: CountUpProps) {\n const ref = React.useRef<HTMLSpanElement>(null);\n const [value, setValue] = React.useState(from);\n const hasStarted = React.useRef(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && (!once || !hasStarted.current)) {\n hasStarted.current = true;\n const start = performance.now();\n\n const tick = (now: number) => {\n const elapsed = now - start;\n const progress = Math.min(elapsed / duration, 1);\n const eased = 1 - Math.pow(1 - progress, 3);\n setValue(from + (to - from) * eased);\n if (progress < 1) requestAnimationFrame(tick);\n };\n\n requestAnimationFrame(tick);\n }\n },\n { threshold: 0.5 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [from, to, duration, once]);\n\n return (\n <span ref={ref} className={cn(className)} {...props}>\n {prefix}{value.toFixed(decimals)}{suffix}\n </span>\n );\n}\n","'use client';\n\nimport { Separator, cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { CountUp } from '../motion/CountUp';\n\nexport interface StatsSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n stats: Array<{ value: string; label: string; description?: string }>;\n}\n\nfunction parseStatValue(value: string) {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)(.*)/);\n if (!match) return null;\n const num = parseFloat(match[1]);\n const suffix = match[2] || '';\n const decimals = match[1].includes('.') ? match[1].split('.')[1].length : 0;\n return { num, suffix, decimals };\n}\n\nfunction StatValue({ value }: { value: string }) {\n const parsed = parseStatValue(value);\n if (!parsed) return <>{value}</>;\n return <CountUp to={parsed.num} decimals={parsed.decimals} suffix={parsed.suffix} />;\n}\n\nexport function StatsSection({\n title = 'Built for scale, used in production',\n description,\n badge = 'By the numbers',\n stats,\n}: StatsSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n return (\n <section className={sectionClasses}>\n <div className=\"relative px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_bottom,hsl(var(--primary)/0.08),transparent_60%)]\" />\n <div className=\"relative mx-auto max-w-4xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <StaggerChildren className=\"mt-12 grid gap-px overflow-hidden rounded-2xl border bg-border sm:grid-cols-2 lg:grid-cols-4\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"flex flex-col gap-2 bg-card px-6 py-8\">\n <div className=\"text-4xl font-bold tracking-tight\">\n <StatValue value={stat.value} />\n </div>\n <div className=\"font-medium\">{stat.label}</div>\n {stat.description && (\n <>\n <Separator />\n <p className=\"text-sm text-muted-foreground\">{stat.description}</p>\n </>\n )}\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight, Mail } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\n\nexport interface NewsletterSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n placeholder?: string;\n submitLabel?: string;\n privacyHref?: string;\n privacyLabel?: string;\n successTitle?: string;\n successDescription?: string;\n onSubscribe?: (email: string) => void | Promise<void>;\n}\n\nconst defaults = {\n badge: 'Newsletter',\n title: 'Stay in the loop',\n description:\n 'New components, release notes, and product tips — straight to your inbox. No spam, unsubscribe any time.',\n placeholder: 'you@company.com',\n submitLabel: 'Subscribe',\n privacyHref: '#',\n privacyLabel: 'Privacy Policy',\n successTitle: \"You're on the list.\",\n successDescription: \"We'll be in touch soon.\",\n};\n\nexport function NewsletterSection({\n badge = defaults.badge,\n title = defaults.title,\n description = defaults.description,\n placeholder = defaults.placeholder,\n submitLabel = defaults.submitLabel,\n privacyHref = defaults.privacyHref,\n privacyLabel = defaults.privacyLabel,\n successTitle = defaults.successTitle,\n successDescription = defaults.successDescription,\n onSubscribe,\n}: NewsletterSectionProps = {}) {\n const [email, setEmail] = React.useState('');\n const [submitted, setSubmitted] = React.useState(false);\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n if (!email) return;\n await onSubscribe?.(email);\n setSubmitted(true);\n }\n\n return (\n <section className={sectionClasses}>\n <div className=\"relative px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,hsl(var(--primary)/0.1),transparent_60%)]\" />\n <div className=\"relative mx-auto max-w-xl text-center\">\n <div className=\"mb-4 flex items-center justify-center gap-2\">\n <div className=\"inline-flex h-8 w-8 items-center justify-center rounded-xl bg-primary/10 text-primary\">\n <Mail className=\"size-4\" />\n </div>\n <Badge variant=\"secondary\">\n {badge}\n </Badge>\n </div>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">{title}</h2>\n <p className=\"mx-auto mt-4 max-w-sm text-pretty text-muted-foreground\">{description}</p>\n\n {submitted ? (\n <div className=\"mt-8 rounded-2xl border bg-muted/50 px-6 py-5 text-sm\">\n <span className=\"font-medium\">{successTitle}</span>{' '}\n <span className=\"text-muted-foreground\">{successDescription}</span>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"mt-8 flex flex-col gap-3 sm:flex-row\">\n <input\n type=\"text\"\n name=\"company\"\n tabIndex={-1}\n autoComplete=\"off\"\n aria-hidden=\"true\"\n className=\"hidden\"\n />\n <Input\n type=\"email\"\n placeholder={placeholder}\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n className=\"flex-1\"\n />\n <Button type=\"submit\">\n {submitLabel}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n </form>\n )}\n\n <p className=\"mt-4 text-xs text-muted-foreground\">\n By subscribing you agree to our{' '}\n <a href={privacyHref} className=\"underline underline-offset-4 hover:text-foreground\">\n {privacyLabel}\n </a>\n .\n </p>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronDown, Mail, MessageSquare, Send, type LucideIcon } from 'lucide-react';\nimport { cn, Label, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\nimport { Textarea } from '../primitives/Textarea';\n\nexport type ContactInfoItem = {\n label: string;\n value: string;\n icon?: LucideIcon;\n};\n\nexport interface ContactSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n contactInfo?: ContactInfoItem[];\n privacyHref?: string;\n successTitle?: string;\n successDescription?: string;\n sendAnotherLabel?: string;\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void | Promise<void>;\n}\n\nconst PHONE_PREFIXES = [\n { label: 'US +1', value: '+1-US' },\n { label: 'NZ +64', value: '+64-NZ' },\n { label: 'AU +61', value: '+61-AU' },\n { label: 'UK +44', value: '+44-UK' },\n { label: 'CA +1', value: '+1-CA' },\n { label: 'EU', value: '+0-EU' },\n];\n\nconst defaults = {\n badge: 'Contact',\n title: \"Let's talk\",\n description:\n \"Have a question or want to work together? Fill in the form and you'll hear back from the person who built it.\",\n successTitle: 'Message sent',\n successDescription: \"Thanks for reaching out. You'll get a reply within one business day.\",\n sendAnotherLabel: 'Send another',\n};\n\nexport function ContactSection({\n badge = defaults.badge,\n title = defaults.title,\n description = defaults.description,\n contactInfo,\n privacyHref,\n successTitle = defaults.successTitle,\n successDescription = defaults.successDescription,\n sendAnotherLabel = defaults.sendAnotherLabel,\n onSubmit,\n}: ContactSectionProps = {}) {\n const [submitted, setSubmitted] = React.useState(false);\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n async function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n e.preventDefault();\n await onSubmit?.(e);\n setSubmitted(true);\n }\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n\n {/* Header */}\n <div className=\"mx-auto max-w-2xl text-center\">\n {badge && (\n <div className=\"mb-4 flex justify-center\">\n <Badge variant=\"secondary\">{badge}</Badge>\n </div>\n )}\n <h2 className=\"text-balance text-4xl font-semibold tracking-tight sm:text-5xl\">\n {title}\n </h2>\n <p className=\"mt-4 text-lg text-muted-foreground\">{description}</p>\n\n {contactInfo && contactInfo.length > 0 && (\n <div className=\"mt-8 flex flex-wrap justify-center gap-6\">\n {contactInfo.map(({ icon: Icon = Mail, label, value }) => (\n <div key={label} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Icon className=\"size-4 shrink-0\" />\n <span>{value}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Body */}\n {submitted ? (\n <div className=\"mx-auto mt-16 max-w-xl text-center\">\n <div className=\"mx-auto flex h-14 w-14 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <MessageSquare className=\"size-6\" />\n </div>\n <h3 className=\"mt-5 text-lg font-semibold\">{successTitle}</h3>\n <p className=\"mt-2 text-sm text-muted-foreground\">{successDescription}</p>\n <Button variant=\"outline\" size=\"sm\" className=\"mt-6\" onClick={() => setSubmitted(false)}>\n {sendAnotherLabel}\n </Button>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"mx-auto mt-16 max-w-xl sm:mt-20\">\n {/* Honeypot */}\n <input\n type=\"text\"\n name=\"_hp\"\n tabIndex={-1}\n autoComplete=\"off\"\n aria-hidden=\"true\"\n className=\"hidden\"\n />\n\n <div className=\"grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2\">\n {/* First name */}\n <div>\n <Label htmlFor=\"contact-first\" className=\"block text-sm/6 font-semibold\">\n First name\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-first\"\n name=\"firstName\"\n autoComplete=\"given-name\"\n placeholder=\"First\"\n required\n />\n </div>\n </div>\n\n {/* Last name */}\n <div>\n <Label htmlFor=\"contact-last\" className=\"block text-sm/6 font-semibold\">\n Last name\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-last\"\n name=\"lastName\"\n autoComplete=\"family-name\"\n placeholder=\"Last\"\n required\n />\n </div>\n </div>\n\n {/* Company */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-company\" className=\"block text-sm/6 font-semibold\">\n Company{' '}\n <span className=\"font-normal text-muted-foreground\">(optional)</span>\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-company\"\n name=\"company\"\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n />\n </div>\n </div>\n\n {/* Email */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-email\" className=\"block text-sm/6 font-semibold\">\n Email\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-email\"\n name=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@company.com\"\n required\n />\n </div>\n </div>\n\n {/* Phone */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-phone\" className=\"block text-sm/6 font-semibold\">\n Phone number{' '}\n <span className=\"font-normal text-muted-foreground\">(optional)</span>\n </Label>\n <div className=\"mt-2.5 flex overflow-hidden rounded-md border border-input bg-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\">\n <div className=\"relative flex shrink-0 items-center border-r border-input\">\n <select\n name=\"countryCode\"\n aria-label=\"Country code\"\n defaultValue=\"+1-US\"\n className=\"h-full appearance-none bg-transparent py-2 pl-3 pr-7 text-sm text-foreground focus:outline-none\"\n >\n {PHONE_PREFIXES.map(({ label, value }) => (\n <option key={value} value={value}>\n {label}\n </option>\n ))}\n </select>\n <ChevronDown className=\"pointer-events-none absolute right-1.5 size-3.5 shrink-0 text-muted-foreground\" />\n </div>\n <input\n id=\"contact-phone\"\n name=\"phone\"\n type=\"tel\"\n placeholder=\"123-456-7890\"\n className=\"min-w-0 grow bg-transparent px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none\"\n />\n </div>\n </div>\n\n {/* Message */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-message\" className=\"block text-sm/6 font-semibold\">\n Message\n </Label>\n <div className=\"mt-2.5\">\n <Textarea\n id=\"contact-message\"\n name=\"message\"\n rows={4}\n placeholder=\"Tell us what you're working on...\"\n className=\"resize-none\"\n required\n />\n </div>\n </div>\n\n {/* Privacy toggle */}\n {privacyHref && (\n <div className=\"flex gap-x-4 sm:col-span-2\">\n <div className=\"flex h-6 items-center\">\n <div className=\"group relative inline-flex h-5 w-8 shrink-0 cursor-pointer rounded-full border border-input bg-muted p-px transition-colors duration-200 ease-in-out focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 has-[:checked]:border-primary has-[:checked]:bg-primary\">\n <span className=\"size-4 rounded-full bg-background shadow-sm transition-transform duration-200 ease-in-out group-has-[:checked]:translate-x-3\" />\n <input\n id=\"contact-privacy\"\n name=\"privacy\"\n type=\"checkbox\"\n required\n aria-label=\"Agree to privacy policy\"\n className=\"absolute inset-0 size-full cursor-pointer appearance-none focus:outline-none\"\n />\n </div>\n </div>\n <Label\n htmlFor=\"contact-privacy\"\n className=\"cursor-pointer text-sm font-normal leading-snug text-muted-foreground\"\n >\n By selecting this, you agree to our{' '}\n <a\n href={privacyHref}\n className=\"font-medium text-foreground underline-offset-2 hover:underline\"\n >\n privacy policy\n </a>\n .\n </Label>\n </div>\n )}\n </div>\n\n <div className=\"mt-10\">\n <Button type=\"submit\" className=\"w-full\">\n Let's talk\n <Send className=\"ml-2 size-4\" />\n </Button>\n </div>\n </form>\n )}\n\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface ComparisonColumn {\n label: string;\n cost: string;\n costDetail?: string;\n items: string[];\n highlighted?: boolean;\n}\n\nexport interface ComparisonSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n columns: ComparisonColumn[];\n}\n\nexport function ComparisonSection({\n badge = 'The math',\n title = 'The math is simple',\n description,\n columns,\n}: ComparisonSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <StaggerChildren className=\"mt-12 grid gap-4 sm:grid-cols-3\">\n {columns.map((col) => (\n <div\n key={col.label}\n className={cn(\n 'flex h-full flex-col rounded-2xl border p-6',\n col.highlighted\n ? 'border-primary bg-primary/10 ring-1 ring-primary/20'\n : 'border-border bg-muted/40',\n )}\n >\n <div className=\"mb-6\">\n <p\n className={cn(\n 'text-xs font-semibold uppercase tracking-widest',\n col.highlighted ? 'text-primary/80' : 'text-muted-foreground',\n )}\n >\n {col.label}\n </p>\n <p className=\"mt-2 text-2xl font-bold tracking-tight text-foreground\">\n {col.cost}\n </p>\n {col.costDetail && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {col.costDetail}\n </p>\n )}\n </div>\n\n <ul className=\"flex flex-col gap-3\">\n {col.items.map((item) => (\n <li key={item} className=\"flex items-start gap-2.5\">\n {col.highlighted ? (\n <span className=\"mt-0.5 shrink-0 text-sm leading-none\">⚡</span>\n ) : (\n <span className=\"mt-0.5 shrink-0 text-sm leading-none\">❌</span>\n )}\n <span\n className={cn(\n 'text-sm leading-snug',\n col.highlighted ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {item}\n </span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Check, X } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface QualificationItem {\n text: string;\n}\n\nexport interface QualificationColumn {\n heading: string;\n variant: 'positive' | 'negative';\n items: string[];\n}\n\nexport interface QualificationSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n columns: [QualificationColumn, QualificationColumn];\n}\n\nexport function QualificationSection({\n badge = 'Who it is for',\n title = 'Is this for you?',\n description,\n columns,\n}: QualificationSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <FadeIn direction=\"up\" className=\"mt-12 grid gap-6 sm:grid-cols-2\">\n {columns.map((col) => {\n const isPositive = col.variant === 'positive';\n const Icon = isPositive ? Check : X;\n\n return (\n <div\n key={col.heading}\n className={cn(\n 'flex flex-col gap-4 rounded-2xl border p-6',\n isPositive ? 'border-border bg-muted/30' : 'border-border bg-muted/10',\n )}\n >\n <h3 className=\"text-sm font-semibold uppercase tracking-widest text-muted-foreground\">\n {col.heading}\n </h3>\n <ul className=\"flex flex-col gap-3\">\n {col.items.map((item) => (\n <li key={item} className=\"flex items-start gap-3\">\n <span\n className={cn(\n 'mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full',\n isPositive\n ? 'bg-emerald-500/15 text-emerald-600 dark:text-emerald-400'\n : 'bg-rose-500/15 text-rose-600 dark:text-rose-400',\n )}\n >\n <Icon className=\"size-3\" />\n </span>\n <span className=\"text-sm leading-relaxed text-foreground/80\">{item}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </FadeIn>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Menu } from 'lucide-react';\nimport { Button, Separator, Sheet, SheetContent, SheetTrigger } from '@olwiba/cn';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface NavbarProps {\n brand: { name: string; logo?: React.ReactNode; href?: string };\n navLinks: Array<{ label: string; href: string }>;\n cta?: {\n primary?: { label: string; href: string };\n secondary?: { label: string; href: string };\n };\n /** Icon-button controls rendered right-of-nav, left-of-CTA. Pass e.g. ModeSwitchMinimal, ThemeSwitchMinimal. */\n controls?: React.ReactNode[];\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function Navbar({\n brand,\n navLinks,\n cta,\n controls,\n renderLink = defaultRenderLink,\n}: NavbarProps) {\n const [open, setOpen] = React.useState(false);\n const brandHref = brand.href ?? '/';\n const hasRightContent = controls?.length || cta?.primary || cta?.secondary;\n const closeMobileMenu = React.useCallback(() => setOpen(false), []);\n\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <nav className=\"grid h-16 grid-cols-[1fr_auto_1fr] items-center px-6\">\n {/* Brand — left column */}\n {renderLink({\n href: brandHref,\n children: (\n <span className=\"flex items-center gap-2 font-semibold\">\n {brand.logo}\n <span>{brand.name}</span>\n </span>\n ),\n })}\n\n {/* Desktop nav links — center column when right content exists, else shift right */}\n <div className={`hidden items-center gap-1 md:flex ${!hasRightContent ? 'col-span-2 justify-end' : ''}`}>\n {navLinks.map((link) => (\n <span key={link.label}>\n {renderLink({\n href: link.href,\n className: 'rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground',\n children: link.label,\n })}\n </span>\n ))}\n </div>\n\n {/* Desktop right — controls + CTA */}\n {hasRightContent && (\n <div className=\"hidden items-center justify-end gap-2 md:flex\">\n {controls?.map((control, i) => (\n <React.Fragment key={i}>{control}</React.Fragment>\n ))}\n {(cta?.secondary || cta?.primary) && controls?.length ? (\n <div className=\"mx-1 h-4 w-px bg-border\" />\n ) : null}\n {cta?.secondary &&\n renderLink({\n href: cta.secondary.href,\n children: <Button variant=\"ghost\" size=\"sm\">{cta.secondary.label}</Button>,\n })}\n {cta?.primary &&\n renderLink({\n href: cta.primary.href,\n children: <Button size=\"sm\">{cta.primary.label}</Button>,\n })}\n </div>\n )}\n\n {/* Mobile drawer — trigger on the right, panel slides in from the left */}\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"col-start-3 justify-self-end md:hidden\">\n <Menu className=\"size-5\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-72\">\n {/* Brand row alone at the top — leaves the top-right corner to the built-in close */}\n <div className=\"flex items-center pb-4\">\n <span onClickCapture={closeMobileMenu} className=\"cursor-pointer\">\n {renderLink({\n href: brandHref,\n children: (\n <span className=\"flex items-center gap-2 font-semibold\">\n {brand.logo}\n <span>{brand.name}</span>\n </span>\n ),\n })}\n </span>\n </div>\n {controls?.length ? (\n <div className=\"mb-4 flex w-full items-center justify-between gap-1\">\n {controls.map((control, i) => (\n <React.Fragment key={i}>{control}</React.Fragment>\n ))}\n </div>\n ) : null}\n <Separator />\n <nav className=\"mt-4 flex flex-col gap-1\">\n {navLinks.map((link) => (\n <span key={link.label} onClickCapture={closeMobileMenu}>\n {renderLink({\n href: link.href,\n className: 'block rounded-md px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground',\n children: link.label,\n })}\n </span>\n ))}\n </nav>\n <div className=\"mt-6 flex flex-col gap-2\">\n {cta?.secondary && (\n <span onClickCapture={closeMobileMenu}>\n {renderLink({\n href: cta.secondary.href,\n children: <Button variant=\"outline\" className=\"w-full\">{cta.secondary.label}</Button>,\n })}\n </span>\n )}\n {cta?.primary && (\n <span onClickCapture={closeMobileMenu}>\n {renderLink({\n href: cta.primary.href,\n children: <Button className=\"w-full\">{cta.primary.label}</Button>,\n })}\n </span>\n )}\n </div>\n </SheetContent>\n </Sheet>\n </nav>\n </section>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { StatusIndicator } from '@olwiba/cn';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface FooterProps {\n brand: { name: string; logo?: ReactNode; href?: string };\n navLinks?: Array<{ label: string; href: string }>;\n socialLinks?: Array<{ label: string; href: string; icon: ReactNode }>;\n legal?: string;\n status?: { label: string; operational?: boolean };\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function Footer({\n brand,\n navLinks,\n socialLinks,\n legal,\n status,\n renderLink = defaultRenderLink,\n}: FooterProps) {\n const brandHref = brand.href ?? '/';\n const copyrightText = legal ?? `\\u00A9 ${new Date().getFullYear()} ${brand.name}. All rights reserved.`;\n\n return (\n <footer className=\"overflow-hidden rounded-2xl border bg-card text-foreground\">\n <div className=\"mx-auto max-w-7xl px-6 py-20 sm:py-24 lg:px-8\">\n {/* Brand */}\n <div className=\"flex justify-center\">\n {renderLink({\n href: brandHref,\n className: 'flex items-center gap-2',\n children: (\n <>\n {brand.logo}\n <span className=\"text-lg font-semibold text-foreground\">{brand.name}</span>\n </>\n ),\n })}\n </div>\n\n {/* Nav links */}\n {navLinks && navLinks.length > 0 && (\n <nav className=\"mt-10 flex flex-wrap justify-center gap-x-12 gap-y-3\" aria-label=\"Footer\">\n {navLinks.map(({ label, href }) => (\n <div key={label}>\n {renderLink({\n href,\n className: 'text-sm/6 text-muted-foreground transition-colors hover:text-foreground',\n children: label,\n })}\n </div>\n ))}\n </nav>\n )}\n\n {/* Social icons */}\n {socialLinks && socialLinks.length > 0 && (\n <div className=\"mt-10 flex justify-center gap-x-10\">\n {socialLinks.map(({ label, href, icon }) => (\n <a\n key={label}\n href={href}\n aria-label={label}\n className=\"text-muted-foreground transition-colors hover:text-foreground\"\n >\n {icon}\n </a>\n ))}\n </div>\n )}\n\n {/* Copyright */}\n <p className=\"mt-10 text-center text-sm/6 text-muted-foreground/70\">\n {copyrightText}\n </p>\n\n {/* Status */}\n {status && (\n <div className=\"mt-4 flex justify-center\">\n <div className=\"inline-flex items-center rounded-full border bg-muted/40 px-3 py-1 text-xs text-muted-foreground\">\n <StatusIndicator\n pulse={status.operational !== false}\n dotClassName={status.operational !== false ? 'text-emerald-500' : 'text-destructive'}\n size=\"sm\"\n >\n {status.label}\n </StatusIndicator>\n </div>\n </div>\n )}\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface LogoStripProps {\n logos: Array<{ src: string; darkSrc?: string; alt: string; href?: string }>;\n label?: string;\n speed?: 'slow' | 'normal' | 'fast';\n}\n\nconst speedDuration = {\n slow: '60s',\n normal: '40s',\n fast: '25s',\n} as const;\n\nexport function LogoStrip({\n logos,\n label,\n speed = 'normal',\n}: LogoStripProps) {\n const duration = speedDuration[speed];\n\n return (\n <FadeIn direction=\"up\">\n <section className=\"overflow-hidden py-8\">\n {label && (\n <p className=\"mb-6 text-center text-sm text-muted-foreground\">{label}</p>\n )}\n <div\n className=\"relative\"\n style={{\n maskImage: 'linear-gradient(to right, transparent, black 10%, black 90%, transparent)',\n WebkitMaskImage: 'linear-gradient(to right, transparent, black 10%, black 90%, transparent)',\n }}\n >\n <div\n className=\"flex w-max gap-12\"\n style={{\n animation: `logo-strip-scroll ${duration} linear infinite`,\n }}\n >\n {/* Render logos twice for seamless loop */}\n {[...logos, ...logos].map((logo, i) => {\n const img = logo.darkSrc ? (\n <>\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0 dark:hidden\"\n />\n <img\n src={logo.darkSrc}\n alt={logo.alt}\n className=\"hidden h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0 dark:block\"\n />\n </>\n ) : (\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0\"\n />\n );\n\n return logo.href ? (\n <a\n key={`${logo.alt}-${i}`}\n href={logo.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex shrink-0 items-center\"\n >\n {img}\n </a>\n ) : (\n <div key={`${logo.alt}-${i}`} className=\"flex shrink-0 items-center\">\n {img}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n\n <style>{`\n @keyframes logo-strip-scroll {\n from { transform: translateX(0); }\n to { transform: translateX(-50%); }\n }\n `}</style>\n </FadeIn>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\n// ─── Grid ─────────────────────────────────────────────────────────────────────\n\ninterface GridUnderlayProps extends React.SVGAttributes<SVGElement> {\n variant: 'dots' | 'lines' | 'cross';\n size?: number;\n className?: string;\n}\n\nfunction GridUnderlay({ variant, size = 24, className, ...props }: GridUnderlayProps) {\n const id = React.useId();\n\n const pattern =\n variant === 'dots' ? (\n <circle cx={size / 2} cy={size / 2} r={1} fill=\"currentColor\" />\n ) : variant === 'lines' ? (\n <path d={`M ${size} 0 L 0 0 0 ${size}`} fill=\"none\" stroke=\"currentColor\" strokeWidth={0.5} />\n ) : (\n <>\n <line x1={size / 2} y1={0} x2={size / 2} y2={size} stroke=\"currentColor\" strokeWidth={0.5} />\n <line x1={0} y1={size / 2} x2={size} y2={size / 2} stroke=\"currentColor\" strokeWidth={0.5} />\n </>\n );\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full text-foreground/15', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={size} height={size} patternUnits=\"userSpaceOnUse\">\n {pattern}\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </svg>\n );\n}\n\n// ─── Glow ─────────────────────────────────────────────────────────────────────\n\nconst blurClass = { sm: 'blur-xl', md: 'blur-2xl', lg: 'blur-3xl', xl: 'blur-[80px]' } as const;\n\ninterface GlowUnderlayProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: number;\n color?: string;\n followCursor?: boolean;\n blur?: keyof typeof blurClass;\n}\n\nfunction GlowUnderlay({\n size = 400,\n color = 'color-mix(in oklch, var(--primary) 45%, transparent)',\n followCursor = false,\n blur = 'lg',\n className,\n style,\n ...props\n}: GlowUnderlayProps) {\n const [pos, setPos] = React.useState({ x: '50%', y: '50%' });\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!followCursor) return;\n const handleMouseMove = (e: MouseEvent) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPos({ x: `${e.clientX - rect.left}px`, y: `${e.clientY - rect.top}px` });\n };\n window.addEventListener('mousemove', handleMouseMove);\n return () => window.removeEventListener('mousemove', handleMouseMove);\n }, [followCursor]);\n\n return (\n <div ref={containerRef} className={cn('pointer-events-none absolute inset-0 overflow-hidden', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className={cn('absolute rounded-full', blurClass[blur])}\n style={{\n width: size,\n height: size,\n background: color,\n left: pos.x,\n top: pos.y,\n transform: 'translate(-50%, -50%)',\n ...style,\n }}\n />\n </div>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\ntype UnderlayVariant = 'dots' | 'lines' | 'cross' | 'glow';\n\ntype UnderlayProps =\n | ({ variant: 'dots' | 'lines' | 'cross' } & Omit<GridUnderlayProps, 'variant'>)\n | ({ variant: 'glow' } & Omit<GlowUnderlayProps, 'variant'>);\n\nexport function Underlay(props: UnderlayProps) {\n if (props.variant === 'glow') {\n return <GlowUnderlay {...(props as GlowUnderlayProps)} />;\n }\n return <GridUnderlay {...(props as GridUnderlayProps)} />;\n}\n\nexport type { UnderlayProps, UnderlayVariant };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\nimport { Loader2 } from 'lucide-react';\n\n// ─── Dim ──────────────────────────────────────────────────────────────────────\n\ninterface DimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n opacity?: number;\n}\n\nfunction DimOverlay({ opacity = 0.5, className, style, ...props }: DimOverlayProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('absolute inset-0 bg-background', className)}\n style={{ opacity, ...style }}\n {...props}\n />\n );\n}\n\n// ─── Scrim ────────────────────────────────────────────────────────────────────\n\ntype ScrimDirection = 'top' | 'bottom' | 'left' | 'right';\n\ninterface ScrimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: ScrimDirection;\n color?: string;\n}\n\nconst scrimGradients: Record<ScrimDirection, string> = {\n bottom: 'to bottom',\n top: 'to top',\n left: 'to left',\n right: 'to right',\n};\n\nfunction ScrimOverlay({ direction = 'bottom', color = 'var(--background)', className, style, ...props }: ScrimOverlayProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-x-0 bottom-0 h-1/2', className)}\n style={{\n background: `linear-gradient(${scrimGradients[direction]}, transparent, ${color})`,\n ...style,\n }}\n {...props}\n />\n );\n}\n\n// ─── Loading ──────────────────────────────────────────────────────────────────\n\ninterface LoadingOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nfunction LoadingOverlay({ label, className, ...props }: LoadingOverlayProps) {\n return (\n <div\n role=\"status\"\n className={cn('absolute inset-0 flex flex-col items-center justify-center gap-2 bg-background/80 backdrop-blur-sm', className)}\n {...props}\n >\n <Loader2 className=\"size-5 animate-spin text-muted-foreground\" />\n {label && <p className=\"text-xs text-muted-foreground\">{label}</p>}\n </div>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\ntype OverlayVariant = 'dim' | 'scrim' | 'loading';\n\ntype OverlayProps =\n | ({ variant: 'dim' } & DimOverlayProps)\n | ({ variant: 'scrim' } & ScrimOverlayProps)\n | ({ variant: 'loading' } & LoadingOverlayProps);\n\nexport function Overlay(props: OverlayProps) {\n if (props.variant === 'dim') return <DimOverlay {...(props as DimOverlayProps)} />;\n if (props.variant === 'scrim') return <ScrimOverlay {...(props as ScrimOverlayProps)} />;\n return <LoadingOverlay {...(props as LoadingOverlayProps)} />;\n}\n\nexport type { OverlayProps, OverlayVariant };\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface AnimatedPillProps {\n labels: string[];\n interval?: number;\n className?: string;\n}\n\nexport function AnimatedPill({ labels, interval = 3800, className }: AnimatedPillProps) {\n const pillRef = useRef<HTMLSpanElement>(null);\n const textRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n const pill = pillRef.current;\n const text = textRef.current;\n if (!pill || !text || labels.length < 2) return;\n\n pill.style.width = pill.offsetWidth + 'px';\n pill.dataset.w = String(pill.offsetWidth);\n\n let idx = 0;\n\n const cycle = () => {\n idx = (idx + 1) % labels.length;\n\n text.style.transition = 'opacity 140ms ease';\n text.style.opacity = '0';\n\n setTimeout(() => {\n text.textContent = labels[idx] ?? '';\n\n const oldW = parseFloat(pill.dataset.w ?? '0');\n pill.style.transition = 'none';\n pill.style.width = 'auto';\n const newW = pill.offsetWidth;\n\n pill.style.width = oldW + 'px';\n void pill.offsetWidth;\n\n pill.style.transition = 'width 280ms cubic-bezier(0.4, 0, 0.2, 1)';\n pill.style.width = newW + 'px';\n pill.dataset.w = String(newW);\n\n setTimeout(() => {\n text.style.transition = 'opacity 140ms ease';\n text.style.opacity = '1';\n }, 260);\n }, 150);\n };\n\n const id = setInterval(cycle, interval);\n return () => clearInterval(id);\n }, [labels, interval]);\n\n if (!labels.length) return null;\n\n return (\n <span\n ref={pillRef}\n className={cn(\n 'inline-flex items-center overflow-hidden whitespace-nowrap rounded-full border bg-secondary px-2.5 py-0.5 text-xs font-semibold text-secondary-foreground',\n className,\n )}\n >\n <span ref={textRef}>{labels[0]}</span>\n </span>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface PageTransitionProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'fade' | 'slide-up' | 'slide-down';\n duration?: number;\n children: React.ReactNode;\n}\n\nexport function PageTransition({\n variant = 'fade',\n duration = 300,\n children,\n className,\n style,\n ...props\n}: PageTransitionProps) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n const id = requestAnimationFrame(() => setMounted(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n const initial: React.CSSProperties =\n variant === 'slide-up'\n ? { opacity: 0, transform: 'translateY(16px)' }\n : variant === 'slide-down'\n ? { opacity: 0, transform: 'translateY(-16px)' }\n : { opacity: 0 };\n\n const entered: React.CSSProperties = { opacity: 1, transform: 'translateY(0)' };\n\n return (\n <div\n className={cn(className)}\n style={{\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n ...(mounted ? entered : initial),\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n arrayMove,\n horizontalListSortingStrategy,\n rectSortingStrategy,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { cn } from '@olwiba/cn';\n\nexport interface SortableProps {\n /** Item ids in render order — one per child, same order as `children`. */\n items: string[];\n /** Fired with the new id order after a drag completes. */\n onReorder: (items: string[]) => void;\n /** One element per id — pairing is by position, so keep orders aligned. */\n children: React.ReactNode;\n /** Layout of the sortable collection. @default 'vertical' */\n direction?: 'vertical' | 'horizontal' | 'grid';\n disabled?: boolean;\n className?: string;\n itemClassName?: string;\n}\n\nconst strategies = {\n vertical: verticalListSortingStrategy,\n horizontal: horizontalListSortingStrategy,\n grid: rectSortingStrategy,\n} as const;\n\nconst containerClasses = {\n vertical: 'flex flex-col gap-2',\n horizontal: 'flex gap-2',\n grid: 'grid gap-2',\n} as const;\n\nfunction SortableItem({\n id,\n disabled,\n className,\n children,\n}: {\n id: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id, disabled });\n\n return (\n <div\n ref={setNodeRef}\n style={{ transform: CSS.Transform.toString(transform), transition }}\n className={cn(\n 'touch-none',\n !disabled && 'cursor-grab active:cursor-grabbing',\n isDragging && 'relative z-10 opacity-80',\n className,\n )}\n {...attributes}\n {...listeners}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Drag-to-reorder behavior — wraps any children and makes them sortable by\n * pointer or keyboard. A mechanic, not a list component: feed it cards, rows,\n * or tiles. Controlled: pass `items` (ids in order) and apply the new order\n * in `onReorder`.\n */\nexport function Sortable({\n items,\n onReorder,\n children,\n direction = 'vertical',\n disabled,\n className,\n itemClassName,\n}: SortableProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const oldIndex = items.indexOf(String(active.id));\n const newIndex = items.indexOf(String(over.id));\n if (oldIndex === -1 || newIndex === -1) return;\n onReorder(arrayMove(items, oldIndex, newIndex));\n };\n\n const childArray = React.Children.toArray(children);\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={items} strategy={strategies[direction]}>\n <div className={cn(containerClasses[direction], className)}>\n {childArray.map((child, i) =>\n items[i] === undefined ? null : (\n <SortableItem key={items[i]} id={items[i]} disabled={disabled} className={itemClassName}>\n {child}\n </SortableItem>\n ),\n )}\n </div>\n </SortableContext>\n </DndContext>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Search } from 'lucide-react';\nimport {\n Badge,\n Button,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n cn,\n} from '@olwiba/cn';\n\nexport interface SpotlightItem {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n onSelect: () => void;\n}\n\nexport interface SpotlightGroup {\n heading: string;\n items: SpotlightItem[];\n}\n\nexport interface SpotlightProps {\n groups: SpotlightGroup[];\n placeholder?: string;\n trigger?: React.ReactNode;\n triggerClassName?: string;\n shortcut?: string;\n}\n\nexport function Spotlight({\n groups,\n placeholder = 'Search anything...',\n trigger,\n triggerClassName,\n shortcut = '⌘K',\n}: SpotlightProps) {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((v) => !v);\n }\n };\n document.addEventListener('keydown', down);\n return () => document.removeEventListener('keydown', down);\n }, []);\n\n return (\n <>\n {trigger ? (\n <div onClick={() => setOpen(true)}>{trigger}</div>\n ) : (\n <Button\n variant=\"outline\"\n onClick={() => setOpen(true)}\n className={cn('w-64 justify-between text-muted-foreground', triggerClassName)}\n >\n <span className=\"flex items-center gap-2\">\n <Search className=\"size-4\" />\n {placeholder}\n </span>\n <Badge variant=\"secondary\" className=\"font-mono text-xs\">{shortcut}</Badge>\n </Button>\n )}\n\n <CommandDialog open={open} onOpenChange={setOpen}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n {groups.map((group, i) => (\n <React.Fragment key={group.heading}>\n {i > 0 && <CommandSeparator />}\n <CommandGroup heading={group.heading}>\n {group.items.map((item) => (\n <CommandItem\n key={item.id}\n onSelect={() => { item.onSelect(); setOpen(false); }}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.description && (\n <span className=\"ml-2 text-xs text-muted-foreground\">{item.description}</span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n </React.Fragment>\n ))}\n </CommandList>\n </CommandDialog>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, cn } from '@olwiba/cn';\n\nexport interface DockItem {\n icon: LucideIcon;\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface DockProps extends React.HTMLAttributes<HTMLDivElement> {\n items: DockItem[];\n iconSize?: number;\n magnification?: number;\n}\n\nconst BASE = 40;\nconst MAGNIFY_RADIUS = 80;\n\nexport function Dock({ items, iconSize = BASE, magnification = 1.7, className, ...props }: DockProps) {\n const [mouseX, setMouseX] = React.useState<number | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n function getScale(index: number): number {\n if (mouseX === null || !containerRef.current) return 1;\n const container = containerRef.current;\n const buttons = container.querySelectorAll<HTMLElement>('[data-dock-item]');\n const btn = buttons[index];\n if (!btn) return 1;\n const rect = btn.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const distance = Math.abs(mouseX - centerX);\n if (distance > MAGNIFY_RADIUS) return 1;\n const t = 1 - distance / MAGNIFY_RADIUS;\n return 1 + (magnification - 1) * t;\n }\n\n return (\n <TooltipProvider delayDuration={0}>\n <div\n ref={containerRef}\n onMouseMove={(e) => setMouseX(e.clientX)}\n onMouseLeave={() => setMouseX(null)}\n className={cn(\n 'inline-flex items-end gap-2 rounded-2xl border bg-background/80 px-4 py-3 shadow-lg backdrop-blur-md',\n className,\n )}\n {...props}\n >\n {items.map((item, i) => {\n const scale = getScale(i);\n const size = iconSize * scale;\n\n const button = (\n <Tooltip key={item.label}>\n <TooltipTrigger asChild>\n <button\n data-dock-item\n onClick={item.onClick}\n className=\"flex items-center justify-center rounded-xl bg-muted text-foreground transition-colors hover:bg-accent\"\n style={{\n width: size,\n height: size,\n transition: 'width 100ms ease, height 100ms ease',\n transformOrigin: 'bottom center',\n }}\n aria-label={item.label}\n >\n <item.icon style={{ width: size * 0.5, height: size * 0.5 }} />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\" sideOffset={8}>\n <p>{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n\n if (item.href) {\n return (\n <a key={item.label} href={item.href}>\n {button}\n </a>\n );\n }\n\n return button;\n })}\n </div>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n ContextMenu as RadixContextMenu,\n} from '@olwiba/cn';\n\nexport interface ContextMenuAction {\n type: 'item';\n label: string;\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void;\n}\n\nexport interface ContextMenuSeparatorDef {\n type: 'separator';\n}\n\nexport interface ContextMenuLabelDef {\n type: 'label';\n label: string;\n}\n\nexport interface ContextMenuSubDef {\n type: 'sub';\n label: string;\n items: ContextMenuDef[];\n}\n\nexport type ContextMenuDef = ContextMenuAction | ContextMenuSeparatorDef | ContextMenuLabelDef | ContextMenuSubDef;\n\nexport interface ContextMenuProps {\n items: ContextMenuDef[];\n children: React.ReactNode;\n}\n\nfunction renderItems(items: ContextMenuDef[]) {\n return items.map((item, i) => {\n if (item.type === 'separator') return <ContextMenuSeparator key={i} />;\n if (item.type === 'label') return <ContextMenuLabel key={i}>{item.label}</ContextMenuLabel>;\n if (item.type === 'sub') {\n return (\n <ContextMenuSub key={i}>\n <ContextMenuSubTrigger>{item.label}</ContextMenuSubTrigger>\n <ContextMenuSubContent>{renderItems(item.items)}</ContextMenuSubContent>\n </ContextMenuSub>\n );\n }\n return (\n <ContextMenuItem key={i} disabled={item.disabled} onSelect={item.onSelect}>\n {item.label}\n {item.shortcut && <ContextMenuShortcut>{item.shortcut}</ContextMenuShortcut>}\n </ContextMenuItem>\n );\n });\n}\n\nexport function ContextMenu({ items, children }: ContextMenuProps) {\n return (\n <RadixContextMenu>\n <ContextMenuTrigger asChild>{children}</ContextMenuTrigger>\n <ContextMenuContent>\n {renderItems(items)}\n </ContextMenuContent>\n </RadixContextMenu>\n );\n}\n\nexport {\n ContextMenuCheckboxItem,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n};\n","'use client';\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@olwiba/cn';\nimport type { UseConfirmReturn } from '../hooks/use-confirm';\n\nexport interface ConfirmDialogProps extends Pick<UseConfirmReturn, 'isOpen' | 'options' | 'handleConfirm' | 'handleCancel'> {\n destructive?: boolean;\n}\n\nexport function ConfirmDialog({ isOpen, options, handleConfirm, handleCancel, destructive = false }: ConfirmDialogProps) {\n return (\n <AlertDialog open={isOpen} onOpenChange={(open) => { if (!open) handleCancel(); }}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{options.title ?? 'Are you sure?'}</AlertDialogTitle>\n {options.description && (\n <AlertDialogDescription>{options.description}</AlertDialogDescription>\n )}\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancel}>\n {options.cancelLabel ?? 'Cancel'}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleConfirm}\n className={destructive ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90' : undefined}\n >\n {options.confirmLabel ?? 'Confirm'}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface Hotkey {\n key: string;\n ctrl?: boolean;\n meta?: boolean;\n shift?: boolean;\n alt?: boolean;\n handler: () => void;\n description?: string;\n}\n\ninterface RegisterHotkeysProps {\n hotkeys: Hotkey[];\n}\n\nexport function RegisterHotkeys({ hotkeys }: RegisterHotkeysProps) {\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n for (const hotkey of hotkeys) {\n const matches =\n event.key.toLowerCase() === hotkey.key.toLowerCase() &&\n !!event.ctrlKey === !!hotkey.ctrl &&\n !!event.metaKey === !!hotkey.meta &&\n !!event.shiftKey === !!hotkey.shift &&\n !!event.altKey === !!hotkey.alt;\n\n if (matches) {\n event.preventDefault();\n hotkey.handler();\n break;\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkeys]);\n\n return null;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface UseControlledOpenReturn {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\n/**\n * Simple open/close state hook for modals, drawers, dropdowns, and any toggleable UI.\n *\n * @example\n * const { isOpen, open, close } = useControlledOpen();\n * return (\n * <>\n * <Button onClick={open}>Open</Button>\n * <Dialog open={isOpen} onOpenChange={setIsOpen}>...</Dialog>\n * </>\n * );\n */\nexport function useControlledOpen(defaultOpen = false): UseControlledOpenReturn {\n const [isOpen, setIsOpen] = React.useState(defaultOpen);\n\n const open = React.useCallback(() => setIsOpen(true), []);\n const close = React.useCallback(() => setIsOpen(false), []);\n const toggle = React.useCallback(() => setIsOpen((prev) => !prev), []);\n\n return { isOpen, open, close, toggle, setIsOpen };\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '@olwiba/cn';\nimport { RegisterHotkeys } from './RegisterHotkeys';\nimport { useControlledOpen } from '../hooks/use-controlled-open';\n\nexport interface CommandMenuItem {\n id: string;\n label: string;\n icon?: LucideIcon;\n shortcut?: string;\n keywords?: string[];\n onSelect: () => void;\n}\n\nexport interface CommandMenuGroup {\n heading: string;\n items: CommandMenuItem[];\n}\n\nexport interface CommandMenuProps {\n groups: CommandMenuGroup[];\n placeholder?: string;\n emptyMessage?: string;\n /** Controlled open state — omit to let the component manage it internally. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Registers Cmd+K (mac) / Ctrl+K (win) to toggle the palette. @default true */\n hotkey?: boolean;\n}\n\n/**\n * Global search / Cmd+K command palette. One component — pass different\n * `groups` per surface rather than building a bespoke dialog each time.\n */\nexport function CommandMenu({\n groups,\n placeholder = 'Type a command or search…',\n emptyMessage = 'No results found.',\n open: openProp,\n onOpenChange,\n hotkey = true,\n}: CommandMenuProps) {\n const internal = useControlledOpen(false);\n const isOpen = openProp ?? internal.isOpen;\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (openProp === undefined) internal.setIsOpen(next);\n onOpenChange?.(next);\n },\n [openProp, onOpenChange, internal.setIsOpen],\n );\n\n const runItem = (item: CommandMenuItem) => {\n setOpen(false);\n item.onSelect();\n };\n\n return (\n <>\n {hotkey && (\n <RegisterHotkeys\n hotkeys={[\n { key: 'k', meta: true, handler: () => setOpen(!isOpen) },\n { key: 'k', ctrl: true, handler: () => setOpen(!isOpen) },\n ]}\n />\n )}\n <CommandDialog open={isOpen} onOpenChange={setOpen}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n {groups.map((group, i) => (\n <React.Fragment key={group.heading}>\n {i > 0 && <CommandSeparator />}\n <CommandGroup heading={group.heading}>\n {group.items.map((item) => (\n <CommandItem\n key={item.id}\n value={[item.label, ...(item.keywords ?? [])].join(' ')}\n onSelect={() => runItem(item)}\n >\n {item.icon && <item.icon />}\n <span>{item.label}</span>\n {item.shortcut && <CommandShortcut>{item.shortcut}</CommandShortcut>}\n </CommandItem>\n ))}\n </CommandGroup>\n </React.Fragment>\n ))}\n </CommandList>\n </CommandDialog>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { cn } from '@olwiba/cn';\nimport { AppGrid, type AppGridColumns } from '../layout/AppGrid';\nimport { DataTable } from '../components/DataTable';\nimport type { ViewMode } from '../hooks/use-view-mode';\n\nexport interface DataViewProps<TData> {\n items: TData[];\n /** Stable key per item. */\n getRowId: (item: TData) => string;\n /** Card renderer for the grid view. */\n renderCard: (item: TData) => React.ReactNode;\n /** Columns for the list view. */\n columns: ColumnDef<TData>[];\n view: ViewMode;\n /**\n * False while a persisted preference is still being read. The whole view is\n * withheld until true — see the note on the component.\n */\n ready?: boolean;\n /** Grid density at the widest breakpoint. Default 3. */\n gridColumns?: AppGridColumns;\n gap?: 'none' | 'sm' | 'md' | 'lg';\n /** Rendered instead of either view when there is nothing to show. */\n empty?: React.ReactNode;\n /** Shown while `ready` is false. Defaults to nothing. */\n placeholder?: React.ReactNode;\n searchKey?: string;\n searchPlaceholder?: string;\n pageSize?: number;\n emptyMessage?: string;\n onRowClick?: (row: TData) => void;\n className?: string;\n}\n\n/**\n * A collection rendered either as a grid of cards or as a table, from one set\n * of data.\n *\n * Knows nothing about what it is listing: callers supply a card renderer and\n * table columns. Cards are for \"what arrived recently\", the table for\n * comparing many rows at once, and switching between them should not mean two\n * page implementations that drift apart.\n *\n * The `ready` gate is the subtle part, and the reason this is a component\n * rather than a snippet to copy. A persisted preference cannot be read during\n * SSR or the first client render, so a page that renders its default\n * immediately will either mismatch on hydration or visibly flash the wrong\n * view at anyone who chose the other one. Holding the section until the\n * preference resolves avoids both, and putting that here means no consumer\n * has to work it out again.\n */\nexport function DataView<TData>({\n items,\n getRowId,\n renderCard,\n columns,\n view,\n ready = true,\n gridColumns = 3,\n gap = 'sm',\n empty,\n placeholder = null,\n searchKey,\n searchPlaceholder,\n pageSize = 25,\n emptyMessage,\n onRowClick,\n className,\n}: DataViewProps<TData>) {\n if (!ready) return <>{placeholder}</>;\n if (items.length === 0 && empty) return <>{empty}</>;\n\n if (view === 'list') {\n return (\n <DataTable\n columns={columns}\n data={items}\n searchKey={searchKey}\n searchPlaceholder={searchPlaceholder}\n pageSize={pageSize}\n emptyMessage={emptyMessage}\n onRowClick={onRowClick}\n className={className}\n />\n );\n }\n\n return (\n <AppGrid columns={gridColumns} gap={gap} className={cn(className)}>\n {items.map((item) => (\n <React.Fragment key={getRowId(item)}>{renderCard(item)}</React.Fragment>\n ))}\n </AppGrid>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n Line,\n LineChart,\n Pie,\n PieChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { cn } from '@olwiba/cn';\n\nexport interface ChartSeries {\n /** Data key to plot. */\n key: string;\n /** Legend and tooltip label. @default key */\n label?: string;\n /** CSS color. @default theme tokens --chart-1..5 in fixed order */\n color?: string;\n}\n\nexport interface ChartProps {\n /** Chart form. @default 'line' */\n type?: 'line' | 'area' | 'bar' | 'donut';\n data: Array<Record<string, string | number>>;\n /** Key for x-axis categories (line/area/bar) or slice labels (donut). */\n xKey: string;\n /** Series to plot. Donut uses `series[0].key` as the slice value. */\n series: ChartSeries[];\n /** Chart height in px. @default 300 */\n height?: number;\n /** Horizontal grid lines. @default true (ignored for donut) */\n grid?: boolean;\n /** Legend. @default true for multiple series or donut, false for one series */\n legend?: boolean;\n /** Formats values in tooltips and the y-axis, e.g. `(v) => \\`$${v}\\``. */\n valueFormatter?: (value: number) => string;\n className?: string;\n}\n\n// Fixed categorical order — series N always gets token N, never cycled.\nconst TOKEN_COLORS = ['var(--chart-1)', 'var(--chart-2)', 'var(--chart-3)', 'var(--chart-4)', 'var(--chart-5)'];\n\nconst seriesColor = (s: ChartSeries, i: number) => s.color ?? TOKEN_COLORS[i % TOKEN_COLORS.length];\n\nfunction ChartTooltip({\n active,\n payload,\n label,\n valueFormatter,\n}: {\n active?: boolean;\n payload?: Array<{ name?: string; value?: number | string; color?: string; payload?: { fill?: string } }>;\n label?: string | number;\n valueFormatter: (value: number) => string;\n}) {\n if (!active || !payload?.length) return null;\n return (\n <div className=\"rounded-lg border bg-popover px-3 py-2 text-xs text-popover-foreground shadow-md\">\n {label !== undefined && <p className=\"mb-1 font-medium\">{label}</p>}\n <div className=\"space-y-1\">\n {payload.map((entry, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <span\n aria-hidden\n className=\"size-2 shrink-0 rounded-full\"\n style={{ background: entry.color ?? entry.payload?.fill }}\n />\n <span className=\"text-muted-foreground\">{entry.name}</span>\n <span className=\"ml-auto pl-3 font-medium tabular-nums\">\n {typeof entry.value === 'number' ? valueFormatter(entry.value) : entry.value}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction ChartLegend({ entries }: { entries: Array<{ label: string; color: string }> }) {\n return (\n <div className=\"mt-3 flex flex-wrap items-center justify-center gap-x-4 gap-y-1\">\n {entries.map((entry) => (\n <div key={entry.label} className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <span aria-hidden className=\"size-2 rounded-full\" style={{ background: entry.color }} />\n {entry.label}\n </div>\n ))}\n </div>\n );\n}\n\nconst axisProps = {\n tickLine: false,\n axisLine: false,\n tick: { fill: 'var(--muted-foreground)', fontSize: 12 },\n tickMargin: 8,\n} as const;\n\n/**\n * Theme-aware chart — one component, `type` switches the form. Colors come\n * from the `--chart-1..5` theme tokens in fixed order (override per series\n * via `color`). Line and area for change-over-time, bar for magnitude\n * comparison, donut for part-of-whole identity. More than 5 donut slices:\n * fold the tail into an \"Other\" slice in your data instead of adding hues.\n */\nexport function Chart({\n type = 'line',\n data,\n xKey,\n series,\n height = 300,\n grid = true,\n legend,\n valueFormatter = (v) => String(v),\n className,\n}: ChartProps) {\n const showLegend = legend ?? (type === 'donut' || series.length > 1);\n const tooltip = (\n <Tooltip\n cursor={type === 'bar' ? { fill: 'var(--muted)', opacity: 0.4 } : { stroke: 'var(--border)' }}\n content={<ChartTooltip valueFormatter={valueFormatter} />}\n />\n );\n const gridEl = grid ? (\n <CartesianGrid vertical={false} stroke=\"var(--border)\" strokeOpacity={0.6} />\n ) : null;\n\n let chart: React.ReactElement;\n let legendEntries: Array<{ label: string; color: string }>;\n\n if (type === 'donut') {\n const valueKey = series[0]?.key;\n legendEntries = data.map((row, i) => ({\n label: String(row[xKey]),\n color: TOKEN_COLORS[i % TOKEN_COLORS.length],\n }));\n chart = (\n <PieChart>\n <Pie\n data={data}\n dataKey={valueKey}\n nameKey={xKey}\n innerRadius=\"60%\"\n outerRadius=\"85%\"\n paddingAngle={2}\n stroke=\"var(--card)\"\n strokeWidth={2}\n >\n {data.map((row, i) => (\n <Cell key={String(row[xKey])} fill={TOKEN_COLORS[i % TOKEN_COLORS.length]} />\n ))}\n </Pie>\n {tooltip}\n </PieChart>\n );\n } else {\n legendEntries = series.map((s, i) => ({ label: s.label ?? s.key, color: seriesColor(s, i) }));\n\n if (type === 'bar') {\n chart = (\n <BarChart data={data} barCategoryGap=\"25%\">\n {gridEl}\n <XAxis dataKey={xKey} {...axisProps} />\n <YAxis {...axisProps} width={48} tickFormatter={valueFormatter} />\n {tooltip}\n {series.map((s, i) => (\n <Bar\n key={s.key}\n dataKey={s.key}\n name={s.label ?? s.key}\n fill={seriesColor(s, i)}\n radius={[4, 4, 0, 0]}\n maxBarSize={40}\n />\n ))}\n </BarChart>\n );\n } else if (type === 'area') {\n chart = (\n <AreaChart data={data}>\n {gridEl}\n <XAxis dataKey={xKey} {...axisProps} />\n <YAxis {...axisProps} width={48} tickFormatter={valueFormatter} />\n {tooltip}\n {series.map((s, i) => (\n <Area\n key={s.key}\n type=\"monotone\"\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={seriesColor(s, i)}\n strokeWidth={2}\n fill={seriesColor(s, i)}\n fillOpacity={0.12}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </AreaChart>\n );\n } else {\n chart = (\n <LineChart data={data}>\n {gridEl}\n <XAxis dataKey={xKey} {...axisProps} />\n <YAxis {...axisProps} width={48} tickFormatter={valueFormatter} />\n {tooltip}\n {series.map((s, i) => (\n <Line\n key={s.key}\n type=\"monotone\"\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={seriesColor(s, i)}\n strokeWidth={2}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </LineChart>\n );\n }\n }\n\n return (\n <div className={cn('w-full', className)}>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {chart}\n </ResponsiveContainer>\n </div>\n {showLegend && <ChartLegend entries={legendEntries} />}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { AlertCircle, CheckCircle2, File as FileIcon, Loader2, UploadCloud, X } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface FileUploadEntry {\n id: string;\n file: File;\n /** 0–100. Omit while pending, or when not tracking progress. */\n progress?: number;\n status?: 'pending' | 'uploading' | 'done' | 'error';\n error?: string;\n}\n\nexport interface FileUploadProps {\n /** Comma-separated MIME types / extensions, e.g. `\"image/png,image/jpeg\"`. */\n accept?: string;\n multiple?: boolean;\n maxSizeMb?: number;\n maxFiles?: number;\n /** Controlled file list — pass this (with `onFilesChange`) to drive upload progress from your own network layer. */\n files?: FileUploadEntry[];\n /** Uncontrolled default list. */\n defaultFiles?: FileUploadEntry[];\n onFilesChange?: (files: FileUploadEntry[]) => void;\n /** Fired with the raw, already-validated `File` objects a user just added. */\n onFilesAdded?: (files: File[]) => void;\n disabled?: boolean;\n /** Helper text under the drop zone, e.g. \"PNG or JPG, up to 5MB\". */\n hint?: string;\n className?: string;\n}\n\nfunction formatBytes(bytes: number) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction makeId() {\n return Math.random().toString(36).slice(2, 10);\n}\n\n/**\n * Drag-and-drop file picker with a validated queue list. One component —\n * toggle `multiple`/`accept`/`maxSizeMb`/`maxFiles` rather than reaching for\n * a separate dropzone per use case. Progress/status is presentation-only;\n * wire `files`/`onFilesChange` to your own upload layer to drive it.\n */\nexport function FileUpload({\n accept,\n multiple = false,\n maxSizeMb,\n maxFiles,\n files: filesProp,\n defaultFiles,\n onFilesChange,\n onFilesAdded,\n disabled,\n hint,\n className,\n}: FileUploadProps) {\n const [internalFiles, setInternalFiles] = React.useState<FileUploadEntry[]>(defaultFiles ?? []);\n const [isDragging, setIsDragging] = React.useState(false);\n const [validationError, setValidationError] = React.useState<string | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // dragenter/dragleave fire for every child element crossed — count them so the\n // highlight doesn't flicker while moving over the icon/text inside the zone\n const dragDepth = React.useRef(0);\n const files = filesProp ?? internalFiles;\n\n const setFiles = React.useCallback(\n (next: FileUploadEntry[]) => {\n if (!filesProp) setInternalFiles(next);\n onFilesChange?.(next);\n },\n [filesProp, onFilesChange],\n );\n\n const acceptList = React.useMemo(\n () => accept?.split(',').map((a) => a.trim().toLowerCase()).filter(Boolean) ?? [],\n [accept],\n );\n\n const matchesAccept = (file: File) => {\n if (!acceptList.length) return true;\n const name = file.name.toLowerCase();\n return acceptList.some((pattern) =>\n pattern.startsWith('.') ? name.endsWith(pattern) : file.type === pattern || file.type.startsWith(pattern.replace('/*', '/')),\n );\n };\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList || disabled) return;\n const incoming = Array.from(fileList);\n // Single mode replaces the current file, so the existing queue never counts against maxFiles\n const room = maxFiles && multiple ? Math.max(0, maxFiles - files.length) : maxFiles || Infinity;\n if (maxFiles && room <= 0) {\n setValidationError(`You can only add up to ${maxFiles} file${maxFiles === 1 ? '' : 's'}.`);\n return;\n }\n\n const accepted: File[] = [];\n let rejected = false;\n for (const file of incoming.slice(0, room)) {\n if (!matchesAccept(file)) { rejected = true; continue; }\n if (maxSizeMb && file.size > maxSizeMb * 1024 * 1024) { rejected = true; continue; }\n accepted.push(file);\n }\n\n setValidationError(rejected ? `Some files were skipped — check the file type and size limit.` : null);\n if (!accepted.length) return;\n\n const entries: FileUploadEntry[] = accepted.map((file) => ({ id: makeId(), file, status: 'pending' }));\n setFiles(multiple ? [...files, ...entries] : entries);\n onFilesAdded?.(accepted);\n };\n\n const removeFile = (id: string) => {\n setFiles(files.filter((f) => f.id !== id));\n };\n\n return (\n <div className={cn('space-y-3', className)}>\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={() => !disabled && inputRef.current?.click()}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n inputRef.current?.click();\n }\n }}\n onDragOver={(e) => e.preventDefault()}\n onDragEnter={(e) => {\n e.preventDefault();\n dragDepth.current += 1;\n if (!disabled) setIsDragging(true);\n }}\n onDragLeave={() => {\n dragDepth.current = Math.max(0, dragDepth.current - 1);\n if (dragDepth.current === 0) setIsDragging(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n dragDepth.current = 0;\n setIsDragging(false);\n handleFiles(e.dataTransfer.files);\n }}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2 rounded-xl border-2 border-dashed px-6 py-10 text-center transition-colors',\n isDragging ? 'border-primary bg-primary/5' : 'border-border hover:border-foreground/30',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n <UploadCloud className=\"size-8 text-muted-foreground\" />\n <p className=\"text-sm font-medium\">\n <span className=\"text-primary underline underline-offset-4\">Click to upload</span> or drag and drop\n </p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"sr-only\"\n onChange={(e) => { handleFiles(e.target.files); e.target.value = ''; }}\n />\n </div>\n\n {validationError && <p role=\"alert\" className=\"text-sm font-medium text-destructive\">{validationError}</p>}\n\n {files.length > 0 && (\n <ul className=\"space-y-2\">\n {files.map(({ id, file, progress, status = 'pending', error }) => (\n <li key={id} className=\"flex items-center gap-3 rounded-lg border bg-card/60 px-3 py-2.5\">\n <FileIcon className=\"size-5 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-sm font-medium\">{file.name}</p>\n <span className=\"shrink-0 text-xs text-muted-foreground\">{formatBytes(file.size)}</span>\n </div>\n {status === 'uploading' && (\n <div className=\"mt-1.5 h-1 w-full overflow-hidden rounded-full bg-muted\">\n <div className=\"h-full rounded-full bg-primary transition-all\" style={{ width: `${progress ?? 0}%` }} />\n </div>\n )}\n {status === 'error' && error && <p className=\"mt-1 text-xs text-destructive\">{error}</p>}\n </div>\n {status === 'uploading' && <Loader2 className=\"size-4 shrink-0 animate-spin text-muted-foreground\" />}\n {status === 'done' && <CheckCircle2 className=\"size-4 shrink-0 text-primary\" />}\n {status === 'error' && <AlertCircle className=\"size-4 shrink-0 text-destructive\" />}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n onClick={() => removeFile(id)}\n >\n <X className=\"size-3.5\" />\n <span className=\"sr-only\">Remove {file.name}</span>\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { toast } from 'sonner';\nimport { AlertCircle, AlertTriangle, CheckCircle2, Inbox, Info, X } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface NotifyAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface NotificationToastProps {\n variant?: 'success' | 'info' | 'warning' | 'error' | 'message';\n title: string;\n description?: string;\n /** Avatar image — overrides the variant icon (e.g. for a message-from-a-person toast). */\n avatar?: string;\n /** Primary action, right-aligned next to the description (e.g. \"Undo\"). */\n action?: NotifyAction;\n /** Secondary action, rendered after the primary one (e.g. \"Decline\"). */\n secondaryAction?: NotifyAction;\n onDismiss?: () => void;\n}\n\nconst variantIcon = {\n success: <CheckCircle2 className=\"size-5 text-primary\" />,\n info: <Info className=\"size-5 text-muted-foreground\" />,\n warning: <AlertTriangle className=\"size-5 text-amber-500 dark:text-amber-400\" />,\n error: <AlertCircle className=\"size-5 text-destructive\" />,\n message: <Inbox className=\"size-5 text-muted-foreground\" />,\n} as const;\n\n/**\n * Rich toast content — rendered via `notify()` inside sonner's `toast.custom`.\n * One component: `variant` swaps the default icon, `avatar`/`action`/\n * `secondaryAction` add the pieces a given toast needs, rather than a\n * separate toast component per shape.\n */\nexport function NotificationToast({\n variant = 'info',\n title,\n description,\n avatar,\n action,\n secondaryAction,\n onDismiss,\n}: NotificationToastProps) {\n return (\n <div className=\"w-full max-w-sm rounded-lg border bg-card p-4 text-card-foreground shadow-lg\">\n <div className=\"flex items-start gap-3\">\n <div className=\"shrink-0 pt-0.5\">\n {avatar ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={avatar} alt=\"\" className=\"size-9 rounded-full border object-cover\" />\n ) : (\n variantIcon[variant]\n )}\n </div>\n <div className=\"min-w-0 flex-1 pt-0.5\">\n <p className=\"text-sm font-medium\">{title}</p>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n {(action || secondaryAction) && (\n <div className={cn('mt-3 flex gap-4', avatar && 'gap-3')}>\n {action && (\n <button type=\"button\" onClick={action.onClick} className=\"text-sm font-medium text-primary hover:underline\">\n {action.label}\n </button>\n )}\n {secondaryAction && (\n <button type=\"button\" onClick={secondaryAction.onClick} className=\"text-sm font-medium text-muted-foreground hover:text-foreground\">\n {secondaryAction.label}\n </button>\n )}\n </div>\n )}\n </div>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-6 shrink-0 -mt-1 -mr-1\" onClick={onDismiss}>\n <X className=\"size-4\" />\n <span className=\"sr-only\">Dismiss</span>\n </Button>\n </div>\n </div>\n );\n}\n\nexport interface NotifyOptions extends Omit<NotificationToastProps, 'onDismiss'> {\n duration?: number;\n}\n\n/** Fires a `NotificationToast` through sonner. Requires `<Toaster />` from `@olwiba/cn` mounted once in your app. */\nexport function notify(options: NotifyOptions) {\n const { duration, ...toastProps } = options;\n return toast.custom((id) => <NotificationToast {...toastProps} onDismiss={() => toast.dismiss(id)} />, { duration });\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Bell, Inbox } from 'lucide-react';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface NotificationItem {\n id: string;\n title: string;\n description?: string;\n /** Pre-formatted timestamp, e.g. \"2h ago\" or \"Yesterday\". */\n timestamp?: string;\n read?: boolean;\n /** Avatar image — takes precedence over `icon`. */\n avatar?: string;\n icon?: React.ReactNode;\n}\n\nexport interface NotificationsPopoverProps {\n notifications: NotificationItem[];\n onNotificationClick?: (notification: NotificationItem) => void;\n /** Shows a \"Mark all read\" action in the header when there are unread items. */\n onMarkAllRead?: () => void;\n title?: string;\n emptyMessage?: string;\n /** Popover alignment relative to the bell button. @default 'end' */\n align?: 'start' | 'center' | 'end';\n /** Controlled open state — omit to let the component manage it internally. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n}\n\n/**\n * Bell button + persistent notification inbox. Complements `notify()` toasts:\n * a toast announces an event as it happens, this popover holds the history.\n * Presentation-only — pass `notifications` from your own data layer and\n * persist read state via `onMarkAllRead`/`onNotificationClick`.\n */\nexport function NotificationsPopover({\n notifications,\n onNotificationClick,\n onMarkAllRead,\n title = 'Notifications',\n emptyMessage = 'Nothing new — you’re all caught up.',\n align = 'end',\n open,\n onOpenChange,\n className,\n}: NotificationsPopoverProps) {\n const unreadCount = notifications.filter((n) => !n.read).length;\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className={cn('relative size-8', className)}>\n <Bell className=\"size-4\" />\n {unreadCount > 0 && (\n <span className=\"absolute -right-0.5 -top-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold leading-4 text-primary-foreground\">\n {unreadCount > 9 ? '9+' : unreadCount}\n </span>\n )}\n <span className=\"sr-only\">\n {title}{unreadCount > 0 ? ` (${unreadCount} unread)` : ''}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent align={align} className=\"w-80 p-0\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <p className=\"text-sm font-semibold\">{title}</p>\n {onMarkAllRead && unreadCount > 0 && (\n <button\n type=\"button\"\n onClick={onMarkAllRead}\n className=\"text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Mark all read\n </button>\n )}\n </div>\n\n {notifications.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 px-4 py-10 text-center\">\n <Inbox className=\"size-6 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n </div>\n ) : (\n <ul className=\"max-h-80 overflow-y-auto\">\n {notifications.map((notification) => (\n <li key={notification.id} className=\"border-b last:border-b-0\">\n <button\n type=\"button\"\n onClick={() => onNotificationClick?.(notification)}\n className={cn(\n 'flex w-full items-start gap-3 px-4 py-3 text-left transition-colors hover:bg-muted/60',\n !notification.read && 'bg-muted/40',\n )}\n >\n <span\n aria-hidden\n className={cn(\n 'mt-1.5 size-2 shrink-0 rounded-full',\n notification.read ? 'bg-transparent' : 'bg-primary',\n )}\n />\n {notification.avatar ? (\n <Avatar className=\"size-8 shrink-0\">\n <AvatarImage src={notification.avatar} alt=\"\" />\n <AvatarFallback>{notification.title.slice(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n ) : notification.icon ? (\n <span className=\"mt-0.5 shrink-0 text-muted-foreground\">{notification.icon}</span>\n ) : null}\n <span className=\"min-w-0 flex-1\">\n <span className={cn('block truncate text-sm', !notification.read && 'font-medium')}>\n {notification.title}\n </span>\n {notification.description && (\n <span className=\"mt-0.5 line-clamp-2 block text-xs text-muted-foreground\">\n {notification.description}\n </span>\n )}\n {notification.timestamp && (\n <span className=\"mt-1 block text-xs text-muted-foreground/70\">\n {notification.timestamp}\n </span>\n )}\n </span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Activity } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn } from '@olwiba/cn';\n\nexport interface ActivityFeedItem {\n id: string;\n /** Main line — pass rich nodes for emphasis, e.g. <><b>Ana</b> deployed to production</>. */\n title: React.ReactNode;\n description?: string;\n /** Pre-formatted timestamp, e.g. \"2h ago\" or \"Mar 4\". */\n timestamp?: string;\n /** Avatar image — takes precedence over `icon`. */\n avatar?: string;\n /** Fallback initials when `avatar` is set but fails to load. */\n initials?: string;\n /** Icon node rendered in the timeline marker when there is no avatar. */\n icon?: React.ReactNode;\n}\n\nexport interface ActivityFeedProps {\n items: ActivityFeedItem[];\n emptyMessage?: string;\n className?: string;\n}\n\n/**\n * Vertical activity timeline — avatar or icon markers connected by a rail,\n * one row per event. Presentation-only: pass pre-formatted timestamps and\n * rich `title` nodes from your own data layer.\n */\nexport function ActivityFeed({\n items,\n emptyMessage = 'No activity yet.',\n className,\n}: ActivityFeedProps) {\n if (items.length === 0) {\n return (\n <div className={cn('flex flex-col items-center gap-2 py-10 text-center', className)}>\n <Activity className=\"size-6 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <ol className={className}>\n {items.map((item, i) => (\n <li key={item.id} className=\"relative flex gap-3 pb-6 last:pb-0\">\n {/* Rail connecting this marker to the next */}\n {i !== items.length - 1 && (\n <span aria-hidden className=\"absolute left-4 top-9 bottom-0 w-px -translate-x-1/2 bg-border\" />\n )}\n <span className=\"relative z-10 flex size-8 shrink-0 items-center justify-center\">\n {item.avatar ? (\n <Avatar className=\"size-8\">\n <AvatarImage src={item.avatar} alt=\"\" />\n <AvatarFallback className=\"text-xs\">{item.initials ?? '?'}</AvatarFallback>\n </Avatar>\n ) : (\n <span className=\"flex size-8 items-center justify-center rounded-full border bg-card text-muted-foreground [&>svg]:size-4\">\n {item.icon ?? <Activity />}\n </span>\n )}\n </span>\n <div className=\"min-w-0 flex-1 pt-1\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"text-sm\">{item.title}</p>\n {item.timestamp && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">{item.timestamp}</span>\n )}\n </div>\n {item.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{item.description}</p>\n )}\n </div>\n </li>\n ))}\n </ol>\n );\n}\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nfunction AppScreenRoot({ children, className }: { children?: React.ReactNode; className?: string }) {\n return (\n <div className={cn('flex h-full flex-col', className)}>\n {children}\n </div>\n );\n}\n\nfunction AppScreenHeader({ children, className }: { children?: React.ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-center gap-2 border-b border-border px-4 py-3 shrink-0', className)}>\n {children}\n </div>\n );\n}\n\nfunction AppScreenBody({ children, className }: { children?: React.ReactNode; className?: string }) {\n return (\n <div className={cn('flex-1 overflow-auto px-4 py-3', className)}>\n {children}\n </div>\n );\n}\n\nexport const AppScreen = Object.assign(AppScreenRoot, {\n Header: AppScreenHeader,\n Body: AppScreenBody,\n});\n\nexport type { };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface GlassCardProps extends React.HTMLAttributes<HTMLDivElement> {\n blur?: 'sm' | 'md' | 'lg';\n children: React.ReactNode;\n}\n\nconst blurClass = {\n sm: 'backdrop-blur-sm',\n md: 'backdrop-blur-md',\n lg: 'backdrop-blur-lg',\n};\n\nexport function GlassCard({ blur = 'md', className, children, ...props }: GlassCardProps) {\n return (\n <div\n className={cn(\n 'rounded-2xl border border-white/20 bg-background/50 shadow-sm',\n blurClass[blur],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { TrendingDown, TrendingUp } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\n\nexport interface StatCardProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n label: string;\n delta?: string;\n trend?: 'up' | 'down' | 'neutral';\n description?: string;\n}\n\nexport function StatCard({ value, label, delta, trend = 'neutral', description, className, ...props }: StatCardProps) {\n return (\n <div\n className={cn('rounded-2xl border bg-card p-5', className)}\n {...props}\n >\n <div className=\"text-sm text-muted-foreground\">{label}</div>\n <div className=\"mt-2 flex items-end justify-between gap-3\">\n <div className=\"text-3xl font-bold tracking-tight\">{value}</div>\n {delta && (\n <div\n className={cn(\n 'flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n trend === 'up' && 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',\n trend === 'down' && 'bg-red-500/10 text-red-600 dark:text-red-400',\n trend === 'neutral' && 'bg-muted text-muted-foreground',\n )}\n >\n {trend === 'up' && <TrendingUp className=\"size-3\" />}\n {trend === 'down' && <TrendingDown className=\"size-3\" />}\n {delta}\n </div>\n )}\n </div>\n {description && (\n <p className=\"mt-1.5 text-xs text-muted-foreground\">{description}</p>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface ImageCardProps extends React.HTMLAttributes<HTMLDivElement> {\n src: string;\n alt?: string;\n overlay?: 'none' | 'subtle' | 'strong';\n aspectRatio?: 'video' | 'square' | 'portrait' | 'auto';\n children?: React.ReactNode;\n}\n\nconst overlayClass = {\n none: '',\n subtle: 'bg-gradient-to-t from-black/60 via-black/10 to-transparent',\n strong: 'bg-gradient-to-t from-black/80 via-black/30 to-black/10',\n};\n\nconst aspectClass = {\n video: 'aspect-video',\n square: 'aspect-square',\n portrait: 'aspect-[3/4]',\n auto: '',\n};\n\nexport function ImageCard({\n src,\n alt = '',\n overlay = 'subtle',\n aspectRatio = 'video',\n children,\n className,\n ...props\n}: ImageCardProps) {\n return (\n <div\n className={cn(\n 'group relative overflow-hidden rounded-2xl bg-muted',\n aspectClass[aspectRatio],\n className,\n )}\n {...props}\n >\n <img\n src={src}\n alt={alt}\n className=\"h-full w-full object-cover transition-transform duration-500 group-hover:scale-105\"\n />\n {overlay !== 'none' && (\n <div className={cn('absolute inset-0', overlayClass[overlay])} />\n )}\n {children && (\n <div className=\"absolute inset-0 flex flex-col justify-end p-5 text-white\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Card, cn } from '@olwiba/cn';\n\nconst bannerAspectClass = {\n wide: 'aspect-[3/1]',\n video: 'aspect-video',\n square: 'aspect-square',\n};\n\nexport interface MediaCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Banner rendered above the content, clipped to the card's rounded corners.\n * A ReactNode rather than a src, so a brand fallback, an inline SVG, a map,\n * or a plain <img> all work — this is the difference from ImageCard, which\n * takes a URL and is the right choice when you actually have one.\n */\n banner?: React.ReactNode;\n /** Banner proportions. Default 'wide' (3:1), which suits a header strip. */\n bannerAspect?: keyof typeof bannerAspectClass;\n /**\n * Pinned to the bottom of the card. In a grid this is what keeps the\n * primary action on a shared baseline across a row, however unevenly the\n * titles above it wrap.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * A Card with an optional banner and a bottom-pinned footer.\n *\n * Deliberately knows nothing about what it is showing — the domain-shaped\n * cards (a property, a monitor, an article) compose this and supply their own\n * content. It exists because \"banner, then content, then an action pinned to\n * the bottom, all the same height across a row\" was being hand-rolled per\n * product, and the equal-height part in particular is easy to get subtly\n * wrong.\n *\n * `h-full` is on the card itself so a bare `<MediaCard>` inside a grid cell\n * fills that cell without every caller remembering to ask.\n */\nexport function MediaCard({\n banner,\n bannerAspect = 'wide',\n footer,\n children,\n className,\n ...props\n}: MediaCardProps) {\n return (\n <Card\n className={cn('flex h-full w-full flex-col overflow-hidden', banner && 'pt-0', className)}\n {...props}\n >\n {banner && (\n <div className={cn('w-full shrink-0 overflow-hidden', bannerAspectClass[bannerAspect])}>\n {banner}\n </div>\n )}\n <div className=\"flex flex-1 flex-col gap-3 p-4\">\n {children}\n {footer && <div className=\"mt-auto pt-1\">{footer}</div>}\n </div>\n </Card>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Button, cn } from '@olwiba/cn';\nimport { LayoutGrid, List } from 'lucide-react';\nimport type { ViewMode } from '../hooks/use-view-mode';\n\nexport interface ViewToggleProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n view: ViewMode;\n onChange: (view: ViewMode) => void;\n labels?: { cards?: string; list?: string };\n}\n\n/**\n * Two-state segmented control for switching a collection between cards and a\n * list. Controlled — pair it with useViewMode to persist the choice.\n */\nexport function ViewToggle({ view, onChange, labels, className, ...props }: ViewToggleProps) {\n const options = [\n { mode: 'cards' as const, label: labels?.cards ?? 'Card view', Icon: LayoutGrid },\n { mode: 'list' as const, label: labels?.list ?? 'List view', Icon: List },\n ];\n\n return (\n <div\n className={cn('inline-flex items-center rounded-md border p-0.5', className)}\n role=\"group\"\n aria-label=\"View mode\"\n {...props}\n >\n {options.map(({ mode, label, Icon }) => (\n <Button\n key={mode}\n type=\"button\"\n size=\"sm\"\n variant={view === mode ? 'secondary' : 'ghost'}\n className=\"h-7 px-2\"\n aria-label={label}\n aria-pressed={view === mode}\n onClick={() => onChange(mode)}\n >\n <Icon className=\"size-4\" />\n </Button>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface FlowConnectorProps {\n /** Line axis. Default: 'vertical'. */\n direction?: 'vertical' | 'horizontal';\n /**\n * CSS color string for the line and arrowhead.\n * Falls back to currentColor at reduced opacity when omitted.\n */\n color?: string;\n /** Show an open-chevron arrowhead at the destination end. Default: false. */\n arrow?: boolean;\n /** Show a traveling dot animation along the connector. Default: false. */\n animate?: boolean;\n /** Duration of the traveling dot animation. Default: '1.4s'. */\n animateDur?: string;\n /** CSS delay before the traveling dot animation starts. Default: '0s'. */\n animateDelay?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst DASH_ON = '5px';\nconst DASH_OFF = '4px';\n\n/**\n * Dashed connecting line between diagram nodes.\n * Control size via className (e.g. `h-10` for vertical, `w-16` for horizontal).\n * Pass `style` for fade/entrance animations — the wrapper inherits it.\n */\nexport function FlowConnector({\n direction = 'vertical',\n color,\n arrow = false,\n animate = false,\n animateDur = '1.4s',\n animateDelay = '0s',\n className,\n style,\n}: FlowConnectorProps) {\n const stroke = color ?? 'currentColor';\n const opacity = color ? 0.75 : 0.4;\n\n if (direction === 'vertical') {\n return (\n <div\n className={cn('relative flex flex-col items-center', className)}\n style={style}\n aria-hidden\n >\n {animate && (\n <style>{`@keyframes fc-dot-v{0%{top:-4px;opacity:0}8%{opacity:1}88%{opacity:1}100%{top:calc(100% + 4px);opacity:0}}`}</style>\n )}\n <div\n className=\"flex-1\"\n style={{\n width: 2,\n opacity,\n background: `repeating-linear-gradient(to bottom, ${stroke} 0, ${stroke} ${DASH_ON}, transparent ${DASH_ON}, transparent calc(${DASH_ON} + ${DASH_OFF}))`,\n }}\n />\n {animate && (\n <div\n style={{\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n width: 5,\n height: 5,\n borderRadius: '50%',\n backgroundColor: stroke,\n animation: `fc-dot-v ${animateDur} ease-in-out ${animateDelay} infinite both`,\n }}\n />\n )}\n {arrow && (\n <svg\n width=\"12\"\n height=\"7\"\n viewBox=\"0 0 12 7\"\n style={{ display: 'block', opacity }}\n aria-hidden\n >\n <polyline\n points=\"1,1 6,6 11,1\"\n fill=\"none\"\n stroke={stroke}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={cn('flex items-center', className)}\n style={style}\n aria-hidden\n >\n <div\n className=\"flex-1\"\n style={{\n height: 2,\n opacity,\n background: `repeating-linear-gradient(to right, ${stroke} 0, ${stroke} ${DASH_ON}, transparent ${DASH_ON}, transparent calc(${DASH_ON} + ${DASH_OFF}))`,\n }}\n />\n {arrow && (\n <svg\n width=\"7\"\n height=\"12\"\n viewBox=\"0 0 7 12\"\n style={{ display: 'block', opacity }}\n aria-hidden\n >\n <polyline\n points=\"1,1 6,6 1,11\"\n fill=\"none\"\n stroke={stroke}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface FlowBracketProps {\n /**\n * Vertical anchor for the top connection as a percentage of the wrapper height (0–100).\n * Defaults to 8 (near the top of the first child).\n */\n anchorTop?: number;\n /** Per-side override for the top anchor of the left bracket. Falls back to anchorTop. */\n anchorTopLeft?: number;\n /** Per-side override for the top anchor of the right bracket. Falls back to anchorTop. */\n anchorTopRight?: number;\n /**\n * Vertical anchor for the bottom connection as a percentage of the wrapper height (0–100).\n * Defaults to 92 (near the bottom of the last child).\n */\n anchorBottom?: number;\n /**\n * How far outside the wrapper the bracket extends, in SVG units (viewBox width = 1000).\n * Defaults to 22.\n */\n extent?: number;\n /** Show open-chevron arrowhead at the destination end. Default: true. */\n arrow?: boolean;\n /** CSS color for both bracket lines and animated dots. Defaults to muted slate. */\n color?: string;\n /** Override color for the left bracket only. */\n colorLeft?: string;\n /** Override color for the right bracket only. */\n colorRight?: string;\n /** Show left bracket. Default: true. */\n left?: boolean;\n /** Show right bracket. Default: true. */\n right?: boolean;\n /**\n * Animate a dot traveling the L-path from the bottom anchor up to the top anchor\n * (sync → genesis/docs direction).\n * Dots are placed after {children} in DOM so positive-z-index card stacking contexts\n * naturally render above them.\n */\n animate?: boolean;\n /** Duration of one full dot journey. Default: '4s'. */\n animateDur?: string;\n /** Reverse the right bracket path direction so its arrowhead points DOWN (into sync). Default: false. */\n reverseRight?: boolean;\n style?: React.CSSProperties;\n className?: string;\n children: React.ReactNode;\n}\n\n/**\n * Wraps children in a relative container and draws square bracket lines on the\n * left and/or right outside edges — connecting the top of the first child down\n * to the bottom of the last child (e.g. docs → SYNC direction).\n *\n * Arrowheads are rendered as absolutely-positioned SVGs (not SVG markers) so\n * they render at a consistent pixel size regardless of the bracket SVG's aspect\n * ratio (which spans the full section height with preserveAspectRatio=\"none\").\n */\nexport function FlowBracket({\n anchorTop = 8,\n anchorTopLeft,\n anchorTopRight,\n anchorBottom = 92,\n extent = 22,\n arrow = true,\n color = 'rgba(148,163,184,0.4)',\n colorLeft,\n colorRight,\n left = true,\n right = true,\n animate = false,\n animateDur = '4s',\n reverseRight = false,\n style,\n className,\n children,\n}: FlowBracketProps) {\n const L = -extent;\n const R = 1000 + extent;\n\n const cl = colorLeft ?? color;\n const cr = colorRight ?? color;\n const aTL = anchorTopLeft ?? anchorTop;\n const aTR = anchorTopRight ?? anchorTop;\n\n // Left bracket: bottom → top (arrowhead at top, pointing right into genesis)\n const leftD = `M 0,${anchorBottom} L ${L},${anchorBottom} L ${L},${aTL} L 0,${aTL}`;\n // Right bracket: reversed = top → bottom (arrowhead at bottom, pointing left into sync)\n const rightD = reverseRight\n ? `M 1000,${aTR} L ${R},${aTR} L ${R},${anchorBottom} L 1000,${anchorBottom}`\n : `M 1000,${anchorBottom} L ${R},${anchorBottom} L ${R},${aTR} L 1000,${aTR}`;\n\n // CSS dot: extent as % of container width\n const ep = `${(extent / 10).toFixed(1)}%`;\n const dotKeyframes = animate ? `\n@keyframes fb-dl{\n 0%{top:${anchorBottom}%;left:0;opacity:0}\n 6%{opacity:1}\n 20%{top:${anchorBottom}%;left:-${ep}}\n 80%{top:${aTL}%;left:-${ep};opacity:1}\n 94%{top:${aTL}%;left:0;opacity:0}\n 100%{top:${aTL}%;left:0;opacity:0}\n}\n@keyframes fb-dr{\n 0%{top:${anchorBottom}%;left:100%;opacity:0}\n 6%{opacity:1}\n 20%{top:${anchorBottom}%;left:calc(100% + ${ep})}\n 80%{top:${aTR}%;left:calc(100% + ${ep});opacity:1}\n 94%{top:${aTR}%;left:100%;opacity:0}\n 100%{top:${aTR}%;left:100%;opacity:0}\n}\n@keyframes fb-drr{\n 0%{top:${aTR}%;left:100%;opacity:0}\n 6%{opacity:1}\n 20%{top:${aTR}%;left:calc(100% + ${ep})}\n 80%{top:${anchorBottom}%;left:calc(100% + ${ep});opacity:1}\n 94%{top:${anchorBottom}%;left:100%;opacity:0}\n 100%{top:${anchorBottom}%;left:100%;opacity:0}\n}` : '';\n\n const dotBase: React.CSSProperties = {\n position: 'absolute',\n width: 5,\n height: 5,\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n opacity: 0,\n };\n\n // Shared arrowhead polyline props — same chevron shape as ecosystem connector markers\n const chevronProps = {\n fill: 'none',\n strokeWidth: '1.5',\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n };\n\n // Arrowhead SVG style — positioned in CSS space so it renders at a fixed pixel size\n // regardless of the bracket SVG's non-uniform scale (preserveAspectRatio=\"none\")\n const arrowBase: React.CSSProperties = {\n position: 'absolute',\n width: 10,\n height: 8,\n overflow: 'visible',\n pointerEvents: 'none',\n transform: 'translate(-50%, -50%)',\n };\n\n return (\n <div className={className} style={{ position: 'relative', ...style }}>\n {animate && <style>{dotKeyframes}</style>}\n <svg\n viewBox=\"0 0 1000 100\"\n preserveAspectRatio=\"none\"\n aria-hidden\n className=\"pointer-events-none absolute inset-0\"\n style={{ width: '100%', height: '100%', overflow: 'visible' }}\n >\n {left && (\n <path d={leftD} fill=\"none\" style={{ stroke: cl }} strokeWidth={1.5} strokeDasharray=\"5,4\"\n vectorEffect=\"non-scaling-stroke\" />\n )}\n {right && (\n <path d={rightD} fill=\"none\" style={{ stroke: cr }} strokeWidth={1.5} strokeDasharray=\"5,4\"\n vectorEffect=\"non-scaling-stroke\" />\n )}\n </svg>\n\n {/* Left bracket arrowhead — tip points right (→) into the genesis/docs tier */}\n {arrow && left && (\n <svg\n aria-hidden\n viewBox=\"0 0 10 8\"\n style={{ ...arrowBase, top: `${aTL}%`, left: 0 }}\n >\n <polyline points=\"1,1 8,4 1,7\" style={{ stroke: cl }} {...chevronProps} />\n </svg>\n )}\n\n {/* Right bracket arrowhead — tip points left (←) into the destination tier */}\n {arrow && right && (\n <svg\n aria-hidden\n viewBox=\"0 0 10 8\"\n style={{\n ...arrowBase,\n top: reverseRight ? `${anchorBottom}%` : `${aTR}%`,\n left: '100%',\n }}\n >\n <polyline points=\"9,1 2,4 9,7\" style={{ stroke: cr }} {...chevronProps} />\n </svg>\n )}\n\n {children}\n\n {/* Dots placed after children so card stacking contexts (z-index ≥ 1) render above */}\n {animate && left && (\n <div\n aria-hidden\n style={{ ...dotBase, backgroundColor: cl, animation: `fb-dl ${animateDur} ease-in-out 0s infinite` }}\n />\n )}\n {animate && right && (\n <div\n aria-hidden\n style={{ ...dotBase, backgroundColor: cr, animation: `${reverseRight ? 'fb-drr' : 'fb-dr'} ${animateDur} ease-in-out 1.8s infinite` }}\n />\n )}\n </div>\n );\n}\n","import { Spinner } from '@olwiba/cn';\n\ninterface FullPageSpinnerProps {\n message?: string;\n}\n\nexport function FullPageSpinner({ message }: FullPageSpinnerProps) {\n return (\n <div className=\"flex flex-1 flex-col items-center justify-center gap-4\">\n <Spinner className=\"size-8\" />\n {message && <p className=\"text-muted-foreground text-sm\">{message}</p>}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../lib/utils';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PageHeaderBreadcrumb {\n label: string;\n href?: string;\n}\n\nexport interface PageHeaderBackButton {\n label?: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n breadcrumbs?: PageHeaderBreadcrumb[];\n backButton?: PageHeaderBackButton;\n renderLink?: AppShellRenderLink;\n className?: string;\n children?: React.ReactNode;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function PageHeader({\n title,\n description,\n breadcrumbs,\n backButton,\n renderLink = defaultRenderLink,\n className,\n children,\n}: PageHeaderProps) {\n return (\n <div className={cn('flex flex-col gap-1 pb-6', className)}>\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav aria-label=\"Breadcrumb\" className=\"mb-2 flex items-center gap-1 text-sm text-muted-foreground\">\n {breadcrumbs.map((crumb, i) => {\n const isLast = i === breadcrumbs.length - 1;\n return (\n <React.Fragment key={i}>\n {i > 0 && <ChevronRight className=\"size-3.5 shrink-0\" />}\n {isLast || !crumb.href ? (\n <span className={cn(isLast && 'text-foreground font-medium')}>{crumb.label}</span>\n ) : (\n renderLink({\n href: crumb.href,\n children: crumb.label,\n className: 'hover:text-foreground transition-colors',\n })\n )}\n </React.Fragment>\n );\n })}\n </nav>\n )}\n\n {backButton && (\n <div className=\"mb-2\">\n {backButton.href ? (\n renderLink({\n href: backButton.href,\n children: (\n <>\n <ChevronLeft className=\"size-4\" />\n <span>{backButton.label ?? 'Back'}</span>\n </>\n ),\n className: 'inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors',\n })\n ) : (\n <button\n type=\"button\"\n onClick={backButton.onClick}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <ChevronLeft className=\"size-4\" />\n <span>{backButton.label ?? 'Back'}</span>\n </button>\n )}\n </div>\n )}\n\n <div className=\"flex items-start justify-between gap-4\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {children && <div className=\"flex shrink-0 items-center gap-2\">{children}</div>}\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Spinner } from '@olwiba/cn';\n\ninterface SuspensedProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n}\n\nexport function Suspensed({ children, fallback }: SuspensedProps) {\n return (\n <React.Suspense fallback={fallback ?? <Spinner />}>\n {children}\n </React.Suspense>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Moon, Sun } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\n\nfunction getInitialTheme(): 'light' | 'dark' {\n if (typeof document === 'undefined') return 'dark';\n const stored = localStorage.getItem('theme') as 'light' | 'dark' | null;\n return stored ?? (document.documentElement.classList.contains('dark') ? 'dark' : 'light');\n}\n\nexport function ThemeSwitchMinimal() {\n const [theme, setThemeState] = React.useState<'light' | 'dark'>(getInitialTheme);\n\n const toggle = () => {\n const next = theme === 'dark' ? 'light' : 'dark';\n setThemeState(next);\n localStorage.setItem('theme', next);\n document.documentElement.classList.toggle('dark', next === 'dark');\n };\n\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={toggle} className=\"size-8\" aria-label=\"Toggle theme\">\n <span\n key={theme}\n className=\"inline-flex size-4 items-center justify-center animate-in fade-in zoom-in-75 spin-in-90 duration-200 motion-reduce:animate-none\"\n >\n {theme === 'dark' ? <Sun className=\"size-4\" /> : <Moon className=\"size-4\" />}\n </span>\n </Button>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { LayoutGrid, Sparkles, Layers } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\nimport { useOlwibaUI, type UIMode } from '../context/OlwibaUIContext';\n\nconst MODES: UIMode[] = ['default', 'playful', 'smooth'];\n\nconst MODE_ICONS: Record<UIMode, React.ReactNode> = {\n default: <LayoutGrid className=\"size-4\" />,\n playful: <Sparkles className=\"size-4\" />,\n smooth: <Layers className=\"size-4\" />,\n};\n\nconst MODE_LABELS: Record<UIMode, string> = {\n default: 'Default mode',\n playful: 'Playful mode',\n smooth: 'Smooth mode',\n};\n\nexport function ModeSwitchMinimal() {\n const { mode, setMode } = useOlwibaUI();\n\n const cycle = () => {\n const idx = MODES.indexOf(mode);\n setMode(MODES[(idx + 1) % MODES.length]);\n };\n\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={cycle} className=\"size-8\" aria-label={MODE_LABELS[mode]}>\n <span\n key={mode}\n className=\"inline-flex size-4 items-center justify-center animate-in fade-in zoom-in-75 duration-200 motion-reduce:animate-none\"\n >\n {MODE_ICONS[mode]}\n </span>\n </Button>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Palette } from 'lucide-react';\nimport { Button, Popover, PopoverContent, PopoverTrigger } from '@olwiba/cn';\n\ninterface BrandColor {\n name: string;\n label: string;\n css: string;\n}\n\nconst BRAND_COLORS: BrandColor[] = [\n {\n name: 'zinc',\n label: 'Zinc',\n css: `\n :root { --primary: oklch(0.205 0 0); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.708 0 0); }\n .dark { --primary: oklch(0.922 0 0); --primary-foreground: oklch(0.205 0 0); --ring: oklch(0.556 0 0); }\n `,\n },\n {\n name: 'blue',\n label: 'Blue',\n css: `\n :root { --primary: oklch(0.546 0.245 262.881); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.546 0.245 262.881); }\n .dark { --primary: oklch(0.623 0.214 259.815); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.623 0.214 259.815); }\n `,\n },\n {\n name: 'emerald',\n label: 'Emerald',\n css: `\n :root { --primary: oklch(0.596 0.145 163.225); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.596 0.145 163.225); }\n .dark { --primary: oklch(0.765 0.177 163.223); --primary-foreground: oklch(0.145 0 0); --ring: oklch(0.765 0.177 163.223); }\n `,\n },\n {\n name: 'purple',\n label: 'Purple',\n css: `\n :root { --primary: oklch(0.558 0.288 302.321); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.558 0.288 302.321); }\n .dark { --primary: oklch(0.714 0.203 305.504); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.714 0.203 305.504); }\n `,\n },\n {\n name: 'rose',\n label: 'Rose',\n css: `\n :root { --primary: oklch(0.645 0.246 16.439); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.645 0.246 16.439); }\n .dark { --primary: oklch(0.717 0.194 17.428); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.717 0.194 17.428); }\n `,\n },\n {\n name: 'orange',\n label: 'Orange',\n css: `\n :root { --primary: oklch(0.705 0.213 47.604); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.705 0.213 47.604); }\n .dark { --primary: oklch(0.792 0.184 70.08); --primary-foreground: oklch(0.145 0 0); --ring: oklch(0.792 0.184 70.08); }\n `,\n },\n {\n name: 'slate',\n label: 'Slate',\n css: `\n :root { --primary: oklch(0.446 0.043 257.281); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.446 0.043 257.281); }\n .dark { --primary: oklch(0.704 0.04 256.788); --primary-foreground: oklch(0.129 0.042 264.695); --ring: oklch(0.704 0.04 256.788); }\n `,\n },\n];\n\n// Preview hex values matched to each preset (used for swatch circles only)\nconst PREVIEW_HEX: Record<string, string> = {\n zinc: '#27272a',\n blue: '#3b82f6',\n emerald: '#10b981',\n purple: '#a855f7',\n rose: '#f43f5e',\n orange: '#f97316',\n slate: '#64748b',\n};\n\nconst STORAGE_KEY = 'brand-color';\nconst STYLE_ID = 'brand-color-override';\n\nfunction applyColor(color: BrandColor) {\n let el = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!el) {\n el = document.createElement('style');\n el.id = STYLE_ID;\n document.head.appendChild(el);\n }\n el.textContent = color.css;\n localStorage.setItem(STORAGE_KEY, color.name);\n}\n\nfunction getInitialColorName(): string {\n if (typeof localStorage === 'undefined') return 'emerald';\n return localStorage.getItem(STORAGE_KEY) ?? 'emerald';\n}\n\nexport function BrandColorSwitchMinimal() {\n const [active, setActive] = React.useState<string>(getInitialColorName);\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const saved = localStorage.getItem(STORAGE_KEY) ?? 'emerald';\n const color = BRAND_COLORS.find((c) => c.name === saved);\n if (color) applyColor(color);\n }, []);\n\n function select(color: BrandColor) {\n applyColor(color);\n setActive(color.name);\n setOpen(false);\n }\n\n const activeHex = PREVIEW_HEX[active] ?? '#27272a';\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n aria-label=\"Change brand color\"\n >\n <span className=\"relative inline-flex size-4 items-center justify-center\">\n <Palette className=\"size-4\" />\n <span\n className={`absolute -bottom-0.5 -right-0.5 size-1.5 rounded-full ring-1 ring-background${\n active === 'zinc' ? ' dark:ring-white/25' : ''\n }`}\n style={{ background: activeHex }}\n />\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-3\" align=\"end\">\n <p className=\"mb-2.5 text-xs font-medium text-muted-foreground\">Brand color</p>\n <div className=\"grid grid-cols-4 gap-1.5\">\n {BRAND_COLORS.map((color) => (\n <button\n key={color.name}\n type=\"button\"\n onClick={() => select(color)}\n title={color.label}\n className=\"group flex flex-col items-center gap-1\"\n >\n <span\n // Zinc's swatch is near-black — give it a border in dark mode so it\n // doesn't vanish into the popover background (transparent in light)\n className={`flex size-7 items-center justify-center rounded-full ring-offset-background transition-all group-hover:scale-110${\n color.name === 'zinc' ? ' border border-transparent dark:border-white/25' : ''\n }`}\n style={{\n background: PREVIEW_HEX[color.name],\n boxShadow:\n active === color.name\n ? `0 0 0 2px var(--background), 0 0 0 4px ${PREVIEW_HEX[color.name]}`\n : undefined,\n }}\n >\n {active === color.name && (\n <svg className=\"size-3 text-white\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\">\n <path d=\"M20 6L9 17l-5-5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">{color.label}</span>\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\ninterface ThemeColorUpdaterProps {\n colorTheme?: string;\n}\n\n/**\n * Applies a data-theme attribute to the document root when a color theme is selected.\n * Use CSS selectors like `[data-theme=\"blue\"] { --primary: ... }` to apply theme colors.\n */\nexport function ThemeColorUpdater({ colorTheme }: ThemeColorUpdaterProps) {\n React.useEffect(() => {\n if (colorTheme) {\n document.documentElement.setAttribute('data-theme', colorTheme);\n } else {\n document.documentElement.removeAttribute('data-theme');\n }\n }, [colorTheme]);\n\n return null;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\ninterface VersionBannerProps {\n version: string;\n message?: string;\n className?: string;\n onDismiss?: () => void;\n}\n\nexport function VersionBanner({ version, message, className, onDismiss }: VersionBannerProps) {\n const [dismissed, setDismissed] = React.useState(false);\n\n if (dismissed) return null;\n\n return (\n <div className={cn('flex items-center justify-between gap-4 bg-primary/10 px-4 py-2 text-sm', className)}>\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded bg-primary/20 px-1.5 py-0.5 font-mono text-xs font-semibold text-primary\">\n v{version}\n </span>\n {message && <span className=\"text-muted-foreground\">{message}</span>}\n </div>\n {onDismiss && (\n <button\n onClick={() => { setDismissed(true); onDismiss(); }}\n className=\"text-muted-foreground transition-colors hover:text-foreground\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { cn } from '../lib/utils';\n\nexport interface DevBannerProps {\n environment?: string;\n className?: string;\n}\n\nexport function DevBanner({ environment = 'development', className }: DevBannerProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center gap-2 bg-amber-500/15 px-4 py-1 text-xs font-medium text-amber-700 dark:text-amber-400',\n className,\n )}\n >\n <span className=\"size-1.5 rounded-full bg-amber-500\" />\n <span>{environment}</span>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\n\ninterface RootErrorFallbackProps {\n error: Error;\n reset: () => void;\n}\n\nexport function RootErrorFallback({ error, reset }: RootErrorFallbackProps) {\n return (\n <div className=\"flex min-h-svh flex-col items-center justify-center gap-6 p-8 text-center\">\n <div className=\"flex flex-col items-center gap-3\">\n <AlertTriangle className=\"size-12 text-destructive\" />\n <h2 className=\"text-xl font-semibold\">Something went wrong</h2>\n <p className=\"max-w-md text-sm text-muted-foreground\">\n {error.message || 'An unexpected error occurred.'}\n </p>\n </div>\n <Button onClick={reset} variant=\"outline\">\n Try again\n </Button>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PostAuthor {\n name: string;\n role?: string;\n avatar?: string;\n}\n\nexport interface PostCardProps {\n title: string;\n description?: string;\n date: string;\n slug: string;\n image?: string;\n tags?: string[];\n author?: PostAuthor;\n hrefPrefix?: string;\n tagHrefPrefix?: string;\n renderLink?: AppShellRenderLink;\n}\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n}\n\nexport function PostCard({\n title,\n description,\n date,\n slug,\n image,\n tags,\n author,\n hrefPrefix = '/blog',\n tagHrefPrefix = '/blog/tag',\n renderLink,\n}: PostCardProps) {\n const href = `${hrefPrefix}/${slug}`;\n\n const LinkWrapper = ({\n href: linkHref,\n children,\n className,\n }: {\n href: string;\n children: React.ReactNode;\n className?: string;\n }) =>\n renderLink ? (\n renderLink({ href: linkHref, children, className })\n ) : (\n <a href={linkHref} className={className}>\n {children}\n </a>\n );\n\n return (\n <article className=\"group relative flex flex-col items-start\">\n <div className=\"relative w-full overflow-hidden rounded-2xl bg-muted\">\n {image ? (\n <img\n src={image}\n alt={title}\n className=\"aspect-video w-full object-cover transition-transform duration-500 group-hover:scale-[1.03]\"\n />\n ) : (\n <div\n aria-hidden\n className=\"aspect-video w-full bg-gradient-to-br from-primary/15 via-muted to-muted\"\n />\n )}\n <div className=\"pointer-events-none absolute inset-0 rounded-2xl ring-1 ring-inset ring-foreground/10\" />\n </div>\n\n <div className=\"flex w-full grow flex-col\">\n <div className=\"mt-6 flex flex-wrap items-center gap-x-3 gap-y-2 text-xs\">\n <time dateTime={date} className=\"text-muted-foreground\">\n {formatDate(date)}\n </time>\n {tags?.map((tag) => (\n <LinkWrapper\n key={tag}\n href={`${tagHrefPrefix}/${encodeURIComponent(tag)}`}\n className=\"relative z-10 rounded-full bg-muted px-3 py-1.5 font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n >\n {tag}\n </LinkWrapper>\n ))}\n </div>\n\n <div className=\"grow\">\n <h2 className=\"mt-3 text-lg font-semibold leading-snug tracking-tight transition-colors group-hover:text-primary\">\n <LinkWrapper href={href}>\n <span className=\"absolute inset-0\" aria-hidden />\n {title}\n </LinkWrapper>\n </h2>\n {description && (\n <p className=\"mt-3 line-clamp-3 text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {author && (\n <div className=\"mt-6 flex items-center gap-x-3\">\n {author.avatar ? (\n <img\n src={author.avatar}\n alt={author.name}\n className=\"size-9 rounded-full bg-muted object-cover\"\n />\n ) : (\n <span\n aria-hidden\n className=\"flex size-9 items-center justify-center rounded-full bg-muted text-sm font-semibold text-muted-foreground\"\n >\n {author.name.charAt(0).toUpperCase()}\n </span>\n )}\n <div className=\"text-sm leading-tight\">\n <p className=\"font-semibold\">{author.name}</p>\n {author.role && <p className=\"text-muted-foreground\">{author.role}</p>}\n </div>\n </div>\n )}\n </div>\n </article>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\nimport { PostCard, type PostCardProps } from './PostCard';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PostListProps {\n posts: PostCardProps[];\n renderLink?: AppShellRenderLink;\n emptyMessage?: string;\n /** Max columns at the widest breakpoint. */\n columns?: 2 | 3;\n className?: string;\n}\n\nexport function PostList({\n posts,\n renderLink,\n emptyMessage = 'No posts published yet.',\n columns = 3,\n className,\n}: PostListProps) {\n if (posts.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground italic\">{emptyMessage}</p>\n );\n }\n\n return (\n <div\n className={cn(\n 'grid grid-cols-1 gap-x-8 gap-y-14 sm:grid-cols-2',\n columns === 3 && 'lg:grid-cols-3',\n className,\n )}\n >\n {posts.map((post) => (\n <PostCard key={post.slug} {...post} renderLink={renderLink} />\n ))}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, cn } from '@olwiba/cn';\nimport { ArrowRight } from 'lucide-react';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport type ChangelogReleaseType = 'release' | 'fix' | 'enhancement';\n\nexport interface ChangelogHighlight {\n title: string;\n description: string;\n}\n\nexport interface ChangelogCardProps {\n title: string;\n summary: string;\n date: string;\n slug: string;\n version?: string;\n releaseType?: ChangelogReleaseType;\n highlights?: ChangelogHighlight[];\n hrefPrefix?: string;\n renderLink?: AppShellRenderLink;\n}\n\nconst releaseTypeLabel: Record<ChangelogReleaseType, string> = {\n release: 'Major Release',\n fix: 'Fix',\n enhancement: 'Enhancement',\n};\n\nconst releaseTypeVariant: Record<ChangelogReleaseType, 'default' | 'secondary' | 'outline'> = {\n release: 'default',\n fix: 'outline',\n enhancement: 'secondary',\n};\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n\nexport function ChangelogCard({\n title,\n summary,\n date,\n slug,\n version,\n releaseType,\n highlights,\n hrefPrefix = '/changelog',\n renderLink,\n}: ChangelogCardProps) {\n const href = `${hrefPrefix}/${slug}`;\n\n const LinkWrapper = ({\n children,\n className,\n }: {\n children: React.ReactNode;\n className?: string;\n }) =>\n renderLink ? (\n renderLink({ href, children, className })\n ) : (\n <a href={href} className={className}>\n {children}\n </a>\n );\n\n const hasHighlights = highlights && highlights.length > 0;\n\n return (\n <article\n className={cn(\n 'flex flex-col gap-5 rounded-2xl border border-border bg-card p-6 sm:p-8',\n !hasHighlights && 'border-b border-border/60 rounded-none bg-transparent p-0 pb-8 last:pb-0 last:border-0',\n )}\n >\n {/* Header row */}\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <time className=\"text-sm text-muted-foreground\" dateTime={date}>\n {formatDate(date)}\n </time>\n {version && (\n <Badge variant=\"secondary\" className=\"font-mono text-xs\">\n {version}\n </Badge>\n )}\n {releaseType && (\n <Badge variant={releaseTypeVariant[releaseType]} className=\"text-xs\">\n {releaseTypeLabel[releaseType]}\n </Badge>\n )}\n </div>\n <LinkWrapper className=\"inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline\">\n Read update\n <ArrowRight className=\"size-3.5\" />\n </LinkWrapper>\n </div>\n\n {/* Title + summary */}\n <div>\n <h2 className=\"text-lg font-semibold leading-snug tracking-tight\">\n <LinkWrapper className=\"transition-colors hover:text-primary\">{title}</LinkWrapper>\n </h2>\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{summary}</p>\n </div>\n\n {/* Highlights grid */}\n {hasHighlights && (\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {highlights.map((h) => (\n <div\n key={h.title}\n className=\"rounded-xl border border-border/70 bg-background p-4\"\n >\n <p className=\"text-sm font-semibold leading-snug\">{h.title}</p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">{h.description}</p>\n </div>\n ))}\n </div>\n )}\n </article>\n );\n}\n","'use client';\n\nimport type { AppShellRenderLink } from '../app/AppShell';\nimport { ChangelogCard, type ChangelogCardProps } from './ChangelogCard';\n\nexport interface ChangelogListProps {\n entries: ChangelogCardProps[];\n renderLink?: AppShellRenderLink;\n emptyMessage?: string;\n hrefPrefix?: string;\n}\n\nexport function ChangelogList({\n entries,\n renderLink,\n emptyMessage = 'No changelog entries yet.',\n hrefPrefix,\n}: ChangelogListProps) {\n if (entries.length === 0) {\n return <p className=\"text-sm italic text-muted-foreground\">{emptyMessage}</p>;\n }\n\n return (\n <div className=\"flex flex-col gap-8\">\n {entries.map((entry) => (\n <ChangelogCard\n key={entry.slug}\n {...entry}\n hrefPrefix={hrefPrefix}\n renderLink={renderLink}\n />\n ))}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\n\nexport function useMounted() {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface ConfirmOptions {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\nexport interface UseConfirmReturn {\n confirm: (options?: ConfirmOptions) => Promise<boolean>;\n isOpen: boolean;\n options: ConfirmOptions;\n handleConfirm: () => void;\n handleCancel: () => void;\n}\n\n/**\n * Headless confirmation hook. Returns state and handlers for building a confirm dialog.\n *\n * @example\n * const { confirm, isOpen, options, handleConfirm, handleCancel } = useConfirm();\n *\n * // Trigger confirmation\n * const ok = await confirm({ title: 'Delete item?', description: 'This cannot be undone.' });\n *\n * // Wire up your dialog\n * <AlertDialog open={isOpen}>\n * <AlertDialogContent>\n * <AlertDialogTitle>{options.title}</AlertDialogTitle>\n * <AlertDialogFooter>\n * <AlertDialogCancel onClick={handleCancel} />\n * <AlertDialogAction onClick={handleConfirm} />\n * </AlertDialogFooter>\n * </AlertDialogContent>\n * </AlertDialog>\n */\nexport function useConfirm(): UseConfirmReturn {\n const [isOpen, setIsOpen] = React.useState(false);\n const [options, setOptions] = React.useState<ConfirmOptions>({});\n const resolveRef = React.useRef<((value: boolean) => void) | null>(null);\n\n const confirm = React.useCallback((opts: ConfirmOptions = {}): Promise<boolean> => {\n setOptions(opts);\n setIsOpen(true);\n return new Promise<boolean>((resolve) => {\n resolveRef.current = resolve;\n });\n }, []);\n\n const handleConfirm = React.useCallback(() => {\n resolveRef.current?.(true);\n setIsOpen(false);\n }, []);\n\n const handleCancel = React.useCallback(() => {\n resolveRef.current?.(false);\n setIsOpen(false);\n }, []);\n\n return { confirm, isOpen, options, handleConfirm, handleCancel };\n}\n","'use client';\n\nimport * as React from 'react';\n\n/**\n * Returns true when the page has scrolled past a given Y threshold in pixels.\n * Useful for showing/hiding sticky headers, back-to-top buttons, etc.\n *\n * @example\n * const scrolledPast = useScrolledPast(100);\n * return <header className={scrolledPast ? 'shadow-md' : ''}>...</header>;\n */\nexport function useScrolledPast(threshold: number): boolean {\n const [scrolledPast, setScrolledPast] = React.useState(false);\n\n React.useEffect(() => {\n const handleScroll = () => {\n setScrolledPast(window.scrollY > threshold);\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [threshold]);\n\n return scrolledPast;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useCopyToClipboard(): [boolean, (text: string) => void] {\n const [copied, setCopied] = React.useState(false);\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const copy = React.useCallback((text: string) => {\n navigator.clipboard.writeText(text).then(() => {\n setCopied(true);\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), 2000);\n });\n }, []);\n\n React.useEffect(() => () => clearTimeout(timeoutRef.current), []);\n\n return [copied, copy];\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = React.useState(value);\n\n React.useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debounced;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T) => void] {\n const [storedValue, setStoredValue] = React.useState<T>(() => {\n if (typeof window === 'undefined') return initialValue;\n try {\n const item = window.localStorage.getItem(key);\n return item ? (JSON.parse(item) as T) : initialValue;\n } catch {\n return initialValue;\n }\n });\n\n const setValue = React.useCallback(\n (value: T) => {\n try {\n setStoredValue(value);\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore — private browsing may block localStorage writes\n }\n },\n [key],\n );\n\n return [storedValue, setValue];\n}\n","'use client';\n\nimport { useLocalStorage } from './use-local-storage';\nimport { useMounted } from './use-mounted';\n\nexport type ViewMode = 'cards' | 'list';\n\nexport interface UseViewModeReturn {\n view: ViewMode;\n setView: (view: ViewMode) => void;\n /**\n * False until the stored preference is readable. Render a skeleton or hold\n * the section until this is true — see the note below on why.\n */\n ready: boolean;\n}\n\n/**\n * Remembered cards/list preference.\n *\n * Returns the fallback on the server and on the first client render, then\n * settles to the stored value once mounted. Returning the stored value\n * immediately would have the server emit card markup while the client builds\n * a table — a hydration mismatch — and painting the fallback first flashes\n * the wrong view at someone who chose the other one. `ready` lets callers\n * wait for the real answer instead of doing either.\n *\n * The key is shared by default so the choice reads as one product-wide\n * preference: pick list on one page and every page follows. Pass a distinct\n * key where a page genuinely wants its own.\n */\nexport function useViewMode(key = 'view-mode', fallback: ViewMode = 'cards'): UseViewModeReturn {\n const [stored, setStored] = useLocalStorage<ViewMode>(key, fallback);\n const mounted = useMounted();\n return { view: mounted ? stored : fallback, setView: setStored, ready: mounted };\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface UsePaginationReturn {\n page: number;\n pageSize: number;\n totalPages: number;\n offset: number;\n hasPrev: boolean;\n hasNext: boolean;\n goTo: (page: number) => void;\n next: () => void;\n prev: () => void;\n}\n\nexport function usePagination(total: number, pageSize: number): UsePaginationReturn {\n const [page, setPage] = React.useState(1);\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const offset = (page - 1) * pageSize;\n\n const goTo = React.useCallback(\n (p: number) => setPage(Math.min(Math.max(1, p), totalPages)),\n [totalPages],\n );\n\n const next = React.useCallback(() => goTo(page + 1), [page, goTo]);\n const prev = React.useCallback(() => goTo(page - 1), [page, goTo]);\n\n return { page, pageSize, totalPages, offset, hasPrev: page > 1, hasNext: page < totalPages, goTo, next, prev };\n}\n"]}
1
+ {"version":3,"sources":["../src/context/OlwibaUIContext.tsx","../src/primitives/Button.tsx","../src/primitives/Card.tsx","../src/primitives/Badge.tsx","../src/primitives/Input.tsx","../src/primitives/Textarea.tsx","../src/primitives/Checkbox.tsx","../src/primitives/Switch.tsx","../src/layout/Grid.tsx","../src/layout/Stack.tsx","../src/layout/Section.tsx","../src/layout/AppContent.tsx","../src/layout/AppGrid.tsx","../src/layout/PublicPageFrame.tsx","../src/app/AppShell.tsx","../src/app/AuthSection.tsx","../src/app/SettingsSection.tsx","../src/components/DataTable.tsx","../src/app/TeamMembersPanel.tsx","../src/app/BillingPanel.tsx","../src/app/OnboardingWizard.tsx","../src/app/EmptyState.tsx","../src/app/ErrorPage.tsx","../src/app/UpgradePrompt.tsx","../src/app/UpdateBanner.tsx","../src/motion/FadeIn.tsx","../src/marketing/SectionTitle.tsx","../src/marketing/section-spacing.ts","../src/components/PhoneFrame.tsx","../src/marketing/HeroSection.tsx","../src/components/FeatureCard.tsx","../src/mechanics/Carousel.tsx","../src/motion/StaggerChildren.tsx","../src/marketing/FeaturesSection.tsx","../src/marketing/GroupedFeaturesSection.tsx","../src/marketing/StepsSection.tsx","../src/marketing/TechStackSection.tsx","../src/marketing/FeatureMarqueeSection.tsx","../src/hooks/use-intersection-observer.ts","../src/marketing/CtaSection.tsx","../src/motion/AnimatedSwap.tsx","../src/components/PricingCard.tsx","../src/motion/CountdownTimer.tsx","../src/marketing/PricingSection.tsx","../src/components/TestimonialCard.tsx","../src/marketing/TestimonialsSection.tsx","../src/marketing/TeamSection.tsx","../src/marketing/FaqSection.tsx","../src/motion/CountUp.tsx","../src/marketing/StatsSection.tsx","../src/marketing/NewsletterSection.tsx","../src/marketing/ContactSection.tsx","../src/marketing/ComparisonSection.tsx","../src/marketing/QualificationSection.tsx","../src/marketing/Navbar.tsx","../src/marketing/Footer.tsx","../src/marketing/LogoStrip.tsx","../src/overlays/Underlay.tsx","../src/overlays/Overlay.tsx","../src/motion/AnimatedPill.tsx","../src/motion/PageTransition.tsx","../src/mechanics/Sortable.tsx","../src/components/Spotlight.tsx","../src/components/Dock.tsx","../src/components/ContextMenu.tsx","../src/components/ConfirmDialog.tsx","../src/components/RegisterHotkeys.tsx","../src/hooks/use-controlled-open.ts","../src/components/CommandMenu.tsx","../src/app/DataView.tsx","../src/components/Chart.tsx","../src/components/FileUpload.tsx","../src/components/Notify.tsx","../src/components/NotificationsPopover.tsx","../src/components/ActivityFeed.tsx","../src/components/AppScreen.tsx","../src/components/GlassCard.tsx","../src/components/StatCard.tsx","../src/components/ImageCard.tsx","../src/components/MediaCard.tsx","../src/components/ViewToggle.tsx","../src/components/FlowConnector.tsx","../src/components/FlowBracket.tsx","../src/components/Spinner.tsx","../src/components/PageHeader.tsx","../src/components/Suspensed.tsx","../src/components/ThemeSwitchMinimal.tsx","../src/components/ModeSwitchMinimal.tsx","../src/components/BrandColorSwitchMinimal.tsx","../src/components/ThemeColorUpdater.tsx","../src/components/VersionBanner.tsx","../src/components/DevBanner.tsx","../src/components/RootErrorFallback.tsx","../src/blog/PostCard.tsx","../src/blog/PostList.tsx","../src/blog/ChangelogCard.tsx","../src/blog/ChangelogList.tsx","../src/hooks/use-mounted.ts","../src/hooks/use-confirm.ts","../src/hooks/use-scrolled-past.ts","../src/hooks/use-copy-to-clipboard.ts","../src/hooks/use-debounce.ts","../src/hooks/use-local-storage.ts","../src/hooks/use-view-mode.ts","../src/hooks/use-media-query.ts","../src/hooks/use-pagination.ts"],"names":["React","React2","jsx","CNButton","React3","CNCard","CNBadge","React4","CNInput","React5","CNTextarea","React6","CNCheckbox","React7","CNSwitch","gapMap","spanMap","spacingMap","maxWidthMap","jsxs","cn","defaultRenderLink","Badge","React8","CardHeader","CardTitle","CardDescription","Fragment","CardContent","form","Checkbox","React9","React10","Label","Avatar","AvatarImage","AvatarFallback","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","React11","React12","Loader2","Button","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","React13","Card","Sparkles","React14","useUIVariant","ArrowRight","React15","ChevronLeft","ChevronRight","translateMap","React16","React17","React18","React19","Separator","Check","React21","React22","badge","React23","React24","defaults","React25","Mail","X","React26","speedDuration","React27","useRef","useEffect","React28","React29","React30","Search","React31","RadixContextMenu","React32","React33","React34","CommandDialog","CommandInput","CommandList","CommandEmpty","CommandSeparator","CommandGroup","CommandItem","React35","Tooltip","React36","FileIcon","CheckCircle2","AlertCircle","Inbox","blurClass","React37","React38","Spinner","React39","LayoutGrid","React40","Popover","PopoverTrigger","PopoverContent","React41","React42","AlertTriangle","formatDate","useState","React43","React44","React45","React46","React47","React48","React49"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useIsMobile, UIVariantProvider, type UIVariant } from '@olwiba/cn';\n\nexport type UIMode = 'default' | 'playful' | 'smooth';\n\ninterface OlwibaUIContextValue {\n isMobile: boolean;\n mode: UIMode;\n setMode: (mode: UIMode) => void;\n}\n\nconst OlwibaUIContext = React.createContext<OlwibaUIContextValue>({\n isMobile: false,\n mode: 'default',\n setMode: () => {},\n});\n\nexport interface OlwibaUIProviderProps {\n children: React.ReactNode;\n /**\n * Override the mobile detection. If omitted, uses useIsMobile() from @olwiba/cn\n * which detects based on a 768px viewport breakpoint.\n */\n isMobile?: boolean;\n /**\n * Global component mode. Primitives imported from @olwiba/ui will automatically\n * apply this mode unless overridden at the component level.\n *\n * - `'default'` — standard square shadcn/Radix appearance\n * - `'playful'` — slight rotation + offset drop shadow backdrop\n * - `'smooth'` — softer, larger border-radius across all components\n */\n mode?: UIMode;\n}\n\nexport function OlwibaUIProvider({ children, isMobile: isMobileProp, mode: initialMode = 'default' }: OlwibaUIProviderProps) {\n const detectedMobile = useIsMobile();\n const isMobile = isMobileProp ?? detectedMobile;\n const [mode, setMode] = React.useState<UIMode>(initialMode);\n\n const variant = mode !== 'default' ? (mode as UIVariant) : undefined;\n\n return (\n <OlwibaUIContext.Provider value={{ isMobile, mode, setMode }}>\n <UIVariantProvider mode={variant}>\n {children}\n </UIVariantProvider>\n </OlwibaUIContext.Provider>\n );\n}\n\nexport function useOlwibaUI() {\n return React.useContext(OlwibaUIContext);\n}\n\n/** Returns just the current UI mode from context. */\nexport function useUIMode(): UIMode {\n return React.useContext(OlwibaUIContext).mode;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Button as CNButton, type ButtonProps as CNButtonProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type ButtonProps = CNButtonProps;\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNButton mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nButton.displayName = 'Button';\n","'use client';\n\nimport * as React from 'react';\nimport {\n Card as CNCard, type CardProps as CNCardProps,\n CardHeader, CardTitle, CardDescription, CardContent, CardFooter,\n} from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type CardProps = CNCardProps;\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNCard mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nCard.displayName = 'Card';\n\n// Sub-components are pass-throughs — no mode logic needed.\nexport { CardHeader, CardTitle, CardDescription, CardContent, CardFooter };\n","'use client';\n\nimport * as React from 'react';\nimport { Badge as CNBadge, type BadgeProps as CNBadgeProps } from '@olwiba/cn';\n\n// Badge no longer supports mode — variant/size/disabled only.\nexport type BadgeProps = CNBadgeProps;\n\nexport function Badge(props: BadgeProps) {\n return <CNBadge {...props} />;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Input as CNInput, type InputProps as CNInputProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type InputProps = CNInputProps;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNInput mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nInput.displayName = 'Input';\n","'use client';\n\nimport * as React from 'react';\nimport { Textarea as CNTextarea, type TextareaProps as CNTextareaProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type TextareaProps = CNTextareaProps;\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNTextarea mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nTextarea.displayName = 'Textarea';\n","'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CNCheckbox, type CheckboxProps as CNCheckboxProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type CheckboxProps = CNCheckboxProps;\n\nexport const Checkbox = React.forwardRef<\n React.ElementRef<typeof CNCheckbox>,\n CheckboxProps\n>(({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNCheckbox mode={resolvedMode} {...props} ref={ref} />;\n});\nCheckbox.displayName = 'Checkbox';\n","'use client';\n\nimport * as React from 'react';\nimport { Switch as CNSwitch, type SwitchProps as CNSwitchProps } from '@olwiba/cn';\n\nexport type SwitchProps = CNSwitchProps & {\n mode?: 'default' | 'playful' | 'smooth';\n};\n\nexport const Switch = React.forwardRef<\n React.ElementRef<typeof CNSwitch>,\n SwitchProps\n>(({ mode: _mode, ...props }, ref) => {\n return <CNSwitch {...props} ref={ref} />;\n});\nSwitch.displayName = 'Switch';\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst colsMap: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n 12: 'grid-cols-12',\n}\n\nconst gapMap = {\n none: 'gap-0',\n xs: 'gap-2',\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n}\n\nconst spanMap: Record<number, string> = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n}\n\nconst rowSpanMap: Record<number, string> = {\n 1: 'row-span-1',\n 2: 'row-span-2',\n 3: 'row-span-3',\n 4: 'row-span-4',\n}\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: 1 | 2 | 3 | 4 | 5 | 6 | 12\n gap?: keyof typeof gapMap\n}\n\nexport function Grid({ columns = 3, gap = 'md', className, children, ...props }: GridProps) {\n return (\n <div className={cn('grid', colsMap[columns], gapMap[gap], className)} {...props}>\n {children}\n </div>\n )\n}\n\nexport interface GridItemProps extends React.HTMLAttributes<HTMLDivElement> {\n span?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n rowSpan?: 1 | 2 | 3 | 4\n}\n\nexport function GridItem({ span = 1, rowSpan, className, children, ...props }: GridItemProps) {\n return (\n <div\n className={cn(spanMap[span], rowSpan != null && rowSpanMap[rowSpan], className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst gapMap = {\n none: 'gap-0',\n xs: 'gap-2',\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n}\n\nconst alignMap = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n}\n\nconst justifyMap = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n}\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'col' | 'row'\n gap?: keyof typeof gapMap\n align?: keyof typeof alignMap\n justify?: keyof typeof justifyMap\n wrap?: boolean\n}\n\nexport function Stack({\n direction = 'col',\n gap = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n className,\n children,\n ...props\n}: StackProps) {\n return (\n <div\n className={cn(\n 'flex',\n direction === 'col' ? 'flex-col' : 'flex-row',\n gapMap[gap],\n alignMap[align],\n justifyMap[justify],\n wrap && 'flex-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst paddingMap = {\n none: '',\n sm: 'py-4',\n md: 'py-8',\n lg: 'py-16',\n}\n\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n title?: string\n description?: string\n padding?: keyof typeof paddingMap\n}\n\nexport function Section({ title, description, padding = 'md', className, children, ...props }: SectionProps) {\n return (\n <section className={cn('w-full', paddingMap[padding], className)} {...props}>\n {(title || description) && (\n <div className=\"mb-6\">\n {title && <h2 className=\"text-xl font-semibold text-foreground\">{title}</h2>}\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n )}\n {children}\n </section>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst spacingMap = {\n sm: 'space-y-4',\n md: 'space-y-6',\n lg: 'space-y-8',\n}\n\nconst maxWidthMap = {\n none: '',\n 'screen-lg': 'mx-auto max-w-screen-lg',\n 'screen-xl': 'mx-auto max-w-screen-xl',\n 'screen-2xl': 'mx-auto max-w-screen-2xl',\n}\n\nexport interface AppContentProps extends React.HTMLAttributes<HTMLDivElement> {\n spacing?: keyof typeof spacingMap\n maxWidth?: keyof typeof maxWidthMap\n}\n\nexport function AppContent({\n spacing = 'md',\n maxWidth = 'none',\n className,\n children,\n ...props\n}: AppContentProps) {\n return (\n <div className={cn('p-6', maxWidthMap[maxWidth], spacingMap[spacing], className)} {...props}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Responsive ramps per column count. Every ramp starts at a single column —\n * a card grid that stays multi-column on a phone is unreadable — and adds\n * columns at breakpoints wide enough to keep each card legible.\n *\n * Written out in full rather than composed, because Tailwind scans source for\n * complete class strings; a template literal like `xl:grid-cols-${n}` produces\n * nothing at build time.\n */\nconst columnsMap = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6',\n}\n\nconst gapMap = {\n none: 'gap-0',\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst spanMap = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'xl:col-span-4',\n full: 'col-span-full',\n}\n\nexport type AppGridColumns = keyof typeof columnsMap\n\nexport interface AppGridProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Columns at the widest breakpoint. Narrower screens step down through the\n * ramp automatically, so this is \"how dense at full width\", not a fixed\n * count. Default 3.\n */\n columns?: AppGridColumns\n gap?: keyof typeof gapMap\n}\n\nexport function AppGrid({ columns = 3, gap = 'md', className, children, ...props }: AppGridProps) {\n return (\n <div className={cn('grid', columnsMap[columns], gapMap[gap], className)} {...props}>\n {children}\n </div>\n )\n}\n\nexport interface AppGridCellProps extends React.HTMLAttributes<HTMLDivElement> {\n span?: keyof typeof spanMap\n}\n\nexport function AppGridCell({ span = 1, className, children, ...props }: AppGridCellProps) {\n return (\n <div className={cn(spanMap[span], className)} {...props}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nconst surfaceMap = {\n default: 'bg-background',\n muted: 'bg-muted/50',\n}\n\nconst spacingMap = {\n sm: 'gap-4 p-4',\n md: 'gap-5 p-4 sm:gap-6 sm:p-6',\n lg: 'gap-6 p-4 sm:gap-8 sm:p-6',\n}\n\nconst maxWidthMap = {\n none: '',\n 'screen-xl': 'mx-auto max-w-screen-xl',\n 'screen-2xl': 'mx-auto max-w-screen-2xl',\n}\n\nexport interface PublicPageFrameProps extends React.HTMLAttributes<HTMLDivElement> {\n surface?: keyof typeof surfaceMap\n spacing?: keyof typeof spacingMap\n maxWidth?: keyof typeof maxWidthMap\n}\n\nexport function PublicPageFrame({\n surface = 'muted',\n spacing = 'md',\n maxWidth = 'none',\n className,\n children,\n ...props\n}: PublicPageFrameProps) {\n return (\n <div className={cn('min-h-screen', surfaceMap[surface], className)} {...props}>\n <div className={cn('flex flex-col', spacingMap[spacing], maxWidthMap[maxWidth])}>\n {children}\n </div>\n </div>\n )\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport {\n BellIcon,\n CreditCardIcon,\n LogOutIcon,\n MoreVerticalIcon,\n PlusCircleIcon,\n} from 'lucide-react';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n cn,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Separator,\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n useSidebar,\n} from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface AppNavItem {\n icon: LucideIcon;\n label: string;\n href: string;\n isActive?: boolean;\n}\n\nexport interface AppShellAction {\n icon?: LucideIcon;\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface AppShellUser {\n email: string;\n name?: string;\n avatar?: string;\n /** Displayed as a sub-label (e.g. plan tier). */\n plan?: string;\n onSignOut?: () => void;\n onBilling?: () => void;\n onNotifications?: () => void;\n}\n\nexport interface AppShellBrand {\n name: ReactNode;\n logo?: ReactNode;\n href?: string;\n}\n\n/**\n * Render a navigation link. Override to integrate your router's Link component.\n * @example renderLink={({ href, children }) => <Link to={href}>{children}</Link>}\n */\nexport type AppShellRenderLink = (props: {\n href: string;\n children: ReactNode;\n className?: string;\n}) => ReactNode;\n\nexport interface AppShellProps {\n brand?: AppShellBrand;\n navItems?: AppNavItem[];\n /** Primary CTA rendered above nav (e.g. \"New project\", \"Quick create\") */\n action?: AppShellAction;\n user?: AppShellUser;\n /** Text shown in the top header bar */\n pageTitle?: string;\n /** Slot rendered at the start of the top header bar, after the sidebar trigger. */\n headerStart?: ReactNode;\n /** Slot rendered at the end of the top header bar. */\n headerEnd?: ReactNode;\n /** Override link rendering for SPA navigation. Defaults to a native <a>. */\n renderLink?: AppShellRenderLink;\n children?: ReactNode;\n /**\n * Sidebar collapse behaviour.\n * - `\"icon\"` — collapses to a narrow icon rail (default, recommended for desktop)\n * - `\"offcanvas\"` — slides off-screen as a drawer overlay\n * - `\"none\"` — always fully visible\n */\n collapsible?: 'icon' | 'offcanvas' | 'none';\n /**\n * Layout scope.\n * - `\"viewport\"` (default) — fills the full browser viewport; use for top-level app shells.\n * - `\"contained\"` — fills its parent container; use in docs sandboxes, modals, or embedded previews.\n */\n sidebarPosition?: 'viewport' | 'contained';\n /** Which side the sidebar sits on. @default \"left\" */\n side?: 'left' | 'right';\n /**\n * Class applied to the content wrapper around `children`, between the\n * header and the page content. Every consuming page otherwise has to\n * remember its own padding — some do, some don't, and the ones that don't\n * end up flush against the sidebar/header chrome. Override to `''` for a\n * genuinely edge-to-edge page (a full-width table, a map/canvas).\n * @default \"p-6\"\n */\n contentClassName?: string;\n}\n\n// ─── Internal sub-components ──────────────────────────────────────────────────\n\n/**\n * Shared by the two `size=\"lg\"` buttons that bookend the sidebar (brand, user).\n * Both hold a 32px square — a logo badge, an avatar — so in the collapsed rail\n * they shrink to exactly that instead of the size's default 48px.\n *\n * `transition-[width,height]` drops `padding` from the transition while\n * collapsed, and is load-bearing: the base variant animates padding, but\n * `!max-w-8` clamps the button to 32px instantly (max-width isn't\n * transitionable), so a padding still animating 16px→0 leaves a 0px-wide\n * content box on the first frame and `overflow-hidden` clips the corner off\n * the 32px badge for the whole 150ms. Snapping padding makes it fit from frame\n * one. Expanding is deliberately left on the base transition — there width and\n * padding animate together and the content box never drops below 32px.\n */\nconst RAIL_SQUARE =\n 'group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!min-w-8 group-data-[collapsible=icon]:!max-w-8 group-data-[collapsible=icon]:!p-0 group-data-[collapsible=icon]:transition-[width,height]';\n\nfunction NavUser({ user }: { user: AppShellUser }) {\n const { isMobile } = useSidebar();\n const uiMode = useUIMode();\n const avatarMode = uiMode !== 'default' ? (uiMode as 'playful' | 'smooth') : undefined;\n const initials = (user.name ?? user.email).slice(0, 2).toUpperCase();\n\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n // Collapsed, this is a bare avatar with no affordance saying it\n // opens anything — every other item in the rail has a tooltip,\n // so its absence reads as \"not a button\".\n tooltip={user.name ?? user.email}\n className={cn(\n 'data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground',\n RAIL_SQUARE,\n )}\n >\n <Avatar mode={avatarMode} size=\"sm\" className=\"grayscale\">\n {user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">{user.name ?? user.email}</span>\n <span className=\"truncate text-xs text-muted-foreground\">\n {user.plan ? `${user.plan} plan` : user.email}\n </span>\n </div>\n <MoreVerticalIcon className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg\"\n side={isMobile ? 'bottom' : 'right'}\n align=\"end\"\n sideOffset={4}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <Avatar mode={avatarMode} size=\"sm\">\n {user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">{user.name ?? user.email}</span>\n <span className=\"truncate text-xs text-muted-foreground\">{user.email}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n {(user.onBilling || user.onNotifications) && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n {user.onBilling && (\n <DropdownMenuItem onClick={user.onBilling}>\n <CreditCardIcon />\n Billing\n </DropdownMenuItem>\n )}\n {user.onNotifications && (\n <DropdownMenuItem onClick={user.onNotifications}>\n <BellIcon />\n Notifications\n </DropdownMenuItem>\n )}\n </DropdownMenuGroup>\n </>\n )}\n {user.onSignOut && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={user.onSignOut}>\n <LogOutIcon />\n Sign out\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n );\n}\n\nfunction ShellSidebar({\n brand,\n navItems,\n action,\n user,\n renderLink,\n collapsible,\n side,\n sidebarPosition,\n}: {\n brand: AppShellBrand;\n navItems: AppNavItem[];\n action?: AppShellAction;\n user: AppShellUser;\n renderLink: AppShellRenderLink;\n collapsible: 'icon' | 'offcanvas' | 'none';\n side: 'left' | 'right';\n sidebarPosition: 'viewport' | 'contained';\n}) {\n const fallbackLogo = typeof brand.name === 'string' ? brand.name.slice(0, 1).toUpperCase() : null;\n\n return (\n <Sidebar side={side} collapsible={collapsible} sidebarPosition={sidebarPosition}>\n <SidebarHeader className=\"py-3\">\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton\n asChild\n size=\"lg\"\n // No tooltip: unlike a nav item, the collapsed rail's logo is\n // still the logo — a hover label repeating the app's own name\n // is noise. Nav items keep theirs because a bare icon doesn't\n // say where it goes.\n className={RAIL_SQUARE}\n >\n {renderLink({\n href: brand.href ?? '#',\n children: (\n <>\n {brand.logo ? (\n // Neutral slot: the consumer's logo owns its own chrome\n // (background, radius). Sized to fill the collapsed icon rail.\n <span className=\"flex size-8 shrink-0 items-center justify-center [&>svg]:size-5\">\n {brand.logo}\n </span>\n ) : (\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary text-sm font-semibold text-primary-foreground\">\n {fallbackLogo}\n </span>\n )}\n <span className=\"min-w-0 truncate text-base font-semibold group-data-[collapsible=icon]:hidden\">\n {brand.name}\n </span>\n </>\n ),\n })}\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupContent className=\"flex flex-col gap-2\">\n {action && (\n <SidebarMenu>\n <SidebarMenuItem>\n {action.href ? (\n <SidebarMenuButton\n asChild\n tooltip={action.label}\n className=\"min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground\"\n >\n {renderLink({\n href: action.href,\n children: (\n <>\n {action.icon && <action.icon />}\n <span>{action.label}</span>\n </>\n ),\n })}\n </SidebarMenuButton>\n ) : (\n <SidebarMenuButton\n tooltip={action.label}\n onClick={action.onClick}\n className=\"min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground\"\n >\n {action.icon && <action.icon />}\n <span>{action.label}</span>\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n </SidebarMenu>\n )}\n\n <SidebarMenu>\n {navItems.map((item) => (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton asChild tooltip={item.label} isActive={item.isActive}>\n {renderLink({\n href: item.href,\n children: (\n <>\n <item.icon />\n <span>{item.label}</span>\n </>\n ),\n })}\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n\n <SidebarFooter>\n <NavUser user={user} />\n </SidebarFooter>\n </Sidebar>\n );\n}\n\nfunction ShellHeader({\n pageTitle,\n headerStart,\n headerEnd,\n}: {\n pageTitle: string;\n headerStart?: ReactNode;\n headerEnd?: ReactNode;\n}) {\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n <div className=\"flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6\">\n <SidebarTrigger className=\"-ml-1\" />\n {headerStart && (\n <div className=\"flex items-center gap-1\">\n {headerStart}\n </div>\n )}\n <Separator orientation=\"vertical\" className=\"mx-2 data-[orientation=vertical]:h-4\" />\n <h1 className=\"text-base font-medium\">{pageTitle}</h1>\n {headerEnd && (\n <div className=\"ml-auto flex items-center gap-1\">\n {headerEnd}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n// ─── Default placeholder values (keeps the shell renderable without required props) ─\n\nconst defaultBrand: AppShellBrand = {\n name: 'App',\n href: '#',\n};\n\nconst defaultUser: AppShellUser = {\n name: 'User',\n email: 'user@example.com',\n};\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\n// ─── Main export ──────────────────────────────────────────────────────────────\n\nexport function AppShell({\n brand = defaultBrand,\n navItems = [],\n action,\n user = defaultUser,\n pageTitle = 'Dashboard',\n headerStart,\n headerEnd,\n renderLink = defaultRenderLink,\n collapsible = 'icon',\n sidebarPosition = 'viewport',\n side = 'left',\n contentClassName = 'p-6',\n children,\n}: AppShellProps = {}) {\n const isContained = sidebarPosition === 'contained';\n\n const inner = (\n <SidebarProvider\n layout={isContained ? 'embedded' : 'viewport'}\n className={isContained ? 'overflow-hidden' : 'h-svh overflow-hidden'}\n >\n <ShellSidebar\n brand={brand}\n navItems={navItems}\n action={action}\n user={user}\n renderLink={renderLink}\n collapsible={collapsible}\n side={side}\n sidebarPosition={sidebarPosition}\n />\n <SidebarInset className={isContained ? undefined : 'overflow-y-auto'}>\n <ShellHeader pageTitle={pageTitle} headerStart={headerStart} headerEnd={headerEnd} />\n <div className={contentClassName}>{children}</div>\n </SidebarInset>\n </SidebarProvider>\n );\n\n if (isContained) {\n return (\n <div className=\"relative flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden\">\n {inner}\n </div>\n );\n }\n\n return inner;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Building2, Loader2, ShieldCheck, Sparkles } from 'lucide-react';\nimport {\n Badge,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n Label,\n cn,\n} from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { Card } from '../primitives/Card';\nimport { Input } from '../primitives/Input';\nimport type { AppShellRenderLink } from './AppShell';\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\n// ─── Centered layout ──────────────────────────────────────────────────────────\n\nfunction CenteredAuth({ children, brand, framed, className }: { children: React.ReactNode; brand?: React.ReactNode; framed?: boolean; className?: string }) {\n if (framed) {\n return (\n // Framed: a page frame is already supplying the background, the page\n // padding, and — with a navbar and footer around it — the height. All\n // three have to come off here or they are applied twice: padding inside\n // padding, and a full-viewport section that pushes the footer below the\n // fold on every auth screen.\n //\n // The card fills the content column on a phone, matching the contact\n // form, and only takes its reading width once there is room for the\n // page to centre it.\n <section className={cn('flex flex-col py-6 sm:py-10', className)}>\n <div className=\"mx-auto w-full max-w-none sm:my-auto sm:max-w-md\">\n {brand && <div className=\"mb-8 text-center\">{brand}</div>}\n {children}\n </div>\n </section>\n );\n }\n\n return (\n // `min-h-dvh`, not `min-h-screen`: on mobile `100vh` is the viewport with\n // the browser chrome *retracted*, so a screen-height box is always taller\n // than what you can actually see, and it resizes under you as the URL bar\n // hides and shows.\n <section className={cn('flex min-h-dvh flex-col bg-background px-4 py-10 sm:px-6 sm:py-12 lg:px-8', className)}>\n {/*\n Auto margins rather than `justify-center`, and only from `sm` up.\n\n A flex item centred with `justify-center` that's taller than its\n container overflows in *both* directions, and the overflow above the\n top edge is unreachable — no scrolling gets you back to it. That's the\n sign-up form on a phone: name, email, password and social buttons\n already run long, and focusing a field drops the keyboard over half\n the viewport. The top of the card, title included, becomes\n unscrollable.\n\n Auto margins collapse to zero when there's no free space, so the card\n stays reachable. Below `sm` there's no vertical centring at all — the\n form flows from the top like the contact page.\n */}\n <div className=\"mx-auto w-full max-w-md sm:my-auto\">\n {brand && <div className=\"mb-8 text-center\">{brand}</div>}\n {children}\n </div>\n </section>\n );\n}\n\n// ─── Split layout ─────────────────────────────────────────────────────────────\n\nfunction SplitAuth({ children, panel }: { children: React.ReactNode; panel?: React.ReactNode }) {\n const defaultPanel = (\n <div className=\"flex flex-col gap-6\">\n <Badge variant=\"secondary\" className=\"w-fit\">Welcome</Badge>\n <div className=\"space-y-3\">\n <h2 className=\"text-3xl font-semibold tracking-tight\">Build better, ship faster</h2>\n <p className=\"max-w-md text-muted-foreground\">\n Sign in to continue building with ready-made components and layouts.\n </p>\n </div>\n <div className=\"space-y-3 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2\"><ShieldCheck className=\"size-4\" /> Type-safe components</div>\n <div className=\"flex items-center gap-2\"><Sparkles className=\"size-4\" /> Polished defaults</div>\n <div className=\"flex items-center gap-2\"><Building2 className=\"size-4\" /> Plug-and-play shells</div>\n </div>\n </div>\n );\n\n return (\n <section className=\"grid h-full min-h-[560px] overflow-hidden rounded-2xl border bg-card lg:grid-cols-2\">\n <div className=\"relative hidden p-8 pb-16 lg:flex lg:flex-col lg:justify-center\">\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/20 via-transparent to-muted\" />\n <div className=\"relative z-10\">{panel ?? defaultPanel}</div>\n </div>\n <div className=\"flex items-center justify-center p-6 lg:p-10\">\n {children}\n </div>\n </section>\n );\n}\n\n// ─── Shared form slot ─────────────────────────────────────────────────────────\n\nexport interface AuthFormProps {\n /**\n * Controls form title, fields, and footer text.\n * - `'signin'` / `'signup'` — email + password\n * - `'forgot-password'` — email only, sends a reset link\n * - `'reset-password'` — new password + confirmation\n * - `'verify'` — one-time code entry (email verification or 2FA)\n * @default 'signin'\n */\n mode?: 'signin' | 'signup' | 'forgot-password' | 'reset-password' | 'verify';\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n onSso?: () => void;\n /** (signin) Link to the sign-up page */\n signUpHref?: string;\n /** (signup / forgot-password / reset-password / verify) Link back to the sign-in page */\n signInHref?: string;\n forgotPasswordHref?: string;\n /** (verify) Re-sends the one-time code */\n onResend?: () => void;\n /** (verify) Address the code was sent to, shown in the description */\n destination?: string;\n /** (verify) Number of digits in the code. @default 6 */\n codeLength?: number;\n /** Brand node — in centered layout renders above the card; in split layout renders inside the card */\n brand?: React.ReactNode;\n /** Error message displayed below the form fields */\n error?: string;\n /** Positive confirmation message displayed below the form fields (e.g. \"Reset link sent\") */\n success?: string;\n /** Disables the submit button and shows a loading label */\n loading?: boolean;\n /** Render prop for links — use to inject framework-native link components (e.g. TanStack Router Link) */\n renderLink?: AppShellRenderLink;\n /** Optional content rendered below the form — use for social auth buttons or other additions */\n footer?: React.ReactNode;\n /** Pre-fill the email field (e.g. from demo credential links). Triggers a brief border highlight animation. */\n defaultEmail?: string;\n /** Pre-fill the password field (e.g. from demo credential links). Triggers a brief border highlight animation. */\n defaultPassword?: string;\n}\n\nconst authCopy = {\n signin: { title: 'Sign in', description: 'Enter your email and password to continue.', submit: 'Sign in' },\n signup: { title: 'Create an account', description: 'Enter your details to create your account.', submit: 'Create account' },\n 'forgot-password': { title: 'Reset your password', description: 'Enter the email on your account and we’ll send you a link to reset your password.', submit: 'Send reset link' },\n 'reset-password': { title: 'Choose a new password', description: 'Your new password must be different from previous passwords.', submit: 'Reset password' },\n verify: { title: 'Enter your code', description: 'We sent a verification code to your email.', submit: 'Verify' },\n} as const;\n\nfunction DefaultForm({\n mode = 'signin',\n onSubmit,\n onSso,\n signUpHref = '#',\n signInHref = '#',\n forgotPasswordHref = '#',\n onResend,\n destination,\n codeLength = 6,\n brand,\n error,\n success,\n loading,\n renderLink = defaultRenderLink,\n footer,\n defaultEmail,\n defaultPassword,\n}: AuthFormProps) {\n const isSignUp = mode === 'signup';\n const isForgotPassword = mode === 'forgot-password';\n const isResetPassword = mode === 'reset-password';\n const isVerify = mode === 'verify';\n const [code, setCode] = React.useState('');\n const hasPrefill = !!(defaultEmail || defaultPassword);\n const prefillStyle = (active: boolean): React.CSSProperties | undefined =>\n active ? { animation: 'auth-prefill 1.6s ease-out 0.35s 1 both' } : undefined;\n const copy = authCopy[mode];\n\n return (\n <Card className=\"w-full\">\n {hasPrefill && (\n // Theme tokens hold full color values (oklch), so opacity must come from color-mix, not hsl(var()/a)\n <style>{`@keyframes auth-prefill{0%{box-shadow:0 0 0 0 transparent}40%{box-shadow:0 0 0 3px color-mix(in oklab,var(--primary) 45%,transparent),0 0 16px 2px color-mix(in oklab,var(--primary) 35%,transparent)}100%{box-shadow:0 0 0 0 transparent}}`}</style>\n )}\n <CardHeader>\n {brand && <div className=\"mb-2\">{brand}</div>}\n <CardTitle>{copy.title}</CardTitle>\n <CardDescription>\n {isVerify && destination ? (\n <>We sent a verification code to <span className=\"font-medium text-foreground\">{destination}</span>.</>\n ) : copy.description}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n {isSignUp && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-name\">Name</Label>\n <Input id=\"auth-name\" name=\"name\" type=\"text\" placeholder=\"Your name\" autoComplete=\"name\" />\n </div>\n )}\n\n {(mode === 'signin' || mode === 'signup' || isForgotPassword) && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-email\">Email address</Label>\n <Input\n id=\"auth-email\"\n name=\"email\"\n type=\"email\"\n placeholder=\"name@company.com\"\n autoComplete=\"email\"\n defaultValue={defaultEmail}\n style={prefillStyle(!!defaultEmail)}\n />\n </div>\n )}\n\n {(mode === 'signin' || mode === 'signup') && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"auth-password\">Password</Label>\n {!isSignUp && forgotPasswordHref && renderLink({\n href: forgotPasswordHref,\n className: 'text-xs text-muted-foreground underline underline-offset-4 hover:text-foreground',\n children: 'Forgot password?',\n })}\n </div>\n <Input\n id=\"auth-password\"\n name=\"password\"\n type=\"password\"\n placeholder=\"••••••••\"\n autoComplete={isSignUp ? 'new-password' : 'current-password'}\n defaultValue={defaultPassword}\n style={prefillStyle(!!defaultPassword)}\n />\n </div>\n )}\n\n {isResetPassword && (\n <>\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-new-password\">New password</Label>\n <Input id=\"auth-new-password\" name=\"password\" type=\"password\" placeholder=\"••••••••\" autoComplete=\"new-password\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-confirm-password\">Confirm password</Label>\n <Input id=\"auth-confirm-password\" name=\"confirmPassword\" type=\"password\" placeholder=\"••••••••\" autoComplete=\"new-password\" />\n </div>\n </>\n )}\n\n {isVerify && (\n <div className=\"space-y-2\">\n <input type=\"hidden\" name=\"code\" value={code} />\n <div className=\"flex justify-center py-2\">\n <InputOTP maxLength={codeLength} value={code} onChange={setCode} containerClassName=\"justify-center\">\n <InputOTPGroup>\n {Array.from({ length: codeLength }).map((_, i) => (\n <InputOTPSlot key={i} index={i} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n </div>\n </div>\n )}\n\n {error && (\n <p role=\"alert\" className=\"text-sm font-medium text-destructive\">{error}</p>\n )}\n {success && (\n <p role=\"status\" className=\"text-sm font-medium text-primary\">{success}</p>\n )}\n\n <div className=\"flex flex-col gap-2\">\n <Button type=\"submit\" className=\"w-full\" disabled={loading || (isVerify && code.length < codeLength)}>\n {loading && <Loader2 className=\"size-4 animate-spin\" />}\n {loading ? 'Please wait…' : copy.submit}\n </Button>\n {onSso && (mode === 'signin' || mode === 'signup') && (\n <Button type=\"button\" variant=\"outline\" className=\"w-full\" onClick={onSso} disabled={loading}>\n Use SSO\n </Button>\n )}\n </div>\n </form>\n\n {isVerify && onResend && (\n <p className=\"text-center text-xs text-muted-foreground\">\n Didn&rsquo;t get a code?{' '}\n <button type=\"button\" onClick={onResend} className=\"text-foreground underline underline-offset-4\">\n Resend\n </button>\n </p>\n )}\n\n {(mode === 'signin' || mode === 'signup') && (\n <p className=\"text-center text-xs text-muted-foreground\">\n {isSignUp ? (\n <>\n Already have an account?{' '}\n {renderLink({ href: signInHref, className: 'text-foreground underline underline-offset-4', children: 'Sign in' })}\n </>\n ) : (\n signUpHref && (\n <>\n New here?{' '}\n {renderLink({ href: signUpHref, className: 'text-foreground underline underline-offset-4', children: 'Create an account' })}\n </>\n )\n )}\n </p>\n )}\n\n {(isForgotPassword || isResetPassword || isVerify) && (\n <p className=\"text-center text-xs text-muted-foreground\">\n {renderLink({ href: signInHref, className: 'text-foreground underline underline-offset-4', children: 'Back to sign in' })}\n </p>\n )}\n\n {footer && <div>{footer}</div>}\n </CardContent>\n </Card>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport interface AuthSectionProps extends AuthFormProps {\n /** Visual layout of the auth screen. @default 'centered' */\n layout?: 'centered' | 'split';\n /** Custom form/card content. Defaults to the built-in form. */\n children?: React.ReactNode;\n /** (split layout only) Custom content for the left decorative panel */\n panel?: React.ReactNode;\n /**\n * Render inside an existing page frame — one already providing the\n * background, the horizontal padding, and a navbar and footer.\n *\n * Standalone (the default) the section owns the whole viewport, which is\n * right for an auth screen that is the only thing on the page. It is wrong\n * the moment there is chrome around it: the padding lands on top of the\n * frame's own, and `min-h-dvh` guarantees the footer starts below the fold.\n *\n * (centered layout only)\n */\n framed?: boolean;\n className?: string;\n}\n\nexport function AuthSection({\n layout = 'centered',\n children,\n panel,\n framed,\n className,\n ...formProps\n}: AuthSectionProps) {\n if (layout === 'split') {\n const form = children ?? <DefaultForm {...formProps} />;\n return (\n <div className={cn('h-full', className)}>\n <SplitAuth panel={panel}>{form}</SplitAuth>\n </div>\n );\n }\n\n // Centered: brand renders above the card, not inside it\n const { brand, ...restFormProps } = formProps;\n const form = children ?? <DefaultForm {...restFormProps} />;\n return (\n <CenteredAuth brand={brand} framed={framed} className={className}>\n {form}\n </CenteredAuth>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface SettingsSectionProps {\n title: string;\n description?: string;\n /** Form fields, buttons, or any content for the right-hand column — e.g. a `<form>`. */\n children: React.ReactNode;\n /** Marks the section as a destructive action (e.g. \"Delete account\") — renders the title in the destructive color. @default false */\n danger?: boolean;\n className?: string;\n}\n\n/**\n * One title+description+content row for a settings page. Stack a few inside\n * a `<div className=\"divide-y divide-border\">` to build a full settings\n * page — one block reused per row, rather than a bespoke layout each time.\n */\nexport function SettingsSection({ title, description, children, danger = false, className }: SettingsSectionProps) {\n return (\n <div className={cn('grid grid-cols-1 gap-x-8 gap-y-6 py-10 sm:grid-cols-3', className)}>\n <div>\n <h2 className={cn('text-base font-semibold', danger && 'text-destructive')}>{title}</h2>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n <div className=\"sm:col-span-2\">{children}</div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n type ColumnDef,\n type SortingState,\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight, Search } from 'lucide-react';\nimport { Checkbox, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\n\nexport interface DataTableProps<TData> {\n columns: ColumnDef<TData>[];\n data: TData[];\n /** Shows a quick-filter input above the table, matching against `searchKey`. */\n searchKey?: string;\n searchPlaceholder?: string;\n /** Adds a checkbox column and reports the selected rows. */\n selectable?: boolean;\n onSelectionChange?: (rows: TData[]) => void;\n /** Rows per page. Set to `0` to disable pagination entirely. @default 10 */\n pageSize?: number;\n /** Slot rendered top-right of the toolbar — e.g. an \"Add\" button. */\n toolbar?: React.ReactNode;\n onRowClick?: (row: TData) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst selectColumn: ColumnDef<Record<string, unknown>> = {\n id: '__select',\n header: ({ table }) => (\n <Checkbox\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n ),\n enableSorting: false,\n};\n\n/**\n * Sortable, paginated, optionally-selectable data table. One component —\n * toggle `searchKey`/`selectable`/`pageSize` rather than reaching for a\n * different table component per use case.\n */\nexport function DataTable<TData>({\n columns,\n data,\n searchKey,\n searchPlaceholder = 'Search…',\n selectable = false,\n onSelectionChange,\n pageSize = 10,\n toolbar,\n onRowClick,\n emptyMessage = 'No results.',\n className,\n}: DataTableProps<TData>) {\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [rowSelection, setRowSelection] = React.useState({});\n const [globalFilter, setGlobalFilter] = React.useState('');\n\n const allColumns = React.useMemo(\n () => (selectable ? [selectColumn as ColumnDef<TData>, ...columns] : columns),\n [selectable, columns],\n );\n\n const table = useReactTable({\n data,\n columns: allColumns,\n state: { sorting, rowSelection, globalFilter },\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onGlobalFilterChange: setGlobalFilter,\n globalFilterFn: (row, _columnId, filterValue) => {\n if (!searchKey) return true;\n const value = row.getValue(searchKey);\n return String(value ?? '').toLowerCase().includes(String(filterValue).toLowerCase());\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n ...(pageSize > 0 ? { getPaginationRowModel: getPaginationRowModel() } : {}),\n initialState: pageSize > 0 ? { pagination: { pageSize } } : undefined,\n enableRowSelection: selectable,\n });\n\n React.useEffect(() => {\n if (!onSelectionChange) return;\n onSelectionChange(table.getSelectedRowModel().rows.map((r) => r.original));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rowSelection]);\n\n const rows = table.getRowModel().rows;\n\n return (\n <div className={cn('space-y-4', className)}>\n {(searchKey || toolbar) && (\n <div className=\"flex items-center justify-between gap-4\">\n {searchKey ? (\n <div className=\"relative max-w-sm flex-1\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={globalFilter}\n onChange={(e) => setGlobalFilter(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"pl-8\"\n />\n </div>\n ) : <div />}\n {toolbar}\n </div>\n )}\n\n <div className=\"overflow-hidden rounded-lg border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const canSort = header.column.getCanSort();\n const sortDir = header.column.getIsSorted();\n return (\n <TableHead\n key={header.id}\n aria-sort={sortDir === 'asc' ? 'ascending' : sortDir === 'desc' ? 'descending' : canSort ? 'none' : undefined}\n >\n {header.isPlaceholder ? null : canSort ? (\n <button\n type=\"button\"\n className=\"flex items-center gap-1.5 font-medium hover:text-foreground\"\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? <ArrowUp className=\"size-3.5\" /> : sortDir === 'desc' ? <ArrowDown className=\"size-3.5\" /> : <ArrowUpDown className=\"size-3.5 text-muted-foreground/50\" />}\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {rows.length ? (\n rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() ? 'selected' : undefined}\n onClick={() => onRowClick?.(row.original)}\n tabIndex={onRowClick ? 0 : undefined}\n onKeyDown={onRowClick ? (e) => {\n if (e.key === 'Enter' && e.target === e.currentTarget) onRowClick(row.original);\n } : undefined}\n className={cn(onRowClick && 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring')}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={allColumns.length} className=\"h-24 text-center text-muted-foreground\">\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {(selectable || (pageSize > 0 && table.getPageCount() > 1)) && (\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n {selectable && `${table.getFilteredSelectedRowModel().rows.length} of ${table.getFilteredRowModel().rows.length} selected`}\n {selectable && pageSize > 0 && table.getPageCount() > 1 && ' · '}\n {pageSize > 0 && table.getPageCount() > 1 && `Page ${table.getState().pagination.pageIndex + 1} of ${table.getPageCount()}`}\n </p>\n {pageSize > 0 && table.getPageCount() > 1 && (\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>\n <ChevronLeft className=\"size-4\" /> Previous\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport type { ColumnDef as DataTableColumn };\n","'use client';\n\nimport * as React from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { MoreHorizontal, UserPlus } from 'lucide-react';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Badge,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Dialog,\n} from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\nimport { DataTable } from '../components/DataTable';\n\nexport interface TeamMemberRecord {\n id: string;\n name: string;\n email: string;\n avatar?: string;\n role: string;\n}\n\nexport interface TeamMembersPanelProps {\n members: TeamMemberRecord[];\n /** Roles offered in the invite dialog and the per-row role menu. @default ['Owner', 'Admin', 'Member'] */\n roles?: string[];\n onInvite?: (email: string, role: string) => void;\n onRoleChange?: (memberId: string, role: string) => void;\n onRemove?: (memberId: string) => void;\n title?: string;\n description?: string;\n}\n\nfunction InviteDialog({ roles, onInvite, onClose }: { roles: string[]; onInvite?: (email: string, role: string) => void; onClose: () => void }) {\n const [email, setEmail] = React.useState('');\n const [role, setRole] = React.useState(roles[roles.length - 1] ?? roles[0]);\n\n return (\n <DialogContent>\n <form\n onSubmit={(e) => {\n e.preventDefault();\n onInvite?.(email, role);\n onClose();\n }}\n >\n <DialogHeader>\n <DialogTitle>Invite a team member</DialogTitle>\n <DialogDescription>They&rsquo;ll get an email invite to join this workspace.</DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"invite-email\">Email address</Label>\n <Input id=\"invite-email\" type=\"email\" required placeholder=\"name@company.com\" value={email} onChange={(e) => setEmail(e.target.value)} />\n </div>\n <div className=\"space-y-2\">\n <Label>Role</Label>\n <Select value={role} onValueChange={setRole}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {roles.map((r) => <SelectItem key={r} value={r}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n </div>\n <DialogFooter>\n <DialogClose asChild>\n <Button type=\"button\" variant=\"outline\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Send invite</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n );\n}\n\n/**\n * Member list with role management and an invite dialog. One block for\n * team/org administration — built on `DataTable` rather than a bespoke list.\n */\nexport function TeamMembersPanel({\n members,\n roles = ['Owner', 'Admin', 'Member'],\n onInvite,\n onRoleChange,\n onRemove,\n title = 'Team members',\n description = 'Manage who has access to this workspace.',\n}: TeamMembersPanelProps) {\n const [inviteOpen, setInviteOpen] = React.useState(false);\n const columns = React.useMemo<ColumnDef<TeamMemberRecord>[]>(() => [\n {\n accessorKey: 'name',\n header: 'Name',\n cell: ({ row }) => (\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-8\">\n <AvatarImage src={row.original.avatar} alt=\"\" />\n <AvatarFallback>{row.original.name.slice(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n <div>\n <p className=\"text-sm font-medium leading-none\">{row.original.name}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{row.original.email}</p>\n </div>\n </div>\n ),\n },\n {\n accessorKey: 'role',\n header: 'Role',\n cell: ({ row }) =>\n onRoleChange ? (\n <Select value={row.original.role} onValueChange={(value) => onRoleChange(row.original.id, value)}>\n <SelectTrigger className=\"h-8 w-32\"><SelectValue /></SelectTrigger>\n <SelectContent>\n {roles.map((r) => <SelectItem key={r} value={r}>{r}</SelectItem>)}\n </SelectContent>\n </Select>\n ) : (\n <Badge variant=\"secondary\">{row.original.role}</Badge>\n ),\n },\n ...(onRemove ? [{\n id: 'actions',\n header: '',\n cell: ({ row }) => (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\">\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">Row actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem className=\"text-destructive\" onClick={() => onRemove(row.original.id)}>\n Remove member\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n ),\n enableSorting: false,\n } satisfies ColumnDef<TeamMemberRecord>] : []),\n ], [roles, onRoleChange, onRemove]);\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-4\">\n <div>\n <h2 className=\"text-base font-semibold\">{title}</h2>\n <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n </div>\n {onInvite && (\n <Dialog open={inviteOpen} onOpenChange={setInviteOpen}>\n <DialogTrigger asChild>\n <Button><UserPlus className=\"size-4\" /> Invite member</Button>\n </DialogTrigger>\n {/* key resets the form fields each time the dialog opens */}\n <InviteDialog key={String(inviteOpen)} roles={roles} onInvite={onInvite} onClose={() => setInviteOpen(false)} />\n </Dialog>\n )}\n </div>\n <DataTable columns={columns} data={members} searchKey=\"name\" searchPlaceholder=\"Search members…\" pageSize={0} />\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { CreditCard, Download } from 'lucide-react';\nimport { Badge, Progress } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { DataTable } from '../components/DataTable';\nimport { SettingsSection } from './SettingsSection';\n\nexport interface BillingUsageMetric {\n label: string;\n used: number;\n limit: number;\n unit?: string;\n}\n\nexport interface BillingInvoice {\n id: string;\n date: string;\n amount: string;\n status: 'paid' | 'open' | 'void';\n downloadUrl?: string;\n}\n\nexport interface BillingPaymentMethod {\n brand: string;\n last4: string;\n expiry: string;\n}\n\nexport interface BillingPanelProps {\n planName: string;\n planPrice?: string;\n renewalDate?: string;\n usage?: BillingUsageMetric[];\n paymentMethod?: BillingPaymentMethod;\n invoices?: BillingInvoice[];\n onManagePlan?: () => void;\n onUpdatePaymentMethod?: () => void;\n className?: string;\n}\n\nconst invoiceStatusVariant = {\n paid: 'secondary',\n open: 'outline',\n void: 'destructive',\n} as const;\n\n/**\n * In-app billing summary — current plan + usage, payment method, invoice\n * history. Built from `SettingsSection` rows and `DataTable`, rather than a\n * one-off billing page each time. Marketing plan comparisons stay in\n * `PricingSection`/`UpgradePrompt` — this is the account-side view.\n */\nexport function BillingPanel({\n planName,\n planPrice,\n renewalDate,\n usage,\n paymentMethod,\n invoices,\n onManagePlan,\n onUpdatePaymentMethod,\n className,\n}: BillingPanelProps) {\n // Dates and amounts are display strings — sorting them would be lexicographic, so keep it off\n const invoiceColumns = React.useMemo<ColumnDef<BillingInvoice>[]>(() => [\n { accessorKey: 'date', header: 'Date', enableSorting: false },\n { accessorKey: 'amount', header: 'Amount', enableSorting: false },\n {\n accessorKey: 'status',\n header: 'Status',\n enableSorting: false,\n cell: ({ row }) => (\n <Badge variant={invoiceStatusVariant[row.original.status]} className=\"capitalize\">\n {row.original.status}\n </Badge>\n ),\n },\n {\n id: 'download',\n header: '',\n cell: ({ row }) =>\n row.original.downloadUrl ? (\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\" asChild>\n <a href={row.original.downloadUrl} download>\n <Download className=\"size-4\" />\n <span className=\"sr-only\">Download invoice</span>\n </a>\n </Button>\n ) : null,\n enableSorting: false,\n },\n ], []);\n\n return (\n <div className={className}>\n <div className=\"divide-y divide-border\">\n <SettingsSection title=\"Current plan\" description=\"Your subscription and usage against plan limits.\">\n <div className=\"flex flex-wrap items-center justify-between gap-4 rounded-lg border bg-card/60 p-4\">\n <div>\n <div className=\"flex items-center gap-2\">\n <p className=\"text-lg font-semibold\">{planName}</p>\n {planPrice && <Badge variant=\"secondary\">{planPrice}</Badge>}\n </div>\n {renewalDate && <p className=\"mt-1 text-sm text-muted-foreground\">Renews {renewalDate}</p>}\n </div>\n {onManagePlan && <Button onClick={onManagePlan}>Manage plan</Button>}\n </div>\n {usage && usage.length > 0 && (\n <div className=\"mt-4 space-y-4\">\n {usage.map((metric) => {\n const overLimit = metric.limit > 0 && metric.used > metric.limit;\n const percent = metric.limit > 0 ? Math.min(100, (metric.used / metric.limit) * 100) : 0;\n return (\n <div key={metric.label} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-sm\">\n <span>{metric.label}</span>\n <span className={overLimit ? 'font-medium text-destructive' : 'text-muted-foreground'}>\n {metric.used}{metric.unit} / {metric.limit}{metric.unit}\n </span>\n </div>\n <Progress value={percent} className={overLimit ? '[&>div]:bg-destructive' : undefined} />\n </div>\n );\n })}\n </div>\n )}\n </SettingsSection>\n\n {paymentMethod && (\n <SettingsSection title=\"Payment method\" description=\"Used for your subscription renewal.\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-card/60 p-4\">\n <div className=\"flex items-center gap-3\">\n <CreditCard className=\"size-5 text-muted-foreground\" />\n <p className=\"text-sm\">\n <span className=\"font-medium capitalize\">{paymentMethod.brand}</span> ending in {paymentMethod.last4}\n <span className=\"text-muted-foreground\"> · expires {paymentMethod.expiry}</span>\n </p>\n </div>\n {onUpdatePaymentMethod && <Button variant=\"outline\" onClick={onUpdatePaymentMethod}>Update</Button>}\n </div>\n </SettingsSection>\n )}\n\n {invoices && invoices.length > 0 && (\n <SettingsSection title=\"Billing history\" description=\"Download past invoices for your records.\">\n <DataTable columns={invoiceColumns} data={invoices} pageSize={5} />\n </SettingsSection>\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Check, Loader2 } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface OnboardingStep {\n id: string;\n title: string;\n description?: string;\n content: React.ReactNode;\n /** Runs before advancing past this step. Return `false`/an error string to block. */\n onNext?: () => boolean | string | Promise<boolean | string>;\n}\n\nexport interface OnboardingWizardProps {\n steps: OnboardingStep[];\n /** Called after the last step's `onNext` succeeds. */\n onComplete?: () => void;\n onStepChange?: (index: number) => void;\n /** Controlled current step index — omit to let the component manage it internally. */\n step?: number;\n onStepIndexChange?: (index: number) => void;\n completeLabel?: string;\n className?: string;\n}\n\n/**\n * Stateful multi-step onboarding flow. One component driven by a `steps`\n * prop — swap the array to reshape the flow rather than hand-building a\n * new wizard per feature.\n */\nexport function OnboardingWizard({\n steps,\n onComplete,\n onStepChange,\n step: stepProp,\n onStepIndexChange,\n completeLabel = 'Finish',\n className,\n}: OnboardingWizardProps) {\n const [internalStep, setInternalStep] = React.useState(0);\n const [error, setError] = React.useState<string | null>(null);\n const [pending, setPending] = React.useState(false);\n const index = stepProp ?? internalStep;\n const current = steps[index];\n const isLast = index === steps.length - 1;\n\n const goTo = (next: number) => {\n setError(null);\n if (stepProp === undefined) setInternalStep(next);\n onStepIndexChange?.(next);\n onStepChange?.(next);\n };\n\n const handleNext = async () => {\n if (current.onNext) {\n setPending(true);\n let result: boolean | string;\n try {\n result = await current.onNext();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Something went wrong. Please try again.');\n return;\n } finally {\n setPending(false);\n }\n if (result === false) { setError('Please complete this step before continuing.'); return; }\n if (typeof result === 'string') { setError(result); return; }\n }\n if (isLast) {\n onComplete?.();\n } else {\n goTo(index + 1);\n }\n };\n\n const handleBack = () => {\n if (index > 0) goTo(index - 1);\n };\n\n return (\n <div className={cn('w-full max-w-lg space-y-8', className)}>\n <ol className=\"flex items-center\" aria-label=\"Progress\">\n {steps.map((step, i) => (\n <li\n key={step.id}\n aria-current={i === index ? 'step' : undefined}\n className={cn('flex items-center', i !== steps.length - 1 && 'flex-1')}\n >\n <div\n className={cn(\n 'flex size-8 shrink-0 items-center justify-center rounded-full border text-xs font-medium',\n i < index ? 'border-primary bg-primary text-primary-foreground' : i === index ? 'border-primary text-primary' : 'border-border text-muted-foreground',\n )}\n >\n {i < index ? <Check className=\"size-4\" /> : i + 1}\n <span className=\"sr-only\">{step.title}{i < index ? ' (completed)' : ''}</span>\n </div>\n {i !== steps.length - 1 && (\n <div className={cn('mx-2 h-px flex-1', i < index ? 'bg-primary' : 'bg-border')} />\n )}\n </li>\n ))}\n </ol>\n\n <div className=\"space-y-4\">\n <div>\n <h2 className=\"text-xl font-semibold tracking-tight\">{current.title}</h2>\n {current.description && <p className=\"mt-1 text-sm text-muted-foreground\">{current.description}</p>}\n </div>\n <div>{current.content}</div>\n {error && <p role=\"alert\" className=\"text-sm font-medium text-destructive\">{error}</p>}\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Button type=\"button\" variant=\"ghost\" onClick={handleBack} disabled={index === 0 || pending}>\n Back\n </Button>\n <Button type=\"button\" onClick={handleNext} disabled={pending}>\n {pending && <Loader2 className=\"size-4 animate-spin\" />}\n {pending ? 'Please wait…' : isLast ? completeLabel : 'Continue'}\n </Button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: LucideIcon;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport function EmptyState({ icon: Icon, title, description, action, className, ...props }: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center justify-center gap-3 py-12 text-center', className)}\n {...props}\n >\n {Icon && (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl border bg-muted\">\n <Icon className=\"size-6 text-muted-foreground\" />\n </div>\n )}\n <div className=\"space-y-1\">\n <h3 className=\"font-semibold\">{title}</h3>\n {description && (\n <p className=\"max-w-xs text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {action}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ArrowLeft, ArrowUpRight } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport type { AppShellRenderLink } from './AppShell';\n\nexport interface ErrorPageLink {\n label: string;\n href: string;\n description?: string;\n icon?: ReactNode;\n}\n\nexport interface ErrorPageProps {\n statusCode?: string;\n title?: string;\n description?: string;\n action?: { label: string; href: string };\n backAction?: { label: string; href?: string; onClick?: () => void };\n /** Optional \"maybe you were looking for\" links rendered below the actions. */\n links?: ErrorPageLink[];\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function ErrorPage({\n statusCode = '404',\n title = 'Page not found',\n description = \"The page you're looking for doesn't exist or has been moved. Check the URL or head back home.\",\n action = { label: 'Take me home', href: '/' },\n backAction = { label: 'Go back' },\n links,\n renderLink = defaultRenderLink,\n}: ErrorPageProps) {\n const hasLinks = links && links.length > 0;\n\n return (\n <section className=\"relative overflow-hidden rounded-2xl border bg-card\">\n {/* Dot grid, faded toward the edges */}\n <div\n aria-hidden\n className=\"absolute inset-0 bg-[radial-gradient(hsl(var(--border))_1px,transparent_1px)] [background-size:24px_24px] [mask-image:radial-gradient(ellipse_at_center,black_30%,transparent_75%)]\"\n />\n {/* Soft brand glow behind the numerals */}\n <div\n aria-hidden\n className=\"absolute left-1/2 top-24 h-64 w-[36rem] max-w-full -translate-x-1/2 rounded-full bg-primary/10 blur-3xl\"\n />\n\n <div\n className={cn(\n 'relative mx-auto flex max-w-3xl flex-col items-center px-6 pt-20 text-center sm:pt-24',\n hasLinks ? 'pb-16' : 'pb-24 sm:pb-28',\n )}\n >\n <span className=\"inline-flex items-center gap-2 rounded-full border bg-background/80 px-3 py-1 font-mono text-xs text-muted-foreground backdrop-blur\">\n <span className=\"relative flex size-1.5\">\n <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-primary opacity-60\" />\n <span className=\"relative inline-flex size-1.5 rounded-full bg-primary\" />\n </span>\n HTTP {statusCode}\n </span>\n\n <div\n aria-hidden\n className=\"pointer-events-none -mb-8 mt-2 select-none bg-gradient-to-b from-foreground/15 via-foreground/[0.06] to-transparent bg-clip-text text-[9rem] font-black leading-none tracking-tighter text-transparent sm:-mb-12 sm:text-[13rem]\"\n >\n {statusCode}\n </div>\n\n <h1 className=\"text-balance text-2xl font-semibold tracking-tight sm:text-3xl\">{title}</h1>\n <p className=\"mx-auto mt-3 max-w-md text-pretty text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n\n <div className=\"mt-8 flex flex-wrap items-center justify-center gap-3\">\n {backAction &&\n (backAction.href ? (\n renderLink({\n href: backAction.href,\n children: (\n <Button variant=\"outline\">\n <ArrowLeft className=\"mr-2 size-4\" />\n {backAction.label}\n </Button>\n ),\n })\n ) : (\n <Button variant=\"outline\" onClick={backAction.onClick}>\n <ArrowLeft className=\"mr-2 size-4\" />\n {backAction.label}\n </Button>\n ))}\n {action &&\n renderLink({\n href: action.href,\n children: <Button>{action.label}</Button>,\n })}\n </div>\n\n {hasLinks && (\n <div className=\"mt-14 w-full\">\n <p className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Maybe you were looking for\n </p>\n <div className=\"mt-4 grid gap-3 text-left sm:grid-cols-2 lg:grid-cols-3\">\n {links.map((link) =>\n renderLink({\n href: link.href,\n className:\n 'group flex items-start gap-3 rounded-xl border bg-background/60 p-4 backdrop-blur transition-colors hover:border-primary/40 hover:bg-accent',\n children: (\n <>\n {link.icon && (\n <span className=\"mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-lg border bg-muted text-muted-foreground\">\n {link.icon}\n </span>\n )}\n <span className=\"min-w-0 grow\">\n <span className=\"flex items-center gap-1 text-sm font-medium\">\n {link.label}\n <ArrowUpRight className=\"size-3.5 text-muted-foreground transition-transform group-hover:-translate-y-0.5 group-hover:translate-x-0.5 group-hover:text-foreground\" />\n </span>\n {link.description && (\n <span className=\"mt-0.5 block text-xs leading-5 text-muted-foreground\">\n {link.description}\n </span>\n )}\n </span>\n </>\n ),\n }),\n )}\n </div>\n </div>\n )}\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { X } from 'lucide-react';\nimport {\n Button,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from '@olwiba/cn';\n\nexport interface UpgradeComparisonRow {\n key?: React.Key;\n label: React.ReactNode;\n currentValue: React.ReactNode;\n upgradedValue: React.ReactNode;\n}\n\nexport interface UpgradePromptProps {\n /** Layout variant. `banner` is an inline strip; `comparison` is a full feature-table block. */\n variant: 'banner' | 'comparison';\n /** Primary heading shown in both variants. */\n title: React.ReactNode;\n /** Supporting copy shown below the title. */\n description: React.ReactNode;\n /** Label for the primary upgrade CTA. Include pricing here if relevant. */\n primaryActionLabel: React.ReactNode;\n /** Called when the primary upgrade CTA is clicked. */\n onPrimaryAction: () => void;\n /** Optional secondary action label, typically for \"maybe later\" or dismiss behavior. */\n secondaryActionLabel?: React.ReactNode;\n /** Called when the optional secondary action is clicked. */\n onSecondaryAction?: () => void;\n /** Small eyebrow label shown above the title in the comparison variant. */\n eyebrow?: React.ReactNode;\n /** Feature comparison rows for the comparison variant. */\n rows?: UpgradeComparisonRow[];\n /** Column header for the current plan. Defaults to \"Current\". */\n currentPlanLabel?: React.ReactNode;\n /** Column header for the upgraded plan. Defaults to \"Upgrade\". */\n upgradedPlanLabel?: React.ReactNode;\n /** Small body text shown below the comparison table, before the action buttons. */\n footer?: React.ReactNode;\n /** Optional close icon action for the comparison variant. */\n onClose?: () => void;\n /** Accessible label for the comparison close icon. Defaults to \"Close\". */\n closeLabel?: string;\n className?: string;\n}\n\nexport function UpgradePrompt({\n variant,\n title,\n description,\n primaryActionLabel,\n onPrimaryAction,\n secondaryActionLabel,\n onSecondaryAction,\n eyebrow,\n rows,\n currentPlanLabel = 'Current',\n upgradedPlanLabel = 'Upgrade',\n footer,\n onClose,\n closeLabel = 'Close',\n className,\n}: UpgradePromptProps) {\n const hasSecondaryAction = Boolean(secondaryActionLabel && onSecondaryAction);\n\n if (variant === 'banner') {\n return (\n <section\n className={cn(\n 'rounded-xl border border-dashed bg-card/40 p-5 sm:p-6',\n className,\n )}\n >\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n <p className=\"mt-2 max-w-xl text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n </div>\n\n <div className=\"flex flex-wrap gap-2\">\n {hasSecondaryAction ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onSecondaryAction}\n className=\"border\"\n >\n {secondaryActionLabel}\n </Button>\n ) : null}\n <Button type=\"button\" onClick={onPrimaryAction}>\n {primaryActionLabel}\n </Button>\n </div>\n </div>\n </section>\n );\n }\n\n return (\n <section\n className={cn(\n 'w-full max-w-3xl rounded-2xl border bg-card p-6 shadow-sm sm:p-7',\n className,\n )}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n {eyebrow ? (\n <div className=\"font-mono text-[11px] uppercase tracking-[0.08em] text-primary\">\n {eyebrow}\n </div>\n ) : null}\n <h3\n className={cn(\n 'text-2xl font-semibold sm:text-[1.75rem]',\n eyebrow ? 'mt-3' : '',\n )}\n >\n {title}\n </h3>\n <p className=\"mt-3 max-w-2xl text-sm leading-6 text-muted-foreground sm:text-base\">\n {description}\n </p>\n </div>\n\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"inline-flex size-9 shrink-0 items-center justify-center rounded-lg border transition-colors hover:bg-muted\"\n aria-label={closeLabel}\n >\n <X className=\"size-4\" />\n </button>\n ) : null}\n </div>\n\n {rows && rows.length > 0 ? (\n <div className=\"mt-6 overflow-hidden rounded-xl border bg-muted/30\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead />\n <TableHead className=\"font-mono text-xs uppercase tracking-wider text-muted-foreground\">\n {currentPlanLabel}\n </TableHead>\n <TableHead className=\"font-mono text-xs uppercase tracking-wider text-primary\">\n {upgradedPlanLabel}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={row.key ?? index}>\n <TableCell className=\"font-medium\">{row.label}</TableCell>\n <TableCell className=\"font-mono text-muted-foreground\">\n {row.currentValue}\n </TableCell>\n <TableCell className=\"font-mono\">{row.upgradedValue}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n ) : null}\n\n <div\n className={cn(\n 'mt-6 flex flex-col gap-3 sm:flex-row sm:items-center',\n footer || hasSecondaryAction ? 'sm:justify-between' : 'sm:justify-end',\n )}\n >\n {footer ? <p className=\"text-sm text-muted-foreground\">{footer}</p> : null}\n <div className=\"flex flex-wrap gap-2\">\n {hasSecondaryAction ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onSecondaryAction}\n className=\"border\"\n >\n {secondaryActionLabel}\n </Button>\n ) : null}\n <Button type=\"button\" onClick={onPrimaryAction}>\n {primaryActionLabel}\n </Button>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { RefreshCw, Sparkles } from 'lucide-react';\nimport { Button, Card, cn } from '@olwiba/cn';\n\nexport interface UpdateBannerProps {\n /** Version baked into the running client bundle (e.g. a git short SHA embedded at build time). */\n currentVersion: string;\n /**\n * Fetches the currently deployed version from the server. The host app wires\n * its own endpoint — the component stays app-agnostic.\n */\n fetchVersion: () => Promise<{ version: string }>;\n /** Poll interval in ms. */\n intervalMs?: number;\n /** Force the banner to show (demos/testing). */\n forceShow?: boolean;\n /** Called on refresh click; defaults to a full page reload. Use it to hook a celebration first. */\n onRefresh?: () => void;\n message?: React.ReactNode;\n buttonLabel?: string;\n className?: string;\n}\n\nexport function UpdateBanner({\n currentVersion,\n fetchVersion,\n intervalMs = 5 * 60 * 1000,\n forceShow = false,\n onRefresh,\n message = (\n <>\n <span className=\"font-semibold\">App update available!</span> Refresh to get the latest features\n and improvements.\n </>\n ),\n buttonLabel = 'Refresh now',\n className,\n}: UpdateBannerProps) {\n const [show, setShow] = React.useState(forceShow);\n const [entered, setEntered] = React.useState(false);\n const [refreshing, setRefreshing] = React.useState(false);\n\n React.useEffect(() => {\n if (forceShow) {\n setShow(true);\n return;\n }\n setShow(false);\n\n let cancelled = false;\n\n const check = async () => {\n try {\n const server = await fetchVersion();\n if (!cancelled && server.version && server.version !== currentVersion) {\n setShow(true);\n }\n } catch {\n // Version checks are best-effort; stay quiet on failure.\n }\n };\n\n void check();\n const id = setInterval(check, intervalMs);\n return () => {\n cancelled = true;\n clearInterval(id);\n };\n }, [currentVersion, fetchVersion, forceShow, intervalMs]);\n\n // Two-frame mount so the enter transition actually plays.\n React.useEffect(() => {\n if (!show) {\n setEntered(false);\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\n }, [show]);\n\n const handleRefresh = () => {\n setRefreshing(true);\n setTimeout(() => {\n if (onRefresh) {\n onRefresh();\n setRefreshing(false);\n if (forceShow) setShow(false);\n } else {\n window.location.reload();\n }\n }, 400);\n };\n\n if (!show) return null;\n\n return (\n <div className=\"pointer-events-none fixed inset-x-0 top-4 z-50 flex justify-center px-4\">\n <div\n className={cn(\n 'pointer-events-auto transition-all duration-500 ease-out',\n entered ? 'translate-y-0 opacity-100' : '-translate-y-24 opacity-0',\n )}\n >\n <Card\n className={cn(\n 'max-w-3xl border-amber-300/60 bg-amber-50 dark:border-amber-700/60 dark:bg-amber-950',\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-6 p-4\">\n <div className=\"flex items-center gap-3\">\n <Sparkles className=\"size-5 shrink-0 text-amber-600 dark:text-amber-400\" aria-hidden=\"true\" />\n <p className=\"text-sm text-amber-800 dark:text-amber-200\">{message}</p>\n </div>\n <Button\n onClick={handleRefresh}\n disabled={refreshing}\n size=\"sm\"\n className=\"shrink-0 bg-amber-600 text-white hover:bg-amber-700 dark:bg-amber-600 dark:hover:bg-amber-700\"\n >\n {refreshing ? <RefreshCw className=\"size-4 animate-spin\" /> : buttonLabel}\n </Button>\n </div>\n </Card>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface FadeInProps extends React.HTMLAttributes<HTMLDivElement> {\n delay?: number;\n duration?: number;\n direction?: 'up' | 'down' | 'left' | 'right' | 'none';\n once?: boolean;\n children: React.ReactNode;\n}\n\nconst translateMap = {\n up: 'translate-y-6',\n down: '-translate-y-6',\n left: 'translate-x-6',\n right: '-translate-x-6',\n none: '',\n};\n\nexport function FadeIn({\n delay = 0,\n duration = 600,\n direction = 'up',\n once = true,\n children,\n className,\n style,\n ...props\n}: FadeInProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n if (once) observer.disconnect();\n } else if (!once) {\n setVisible(false);\n }\n },\n { threshold: 0.1 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [once]);\n\n return (\n <div\n ref={ref}\n className={cn(\n 'transition-all',\n visible ? 'opacity-100 translate-x-0 translate-y-0' : `opacity-0 ${translateMap[direction]}`,\n className,\n )}\n style={{ transitionDuration: `${duration}ms`, transitionDelay: `${delay}ms`, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, cn } from '@olwiba/cn';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface SectionTitleProps {\n title: string;\n description?: string;\n badge?: string;\n className?: string;\n}\n\nexport function SectionTitle({ title, description, badge, className }: SectionTitleProps) {\n return (\n <FadeIn direction=\"up\">\n <div className={cn('text-center', className)}>\n {badge && <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>}\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n </FadeIn>\n );\n}\n","export const marketingSectionSpacing = {\n standard: 'px-6 py-14 sm:px-10 sm:py-20',\n hero: 'px-6 pb-14 pt-10 sm:px-10 sm:py-20',\n} as const;\n\nexport type MarketingSectionSpacing = keyof typeof marketingSectionSpacing;\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nconst sizes = {\n sm: { outer: 'w-44', height: 'h-80', notch: 'w-16 h-4', border: 'rounded-[2rem]', screen: 'rounded-[1.75rem]' },\n md: { outer: 'w-56', height: 'h-[26rem]', notch: 'w-20 h-5', border: 'rounded-[2.5rem]', screen: 'rounded-[2.25rem]' },\n lg: { outer: 'w-72', height: 'h-[34rem]', notch: 'w-24 h-6', border: 'rounded-[3rem]', screen: 'rounded-[2.75rem]' },\n} as const;\n\nexport interface PhoneFrameProps {\n children?: React.ReactNode;\n size?: keyof typeof sizes;\n className?: string;\n float?: boolean;\n}\n\nexport function PhoneFrame({ children, size = 'md', className, float = true }: PhoneFrameProps) {\n const s = sizes[size];\n return (\n <>\n {float && (\n <style>{`\n @keyframes olwiba-phone-float {\n 0%, 100% { transform: translateY(0px); }\n 50% { transform: translateY(-10px); }\n }\n .olwiba-phone-float { animation: olwiba-phone-float 5s ease-in-out infinite; }\n `}</style>\n )}\n <div\n className={cn(\n 'relative mx-auto',\n s.outer,\n float && 'olwiba-phone-float',\n className,\n )}\n >\n {/* Device body */}\n <div\n className={cn(\n 'relative flex w-full flex-col overflow-hidden border-[3px] border-foreground/15 bg-muted shadow-2xl',\n s.border,\n s.height,\n )}\n >\n {/* Status bar / notch area */}\n <div className=\"relative flex justify-center pt-3 pb-1 shrink-0\">\n <div className={cn('rounded-full bg-foreground/10', s.notch)} />\n </div>\n\n {/* Screen */}\n <div className={cn('mx-1.5 mb-1.5 flex-1 overflow-hidden bg-background', s.screen)}>\n {children}\n </div>\n </div>\n\n {/* Side buttons */}\n <div className=\"absolute right-[-5px] top-24 h-12 w-[3px] rounded-l-sm bg-foreground/15\" />\n <div className=\"absolute left-[-5px] top-20 h-8 w-[3px] rounded-r-sm bg-foreground/15\" />\n <div className=\"absolute left-[-5px] top-32 h-8 w-[3px] rounded-r-sm bg-foreground/15\" />\n <div className=\"absolute left-[-5px] top-44 h-8 w-[3px] rounded-r-sm bg-foreground/15\" />\n </div>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\nimport { Button } from '../primitives/Button';\nimport { FadeIn } from '../motion/FadeIn';\nimport { PhoneFrame } from '../components/PhoneFrame';\nimport type { AppShellRenderLink } from '../app/AppShell';\nimport { marketingSectionSpacing } from './section-spacing';\n\nexport interface HeroSectionProps {\n heading: string;\n badge?: string;\n description: string;\n primaryCta: { label: string; href: string };\n secondaryCta?: { label: string; href: string };\n heroImage?: React.ReactNode;\n media?: 'image' | 'phone' | 'none';\n phoneSize?: 'sm' | 'md' | 'lg';\n avatarUrls?: string[];\n socialProofText?: string;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function HeroSection({\n heading,\n badge,\n description,\n primaryCta,\n secondaryCta,\n heroImage,\n media = 'image',\n phoneSize = 'lg',\n avatarUrls,\n socialProofText,\n renderLink = defaultRenderLink,\n}: HeroSectionProps) {\n const mode = useUIVariant();\n return (\n <section className=\"overflow-hidden\">\n <div className={marketingSectionSpacing.hero}>\n <div className=\"mx-auto grid max-w-6xl items-center gap-10 lg:grid-cols-2 lg:gap-16\">\n {/* Left - text content */}\n <FadeIn direction=\"left\">\n <div className=\"flex flex-col gap-6\">\n {badge && (\n <div>\n <Badge variant=\"secondary\">{badge}</Badge>\n </div>\n )}\n <h1 className=\"text-balance text-4xl font-semibold tracking-tight sm:text-5xl lg:text-6xl\">\n {heading}\n </h1>\n <p className=\"max-w-lg text-pretty text-lg text-muted-foreground\">\n {description}\n </p>\n <div className=\"flex flex-wrap items-center gap-3\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n {secondaryCta &&\n renderLink({\n href: secondaryCta.href,\n children: (\n <Button size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n ),\n })}\n </div>\n </div>\n </FadeIn>\n\n {/* Right - media */}\n {media !== 'none' && (\n <FadeIn direction=\"right\" delay={200}>\n {media === 'phone' ? (\n <div className=\"flex justify-center\">\n <PhoneFrame size={phoneSize}>\n {heroImage}\n </PhoneFrame>\n </div>\n ) : (\n <div className={cn('overflow-hidden', mode === 'smooth' ? 'rounded-3xl' : 'rounded-2xl')}>\n {heroImage}\n </div>\n )}\n </FadeIn>\n )}\n </div>\n\n {/* Avatar social proof row */}\n {(avatarUrls?.length || socialProofText) && (\n <FadeIn direction=\"up\" delay={400}>\n <div className=\"mx-auto mt-12 flex max-w-6xl items-center gap-4\">\n {avatarUrls && avatarUrls.length > 0 && (\n <div className=\"flex -space-x-3\">\n {avatarUrls.map((url, i) => (\n <Avatar key={i} className=\"size-9 border-2 border-background\">\n <AvatarImage src={url} alt=\"\" />\n <AvatarFallback className=\"text-xs\">\n {String.fromCharCode(65 + (i % 26))}\n </AvatarFallback>\n </Avatar>\n ))}\n </div>\n )}\n {socialProofText && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {socialProofText}\n </p>\n )}\n </div>\n </FadeIn>\n )}\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\n\nexport interface FeatureCardProps extends React.HTMLAttributes<HTMLDivElement> {\n icon: LucideIcon;\n title: string;\n description: string;\n href?: string;\n}\n\nexport function FeatureCard({ icon: Icon, title, description, href, className, ...props }: FeatureCardProps) {\n const mode = useUIVariant();\n\n const cardInner = (\n <div\n className={cn(\n 'group relative flex h-full flex-col gap-4 border bg-card p-6 transition-all duration-200',\n mode === 'playful'\n ? 'rounded-2xl rotate-[0.3deg]'\n : mode === 'smooth'\n ? 'rounded-3xl hover:-translate-y-0.5 hover:shadow-md'\n : 'rounded-2xl hover:-translate-y-0.5 hover:shadow-md',\n href && 'cursor-pointer',\n mode !== 'playful' && className,\n )}\n {...(mode !== 'playful' ? props : {})}\n >\n <div\n className={cn(\n 'flex h-10 w-10 items-center justify-center bg-primary/10 text-primary transition-colors group-hover:bg-primary group-hover:text-primary-foreground',\n mode === 'smooth' ? 'rounded-2xl' : 'rounded-xl',\n )}\n >\n <Icon className=\"size-5\" />\n </div>\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"font-semibold leading-tight\">{title}</h3>\n {href && (\n <ArrowRight className=\"size-4 shrink-0 text-muted-foreground opacity-0 transition-all group-hover:translate-x-0.5 group-hover:opacity-100\" />\n )}\n </div>\n <p className=\"text-sm leading-relaxed text-muted-foreground\">{description}</p>\n </div>\n </div>\n );\n\n const content =\n mode === 'playful' ? (\n <div className={cn('group/playful relative h-full', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 rounded-2xl bg-border transition-transform duration-200 translate-x-[5px] translate-y-[5px] -rotate-[0.5deg] group-hover/playful:-rotate-[1.5deg] group-hover/playful:translate-x-[6px] group-hover/playful:translate-y-[6px]\"\n />\n {cardInner}\n </div>\n ) : (\n cardInner\n );\n\n if (href) {\n return <a href={href} className=\"block h-full\">{content}</a>;\n }\n\n return content;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\n\nexport interface CarouselProps {\n /** Items to scroll through — each child becomes one snap slide. */\n children: React.ReactNode;\n /** Width classes applied to each slide. @default 'w-[280px] sm:w-[320px]' */\n itemClassName?: string;\n /** Prev/next control placement. @default 'top-right' */\n controls?: 'top-right' | 'none';\n /** Accessible label for the scroll region. */\n ariaLabel?: string;\n className?: string;\n}\n\n/**\n * Scroll-snap carousel behavior — wraps any children in a horizontally\n * scrolling track with prev/next controls. A mechanic, not a section:\n * feed it cards, images, or whole blocks. No carousel dependency.\n */\nexport function Carousel({\n children,\n itemClassName = 'w-[280px] sm:w-[320px]',\n controls = 'top-right',\n ariaLabel,\n className,\n}: CarouselProps) {\n const mode = useUIVariant();\n const trackRef = React.useRef<HTMLDivElement>(null);\n const [canPrev, setCanPrev] = React.useState(false);\n const [canNext, setCanNext] = React.useState(true);\n\n const updateScrollState = React.useCallback(() => {\n const track = trackRef.current;\n if (!track) return;\n setCanPrev(track.scrollLeft > 8);\n setCanNext(track.scrollLeft < track.scrollWidth - track.clientWidth - 8);\n }, []);\n\n React.useEffect(() => {\n const track = trackRef.current;\n if (!track) return;\n updateScrollState();\n track.addEventListener('scroll', updateScrollState, { passive: true });\n const observer = new ResizeObserver(updateScrollState);\n observer.observe(track);\n return () => {\n track.removeEventListener('scroll', updateScrollState);\n observer.disconnect();\n };\n }, [updateScrollState]);\n\n const scrollByItem = (direction: 1 | -1) => {\n const track = trackRef.current;\n if (!track) return;\n const item = track.querySelector<HTMLElement>('[data-carousel-item]');\n const gap = parseFloat(getComputedStyle(track).columnGap) || 24;\n const step = item ? item.offsetWidth + gap : track.clientWidth * 0.8;\n track.scrollBy({ left: direction * step, behavior: 'smooth' });\n };\n\n const controlClasses = cn(\n 'flex size-9 items-center justify-center border bg-background text-foreground transition-colors',\n 'hover:bg-muted disabled:opacity-40 disabled:hover:bg-background',\n mode === 'smooth' ? 'rounded-2xl' : 'rounded-xl',\n );\n\n return (\n <div className={className}>\n {controls === 'top-right' && (\n <div className=\"mb-4 flex items-center justify-end gap-2\">\n <button\n type=\"button\"\n aria-label=\"Previous\"\n className={controlClasses}\n onClick={() => scrollByItem(-1)}\n disabled={!canPrev}\n >\n <ChevronLeft className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next\"\n className={controlClasses}\n onClick={() => scrollByItem(1)}\n disabled={!canNext}\n >\n <ChevronRight className=\"size-4\" />\n </button>\n </div>\n )}\n\n <div\n ref={trackRef}\n role=\"region\"\n aria-label={ariaLabel}\n className=\"flex snap-x snap-mandatory gap-6 overflow-x-auto pb-4 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n >\n {React.Children.map(children, (child) =>\n child == null ? null : (\n <div data-carousel-item className={cn('shrink-0 snap-start', itemClassName)}>\n {child}\n </div>\n ),\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface StaggerChildrenProps extends React.HTMLAttributes<HTMLDivElement> {\n stagger?: number;\n delay?: number;\n duration?: number;\n direction?: 'up' | 'down' | 'left' | 'right' | 'none';\n once?: boolean;\n children: React.ReactNode;\n}\n\nconst translateMap = {\n up: [0, 20],\n down: [0, -20],\n left: [20, 0],\n right: [-20, 0],\n none: [0, 0],\n};\n\nexport function StaggerChildren({\n stagger = 80,\n delay = 0,\n duration = 500,\n direction = 'up',\n once = true,\n children,\n className,\n ...props\n}: StaggerChildrenProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n if (once) observer.disconnect();\n } else if (!once) {\n setVisible(false);\n }\n },\n { threshold: 0.1 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [once]);\n\n const [tx, ty] = translateMap[direction];\n\n return (\n <div ref={ref} className={cn(className)} {...props}>\n {React.Children.map(children, (child, i) => (\n <div\n className=\"h-full\"\n style={{\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n transitionDelay: `${delay + i * stagger}ms`,\n opacity: visible ? 1 : 0,\n transform: visible ? 'translate(0,0)' : `translate(${tx}px,${ty}px)`,\n }}\n >\n {child}\n </div>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { FeatureCard } from '../components/FeatureCard';\nimport { Carousel } from '../mechanics/Carousel';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface FeaturesSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n features: Array<{ icon: LucideIcon; title: string; description: string; href?: string }>;\n /** How the feature cards are arranged. @default 'grid' */\n layout?: 'grid' | 'carousel';\n}\n\nexport function FeaturesSection({\n title = 'Everything you need to ship fast',\n description = 'A complete system of components, blocks, and hooks designed to work together - and get out of your way.',\n badge = 'Features',\n features,\n layout = 'grid',\n}: FeaturesSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n const cards = features.map((feature) => (\n <FeatureCard\n key={feature.title}\n icon={feature.icon}\n title={feature.title}\n description={feature.description}\n href={feature.href}\n />\n ));\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className={cn('mx-auto', layout === 'carousel' ? 'max-w-5xl' : 'max-w-4xl')}>\n <SectionTitle title={title} description={description} badge={badge} />\n\n {layout === 'carousel' ? (\n <FadeIn direction=\"up\">\n <Carousel className=\"mt-10\" ariaLabel={title}>\n {cards}\n </Carousel>\n </FadeIn>\n ) : (\n <StaggerChildren className=\"mt-12 grid gap-8 sm:grid-cols-2 lg:grid-cols-3\">\n {cards}\n </StaggerChildren>\n )}\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { FeatureCard } from '../components/FeatureCard';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface GroupedFeatureGroup {\n label: string;\n features: Array<{ icon: LucideIcon; title: string; description: string; href?: string }>;\n}\n\nexport interface GroupedFeaturesSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n groups: GroupedFeatureGroup[];\n}\n\nexport function GroupedFeaturesSection({\n badge = 'Features',\n title = 'Everything you need to ship',\n description,\n groups,\n}: GroupedFeaturesSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <div className=\"mt-14 space-y-14\">\n {groups.map((group, i) => (\n <div key={group.label}>\n <FadeIn direction=\"up\" delay={i * 60}>\n <div className=\"mb-6 flex items-center gap-3\">\n <span className=\"text-sm font-semibold tracking-wide text-muted-foreground uppercase\">\n {group.label}\n </span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n </FadeIn>\n <StaggerChildren className=\"grid gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n {group.features.map((feature) => (\n <FeatureCard\n key={feature.title}\n icon={feature.icon}\n title={feature.title}\n description={feature.description}\n href={feature.href}\n />\n ))}\n </StaggerChildren>\n </div>\n ))}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface StepItem {\n emoji?: string;\n title: string;\n description: React.ReactNode;\n}\n\nexport interface StepGroup {\n steps: StepItem[];\n /** Content rendered after this group, outside the timeline (e.g. a CTA card). */\n after?: React.ReactNode;\n}\n\nexport interface StepsSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n steps?: StepItem[];\n /** 'default': horizontal row (vertical on mobile). 'timeline': vertical numbered timeline with a fading accent line. */\n variant?: 'default' | 'timeline';\n /** Timeline only — step groups with optional interstitial content; overrides `steps`. Numbering continues across groups. */\n groups?: StepGroup[];\n}\n\nfunction TimelineGroup({\n steps,\n startNumber,\n fadeIn,\n}: {\n steps: StepItem[];\n startNumber: number;\n fadeIn: boolean;\n}) {\n const fadePx = 48;\n return (\n <div className=\"relative\">\n {/* Accent line: optional fade-in head, solid middle, fade-out tail */}\n {fadeIn && (\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[19px] w-1 bg-gradient-to-b from-transparent to-primary\"\n style={{ top: 0, height: fadePx }}\n />\n )}\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[19px] w-1 bg-primary\"\n style={{\n top: fadeIn ? fadePx : 20,\n height: fadeIn ? `calc(100% - ${fadePx}px)` : 'calc(100% - 20px)',\n }}\n />\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[19px] w-1 bg-gradient-to-b from-primary to-transparent\"\n style={{ top: '100%', height: fadePx }}\n />\n\n <div className=\"space-y-10\" style={fadeIn ? { paddingTop: fadePx } : undefined}>\n {steps.map((step, i) => (\n <FadeIn key={step.title} direction=\"up\" delay={i * 80}>\n <div className=\"relative flex gap-5\">\n <div className=\"relative z-10 flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full border-2 border-primary bg-primary text-lg font-bold text-primary-foreground\">\n {step.emoji ?? startNumber + i}\n </div>\n <div className=\"flex-1 pt-1 pb-2\">\n <h3 className=\"mb-2 text-xl font-semibold text-foreground\">{step.title}</h3>\n <div className=\"text-sm leading-relaxed text-muted-foreground\">{step.description}</div>\n </div>\n </div>\n </FadeIn>\n ))}\n </div>\n </div>\n );\n}\n\nexport function StepsSection({\n badge = 'How it works',\n title = 'From zero to shipped',\n description,\n steps,\n variant = 'default',\n groups,\n}: StepsSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n if (variant === 'timeline') {\n const resolvedGroups: StepGroup[] = groups ?? (steps ? [{ steps }] : []);\n let nextNumber = 1;\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-3xl\">\n <SectionTitle badge={badge} title={title} description={description} className=\"text-left [&>p]:mx-0\" />\n <div className=\"mt-12\">\n {resolvedGroups.map((group, groupIndex) => {\n const startNumber = nextNumber;\n nextNumber += group.steps.length;\n return (\n <React.Fragment key={groupIndex}>\n <div className={cn(groupIndex > 0 && 'mt-10')}>\n <TimelineGroup steps={group.steps} startNumber={startNumber} fadeIn={groupIndex > 0} />\n </div>\n {group.after && <div className=\"mt-16\">{group.after}</div>}\n </React.Fragment>\n );\n })}\n </div>\n </div>\n </div>\n </section>\n );\n }\n\n const resolvedSteps = steps ?? [];\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <div className=\"mt-12\">\n {/* Desktop: horizontal row */}\n <div className=\"hidden sm:grid\" style={{ gridTemplateColumns: `repeat(${resolvedSteps.length}, 1fr)` }}>\n {resolvedSteps.map((step, i) => (\n <FadeIn key={step.title} direction=\"up\" delay={i * 80}>\n <div className=\"relative flex flex-col items-center text-center px-4\">\n {/* Dashed connector to next step */}\n {i < resolvedSteps.length - 1 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute top-6 left-1/2 w-full border-t border-dashed border-border\"\n />\n )}\n {/* Emoji badge (or fallback number) */}\n <div className=\"relative z-10 mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-muted text-2xl\">\n {step.emoji ?? (\n <span className=\"text-sm font-semibold text-primary\">{i + 1}</span>\n )}\n </div>\n <h3 className=\"font-semibold text-foreground\">{step.title}</h3>\n <div className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{step.description}</div>\n </div>\n </FadeIn>\n ))}\n </div>\n\n {/* Mobile: vertical timeline */}\n <div className=\"flex flex-col gap-0 sm:hidden\">\n {resolvedSteps.map((step, i) => (\n <FadeIn key={step.title} direction=\"up\" delay={i * 80}>\n <div className=\"relative flex gap-4 pb-8 last:pb-0\">\n {/* Vertical connector */}\n {i < resolvedSteps.length - 1 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[23px] top-14 bottom-0 w-px border-l border-dashed border-border\"\n />\n )}\n {/* Emoji badge (or fallback number) */}\n <div className=\"relative z-10 flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-muted text-2xl\">\n {step.emoji ?? (\n <span className=\"text-sm font-semibold text-primary\">{i + 1}</span>\n )}\n </div>\n <div className=\"pt-3\">\n <h3 className=\"font-semibold text-foreground\">{step.title}</h3>\n <div className=\"mt-1.5 text-sm leading-relaxed text-muted-foreground\">{step.description}</div>\n </div>\n </div>\n </FadeIn>\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface TechStackItem {\n icon: LucideIcon;\n name: string;\n description: string;\n href?: string;\n}\n\nexport interface TechStackSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n items: TechStackItem[];\n}\n\nexport function TechStackSection({\n badge = 'Built on',\n title = 'The stack',\n description,\n items,\n}: TechStackSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <StaggerChildren className=\"mt-12 grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {items.map((item) => {\n const Icon = item.icon;\n const card = (\n <div\n className={cn(\n 'group flex flex-col gap-3 border bg-background p-5 transition-all duration-200',\n mode === 'smooth'\n ? 'rounded-2xl hover:-translate-y-0.5 hover:shadow-md'\n : 'rounded-xl hover:-translate-y-0.5 hover:shadow-md',\n )}\n >\n <div\n className={cn(\n 'flex h-9 w-9 items-center justify-center bg-muted text-muted-foreground transition-colors group-hover:bg-primary/10 group-hover:text-primary',\n mode === 'smooth' ? 'rounded-xl' : 'rounded-lg',\n )}\n >\n <Icon className=\"size-4\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold leading-tight\">{item.name}</p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">{item.description}</p>\n </div>\n </div>\n );\n\n if (item.href) {\n return (\n <a key={item.name} href={item.href} className=\"block\">\n {card}\n </a>\n );\n }\n return <div key={item.name}>{card}</div>;\n })}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface FeatureMarqueeItem {\n icon: LucideIcon;\n title: string;\n}\n\nexport interface FeatureMarqueeRow {\n items: FeatureMarqueeItem[];\n direction?: 'left' | 'right';\n}\n\nexport interface FeatureMarqueeSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n rows: FeatureMarqueeRow[];\n speed?: 'slow' | 'normal' | 'fast';\n pauseOnHover?: boolean;\n}\n\nconst speedDuration = {\n slow: '280s',\n normal: '180s',\n fast: '100s',\n} as const;\n\nexport function FeatureMarqueeSection({\n badge,\n title,\n description,\n rows,\n speed = 'normal',\n pauseOnHover = true,\n}: FeatureMarqueeSectionProps) {\n const mode = useUIVariant();\n const duration = speedDuration[speed];\n\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"py-14 sm:py-20\">\n {(title || badge || description) && (\n <FadeIn direction=\"up\">\n <div className=\"mx-auto mb-10 max-w-4xl px-6 sm:px-10\">\n <SectionTitle title={title ?? ''} description={description} badge={badge} />\n </div>\n </FadeIn>\n )}\n\n <div className=\"space-y-3\">\n {rows.map((row, i) => {\n const direction = row.direction ?? (i % 2 === 0 ? 'left' : 'right');\n const reversed = direction === 'right';\n // Repeat enough that one set exceeds 4K viewport (~3840px).\n const set = Array.from({ length: 4 }, () => row.items).flat();\n const items = [...set, ...set];\n\n return (\n <div\n key={i}\n className=\"group relative overflow-hidden\"\n style={{\n maskImage:\n 'linear-gradient(to right, transparent, black 8%, black 92%, transparent)',\n WebkitMaskImage:\n 'linear-gradient(to right, transparent, black 8%, black 92%, transparent)',\n }}\n >\n <div\n className={cn(\n 'flex w-max gap-3 py-0.5',\n pauseOnHover && 'group-hover:[animation-play-state:paused]',\n )}\n style={{\n animation: `${reversed ? 'feature-marquee-right' : 'feature-marquee-left'} ${duration} linear infinite`,\n }}\n >\n {items.map((item, j) => {\n const Icon = item.icon;\n return (\n <div\n key={`${item.title}-${j}`}\n className=\"flex shrink-0 items-center gap-2 rounded-full border bg-background px-4 py-2 text-sm shadow-sm\"\n >\n <Icon className=\"size-3.5 shrink-0 text-primary\" />\n <span className=\"whitespace-nowrap text-foreground\">{item.title}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <style>{`\n @keyframes feature-marquee-left {\n from { transform: translateX(0); }\n to { transform: translateX(-50%); }\n }\n @keyframes feature-marquee-right {\n from { transform: translateX(-50%); }\n to { transform: translateX(0); }\n }\n `}</style>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useIntersectionObserver(\n options?: IntersectionObserverInit,\n): [React.RefObject<Element | null>, boolean] {\n const ref = React.useRef<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(([entry]) => {\n setIsIntersecting(entry.isIntersecting);\n }, options);\n\n observer.observe(el);\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [ref, isIntersecting];\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight, Rocket, Sparkles } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\nimport { FadeIn } from '../motion/FadeIn';\nimport { useIntersectionObserver } from '../hooks/use-intersection-observer';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface CtaSectionProps {\n heading: string;\n description?: string;\n primaryCta: { label: string; href: string };\n secondaryCta?: { label: string; href: string };\n footnote?: string;\n /**\n * Visual treatment of the section.\n * - `'default'` — badge icon, radial glow, primary + secondary CTAs\n * - `'showcase'` — large watermark icon with a scroll-reveal, single pill CTA\n * @default 'default'\n */\n variant?: 'default' | 'showcase';\n /** (showcase) Watermark icon rendered behind the content. @default <Rocket /> */\n icon?: React.ReactNode;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nfunction ShowcaseCta({\n heading,\n description,\n primaryCta,\n footnote,\n icon,\n renderLink = defaultRenderLink,\n sectionClasses,\n}: CtaSectionProps & { sectionClasses: string }) {\n const [ref, intersecting] = useIntersectionObserver({ threshold: 0.15 });\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n if (intersecting) setVisible(true);\n }, [intersecting]);\n\n return (\n <section\n ref={ref as React.RefObject<HTMLElement>}\n className={cn(\n sectionClasses,\n 'relative transition-[opacity,transform] duration-700 ease-out',\n visible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-6',\n )}\n >\n {/* Decorative watermark icon */}\n <div\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\n style={{\n opacity: visible ? 0.1 : 0,\n transform: visible ? 'scale(1) rotate(0deg)' : 'scale(0.9) rotate(-5deg)',\n transition: 'opacity 700ms ease 200ms, transform 700ms ease 200ms',\n }}\n >\n {icon ?? <Rocket className=\"size-72 text-foreground\" strokeWidth={0.75} />}\n </div>\n\n <div className=\"relative z-10 px-6 py-20 text-center sm:px-10 sm:py-28\">\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {heading}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-lg text-pretty text-muted-foreground\">{description}</p>\n )}\n <div className=\"mt-8\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\" className=\"rounded-full px-6\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n </div>\n {footnote && (\n <p className=\"mt-5 text-sm text-muted-foreground\">{footnote}</p>\n )}\n </div>\n </section>\n );\n}\n\nexport function CtaSection(props: CtaSectionProps) {\n const {\n heading,\n description,\n primaryCta,\n secondaryCta,\n footnote,\n variant = 'default',\n renderLink = defaultRenderLink,\n } = props;\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n\n if (variant === 'showcase') {\n return <ShowcaseCta {...props} sectionClasses={sectionClasses} />;\n }\n\n return (\n <section className={sectionClasses}>\n <div className=\"relative px-6 py-16 sm:px-10 sm:py-24\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_center,hsl(var(--primary)/0.15),transparent_70%)]\" />\n <FadeIn direction=\"up\">\n <div className=\"relative mx-auto max-w-2xl text-center\">\n <div className={cn('mb-4 inline-flex h-10 w-10 items-center justify-center bg-primary/10 text-primary', mode === 'smooth' ? 'rounded-3xl' : 'rounded-2xl')}>\n <Sparkles className=\"size-5\" />\n </div>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {heading}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-lg text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n <div className=\"mt-8 flex flex-wrap items-center justify-center gap-3\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n {secondaryCta &&\n renderLink({\n href: secondaryCta.href,\n children: (\n <Button size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n ),\n })}\n </div>\n {footnote && (\n <p className=\"mt-4 text-sm text-muted-foreground\">\n {footnote}\n </p>\n )}\n </div>\n </FadeIn>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\nimport { useUIMode, type UIMode } from '../context/OlwibaUIContext';\n\n/**\n * A transition is pure data: two layers, each with a start and an end style.\n * Adding an effect means adding an entry to {@link EFFECTS} — the component\n * itself never learns what \"roll\" means. Consumers can pass a spec object\n * directly for anything not in the set.\n */\nexport interface AnimatedSwapSpec {\n /** Hide overflow on the container. Required by effects that travel further than they fade. */\n clip: boolean;\n duration: number;\n easing: string;\n /** The incoming layer: where it starts, where it lands. */\n enter: { from: React.CSSProperties; to: React.CSSProperties };\n /** The outgoing layer: where it starts, where it leaves. */\n exit: { from: React.CSSProperties; to: React.CSSProperties };\n}\n\nexport type AnimatedSwapEffect = 'roll' | 'fade' | 'slide' | 'none';\n\nconst EFFECTS: Record<Exclude<AnimatedSwapEffect, 'none'>, AnimatedSwapSpec> = {\n // Odometer. No opacity at all — the two values are solid and one physically\n // displaces the other, which is what makes it read as a mechanism rather\n // than a crossfade. Needs `clip`, or the departing value is legible above\n // the container the whole way out.\n roll: {\n clip: true,\n duration: 320,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n enter: { from: { transform: 'translateY(100%)' }, to: { transform: 'translateY(0)' } },\n exit: { from: { transform: 'translateY(0)' }, to: { transform: 'translateY(-100%)' } },\n },\n // The neutral one. No movement, so it never fights a layout that's also\n // reflowing around it.\n fade: {\n clip: false,\n duration: 220,\n easing: 'ease',\n enter: { from: { opacity: 0 }, to: { opacity: 1 } },\n exit: { from: { opacity: 1 }, to: { opacity: 0 } },\n },\n // Horizontal, and short: 0.75rem of travel carried by opacity, so it needs\n // no clipping and won't crop a ring or drop shadow on whatever it wraps.\n slide: {\n clip: false,\n duration: 280,\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n enter: {\n from: { opacity: 0, transform: 'translateX(0.75rem)' },\n to: { opacity: 1, transform: 'translateX(0)' },\n },\n exit: {\n from: { opacity: 1, transform: 'translateX(0)' },\n to: { opacity: 0, transform: 'translateX(-0.75rem)' },\n },\n },\n};\n\n/** Mode picks the effect when the caller doesn't. An explicit `effect` always wins. */\nconst MODE_EFFECT: Record<UIMode, AnimatedSwapEffect> = {\n default: 'fade',\n playful: 'roll',\n smooth: 'slide',\n};\n\nexport interface AnimatedSwapProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Changing this is the swap. Nothing else triggers one — the component\n * can't see inside `children`, so re-rendering with different content under\n * the same key updates in place with no animation.\n */\n swapKey: React.Key;\n /** Named effect, or a spec of your own. Defaults from the current UI mode. */\n effect?: AnimatedSwapEffect | AnimatedSwapSpec;\n /** Override the effect's duration, in ms. */\n duration?: number;\n children: React.ReactNode;\n}\n\n/**\n * Animates the replacement of arbitrary content when `swapKey` changes: a\n * price when the billing cadence toggles, a chart when the range changes, a\n * status pill when a job finishes.\n *\n * Both versions are mounted for the length of the transition. The incoming\n * one stays in normal flow so the container sizes to it immediately; the\n * outgoing one is lifted out of flow and overlaid, so content below settles\n * once, at the start, under cover of the animation — rather than snapping\n * when the old copy unmounts.\n *\n * CSS transitions only: no keyframes to register in a consumer's Tailwind\n * config, and no motion library.\n */\nexport function AnimatedSwap({\n swapKey,\n effect,\n duration,\n children,\n className,\n style,\n ...props\n}: AnimatedSwapProps) {\n const mode = useUIMode();\n const resolved = effect ?? MODE_EFFECT[mode];\n const spec = typeof resolved !== 'string' ? resolved : resolved === 'none' ? null : EFFECTS[resolved];\n const ms = duration ?? spec?.duration ?? 0;\n\n const reduced = usePrefersReducedMotion();\n const animated = spec !== null && !reduced;\n\n // What was on screen last commit. Read during the render that notices the\n // key changed — by then `children` is already the new content, so the\n // outgoing copy can only come from here.\n const previous = React.useRef(children);\n const seenKey = React.useRef(swapKey);\n\n const [swap, setSwap] = React.useState<{ key: React.Key; out: React.ReactNode; running: boolean } | null>(null);\n\n if (seenKey.current !== swapKey) {\n const out = previous.current;\n seenKey.current = swapKey;\n if (animated) setSwap({ key: swapKey, out, running: false });\n }\n\n React.useEffect(() => {\n previous.current = children;\n });\n\n // Mount the incoming layer at its start style first, then flip on the next\n // frame. Committing both in one pass gives the browser no start value to\n // transition from and the swap just snaps.\n React.useEffect(() => {\n if (!swap || swap.running) return;\n const raf = requestAnimationFrame(() => {\n setSwap((s) => (s && s.key === swap.key ? { ...s, running: true } : s));\n });\n return () => cancelAnimationFrame(raf);\n }, [swap]);\n\n // Timer rather than onTransitionEnd: an effect may animate a property the\n // wrapped node also transitions on its own, and there's no reliable single\n // event marking the end of both layers.\n React.useEffect(() => {\n if (!swap?.running) return;\n const done = setTimeout(() => {\n setSwap((s) => (s && s.key === swap.key ? null : s));\n }, ms);\n return () => clearTimeout(done);\n }, [swap, ms]);\n\n const phase = (layer: 'enter' | 'exit'): React.CSSProperties | undefined => {\n if (!swap || !spec) return undefined;\n return {\n ...spec[layer][swap.running ? 'to' : 'from'],\n transition: `transform ${ms}ms ${spec.easing}, opacity ${ms}ms ${spec.easing}`,\n };\n };\n\n return (\n <span\n className={cn('relative inline-block', swap && spec?.clip && 'overflow-hidden', className)}\n style={style}\n {...props}\n >\n <span className=\"block\" style={phase('enter')}>\n {children}\n </span>\n {swap && (\n // Pinned rather than inset-0: stretching the outgoing copy to the\n // incoming one's box would resize it mid-exit.\n <span className=\"absolute left-0 top-0 block\" aria-hidden=\"true\" style={phase('exit')}>\n {swap.out}\n </span>\n )}\n </span>\n );\n}\n\nfunction usePrefersReducedMotion() {\n // Not read during render on the server: the query is unknowable there, and\n // guessing either way produces a hydration mismatch. Every swap happens\n // after mount, by which point this is settled.\n const [reduced, setReduced] = React.useState(false);\n\n React.useEffect(() => {\n const query = window.matchMedia?.('(prefers-reduced-motion: reduce)');\n if (!query) return;\n setReduced(query.matches);\n const onChange = (e: MediaQueryListEvent) => setReduced(e.matches);\n query.addEventListener('change', onChange);\n return () => query.removeEventListener('change', onChange);\n }, []);\n\n return reduced;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Check, Minus } from 'lucide-react';\nimport { Badge, Button, cn, Separator, useUIVariant } from '@olwiba/cn';\nimport { AnimatedSwap, type AnimatedSwapEffect, type AnimatedSwapSpec } from '../motion/AnimatedSwap';\n\nexport interface PricingFeature {\n label: string;\n included: boolean;\n}\n\nexport interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n price: string;\n period?: string;\n description: string;\n features: PricingFeature[];\n cta: string;\n highlighted?: boolean;\n disabled?: boolean;\n /** Disables only the CTA button, leaving the rest of the card interactive. */\n ctaDisabled?: boolean;\n badge?: React.ReactNode;\n /** Rendered directly below the CTA button (e.g. a \"Get notified\" link). */\n footer?: React.ReactNode;\n /**\n * How the price transitions when a cadence toggle swaps it. Omit and the\n * current UI mode decides — `fade` in default, `roll` in playful, `slide` in\n * smooth — which is the right answer for a product that has picked a mode\n * and wants every swap on the page to agree with it. Set it when the price\n * specifically should read as a mechanism (`'roll'`) without moving the\n * whole app to playful.\n */\n priceEffect?: AnimatedSwapEffect | AnimatedSwapSpec;\n onSelect?: () => void;\n}\n\nexport function PricingCard({\n name,\n price,\n period = '/mo',\n description,\n features,\n cta,\n highlighted = false,\n disabled = false,\n ctaDisabled = false,\n badge,\n footer,\n priceEffect,\n onSelect,\n className,\n ...props\n}: PricingCardProps) {\n const mode = useUIVariant();\n\n const cardInner = (\n <div\n className={cn(\n 'relative flex flex-col border p-6 transition-opacity',\n mode === 'playful'\n ? 'rounded-2xl rotate-[0.3deg]'\n : mode === 'smooth'\n ? 'rounded-3xl'\n : 'rounded-2xl',\n highlighted ? 'border-primary bg-primary/5 shadow-sm' : 'bg-card',\n disabled && 'pointer-events-none opacity-40 select-none',\n mode !== 'playful' && className,\n )}\n {...(mode !== 'playful' ? props : {})}\n >\n {badge && (\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2\">\n {typeof badge === 'string' ? <Badge>{badge}</Badge> : badge}\n </div>\n )}\n\n <div className=\"space-y-1\">\n <div className=\"text-sm font-medium text-muted-foreground\">{name}</div>\n <div className=\"flex items-end gap-1\">\n {/* Animates when a billing-cadence toggle swaps the price out. The\n price is its own swap key: a card whose price never changes never\n animates. `effect` undefined leaves AnimatedSwap on the mode\n default. */}\n <AnimatedSwap\n swapKey={price}\n effect={priceEffect}\n className=\"text-4xl font-bold tracking-tight\"\n >\n {price}\n </AnimatedSwap>\n <span className=\"mb-1 text-sm text-muted-foreground\">{period}</span>\n </div>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n\n <Button\n variant={highlighted ? 'default' : 'outline'}\n className=\"mt-6 w-full\"\n onClick={onSelect}\n disabled={disabled || ctaDisabled}\n >\n {cta}\n </Button>\n\n {footer && <div className=\"mt-3 text-center text-sm\">{footer}</div>}\n\n <Separator className=\"my-6\" />\n\n <ul className=\"space-y-3 text-sm\">\n {features.map((feat) => (\n <li key={feat.label} className=\"flex items-center gap-2\">\n {feat.included ? (\n <>\n <Check className=\"size-4 shrink-0 text-primary\" />\n <span>{feat.label}</span>\n </>\n ) : (\n <>\n <Minus className=\"size-4 shrink-0 text-muted-foreground/40\" />\n <span className=\"text-muted-foreground/40\">{feat.label}</span>\n </>\n )}\n </li>\n ))}\n </ul>\n </div>\n );\n\n if (mode === 'playful') {\n return (\n <div className={cn('group/playful relative', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className={cn(\n 'absolute inset-0 rounded-2xl transition-transform duration-200 translate-x-[5px] translate-y-[5px] -rotate-[0.5deg] group-hover/playful:-rotate-[1.5deg] group-hover/playful:translate-x-[6px] group-hover/playful:translate-y-[6px]',\n highlighted ? 'bg-primary/20' : 'bg-border',\n )}\n />\n {cardInner}\n </div>\n );\n }\n\n return cardInner;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\ninterface TimeLeft {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nfunction getTimeLeft(deadline: string): TimeLeft | null {\n const diff = new Date(deadline).getTime() - Date.now();\n if (diff <= 0) return null;\n return {\n days: Math.floor(diff / (1000 * 60 * 60 * 24)),\n hours: Math.floor((diff / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((diff / 1000 / 60) % 60),\n seconds: Math.floor((diff / 1000) % 60),\n };\n}\n\nexport interface CountdownTimerProps {\n deadline: string;\n label?: string;\n className?: string;\n /** Compact inline mode — renders as \"29d · 11h · 22m\", no seconds, no label. For use inside badges. */\n compact?: boolean;\n}\n\nexport function CountdownTimer({\n deadline,\n label = 'Founding price closes in',\n className,\n compact = false,\n}: CountdownTimerProps) {\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft | null>(() => getTimeLeft(deadline));\n\n React.useEffect(() => {\n setTimeLeft(getTimeLeft(deadline));\n const id = setInterval(() => setTimeLeft(getTimeLeft(deadline)), 1000);\n return () => clearInterval(id);\n }, [deadline]);\n\n if (!timeLeft) return null;\n\n if (compact) {\n return (\n <span className={cn('font-mono tabular-nums', className)}>\n {timeLeft.days}d · {String(timeLeft.hours).padStart(2, '0')}h · {String(timeLeft.minutes).padStart(2, '0')}m · {String(timeLeft.seconds).padStart(2, '0')}s\n </span>\n );\n }\n\n const units = [\n { value: timeLeft.days, unit: 'd' },\n { value: timeLeft.hours, unit: 'h' },\n { value: timeLeft.minutes, unit: 'm' },\n { value: timeLeft.seconds, unit: 's' },\n ];\n\n return (\n <div className={cn('flex items-center justify-center gap-2 text-sm', className)}>\n <span className=\"text-muted-foreground\">{label}</span>\n <span className=\"flex items-center gap-1 font-mono font-semibold tabular-nums\">\n {units.map(({ value, unit }, i) => (\n <React.Fragment key={unit}>\n <span>\n {String(value).padStart(2, '0')}\n <span className=\"font-normal text-muted-foreground\">{unit}</span>\n </span>\n {i < units.length - 1 && (\n <span className=\"text-muted-foreground/50\">·</span>\n )}\n </React.Fragment>\n ))}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, Button, cn, useUIVariant } from '@olwiba/cn';\nimport { PricingCard, type PricingCardProps, type PricingFeature } from '../components/PricingCard';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { CountdownTimer } from '../motion/CountdownTimer';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\n/**\n * One billing period a plan can be bought at.\n *\n * Products are not all sold monthly-or-annually: weekly, quarterly, and\n * one-off all exist. Pass `cadences` to describe whatever this product\n * actually sells and the section renders a tab per entry, rather than the\n * fixed Monthly/Annual pair it assumes otherwise.\n */\nexport interface PricingCadence {\n /** Matches the keys of `PricingPlan.prices`. */\n key: string;\n label: string;\n /**\n * Billing periods in a year — 52 weekly, 12 monthly, 1 annual. Used only to\n * compare cadences for the savings badge; omit it and no badge is computed\n * for this cadence.\n */\n periodsPerYear?: number;\n /** Price suffix, e.g. \"/ week\". Falls back to `PricingPlan.periodDisplay`. */\n suffix?: string;\n}\n\nexport interface PricingPlan {\n name: string;\n monthly: number;\n annual: number;\n /**\n * Price per cadence key, for products using `cadences`. The `monthly` and\n * `annual` fields above stay as the fallback for callers that don't.\n */\n prices?: Record<string, number>;\n description: string;\n cta: string;\n highlighted?: boolean;\n disabled?: boolean;\n /** Disables only the CTA button, leaving the rest of the card interactive. */\n ctaDisabled?: boolean;\n features: PricingFeature[];\n /** Overrides computed price display (e.g. \"$?\" for community/reach-out tiers). */\n priceDisplay?: string;\n /** Overrides computed period display. */\n periodDisplay?: string;\n}\n\n/**\n * Cheapest-per-year wins: annualise every cadence across all plans and return\n * a `Save N%` label for each one that costs less than the default.\n *\n * Computed rather than configured because a hand-written \"Save 34%\" silently\n * stops being true the first time a price changes.\n */\nfunction computeSaveBadges(\n plans: PricingPlan[],\n cadences: PricingCadence[],\n defaultKey: string,\n): Record<string, string> {\n const annualised = (key: string) => {\n const cadence = cadences.find((c) => c.key === key);\n if (!cadence?.periodsPerYear) return null;\n // Plans priced by `priceDisplay` (pay-what-you-can, \"contact us\") carry no\n // comparable number, so they're left out of the comparison entirely.\n const totals = plans\n .filter((plan) => plan.priceDisplay === undefined && plan.prices?.[key] !== undefined)\n .map((plan) => plan.prices![key]! * cadence.periodsPerYear!);\n return totals.length > 0 ? totals.reduce((sum, n) => sum + n, 0) : null;\n };\n\n const baseline = annualised(defaultKey);\n if (!baseline) return {};\n\n const badges: Record<string, string> = {};\n for (const cadence of cadences) {\n if (cadence.key === defaultKey) continue;\n const total = annualised(cadence.key);\n if (!total || total >= baseline) continue;\n const percent = Math.round(((baseline - total) / baseline) * 100);\n if (percent > 0) badges[cadence.key] = `Save ${percent}%`;\n }\n return badges;\n}\n\n/**\n * Column layout for the number of plans actually being shown.\n *\n * A fixed three-column grid leaves one or two plans hugging the left edge with\n * dead space beside them, which reads as a rendering fault rather than a\n * deliberate layout. Width is capped per count so cards keep a sensible size\n * instead of stretching to fill.\n */\nfunction gridClassesFor(count: number): string {\n if (count <= 1) return 'mx-auto max-w-sm';\n if (count === 2) return 'mx-auto max-w-3xl sm:grid-cols-2';\n if (count === 3) return 'mx-auto max-w-5xl lg:grid-cols-3';\n if (count === 4) return 'mx-auto max-w-6xl sm:grid-cols-2 lg:grid-cols-4';\n // Beyond four, wrapping at three keeps each card readable. A carousel is the\n // answer if a catalogue ever genuinely needs it.\n return 'mx-auto max-w-5xl sm:grid-cols-2 lg:grid-cols-3';\n}\n\nexport interface PricingSectionProps {\n title?: string;\n description?: string;\n badge?: React.ReactNode;\n plans: PricingPlan[];\n saveBadge?: string;\n isAuthenticated?: boolean;\n renderLink?: AppShellRenderLink;\n footnote?: string;\n mode?: 'subscription' | 'one-time';\n foundingDeadline?: string;\n /** Symbol prepended to the computed price. Ignored by plans with `priceDisplay`. */\n currency?: string;\n /** Badge label for `highlighted` plans with no active `foundingDeadline` countdown. Pass '' to show no badge. */\n highlightedBadgeLabel?: string;\n /** Rendered below each plan's CTA button (e.g. a \"Get notified\" link). */\n renderPlanFooter?: (plan: PricingPlan) => React.ReactNode;\n /**\n * Billing periods this product sells at. One entry renders no toggle at all;\n * two or more render a tab each, with savings badges computed from\n * `periodsPerYear`. Omit to keep the built-in Monthly/Annual pair.\n */\n cadences?: PricingCadence[];\n /** Which cadence opens selected. Defaults to the first in `cadences`. */\n defaultCadence?: string;\n /**\n * Called when a plan's CTA is pressed, with the cadence currently selected —\n * which is the half the caller can't otherwise know, since the toggle's state\n * lives in here. Without it the CTA is inert: `PricingCard` takes an\n * `onSelect` and this section had never passed one.\n */\n onSelectPlan?: (plan: PricingPlan, cadence?: string) => void;\n /** Marks one plan as busy (e.g. its checkout is being created). */\n pendingPlanName?: string;\n /**\n * How each card's price transitions when the cadence toggle changes it.\n * Omit and the current UI mode decides (see `PricingCard.priceEffect`) —\n * pass `'roll'` for an odometer on a product that is otherwise in default\n * mode.\n */\n priceEffect?: PricingCardProps['priceEffect'];\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function PricingSection({\n title = 'Simple, transparent pricing',\n description = 'Start for free. Scale as you grow. No hidden fees.',\n badge = 'Pricing',\n plans,\n saveBadge = 'Save 34%',\n isAuthenticated,\n renderLink = defaultRenderLink,\n footnote,\n mode = 'subscription',\n foundingDeadline,\n currency = '$',\n highlightedBadgeLabel = 'Founding member',\n renderPlanFooter,\n cadences,\n defaultCadence,\n onSelectPlan,\n pendingPlanName,\n priceEffect,\n}: PricingSectionProps) {\n const [annual, setAnnual] = React.useState(false);\n const isOneTime = mode === 'one-time';\n\n // Explicit cadences replace the built-in Monthly/Annual pair entirely.\n const useCadences = !!cadences?.length;\n const initialCadence =\n (defaultCadence && cadences?.some((c) => c.key === defaultCadence) ? defaultCadence : null) ??\n cadences?.[0]?.key ??\n '';\n const [activeCadence, setActiveCadence] = React.useState(initialCadence);\n const cadence = cadences?.find((c) => c.key === activeCadence);\n const saveBadges = React.useMemo(\n () => (useCadences ? computeSaveBadges(plans, cadences!, initialCadence) : {}),\n [useCadences, plans, cadences, initialCadence],\n );\n // A single cadence is just a label for the price — nothing to switch between.\n const showToggle = useCadences ? cadences!.length > 1 : !isOneTime;\n const uiMode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n uiMode === 'smooth' && 'rounded-3xl border',\n uiMode === 'playful' && 'rounded-2xl border-primary/25 border',\n !uiMode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n {/* Header */}\n <div className=\"text-center\">\n {badge && (\n typeof badge === 'string'\n ? <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>\n : <div className=\"mb-4\">{badge}</div>\n )}\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-xl text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n\n {/* Billing toggle: one tab per cadence, or the legacy Monthly/Annual pair */}\n {showToggle && (\n <div className=\"mt-6 inline-flex items-center gap-3 rounded-full border bg-muted p-1\">\n {useCadences\n ? cadences!.map((entry) => (\n <Button\n key={entry.key}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setActiveCadence(entry.key)}\n className={cn(\n 'flex items-center gap-2 rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n entry.key === activeCadence\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {entry.label}\n {saveBadges[entry.key] && (\n // `default` (primary), not `secondary`: the toggle is\n // `bg-muted` with a `bg-background` active tab, and a\n // secondary badge is the same grey as both — the\n // saving is the incentive, so it has to carry brand\n // colour to read at all.\n <Badge variant=\"default\" className=\"text-xs\">\n {saveBadges[entry.key]}\n </Badge>\n )}\n </Button>\n ))\n : (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setAnnual(false)}\n className={cn(\n 'rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n !annual ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',\n )}\n >\n Monthly\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setAnnual(true)}\n className={cn(\n 'flex items-center gap-2 rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n annual ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',\n )}\n >\n Annual\n {saveBadge && (\n <Badge variant=\"default\" className=\"text-xs\">{saveBadge}</Badge>\n )}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n\n {/* Plan cards */}\n <StaggerChildren className={cn('mt-10 grid gap-4', gridClassesFor(plans.length))}>\n {plans.map((plan) => {\n const rawPrice = useCadences\n ? (plan.prices?.[activeCadence] ?? plan.monthly)\n : isOneTime\n ? plan.monthly\n : annual\n ? plan.annual\n : plan.monthly;\n const price = plan.priceDisplay ?? `${currency}${rawPrice}`;\n // With cadences the suffix follows the selected tab, so a plan's\n // own periodDisplay would pin it to whichever it was written for.\n const period = useCadences\n ? (cadence?.suffix ?? plan.periodDisplay ?? '')\n : (plan.periodDisplay ?? (isOneTime ? 'one-time' : rawPrice > 0 ? '/mo' : ''));\n const badge = plan.highlighted && foundingDeadline\n ? (\n <span className=\"inline-flex items-center rounded-full border bg-secondary px-2.5 py-0.5 text-xs font-semibold text-secondary-foreground\">\n <CountdownTimer deadline={foundingDeadline} compact />\n </span>\n )\n : plan.highlighted && highlightedBadgeLabel\n ? highlightedBadgeLabel\n : undefined;\n return (\n <PricingCard\n key={plan.name}\n name={plan.name}\n price={price}\n period={period}\n description={plan.description}\n features={plan.features}\n cta={pendingPlanName === plan.name ? 'Redirecting…' : plan.cta}\n highlighted={plan.highlighted}\n disabled={plan.disabled}\n // A plan mid-checkout is disabled too, so a second click\n // can't open a second session.\n ctaDisabled={plan.ctaDisabled || pendingPlanName === plan.name}\n badge={badge}\n footer={renderPlanFooter?.(plan)}\n priceEffect={priceEffect}\n onSelect={\n onSelectPlan\n ? () => onSelectPlan(plan, useCadences ? activeCadence : undefined)\n : undefined\n }\n />\n );\n })}\n </StaggerChildren>\n\n {/* Footnote */}\n {footnote && (\n <p className=\"mt-8 text-center text-sm text-muted-foreground\">\n {footnote}\n </p>\n )}\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Quote, Star } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn, useUIVariant } from '@olwiba/cn';\n\nexport interface TestimonialCardProps extends React.HTMLAttributes<HTMLDivElement> {\n quote: string;\n name: string;\n role: string;\n company?: string;\n avatar?: string;\n initials?: string;\n rating?: number;\n}\n\nexport function TestimonialCard({\n quote,\n name,\n role,\n company,\n avatar,\n initials,\n rating,\n className,\n ...props\n}: TestimonialCardProps) {\n const mode = useUIVariant();\n\n const cardInner = (\n <div\n className={cn(\n 'flex flex-col gap-4 border bg-card p-6',\n mode === 'playful'\n ? 'rounded-2xl rotate-[0.3deg]'\n : mode === 'smooth'\n ? 'rounded-3xl'\n : 'rounded-2xl',\n mode !== 'playful' && className,\n )}\n {...(mode !== 'playful' ? props : {})}\n >\n <Quote className=\"size-4 text-muted-foreground/40\" />\n {rating != null && (\n <div className=\"flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n className={cn(\n 'size-4',\n i < rating\n ? 'fill-current text-amber-400'\n : 'text-muted-foreground/30',\n )}\n />\n ))}\n </div>\n )}\n <p className=\"flex-1 text-sm leading-relaxed\">{quote}</p>\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-9\">\n <AvatarImage src={avatar} alt={name} />\n <AvatarFallback className=\"text-xs\">{initials ?? name.slice(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n <div>\n <div className=\"text-sm font-medium leading-tight\">{name}</div>\n <div className=\"text-xs text-muted-foreground\">\n {role}{company ? ` · ${company}` : ''}\n </div>\n </div>\n </div>\n </div>\n );\n\n if (mode === 'playful') {\n return (\n <div className={cn('group/playful relative', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 rounded-2xl bg-border transition-transform duration-200 translate-x-[5px] translate-y-[5px] -rotate-[0.5deg] group-hover/playful:-rotate-[1.5deg] group-hover/playful:translate-x-[6px] group-hover/playful:translate-y-[6px]\"\n />\n {cardInner}\n </div>\n );\n }\n\n return cardInner;\n}\n","'use client';\n\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { TestimonialCard } from '../components/TestimonialCard';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface TestimonialsSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n testimonials: Array<{\n quote: string;\n name: string;\n role: string;\n company?: string;\n avatar?: string;\n initials?: string;\n rating?: number;\n }>;\n}\n\nexport function TestimonialsSection({\n title = 'Trusted by teams shipping real products',\n description = \"Here's what engineers and product teams say after using Olwiba in production.\",\n badge = 'Testimonials',\n testimonials,\n}: TestimonialsSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <StaggerChildren className=\"mt-12 columns-1 gap-4 sm:columns-2 lg:columns-3\">\n {testimonials.map((t) => (\n <div\n key={t.name}\n className=\"mb-4 break-inside-avoid transition-transform hover:-translate-y-0.5\"\n >\n <TestimonialCard\n quote={t.quote}\n name={t.name}\n role={t.role}\n company={t.company}\n avatar={t.avatar}\n initials={t.initials}\n rating={t.rating}\n />\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Github, Linkedin, Twitter } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\n\nexport interface TeamMember {\n name: string;\n role: string;\n bio: string;\n avatar?: string;\n initials: string;\n social?: {\n twitter?: string | null;\n github?: string | null;\n linkedin?: string | null;\n };\n}\n\nconst defaultTeam: TeamMember[] = [\n {\n name: 'Olivia Reed',\n role: 'Co-Founder & CEO',\n bio: 'Previously led product at two YC companies. Obsessed with design systems and developer experience.',\n avatar: 'https://ui.shadcn.com/avatars/01.png',\n initials: 'OR',\n social: { twitter: '#', github: '#', linkedin: '#' },\n },\n {\n name: 'Marcus Webb',\n role: 'Co-Founder & CTO',\n bio: 'Full-stack engineer with 12 years building UI infrastructure. Open source maintainer.',\n avatar: 'https://ui.shadcn.com/avatars/02.png',\n initials: 'MW',\n social: { twitter: '#', github: '#', linkedin: '#' },\n },\n {\n name: 'Priya Nair',\n role: 'Head of Design',\n bio: 'Interaction designer turned design systems engineer. Bridges the gap between Figma and production.',\n avatar: 'https://ui.shadcn.com/avatars/03.png',\n initials: 'PN',\n social: { twitter: '#', github: null, linkedin: '#' },\n },\n];\n\nexport interface TeamSectionProps {\n members?: TeamMember[];\n badge?: string;\n title?: string;\n description?: string;\n}\n\nexport function TeamSection({\n members = defaultTeam,\n badge = 'Team',\n title = 'The people behind Olwiba',\n description = 'A small team with deep experience in design systems, open source, and developer tooling.',\n}: TeamSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n <div className=\"text-center\">\n <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n <p className=\"mx-auto mt-4 max-w-xl text-pretty text-muted-foreground\">\n {description}\n </p>\n </div>\n\n <div className=\"mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n {members.map((member) => (\n <div key={member.name} className=\"rounded-2xl border bg-muted/40 p-5\">\n <div className=\"flex items-start gap-4\">\n <Avatar className=\"size-12 rounded-xl\">\n <AvatarImage src={member.avatar} alt={member.name} />\n <AvatarFallback className=\"rounded-xl\">{member.initials}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"font-semibold leading-tight\">{member.name}</div>\n <div className=\"text-sm text-muted-foreground\">{member.role}</div>\n </div>\n </div>\n <p className=\"mt-3 text-sm leading-relaxed text-muted-foreground\">{member.bio}</p>\n {member.social && (\n <div className=\"mt-4 flex items-center gap-2\">\n {member.social.twitter && (\n <a href={member.social.twitter} aria-label=\"Twitter\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Twitter className=\"size-3.5\" />\n </a>\n )}\n {member.social.github && (\n <a href={member.social.github} aria-label=\"GitHub\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Github className=\"size-3.5\" />\n </a>\n )}\n {member.social.linkedin && (\n <a href={member.social.linkedin} aria-label=\"LinkedIn\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Linkedin className=\"size-3.5\" />\n </a>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger, cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface FaqSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n items: Array<{ question: string; answer: string }>;\n}\n\nexport function FaqSection({\n title = 'Frequently asked questions',\n description = 'Everything you need to know before getting started.',\n badge = 'FAQ',\n items,\n}: FaqSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-3xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <FadeIn direction=\"up\">\n <Accordion type=\"single\" collapsible className=\"mt-10 w-full\">\n {items.map((item, i) => (\n <AccordionItem key={i} value={`item-${i}`}>\n <AccordionTrigger className=\"text-left text-sm font-medium\">\n {item.question}\n </AccordionTrigger>\n <AccordionContent className=\"text-sm text-muted-foreground\">\n {item.answer}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </FadeIn>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface CountUpProps extends React.HTMLAttributes<HTMLSpanElement> {\n from?: number;\n to: number;\n duration?: number;\n decimals?: number;\n prefix?: string;\n suffix?: string;\n once?: boolean;\n}\n\nexport function CountUp({\n from = 0,\n to,\n duration = 1500,\n decimals = 0,\n prefix = '',\n suffix = '',\n once = true,\n className,\n ...props\n}: CountUpProps) {\n const ref = React.useRef<HTMLSpanElement>(null);\n const [value, setValue] = React.useState(from);\n const hasStarted = React.useRef(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && (!once || !hasStarted.current)) {\n hasStarted.current = true;\n const start = performance.now();\n\n const tick = (now: number) => {\n const elapsed = now - start;\n const progress = Math.min(elapsed / duration, 1);\n const eased = 1 - Math.pow(1 - progress, 3);\n setValue(from + (to - from) * eased);\n if (progress < 1) requestAnimationFrame(tick);\n };\n\n requestAnimationFrame(tick);\n }\n },\n { threshold: 0.5 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [from, to, duration, once]);\n\n return (\n <span ref={ref} className={cn(className)} {...props}>\n {prefix}{value.toFixed(decimals)}{suffix}\n </span>\n );\n}\n","'use client';\n\nimport { Separator, cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { CountUp } from '../motion/CountUp';\n\nexport interface StatsSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n stats: Array<{ value: string; label: string; description?: string }>;\n}\n\nfunction parseStatValue(value: string) {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)(.*)/);\n if (!match) return null;\n const num = parseFloat(match[1]);\n const suffix = match[2] || '';\n const decimals = match[1].includes('.') ? match[1].split('.')[1].length : 0;\n return { num, suffix, decimals };\n}\n\nfunction StatValue({ value }: { value: string }) {\n const parsed = parseStatValue(value);\n if (!parsed) return <>{value}</>;\n return <CountUp to={parsed.num} decimals={parsed.decimals} suffix={parsed.suffix} />;\n}\n\nexport function StatsSection({\n title = 'Built for scale, used in production',\n description,\n badge = 'By the numbers',\n stats,\n}: StatsSectionProps) {\n const mode = useUIVariant()\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n )\n return (\n <section className={sectionClasses}>\n <div className=\"relative px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_bottom,hsl(var(--primary)/0.08),transparent_60%)]\" />\n <div className=\"relative mx-auto max-w-4xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <StaggerChildren className=\"mt-12 grid gap-px overflow-hidden rounded-2xl border bg-border sm:grid-cols-2 lg:grid-cols-4\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"flex flex-col gap-2 bg-card px-6 py-8\">\n <div className=\"text-4xl font-bold tracking-tight\">\n <StatValue value={stat.value} />\n </div>\n <div className=\"font-medium\">{stat.label}</div>\n {stat.description && (\n <>\n <Separator />\n <p className=\"text-sm text-muted-foreground\">{stat.description}</p>\n </>\n )}\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight, Mail } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\n\nexport interface NewsletterSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n placeholder?: string;\n submitLabel?: string;\n privacyHref?: string;\n privacyLabel?: string;\n successTitle?: string;\n successDescription?: string;\n onSubscribe?: (email: string) => void | Promise<void>;\n}\n\nconst defaults = {\n badge: 'Newsletter',\n title: 'Stay in the loop',\n description:\n 'New components, release notes, and product tips — straight to your inbox. No spam, unsubscribe any time.',\n placeholder: 'you@company.com',\n submitLabel: 'Subscribe',\n privacyHref: '#',\n privacyLabel: 'Privacy Policy',\n successTitle: \"You're on the list.\",\n successDescription: \"We'll be in touch soon.\",\n};\n\nexport function NewsletterSection({\n badge = defaults.badge,\n title = defaults.title,\n description = defaults.description,\n placeholder = defaults.placeholder,\n submitLabel = defaults.submitLabel,\n privacyHref = defaults.privacyHref,\n privacyLabel = defaults.privacyLabel,\n successTitle = defaults.successTitle,\n successDescription = defaults.successDescription,\n onSubscribe,\n}: NewsletterSectionProps = {}) {\n const [email, setEmail] = React.useState('');\n const [submitted, setSubmitted] = React.useState(false);\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n if (!email) return;\n await onSubscribe?.(email);\n setSubmitted(true);\n }\n\n return (\n <section className={sectionClasses}>\n <div className=\"relative px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,hsl(var(--primary)/0.1),transparent_60%)]\" />\n <div className=\"relative mx-auto max-w-xl text-center\">\n <div className=\"mb-4 flex items-center justify-center gap-2\">\n <div className=\"inline-flex h-8 w-8 items-center justify-center rounded-xl bg-primary/10 text-primary\">\n <Mail className=\"size-4\" />\n </div>\n <Badge variant=\"secondary\">\n {badge}\n </Badge>\n </div>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">{title}</h2>\n <p className=\"mx-auto mt-4 max-w-sm text-pretty text-muted-foreground\">{description}</p>\n\n {submitted ? (\n <div className=\"mt-8 rounded-2xl border bg-muted/50 px-6 py-5 text-sm\">\n <span className=\"font-medium\">{successTitle}</span>{' '}\n <span className=\"text-muted-foreground\">{successDescription}</span>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"mt-8 flex flex-col gap-3 sm:flex-row\">\n <input\n type=\"text\"\n name=\"company\"\n tabIndex={-1}\n autoComplete=\"off\"\n aria-hidden=\"true\"\n className=\"hidden\"\n />\n <Input\n type=\"email\"\n placeholder={placeholder}\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n className=\"flex-1\"\n />\n <Button type=\"submit\">\n {submitLabel}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n </form>\n )}\n\n <p className=\"mt-4 text-xs text-muted-foreground\">\n By subscribing you agree to our{' '}\n <a href={privacyHref} className=\"underline underline-offset-4 hover:text-foreground\">\n {privacyLabel}\n </a>\n .\n </p>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronDown, Mail, MessageSquare, Send, type LucideIcon } from 'lucide-react';\nimport { cn, Label, useUIVariant } from '@olwiba/cn';\nimport { Badge } from '../primitives/Badge';\nimport { Button } from '../primitives/Button';\nimport { Input } from '../primitives/Input';\nimport { Textarea } from '../primitives/Textarea';\n\nexport type ContactInfoItem = {\n label: string;\n value: string;\n icon?: LucideIcon;\n};\n\nexport interface ContactSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n contactInfo?: ContactInfoItem[];\n privacyHref?: string;\n successTitle?: string;\n successDescription?: string;\n sendAnotherLabel?: string;\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void | Promise<void>;\n}\n\nconst PHONE_PREFIXES = [\n { label: 'US +1', value: '+1-US' },\n { label: 'NZ +64', value: '+64-NZ' },\n { label: 'AU +61', value: '+61-AU' },\n { label: 'UK +44', value: '+44-UK' },\n { label: 'CA +1', value: '+1-CA' },\n { label: 'EU', value: '+0-EU' },\n];\n\nconst defaults = {\n badge: 'Contact',\n title: \"Let's talk\",\n description:\n \"Have a question or want to work together? Fill in the form and you'll hear back from the person who built it.\",\n successTitle: 'Message sent',\n successDescription: \"Thanks for reaching out. You'll get a reply within one business day.\",\n sendAnotherLabel: 'Send another',\n};\n\nexport function ContactSection({\n badge = defaults.badge,\n title = defaults.title,\n description = defaults.description,\n contactInfo,\n privacyHref,\n successTitle = defaults.successTitle,\n successDescription = defaults.successDescription,\n sendAnotherLabel = defaults.sendAnotherLabel,\n onSubmit,\n}: ContactSectionProps = {}) {\n const [submitted, setSubmitted] = React.useState(false);\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n async function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n e.preventDefault();\n await onSubmit?.(e);\n setSubmitted(true);\n }\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n\n {/* Header */}\n <div className=\"mx-auto max-w-2xl text-center\">\n {badge && (\n <div className=\"mb-4 flex justify-center\">\n <Badge variant=\"secondary\">{badge}</Badge>\n </div>\n )}\n <h2 className=\"text-balance text-4xl font-semibold tracking-tight sm:text-5xl\">\n {title}\n </h2>\n <p className=\"mt-4 text-lg text-muted-foreground\">{description}</p>\n\n {contactInfo && contactInfo.length > 0 && (\n <div className=\"mt-8 flex flex-wrap justify-center gap-6\">\n {contactInfo.map(({ icon: Icon = Mail, label, value }) => (\n <div key={label} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Icon className=\"size-4 shrink-0\" />\n <span>{value}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Body */}\n {submitted ? (\n <div className=\"mx-auto mt-16 max-w-xl text-center\">\n <div className=\"mx-auto flex h-14 w-14 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <MessageSquare className=\"size-6\" />\n </div>\n <h3 className=\"mt-5 text-lg font-semibold\">{successTitle}</h3>\n <p className=\"mt-2 text-sm text-muted-foreground\">{successDescription}</p>\n <Button variant=\"outline\" size=\"sm\" className=\"mt-6\" onClick={() => setSubmitted(false)}>\n {sendAnotherLabel}\n </Button>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"mx-auto mt-16 max-w-xl sm:mt-20\">\n {/* Honeypot */}\n <input\n type=\"text\"\n name=\"_hp\"\n tabIndex={-1}\n autoComplete=\"off\"\n aria-hidden=\"true\"\n className=\"hidden\"\n />\n\n <div className=\"grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2\">\n {/* First name */}\n <div>\n <Label htmlFor=\"contact-first\" className=\"block text-sm/6 font-semibold\">\n First name\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-first\"\n name=\"firstName\"\n autoComplete=\"given-name\"\n placeholder=\"First\"\n required\n />\n </div>\n </div>\n\n {/* Last name */}\n <div>\n <Label htmlFor=\"contact-last\" className=\"block text-sm/6 font-semibold\">\n Last name\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-last\"\n name=\"lastName\"\n autoComplete=\"family-name\"\n placeholder=\"Last\"\n required\n />\n </div>\n </div>\n\n {/* Company */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-company\" className=\"block text-sm/6 font-semibold\">\n Company{' '}\n <span className=\"font-normal text-muted-foreground\">(optional)</span>\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-company\"\n name=\"company\"\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n />\n </div>\n </div>\n\n {/* Email */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-email\" className=\"block text-sm/6 font-semibold\">\n Email\n </Label>\n <div className=\"mt-2.5\">\n <Input\n id=\"contact-email\"\n name=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@company.com\"\n required\n />\n </div>\n </div>\n\n {/* Phone */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-phone\" className=\"block text-sm/6 font-semibold\">\n Phone number{' '}\n <span className=\"font-normal text-muted-foreground\">(optional)</span>\n </Label>\n <div className=\"mt-2.5 flex overflow-hidden rounded-md border border-input bg-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\">\n <div className=\"relative flex shrink-0 items-center border-r border-input\">\n <select\n name=\"countryCode\"\n aria-label=\"Country code\"\n defaultValue=\"+1-US\"\n className=\"h-full appearance-none bg-transparent py-2 pl-3 pr-7 text-sm text-foreground focus:outline-none\"\n >\n {PHONE_PREFIXES.map(({ label, value }) => (\n <option key={value} value={value}>\n {label}\n </option>\n ))}\n </select>\n <ChevronDown className=\"pointer-events-none absolute right-1.5 size-3.5 shrink-0 text-muted-foreground\" />\n </div>\n <input\n id=\"contact-phone\"\n name=\"phone\"\n type=\"tel\"\n placeholder=\"123-456-7890\"\n className=\"min-w-0 grow bg-transparent px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none\"\n />\n </div>\n </div>\n\n {/* Message */}\n <div className=\"sm:col-span-2\">\n <Label htmlFor=\"contact-message\" className=\"block text-sm/6 font-semibold\">\n Message\n </Label>\n <div className=\"mt-2.5\">\n <Textarea\n id=\"contact-message\"\n name=\"message\"\n rows={4}\n placeholder=\"Tell us what you're working on...\"\n className=\"resize-none\"\n required\n />\n </div>\n </div>\n\n {/* Privacy toggle */}\n {privacyHref && (\n <div className=\"flex gap-x-4 sm:col-span-2\">\n <div className=\"flex h-6 items-center\">\n <div className=\"group relative inline-flex h-5 w-8 shrink-0 cursor-pointer rounded-full border border-input bg-muted p-px transition-colors duration-200 ease-in-out focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 has-[:checked]:border-primary has-[:checked]:bg-primary\">\n <span className=\"size-4 rounded-full bg-background shadow-sm transition-transform duration-200 ease-in-out group-has-[:checked]:translate-x-3\" />\n <input\n id=\"contact-privacy\"\n name=\"privacy\"\n type=\"checkbox\"\n required\n aria-label=\"Agree to privacy policy\"\n className=\"absolute inset-0 size-full cursor-pointer appearance-none focus:outline-none\"\n />\n </div>\n </div>\n <Label\n htmlFor=\"contact-privacy\"\n className=\"cursor-pointer text-sm font-normal leading-snug text-muted-foreground\"\n >\n By selecting this, you agree to our{' '}\n <a\n href={privacyHref}\n className=\"font-medium text-foreground underline-offset-2 hover:underline\"\n >\n privacy policy\n </a>\n .\n </Label>\n </div>\n )}\n </div>\n\n <div className=\"mt-10\">\n <Button type=\"submit\" className=\"w-full\">\n Let's talk\n <Send className=\"ml-2 size-4\" />\n </Button>\n </div>\n </form>\n )}\n\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface ComparisonColumn {\n label: string;\n cost: string;\n costDetail?: string;\n items: string[];\n highlighted?: boolean;\n}\n\nexport interface ComparisonSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n columns: ComparisonColumn[];\n}\n\nexport function ComparisonSection({\n badge = 'The math',\n title = 'The math is simple',\n description,\n columns,\n}: ComparisonSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <StaggerChildren className=\"mt-12 grid gap-4 sm:grid-cols-3\">\n {columns.map((col) => (\n <div\n key={col.label}\n className={cn(\n 'flex h-full flex-col rounded-2xl border p-6',\n col.highlighted\n ? 'border-primary bg-primary/10 ring-1 ring-primary/20'\n : 'border-border bg-muted/40',\n )}\n >\n <div className=\"mb-6\">\n <p\n className={cn(\n 'text-xs font-semibold uppercase tracking-widest',\n col.highlighted ? 'text-primary/80' : 'text-muted-foreground',\n )}\n >\n {col.label}\n </p>\n <p className=\"mt-2 text-2xl font-bold tracking-tight text-foreground\">\n {col.cost}\n </p>\n {col.costDetail && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {col.costDetail}\n </p>\n )}\n </div>\n\n <ul className=\"flex flex-col gap-3\">\n {col.items.map((item) => (\n <li key={item} className=\"flex items-start gap-2.5\">\n {col.highlighted ? (\n <span className=\"mt-0.5 shrink-0 text-sm leading-none\">⚡</span>\n ) : (\n <span className=\"mt-0.5 shrink-0 text-sm leading-none\">❌</span>\n )}\n <span\n className={cn(\n 'text-sm leading-snug',\n col.highlighted ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {item}\n </span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Check, X } from 'lucide-react';\nimport { cn, useUIVariant } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface QualificationItem {\n text: string;\n}\n\nexport interface QualificationColumn {\n heading: string;\n variant: 'positive' | 'negative';\n items: string[];\n}\n\nexport interface QualificationSectionProps {\n badge?: string;\n title?: string;\n description?: string;\n columns: [QualificationColumn, QualificationColumn];\n}\n\nexport function QualificationSection({\n badge = 'Who it is for',\n title = 'Is this for you?',\n description,\n columns,\n}: QualificationSectionProps) {\n const mode = useUIVariant();\n const sectionClasses = cn(\n 'overflow-hidden bg-card',\n mode === 'smooth' && 'rounded-3xl border',\n mode === 'playful' && 'rounded-2xl border-primary/25 border',\n !mode && 'rounded-2xl border',\n );\n\n return (\n <section className={sectionClasses}>\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle badge={badge} title={title} description={description} />\n\n <FadeIn direction=\"up\" className=\"mt-12 grid gap-6 sm:grid-cols-2\">\n {columns.map((col) => {\n const isPositive = col.variant === 'positive';\n const Icon = isPositive ? Check : X;\n\n return (\n <div\n key={col.heading}\n className={cn(\n 'flex flex-col gap-4 rounded-2xl border p-6',\n isPositive ? 'border-border bg-muted/30' : 'border-border bg-muted/10',\n )}\n >\n <h3 className=\"text-sm font-semibold uppercase tracking-widest text-muted-foreground\">\n {col.heading}\n </h3>\n <ul className=\"flex flex-col gap-3\">\n {col.items.map((item) => (\n <li key={item} className=\"flex items-start gap-3\">\n <span\n className={cn(\n 'mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full',\n isPositive\n ? 'bg-emerald-500/15 text-emerald-600 dark:text-emerald-400'\n : 'bg-rose-500/15 text-rose-600 dark:text-rose-400',\n )}\n >\n <Icon className=\"size-3\" />\n </span>\n <span className=\"text-sm leading-relaxed text-foreground/80\">{item}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </FadeIn>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Menu } from 'lucide-react';\nimport { Button, Separator, Sheet, SheetContent, SheetTrigger } from '@olwiba/cn';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface NavbarProps {\n brand: { name: string; logo?: React.ReactNode; href?: string };\n navLinks: Array<{ label: string; href: string }>;\n cta?: {\n primary?: { label: string; href: string };\n secondary?: { label: string; href: string };\n };\n /** Icon-button controls rendered right-of-nav, left-of-CTA. Pass e.g. ModeSwitchMinimal, ThemeSwitchMinimal. */\n controls?: React.ReactNode[];\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function Navbar({\n brand,\n navLinks,\n cta,\n controls,\n renderLink = defaultRenderLink,\n}: NavbarProps) {\n const [open, setOpen] = React.useState(false);\n const brandHref = brand.href ?? '/';\n const hasRightContent = controls?.length || cta?.primary || cta?.secondary;\n const closeMobileMenu = React.useCallback(() => setOpen(false), []);\n\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <nav className=\"grid h-16 grid-cols-[1fr_auto_1fr] items-center px-6\">\n {/* Brand — left column */}\n {renderLink({\n href: brandHref,\n children: (\n <span className=\"flex items-center gap-2 font-semibold\">\n {brand.logo}\n <span>{brand.name}</span>\n </span>\n ),\n })}\n\n {/* Desktop nav links — center column when right content exists, else shift right */}\n <div className={`hidden items-center gap-1 md:flex ${!hasRightContent ? 'col-span-2 justify-end' : ''}`}>\n {navLinks.map((link) => (\n <span key={link.label}>\n {renderLink({\n href: link.href,\n className: 'rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground',\n children: link.label,\n })}\n </span>\n ))}\n </div>\n\n {/* Desktop right — controls + CTA */}\n {hasRightContent && (\n <div className=\"hidden items-center justify-end gap-2 md:flex\">\n {controls?.map((control, i) => (\n <React.Fragment key={i}>{control}</React.Fragment>\n ))}\n {(cta?.secondary || cta?.primary) && controls?.length ? (\n <div className=\"mx-1 h-4 w-px bg-border\" />\n ) : null}\n {cta?.secondary &&\n renderLink({\n href: cta.secondary.href,\n children: <Button variant=\"ghost\" size=\"sm\">{cta.secondary.label}</Button>,\n })}\n {cta?.primary &&\n renderLink({\n href: cta.primary.href,\n children: <Button size=\"sm\">{cta.primary.label}</Button>,\n })}\n </div>\n )}\n\n {/* Mobile drawer — trigger on the right, panel slides in from the left */}\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"col-start-3 justify-self-end md:hidden\">\n <Menu className=\"size-5\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-72\">\n {/* Brand row alone at the top — leaves the top-right corner to the built-in close */}\n <div className=\"flex items-center pb-4\">\n <span onClickCapture={closeMobileMenu} className=\"cursor-pointer\">\n {renderLink({\n href: brandHref,\n children: (\n <span className=\"flex items-center gap-2 font-semibold\">\n {brand.logo}\n <span>{brand.name}</span>\n </span>\n ),\n })}\n </span>\n </div>\n {controls?.length ? (\n <div className=\"mb-4 flex w-full items-center justify-between gap-1\">\n {controls.map((control, i) => (\n <React.Fragment key={i}>{control}</React.Fragment>\n ))}\n </div>\n ) : null}\n <Separator />\n <nav className=\"mt-4 flex flex-col gap-1\">\n {navLinks.map((link) => (\n <span key={link.label} onClickCapture={closeMobileMenu}>\n {renderLink({\n href: link.href,\n className: 'block rounded-md px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground',\n children: link.label,\n })}\n </span>\n ))}\n </nav>\n <div className=\"mt-6 flex flex-col gap-2\">\n {cta?.secondary && (\n <span onClickCapture={closeMobileMenu}>\n {renderLink({\n href: cta.secondary.href,\n children: <Button variant=\"outline\" className=\"w-full\">{cta.secondary.label}</Button>,\n })}\n </span>\n )}\n {cta?.primary && (\n <span onClickCapture={closeMobileMenu}>\n {renderLink({\n href: cta.primary.href,\n children: <Button className=\"w-full\">{cta.primary.label}</Button>,\n })}\n </span>\n )}\n </div>\n </SheetContent>\n </Sheet>\n </nav>\n </section>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { StatusIndicator } from '@olwiba/cn';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface FooterProps {\n brand: { name: string; logo?: ReactNode; href?: string };\n navLinks?: Array<{ label: string; href: string }>;\n socialLinks?: Array<{ label: string; href: string; icon: ReactNode }>;\n legal?: string;\n status?: { label: string; operational?: boolean };\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function Footer({\n brand,\n navLinks,\n socialLinks,\n legal,\n status,\n renderLink = defaultRenderLink,\n}: FooterProps) {\n const brandHref = brand.href ?? '/';\n const copyrightText = legal ?? `\\u00A9 ${new Date().getFullYear()} ${brand.name}. All rights reserved.`;\n\n return (\n <footer className=\"overflow-hidden rounded-2xl border bg-card text-foreground\">\n <div className=\"mx-auto max-w-7xl px-6 py-20 sm:py-24 lg:px-8\">\n {/* Brand */}\n <div className=\"flex justify-center\">\n {renderLink({\n href: brandHref,\n className: 'flex items-center gap-2',\n children: (\n <>\n {brand.logo}\n <span className=\"text-lg font-semibold text-foreground\">{brand.name}</span>\n </>\n ),\n })}\n </div>\n\n {/* Nav links */}\n {navLinks && navLinks.length > 0 && (\n <nav className=\"mt-10 flex flex-wrap justify-center gap-x-12 gap-y-3\" aria-label=\"Footer\">\n {navLinks.map(({ label, href }) => (\n <div key={label}>\n {renderLink({\n href,\n className: 'text-sm/6 text-muted-foreground transition-colors hover:text-foreground',\n children: label,\n })}\n </div>\n ))}\n </nav>\n )}\n\n {/* Social icons */}\n {socialLinks && socialLinks.length > 0 && (\n <div className=\"mt-10 flex justify-center gap-x-10\">\n {socialLinks.map(({ label, href, icon }) => (\n <a\n key={label}\n href={href}\n aria-label={label}\n className=\"text-muted-foreground transition-colors hover:text-foreground\"\n >\n {icon}\n </a>\n ))}\n </div>\n )}\n\n {/* Copyright */}\n <p className=\"mt-10 text-center text-sm/6 text-muted-foreground/70\">\n {copyrightText}\n </p>\n\n {/* Status */}\n {status && (\n <div className=\"mt-4 flex justify-center\">\n <div className=\"inline-flex items-center rounded-full border bg-muted/40 px-3 py-1 text-xs text-muted-foreground\">\n <StatusIndicator\n pulse={status.operational !== false}\n dotClassName={status.operational !== false ? 'text-emerald-500' : 'text-destructive'}\n size=\"sm\"\n >\n {status.label}\n </StatusIndicator>\n </div>\n </div>\n )}\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface LogoStripProps {\n logos: Array<{ src: string; darkSrc?: string; alt: string; href?: string }>;\n label?: string;\n speed?: 'slow' | 'normal' | 'fast';\n}\n\nconst speedDuration = {\n slow: '60s',\n normal: '40s',\n fast: '25s',\n} as const;\n\nexport function LogoStrip({\n logos,\n label,\n speed = 'normal',\n}: LogoStripProps) {\n const duration = speedDuration[speed];\n\n return (\n <FadeIn direction=\"up\">\n <section className=\"overflow-hidden py-8\">\n {label && (\n <p className=\"mb-6 text-center text-sm text-muted-foreground\">{label}</p>\n )}\n <div\n className=\"relative\"\n style={{\n maskImage: 'linear-gradient(to right, transparent, black 10%, black 90%, transparent)',\n WebkitMaskImage: 'linear-gradient(to right, transparent, black 10%, black 90%, transparent)',\n }}\n >\n <div\n className=\"flex w-max gap-12\"\n style={{\n animation: `logo-strip-scroll ${duration} linear infinite`,\n }}\n >\n {/* Render logos twice for seamless loop */}\n {[...logos, ...logos].map((logo, i) => {\n const img = logo.darkSrc ? (\n <>\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0 dark:hidden\"\n />\n <img\n src={logo.darkSrc}\n alt={logo.alt}\n className=\"hidden h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0 dark:block\"\n />\n </>\n ) : (\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0\"\n />\n );\n\n return logo.href ? (\n <a\n key={`${logo.alt}-${i}`}\n href={logo.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex shrink-0 items-center\"\n >\n {img}\n </a>\n ) : (\n <div key={`${logo.alt}-${i}`} className=\"flex shrink-0 items-center\">\n {img}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n\n <style>{`\n @keyframes logo-strip-scroll {\n from { transform: translateX(0); }\n to { transform: translateX(-50%); }\n }\n `}</style>\n </FadeIn>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\n// ─── Grid ─────────────────────────────────────────────────────────────────────\n\ninterface GridUnderlayProps extends React.SVGAttributes<SVGElement> {\n variant: 'dots' | 'lines' | 'cross';\n size?: number;\n className?: string;\n}\n\nfunction GridUnderlay({ variant, size = 24, className, ...props }: GridUnderlayProps) {\n const id = React.useId();\n\n const pattern =\n variant === 'dots' ? (\n <circle cx={size / 2} cy={size / 2} r={1} fill=\"currentColor\" />\n ) : variant === 'lines' ? (\n <path d={`M ${size} 0 L 0 0 0 ${size}`} fill=\"none\" stroke=\"currentColor\" strokeWidth={0.5} />\n ) : (\n <>\n <line x1={size / 2} y1={0} x2={size / 2} y2={size} stroke=\"currentColor\" strokeWidth={0.5} />\n <line x1={0} y1={size / 2} x2={size} y2={size / 2} stroke=\"currentColor\" strokeWidth={0.5} />\n </>\n );\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full text-foreground/15', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={size} height={size} patternUnits=\"userSpaceOnUse\">\n {pattern}\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </svg>\n );\n}\n\n// ─── Glow ─────────────────────────────────────────────────────────────────────\n\nconst blurClass = { sm: 'blur-xl', md: 'blur-2xl', lg: 'blur-3xl', xl: 'blur-[80px]' } as const;\n\ninterface GlowUnderlayProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: number;\n color?: string;\n followCursor?: boolean;\n blur?: keyof typeof blurClass;\n}\n\nfunction GlowUnderlay({\n size = 400,\n color = 'color-mix(in oklch, var(--primary) 45%, transparent)',\n followCursor = false,\n blur = 'lg',\n className,\n style,\n ...props\n}: GlowUnderlayProps) {\n const [pos, setPos] = React.useState({ x: '50%', y: '50%' });\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!followCursor) return;\n const handleMouseMove = (e: MouseEvent) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPos({ x: `${e.clientX - rect.left}px`, y: `${e.clientY - rect.top}px` });\n };\n window.addEventListener('mousemove', handleMouseMove);\n return () => window.removeEventListener('mousemove', handleMouseMove);\n }, [followCursor]);\n\n return (\n <div ref={containerRef} className={cn('pointer-events-none absolute inset-0 overflow-hidden', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className={cn('absolute rounded-full', blurClass[blur])}\n style={{\n width: size,\n height: size,\n background: color,\n left: pos.x,\n top: pos.y,\n transform: 'translate(-50%, -50%)',\n ...style,\n }}\n />\n </div>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\ntype UnderlayVariant = 'dots' | 'lines' | 'cross' | 'glow';\n\ntype UnderlayProps =\n | ({ variant: 'dots' | 'lines' | 'cross' } & Omit<GridUnderlayProps, 'variant'>)\n | ({ variant: 'glow' } & Omit<GlowUnderlayProps, 'variant'>);\n\nexport function Underlay(props: UnderlayProps) {\n if (props.variant === 'glow') {\n return <GlowUnderlay {...(props as GlowUnderlayProps)} />;\n }\n return <GridUnderlay {...(props as GridUnderlayProps)} />;\n}\n\nexport type { UnderlayProps, UnderlayVariant };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\nimport { Loader2 } from 'lucide-react';\n\n// ─── Dim ──────────────────────────────────────────────────────────────────────\n\ninterface DimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n opacity?: number;\n}\n\nfunction DimOverlay({ opacity = 0.5, className, style, ...props }: DimOverlayProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('absolute inset-0 bg-background', className)}\n style={{ opacity, ...style }}\n {...props}\n />\n );\n}\n\n// ─── Scrim ────────────────────────────────────────────────────────────────────\n\ntype ScrimDirection = 'top' | 'bottom' | 'left' | 'right';\n\ninterface ScrimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: ScrimDirection;\n color?: string;\n}\n\nconst scrimGradients: Record<ScrimDirection, string> = {\n bottom: 'to bottom',\n top: 'to top',\n left: 'to left',\n right: 'to right',\n};\n\nfunction ScrimOverlay({ direction = 'bottom', color = 'var(--background)', className, style, ...props }: ScrimOverlayProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-x-0 bottom-0 h-1/2', className)}\n style={{\n background: `linear-gradient(${scrimGradients[direction]}, transparent, ${color})`,\n ...style,\n }}\n {...props}\n />\n );\n}\n\n// ─── Loading ──────────────────────────────────────────────────────────────────\n\ninterface LoadingOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nfunction LoadingOverlay({ label, className, ...props }: LoadingOverlayProps) {\n return (\n <div\n role=\"status\"\n className={cn('absolute inset-0 flex flex-col items-center justify-center gap-2 bg-background/80 backdrop-blur-sm', className)}\n {...props}\n >\n <Loader2 className=\"size-5 animate-spin text-muted-foreground\" />\n {label && <p className=\"text-xs text-muted-foreground\">{label}</p>}\n </div>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\ntype OverlayVariant = 'dim' | 'scrim' | 'loading';\n\ntype OverlayProps =\n | ({ variant: 'dim' } & DimOverlayProps)\n | ({ variant: 'scrim' } & ScrimOverlayProps)\n | ({ variant: 'loading' } & LoadingOverlayProps);\n\nexport function Overlay(props: OverlayProps) {\n if (props.variant === 'dim') return <DimOverlay {...(props as DimOverlayProps)} />;\n if (props.variant === 'scrim') return <ScrimOverlay {...(props as ScrimOverlayProps)} />;\n return <LoadingOverlay {...(props as LoadingOverlayProps)} />;\n}\n\nexport type { OverlayProps, OverlayVariant };\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface AnimatedPillProps {\n labels: string[];\n interval?: number;\n className?: string;\n}\n\nexport function AnimatedPill({ labels, interval = 3800, className }: AnimatedPillProps) {\n const pillRef = useRef<HTMLSpanElement>(null);\n const textRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n const pill = pillRef.current;\n const text = textRef.current;\n if (!pill || !text || labels.length < 2) return;\n\n pill.style.width = pill.offsetWidth + 'px';\n pill.dataset.w = String(pill.offsetWidth);\n\n let idx = 0;\n\n const cycle = () => {\n idx = (idx + 1) % labels.length;\n\n text.style.transition = 'opacity 140ms ease';\n text.style.opacity = '0';\n\n setTimeout(() => {\n text.textContent = labels[idx] ?? '';\n\n const oldW = parseFloat(pill.dataset.w ?? '0');\n pill.style.transition = 'none';\n pill.style.width = 'auto';\n const newW = pill.offsetWidth;\n\n pill.style.width = oldW + 'px';\n void pill.offsetWidth;\n\n pill.style.transition = 'width 280ms cubic-bezier(0.4, 0, 0.2, 1)';\n pill.style.width = newW + 'px';\n pill.dataset.w = String(newW);\n\n setTimeout(() => {\n text.style.transition = 'opacity 140ms ease';\n text.style.opacity = '1';\n }, 260);\n }, 150);\n };\n\n const id = setInterval(cycle, interval);\n return () => clearInterval(id);\n }, [labels, interval]);\n\n if (!labels.length) return null;\n\n return (\n <span\n ref={pillRef}\n className={cn(\n 'inline-flex items-center overflow-hidden whitespace-nowrap rounded-full border bg-secondary px-2.5 py-0.5 text-xs font-semibold text-secondary-foreground',\n className,\n )}\n >\n <span ref={textRef}>{labels[0]}</span>\n </span>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface PageTransitionProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'fade' | 'slide-up' | 'slide-down';\n duration?: number;\n children: React.ReactNode;\n}\n\nexport function PageTransition({\n variant = 'fade',\n duration = 300,\n children,\n className,\n style,\n ...props\n}: PageTransitionProps) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n const id = requestAnimationFrame(() => setMounted(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n const initial: React.CSSProperties =\n variant === 'slide-up'\n ? { opacity: 0, transform: 'translateY(16px)' }\n : variant === 'slide-down'\n ? { opacity: 0, transform: 'translateY(-16px)' }\n : { opacity: 0 };\n\n const entered: React.CSSProperties = { opacity: 1, transform: 'translateY(0)' };\n\n return (\n <div\n className={cn(className)}\n style={{\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n ...(mounted ? entered : initial),\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n arrayMove,\n horizontalListSortingStrategy,\n rectSortingStrategy,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { cn } from '@olwiba/cn';\n\nexport interface SortableProps {\n /** Item ids in render order — one per child, same order as `children`. */\n items: string[];\n /** Fired with the new id order after a drag completes. */\n onReorder: (items: string[]) => void;\n /** One element per id — pairing is by position, so keep orders aligned. */\n children: React.ReactNode;\n /** Layout of the sortable collection. @default 'vertical' */\n direction?: 'vertical' | 'horizontal' | 'grid';\n disabled?: boolean;\n className?: string;\n itemClassName?: string;\n}\n\nconst strategies = {\n vertical: verticalListSortingStrategy,\n horizontal: horizontalListSortingStrategy,\n grid: rectSortingStrategy,\n} as const;\n\nconst containerClasses = {\n vertical: 'flex flex-col gap-2',\n horizontal: 'flex gap-2',\n grid: 'grid gap-2',\n} as const;\n\nfunction SortableItem({\n id,\n disabled,\n className,\n children,\n}: {\n id: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id, disabled });\n\n return (\n <div\n ref={setNodeRef}\n style={{ transform: CSS.Transform.toString(transform), transition }}\n className={cn(\n 'touch-none',\n !disabled && 'cursor-grab active:cursor-grabbing',\n isDragging && 'relative z-10 opacity-80',\n className,\n )}\n {...attributes}\n {...listeners}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Drag-to-reorder behavior — wraps any children and makes them sortable by\n * pointer or keyboard. A mechanic, not a list component: feed it cards, rows,\n * or tiles. Controlled: pass `items` (ids in order) and apply the new order\n * in `onReorder`.\n */\nexport function Sortable({\n items,\n onReorder,\n children,\n direction = 'vertical',\n disabled,\n className,\n itemClassName,\n}: SortableProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const oldIndex = items.indexOf(String(active.id));\n const newIndex = items.indexOf(String(over.id));\n if (oldIndex === -1 || newIndex === -1) return;\n onReorder(arrayMove(items, oldIndex, newIndex));\n };\n\n const childArray = React.Children.toArray(children);\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={items} strategy={strategies[direction]}>\n <div className={cn(containerClasses[direction], className)}>\n {childArray.map((child, i) =>\n items[i] === undefined ? null : (\n <SortableItem key={items[i]} id={items[i]} disabled={disabled} className={itemClassName}>\n {child}\n </SortableItem>\n ),\n )}\n </div>\n </SortableContext>\n </DndContext>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Search } from 'lucide-react';\nimport {\n Badge,\n Button,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n cn,\n} from '@olwiba/cn';\n\nexport interface SpotlightItem {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n onSelect: () => void;\n}\n\nexport interface SpotlightGroup {\n heading: string;\n items: SpotlightItem[];\n}\n\nexport interface SpotlightProps {\n groups: SpotlightGroup[];\n placeholder?: string;\n trigger?: React.ReactNode;\n triggerClassName?: string;\n shortcut?: string;\n}\n\nexport function Spotlight({\n groups,\n placeholder = 'Search anything...',\n trigger,\n triggerClassName,\n shortcut = '⌘K',\n}: SpotlightProps) {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((v) => !v);\n }\n };\n document.addEventListener('keydown', down);\n return () => document.removeEventListener('keydown', down);\n }, []);\n\n return (\n <>\n {trigger ? (\n <div onClick={() => setOpen(true)}>{trigger}</div>\n ) : (\n <Button\n variant=\"outline\"\n onClick={() => setOpen(true)}\n className={cn('w-64 justify-between text-muted-foreground', triggerClassName)}\n >\n <span className=\"flex items-center gap-2\">\n <Search className=\"size-4\" />\n {placeholder}\n </span>\n <Badge variant=\"secondary\" className=\"font-mono text-xs\">{shortcut}</Badge>\n </Button>\n )}\n\n <CommandDialog open={open} onOpenChange={setOpen}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n {groups.map((group, i) => (\n <React.Fragment key={group.heading}>\n {i > 0 && <CommandSeparator />}\n <CommandGroup heading={group.heading}>\n {group.items.map((item) => (\n <CommandItem\n key={item.id}\n onSelect={() => { item.onSelect(); setOpen(false); }}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.description && (\n <span className=\"ml-2 text-xs text-muted-foreground\">{item.description}</span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n </React.Fragment>\n ))}\n </CommandList>\n </CommandDialog>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, cn } from '@olwiba/cn';\n\nexport interface DockItem {\n icon: LucideIcon;\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface DockProps extends React.HTMLAttributes<HTMLDivElement> {\n items: DockItem[];\n iconSize?: number;\n magnification?: number;\n}\n\nconst BASE = 40;\nconst MAGNIFY_RADIUS = 80;\n\nexport function Dock({ items, iconSize = BASE, magnification = 1.7, className, ...props }: DockProps) {\n const [mouseX, setMouseX] = React.useState<number | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n function getScale(index: number): number {\n if (mouseX === null || !containerRef.current) return 1;\n const container = containerRef.current;\n const buttons = container.querySelectorAll<HTMLElement>('[data-dock-item]');\n const btn = buttons[index];\n if (!btn) return 1;\n const rect = btn.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const distance = Math.abs(mouseX - centerX);\n if (distance > MAGNIFY_RADIUS) return 1;\n const t = 1 - distance / MAGNIFY_RADIUS;\n return 1 + (magnification - 1) * t;\n }\n\n return (\n <TooltipProvider delayDuration={0}>\n <div\n ref={containerRef}\n onMouseMove={(e) => setMouseX(e.clientX)}\n onMouseLeave={() => setMouseX(null)}\n className={cn(\n 'inline-flex items-end gap-2 rounded-2xl border bg-background/80 px-4 py-3 shadow-lg backdrop-blur-md',\n className,\n )}\n {...props}\n >\n {items.map((item, i) => {\n const scale = getScale(i);\n const size = iconSize * scale;\n\n const button = (\n <Tooltip key={item.label}>\n <TooltipTrigger asChild>\n <button\n data-dock-item\n onClick={item.onClick}\n className=\"flex items-center justify-center rounded-xl bg-muted text-foreground transition-colors hover:bg-accent\"\n style={{\n width: size,\n height: size,\n transition: 'width 100ms ease, height 100ms ease',\n transformOrigin: 'bottom center',\n }}\n aria-label={item.label}\n >\n <item.icon style={{ width: size * 0.5, height: size * 0.5 }} />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\" sideOffset={8}>\n <p>{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n\n if (item.href) {\n return (\n <a key={item.label} href={item.href}>\n {button}\n </a>\n );\n }\n\n return button;\n })}\n </div>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n ContextMenu as RadixContextMenu,\n} from '@olwiba/cn';\n\nexport interface ContextMenuAction {\n type: 'item';\n label: string;\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void;\n}\n\nexport interface ContextMenuSeparatorDef {\n type: 'separator';\n}\n\nexport interface ContextMenuLabelDef {\n type: 'label';\n label: string;\n}\n\nexport interface ContextMenuSubDef {\n type: 'sub';\n label: string;\n items: ContextMenuDef[];\n}\n\nexport type ContextMenuDef = ContextMenuAction | ContextMenuSeparatorDef | ContextMenuLabelDef | ContextMenuSubDef;\n\nexport interface ContextMenuProps {\n items: ContextMenuDef[];\n children: React.ReactNode;\n}\n\nfunction renderItems(items: ContextMenuDef[]) {\n return items.map((item, i) => {\n if (item.type === 'separator') return <ContextMenuSeparator key={i} />;\n if (item.type === 'label') return <ContextMenuLabel key={i}>{item.label}</ContextMenuLabel>;\n if (item.type === 'sub') {\n return (\n <ContextMenuSub key={i}>\n <ContextMenuSubTrigger>{item.label}</ContextMenuSubTrigger>\n <ContextMenuSubContent>{renderItems(item.items)}</ContextMenuSubContent>\n </ContextMenuSub>\n );\n }\n return (\n <ContextMenuItem key={i} disabled={item.disabled} onSelect={item.onSelect}>\n {item.label}\n {item.shortcut && <ContextMenuShortcut>{item.shortcut}</ContextMenuShortcut>}\n </ContextMenuItem>\n );\n });\n}\n\nexport function ContextMenu({ items, children }: ContextMenuProps) {\n return (\n <RadixContextMenu>\n <ContextMenuTrigger asChild>{children}</ContextMenuTrigger>\n <ContextMenuContent>\n {renderItems(items)}\n </ContextMenuContent>\n </RadixContextMenu>\n );\n}\n\nexport {\n ContextMenuCheckboxItem,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n};\n","'use client';\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@olwiba/cn';\nimport type { UseConfirmReturn } from '../hooks/use-confirm';\n\nexport interface ConfirmDialogProps extends Pick<UseConfirmReturn, 'isOpen' | 'options' | 'handleConfirm' | 'handleCancel'> {\n destructive?: boolean;\n}\n\nexport function ConfirmDialog({ isOpen, options, handleConfirm, handleCancel, destructive = false }: ConfirmDialogProps) {\n return (\n <AlertDialog open={isOpen} onOpenChange={(open) => { if (!open) handleCancel(); }}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{options.title ?? 'Are you sure?'}</AlertDialogTitle>\n {options.description && (\n <AlertDialogDescription>{options.description}</AlertDialogDescription>\n )}\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancel}>\n {options.cancelLabel ?? 'Cancel'}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleConfirm}\n className={destructive ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90' : undefined}\n >\n {options.confirmLabel ?? 'Confirm'}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface Hotkey {\n key: string;\n ctrl?: boolean;\n meta?: boolean;\n shift?: boolean;\n alt?: boolean;\n handler: () => void;\n description?: string;\n}\n\ninterface RegisterHotkeysProps {\n hotkeys: Hotkey[];\n}\n\nexport function RegisterHotkeys({ hotkeys }: RegisterHotkeysProps) {\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n for (const hotkey of hotkeys) {\n const matches =\n event.key.toLowerCase() === hotkey.key.toLowerCase() &&\n !!event.ctrlKey === !!hotkey.ctrl &&\n !!event.metaKey === !!hotkey.meta &&\n !!event.shiftKey === !!hotkey.shift &&\n !!event.altKey === !!hotkey.alt;\n\n if (matches) {\n event.preventDefault();\n hotkey.handler();\n break;\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkeys]);\n\n return null;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface UseControlledOpenReturn {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\n/**\n * Simple open/close state hook for modals, drawers, dropdowns, and any toggleable UI.\n *\n * @example\n * const { isOpen, open, close } = useControlledOpen();\n * return (\n * <>\n * <Button onClick={open}>Open</Button>\n * <Dialog open={isOpen} onOpenChange={setIsOpen}>...</Dialog>\n * </>\n * );\n */\nexport function useControlledOpen(defaultOpen = false): UseControlledOpenReturn {\n const [isOpen, setIsOpen] = React.useState(defaultOpen);\n\n const open = React.useCallback(() => setIsOpen(true), []);\n const close = React.useCallback(() => setIsOpen(false), []);\n const toggle = React.useCallback(() => setIsOpen((prev) => !prev), []);\n\n return { isOpen, open, close, toggle, setIsOpen };\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '@olwiba/cn';\nimport { RegisterHotkeys } from './RegisterHotkeys';\nimport { useControlledOpen } from '../hooks/use-controlled-open';\n\nexport interface CommandMenuItem {\n id: string;\n label: string;\n icon?: LucideIcon;\n shortcut?: string;\n keywords?: string[];\n onSelect: () => void;\n}\n\nexport interface CommandMenuGroup {\n heading: string;\n items: CommandMenuItem[];\n}\n\nexport interface CommandMenuProps {\n groups: CommandMenuGroup[];\n placeholder?: string;\n emptyMessage?: string;\n /** Controlled open state — omit to let the component manage it internally. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Registers Cmd+K (mac) / Ctrl+K (win) to toggle the palette. @default true */\n hotkey?: boolean;\n}\n\n/**\n * Global search / Cmd+K command palette. One component — pass different\n * `groups` per surface rather than building a bespoke dialog each time.\n */\nexport function CommandMenu({\n groups,\n placeholder = 'Type a command or search…',\n emptyMessage = 'No results found.',\n open: openProp,\n onOpenChange,\n hotkey = true,\n}: CommandMenuProps) {\n const internal = useControlledOpen(false);\n const isOpen = openProp ?? internal.isOpen;\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (openProp === undefined) internal.setIsOpen(next);\n onOpenChange?.(next);\n },\n [openProp, onOpenChange, internal.setIsOpen],\n );\n\n const runItem = (item: CommandMenuItem) => {\n setOpen(false);\n item.onSelect();\n };\n\n return (\n <>\n {hotkey && (\n <RegisterHotkeys\n hotkeys={[\n { key: 'k', meta: true, handler: () => setOpen(!isOpen) },\n { key: 'k', ctrl: true, handler: () => setOpen(!isOpen) },\n ]}\n />\n )}\n <CommandDialog open={isOpen} onOpenChange={setOpen}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n {groups.map((group, i) => (\n <React.Fragment key={group.heading}>\n {i > 0 && <CommandSeparator />}\n <CommandGroup heading={group.heading}>\n {group.items.map((item) => (\n <CommandItem\n key={item.id}\n value={[item.label, ...(item.keywords ?? [])].join(' ')}\n onSelect={() => runItem(item)}\n >\n {item.icon && <item.icon />}\n <span>{item.label}</span>\n {item.shortcut && <CommandShortcut>{item.shortcut}</CommandShortcut>}\n </CommandItem>\n ))}\n </CommandGroup>\n </React.Fragment>\n ))}\n </CommandList>\n </CommandDialog>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { cn } from '@olwiba/cn';\nimport { AppGrid, type AppGridColumns } from '../layout/AppGrid';\nimport { DataTable } from '../components/DataTable';\nimport type { ViewMode } from '../hooks/use-view-mode';\n\nexport interface DataViewProps<TData> {\n items: TData[];\n /** Stable key per item. */\n getRowId: (item: TData) => string;\n /** Card renderer for the grid view. */\n renderCard: (item: TData) => React.ReactNode;\n /** Columns for the list view. */\n columns: ColumnDef<TData>[];\n view: ViewMode;\n /**\n * False while a persisted preference is still being read. The whole view is\n * withheld until true — see the note on the component.\n */\n ready?: boolean;\n /** Grid density at the widest breakpoint. Default 3. */\n gridColumns?: AppGridColumns;\n gap?: 'none' | 'sm' | 'md' | 'lg';\n /** Rendered instead of either view when there is nothing to show. */\n empty?: React.ReactNode;\n /** Shown while `ready` is false. Defaults to nothing. */\n placeholder?: React.ReactNode;\n searchKey?: string;\n searchPlaceholder?: string;\n pageSize?: number;\n emptyMessage?: string;\n onRowClick?: (row: TData) => void;\n className?: string;\n}\n\n/**\n * A collection rendered either as a grid of cards or as a table, from one set\n * of data.\n *\n * Knows nothing about what it is listing: callers supply a card renderer and\n * table columns. Cards are for \"what arrived recently\", the table for\n * comparing many rows at once, and switching between them should not mean two\n * page implementations that drift apart.\n *\n * The `ready` gate is the subtle part, and the reason this is a component\n * rather than a snippet to copy. A persisted preference cannot be read during\n * SSR or the first client render, so a page that renders its default\n * immediately will either mismatch on hydration or visibly flash the wrong\n * view at anyone who chose the other one. Holding the section until the\n * preference resolves avoids both, and putting that here means no consumer\n * has to work it out again.\n */\nexport function DataView<TData>({\n items,\n getRowId,\n renderCard,\n columns,\n view,\n ready = true,\n gridColumns = 3,\n gap = 'sm',\n empty,\n placeholder = null,\n searchKey,\n searchPlaceholder,\n pageSize = 25,\n emptyMessage,\n onRowClick,\n className,\n}: DataViewProps<TData>) {\n if (!ready) return <>{placeholder}</>;\n if (items.length === 0 && empty) return <>{empty}</>;\n\n if (view === 'list') {\n return (\n <DataTable\n columns={columns}\n data={items}\n searchKey={searchKey}\n searchPlaceholder={searchPlaceholder}\n pageSize={pageSize}\n emptyMessage={emptyMessage}\n onRowClick={onRowClick}\n className={className}\n />\n );\n }\n\n return (\n <AppGrid columns={gridColumns} gap={gap} className={cn(className)}>\n {items.map((item) => (\n <React.Fragment key={getRowId(item)}>{renderCard(item)}</React.Fragment>\n ))}\n </AppGrid>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n Line,\n LineChart,\n Pie,\n PieChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { cn } from '@olwiba/cn';\n\nexport interface ChartSeries {\n /** Data key to plot. */\n key: string;\n /** Legend and tooltip label. @default key */\n label?: string;\n /** CSS color. @default theme tokens --chart-1..5 in fixed order */\n color?: string;\n}\n\nexport interface ChartProps {\n /** Chart form. @default 'line' */\n type?: 'line' | 'area' | 'bar' | 'donut';\n data: Array<Record<string, string | number>>;\n /** Key for x-axis categories (line/area/bar) or slice labels (donut). */\n xKey: string;\n /** Series to plot. Donut uses `series[0].key` as the slice value. */\n series: ChartSeries[];\n /** Chart height in px. @default 300 */\n height?: number;\n /** Horizontal grid lines. @default true (ignored for donut) */\n grid?: boolean;\n /** Legend. @default true for multiple series or donut, false for one series */\n legend?: boolean;\n /** Formats values in tooltips and the y-axis, e.g. `(v) => \\`$${v}\\``. */\n valueFormatter?: (value: number) => string;\n className?: string;\n}\n\n// Fixed categorical order — series N always gets token N, never cycled.\nconst TOKEN_COLORS = ['var(--chart-1)', 'var(--chart-2)', 'var(--chart-3)', 'var(--chart-4)', 'var(--chart-5)'];\n\nconst seriesColor = (s: ChartSeries, i: number) => s.color ?? TOKEN_COLORS[i % TOKEN_COLORS.length];\n\nfunction ChartTooltip({\n active,\n payload,\n label,\n valueFormatter,\n}: {\n active?: boolean;\n payload?: Array<{ name?: string; value?: number | string; color?: string; payload?: { fill?: string } }>;\n label?: string | number;\n valueFormatter: (value: number) => string;\n}) {\n if (!active || !payload?.length) return null;\n return (\n <div className=\"rounded-lg border bg-popover px-3 py-2 text-xs text-popover-foreground shadow-md\">\n {label !== undefined && <p className=\"mb-1 font-medium\">{label}</p>}\n <div className=\"space-y-1\">\n {payload.map((entry, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <span\n aria-hidden\n className=\"size-2 shrink-0 rounded-full\"\n style={{ background: entry.color ?? entry.payload?.fill }}\n />\n <span className=\"text-muted-foreground\">{entry.name}</span>\n <span className=\"ml-auto pl-3 font-medium tabular-nums\">\n {typeof entry.value === 'number' ? valueFormatter(entry.value) : entry.value}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction ChartLegend({ entries }: { entries: Array<{ label: string; color: string }> }) {\n return (\n <div className=\"mt-3 flex flex-wrap items-center justify-center gap-x-4 gap-y-1\">\n {entries.map((entry) => (\n <div key={entry.label} className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <span aria-hidden className=\"size-2 rounded-full\" style={{ background: entry.color }} />\n {entry.label}\n </div>\n ))}\n </div>\n );\n}\n\nconst axisProps = {\n tickLine: false,\n axisLine: false,\n tick: { fill: 'var(--muted-foreground)', fontSize: 12 },\n tickMargin: 8,\n} as const;\n\n/**\n * Theme-aware chart — one component, `type` switches the form. Colors come\n * from the `--chart-1..5` theme tokens in fixed order (override per series\n * via `color`). Line and area for change-over-time, bar for magnitude\n * comparison, donut for part-of-whole identity. More than 5 donut slices:\n * fold the tail into an \"Other\" slice in your data instead of adding hues.\n */\nexport function Chart({\n type = 'line',\n data,\n xKey,\n series,\n height = 300,\n grid = true,\n legend,\n valueFormatter = (v) => String(v),\n className,\n}: ChartProps) {\n const showLegend = legend ?? (type === 'donut' || series.length > 1);\n const tooltip = (\n <Tooltip\n cursor={type === 'bar' ? { fill: 'var(--muted)', opacity: 0.4 } : { stroke: 'var(--border)' }}\n content={<ChartTooltip valueFormatter={valueFormatter} />}\n />\n );\n const gridEl = grid ? (\n <CartesianGrid vertical={false} stroke=\"var(--border)\" strokeOpacity={0.6} />\n ) : null;\n\n let chart: React.ReactElement;\n let legendEntries: Array<{ label: string; color: string }>;\n\n if (type === 'donut') {\n const valueKey = series[0]?.key;\n legendEntries = data.map((row, i) => ({\n label: String(row[xKey]),\n color: TOKEN_COLORS[i % TOKEN_COLORS.length],\n }));\n chart = (\n <PieChart>\n <Pie\n data={data}\n dataKey={valueKey}\n nameKey={xKey}\n innerRadius=\"60%\"\n outerRadius=\"85%\"\n paddingAngle={2}\n stroke=\"var(--card)\"\n strokeWidth={2}\n >\n {data.map((row, i) => (\n <Cell key={String(row[xKey])} fill={TOKEN_COLORS[i % TOKEN_COLORS.length]} />\n ))}\n </Pie>\n {tooltip}\n </PieChart>\n );\n } else {\n legendEntries = series.map((s, i) => ({ label: s.label ?? s.key, color: seriesColor(s, i) }));\n\n if (type === 'bar') {\n chart = (\n <BarChart data={data} barCategoryGap=\"25%\">\n {gridEl}\n <XAxis dataKey={xKey} {...axisProps} />\n <YAxis {...axisProps} width={48} tickFormatter={valueFormatter} />\n {tooltip}\n {series.map((s, i) => (\n <Bar\n key={s.key}\n dataKey={s.key}\n name={s.label ?? s.key}\n fill={seriesColor(s, i)}\n radius={[4, 4, 0, 0]}\n maxBarSize={40}\n />\n ))}\n </BarChart>\n );\n } else if (type === 'area') {\n chart = (\n <AreaChart data={data}>\n {gridEl}\n <XAxis dataKey={xKey} {...axisProps} />\n <YAxis {...axisProps} width={48} tickFormatter={valueFormatter} />\n {tooltip}\n {series.map((s, i) => (\n <Area\n key={s.key}\n type=\"monotone\"\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={seriesColor(s, i)}\n strokeWidth={2}\n fill={seriesColor(s, i)}\n fillOpacity={0.12}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </AreaChart>\n );\n } else {\n chart = (\n <LineChart data={data}>\n {gridEl}\n <XAxis dataKey={xKey} {...axisProps} />\n <YAxis {...axisProps} width={48} tickFormatter={valueFormatter} />\n {tooltip}\n {series.map((s, i) => (\n <Line\n key={s.key}\n type=\"monotone\"\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={seriesColor(s, i)}\n strokeWidth={2}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </LineChart>\n );\n }\n }\n\n return (\n <div className={cn('w-full', className)}>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {chart}\n </ResponsiveContainer>\n </div>\n {showLegend && <ChartLegend entries={legendEntries} />}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { AlertCircle, CheckCircle2, File as FileIcon, Loader2, UploadCloud, X } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface FileUploadEntry {\n id: string;\n file: File;\n /** 0–100. Omit while pending, or when not tracking progress. */\n progress?: number;\n status?: 'pending' | 'uploading' | 'done' | 'error';\n error?: string;\n}\n\nexport interface FileUploadProps {\n /** Comma-separated MIME types / extensions, e.g. `\"image/png,image/jpeg\"`. */\n accept?: string;\n multiple?: boolean;\n maxSizeMb?: number;\n maxFiles?: number;\n /** Controlled file list — pass this (with `onFilesChange`) to drive upload progress from your own network layer. */\n files?: FileUploadEntry[];\n /** Uncontrolled default list. */\n defaultFiles?: FileUploadEntry[];\n onFilesChange?: (files: FileUploadEntry[]) => void;\n /** Fired with the raw, already-validated `File` objects a user just added. */\n onFilesAdded?: (files: File[]) => void;\n disabled?: boolean;\n /** Helper text under the drop zone, e.g. \"PNG or JPG, up to 5MB\". */\n hint?: string;\n className?: string;\n}\n\nfunction formatBytes(bytes: number) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction makeId() {\n return Math.random().toString(36).slice(2, 10);\n}\n\n/**\n * Drag-and-drop file picker with a validated queue list. One component —\n * toggle `multiple`/`accept`/`maxSizeMb`/`maxFiles` rather than reaching for\n * a separate dropzone per use case. Progress/status is presentation-only;\n * wire `files`/`onFilesChange` to your own upload layer to drive it.\n */\nexport function FileUpload({\n accept,\n multiple = false,\n maxSizeMb,\n maxFiles,\n files: filesProp,\n defaultFiles,\n onFilesChange,\n onFilesAdded,\n disabled,\n hint,\n className,\n}: FileUploadProps) {\n const [internalFiles, setInternalFiles] = React.useState<FileUploadEntry[]>(defaultFiles ?? []);\n const [isDragging, setIsDragging] = React.useState(false);\n const [validationError, setValidationError] = React.useState<string | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // dragenter/dragleave fire for every child element crossed — count them so the\n // highlight doesn't flicker while moving over the icon/text inside the zone\n const dragDepth = React.useRef(0);\n const files = filesProp ?? internalFiles;\n\n const setFiles = React.useCallback(\n (next: FileUploadEntry[]) => {\n if (!filesProp) setInternalFiles(next);\n onFilesChange?.(next);\n },\n [filesProp, onFilesChange],\n );\n\n const acceptList = React.useMemo(\n () => accept?.split(',').map((a) => a.trim().toLowerCase()).filter(Boolean) ?? [],\n [accept],\n );\n\n const matchesAccept = (file: File) => {\n if (!acceptList.length) return true;\n const name = file.name.toLowerCase();\n return acceptList.some((pattern) =>\n pattern.startsWith('.') ? name.endsWith(pattern) : file.type === pattern || file.type.startsWith(pattern.replace('/*', '/')),\n );\n };\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList || disabled) return;\n const incoming = Array.from(fileList);\n // Single mode replaces the current file, so the existing queue never counts against maxFiles\n const room = maxFiles && multiple ? Math.max(0, maxFiles - files.length) : maxFiles || Infinity;\n if (maxFiles && room <= 0) {\n setValidationError(`You can only add up to ${maxFiles} file${maxFiles === 1 ? '' : 's'}.`);\n return;\n }\n\n const accepted: File[] = [];\n let rejected = false;\n for (const file of incoming.slice(0, room)) {\n if (!matchesAccept(file)) { rejected = true; continue; }\n if (maxSizeMb && file.size > maxSizeMb * 1024 * 1024) { rejected = true; continue; }\n accepted.push(file);\n }\n\n setValidationError(rejected ? `Some files were skipped — check the file type and size limit.` : null);\n if (!accepted.length) return;\n\n const entries: FileUploadEntry[] = accepted.map((file) => ({ id: makeId(), file, status: 'pending' }));\n setFiles(multiple ? [...files, ...entries] : entries);\n onFilesAdded?.(accepted);\n };\n\n const removeFile = (id: string) => {\n setFiles(files.filter((f) => f.id !== id));\n };\n\n return (\n <div className={cn('space-y-3', className)}>\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={() => !disabled && inputRef.current?.click()}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n inputRef.current?.click();\n }\n }}\n onDragOver={(e) => e.preventDefault()}\n onDragEnter={(e) => {\n e.preventDefault();\n dragDepth.current += 1;\n if (!disabled) setIsDragging(true);\n }}\n onDragLeave={() => {\n dragDepth.current = Math.max(0, dragDepth.current - 1);\n if (dragDepth.current === 0) setIsDragging(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n dragDepth.current = 0;\n setIsDragging(false);\n handleFiles(e.dataTransfer.files);\n }}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2 rounded-xl border-2 border-dashed px-6 py-10 text-center transition-colors',\n isDragging ? 'border-primary bg-primary/5' : 'border-border hover:border-foreground/30',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n <UploadCloud className=\"size-8 text-muted-foreground\" />\n <p className=\"text-sm font-medium\">\n <span className=\"text-primary underline underline-offset-4\">Click to upload</span> or drag and drop\n </p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"sr-only\"\n onChange={(e) => { handleFiles(e.target.files); e.target.value = ''; }}\n />\n </div>\n\n {validationError && <p role=\"alert\" className=\"text-sm font-medium text-destructive\">{validationError}</p>}\n\n {files.length > 0 && (\n <ul className=\"space-y-2\">\n {files.map(({ id, file, progress, status = 'pending', error }) => (\n <li key={id} className=\"flex items-center gap-3 rounded-lg border bg-card/60 px-3 py-2.5\">\n <FileIcon className=\"size-5 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-sm font-medium\">{file.name}</p>\n <span className=\"shrink-0 text-xs text-muted-foreground\">{formatBytes(file.size)}</span>\n </div>\n {status === 'uploading' && (\n <div className=\"mt-1.5 h-1 w-full overflow-hidden rounded-full bg-muted\">\n <div className=\"h-full rounded-full bg-primary transition-all\" style={{ width: `${progress ?? 0}%` }} />\n </div>\n )}\n {status === 'error' && error && <p className=\"mt-1 text-xs text-destructive\">{error}</p>}\n </div>\n {status === 'uploading' && <Loader2 className=\"size-4 shrink-0 animate-spin text-muted-foreground\" />}\n {status === 'done' && <CheckCircle2 className=\"size-4 shrink-0 text-primary\" />}\n {status === 'error' && <AlertCircle className=\"size-4 shrink-0 text-destructive\" />}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n onClick={() => removeFile(id)}\n >\n <X className=\"size-3.5\" />\n <span className=\"sr-only\">Remove {file.name}</span>\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { toast } from 'sonner';\nimport { AlertCircle, AlertTriangle, CheckCircle2, Inbox, Info, X } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface NotifyAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface NotificationToastProps {\n variant?: 'success' | 'info' | 'warning' | 'error' | 'message';\n title: string;\n description?: string;\n /** Avatar image — overrides the variant icon (e.g. for a message-from-a-person toast). */\n avatar?: string;\n /** Primary action, right-aligned next to the description (e.g. \"Undo\"). */\n action?: NotifyAction;\n /** Secondary action, rendered after the primary one (e.g. \"Decline\"). */\n secondaryAction?: NotifyAction;\n onDismiss?: () => void;\n}\n\nconst variantIcon = {\n success: <CheckCircle2 className=\"size-5 text-primary\" />,\n info: <Info className=\"size-5 text-muted-foreground\" />,\n warning: <AlertTriangle className=\"size-5 text-amber-500 dark:text-amber-400\" />,\n error: <AlertCircle className=\"size-5 text-destructive\" />,\n message: <Inbox className=\"size-5 text-muted-foreground\" />,\n} as const;\n\n/**\n * Rich toast content — rendered via `notify()` inside sonner's `toast.custom`.\n * One component: `variant` swaps the default icon, `avatar`/`action`/\n * `secondaryAction` add the pieces a given toast needs, rather than a\n * separate toast component per shape.\n */\nexport function NotificationToast({\n variant = 'info',\n title,\n description,\n avatar,\n action,\n secondaryAction,\n onDismiss,\n}: NotificationToastProps) {\n return (\n <div className=\"w-full max-w-sm rounded-lg border bg-card p-4 text-card-foreground shadow-lg\">\n <div className=\"flex items-start gap-3\">\n <div className=\"shrink-0 pt-0.5\">\n {avatar ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={avatar} alt=\"\" className=\"size-9 rounded-full border object-cover\" />\n ) : (\n variantIcon[variant]\n )}\n </div>\n <div className=\"min-w-0 flex-1 pt-0.5\">\n <p className=\"text-sm font-medium\">{title}</p>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n {(action || secondaryAction) && (\n <div className={cn('mt-3 flex gap-4', avatar && 'gap-3')}>\n {action && (\n <button type=\"button\" onClick={action.onClick} className=\"text-sm font-medium text-primary hover:underline\">\n {action.label}\n </button>\n )}\n {secondaryAction && (\n <button type=\"button\" onClick={secondaryAction.onClick} className=\"text-sm font-medium text-muted-foreground hover:text-foreground\">\n {secondaryAction.label}\n </button>\n )}\n </div>\n )}\n </div>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-6 shrink-0 -mt-1 -mr-1\" onClick={onDismiss}>\n <X className=\"size-4\" />\n <span className=\"sr-only\">Dismiss</span>\n </Button>\n </div>\n </div>\n );\n}\n\nexport interface NotifyOptions extends Omit<NotificationToastProps, 'onDismiss'> {\n duration?: number;\n}\n\n/** Fires a `NotificationToast` through sonner. Requires `<Toaster />` from `@olwiba/cn` mounted once in your app. */\nexport function notify(options: NotifyOptions) {\n const { duration, ...toastProps } = options;\n return toast.custom((id) => <NotificationToast {...toastProps} onDismiss={() => toast.dismiss(id)} />, { duration });\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Bell, Inbox } from 'lucide-react';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@olwiba/cn';\nimport { Button } from '../primitives/Button';\n\nexport interface NotificationItem {\n id: string;\n title: string;\n description?: string;\n /** Pre-formatted timestamp, e.g. \"2h ago\" or \"Yesterday\". */\n timestamp?: string;\n read?: boolean;\n /** Avatar image — takes precedence over `icon`. */\n avatar?: string;\n icon?: React.ReactNode;\n}\n\nexport interface NotificationsPopoverProps {\n notifications: NotificationItem[];\n onNotificationClick?: (notification: NotificationItem) => void;\n /** Shows a \"Mark all read\" action in the header when there are unread items. */\n onMarkAllRead?: () => void;\n title?: string;\n emptyMessage?: string;\n /** Popover alignment relative to the bell button. @default 'end' */\n align?: 'start' | 'center' | 'end';\n /** Controlled open state — omit to let the component manage it internally. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n}\n\n/**\n * Bell button + persistent notification inbox. Complements `notify()` toasts:\n * a toast announces an event as it happens, this popover holds the history.\n * Presentation-only — pass `notifications` from your own data layer and\n * persist read state via `onMarkAllRead`/`onNotificationClick`.\n */\nexport function NotificationsPopover({\n notifications,\n onNotificationClick,\n onMarkAllRead,\n title = 'Notifications',\n emptyMessage = 'Nothing new — you’re all caught up.',\n align = 'end',\n open,\n onOpenChange,\n className,\n}: NotificationsPopoverProps) {\n const unreadCount = notifications.filter((n) => !n.read).length;\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className={cn('relative size-8', className)}>\n <Bell className=\"size-4\" />\n {unreadCount > 0 && (\n <span className=\"absolute -right-0.5 -top-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold leading-4 text-primary-foreground\">\n {unreadCount > 9 ? '9+' : unreadCount}\n </span>\n )}\n <span className=\"sr-only\">\n {title}{unreadCount > 0 ? ` (${unreadCount} unread)` : ''}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent align={align} className=\"w-80 p-0\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <p className=\"text-sm font-semibold\">{title}</p>\n {onMarkAllRead && unreadCount > 0 && (\n <button\n type=\"button\"\n onClick={onMarkAllRead}\n className=\"text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Mark all read\n </button>\n )}\n </div>\n\n {notifications.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 px-4 py-10 text-center\">\n <Inbox className=\"size-6 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n </div>\n ) : (\n <ul className=\"max-h-80 overflow-y-auto\">\n {notifications.map((notification) => (\n <li key={notification.id} className=\"border-b last:border-b-0\">\n <button\n type=\"button\"\n onClick={() => onNotificationClick?.(notification)}\n className={cn(\n 'flex w-full items-start gap-3 px-4 py-3 text-left transition-colors hover:bg-muted/60',\n !notification.read && 'bg-muted/40',\n )}\n >\n <span\n aria-hidden\n className={cn(\n 'mt-1.5 size-2 shrink-0 rounded-full',\n notification.read ? 'bg-transparent' : 'bg-primary',\n )}\n />\n {notification.avatar ? (\n <Avatar className=\"size-8 shrink-0\">\n <AvatarImage src={notification.avatar} alt=\"\" />\n <AvatarFallback>{notification.title.slice(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n ) : notification.icon ? (\n <span className=\"mt-0.5 shrink-0 text-muted-foreground\">{notification.icon}</span>\n ) : null}\n <span className=\"min-w-0 flex-1\">\n <span className={cn('block truncate text-sm', !notification.read && 'font-medium')}>\n {notification.title}\n </span>\n {notification.description && (\n <span className=\"mt-0.5 line-clamp-2 block text-xs text-muted-foreground\">\n {notification.description}\n </span>\n )}\n {notification.timestamp && (\n <span className=\"mt-1 block text-xs text-muted-foreground/70\">\n {notification.timestamp}\n </span>\n )}\n </span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Activity } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn } from '@olwiba/cn';\n\nexport interface ActivityFeedItem {\n id: string;\n /** Main line — pass rich nodes for emphasis, e.g. <><b>Ana</b> deployed to production</>. */\n title: React.ReactNode;\n description?: string;\n /** Pre-formatted timestamp, e.g. \"2h ago\" or \"Mar 4\". */\n timestamp?: string;\n /** Avatar image — takes precedence over `icon`. */\n avatar?: string;\n /** Fallback initials when `avatar` is set but fails to load. */\n initials?: string;\n /** Icon node rendered in the timeline marker when there is no avatar. */\n icon?: React.ReactNode;\n}\n\nexport interface ActivityFeedProps {\n items: ActivityFeedItem[];\n emptyMessage?: string;\n className?: string;\n}\n\n/**\n * Vertical activity timeline — avatar or icon markers connected by a rail,\n * one row per event. Presentation-only: pass pre-formatted timestamps and\n * rich `title` nodes from your own data layer.\n */\nexport function ActivityFeed({\n items,\n emptyMessage = 'No activity yet.',\n className,\n}: ActivityFeedProps) {\n if (items.length === 0) {\n return (\n <div className={cn('flex flex-col items-center gap-2 py-10 text-center', className)}>\n <Activity className=\"size-6 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <ol className={className}>\n {items.map((item, i) => (\n <li key={item.id} className=\"relative flex gap-3 pb-6 last:pb-0\">\n {/* Rail connecting this marker to the next */}\n {i !== items.length - 1 && (\n <span aria-hidden className=\"absolute left-4 top-9 bottom-0 w-px -translate-x-1/2 bg-border\" />\n )}\n <span className=\"relative z-10 flex size-8 shrink-0 items-center justify-center\">\n {item.avatar ? (\n <Avatar className=\"size-8\">\n <AvatarImage src={item.avatar} alt=\"\" />\n <AvatarFallback className=\"text-xs\">{item.initials ?? '?'}</AvatarFallback>\n </Avatar>\n ) : (\n <span className=\"flex size-8 items-center justify-center rounded-full border bg-card text-muted-foreground [&>svg]:size-4\">\n {item.icon ?? <Activity />}\n </span>\n )}\n </span>\n <div className=\"min-w-0 flex-1 pt-1\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"text-sm\">{item.title}</p>\n {item.timestamp && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">{item.timestamp}</span>\n )}\n </div>\n {item.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{item.description}</p>\n )}\n </div>\n </li>\n ))}\n </ol>\n );\n}\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nfunction AppScreenRoot({ children, className }: { children?: React.ReactNode; className?: string }) {\n return (\n <div className={cn('flex h-full flex-col', className)}>\n {children}\n </div>\n );\n}\n\nfunction AppScreenHeader({ children, className }: { children?: React.ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-center gap-2 border-b border-border px-4 py-3 shrink-0', className)}>\n {children}\n </div>\n );\n}\n\nfunction AppScreenBody({ children, className }: { children?: React.ReactNode; className?: string }) {\n return (\n <div className={cn('flex-1 overflow-auto px-4 py-3', className)}>\n {children}\n </div>\n );\n}\n\nexport const AppScreen = Object.assign(AppScreenRoot, {\n Header: AppScreenHeader,\n Body: AppScreenBody,\n});\n\nexport type { };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface GlassCardProps extends React.HTMLAttributes<HTMLDivElement> {\n blur?: 'sm' | 'md' | 'lg';\n children: React.ReactNode;\n}\n\nconst blurClass = {\n sm: 'backdrop-blur-sm',\n md: 'backdrop-blur-md',\n lg: 'backdrop-blur-lg',\n};\n\nexport function GlassCard({ blur = 'md', className, children, ...props }: GlassCardProps) {\n return (\n <div\n className={cn(\n 'rounded-2xl border border-white/20 bg-background/50 shadow-sm',\n blurClass[blur],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { TrendingDown, TrendingUp } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\n\nexport interface StatCardProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n label: string;\n delta?: string;\n trend?: 'up' | 'down' | 'neutral';\n description?: string;\n}\n\nexport function StatCard({ value, label, delta, trend = 'neutral', description, className, ...props }: StatCardProps) {\n return (\n <div\n className={cn('rounded-2xl border bg-card p-5', className)}\n {...props}\n >\n <div className=\"text-sm text-muted-foreground\">{label}</div>\n <div className=\"mt-2 flex items-end justify-between gap-3\">\n <div className=\"text-3xl font-bold tracking-tight\">{value}</div>\n {delta && (\n <div\n className={cn(\n 'flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n trend === 'up' && 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',\n trend === 'down' && 'bg-red-500/10 text-red-600 dark:text-red-400',\n trend === 'neutral' && 'bg-muted text-muted-foreground',\n )}\n >\n {trend === 'up' && <TrendingUp className=\"size-3\" />}\n {trend === 'down' && <TrendingDown className=\"size-3\" />}\n {delta}\n </div>\n )}\n </div>\n {description && (\n <p className=\"mt-1.5 text-xs text-muted-foreground\">{description}</p>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface ImageCardProps extends React.HTMLAttributes<HTMLDivElement> {\n src: string;\n alt?: string;\n overlay?: 'none' | 'subtle' | 'strong';\n aspectRatio?: 'video' | 'square' | 'portrait' | 'auto';\n children?: React.ReactNode;\n}\n\nconst overlayClass = {\n none: '',\n subtle: 'bg-gradient-to-t from-black/60 via-black/10 to-transparent',\n strong: 'bg-gradient-to-t from-black/80 via-black/30 to-black/10',\n};\n\nconst aspectClass = {\n video: 'aspect-video',\n square: 'aspect-square',\n portrait: 'aspect-[3/4]',\n auto: '',\n};\n\nexport function ImageCard({\n src,\n alt = '',\n overlay = 'subtle',\n aspectRatio = 'video',\n children,\n className,\n ...props\n}: ImageCardProps) {\n return (\n <div\n className={cn(\n 'group relative overflow-hidden rounded-2xl bg-muted',\n aspectClass[aspectRatio],\n className,\n )}\n {...props}\n >\n <img\n src={src}\n alt={alt}\n className=\"h-full w-full object-cover transition-transform duration-500 group-hover:scale-105\"\n />\n {overlay !== 'none' && (\n <div className={cn('absolute inset-0', overlayClass[overlay])} />\n )}\n {children && (\n <div className=\"absolute inset-0 flex flex-col justify-end p-5 text-white\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Card, cn } from '@olwiba/cn';\n\nconst bannerAspectClass = {\n wide: 'aspect-[3/1]',\n video: 'aspect-video',\n square: 'aspect-square',\n};\n\nexport interface MediaCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Banner rendered above the content, clipped to the card's rounded corners.\n * A ReactNode rather than a src, so a brand fallback, an inline SVG, a map,\n * or a plain <img> all work — this is the difference from ImageCard, which\n * takes a URL and is the right choice when you actually have one.\n */\n banner?: React.ReactNode;\n /** Banner proportions. Default 'wide' (3:1), which suits a header strip. */\n bannerAspect?: keyof typeof bannerAspectClass;\n /**\n * Pinned to the bottom of the card. In a grid this is what keeps the\n * primary action on a shared baseline across a row, however unevenly the\n * titles above it wrap.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * A Card with an optional banner and a bottom-pinned footer.\n *\n * Deliberately knows nothing about what it is showing — the domain-shaped\n * cards (a property, a monitor, an article) compose this and supply their own\n * content. It exists because \"banner, then content, then an action pinned to\n * the bottom, all the same height across a row\" was being hand-rolled per\n * product, and the equal-height part in particular is easy to get subtly\n * wrong.\n *\n * `h-full` is on the card itself so a bare `<MediaCard>` inside a grid cell\n * fills that cell without every caller remembering to ask.\n */\nexport function MediaCard({\n banner,\n bannerAspect = 'wide',\n footer,\n children,\n className,\n ...props\n}: MediaCardProps) {\n return (\n <Card\n className={cn('flex h-full w-full flex-col overflow-hidden', banner && 'pt-0', className)}\n {...props}\n >\n {banner && (\n <div className={cn('w-full shrink-0 overflow-hidden', bannerAspectClass[bannerAspect])}>\n {banner}\n </div>\n )}\n <div className=\"flex flex-1 flex-col gap-3 p-4\">\n {children}\n {footer && <div className=\"mt-auto pt-1\">{footer}</div>}\n </div>\n </Card>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Button, cn } from '@olwiba/cn';\nimport { LayoutGrid, List } from 'lucide-react';\nimport type { ViewMode } from '../hooks/use-view-mode';\n\nexport interface ViewToggleProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n view: ViewMode;\n onChange: (view: ViewMode) => void;\n labels?: { cards?: string; list?: string };\n}\n\n/**\n * Two-state segmented control for switching a collection between cards and a\n * list. Controlled — pair it with useViewMode to persist the choice.\n */\nexport function ViewToggle({ view, onChange, labels, className, ...props }: ViewToggleProps) {\n const options = [\n { mode: 'cards' as const, label: labels?.cards ?? 'Card view', Icon: LayoutGrid },\n { mode: 'list' as const, label: labels?.list ?? 'List view', Icon: List },\n ];\n\n return (\n <div\n className={cn('inline-flex items-center rounded-md border p-0.5', className)}\n role=\"group\"\n aria-label=\"View mode\"\n {...props}\n >\n {options.map(({ mode, label, Icon }) => (\n <Button\n key={mode}\n type=\"button\"\n size=\"sm\"\n variant={view === mode ? 'secondary' : 'ghost'}\n className=\"h-7 px-2\"\n aria-label={label}\n aria-pressed={view === mode}\n onClick={() => onChange(mode)}\n >\n <Icon className=\"size-4\" />\n </Button>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface FlowConnectorProps {\n /** Line axis. Default: 'vertical'. */\n direction?: 'vertical' | 'horizontal';\n /**\n * CSS color string for the line and arrowhead.\n * Falls back to currentColor at reduced opacity when omitted.\n */\n color?: string;\n /** Show an open-chevron arrowhead at the destination end. Default: false. */\n arrow?: boolean;\n /** Show a traveling dot animation along the connector. Default: false. */\n animate?: boolean;\n /** Duration of the traveling dot animation. Default: '1.4s'. */\n animateDur?: string;\n /** CSS delay before the traveling dot animation starts. Default: '0s'. */\n animateDelay?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst DASH_ON = '5px';\nconst DASH_OFF = '4px';\n\n/**\n * Dashed connecting line between diagram nodes.\n * Control size via className (e.g. `h-10` for vertical, `w-16` for horizontal).\n * Pass `style` for fade/entrance animations — the wrapper inherits it.\n */\nexport function FlowConnector({\n direction = 'vertical',\n color,\n arrow = false,\n animate = false,\n animateDur = '1.4s',\n animateDelay = '0s',\n className,\n style,\n}: FlowConnectorProps) {\n const stroke = color ?? 'currentColor';\n const opacity = color ? 0.75 : 0.4;\n\n if (direction === 'vertical') {\n return (\n <div\n className={cn('relative flex flex-col items-center', className)}\n style={style}\n aria-hidden\n >\n {animate && (\n <style>{`@keyframes fc-dot-v{0%{top:-4px;opacity:0}8%{opacity:1}88%{opacity:1}100%{top:calc(100% + 4px);opacity:0}}`}</style>\n )}\n <div\n className=\"flex-1\"\n style={{\n width: 2,\n opacity,\n background: `repeating-linear-gradient(to bottom, ${stroke} 0, ${stroke} ${DASH_ON}, transparent ${DASH_ON}, transparent calc(${DASH_ON} + ${DASH_OFF}))`,\n }}\n />\n {animate && (\n <div\n style={{\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n width: 5,\n height: 5,\n borderRadius: '50%',\n backgroundColor: stroke,\n animation: `fc-dot-v ${animateDur} ease-in-out ${animateDelay} infinite both`,\n }}\n />\n )}\n {arrow && (\n <svg\n width=\"12\"\n height=\"7\"\n viewBox=\"0 0 12 7\"\n style={{ display: 'block', opacity }}\n aria-hidden\n >\n <polyline\n points=\"1,1 6,6 11,1\"\n fill=\"none\"\n stroke={stroke}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={cn('flex items-center', className)}\n style={style}\n aria-hidden\n >\n <div\n className=\"flex-1\"\n style={{\n height: 2,\n opacity,\n background: `repeating-linear-gradient(to right, ${stroke} 0, ${stroke} ${DASH_ON}, transparent ${DASH_ON}, transparent calc(${DASH_ON} + ${DASH_OFF}))`,\n }}\n />\n {arrow && (\n <svg\n width=\"7\"\n height=\"12\"\n viewBox=\"0 0 7 12\"\n style={{ display: 'block', opacity }}\n aria-hidden\n >\n <polyline\n points=\"1,1 6,6 1,11\"\n fill=\"none\"\n stroke={stroke}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface FlowBracketProps {\n /**\n * Vertical anchor for the top connection as a percentage of the wrapper height (0–100).\n * Defaults to 8 (near the top of the first child).\n */\n anchorTop?: number;\n /** Per-side override for the top anchor of the left bracket. Falls back to anchorTop. */\n anchorTopLeft?: number;\n /** Per-side override for the top anchor of the right bracket. Falls back to anchorTop. */\n anchorTopRight?: number;\n /**\n * Vertical anchor for the bottom connection as a percentage of the wrapper height (0–100).\n * Defaults to 92 (near the bottom of the last child).\n */\n anchorBottom?: number;\n /**\n * How far outside the wrapper the bracket extends, in SVG units (viewBox width = 1000).\n * Defaults to 22.\n */\n extent?: number;\n /** Show open-chevron arrowhead at the destination end. Default: true. */\n arrow?: boolean;\n /** CSS color for both bracket lines and animated dots. Defaults to muted slate. */\n color?: string;\n /** Override color for the left bracket only. */\n colorLeft?: string;\n /** Override color for the right bracket only. */\n colorRight?: string;\n /** Show left bracket. Default: true. */\n left?: boolean;\n /** Show right bracket. Default: true. */\n right?: boolean;\n /**\n * Animate a dot traveling the L-path from the bottom anchor up to the top anchor\n * (sync → genesis/docs direction).\n * Dots are placed after {children} in DOM so positive-z-index card stacking contexts\n * naturally render above them.\n */\n animate?: boolean;\n /** Duration of one full dot journey. Default: '4s'. */\n animateDur?: string;\n /** Reverse the right bracket path direction so its arrowhead points DOWN (into sync). Default: false. */\n reverseRight?: boolean;\n style?: React.CSSProperties;\n className?: string;\n children: React.ReactNode;\n}\n\n/**\n * Wraps children in a relative container and draws square bracket lines on the\n * left and/or right outside edges — connecting the top of the first child down\n * to the bottom of the last child (e.g. docs → SYNC direction).\n *\n * Arrowheads are rendered as absolutely-positioned SVGs (not SVG markers) so\n * they render at a consistent pixel size regardless of the bracket SVG's aspect\n * ratio (which spans the full section height with preserveAspectRatio=\"none\").\n */\nexport function FlowBracket({\n anchorTop = 8,\n anchorTopLeft,\n anchorTopRight,\n anchorBottom = 92,\n extent = 22,\n arrow = true,\n color = 'rgba(148,163,184,0.4)',\n colorLeft,\n colorRight,\n left = true,\n right = true,\n animate = false,\n animateDur = '4s',\n reverseRight = false,\n style,\n className,\n children,\n}: FlowBracketProps) {\n const L = -extent;\n const R = 1000 + extent;\n\n const cl = colorLeft ?? color;\n const cr = colorRight ?? color;\n const aTL = anchorTopLeft ?? anchorTop;\n const aTR = anchorTopRight ?? anchorTop;\n\n // Left bracket: bottom → top (arrowhead at top, pointing right into genesis)\n const leftD = `M 0,${anchorBottom} L ${L},${anchorBottom} L ${L},${aTL} L 0,${aTL}`;\n // Right bracket: reversed = top → bottom (arrowhead at bottom, pointing left into sync)\n const rightD = reverseRight\n ? `M 1000,${aTR} L ${R},${aTR} L ${R},${anchorBottom} L 1000,${anchorBottom}`\n : `M 1000,${anchorBottom} L ${R},${anchorBottom} L ${R},${aTR} L 1000,${aTR}`;\n\n // CSS dot: extent as % of container width\n const ep = `${(extent / 10).toFixed(1)}%`;\n const dotKeyframes = animate ? `\n@keyframes fb-dl{\n 0%{top:${anchorBottom}%;left:0;opacity:0}\n 6%{opacity:1}\n 20%{top:${anchorBottom}%;left:-${ep}}\n 80%{top:${aTL}%;left:-${ep};opacity:1}\n 94%{top:${aTL}%;left:0;opacity:0}\n 100%{top:${aTL}%;left:0;opacity:0}\n}\n@keyframes fb-dr{\n 0%{top:${anchorBottom}%;left:100%;opacity:0}\n 6%{opacity:1}\n 20%{top:${anchorBottom}%;left:calc(100% + ${ep})}\n 80%{top:${aTR}%;left:calc(100% + ${ep});opacity:1}\n 94%{top:${aTR}%;left:100%;opacity:0}\n 100%{top:${aTR}%;left:100%;opacity:0}\n}\n@keyframes fb-drr{\n 0%{top:${aTR}%;left:100%;opacity:0}\n 6%{opacity:1}\n 20%{top:${aTR}%;left:calc(100% + ${ep})}\n 80%{top:${anchorBottom}%;left:calc(100% + ${ep});opacity:1}\n 94%{top:${anchorBottom}%;left:100%;opacity:0}\n 100%{top:${anchorBottom}%;left:100%;opacity:0}\n}` : '';\n\n const dotBase: React.CSSProperties = {\n position: 'absolute',\n width: 5,\n height: 5,\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n opacity: 0,\n };\n\n // Shared arrowhead polyline props — same chevron shape as ecosystem connector markers\n const chevronProps = {\n fill: 'none',\n strokeWidth: '1.5',\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n };\n\n // Arrowhead SVG style — positioned in CSS space so it renders at a fixed pixel size\n // regardless of the bracket SVG's non-uniform scale (preserveAspectRatio=\"none\")\n const arrowBase: React.CSSProperties = {\n position: 'absolute',\n width: 10,\n height: 8,\n overflow: 'visible',\n pointerEvents: 'none',\n transform: 'translate(-50%, -50%)',\n };\n\n return (\n <div className={className} style={{ position: 'relative', ...style }}>\n {animate && <style>{dotKeyframes}</style>}\n <svg\n viewBox=\"0 0 1000 100\"\n preserveAspectRatio=\"none\"\n aria-hidden\n className=\"pointer-events-none absolute inset-0\"\n style={{ width: '100%', height: '100%', overflow: 'visible' }}\n >\n {left && (\n <path d={leftD} fill=\"none\" style={{ stroke: cl }} strokeWidth={1.5} strokeDasharray=\"5,4\"\n vectorEffect=\"non-scaling-stroke\" />\n )}\n {right && (\n <path d={rightD} fill=\"none\" style={{ stroke: cr }} strokeWidth={1.5} strokeDasharray=\"5,4\"\n vectorEffect=\"non-scaling-stroke\" />\n )}\n </svg>\n\n {/* Left bracket arrowhead — tip points right (→) into the genesis/docs tier */}\n {arrow && left && (\n <svg\n aria-hidden\n viewBox=\"0 0 10 8\"\n style={{ ...arrowBase, top: `${aTL}%`, left: 0 }}\n >\n <polyline points=\"1,1 8,4 1,7\" style={{ stroke: cl }} {...chevronProps} />\n </svg>\n )}\n\n {/* Right bracket arrowhead — tip points left (←) into the destination tier */}\n {arrow && right && (\n <svg\n aria-hidden\n viewBox=\"0 0 10 8\"\n style={{\n ...arrowBase,\n top: reverseRight ? `${anchorBottom}%` : `${aTR}%`,\n left: '100%',\n }}\n >\n <polyline points=\"9,1 2,4 9,7\" style={{ stroke: cr }} {...chevronProps} />\n </svg>\n )}\n\n {children}\n\n {/* Dots placed after children so card stacking contexts (z-index ≥ 1) render above */}\n {animate && left && (\n <div\n aria-hidden\n style={{ ...dotBase, backgroundColor: cl, animation: `fb-dl ${animateDur} ease-in-out 0s infinite` }}\n />\n )}\n {animate && right && (\n <div\n aria-hidden\n style={{ ...dotBase, backgroundColor: cr, animation: `${reverseRight ? 'fb-drr' : 'fb-dr'} ${animateDur} ease-in-out 1.8s infinite` }}\n />\n )}\n </div>\n );\n}\n","import { Spinner } from '@olwiba/cn';\n\ninterface FullPageSpinnerProps {\n message?: string;\n}\n\nexport function FullPageSpinner({ message }: FullPageSpinnerProps) {\n return (\n <div className=\"flex flex-1 flex-col items-center justify-center gap-4\">\n <Spinner className=\"size-8\" />\n {message && <p className=\"text-muted-foreground text-sm\">{message}</p>}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../lib/utils';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PageHeaderBreadcrumb {\n label: string;\n href?: string;\n}\n\nexport interface PageHeaderBackButton {\n label?: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n breadcrumbs?: PageHeaderBreadcrumb[];\n backButton?: PageHeaderBackButton;\n renderLink?: AppShellRenderLink;\n className?: string;\n children?: React.ReactNode;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function PageHeader({\n title,\n description,\n breadcrumbs,\n backButton,\n renderLink = defaultRenderLink,\n className,\n children,\n}: PageHeaderProps) {\n return (\n <div className={cn('flex flex-col gap-1 pb-6', className)}>\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav aria-label=\"Breadcrumb\" className=\"mb-2 flex items-center gap-1 text-sm text-muted-foreground\">\n {breadcrumbs.map((crumb, i) => {\n const isLast = i === breadcrumbs.length - 1;\n return (\n <React.Fragment key={i}>\n {i > 0 && <ChevronRight className=\"size-3.5 shrink-0\" />}\n {isLast || !crumb.href ? (\n <span className={cn(isLast && 'text-foreground font-medium')}>{crumb.label}</span>\n ) : (\n renderLink({\n href: crumb.href,\n children: crumb.label,\n className: 'hover:text-foreground transition-colors',\n })\n )}\n </React.Fragment>\n );\n })}\n </nav>\n )}\n\n {backButton && (\n <div className=\"mb-2\">\n {backButton.href ? (\n renderLink({\n href: backButton.href,\n children: (\n <>\n <ChevronLeft className=\"size-4\" />\n <span>{backButton.label ?? 'Back'}</span>\n </>\n ),\n className: 'inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors',\n })\n ) : (\n <button\n type=\"button\"\n onClick={backButton.onClick}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <ChevronLeft className=\"size-4\" />\n <span>{backButton.label ?? 'Back'}</span>\n </button>\n )}\n </div>\n )}\n\n <div className=\"flex items-start justify-between gap-4\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {children && <div className=\"flex shrink-0 items-center gap-2\">{children}</div>}\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Spinner } from '@olwiba/cn';\n\ninterface SuspensedProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n}\n\nexport function Suspensed({ children, fallback }: SuspensedProps) {\n return (\n <React.Suspense fallback={fallback ?? <Spinner />}>\n {children}\n </React.Suspense>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Moon, Sun } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\n\nfunction getInitialTheme(): 'light' | 'dark' {\n if (typeof document === 'undefined') return 'dark';\n const stored = localStorage.getItem('theme') as 'light' | 'dark' | null;\n return stored ?? (document.documentElement.classList.contains('dark') ? 'dark' : 'light');\n}\n\nexport function ThemeSwitchMinimal() {\n const [theme, setThemeState] = React.useState<'light' | 'dark'>(getInitialTheme);\n\n const toggle = () => {\n const next = theme === 'dark' ? 'light' : 'dark';\n setThemeState(next);\n localStorage.setItem('theme', next);\n document.documentElement.classList.toggle('dark', next === 'dark');\n };\n\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={toggle} className=\"size-8\" aria-label=\"Toggle theme\">\n <span\n key={theme}\n className=\"inline-flex size-4 items-center justify-center animate-in fade-in zoom-in-75 spin-in-90 duration-200 motion-reduce:animate-none\"\n >\n {theme === 'dark' ? <Sun className=\"size-4\" /> : <Moon className=\"size-4\" />}\n </span>\n </Button>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { LayoutGrid, Sparkles, Layers } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\nimport { useOlwibaUI, type UIMode } from '../context/OlwibaUIContext';\n\nconst MODES: UIMode[] = ['default', 'playful', 'smooth'];\n\nconst MODE_ICONS: Record<UIMode, React.ReactNode> = {\n default: <LayoutGrid className=\"size-4\" />,\n playful: <Sparkles className=\"size-4\" />,\n smooth: <Layers className=\"size-4\" />,\n};\n\nconst MODE_LABELS: Record<UIMode, string> = {\n default: 'Default mode',\n playful: 'Playful mode',\n smooth: 'Smooth mode',\n};\n\nexport function ModeSwitchMinimal() {\n const { mode, setMode } = useOlwibaUI();\n\n const cycle = () => {\n const idx = MODES.indexOf(mode);\n setMode(MODES[(idx + 1) % MODES.length]);\n };\n\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={cycle} className=\"size-8\" aria-label={MODE_LABELS[mode]}>\n <span\n key={mode}\n className=\"inline-flex size-4 items-center justify-center animate-in fade-in zoom-in-75 duration-200 motion-reduce:animate-none\"\n >\n {MODE_ICONS[mode]}\n </span>\n </Button>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Palette } from 'lucide-react';\nimport { Button, Popover, PopoverContent, PopoverTrigger } from '@olwiba/cn';\n\ninterface BrandColor {\n name: string;\n label: string;\n css: string;\n}\n\nconst BRAND_COLORS: BrandColor[] = [\n {\n name: 'zinc',\n label: 'Zinc',\n css: `\n :root { --primary: oklch(0.205 0 0); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.708 0 0); }\n .dark { --primary: oklch(0.922 0 0); --primary-foreground: oklch(0.205 0 0); --ring: oklch(0.556 0 0); }\n `,\n },\n {\n name: 'blue',\n label: 'Blue',\n css: `\n :root { --primary: oklch(0.546 0.245 262.881); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.546 0.245 262.881); }\n .dark { --primary: oklch(0.623 0.214 259.815); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.623 0.214 259.815); }\n `,\n },\n {\n name: 'emerald',\n label: 'Emerald',\n css: `\n :root { --primary: oklch(0.596 0.145 163.225); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.596 0.145 163.225); }\n .dark { --primary: oklch(0.765 0.177 163.223); --primary-foreground: oklch(0.145 0 0); --ring: oklch(0.765 0.177 163.223); }\n `,\n },\n {\n name: 'purple',\n label: 'Purple',\n css: `\n :root { --primary: oklch(0.558 0.288 302.321); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.558 0.288 302.321); }\n .dark { --primary: oklch(0.714 0.203 305.504); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.714 0.203 305.504); }\n `,\n },\n {\n name: 'rose',\n label: 'Rose',\n css: `\n :root { --primary: oklch(0.645 0.246 16.439); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.645 0.246 16.439); }\n .dark { --primary: oklch(0.717 0.194 17.428); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.717 0.194 17.428); }\n `,\n },\n {\n name: 'orange',\n label: 'Orange',\n css: `\n :root { --primary: oklch(0.705 0.213 47.604); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.705 0.213 47.604); }\n .dark { --primary: oklch(0.792 0.184 70.08); --primary-foreground: oklch(0.145 0 0); --ring: oklch(0.792 0.184 70.08); }\n `,\n },\n {\n name: 'slate',\n label: 'Slate',\n css: `\n :root { --primary: oklch(0.446 0.043 257.281); --primary-foreground: oklch(0.985 0 0); --ring: oklch(0.446 0.043 257.281); }\n .dark { --primary: oklch(0.704 0.04 256.788); --primary-foreground: oklch(0.129 0.042 264.695); --ring: oklch(0.704 0.04 256.788); }\n `,\n },\n];\n\n// Preview hex values matched to each preset (used for swatch circles only)\nconst PREVIEW_HEX: Record<string, string> = {\n zinc: '#27272a',\n blue: '#3b82f6',\n emerald: '#10b981',\n purple: '#a855f7',\n rose: '#f43f5e',\n orange: '#f97316',\n slate: '#64748b',\n};\n\nconst STORAGE_KEY = 'brand-color';\nconst STYLE_ID = 'brand-color-override';\n\nfunction applyColor(color: BrandColor) {\n let el = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!el) {\n el = document.createElement('style');\n el.id = STYLE_ID;\n document.head.appendChild(el);\n }\n el.textContent = color.css;\n localStorage.setItem(STORAGE_KEY, color.name);\n}\n\nfunction getInitialColorName(): string {\n if (typeof localStorage === 'undefined') return 'emerald';\n return localStorage.getItem(STORAGE_KEY) ?? 'emerald';\n}\n\nexport function BrandColorSwitchMinimal() {\n const [active, setActive] = React.useState<string>(getInitialColorName);\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const saved = localStorage.getItem(STORAGE_KEY) ?? 'emerald';\n const color = BRAND_COLORS.find((c) => c.name === saved);\n if (color) applyColor(color);\n }, []);\n\n function select(color: BrandColor) {\n applyColor(color);\n setActive(color.name);\n setOpen(false);\n }\n\n const activeHex = PREVIEW_HEX[active] ?? '#27272a';\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n aria-label=\"Change brand color\"\n >\n <span className=\"relative inline-flex size-4 items-center justify-center\">\n <Palette className=\"size-4\" />\n <span\n className={`absolute -bottom-0.5 -right-0.5 size-1.5 rounded-full ring-1 ring-background${\n active === 'zinc' ? ' dark:ring-white/25' : ''\n }`}\n style={{ background: activeHex }}\n />\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-3\" align=\"end\">\n <p className=\"mb-2.5 text-xs font-medium text-muted-foreground\">Brand color</p>\n <div className=\"grid grid-cols-4 gap-1.5\">\n {BRAND_COLORS.map((color) => (\n <button\n key={color.name}\n type=\"button\"\n onClick={() => select(color)}\n title={color.label}\n className=\"group flex flex-col items-center gap-1\"\n >\n <span\n // Zinc's swatch is near-black — give it a border in dark mode so it\n // doesn't vanish into the popover background (transparent in light)\n className={`flex size-7 items-center justify-center rounded-full ring-offset-background transition-all group-hover:scale-110${\n color.name === 'zinc' ? ' border border-transparent dark:border-white/25' : ''\n }`}\n style={{\n background: PREVIEW_HEX[color.name],\n boxShadow:\n active === color.name\n ? `0 0 0 2px var(--background), 0 0 0 4px ${PREVIEW_HEX[color.name]}`\n : undefined,\n }}\n >\n {active === color.name && (\n <svg className=\"size-3 text-white\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\">\n <path d=\"M20 6L9 17l-5-5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">{color.label}</span>\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\ninterface ThemeColorUpdaterProps {\n colorTheme?: string;\n}\n\n/**\n * Applies a data-theme attribute to the document root when a color theme is selected.\n * Use CSS selectors like `[data-theme=\"blue\"] { --primary: ... }` to apply theme colors.\n */\nexport function ThemeColorUpdater({ colorTheme }: ThemeColorUpdaterProps) {\n React.useEffect(() => {\n if (colorTheme) {\n document.documentElement.setAttribute('data-theme', colorTheme);\n } else {\n document.documentElement.removeAttribute('data-theme');\n }\n }, [colorTheme]);\n\n return null;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\ninterface VersionBannerProps {\n version: string;\n message?: string;\n className?: string;\n onDismiss?: () => void;\n}\n\nexport function VersionBanner({ version, message, className, onDismiss }: VersionBannerProps) {\n const [dismissed, setDismissed] = React.useState(false);\n\n if (dismissed) return null;\n\n return (\n <div className={cn('flex items-center justify-between gap-4 bg-primary/10 px-4 py-2 text-sm', className)}>\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded bg-primary/20 px-1.5 py-0.5 font-mono text-xs font-semibold text-primary\">\n v{version}\n </span>\n {message && <span className=\"text-muted-foreground\">{message}</span>}\n </div>\n {onDismiss && (\n <button\n onClick={() => { setDismissed(true); onDismiss(); }}\n className=\"text-muted-foreground transition-colors hover:text-foreground\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { cn } from '../lib/utils';\n\nexport interface DevBannerProps {\n environment?: string;\n className?: string;\n}\n\nexport function DevBanner({ environment = 'development', className }: DevBannerProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center gap-2 bg-amber-500/15 px-4 py-1 text-xs font-medium text-amber-700 dark:text-amber-400',\n className,\n )}\n >\n <span className=\"size-1.5 rounded-full bg-amber-500\" />\n <span>{environment}</span>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\n\ninterface RootErrorFallbackProps {\n error: Error;\n reset: () => void;\n}\n\nexport function RootErrorFallback({ error, reset }: RootErrorFallbackProps) {\n return (\n <div className=\"flex min-h-svh flex-col items-center justify-center gap-6 p-8 text-center\">\n <div className=\"flex flex-col items-center gap-3\">\n <AlertTriangle className=\"size-12 text-destructive\" />\n <h2 className=\"text-xl font-semibold\">Something went wrong</h2>\n <p className=\"max-w-md text-sm text-muted-foreground\">\n {error.message || 'An unexpected error occurred.'}\n </p>\n </div>\n <Button onClick={reset} variant=\"outline\">\n Try again\n </Button>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PostAuthor {\n name: string;\n role?: string;\n avatar?: string;\n}\n\nexport interface PostCardProps {\n title: string;\n description?: string;\n date: string;\n slug: string;\n image?: string;\n tags?: string[];\n author?: PostAuthor;\n hrefPrefix?: string;\n tagHrefPrefix?: string;\n renderLink?: AppShellRenderLink;\n}\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n}\n\nexport function PostCard({\n title,\n description,\n date,\n slug,\n image,\n tags,\n author,\n hrefPrefix = '/blog',\n tagHrefPrefix = '/blog/tag',\n renderLink,\n}: PostCardProps) {\n const href = `${hrefPrefix}/${slug}`;\n\n const LinkWrapper = ({\n href: linkHref,\n children,\n className,\n }: {\n href: string;\n children: React.ReactNode;\n className?: string;\n }) =>\n renderLink ? (\n renderLink({ href: linkHref, children, className })\n ) : (\n <a href={linkHref} className={className}>\n {children}\n </a>\n );\n\n return (\n <article className=\"group relative flex flex-col items-start\">\n <div className=\"relative w-full overflow-hidden rounded-2xl bg-muted\">\n {image ? (\n <img\n src={image}\n alt={title}\n className=\"aspect-video w-full object-cover transition-transform duration-500 group-hover:scale-[1.03]\"\n />\n ) : (\n <div\n aria-hidden\n className=\"aspect-video w-full bg-gradient-to-br from-primary/15 via-muted to-muted\"\n />\n )}\n <div className=\"pointer-events-none absolute inset-0 rounded-2xl ring-1 ring-inset ring-foreground/10\" />\n </div>\n\n <div className=\"flex w-full grow flex-col\">\n <div className=\"mt-6 flex flex-wrap items-center gap-x-3 gap-y-2 text-xs\">\n <time dateTime={date} className=\"text-muted-foreground\">\n {formatDate(date)}\n </time>\n {tags?.map((tag) => (\n <LinkWrapper\n key={tag}\n href={`${tagHrefPrefix}/${encodeURIComponent(tag)}`}\n className=\"relative z-10 rounded-full bg-muted px-3 py-1.5 font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n >\n {tag}\n </LinkWrapper>\n ))}\n </div>\n\n <div className=\"grow\">\n <h2 className=\"mt-3 text-lg font-semibold leading-snug tracking-tight transition-colors group-hover:text-primary\">\n <LinkWrapper href={href}>\n <span className=\"absolute inset-0\" aria-hidden />\n {title}\n </LinkWrapper>\n </h2>\n {description && (\n <p className=\"mt-3 line-clamp-3 text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n {author && (\n <div className=\"mt-6 flex items-center gap-x-3\">\n {author.avatar ? (\n <img\n src={author.avatar}\n alt={author.name}\n className=\"size-9 rounded-full bg-muted object-cover\"\n />\n ) : (\n <span\n aria-hidden\n className=\"flex size-9 items-center justify-center rounded-full bg-muted text-sm font-semibold text-muted-foreground\"\n >\n {author.name.charAt(0).toUpperCase()}\n </span>\n )}\n <div className=\"text-sm leading-tight\">\n <p className=\"font-semibold\">{author.name}</p>\n {author.role && <p className=\"text-muted-foreground\">{author.role}</p>}\n </div>\n </div>\n )}\n </div>\n </article>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\nimport { PostCard, type PostCardProps } from './PostCard';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PostListProps {\n posts: PostCardProps[];\n renderLink?: AppShellRenderLink;\n emptyMessage?: string;\n /** Max columns at the widest breakpoint. */\n columns?: 2 | 3;\n className?: string;\n}\n\nexport function PostList({\n posts,\n renderLink,\n emptyMessage = 'No posts published yet.',\n columns = 3,\n className,\n}: PostListProps) {\n if (posts.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground italic\">{emptyMessage}</p>\n );\n }\n\n return (\n <div\n className={cn(\n 'grid grid-cols-1 gap-x-8 gap-y-14 sm:grid-cols-2',\n columns === 3 && 'lg:grid-cols-3',\n className,\n )}\n >\n {posts.map((post) => (\n <PostCard key={post.slug} {...post} renderLink={renderLink} />\n ))}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, cn } from '@olwiba/cn';\nimport { ArrowRight } from 'lucide-react';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport type ChangelogReleaseType = 'release' | 'fix' | 'enhancement';\n\nexport interface ChangelogHighlight {\n title: string;\n description: string;\n}\n\nexport interface ChangelogCardProps {\n title: string;\n summary: string;\n date: string;\n slug: string;\n version?: string;\n releaseType?: ChangelogReleaseType;\n highlights?: ChangelogHighlight[];\n hrefPrefix?: string;\n renderLink?: AppShellRenderLink;\n}\n\nconst releaseTypeLabel: Record<ChangelogReleaseType, string> = {\n release: 'Major Release',\n fix: 'Fix',\n enhancement: 'Enhancement',\n};\n\nconst releaseTypeVariant: Record<ChangelogReleaseType, 'default' | 'secondary' | 'outline'> = {\n release: 'default',\n fix: 'outline',\n enhancement: 'secondary',\n};\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n\nexport function ChangelogCard({\n title,\n summary,\n date,\n slug,\n version,\n releaseType,\n highlights,\n hrefPrefix = '/changelog',\n renderLink,\n}: ChangelogCardProps) {\n const href = `${hrefPrefix}/${slug}`;\n\n const LinkWrapper = ({\n children,\n className,\n }: {\n children: React.ReactNode;\n className?: string;\n }) =>\n renderLink ? (\n renderLink({ href, children, className })\n ) : (\n <a href={href} className={className}>\n {children}\n </a>\n );\n\n const hasHighlights = highlights && highlights.length > 0;\n\n return (\n <article\n className={cn(\n 'flex flex-col gap-5 rounded-2xl border border-border bg-card p-6 sm:p-8',\n !hasHighlights && 'border-b border-border/60 rounded-none bg-transparent p-0 pb-8 last:pb-0 last:border-0',\n )}\n >\n {/* Header row */}\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <time className=\"text-sm text-muted-foreground\" dateTime={date}>\n {formatDate(date)}\n </time>\n {version && (\n <Badge variant=\"secondary\" className=\"font-mono text-xs\">\n {version}\n </Badge>\n )}\n {releaseType && (\n <Badge variant={releaseTypeVariant[releaseType]} className=\"text-xs\">\n {releaseTypeLabel[releaseType]}\n </Badge>\n )}\n </div>\n <LinkWrapper className=\"inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline\">\n Read update\n <ArrowRight className=\"size-3.5\" />\n </LinkWrapper>\n </div>\n\n {/* Title + summary */}\n <div>\n <h2 className=\"text-lg font-semibold leading-snug tracking-tight\">\n <LinkWrapper className=\"transition-colors hover:text-primary\">{title}</LinkWrapper>\n </h2>\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{summary}</p>\n </div>\n\n {/* Highlights grid */}\n {hasHighlights && (\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {highlights.map((h) => (\n <div\n key={h.title}\n className=\"rounded-xl border border-border/70 bg-background p-4\"\n >\n <p className=\"text-sm font-semibold leading-snug\">{h.title}</p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">{h.description}</p>\n </div>\n ))}\n </div>\n )}\n </article>\n );\n}\n","'use client';\n\nimport type { AppShellRenderLink } from '../app/AppShell';\nimport { ChangelogCard, type ChangelogCardProps } from './ChangelogCard';\n\nexport interface ChangelogListProps {\n entries: ChangelogCardProps[];\n renderLink?: AppShellRenderLink;\n emptyMessage?: string;\n hrefPrefix?: string;\n}\n\nexport function ChangelogList({\n entries,\n renderLink,\n emptyMessage = 'No changelog entries yet.',\n hrefPrefix,\n}: ChangelogListProps) {\n if (entries.length === 0) {\n return <p className=\"text-sm italic text-muted-foreground\">{emptyMessage}</p>;\n }\n\n return (\n <div className=\"flex flex-col gap-8\">\n {entries.map((entry) => (\n <ChangelogCard\n key={entry.slug}\n {...entry}\n hrefPrefix={hrefPrefix}\n renderLink={renderLink}\n />\n ))}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\n\nexport function useMounted() {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface ConfirmOptions {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\nexport interface UseConfirmReturn {\n confirm: (options?: ConfirmOptions) => Promise<boolean>;\n isOpen: boolean;\n options: ConfirmOptions;\n handleConfirm: () => void;\n handleCancel: () => void;\n}\n\n/**\n * Headless confirmation hook. Returns state and handlers for building a confirm dialog.\n *\n * @example\n * const { confirm, isOpen, options, handleConfirm, handleCancel } = useConfirm();\n *\n * // Trigger confirmation\n * const ok = await confirm({ title: 'Delete item?', description: 'This cannot be undone.' });\n *\n * // Wire up your dialog\n * <AlertDialog open={isOpen}>\n * <AlertDialogContent>\n * <AlertDialogTitle>{options.title}</AlertDialogTitle>\n * <AlertDialogFooter>\n * <AlertDialogCancel onClick={handleCancel} />\n * <AlertDialogAction onClick={handleConfirm} />\n * </AlertDialogFooter>\n * </AlertDialogContent>\n * </AlertDialog>\n */\nexport function useConfirm(): UseConfirmReturn {\n const [isOpen, setIsOpen] = React.useState(false);\n const [options, setOptions] = React.useState<ConfirmOptions>({});\n const resolveRef = React.useRef<((value: boolean) => void) | null>(null);\n\n const confirm = React.useCallback((opts: ConfirmOptions = {}): Promise<boolean> => {\n setOptions(opts);\n setIsOpen(true);\n return new Promise<boolean>((resolve) => {\n resolveRef.current = resolve;\n });\n }, []);\n\n const handleConfirm = React.useCallback(() => {\n resolveRef.current?.(true);\n setIsOpen(false);\n }, []);\n\n const handleCancel = React.useCallback(() => {\n resolveRef.current?.(false);\n setIsOpen(false);\n }, []);\n\n return { confirm, isOpen, options, handleConfirm, handleCancel };\n}\n","'use client';\n\nimport * as React from 'react';\n\n/**\n * Returns true when the page has scrolled past a given Y threshold in pixels.\n * Useful for showing/hiding sticky headers, back-to-top buttons, etc.\n *\n * @example\n * const scrolledPast = useScrolledPast(100);\n * return <header className={scrolledPast ? 'shadow-md' : ''}>...</header>;\n */\nexport function useScrolledPast(threshold: number): boolean {\n const [scrolledPast, setScrolledPast] = React.useState(false);\n\n React.useEffect(() => {\n const handleScroll = () => {\n setScrolledPast(window.scrollY > threshold);\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [threshold]);\n\n return scrolledPast;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useCopyToClipboard(): [boolean, (text: string) => void] {\n const [copied, setCopied] = React.useState(false);\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const copy = React.useCallback((text: string) => {\n navigator.clipboard.writeText(text).then(() => {\n setCopied(true);\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), 2000);\n });\n }, []);\n\n React.useEffect(() => () => clearTimeout(timeoutRef.current), []);\n\n return [copied, copy];\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = React.useState(value);\n\n React.useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debounced;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T) => void] {\n const [storedValue, setStoredValue] = React.useState<T>(() => {\n if (typeof window === 'undefined') return initialValue;\n try {\n const item = window.localStorage.getItem(key);\n return item ? (JSON.parse(item) as T) : initialValue;\n } catch {\n return initialValue;\n }\n });\n\n const setValue = React.useCallback(\n (value: T) => {\n try {\n setStoredValue(value);\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore — private browsing may block localStorage writes\n }\n },\n [key],\n );\n\n return [storedValue, setValue];\n}\n","'use client';\n\nimport { useLocalStorage } from './use-local-storage';\nimport { useMounted } from './use-mounted';\n\nexport type ViewMode = 'cards' | 'list';\n\nexport interface UseViewModeReturn {\n view: ViewMode;\n setView: (view: ViewMode) => void;\n /**\n * False until the stored preference is readable. Render a skeleton or hold\n * the section until this is true — see the note below on why.\n */\n ready: boolean;\n}\n\n/**\n * Remembered cards/list preference.\n *\n * Returns the fallback on the server and on the first client render, then\n * settles to the stored value once mounted. Returning the stored value\n * immediately would have the server emit card markup while the client builds\n * a table — a hydration mismatch — and painting the fallback first flashes\n * the wrong view at someone who chose the other one. `ready` lets callers\n * wait for the real answer instead of doing either.\n *\n * The key is shared by default so the choice reads as one product-wide\n * preference: pick list on one page and every page follows. Pass a distinct\n * key where a page genuinely wants its own.\n */\nexport function useViewMode(key = 'view-mode', fallback: ViewMode = 'cards'): UseViewModeReturn {\n const [stored, setStored] = useLocalStorage<ViewMode>(key, fallback);\n const mounted = useMounted();\n return { view: mounted ? stored : fallback, setView: setStored, ready: mounted };\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface UsePaginationReturn {\n page: number;\n pageSize: number;\n totalPages: number;\n offset: number;\n hasPrev: boolean;\n hasNext: boolean;\n goTo: (page: number) => void;\n next: () => void;\n prev: () => void;\n}\n\nexport function usePagination(total: number, pageSize: number): UsePaginationReturn {\n const [page, setPage] = React.useState(1);\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const offset = (page - 1) * pageSize;\n\n const goTo = React.useCallback(\n (p: number) => setPage(Math.min(Math.max(1, p), totalPages)),\n [totalPages],\n );\n\n const next = React.useCallback(() => goTo(page + 1), [page, goTo]);\n const prev = React.useCallback(() => goTo(page - 1), [page, goTo]);\n\n return { page, pageSize, totalPages, offset, hasPrev: page > 1, hasNext: page < totalPages, goTo, next, prev };\n}\n"]}