{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "task-add-0-1",
  "type": "registry:ui",
  "addGlobalCss": false,
  "registryDependencies": [],
  "dependencies": [
    "motion"
  ],
  "devDependencies": [],
  "files": [
    {
      "path": "task-add-0-1-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 TaskAdd01IconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface TaskAdd01IconProps 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 TaskAdd01Icon = forwardRef<TaskAdd01IconHandle, TaskAdd01IconProps>(\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 clipVariants: Variants = {\n   normal: { y: 0 },\n   animate: {\n    y: [0, -1.2, 0.2, 0],\n    transition: {\n     duration: 0.45 * duration,\n     ease: \"easeInOut\",\n    },\n   },\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  const plusVariants: Variants = {\n   normal: { rotate: 0, scale: 1, transition: { duration: 0 } },\n   animate: {\n    rotate: [0, 90],\n    scale: [1, 1.3, 1],\n    transition: { duration: 0.5 * duration, ease: \"easeInOut\" },\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=\"M13.498 2H8.49805C7.66962 2 6.99805 2.67157 6.99805 3.5C6.99805 4.32843 7.66962 5 8.49805 5H13.498C14.3265 5 14.998 4.32843 14.998 3.5C14.998 2.67157 14.3265 2 13.498 2Z\"\n       variants={clipVariants}\n      />\n      <m.path\n       d=\"M6.99805 15H10.4266\"\n       strokeDasharray=\"4\"\n       strokeDashoffset=\"0\"\n       variants={drawVariants(4, 0.25)}\n      />\n      <m.path\n       d=\"M6.99805 11H14.998\"\n       strokeDasharray=\"9\"\n       strokeDashoffset=\"0\"\n       variants={drawVariants(9, 0.1)}\n      />\n      <path d=\"M18.998 12.9995L18.9981 9.48263C18.9981 6.65424 18.9981 5.24004 18.1194 4.36137C17.4781 3.72007 16.5515 3.54681 14.9981 3.5M13.998 21.9995L8.99805 21.9995C6.16963 21.9995 4.75541 21.9995 3.87674 21.1208C2.99806 20.2421 2.99805 18.8279 2.99805 15.9995L2.99806 9.48269C2.99805 6.65425 2.99805 5.24004 3.87673 4.36136C4.51802 3.72007 5.44456 3.54681 6.99795 3.5\" />\n      <m.path\n       d=\"M20.998 19H17.998M17.998 19H14.998M17.998 19V22M17.998 19V16\"\n       variants={plusVariants}\n       style={{\n        transformBox: \"view-box\",\n        originX: \"17.998px\",\n        originY: \"19px\",\n       }}\n      />\n     </m.svg>\n    </m.div>\n   </LazyMotion>\n  );\n },\n);\n\nTaskAdd01Icon.displayName = \"TaskAdd01Icon\";\nexport { TaskAdd01Icon };\n",
      "type": "registry:ui"
    }
  ]
}