{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "pipeline-journey", "title": "Pipeline Journey", "description": "A Kanban ticket arcs across columns triggering landings and a final confetti burst.", "dependencies": [ "remotion" ], "files": [ { "path": "registry/remocn/pipeline-journey/index.tsx", "content": "\"use client\";\n\nimport { interpolate, spring, useCurrentFrame, useVideoConfig } from \"remotion\";\n\nexport interface PipelineJourneyProps {\n cardLabel?: string;\n accentColor?: string;\n speed?: number;\n className?: string;\n}\n\nconst FONT_FAMILY =\n \"var(--font-geist-sans), -apple-system, BlinkMacSystemFont, sans-serif\";\nconst MONO_FAMILY =\n \"var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, monospace\";\n\nconst COLUMNS = [\n { id: \"todo\", title: \"Todo\", count: 3 },\n { id: \"in_progress\", title: \"In Progress\", count: 2 },\n { id: \"done\", title: \"Done\", count: 4 },\n];\n\nconst COL_WIDTH = 320;\nconst COL_GAP = 40;\nconst BOARD_TOP = 120;\nconst BOARD_LEFT = 120;\nconst CARD_W = 280;\nconst CARD_H = 88;\n\nfunction colCenter(index: number) {\n const x = BOARD_LEFT + index * (COL_WIDTH + COL_GAP) + COL_WIDTH / 2;\n const y = BOARD_TOP + 90;\n return { x, y };\n}\n\nfunction pseudoRandom(i: number) {\n const v = Math.sin(i * 12.9898) * 43758.5453;\n return v - Math.floor(v);\n}\n\nfunction PlaceholderCard({ opacity = 1 }: { opacity?: number }) {\n return (\n