{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "split-feature-showcase", "type": "registry:ui", "title": "Split Feature Showcase", "description": "Scroll-triggered bento grid with spring-animated message preview and integration cards with ambient gradient glow.", "dependencies": [ "motion" ], "files": [ { "path": "registry/ruixenui/split-feature-showcase.tsx", "content": "\"use client\";\n\nimport * as React from \"react\";\nimport { motion } from \"motion/react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ═══════════════════════════════════════════════════════════\n Split Feature Showcase — Rauno-minimal.\n\n Two cells in a sharp-cornered container, no border chrome:\n Left: Conversation thread (sender + reply bubbles, online pulse)\n Right: Bare text list — even hierarchy, subtle stagger animation\n\n Dependencies: motion.\n ═══════════════════════════════════════════════════════════ */\n\nconst S = { type: \"spring\" as const, stiffness: 300, damping: 28 };\nconst S_SNAP = { type: \"spring\" as const, stiffness: 440, damping: 26 };\nconst S_SOFT = { type: \"spring\" as const, stiffness: 260, damping: 24 };\nconst S_MICRO = { type: \"spring\" as const, stiffness: 500, damping: 30 };\n\nexport interface SplitFeatureShowcaseProps {\n leftTitle?: string;\n leftDescription?: string;\n rightTitle?: string;\n rightDescription?: string;\n className?: string;\n}\n\nconst WORKFLOW_ITEMS = [\n \"Alerts\",\n \"Lead routing\",\n \"Re-engage cold leads\",\n \"New Deal email campaign flow\",\n \"Lead form submissions\",\n \"Health scoring\",\n \"Upsell\",\n];\n\nexport function SplitFeatureShowcase({\n leftTitle = \"Conversations that convert.\",\n leftDescription = \"Collaborate in real time with threaded messages, presence indicators, and instant reactions every exchange captured in context.\",\n rightTitle = \"Automate your entire pipeline.\",\n rightDescription = \"From lead capture to customer success, every workflow runs on autopilot, so your team can focus on closing deals.\",\n className,\n}: SplitFeatureShowcaseProps) {\n return (\n
\n
\n
\n {/* ── Left cell ──────────────────────────────────── */}\n \n
\n
\n \n
\n \n \n
\n \n Irung\n \n \n 2m ago\n \n \n\n \n
\n Hey{\" \"}\n \n @bernard\n \n , I've updated the dashboard metrics.\n
\n \n 🔥\n \n \n\n
\n \n The conversion rate looks great\n \n \n \n \n
\n\n \n \n \n \n \n Read\n \n \n\n \n
\n \n \n \n
\n \n
\n
\n\n \n

\n \n {leftTitle}\n {\" \"}\n {leftDescription}\n

\n \n \n\n {/* ── Right cell: Bare text, even hierarchy ──────── */}\n \n
\n \n {WORKFLOW_ITEMS.map((label, i) => {\n const center = Math.floor(WORKFLOW_ITEMS.length / 2);\n const dist = Math.abs(i - center);\n\n return (\n \n {label}\n \n );\n })}\n
\n
\n\n \n

\n \n {rightTitle}\n {\" \"}\n \n {rightDescription}\n \n

\n \n \n
\n \n\n \n
\n );\n}\n", "type": "registry:ui", "target": "components/ruixen/split-feature-showcase.tsx" } ] }