{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "layout-dashboard",
  "type": "registry:ui",
  "addGlobalCss": false,
  "registryDependencies": [],
  "dependencies": [
    "motion"
  ],
  "devDependencies": [],
  "files": [
    {
      "path": "layout-dashboard-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 LayoutDashboardIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface LayoutDashboardIconProps 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 LayoutDashboardIcon = forwardRef<\n LayoutDashboardIconHandle,\n LayoutDashboardIconProps\n>(\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 tileVariants = (delay: number): Variants => ({\n   normal: { scale: 1 },\n   animate: {\n    scale: [1, 0.85, 1.05, 1],\n    transition: {\n     duration: 0.5 * duration,\n     ease: \"easeInOut\",\n     times: [0, 0.35, 0.7, 1],\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=\"M2.49634 5.5C2.49634 4.08579 2.49634 3.37868 2.93568 2.93934C3.37502 2.5 4.08212 2.5 5.49634 2.5H6.99616C8.41037 2.5 9.11748 2.5 9.55682 2.93934C9.99616 3.37868 9.99616 4.08579 9.99616 5.5V10C9.99616 11.4142 9.99616 12.1213 9.55682 12.5607C9.11748 13 8.41037 13 6.99616 13H5.49634C4.08212 13 3.37502 13 2.93568 12.5607C2.49634 12.1213 2.49634 11.4142 2.49634 10V5.5Z\"\n       variants={tileVariants(0)}\n       style={{\n        transformBox: \"view-box\",\n        originX: \"6.25px\",\n        originY: \"7.75px\",\n       }}\n      />\n      <m.path\n       d=\"M2.49616 19.2501C2.49613 18.5512 2.49611 18.2017 2.61029 17.926C2.76252 17.5585 3.05454 17.2664 3.42209 17.1142C3.69775 17 4.04722 17 4.74616 17H7.74597C8.44486 17 8.7943 17 9.06996 17.1142C9.43749 17.2664 9.7295 17.5584 9.88175 17.9259C9.99593 18.2016 9.99595 18.551 9.99597 19.2499C9.996 19.9488 9.99602 20.2983 9.88184 20.574C9.72961 20.9415 9.43759 21.2336 9.07004 21.3858C8.79438 21.5 8.44491 21.5 7.74597 21.5H4.74616C4.04727 21.5 3.69783 21.5 3.42217 21.3858C3.05464 21.2336 2.76263 20.9416 2.61038 20.5741C2.4962 20.2984 2.49618 19.949 2.49616 19.2501Z\"\n       variants={tileVariants(0.2)}\n       style={{\n        transformBox: \"view-box\",\n        originX: \"6.25px\",\n        originY: \"19.25px\",\n       }}\n      />\n      <m.path\n       d=\"M13.9962 4.75C13.9962 4.05109 13.9962 3.70163 14.1103 3.42597C14.2626 3.05843 14.5546 2.76642 14.9221 2.61418C15.1978 2.5 15.5472 2.5 16.2462 2.5H19.246C19.9449 2.5 20.2943 2.5 20.57 2.61418C20.9375 2.76642 21.2296 3.05843 21.3818 3.42597C21.496 3.70163 21.496 4.05109 21.496 4.75C21.496 5.44891 21.496 5.79837 21.3818 6.07403C21.2296 6.44157 20.9375 6.73358 20.57 6.88582C20.2943 7 19.9449 7 19.246 7H16.2462C15.5472 7 15.1978 7 14.9221 6.88582C14.5546 6.73358 14.2626 6.44157 14.1103 6.07403C13.9962 5.79837 13.9962 5.44891 13.9962 4.75Z\"\n       variants={tileVariants(0.1)}\n       style={{\n        transformBox: \"view-box\",\n        originX: \"17.75px\",\n        originY: \"4.75px\",\n       }}\n      />\n      <m.path\n       d=\"M13.9962 14.0001C13.9962 12.5858 13.9962 11.8787 14.4355 11.4393C14.8749 11 15.582 11 16.9962 11H18.496C19.9102 11 20.6173 11 21.0567 11.4393C21.496 11.8787 21.496 12.5858 21.496 13.9999L21.4961 18.4999C21.4961 19.9142 21.4961 20.6213 21.0568 21.0607C20.6175 21.5 19.9103 21.5 18.4961 21.5H16.9963C15.5821 21.5 14.875 21.5 14.4357 21.0607C13.9963 20.6213 13.9963 19.9142 13.9963 18.5001L13.9962 14.0001Z\"\n       variants={tileVariants(0.3)}\n       style={{\n        transformBox: \"view-box\",\n        originX: \"17.75px\",\n        originY: \"16.25px\",\n       }}\n      />\n     </m.svg>\n    </m.div>\n   </LazyMotion>\n  );\n },\n);\n\nLayoutDashboardIcon.displayName = \"LayoutDashboardIcon\";\nexport { LayoutDashboardIcon };\n",
      "type": "registry:ui"
    }
  ]
}