{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "progress-steps", "title": "Progress Steps", "description": "Multi-step pipeline with sequentially activating nodes and filling lines.", "dependencies": [ "remotion" ], "files": [ { "path": "registry/remocn/progress-steps/index.tsx", "content": "\"use client\";\n\nimport {\n interpolate,\n interpolateColors,\n spring,\n useCurrentFrame,\n useVideoConfig,\n} from \"remotion\";\n\nexport interface ProgressStepsProps {\n steps?: Array<{ label: string }>;\n orientation?: \"horizontal\" | \"vertical\";\n activeColor?: string;\n inactiveColor?: string;\n background?: string;\n textColor?: string;\n stepDuration?: number;\n speed?: number;\n className?: string;\n}\n\nexport function ProgressSteps({\n steps = [{ label: \"Connect\" }, { label: \"Process\" }, { label: \"Deploy\" }],\n orientation = \"horizontal\",\n activeColor = \"#22c55e\",\n inactiveColor = \"#27272a\",\n background = \"#0a0a0a\",\n textColor = \"white\",\n stepDuration = 30,\n speed = 1,\n className,\n}: ProgressStepsProps) {\n const frame = useCurrentFrame() * speed;\n const { fps } = useVideoConfig();\n\n const isHorizontal = orientation === \"horizontal\";\n const trackLength = isHorizontal ? 920 : 520;\n const segmentLength = trackLength / Math.max(steps.length - 1, 1);\n const nodeRadius = 22;\n\n return (\n