{"version":3,"file":"ngfly-carousel.mjs","sources":["../../../../src/lib/services/carousel.service.ts","../../../../src/lib/utils/animation.ts","../../../../src/lib/components/carousel/carousel.component.ts","../../../../src/lib/components/carousel/carousel.component.html","../../../../src/lib/directives/lazy-load.directive.ts","../../../../src/lib/carousel.module.ts","../../../../src/lib/index.ts","../../../../src/public-api.ts","../../../../src/ngfly-carousel.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { NavButtonShape, IndicatorStyle } from '../interfaces/carousel-config.interface';\n\n/**\n * Default carousel configuration values\n */\nexport const CAROUSEL_DEFAULTS = {\n  NAVIGATION_SIZE: '32px',\n  CONTENT_PADDING: '10px',\n  ANIMATION_DURATION: '300ms',\n  ANIMATION_TIMING: 'ease',\n  EMPTY_STATE_HEIGHT: '200px',\n  NAVIGATION_PREV_ICON: '❮',\n  NAVIGATION_NEXT_ICON: '❯',\n  INDICATOR_SIZE: '10px',\n  INDICATOR_SPACING: '5px',\n  INDICATOR_ACTIVE_COLOR: '#333',\n  INDICATOR_INACTIVE_COLOR: '#ccc',\n  INDICATOR_ACTIVE_OPACITY: '1',\n  INDICATOR_INACTIVE_OPACITY: '0.5',\n  INDICATOR_ANIMATION_DURATION: '250ms',\n  INDICATOR_ANIMATION_TIMING: 'ease',\n  INDICATOR_TRANSITION: 'all 0.3s ease-in-out'\n};\n\n/**\n * Service for carousel-related functionality and state management\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class CarouselService {\n  // Visibility state\n  private isVisibleSubject = new BehaviorSubject<boolean>(true);\n  isVisible$ = this.isVisibleSubject.asObservable();\n\n  /**\n   * Set carousel visibility\n   * @param visible Whether carousel is visible\n   */\n  setVisibility(visible: boolean): void {\n    this.isVisibleSubject.next(visible);\n  }\n\n  /**\n   * Get button shape styles based on the configured shape\n   * @param shape Button shape type\n   * @returns Style object\n   */\n  getButtonShapeStyles(shape?: NavButtonShape): Record<string, string> {\n    const styles: Record<string, string> = {};\n    \n    switch (shape) {\n      case 'circle':\n        styles['borderRadius'] = '50%';\n        break;\n      case 'rounded':\n        styles['borderRadius'] = '8px';\n        break;\n      case 'square':\n      default:\n        styles['borderRadius'] = '0';\n    }\n    \n    return styles;\n  }\n\n  /**\n   * Get indicator styles\n   * @param config Indicator style configuration\n   * @param isActive Whether to get active or inactive styles\n   * @returns Style object\n   */\n  getIndicatorStyles(config?: IndicatorStyle, isActive = false): Record<string, string> {\n    // Base styles for both active and inactive\n    const baseStyles: Record<string, string> = {\n      width: CAROUSEL_DEFAULTS.INDICATOR_SIZE,\n      height: CAROUSEL_DEFAULTS.INDICATOR_SIZE,\n      display: 'inline-block',\n      transition: config?.transition || (config?.animation?.timing \n        ? `all ${config.animation.duration || CAROUSEL_DEFAULTS.INDICATOR_ANIMATION_DURATION} ${config.animation.timing}`\n        : CAROUSEL_DEFAULTS.INDICATOR_TRANSITION),\n      cursor: 'pointer',\n      margin: `0 ${config?.spacing || CAROUSEL_DEFAULTS.INDICATOR_SPACING}`,\n      borderRadius: '50%' // Default circle shape\n    };\n    \n    // Active/inactive specific styles\n    if (isActive) {\n      baseStyles['backgroundColor'] = CAROUSEL_DEFAULTS.INDICATOR_ACTIVE_COLOR;\n      baseStyles['opacity'] = CAROUSEL_DEFAULTS.INDICATOR_ACTIVE_OPACITY;\n      baseStyles['transform'] = 'scale(1.2)';\n      \n      // Add animation if enabled and not explicitly disabled\n      const animEnabled = config?.animation?.enabled !== false;\n      const animType = config?.animation?.type || 'pulse';\n      \n      if (animEnabled && animType !== 'none') {\n        if (animType === 'custom' && config?.animation?.custom) {\n          baseStyles['animation'] = config.animation.custom;\n        } else if (animType === 'pulse') {\n          baseStyles['animation'] = `indicator-pulse 1s infinite alternate`;\n        }\n      }\n      \n      // Apply custom active styles if provided (these override defaults)\n      if (config?.active) {\n        Object.assign(baseStyles, config.active);\n      }\n    } else {\n      baseStyles['backgroundColor'] = CAROUSEL_DEFAULTS.INDICATOR_INACTIVE_COLOR;\n      baseStyles['opacity'] = CAROUSEL_DEFAULTS.INDICATOR_INACTIVE_OPACITY;\n      baseStyles['transform'] = 'scale(1)';\n      \n      // Apply custom inactive styles if provided (these override defaults)\n      if (config?.inactive) {\n        Object.assign(baseStyles, config.inactive);\n      }\n    }\n    \n    return baseStyles;\n  }\n\n  /**\n   * Get indicator container styles based on configuration\n   * @param config Indicator style configuration\n   * @returns Style object for container\n   */\n  getIndicatorContainerStyles(config?: IndicatorStyle): Record<string, string> {\n    const styles: Record<string, string> = {\n      position: 'absolute',\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center',\n      zIndex: '100',\n      padding: '10px',\n      pointerEvents: 'auto'\n    };\n    \n    // Default position (bottom center)\n    styles['bottom'] = config?.position?.bottom || '4px';\n    styles['left'] = config?.position?.left || '50%';\n    styles['transform'] = 'translateX(-50%)';\n    \n    // Override with custom positions if provided\n    if (config?.position) {\n      Object.keys(config.position).forEach(key => {\n        const position = config.position as Record<string, string | undefined>;\n        if (position[key]) {\n          styles[key] = position[key] as string;\n        }\n      });\n      \n      // Handle transformations for centered positioning\n      if (config.position.left === '50%' && !styles['transform']) {\n        styles['transform'] = 'translateX(-50%)';\n      } else if (config.position.top === '50%' && !styles['transform']) {\n        styles['transform'] = 'translateY(-50%)';\n      }\n    }\n    \n    // Apply custom container styles if provided\n    if (config?.container) {\n      Object.assign(styles, config.container);\n    }\n    \n    return styles;\n  }\n\n  /**\n   * Get navigation icons based on orientation\n   * @param isVertical Whether carousel is vertical\n   * @param icons Custom icon configuration\n   * @returns Previous and next icons\n   */\n  getNavigationIcons(isVertical: boolean, icons?: any): { prev: string; next: string } {\n    const defaultIcons = {\n      horizontal: {\n        prev: CAROUSEL_DEFAULTS.NAVIGATION_PREV_ICON,\n        next: CAROUSEL_DEFAULTS.NAVIGATION_NEXT_ICON\n      },\n      vertical: {\n        prev: CAROUSEL_DEFAULTS.NAVIGATION_PREV_ICON, \n        next: CAROUSEL_DEFAULTS.NAVIGATION_NEXT_ICON\n      }\n    };\n\n    const customIcons = icons || {};\n    const verticalIcons = customIcons.vertical || {};\n\n    return {\n      prev: isVertical\n        ? (verticalIcons.prev || defaultIcons.vertical.prev)\n        : (customIcons.prev || defaultIcons.horizontal.prev),\n      next: isVertical\n        ? (verticalIcons.next || defaultIcons.vertical.next)\n        : (customIcons.next || defaultIcons.horizontal.next)\n    };\n  }\n\n  /**\n   * Parse time string to milliseconds\n   * @param time Time string (e.g., '300ms', '0.5s')\n   * @returns Time in milliseconds\n   */\n  parseTimeToMs(time: string): number {\n    if (!time) return 300; // Default 300ms\n    \n    if (time.endsWith('ms')) {\n      return parseInt(time.slice(0, -2), 10);\n    }\n    \n    if (time.endsWith('s')) {\n      return parseFloat(time.slice(0, -1)) * 1000;\n    }\n    \n    return parseInt(time, 10);\n  }\n} ","/**\n * Easing functions for animations\n */\nexport const easings = {\n  linear: (t: number) => t,\n  ease: (t: number) => t,\n  easeInQuad: (t: number) => t * t,\n  easeOutQuad: (t: number) => t * (2 - t),\n  easeInOutQuad: (t: number) => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t,\n  easeInCubic: (t: number) => t * t * t,\n  easeOutCubic: (t: number) => (--t) * t * t + 1,\n  easeInOutCubic: (t: number) => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n};\n\n/**\n * Converts a CSS timing function to its JavaScript equivalent\n * @param timingFunction CSS timing function string\n */\nexport function getCssTimingFunction(timingFunction: string): (t: number) => number {\n  switch (timingFunction) {\n    case 'linear': return easings.linear;\n    case 'ease-in': return easings.easeInQuad;\n    case 'ease-out': return easings.easeOutQuad;\n    case 'ease-in-out': return easings.easeInOutQuad;\n    case 'ease': return easings.ease;\n    default:\n      return easings.easeInOutQuad;\n  }\n}\n\n/**\n * Creates a CSS transform string for translating elements\n * \n * @param position - Translation position in pixels\n * @param isVertical - Whether to use vertical translation\n * @returns CSS transform string\n */\nexport function createTranslation(position: number, isVertical: boolean): string {\n  return isVertical \n    ? `translateY(-${position}px)` \n    : `translateX(-${position}px)`;\n}\n\n/**\n * Parse time string to milliseconds\n * @param time Time string in the format: '300ms' or '0.3s'\n * @param defaultValue Default value in ms\n * @returns Time in milliseconds\n */\nexport function parseTimeToMs(time: string | undefined, defaultValue: number = 300): number {\n  if (!time) return defaultValue;\n  \n  if (time.endsWith('ms')) {\n    return parseInt(time, 10);\n  } else if (time.endsWith('s')) {\n    return parseFloat(time) * 1000;\n  }\n  \n  return parseInt(time, 10) || defaultValue;\n}\n\n/**\n * Calculate scroll amount based on configuration\n * @param scrollSize Scroll size specification\n * @param containerSize Container width or height\n * @param scrollSizeMap Map of predefined scroll sizes\n * @param defaultPercentage Default percentage if no size specified\n * @returns Scroll amount in pixels\n */\nexport function calculateScrollAmount(\n  scrollSize: string | undefined, \n  containerSize: number,\n  scrollSizeMap: Record<string, number>,\n  defaultPercentage: number = 0.8\n): number {\n  if (!scrollSize) return containerSize * defaultPercentage;\n  \n  // If size is a percentage\n  if (scrollSize.endsWith('%')) {\n    const percentage: number = parseFloat(scrollSize) / 100;\n    return containerSize * percentage;\n  }\n  \n  // If size is a predefined value\n  if (scrollSizeMap[scrollSize]) {\n    return scrollSizeMap[scrollSize];\n  }\n  \n  // If size is a pixel value\n  if (scrollSize.endsWith('px')) {\n    return parseFloat(scrollSize);\n  }\n  \n  return containerSize * defaultPercentage;\n}\n\n/**\n * Performs a smooth scroll animation\n * @param element Element to scroll\n * @param to Target scroll position\n * @param duration Duration in milliseconds\n * @param easing Easing function\n */\nexport function smoothScroll(\n  element: HTMLElement,\n  to: number,\n  duration: number = 300,\n  easing: (t: number) => number = easings.easeInOutQuad\n): Promise<void> {\n  return new Promise(resolve => {\n    const start = element.scrollLeft;\n    const change = to - start;\n    const startTime = performance.now();\n    \n    function animateScroll(currentTime: number) {\n      const elapsedTime = currentTime - startTime;\n      if (elapsedTime >= duration) {\n        element.scrollLeft = to;\n        resolve();\n        return;\n      }\n      \n      const progress = elapsedTime / duration;\n      const easedProgress = easing(progress);\n      element.scrollLeft = start + change * easedProgress;\n      \n      requestAnimationFrame(animateScroll);\n    }\n    \n    requestAnimationFrame(animateScroll);\n  });\n}\n\n/**\n * Performs a smooth vertical scroll animation\n * @param element Element to scroll\n * @param to Target scroll position\n * @param duration Duration in milliseconds\n * @param easing Easing function\n */\nexport function smoothScrollVertical(\n  element: HTMLElement,\n  to: number,\n  duration: number = 300,\n  easing: (t: number) => number = easings.easeInOutQuad\n): Promise<void> {\n  return new Promise(resolve => {\n    const start = element.scrollTop;\n    const change = to - start;\n    const startTime = performance.now();\n    \n    function animateScroll(currentTime: number) {\n      const elapsedTime = currentTime - startTime;\n      if (elapsedTime >= duration) {\n        element.scrollTop = to;\n        resolve();\n        return;\n      }\n      \n      const progress = elapsedTime / duration;\n      const easedProgress = easing(progress);\n      element.scrollTop = start + change * easedProgress;\n      \n      requestAnimationFrame(animateScroll);\n    }\n    \n    requestAnimationFrame(animateScroll);\n  });\n} ","import {\n  Component,\n  Input,\n  ContentChild,\n  TemplateRef,\n  ElementRef,\n  AfterViewInit,\n  OnDestroy,\n  ViewChild,\n  ChangeDetectorRef,\n  OnInit,\n  NgZone,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  Output,\n  EventEmitter,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil, debounceTime } from 'rxjs/operators';\nimport {\n  CarouselConfig,\n  ScrollSize,\n} from '../../interfaces/carousel-config.interface';\nimport {\n  CarouselService,\n  CAROUSEL_DEFAULTS,\n} from '../../services/carousel.service';\nimport { createTranslation } from '../../utils/animation';\n\n@Component({\n  selector: 'carousel',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './carousel.component.html',\n  styleUrls: ['./carousel.component.scss'],\n  providers: [CarouselService],\n})\nexport class CarouselComponent\n  implements OnInit, AfterViewInit, OnDestroy, OnChanges\n{\n  private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n  private readonly ngZone: NgZone = inject(NgZone);\n  private readonly carouselService: CarouselService = inject(CarouselService);\n\n  @Input() slides: any[] = [];\n  @Input() configs: CarouselConfig = {};\n  @Input() activeIndex = 0;\n\n  @Output() onPrevClick = new EventEmitter<number>();\n  @Output() onNextClick = new EventEmitter<number>();\n\n  /**\n   * Template for rendering carousel slides & empty state\n   */\n  @ContentChild('carouselItem') itemTemplate!: TemplateRef<any>;\n  @ContentChild('emptyState') emptyStateTemplate!: TemplateRef<any>;\n\n  /**\n   * Reference to the carousel track element & wrapper element\n   */\n  @ViewChild('track') trackElement!: ElementRef<HTMLElement>;\n  @ViewChild('wrapper') wrapperElement!: ElementRef<HTMLElement>;\n\n  // Private state variables\n  private currentTranslate = 0;\n  currentIndex = this.activeIndex || 0;\n  private destroy$ = new Subject<void>();\n  private autoplayInterval?: ReturnType<typeof setInterval>;\n  private itemWidths: number[] = [];\n  private itemHeights: number[] = [];\n  private containerWidth = 0;\n  private containerHeight = 0;\n  private intersectionObserver: IntersectionObserver | null = null;\n  private resizeObserver: ResizeObserver | null = null;\n  private visibilityChangeTimeout: any = null;\n  private initialized = false;\n\n  // Scroll size definitions\n  private readonly scrollSizeMap = {\n    xs: 50,\n    sm: 100,\n    md: 150,\n    lg: 200,\n    xl: 250,\n    '2xl': 300,\n    '3xl': 350,\n    '4xl': 400,\n    '5xl': 450,\n    '6xl': 500,\n    '7xl': 550,\n    '8xl': 600,\n    '9xl': 650,\n    '10xl': 700,\n    full: 1,\n  };\n\n  showPrevButton = false;\n  showNextButton = false;\n  filteredItems: any[] = [];\n  emptyStateText = 'No items found';\n  emptyStateIcon = '📭';\n  emptyStateTextColor = '#666';\n  showEmptyStateIcon = true;\n\n  ngOnInit(): void {\n    this.filteredItems = this.slides || [];\n    this.currentIndex = this.activeIndex || 0;\n\n    // Initialize navigation button visibility early\n    const hasMultipleItems = this.filteredItems.length > 1;\n    if (hasMultipleItems) {\n      this.showPrevButton = true;\n      this.showNextButton = true;\n    }\n\n    if (this.configs.emptyState) {\n      this.emptyStateText = this.configs.emptyState.text || this.emptyStateText;\n      this.emptyStateIcon = this.configs.emptyState.icon || this.emptyStateIcon;\n      this.emptyStateTextColor =\n        this.configs.emptyState.textColor || this.emptyStateTextColor;\n      this.showEmptyStateIcon = this.configs.emptyState.hideIcon ? false : true;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['slides']) {\n      this.filteredItems = this.slides || [];\n\n      if (this.initialized) {\n        setTimeout(() => {\n          this.updateContainerDimensions();\n          this.calculateItemDimensions();\n          this.checkOverflow();\n          this.cdr.detectChanges();\n        });\n      }\n    }\n\n    if (changes['activeIndex']) {\n      this.goToSlide(this.activeIndex);\n    }\n\n    if (changes['configs'] && this.initialized) {\n      setTimeout(() => {\n        this.updateContainerDimensions();\n        this.calculateItemDimensions();\n        this.checkOverflow();\n        this.setupAutoplay();\n        this.cdr.detectChanges();\n      });\n    }\n  }\n\n  private setupAutoplay(): void {\n    this.clearAutoplayInterval();\n\n    if (!this.configs.autoplay) return;\n\n    const delay = this.carouselService.parseTimeToMs(\n      this.configs.autoplayDelay || '3000ms'\n    );\n\n    this.autoplayInterval = setInterval(() => {\n      const track = this.trackElement?.nativeElement;\n      const wrapper = this.wrapperElement?.nativeElement;\n\n      // Exit if elements not ready\n      if (!track || !wrapper) return;\n\n      const max = this.isVertical\n        ? track.offsetHeight - wrapper.offsetHeight\n        : track.offsetWidth - wrapper.offsetWidth;\n\n      if (this.currentTranslate >= max) {\n        if (!this.configs.loop) {\n          this.clearAutoplayInterval();\n          return;\n        }\n\n        this.currentTranslate = 0;\n        this.currentIndex = 0;\n      } else {\n        this.next();\n      }\n\n      this.cdr.detectChanges();\n    }, delay);\n  }\n\n  private clearAutoplayInterval(): void {\n    if (this.autoplayInterval) {\n      clearInterval(this.autoplayInterval);\n      this.autoplayInterval = undefined;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    // Initialize early to avoid ExpressionChangedAfterItHasBeenCheckedError\n    this.ngZone.runOutsideAngular(() => {\n      setTimeout(() => {\n        this.ngZone.run(() => {\n          this.initializeCarousel();\n          this.setupResizeListener();\n          this.setupIntersectionObserver();\n          this.setupResizeObserver();\n\n          this.updateContainerDimensions();\n          this.calculateItemDimensions();\n          this.checkOverflow();\n          this.initialized = true;\n\n          // Ensure changes are applied before next change detection cycle\n          this.cdr.detectChanges();\n\n          // Setup autoplay after initialization to avoid change detection issues\n          setTimeout(() => {\n            this.setupAutoplay();\n          });\n\n          // Force another update after layout is complete\n          setTimeout(() => {\n            this.updateContainerDimensions();\n            this.calculateItemDimensions();\n            this.checkOverflow();\n            this.cdr.detectChanges();\n          }, 100);\n        });\n      });\n    });\n  }\n\n  ngOnDestroy(): void {\n    // Clear any interval timers\n    if (this.autoplayInterval) {\n      clearInterval(this.autoplayInterval);\n      this.autoplayInterval = undefined;\n    }\n\n    // Disconnect observers\n    if (this.intersectionObserver) {\n      this.intersectionObserver.disconnect();\n      this.intersectionObserver = null;\n    }\n\n    if (this.resizeObserver) {\n      this.resizeObserver.disconnect();\n      this.resizeObserver = null;\n    }\n\n    // Clear any timeouts\n    if (this.visibilityChangeTimeout) {\n      clearTimeout(this.visibilityChangeTimeout);\n      this.visibilityChangeTimeout = null;\n    }\n\n    // Complete all observables\n    this.destroy$.next();\n    this.destroy$.complete();\n\n    // Clear arrays\n    this.itemWidths = [];\n    this.itemHeights = [];\n    this.filteredItems = [];\n  }\n\n  get isVertical(): boolean {\n    return this.configs.orientation === 'vertical';\n  }\n\n  get containerStyles(): Record<string, string> {\n    const styles = this.configs.containerStyle || {};\n\n    if (!('width' in styles)) {\n      styles['width'] = this.configs.containerWidth || '100%';\n    }\n    if (!('height' in styles)) {\n      styles['height'] = this.configs.containerHeight || 'auto';\n    }\n\n    return styles;\n  }\n\n  get trackStyles(): Record<string, string> {\n    const transform = createTranslation(this.currentTranslate, this.isVertical);\n    const base = { transform };\n\n    return this.isVertical ? { ...base, flexDirection: 'column' } : base;\n  }\n\n  private initializeCarousel(): void {\n    if (!this.trackElement || !this.wrapperElement) return;\n    this.currentTranslate = 0;\n    this.currentIndex = 0;\n\n    // Initialize navigation buttons\n    this.checkOverflow();\n  }\n\n  /**\n   * Set up window resize listener\n   */\n  private setupResizeListener(): void {\n    fromEvent(window, 'resize')\n      .pipe(debounceTime(200), takeUntil(this.destroy$))\n      .subscribe(() => {\n        this.updateContainerDimensions();\n        this.calculateItemDimensions();\n        this.checkOverflow();\n      });\n  }\n\n  /**\n   * Set up intersection observer to detect when carousel becomes visible\n   */\n  private setupIntersectionObserver(): void {\n    if ('IntersectionObserver' in window) {\n      this.ngZone.runOutsideAngular(() => {\n        this.intersectionObserver = new IntersectionObserver(\n          (entries) => {\n            const isVisible = entries[0]?.isIntersecting;\n\n            if (isVisible && this.initialized) {\n              this.ngZone.run(() => {\n                this.visibilityChangeTimeout = setTimeout(() => {\n                  this.updateContainerDimensions();\n                  this.calculateItemDimensions();\n                  this.checkOverflow();\n                }, 50);\n              });\n            }\n          },\n          { threshold: 0.1 }\n        );\n\n        if (this.wrapperElement?.nativeElement) {\n          this.intersectionObserver.observe(this.wrapperElement.nativeElement);\n        }\n      });\n    }\n  }\n\n  /**\n   * Set up resize observer to detect when carousel's size changes\n   */\n  private setupResizeObserver(): void {\n    if ('ResizeObserver' in window) {\n      this.ngZone.runOutsideAngular(() => {\n        this.resizeObserver = new ResizeObserver(() => {\n          if (this.initialized) {\n            this.ngZone.run(() => {\n              this.updateContainerDimensions();\n              this.calculateItemDimensions();\n              this.checkOverflow();\n            });\n          }\n        });\n\n        if (this.wrapperElement?.nativeElement) {\n          this.resizeObserver.observe(this.wrapperElement.nativeElement);\n        }\n      });\n    }\n  }\n\n  private updateContainerDimensions(): void {\n    if (!this.wrapperElement) return;\n    this.containerWidth = this.wrapperElement.nativeElement.offsetWidth;\n    this.containerHeight = this.wrapperElement.nativeElement.offsetHeight;\n  }\n\n  /**\n   * Check if content overflows and update button visibility\n   */\n  private checkOverflow(): void {\n    // Skip check if not yet initialized to avoid change detection errors\n    if (!this.initialized && !this.trackElement?.nativeElement) return;\n\n    // Always show navigation in one-item mode with more than one slide\n    if (this.filteredItems.length > 1 && this.configs.singleItemMode) {\n      // In one-item mode with loop, always show both buttons if we have more than one slide\n      if (this.configs.loop) {\n        this.showPrevButton = true;\n        this.showNextButton = true;\n        return;\n      }\n\n      // Otherwise, buttons depend on current index\n      this.showPrevButton = this.currentIndex > 0;\n      this.showNextButton = this.currentIndex < this.filteredItems.length - 1;\n      return;\n    }\n\n    // First set default visibility based on showNavigation config\n    if (!this.showNavigation || this.filteredItems.length <= 1) {\n      this.showPrevButton = false;\n      this.showNextButton = false;\n      return;\n    }\n\n    const track = this.trackElement?.nativeElement;\n    const wrapper = this.wrapperElement?.nativeElement;\n    if (!track || !wrapper) return;\n\n    // Skip if element has zero dimensions (may be hidden)\n    if (wrapper.offsetWidth === 0 || wrapper.offsetHeight === 0) return;\n\n    // Check if there's room to scroll in either direction\n    // When loop is enabled, always show both buttons if there are items\n    if (this.configs.loop && this.filteredItems.length > 1) {\n      this.showPrevButton = true;\n      this.showNextButton = true;\n    } else {\n      // Standard overflow checking (no loop)\n      this.showPrevButton = this.currentTranslate > 0;\n\n      if (this.isVertical) {\n        // For vertical carousels\n        const trackHeight = track.offsetHeight;\n        const wrapperHeight = wrapper.offsetHeight;\n        this.showNextButton =\n          trackHeight - this.currentTranslate > wrapperHeight + 1;\n      } else {\n        // For horizontal carousels\n        const trackWidth = track.offsetWidth;\n        const wrapperWidth = wrapper.offsetWidth;\n        this.showNextButton =\n          trackWidth - this.currentTranslate > wrapperWidth + 1;\n      }\n    }\n\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Calculate dimensions of carousel items\n   */\n  private calculateItemDimensions(): void {\n    if (!this.trackElement || !this.wrapperElement) return;\n\n    const wrapper = this.wrapperElement.nativeElement;\n    const containerHeight = wrapper.offsetHeight;\n    const containerWidth = wrapper.offsetWidth;\n\n    // Update stored container dimensions\n    this.containerWidth = containerWidth;\n    this.containerHeight = containerHeight;\n\n    const items = Array.from(\n      this.trackElement.nativeElement.children\n    ) as HTMLElement[];\n\n    if (items.length === 0) return;\n\n    // Add a small delay to ensure images are loaded and measured correctly\n    setTimeout(() => {\n      if (this.configs.singleItemMode) {\n        // In single item mode, set all items to wrapper dimensions\n        if (this.isVertical) {\n          // For vertical mode, each item should be full height\n          this.itemHeights = items.map(() => containerHeight);\n\n          this.itemWidths = items.map((item) => {\n            const style = window.getComputedStyle(item);\n            const width = item.offsetWidth;\n            const marginLeft = parseInt(style.marginLeft || '0', 10);\n            const marginRight = parseInt(style.marginRight || '0', 10);\n            return width + marginLeft + marginRight;\n          });\n        } else {\n          // For horizontal mode, each item should be full width\n          this.itemWidths = items.map(() => containerWidth);\n\n          this.itemHeights = items.map((item) => {\n            const style = window.getComputedStyle(item);\n            const height = item.offsetHeight;\n            const marginTop = parseInt(style.marginTop || '0', 10);\n            const marginBottom = parseInt(style.marginBottom || '0', 10);\n            return height + marginTop + marginBottom;\n          });\n        }\n\n        // Apply the calculated dimensions immediately\n        this.updateTranslatePosition();\n        this.cdr.detectChanges();\n        return;\n      }\n\n      // For multi-item mode, calculate actual dimensions\n      this.itemWidths = items.map((item) => {\n        const style = window.getComputedStyle(item);\n        const width = item.offsetWidth;\n        const marginLeft = parseInt(style.marginLeft || '0', 10);\n        const marginRight = parseInt(style.marginRight || '0', 10);\n        return width + marginLeft + marginRight;\n      });\n\n      this.itemHeights = items.map((item) => {\n        const style = window.getComputedStyle(item);\n        const height = item.offsetHeight;\n        const marginTop = parseInt(style.marginTop || '0', 10);\n        const marginBottom = parseInt(style.marginBottom || '0', 10);\n        return height + marginTop + marginBottom;\n      });\n\n      this.cdr.detectChanges();\n    }, 50); // Small delay to ensure images are loaded\n  }\n\n  /**\n   * Calculate scroll amount based on configuration\n   */\n  private getScrollAmount(): number {\n    const wrapper = this.wrapperElement?.nativeElement;\n    if (!wrapper) return 0;\n\n    // For one-item-scroll mode, return item dimension\n    if (this.configs.singleItemMode) {\n      if (this.isVertical && this.itemHeights.length > 0) {\n        // Return height of current item or default to wrapper height\n        return this.currentIndex < this.itemHeights.length\n          ? this.itemHeights[this.currentIndex]\n          : this.itemHeights[0] || wrapper.offsetHeight;\n      } else if (this.itemWidths.length > 0) {\n        // Return width of current item or default to wrapper width\n        return this.currentIndex < this.itemWidths.length\n          ? this.itemWidths[this.currentIndex]\n          : this.itemWidths[0] || wrapper.offsetWidth;\n      }\n    }\n\n    // Otherwise, use configured scroll size\n    const size = this.configs.scrollSize || 'sm';\n    if (size === 'full') {\n      // Full size returns container dimension\n      return this.isVertical ? wrapper.offsetHeight : wrapper.offsetWidth;\n    }\n\n    // If size is a percentage, calculate based on container size\n    if (typeof size === 'string' && size.endsWith('%')) {\n      const percent = parseInt(size, 10) / 100;\n      return this.isVertical\n        ? wrapper.offsetHeight * percent\n        : wrapper.offsetWidth * percent;\n    }\n\n    // Return pixel value from map or default to small\n    return this.scrollSizeMap[size as ScrollSize] || this.scrollSizeMap['sm'];\n  }\n\n  /**\n   * Navigate to previous item\n   */\n  previous(): void {\n    if (!this.showPrevButton) return;\n\n    if (this.configs.singleItemMode) {\n      if (this.currentIndex > 0) {\n        this.currentIndex--;\n        this.updateTranslatePosition();\n      } else if (this.configs.loop && this.filteredItems.length > 0) {\n        // For loop mode, go to the last slide\n        this.currentIndex = this.filteredItems.length - 1;\n        this.updateTranslatePosition();\n      }\n    } else {\n      const scrollAmount = this.getScrollAmount();\n      this.currentTranslate = Math.max(0, this.currentTranslate - scrollAmount);\n    }\n\n    this.checkOverflow();\n    this.onPrevClick.emit(this.currentIndex);\n  }\n\n  /**\n   * Navigate to next item\n   */\n  next(): void {\n    if (!this.showNextButton) return;\n\n    const track = this.trackElement?.nativeElement;\n    const wrapper = this.wrapperElement?.nativeElement;\n\n    if (!track || !wrapper) return;\n\n    if (this.configs.singleItemMode) {\n      if (this.currentIndex < this.filteredItems.length - 1) {\n        this.currentIndex++;\n        this.updateTranslatePosition();\n      } else if (this.configs.loop && this.filteredItems.length > 0) {\n        // For loop mode, go back to the first slide\n        this.currentIndex = 0;\n        this.currentTranslate = 0;\n      }\n    } else {\n      const scrollAmount = this.getScrollAmount();\n      const maxTranslate = this.isVertical\n        ? track.offsetHeight - wrapper.offsetHeight\n        : track.offsetWidth - wrapper.offsetWidth;\n      this.currentTranslate = Math.min(\n        maxTranslate,\n        this.currentTranslate + scrollAmount\n      );\n    }\n\n    this.checkOverflow();\n    this.onNextClick.emit(this.currentIndex);\n  }\n\n  private updateTranslatePosition(): void {\n    if (this.currentIndex === 0) {\n      this.currentTranslate = 0;\n      return;\n    }\n\n    const gap = this.configs.itemGap\n      ? parseInt(this.configs.itemGap.replace('px', ''), 10)\n      : 0;\n    let position = 0;\n\n    // Calculate cumulative position based on item dimensions\n    for (let i = 0; i < this.currentIndex; i++) {\n      if (this.isVertical) {\n        position += (this.itemHeights[i] || 0) + gap;\n      } else {\n        position += (this.itemWidths[i] || 0) + gap;\n      }\n    }\n\n    this.currentTranslate = position;\n  }\n\n  getItemStyle(index: number): Record<string, string> {\n    const styles: Record<string, string> = {\n      flexShrink: '0',\n      flexGrow: '0',\n      boxSizing: 'border-box',\n      overflow: 'hidden',\n      borderRadius: 'inherit',\n    };\n\n    if (this.configs.itemWidth) {\n      if (this.configs.itemWidth === '100%' && this.containerWidth > 0) {\n        styles['width'] = this.containerWidth + 'px';\n        styles['maxWidth'] = '100%';\n      } else {\n        styles['width'] = this.configs.itemWidth;\n      }\n    }\n\n    if (this.configs.itemHeight) {\n      if (\n        (this.configs.itemHeight === '100%' ||\n          parseInt(this.configs.itemHeight, 10) === this.containerHeight) &&\n        this.containerHeight > 0\n      ) {\n        styles['height'] = this.containerHeight + 'px';\n        styles['minHeight'] = this.containerHeight + 'px';\n        styles['maxHeight'] = '100%';\n        styles['display'] = 'flex';\n        styles['flexDirection'] = 'column';\n        styles['alignItems'] = 'stretch';\n        styles['justifyContent'] = 'stretch';\n      } else {\n        styles['height'] = this.configs.itemHeight;\n      }\n    } else if (this.isVertical && this.configs.containerHeight) {\n      styles['height'] = this.containerHeight + 'px';\n      styles['minHeight'] = this.containerHeight + 'px';\n    }\n\n    // Add margin for gap between items (except first item)\n    if (!this.configs.itemGap) return styles;\n\n    const marginProperty = this.isVertical ? 'marginTop' : 'marginLeft';\n    styles[marginProperty] = index === 0 ? '0' : this.configs.itemGap;\n\n    return styles;\n  }\n\n  get contentPadding(): string {\n    return this.configs.contentPadding || CAROUSEL_DEFAULTS.CONTENT_PADDING;\n  }\n  get animationDuration(): string {\n    return (\n      this.configs.animationDuration || CAROUSEL_DEFAULTS.ANIMATION_DURATION\n    );\n  }\n  get animationTiming(): string {\n    return this.configs.animationTiming || CAROUSEL_DEFAULTS.ANIMATION_TIMING;\n  }\n  get showNavigation(): boolean {\n    return this.configs.showNavigation ?? true;\n  }\n\n  getEmptyStateContainerStyle(): Record<string, string> {\n    return {\n      width: '100%',\n      boxSizing: 'border-box',\n      borderRadius: 'inherit',\n      backgroundColor:\n        this.configs.emptyState?.backgroundColor || 'transparent',\n    };\n  }\n\n  hasItems(): boolean {\n    return this.filteredItems?.length > 0;\n  }\n  getNavControlsClass(): string {\n    return 'carousel__nav-controls';\n  }\n\n  getNavControlsStyle(): Record<string, string> {\n    const styles: Record<string, string> = {\n      position: 'absolute',\n      top: '0',\n      left: '0',\n      width: '100%',\n      height: '100%',\n      pointerEvents: 'none',\n    };\n\n    // Apply custom z-index if specified in config\n    if (this.configs.navigationStyle?.zIndex) {\n      styles['--carousel-z-index'] = this.configs.navigationStyle.zIndex;\n    }\n\n    return styles;\n  }\n\n  get prevIcon(): string {\n    const icons = this.carouselService.getNavigationIcons(\n      this.isVertical,\n      this.configs.navigationStyle?.icons\n    );\n    return icons.prev;\n  }\n\n  get nextIcon(): string {\n    const icons = this.carouselService.getNavigationIcons(\n      this.isVertical,\n      this.configs.navigationStyle?.icons\n    );\n    return icons.next;\n  }\n\n  getIconStyles(isNext: boolean): Record<string, string> {\n    const color = isNext\n      ? (this.configs.navigationStyle?.nextButton as any)?.color || '#666'\n      : (this.configs.navigationStyle?.prevButton as any)?.color || '#666';\n\n    return { color };\n  }\n\n  /**\n   * Calculate position styles for navigation buttons\n   */\n  private getButtonPositionStyle(button: 'prev' | 'next'): Record<string, any> {\n    const navConfig = this.configs.navigationStyle;\n    const buttonStyle =\n      button === 'prev'\n        ? navConfig?.prevButton || {}\n        : navConfig?.nextButton || {};\n    const style: Record<string, any> = {\n      position: 'absolute',\n      pointerEvents: 'auto',\n    };\n\n    // Handle positioning properties\n    ['top', 'bottom', 'left', 'right'].forEach((prop) => {\n      const value = (buttonStyle as any)[prop];\n      if (value !== undefined) {\n        style[prop] = value === 0 || value === '0' ? '0px' : value;\n      }\n    });\n\n    // Handle transforms based on positioning\n    const transformMap = {\n      'left=50%': 'translateX(-50%)',\n      'right=50%': 'translateX(50%)',\n      'top=50%': 'translateY(-50%)',\n      'bottom=50%': 'translateY(50%)',\n    };\n\n    // Find matching transform\n    for (const [position, transform] of Object.entries(transformMap)) {\n      const [prop, value] = position.split('=');\n      if ((buttonStyle as any)[prop] === value) {\n        style['transform'] = (buttonStyle as any).transform\n          ? `${(buttonStyle as any).transform} ${transform}`\n          : transform;\n        break;\n      }\n    }\n\n    // Use custom transform if specified\n    if (!style['transform'] && (buttonStyle as any).transform) {\n      style['transform'] = (buttonStyle as any).transform;\n    }\n\n    // Apply default positioning if none specified\n    const hasPosition = ['top', 'bottom', 'left', 'right'].some(\n      (prop) => (buttonStyle as any)[prop] !== undefined\n    );\n\n    if (!hasPosition) {\n      if (this.isVertical) {\n        style['left'] = '50%';\n        style['transform'] = 'translateX(-50%)';\n        style[button === 'prev' ? 'top' : 'bottom'] = '0px';\n      } else {\n        style['top'] = '50%';\n        style['transform'] = 'translateY(-50%)';\n        style[button === 'prev' ? 'left' : 'right'] = '0px';\n      }\n    }\n\n    return style;\n  }\n\n  /**\n   * Get full styles for navigation buttons\n   * @param buttonType - Type of button ('prev' or 'next')\n   */\n  private getButtonFullStyles(\n    buttonType: 'prev' | 'next'\n  ): Record<string, any> {\n    // Get base styles including shape styles\n    const styles = {\n      ...this.carouselService.getButtonShapeStyles(\n        this.configs.navigationStyle?.buttonShape\n      ),\n    };\n\n    // Apply custom styles from config\n    const buttonConfig = this.configs.navigationStyle?.[`${buttonType}Button`];\n    if (buttonConfig) {\n      // Apply position styles first\n      const positionStyles = this.getButtonPositionStyle(buttonType);\n      Object.assign(styles, positionStyles);\n\n      // Apply custom button styles but preserve shape styles\n      const buttonShape = this.configs.navigationStyle?.buttonShape;\n      if (buttonShape) {\n        const { borderRadius, ...otherButtonConfig } = buttonConfig as Record<\n          string,\n          any\n        >;\n        Object.assign(styles, otherButtonConfig);\n      } else {\n        Object.assign(styles, buttonConfig);\n      }\n\n      // Set the CSS variable for z-index if specified in button config\n      if ((buttonConfig as any).zIndex) {\n        styles['--carousel-z-index'] = (buttonConfig as any).zIndex;\n      }\n      // If no button-specific z-index, but global navigation z-index exists, use that\n      else if (this.configs.navigationStyle?.zIndex) {\n        styles['--carousel-z-index'] = this.configs.navigationStyle.zIndex;\n      }\n    }\n\n    return styles;\n  }\n\n  getPrevButtonFullStyles(): Record<string, any> {\n    return this.getButtonFullStyles('prev');\n  }\n  getNextButtonFullStyles(): Record<string, any> {\n    return this.getButtonFullStyles('next');\n  }\n\n  getPrevIndex(activeIndex: number): number {\n    const itemsCount = this.filteredItems?.length || 0;\n    if (itemsCount === 0) return activeIndex;\n\n    return activeIndex > 0\n      ? activeIndex - 1\n      : this.configs.loop\n      ? itemsCount - 1\n      : activeIndex;\n  }\n\n  goToPrevSlide(): void {\n    const prevIndex = this.getPrevIndex(this.currentIndex);\n    if (prevIndex !== this.currentIndex) {\n      this.currentIndex = prevIndex;\n      this.updateTranslatePosition();\n      this.checkOverflow();\n    }\n  }\n\n  getIndicatorContainerStyles(): Record<string, string> {\n    return this.carouselService.getIndicatorContainerStyles(\n      this.configs.indicatorStyle\n    );\n  }\n\n  /**\n   * Get styles for an individual indicator\n   * @param index Index of the indicator\n   */\n  getIndicatorItemStyles(index: number): Record<string, string> {\n    const isActive = index === this.currentIndex;\n    return this.carouselService.getIndicatorStyles(\n      this.configs.indicatorStyle,\n      isActive\n    );\n  }\n\n  /**\n   * Navigate to a specific slide when indicator is clicked\n   * @param index Target slide index\n   */\n  goToSlide(index: number): void {\n    if (\n      index === this.currentIndex ||\n      index < 0 ||\n      index >= this.filteredItems.length\n    )\n      return;\n\n    this.currentIndex = index;\n\n    if (this.configs.singleItemMode) {\n      this.updateTranslatePosition();\n      this.checkOverflow();\n      return;\n    }\n\n    const track = this.trackElement?.nativeElement;\n    const wrapper = this.wrapperElement?.nativeElement;\n\n    if (!track || !wrapper) return;\n\n    const gap = parseInt(this.configs.itemGap?.replace('px', '') || '0', 10);\n    const dimensions = this.isVertical ? this.itemHeights : this.itemWidths;\n\n    // Calculate cumulative position up to target index\n    const position = dimensions\n      .slice(0, index)\n      .reduce((sum, size) => sum + (size || 0) + gap, 0);\n\n    const maxTranslate = this.isVertical\n      ? track.offsetHeight - wrapper.offsetHeight\n      : track.offsetWidth - wrapper.offsetWidth;\n\n    this.currentTranslate = Math.min(maxTranslate, Math.max(0, position));\n    this.checkOverflow();\n  }\n\n  /**\n   * Whether to show indicators\n   */\n  get showIndicators(): boolean {\n    return this.configs.showIndicators ?? false;\n  }\n}\n","<div class=\"carousel\" \n  [class.carousel--vertical]=\"isVertical\" \n  [ngClass]=\"configs.containerClass\" \n  [ngStyle]=\"containerStyles\"\n  [style.height]=\"configs.containerHeight || 'auto'\"\n  [style.width]=\"configs.containerWidth || 'auto'\">\n  <div\n    #wrapper\n    [style.--content-padding]=\"contentPadding\"\n    class=\"carousel__wrapper\">\n    <div\n      #track\n      [ngStyle]=\"trackStyles\"\n      [class.carousel__track--vertical]=\"isVertical\"\n      [style.--animation-duration]=\"animationDuration\"\n      [style.--animation-timing]=\"animationTiming\"\n      class=\"carousel__track\">\n      <ng-container *ngIf=\"hasItems(); else emptyState\">\n        <ng-container *ngFor=\"let slide of filteredItems; let i = index\">\n          <div class=\"carousel__item\" \n            [ngClass]=\"configs.itemClass\" \n            [ngStyle]=\"getItemStyle(i)\" \n            [style.--item-width]=\"configs.itemWidth || 'auto'\"\n            [style.--item-height]=\"configs.itemHeight || 'auto'\">\n            <ng-container *ngIf=\"itemTemplate; else defaultTemplate\">\n              <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: slide, index: i }\"></ng-container>\n            </ng-container>\n            <ng-template #defaultTemplate>\n              <div class=\"carousel__item-default\">\n                {{ slide }}\n              </div>\n            </ng-template>\n          </div>\n        </ng-container>\n      </ng-container>\n      \n      <ng-template #emptyState>\n        <div class=\"carousel__empty-container\" [ngStyle]=\"getEmptyStateContainerStyle()\">\n          <ng-container *ngIf=\"emptyStateTemplate; else defaultEmptyState\">\n            <ng-container *ngTemplateOutlet=\"emptyStateTemplate; context: { $implicit: emptyStateText }\"></ng-container>\n          </ng-container>\n          <ng-template #defaultEmptyState>\n            <div class=\"carousel__empty-state\" [style.color]=\"emptyStateTextColor\">\n              <div *ngIf=\"showEmptyStateIcon\" class=\"carousel__empty-icon\">{{emptyStateIcon}}</div>\n              <div class=\"carousel__empty-text\">{{emptyStateText}}</div>\n            </div>\n          </ng-template>\n        </div>\n      </ng-template>\n    </div>\n  </div>\n\n  <div *ngIf=\"showNavigation && hasItems()\" [ngClass]=\"getNavControlsClass()\" [ngStyle]=\"getNavControlsStyle()\">    \n    <button \n      [class.carousel__nav-button--disabled]=\"!showPrevButton\" \n      [disabled]=\"!showPrevButton\" \n      [ngStyle]=\"getPrevButtonFullStyles()\" \n      (click)=\"previous()\" \n      style=\"pointer-events:auto;\"\n      class=\"carousel__nav-button\">\n      <span class=\"carousel__nav-icon\" [ngStyle]=\"getIconStyles(false)\">{{ prevIcon }}</span>\n    </button>\n    \n    <button\n      [class.carousel__nav-button--disabled]=\"!showNextButton\"\n      [disabled]=\"!showNextButton\"\n      [ngStyle]=\"getNextButtonFullStyles()\"\n      (click)=\"next()\"\n      style=\"pointer-events:auto;\"\n      class=\"carousel__nav-button\">\n      <span class=\"carousel__nav-icon\" [ngStyle]=\"getIconStyles(true)\">{{ nextIcon }}</span>\n    </button>\n  </div>\n\n  <!-- Carousel indicators -->\n  <div\n    *ngIf=\"showIndicators && hasItems() && filteredItems.length > 1\" \n    class=\"carousel__indicators\" \n    [ngStyle]=\"getIndicatorContainerStyles()\">\n    <div\n      *ngFor=\"let slide of filteredItems; let i = index\"\n      class=\"carousel__indicator\"\n      [class.carousel__indicator--active]=\"i === currentIndex\"\n      [ngStyle]=\"getIndicatorItemStyles(i)\"\n      (click)=\"goToSlide(i)\">\n    </div>\n  </div>\n</div>\n","import { Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\n/**\n * LazyLoadDirective\n * \n * A directive for lazy loading images in a carousel component.\n * Uses Intersection Observer API to detect when images enter the viewport.\n */\n@Directive({\n  selector: '[carouselLazyLoad]',\n  standalone: true\n})\nexport class LazyLoadDirective implements OnInit, OnDestroy {\n  @Input() carouselLazyLoad: string = '';\n  @Input() errorImage: string = 'assets/images/no-image.png';\n  \n  private observer: IntersectionObserver | undefined;\n  private isLoaded = false;\n  \n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2\n  ) {}\n  \n  /**\n   * Initialize the directive and set up the Intersection Observer\n   */\n  ngOnInit(): void {\n    // Skip if already loaded or no image URL provided\n    if (this.isLoaded || !this.carouselLazyLoad) {\n      return;\n    }\n    \n    // Check if IntersectionObserver is supported\n    if ('IntersectionObserver' in window) {\n      this.observer = new IntersectionObserver(entries => {\n        entries.forEach(entry => {\n          if (entry.isIntersecting) {\n            this.loadImage();\n            this.observer?.unobserve(this.el.nativeElement);\n          }\n        });\n      });\n      \n      this.observer.observe(this.el.nativeElement);\n    } else {\n      // Fallback for browsers that don't support IntersectionObserver\n      this.loadImage();\n    }\n  }\n  \n  /**\n   * Clean up the observer when directive is destroyed\n   */\n  ngOnDestroy(): void {\n    // Clean up the observer when directive is destroyed\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = undefined;\n    }\n  }\n  \n  /**\n   * Load the image by setting the src attribute\n   */\n  private loadImage(): void {\n    this.isLoaded = true;\n    \n    const element = this.el.nativeElement;\n    const isImgElement = element.tagName === 'IMG';\n    \n    if (isImgElement) {\n      // Handle <img> elements\n      this.renderer.setAttribute(element, 'src', this.carouselLazyLoad);\n      \n      // Handle errors\n      const errorHandler = () => {\n        this.renderer.setAttribute(element, 'src', this.errorImage);\n        const unlistenFn = this.renderer.listen(element, 'error', errorHandler);\n        unlistenFn();\n      };\n      \n      this.renderer.listen(element, 'error', errorHandler);\n    } else {\n      // Handle non-image elements with background image\n      this.renderer.setStyle(\n        element,\n        'background-image',\n        `url('${this.carouselLazyLoad}')`\n      );\n    }\n  }\n}","import { NgModule } from '@angular/core';\nimport { CarouselComponent } from './components/carousel/carousel.component';\nimport { LazyLoadDirective } from './directives/lazy-load.directive';\n\n/**\n * Carousel Module\n * \n * This module provides a smooth, customizable carousel component for Angular applications.\n * While the components are standalone, this module is provided for backward compatibility.\n */\n@NgModule({\n  imports: [\n    CarouselComponent,\n    LazyLoadDirective\n  ],\n  exports: [\n    CarouselComponent,\n    LazyLoadDirective\n  ]\n})\nexport class CarouselModule {}\n","/**\n * Main export file for the NSC library\n *\n * Available inputs:\n * - slides: The collection of items to display in the carousel\n * - configs: The configuration object for the carousel\n */\n\n// Module\nexport * from './carousel.module';\n\n// Components\nexport * from './components/carousel/carousel.component';\n\n// Interfaces\nexport * from './interfaces/carousel-config.interface';\n\n// Services\nexport * from './services/carousel.service';\n\n// Directives\nexport * from './directives/lazy-load.directive';\n\n// Utilities\nexport * from './utils/animation';","/*\n * Public API Surface of nsc\n */\n\nexport * from './lib/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}