{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "save-off",
  "type": "registry:ui",
  "addGlobalCss": false,
  "registryDependencies": [],
  "dependencies": [
    "motion"
  ],
  "devDependencies": [],
  "files": [
    {
      "path": "save-off-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 SaveOffIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface SaveOffIconProps 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 SaveOffIcon = forwardRef<SaveOffIconHandle, SaveOffIconProps>(\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 bodyVariants: Variants = {\n   normal: { opacity: 1 },\n   animate: {\n    opacity: [1, 0.4, 1],\n    transition: { duration: 0.7 * duration, ease: \"easeInOut\" },\n   },\n  };\n\n  const slashVariants: Variants = {\n   normal: { strokeDashoffset: 0 },\n   animate: {\n    strokeDashoffset: [30, 0],\n    transition: {\n     duration: 0.45 * duration,\n     ease: \"easeInOut\",\n     delay: 0.1 * 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={bodyVariants}>\n       <path d=\"M19.8284 19.8284C18.6569 21 16.7712 21 13 21H11C7.22876 21 5.34315 21 4.17157 19.8284C3 18.6569 3 16.7712 3 13V11C3 7.22876 3 5.34315 4.17157 4.17157M8.03359 3.03359C8.86815 3 9.84576 3 11 3H15.8787C16.3353 3 16.5635 3 16.7826 3.02421C17.5367 3.10757 18.2515 3.40366 18.8437 3.87795C19.0157 4.01573 19.1772 4.17715 19.5 4.5C19.8228 4.82285 19.9843 4.98427 20.122 5.15629C20.5963 5.74846 20.8924 6.4633 20.9758 7.2174C21 7.43646 21 7.66475 21 8.12132V13C21 14.1542 21 15.1319 20.9664 15.9664\" />\n       <path d=\"M17 3.5V4C17 5.88562 17 6.82843 16.4142 7.41421C15.8284 8 14.8856 8 13 8\" />\n       <path d=\"M17 20.5V17M13 13H11C9.11438 13 8.17157 13 7.58579 13.5858C7 14.1716 7 15.1144 7 17V20.5\" />\n      </m.g>\n      <m.path\n       d=\"M2 2L22 22\"\n       strokeDasharray=\"30\"\n       strokeDashoffset=\"0\"\n       variants={slashVariants}\n      />\n     </m.svg>\n    </m.div>\n   </LazyMotion>\n  );\n },\n);\n\nSaveOffIcon.displayName = \"SaveOffIcon\";\nexport { SaveOffIcon };\n",
      "type": "registry:ui"
    }
  ]
}