{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "waze",
  "type": "registry:ui",
  "addGlobalCss": false,
  "registryDependencies": [],
  "dependencies": [
    "motion"
  ],
  "devDependencies": [],
  "files": [
    {
      "path": "waze-icon.tsx",
      "content": "\"use client\";\n\nimport { cn } from \"@/lib/utils\";\nimport type { Variants } from \"motion/react\";\nimport {\n LazyMotion,\n domMin,\n m,\n useAnimation,\n useReducedMotion,\n} from \"motion/react\";\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n} from \"react\";\nexport interface WazeIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface WazeIconProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n | \"color\"\n | \"onDrag\"\n | \"onDragStart\"\n | \"onDragEnd\"\n | \"onAnimationStart\"\n | \"onAnimationEnd\"\n | \"onAnimationIteration\"\n> {\n size?: number;\n duration?: number;\n isAnimated?: boolean;\n color?: string;\n}\n\nconst WazeIcon = forwardRef<WazeIconHandle, WazeIconProps>(\n (\n  {\n   onMouseEnter,\n   onMouseLeave,\n   className,\n   size = 24,\n   duration = 1,\n   isAnimated = true,\n   color,\n   ...props\n  },\n  ref,\n ) => {\n  const controls = useAnimation();\n  const reduced = useReducedMotion();\n  const isControlled = useRef(false);\n\n  useImperativeHandle(ref, () => {\n   isControlled.current = true;\n   return {\n    startAnimation: () =>\n     reduced ? controls.start(\"normal\") : controls.start(\"animate\"),\n    stopAnimation: () => controls.start(\"normal\"),\n   };\n  });\n\n  const handleEnter = useCallback(\n   (e?: React.MouseEvent<HTMLDivElement>) => {\n    if (!isAnimated || reduced) return;\n    if (!isControlled.current) controls.start(\"animate\");\n    else onMouseEnter?.(e as any);\n   },\n   [controls, reduced, isAnimated, onMouseEnter],\n  );\n\n  const handleLeave = useCallback(\n   (e?: React.MouseEvent<HTMLDivElement>) => {\n    if (!isControlled.current) controls.start(\"normal\");\n    else onMouseLeave?.(e as any);\n   },\n   [controls, onMouseLeave],\n  );\n\n  const hopVariants: Variants = {\n   normal: { y: 0 },\n   animate: {\n    y: [0, -2, 0.4, 0],\n    transition: {\n     duration: 0.5 * duration,\n     ease: \"easeInOut\",\n     times: [0, 0.4, 0.75, 1],\n    },\n   },\n  };\n\n  const blinkVariants: Variants = {\n   normal: { scaleY: 1 },\n   animate: {\n    scaleY: [1, 0.1, 1],\n    transition: {\n     duration: 0.3 * duration,\n     ease: \"easeInOut\",\n     delay: 0.3 * duration,\n    },\n   },\n  };\n\n  return (\n   <LazyMotion features={domMin} strict>\n    <m.div\n     className={cn(\"inline-flex items-center justify-center\", className)}\n     onMouseEnter={handleEnter}\n     onMouseLeave={handleLeave}\n     {...props}\n     style={{ color, ...props.style }}\n    >\n     <m.svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      animate={controls}\n      initial=\"normal\"\n     >\n      <m.g variants={hopVariants}>\n       <m.path\n        d=\"M16.3741 9.00098H16.2491M9.87415 9.00098H9.74915M16.4991 9.00098C16.4991 9.13905 16.3872 9.25098 16.2491 9.25098C16.1111 9.25098 15.9991 9.13905 15.9991 9.00098C15.9991 8.86291 16.1111 8.75098 16.2491 8.75098C16.3872 8.75098 16.4991 8.86291 16.4991 9.00098ZM9.99915 9.00098C9.99915 9.13905 9.88722 9.25098 9.74915 9.25098C9.61107 9.25098 9.49915 9.13905 9.49915 9.00098C9.49915 8.86291 9.61107 8.75098 9.74915 8.75098C9.88722 8.75098 9.99915 8.86291 9.99915 9.00098Z\"\n        variants={blinkVariants}\n        style={{ transformBox: \"view-box\", originX: \"13px\", originY: \"9px\" }}\n       />\n       <path d=\"M15.9991 13.001C15.4003 13.8977 14.2811 14.501 12.9991 14.501C11.7172 14.501 10.598 13.8977 9.99915 13.001\" />\n       <path d=\"M11.28 18.8155C11.8343 18.9369 12.4101 19.001 13.0008 19.001C17.4191 19.001 21.0008 15.4193 21.0008 11.001C21.0008 6.5827 17.4191 3.00098 13.0008 3.00098C8.58252 3.00098 5.00079 6.5827 5.00079 11.001C5.00079 11.9363 4.79948 13.802 2.99915 14.7022C3.84969 16.6159 5.31673 17.7259 7.0011 18.3646\" />\n      </m.g>\n      <path d=\"M11.0011 18.999C11.0011 20.1036 10.1057 20.999 9.0011 20.999C7.89653 20.999 7.0011 20.1036 7.0011 18.999C7.0011 17.8945 7.89653 16.999 9.0011 16.999C10.1057 16.999 11.0011 17.8945 11.0011 18.999Z\" />\n      <path d=\"M15.0011 18.999C15.0011 20.1036 15.8965 20.999 17.0011 20.999C18.1057 20.999 19.0011 20.1036 19.0011 18.999C19.0011 18.4027 18.7402 17.8674 18.3262 17.501\" />\n     </m.svg>\n    </m.div>\n   </LazyMotion>\n  );\n },\n);\n\nWazeIcon.displayName = \"WazeIcon\";\nexport { WazeIcon };\n",
      "type": "registry:ui"
    }
  ]
}