{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "keyboard-off",
  "type": "registry:ui",
  "addGlobalCss": false,
  "registryDependencies": [],
  "dependencies": [
    "motion"
  ],
  "devDependencies": [],
  "files": [
    {
      "path": "keyboard-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 KeyboardOffIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface KeyboardOffIconProps 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 KeyboardOffIcon = forwardRef<KeyboardOffIconHandle, KeyboardOffIconProps>(\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=\"M6.9986 12L7.9986 12M11.4986 12L11.9986 12M15.9986 12L16.9986 12\" />\n       <path d=\"M6.9986 17L16.9986 17\" />\n       <path d=\"M20.5362 21.092C19.4298 21.9999 17.7861 21.9999 14.4986 21.9999H9.4986C6.21111 21.9999 4.56737 21.9999 3.46102 21.092C3.25849 20.9257 3.07277 20.74 2.90655 20.5375C1.9986 19.4311 1.9986 17.7874 1.9986 14.4999C1.9986 11.2124 1.9986 9.5687 2.90655 8.46235C3.07277 8.25981 3.25849 8.0741 3.46102 7.90788C4.24233 7.26668 5.29163 7.0783 6.9986 7.02295\" />\n       <path d=\"M21.9756 17C21.9986 16.2898 21.9986 15.4659 21.9986 14.5C21.9986 11.2125 21.9986 9.56878 21.0906 8.46243C20.9244 8.25989 20.7387 8.07418 20.5362 7.90796C19.4298 7 17.7861 7 14.4986 7H11.9986\" />\n       <path d=\"M11.9986 7V5C11.9986 4.44772 12.4463 4 12.9986 4C13.5509 4 13.9986 3.55228 13.9986 3V2\" />\n      </m.g>\n      <m.path\n       d=\"M1.9986 2L21.9986 22\"\n       strokeDasharray=\"30\"\n       strokeDashoffset=\"0\"\n       variants={slashVariants}\n      />\n     </m.svg>\n    </m.div>\n   </LazyMotion>\n  );\n },\n);\n\nKeyboardOffIcon.displayName = \"KeyboardOffIcon\";\nexport { KeyboardOffIcon };\n",
      "type": "registry:ui"
    }
  ]
}