{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef, useState, CSSProperties } from \"react\";\nimport { gsap } from \"gsap\";\n\n/**\n * Type definition for masonry images\n */\nexport interface MasonryImage {\n  url: string;\n  aspectRatio?: string; // e.g., \"16:9\", \"4:3\", \"1:1\" - defaults to \"4:3\"\n  width?: number; // desired width in pixels - defaults to 250px\n  alt: string;\n}\n\ninterface MasonryTile {\n  id: number;\n  image: MasonryImage;\n  rotation: number;\n  row: number;\n  column: number;\n  initialX: number;\n  initialY: number;\n  element?: HTMLDivElement;\n}\n\n/**\n * Props for AnimatedMasonryBackground component\n */\nexport interface AnimatedMasonryBackgroundProps {\n  /** Array of images to display in the masonry layout */\n  images?: MasonryImage[];\n\n  /** Animation speed in seconds (default: 120) */\n  animationSpeed?: number;\n\n  /** Container rotation angle in degrees (default: 40) */\n  rotationAngle?: number;\n\n  /** Gap between tiles in pixels (default: 30) */\n  gap?: number;\n\n  /** Default tile width in pixels (default: 250) */\n  defaultTileWidth?: number;\n\n  /** Z-index for the background (default: -10) */\n  zIndex?: number;\n\n  /** Additional CSS classes */\n  className?: string;\n\n  /** Background gradient colors (default: from-purple-50 to-blue-50) */\n  gradientFrom?: string;\n  gradientTo?: string;\n\n  /** Enable/disable hover effects (default: true) */\n  enableHoverEffects?: boolean;\n\n  /** Fade in duration in seconds (default: 1) */\n  fadeInDuration?: number;\n\n  /** Custom Image component (optional) */\n  ImageComponent?: React.ComponentType<any>;\n\n  /** Number of columns for mobile/tablet/desktop (default: [2, 3, 4]) */\n  responsiveColumns?: [number, number, number];\n}\n\n// Default images if none provided\nconst DEFAULT_IMAGES: MasonryImage[] = [\n  {\n    url: \"https://images.unsplash.com/photo-1579546929518-9e396f3cc809\",\n    aspectRatio: \"1:1\",\n    alt: \"Abstract gradient background\",\n  },\n  {\n    url: \"https://images.unsplash.com/photo-1557672172-298e090bd0f1\",\n    aspectRatio: \"16:9\",\n    alt: \"Modern architecture\",\n  },\n  {\n    url: \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4\",\n    aspectRatio: \"3:2\",\n    alt: \"Mountain landscape\",\n  },\n  {\n    url: \"https://images.unsplash.com/photo-1451187580459-43490279c0fa\",\n    aspectRatio: \"4:3\",\n    alt: \"Space and stars\",\n  },\n  {\n    url: \"https://images.unsplash.com/photo-1558591710-4b4a1ae0f04d\",\n    aspectRatio: \"1:1\",\n    alt: \"Colorful abstract art\",\n  },\n];\n\n/**\n * Standard HTML Image component wrapper\n */\nconst StandardImage: React.FC<{\n  src: string;\n  alt: string;\n  style?: CSSProperties;\n  className?: string;\n  onError?: (e: React.SyntheticEvent<HTMLImageElement>) => void;\n}> = ({ src, alt, style, className, onError }) => (\n  <img\n    src={src}\n    alt={alt}\n    style={{\n      ...style,\n      width: \"100%\",\n      height: \"100%\",\n      objectFit: \"cover\",\n      position: \"absolute\",\n      top: 0,\n      left: 0,\n    }}\n    className={className}\n    onError={onError}\n    loading=\"lazy\"\n  />\n);\n\n/**\n * AnimatedMasonryBackground Component\n *\n * A beautiful animated masonry background with GSAP-powered smooth animations.\n * Perfect for hero sections, login pages, and modern web applications.\n *\n * Features:\n * - Customizable images, speed, rotation, and styling\n * - Responsive masonry layout\n * - GPU-accelerated smooth animations\n * - Support for both React and Next.js\n * - TypeScript support with full type definitions\n *\n * @example\n * ```tsx\n * import AnimatedMasonryBackground from 'react-animated-masonry';\n *\n * // Basic usage with defaults\n * <AnimatedMasonryBackground />\n *\n * // Custom configuration\n * <AnimatedMasonryBackground\n *   images={myImages}\n *   animationSpeed={90}\n *   rotationAngle={45}\n *   gap={40}\n * />\n * ```\n */\nexport const AnimatedMasonryBackground: React.FC<\n  AnimatedMasonryBackgroundProps\n> = ({\n  images = DEFAULT_IMAGES,\n  animationSpeed = 120,\n  rotationAngle = 40,\n  gap = 30,\n  defaultTileWidth = 250,\n  zIndex = -10,\n  className = \"\",\n  gradientFrom = \"from-purple-50\",\n  gradientTo = \"to-blue-50\",\n  enableHoverEffects = true,\n  fadeInDuration = 1,\n  ImageComponent,\n  responsiveColumns = [2, 3, 4],\n}) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const tilesRef = useRef<MasonryTile[]>([]);\n  const [tiles, setTiles] = useState<MasonryTile[]>([]);\n  const [isMounted, setIsMounted] = useState(false);\n\n  // Determine which Image component to use\n  let FinalImageComponent: any = ImageComponent || StandardImage;\n\n  // Responsive column calculation\n  const getColumnCount = () => {\n    if (typeof window === \"undefined\") return responsiveColumns[2];\n    const width = window.innerWidth;\n    if (width < 640) return responsiveColumns[0]; // Mobile\n    if (width < 1024) return responsiveColumns[1]; // Tablet\n    return responsiveColumns[2]; // Desktop\n  };\n\n  /**\n   * Parse aspect ratio from string format\n   */\n  const parseAspectRatio = (aspectRatio?: string): number => {\n    if (!aspectRatio) return 4 / 3;\n\n    const parts = aspectRatio.split(\":\").map(Number);\n    if (parts.length !== 2 || parts[0] <= 0 || parts[1] <= 0) {\n      return 4 / 3;\n    }\n\n    return parts[0] / parts[1];\n  };\n\n  /**\n   * Calculate masonry positioning for each tile\n   */\n  const calculateMasonryPositions = (columns: number): MasonryTile[] => {\n    const tiles: MasonryTile[] = [];\n    const columnHeights = new Array(columns).fill(0);\n    const columnXPositions = new Array(columns)\n      .fill(0)\n      .map((_, i) => i * (defaultTileWidth + gap));\n\n    images.forEach((image, index) => {\n      const minHeight = Math.min(...columnHeights);\n      const column = columnHeights.indexOf(minHeight);\n\n      const tileWidth = image.width || defaultTileWidth;\n      const aspectRatio = parseAspectRatio(image.aspectRatio);\n      const tileHeight = Math.round(tileWidth / aspectRatio);\n\n      const tile: MasonryTile = {\n        id: index,\n        image,\n        rotation: rotationAngle,\n        row: Math.floor(columnHeights[column] / 300),\n        column,\n        initialX: columnXPositions[column],\n        initialY: columnHeights[column],\n      };\n\n      tiles.push(tile);\n      columnHeights[column] += tileHeight + gap;\n      columnXPositions[column] = Math.max(\n        columnXPositions[column],\n        tile.initialX + tileWidth + gap\n      );\n    });\n\n    return tiles;\n  };\n\n  /**\n   * Initialize GSAP animation\n   */\n  const initializeAnimation = () => {\n    if (!containerRef.current || tilesRef.current.length === 0) return;\n\n    const containerWidth = window.innerWidth;\n    const containerHeight = window.innerHeight;\n    const diagonalDistance = Math.sqrt(\n      containerWidth ** 2 + containerHeight ** 2\n    );\n    const travelDistance = diagonalDistance * 1.5;\n    const staggerTime = animationSpeed / tilesRef.current.length;\n\n    tilesRef.current.forEach((tile, index) => {\n      if (!tile.element) return;\n\n      const delay = index * staggerTime;\n      const startX = tile.initialX - travelDistance;\n      const startY = tile.initialY - travelDistance;\n      const endX = tile.initialX + travelDistance;\n      const endY = tile.initialY + travelDistance;\n\n      gsap.set(tile.element, {\n        x: startX,\n        y: startY,\n        transformOrigin: \"center center\",\n        force3D: true,\n        willChange: \"transform\",\n        opacity: 0,\n      });\n\n      gsap.to(tile.element, {\n        x: endX,\n        y: endY,\n        opacity: 1,\n        duration: animationSpeed,\n        delay: delay,\n        ease: \"none\",\n        repeat: -1,\n        repeatDelay: 0,\n        onStart: () => {\n          if (tile.element) {\n            gsap.to(tile.element, {\n              opacity: 1,\n              duration: fadeInDuration,\n              ease: \"power2.out\",\n            });\n          }\n        },\n        onRepeat: () => {\n          if (tile.element) {\n            gsap.set(tile.element, {\n              x: startX,\n              y: startY,\n              opacity: 0,\n              force3D: true,\n            });\n            gsap.to(tile.element, {\n              opacity: 1,\n              duration: fadeInDuration,\n              ease: \"power2.out\",\n            });\n          }\n        },\n      });\n    });\n  };\n\n  /**\n   * Handle responsive layout changes\n   */\n  const handleResize = () => {\n    const newColumns = getColumnCount();\n    const newTiles = calculateMasonryPositions(newColumns);\n\n    tilesRef.current = newTiles.map((newTile, index) => ({\n      ...newTile,\n      element: tilesRef.current[index]?.element,\n    }));\n\n    setTiles([...newTiles]);\n    setTimeout(initializeAnimation, 100);\n  };\n\n  // Initialize component\n  useEffect(() => {\n    setIsMounted(true);\n\n    const columns = getColumnCount();\n    const initialTiles = calculateMasonryPositions(columns);\n    tilesRef.current = initialTiles;\n    setTiles(initialTiles);\n\n    const animationTimer = setTimeout(() => {\n      initializeAnimation();\n    }, 100);\n\n    const handleResizeEvent = () => handleResize();\n    window.addEventListener(\"resize\", handleResizeEvent);\n\n    return () => {\n      clearTimeout(animationTimer);\n      gsap.killTweensOf(tilesRef.current.map((t) => t.element));\n      window.removeEventListener(\"resize\", handleResizeEvent);\n    };\n  }, [animationSpeed, images]);\n\n  if (!isMounted) {\n    return (\n      <div\n        className={`fixed inset-0 bg-gradient-to-br ${gradientFrom} ${gradientTo}`}\n        style={{ zIndex }}\n      />\n    );\n  }\n\n  const isNextJSImage = FinalImageComponent !== StandardImage;\n\n  return (\n    <div\n      ref={containerRef}\n      className={`fixed inset-0 overflow-hidden pointer-events-none ${className}`}\n      style={{ zIndex }}\n      role=\"img\"\n      aria-label=\"Animated masonry background\"\n    >\n      <div\n        className={`absolute inset-0 bg-gradient-to-br ${gradientFrom}/30 via-blue-50/20 ${gradientTo}/30`}\n      />\n\n      {tiles.map((tile, index) => {\n        const aspectRatio = parseAspectRatio(tile.image.aspectRatio);\n        const tileWidth = tile.image.width || defaultTileWidth;\n        const tileHeight = Math.round(tileWidth / aspectRatio);\n\n        return (\n          <div\n            key={tile.id}\n            ref={(el) => {\n              if (el) {\n                tilesRef.current[index].element = el;\n              }\n            }}\n            className=\"absolute will-change-transform\"\n            style={{\n              left: \"0px\",\n              top: \"0px\",\n              width: `${tileWidth}px`,\n              height: `${tileHeight}px`,\n            }}\n          >\n            <div\n              className={`relative w-full h-full ${\n                enableHoverEffects ? \"group\" : \"\"\n              }`}\n              style={{\n                transform: `rotate(${tile.rotation}deg)`,\n                transformOrigin: \"center center\",\n              }}\n            >\n              <div\n                className={`relative w-full h-full overflow-hidden rounded-lg shadow-lg ${\n                  enableHoverEffects\n                    ? \"transition-all duration-300 group-hover:shadow-xl\"\n                    : \"\"\n                }`}\n                style={{\n                  background:\n                    \"linear-gradient(135deg, rgba(147, 51, 234, 0.1) 0%, rgba(59, 130, 246, 0.1) 100%)\",\n                  transform: `rotate(${-tile.rotation}deg)`,\n                  transformOrigin: \"center center\",\n                }}\n              >\n                {isNextJSImage ? (\n                  <FinalImageComponent\n                    src={tile.image.url}\n                    alt={tile.image.alt}\n                    fill\n                    className={`object-cover ${\n                      enableHoverEffects\n                        ? \"transition-transform duration-500 group-hover:scale-105\"\n                        : \"\"\n                    }`}\n                    sizes={`${tileWidth}px`}\n                    loading=\"lazy\"\n                    unoptimized\n                  />\n                ) : (\n                  <FinalImageComponent\n                    src={tile.image.url}\n                    alt={tile.image.alt}\n                    className={`object-cover ${\n                      enableHoverEffects\n                        ? \"transition-transform duration-500 group-hover:scale-105\"\n                        : \"\"\n                    }`}\n                    onError={(e: React.SyntheticEvent<HTMLImageElement>) => {\n                      const target = e.target as HTMLImageElement;\n                      target.style.display = \"none\";\n                    }}\n                  />\n                )}\n\n                <div className=\"absolute inset-0 bg-gradient-to-t from-black/20 via-transparent to-white/10 opacity-60\" />\n              </div>\n            </div>\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default AnimatedMasonryBackground;\n"],"mappings":"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","names":["tiles"]}