{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "primitive-orbit",
  "type": "registry:ui",
  "title": "Orbit",
  "description": "Move a decorative node slowly around a center for low-frequency status displays.",
  "dependencies": [
    "motion"
  ],
  "categories": [
    "primitive",
    "loops"
  ],
  "docs": "https://motion-lexicon.pages.dev/en/primitives/orbit/",
  "files": [
    {
      "path": "src/registry/primitives/orbit.tsx",
      "type": "registry:ui",
      "target": "components/motion-lexicon/primitives/orbit.tsx",
      "content": "\"use client\";\n\nimport { motion, useReducedMotion } from \"motion/react\";\nimport type { ReactNode } from \"react\";\n\nexport type OrbitPrimitiveProps = {\n  center: ReactNode;\n  satellite: ReactNode;\n  radius?: number;\n  duration?: number;\n  direction?: \"normal\" | \"reverse\";\n  className?: string;\n};\n\nexport function OrbitPrimitive({\n  center,\n  satellite,\n  radius = 56,\n  duration = 6,\n  direction = \"normal\",\n  className,\n}: OrbitPrimitiveProps) {\n  const reduceMotion = useReducedMotion();\n  const end = direction === \"reverse\" ? -360 : 360;\n\n  return (\n    <div className={`relative grid place-items-center ${className ?? \"\"}`}>\n      {center}\n      <motion.div\n        aria-hidden\n        className=\"pointer-events-none absolute inset-0 grid place-items-center\"\n        animate={{ transform: reduceMotion ? \"rotate(0deg)\" : `rotate(${end}deg)` }}\n        transition={{ duration, ease: \"linear\", repeat: reduceMotion ? 0 : Infinity }}\n      >\n        <span style={{ transform: `translate3d(0, ${-radius}px, 0)` }}>{satellite}</span>\n      </motion.div>\n    </div>\n  );\n}\n"
    }
  ]
}
