{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "brand-ollama-icon",
  "dependencies": ["motion"],
  "devDependencies": [],
  "registryDependencies": [],
  "files": [
    {
      "path": "icons/brand-ollama-icon.tsx",
      "content": "import { forwardRef, useImperativeHandle, useCallback } from \"react\";\nimport type { AnimatedIconHandle, AnimatedIconProps } from \"./types\";\nimport { motion, useAnimate } from \"motion/react\";\n\nconst BrandOllamaIcon = forwardRef<AnimatedIconHandle, AnimatedIconProps>(\n  ({ size = 24, color = \"currentColor\", className = \"\" }, ref) => {\n    const [scope, animate] = useAnimate();\n\n    const start = useCallback(() => {\n      // Body breathing effect - subtle scale\n      animate(\n        \".ollama-body\",\n        { scale: [1, 1.03, 1] },\n        { duration: 0.8, repeat: Infinity, ease: \"easeInOut\" },\n      );\n\n      // Eyes blink - immediate and noticeable\n      animate(\n        \".ollama-eye\",\n        { scaleY: [1, 0.1, 1] },\n        { duration: 0.2, delay: 0.3, repeat: Infinity, repeatDelay: 2 },\n      );\n\n      // Nose wiggle - playful\n      animate(\n        \".ollama-nose\",\n        { y: [0, -1, 1, 0] },\n        { duration: 0.3, repeat: Infinity, repeatDelay: 1 },\n      );\n    }, [animate]);\n\n    const stop = useCallback(() => {\n      animate(\".ollama-body\", { scale: 1 }, { duration: 0.2 });\n      animate(\".ollama-eye\", { scaleY: 1 }, { duration: 0.2 });\n      animate(\".ollama-nose\", { y: 0 }, { duration: 0.2 });\n    }, [animate]);\n\n    useImperativeHandle(ref, () => ({\n      startAnimation: start,\n      stopAnimation: stop,\n    }));\n\n    return (\n      <motion.svg\n        ref={scope}\n        width={size}\n        height={size}\n        viewBox=\"0 0 24 24\"\n        fill={color}\n        fillRule=\"evenodd\"\n        className={className}\n        xmlns=\"http://www.w3.org/2000/svg\"\n        onHoverStart={start}\n        onHoverEnd={stop}\n      >\n        <title>Ollama</title>\n\n        {/* Outer body/shell (without ears) */}\n        <motion.path\n          className=\"ollama-body\"\n          style={{ transformBox: \"fill-box\", transformOrigin: \"center bottom\" }}\n          d=\"M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042z\"\n        />\n\n        {/* Face outline */}\n        <motion.path\n          className=\"ollama-face\"\n          style={{ transformBox: \"fill-box\", transformOrigin: \"center\" }}\n          d=\"M12.021 10.18c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643z\"\n        />\n\n        {/* Nose */}\n        <motion.path\n          className=\"ollama-nose\"\n          style={{ transformBox: \"fill-box\", transformOrigin: \"center\" }}\n          d=\"M12.683 12.286l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051z\"\n        />\n\n        {/* Left eye */}\n        <motion.circle\n          className=\"ollama-eye\"\n          style={{ transformBox: \"fill-box\", transformOrigin: \"center\" }}\n          cx=\"7.643\"\n          cy=\"11.238\"\n          r=\"0.868\"\n        />\n\n        {/* Right eye */}\n        <motion.circle\n          className=\"ollama-eye\"\n          style={{ transformBox: \"fill-box\", transformOrigin: \"center\" }}\n          cx=\"16.349\"\n          cy=\"11.238\"\n          r=\"0.868\"\n        />\n      </motion.svg>\n    );\n  },\n);\n\nBrandOllamaIcon.displayName = \"BrandOllamaIcon\";\nexport default BrandOllamaIcon;\n",
      "type": "registry:ui"
    },
    {
      "path": "icons/types.ts",
      "content": "import type { SVGProps } from \"react\";\n\n/** Standard stroke width for 24×24 outline icons */\nexport const DEFAULT_STROKE_WIDTH = 2;\n\n/** Scale stroke to match DEFAULT_STROKE_WIDTH on non-24 viewBoxes */\nexport function scaledStrokeWidth(\n  strokeWidth: number,\n  viewBoxSize: number,\n): number {\n  return strokeWidth * (viewBoxSize / 24);\n}\n\nexport type IconEasing =\n  | \"linear\"\n  | \"easeIn\"\n  | \"easeOut\"\n  | \"easeInOut\"\n  | \"circIn\"\n  | \"circOut\"\n  | \"circInOut\"\n  | \"backIn\"\n  | \"backOut\"\n  | \"backInOut\"\n  | \"anticipate\";\n\nexport interface AnimatedIconProps extends Omit<\n  SVGProps<SVGSVGElement>,\n  | \"ref\"\n  | \"onAnimationStart\"\n  | \"onAnimationEnd\"\n  | \"onAnimationIteration\"\n  | \"onDrag\"\n  | \"onDragEnd\"\n  | \"onDragEnter\"\n  | \"onDragExit\"\n  | \"onDragLeave\"\n  | \"onDragOver\"\n  | \"onDragStart\"\n  | \"onDrop\"\n  | \"values\"\n> {\n  /** Icon size in pixels or CSS string */\n  size?: number | string;\n  /** Icon color (defaults to currentColor) */\n  color?: string;\n  /** SVG stroke width */\n  strokeWidth?: number;\n  /** Additional CSS classes */\n  className?: string;\n}\n\nexport interface AnimatedIconHandle {\n  startAnimation: () => void;\n  stopAnimation: () => void;\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}
