{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "chart-line",
  "type": "registry:ui",
  "addGlobalCss": false,
  "registryDependencies": [],
  "dependencies": [
    "motion"
  ],
  "devDependencies": [],
  "files": [
    {
      "path": "chart-line-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 ChartLineIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface ChartLineIconProps 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 ChartLineIcon = forwardRef<ChartLineIconHandle, ChartLineIconProps>(\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 drawVariants = (\n   length: number,\n   delay: number,\n   dur = 0.35,\n  ): Variants => ({\n   normal: { strokeDashoffset: 0 },\n   animate: {\n    strokeDashoffset: [length, 0],\n    transition: {\n     duration: dur * 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=\"M7 15.2461L9.87381 11.5319C10.1242 11.2082 10.2495 11.0464 10.3862 10.9354C10.7975 10.6017 11.3471 10.5135 11.8368 10.7026C11.9997 10.7654 12.1664 10.8804 12.5 11.1103C12.8336 11.3402 13.0003 11.4552 13.1632 11.518C13.6529 11.7071 14.2025 11.6189 14.6138 11.2852C14.7505 11.1742 14.8757 11.0124 15.1262 10.6887L15.9061 9.68068C16.8833 8.41772 17.3719 7.78624 18.0414 7.7479C18.7109 7.70956 19.264 8.28139 20.3701 9.42505L21 10.0764\"\n       strokeDasharray=\"21\"\n       strokeDashoffset=\"0\"\n       variants={drawVariants(21, 0.05, 0.6)}\n      />\n      <path d=\"M21 21H10C6.70017 21 5.05025 21 4.02513 19.9749C3 18.9497 3 17.2998 3 14V3\" />\n     </m.svg>\n    </m.div>\n   </LazyMotion>\n  );\n },\n);\n\nChartLineIcon.displayName = \"ChartLineIcon\";\nexport { ChartLineIcon };\n",
      "type": "registry:ui"
    }
  ]
}