{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "quote",
  "type": "registry:ui",
  "addGlobalCss": false,
  "registryDependencies": [],
  "dependencies": [
    "motion"
  ],
  "devDependencies": [],
  "files": [
    {
      "path": "quote-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 QuoteIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface QuoteIconProps 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 QuoteIcon = forwardRef<QuoteIconHandle, QuoteIconProps>(\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 popVariants = (delay: number): Variants => ({\n   normal: { scale: 1 },\n   animate: {\n    scale: [1, 1.25, 1],\n    transition: {\n     duration: 0.4 * duration,\n     ease: \"easeInOut\",\n     delay: delay * 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.path\n       d=\"M5.99219 5.75C8.20132 5.75 9.99219 7.63509 9.99219 9.96101C9.99219 13.0258 8.57833 15.7433 6.39979 17.4295C5.61672 18.0357 5.22518 18.3387 4.95877 18.2272C4.87752 18.1932 4.80451 18.1362 4.75143 18.0654C4.57737 17.8331 4.8036 17.2896 5.25607 16.2028C5.50059 15.6154 5.62285 15.3217 5.57711 15.0357C5.55871 14.9206 5.54279 14.8689 5.49331 14.7636C5.37036 14.5018 4.88084 14.1853 3.9018 13.5523C2.75622 12.8116 1.99219 11.4802 1.99219 9.96101C1.99219 8.47071 2.72729 7.16135 3.83662 6.41291C4.45869 5.99345 5.19849 5.75 5.99219 5.75Z\"\n       variants={popVariants(0)}\n       style={{ transformBox: \"view-box\", originX: \"6px\", originY: \"12px\" }}\n      />\n      <m.path\n       d=\"M17.9922 5.75C20.2013 5.75 21.9922 7.63509 21.9922 9.96101C21.9922 13.0258 20.5783 15.7433 18.3998 17.4295C17.6167 18.0357 17.2252 18.3387 16.9588 18.2272C16.8775 18.1932 16.8045 18.1362 16.7514 18.0654C16.5774 17.8331 16.8036 17.2896 17.2561 16.2028C17.5006 15.6154 17.6228 15.3217 17.5771 15.0357C17.5587 14.9206 17.5428 14.8689 17.4933 14.7636C17.3704 14.5018 16.8808 14.1853 15.9018 13.5523C14.7562 12.8116 13.9922 11.4802 13.9922 9.96101C13.9922 8.47071 14.7273 7.16135 15.8366 6.41291C16.4587 5.99345 17.1985 5.75 17.9922 5.75Z\"\n       variants={popVariants(0.15)}\n       style={{ transformBox: \"view-box\", originX: \"18px\", originY: \"12px\" }}\n      />\n     </m.svg>\n    </m.div>\n   </LazyMotion>\n  );\n },\n);\n\nQuoteIcon.displayName = \"QuoteIcon\";\nexport { QuoteIcon };\n",
      "type": "registry:ui"
    }
  ]
}