{"version":3,"file":"ng-content-carousel.mjs","sources":["../../../projects/ng-content-carousel/src/lib/accessibility/content-carousel.lang.ts","../../../projects/ng-content-carousel/src/lib/ng-content-carousel.ts","../../../projects/ng-content-carousel/src/lib/ng-content-carousel.html","../../../projects/ng-content-carousel/src/lib/directives/carousel-item-directive.ts","../../../projects/ng-content-carousel/src/lib/ng-content-carousel.types.ts","../../../projects/ng-content-carousel/src/public-api.ts","../../../projects/ng-content-carousel/src/ng-content-carousel.ts"],"sourcesContent":["import { ContentCarouselCustomAria } from \"../ng-content-carousel.types\";\n\nexport const CONTENT_CAROUSEL_LANG: Record<string, ContentCarouselCustomAria> = {\n    en: {\n      globalAriaLabel: 'Content carousel',\n      globalRoleDescription: 'Carousel of content',\n      prevBtnAriaLabel: 'Go to previous item',\n      nextBtnAriaLabel: 'Go to next item',\n      trackRoleDescription: 'Carousel track',\n      trackAriaLabel: 'Carousel items',\n      rangeMessage: (first, last, total) => `Showing items ${first} to ${last} of ${total}`,\n    },\n    es: {\n      globalAriaLabel: 'Carrusel de contenido',\n      globalRoleDescription: 'Carrusel de contenido',\n      prevBtnAriaLabel: 'Ir al elemento anterior',\n      nextBtnAriaLabel: 'Ir al siguiente elemento',\n      trackRoleDescription: 'Pista del carrusel',\n      trackAriaLabel: 'Elementos del carrusel',\n      rangeMessage: (first, last, total) => `Mostrando elementos ${first} a ${last} de ${total}`,\n    },\n    fr: {\n      globalAriaLabel: 'Carrousel de contenu',\n      globalRoleDescription: 'Carrousel de contenu',\n      prevBtnAriaLabel: 'Aller à l’élément précédent',\n      nextBtnAriaLabel: 'Aller à l’élément suivant',\n      trackRoleDescription: 'Piste du carrousel',\n      trackAriaLabel: 'Éléments du carrousel',\n      rangeMessage: (first, last, total) => `Affichage des éléments ${first} à ${last} sur ${total}`,\n    },\n    de: {\n      globalAriaLabel: 'Inhaltskarussell',\n      globalRoleDescription: 'Karussell mit Inhalten',\n      prevBtnAriaLabel: 'Zum vorherigen Element gehen',\n      nextBtnAriaLabel: 'Zum nächsten Element gehen',\n      trackRoleDescription: 'Karussellspur',\n      trackAriaLabel: 'Karussellelemente',\n      rangeMessage: (first, last, total) => `Elemente ${first} bis ${last} von ${total} werden angezeigt`,\n    },\n    it: {\n      globalAriaLabel: 'Carosello di contenuti',\n      globalRoleDescription: 'Carosello di contenuti',\n      prevBtnAriaLabel: 'Vai all’elemento precedente',\n      nextBtnAriaLabel: 'Vai all’elemento successivo',\n      trackRoleDescription: 'Traccia del carosello',\n      trackAriaLabel: 'Elementi del carosello',\n      rangeMessage: (first, last, total) => `Visualizzazione elementi da ${first} a ${last} di ${total}`,\n    }\n};\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ContentChildren, effect, ElementRef, HostListener, inject, input, OnInit, QueryList, signal, ViewChild } from '@angular/core';\nimport { ContentCarouselItemDirective } from '../public-api';\nimport { CONTENT_CAROUSEL_LANG } from './accessibility/content-carousel.lang';\nimport { ContentCarouselCustomAria, ContentCarouselLangs } from './ng-content-carousel.types';\n\n@Component({\n  standalone: true,\n  selector: 'ng-content-carousel',\n  imports: [],\n  templateUrl: './ng-content-carousel.html',\n  styleUrl: './ng-content-carousel.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgContentCarousel implements AfterViewInit, OnInit {\n\n  transition = input<boolean>(true);\n  arrowStyle = input<'minimal' |'solid'>('minimal');\n  hideArrowsOnEdges = input<boolean>(true);\n  hideArrowsWhenNoOverflow = input<boolean>(true);\n  advanceMode= input<'single' |'page'>('page');\n\n  lang = input<ContentCarouselLangs>('en');\n  customAria = input<ContentCarouselCustomAria | null>(null);\n\n  @ContentChildren(ContentCarouselItemDirective) items!: QueryList<ContentCarouselItemDirective>;\n  @ViewChild('carouselContainer') carouselContainer!: ElementRef<HTMLDivElement>;\n  @ViewChild('track') track!: ElementRef;\n  @ViewChild('trackContainer') trackContainer!: ElementRef<HTMLDivElement>;\n  @ViewChild('arrowButtonPrev') arrowButtonPrev!: ElementRef<HTMLDivElement>;\n  @ViewChild('arrowButtonNext') arrowButtonNext!: ElementRef<HTMLDivElement>;\n\n  host = inject(ElementRef<HTMLElement>);\n\n  acc = signal<ContentCarouselCustomAria>(CONTENT_CAROUSEL_LANG['en']);\n\n  currentIndex = signal<number>(0);\n  itemWidth = signal<number | null>(null);\n  transform = signal<string>('');\n  totalItems = signal<number>(3);\n  maxWidth = signal<number | null>(null);\n  minWidth = signal<number | null>(null);\n  hasOverflow = signal<boolean>(true);\n\n  onStart = signal<boolean>(true);\n  onEnd = signal<boolean>(false);\n\n  trackContainerWidth = signal<number | null>(null);\n  arrowButtonsWidth = signal<number | null>(null);\n  hostWidth = signal<number | null>(null);\n  itemsViewed = signal<number | null>(null);\n\n  @HostListener('window:resize', ['$event'])\n  onResize(_event: UIEvent) {\n    this.calculateHostWidth();\n    this.calculateitemWidth();\n    this.calculateArrowsWidth();\n\n    this.calculateTrackContainerWidth();\n    this.calculateOverflow();\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    const active = document.activeElement;\n    const container = this.carouselContainer.nativeElement;\n\n    if (active !== container) return; // ignore if focus is on a son parent\n\n    if (event.key === 'ArrowRight') {\n      this.next();\n      event.preventDefault();\n    }\n    if (event.key === 'ArrowLeft') {\n      this.prev();\n      event.preventDefault();\n    }\n  }\n\n  ngOnInit(): void {\n    this.setAccOptions();\n  };\n\n  ngAfterViewInit() {\n    this.calculateHostWidth();\n    this.calculateitemWidth();\n    this.calculatetotalItems();\n    this.calculateArrowsWidth();\n\n    const initialWidth = this.trackContainer.nativeElement.offsetWidth;\n    this.calculateTrackContainerWidth(initialWidth);\n\n    this.updateVisibleItems();\n    this.calculateOverflow();\n  };\n\n  constructor() {\n    effect(() => {\n      this.setAccOptions();\n    });\n    // **IMPORTANT** For angular 18 add \", { allowSignalWrites: true }\" to each effect\n  };\n\n  calculateHostWidth(){\n    this.hostWidth.set(this.host.nativeElement.offsetWidth);\n  }\n\n  calculateArrowsWidth(){\n    setTimeout(() => {\n      const arrowPrevWidth = this.arrowButtonPrev.nativeElement.offsetWidth;\n      const arrowNextWidth = this.arrowButtonNext.nativeElement.offsetWidth;\n      this.arrowButtonsWidth.set(arrowPrevWidth + arrowNextWidth);\n    });\n  };\n\n  calculateitemWidth(){\n    const firstItem = this.items.first?.el.nativeElement;\n    if (firstItem) {\n      this.itemWidth.set(firstItem.offsetWidth);\n    }\n  };\n\n  calculateTrackContainerWidth(width: number = 0){\n\n    let initialWidth = width;\n    if(this.hostWidth() && this.arrowButtonsWidth()){\n      const widthFromHost = this.hostWidth()! - this.arrowButtonsWidth()!;\n      initialWidth = widthFromHost > this.maxWidth()! ? this.maxWidth()! : widthFromHost;\n    }\n    const itemsViewed = Math.floor(initialWidth / this.itemWidth()!);\n    itemsViewed === 0\n      ? this.itemsViewed.set(1)\n      : this.itemsViewed.set(itemsViewed);\n\n    const calculatedWidth = (itemsViewed * this.itemWidth()!);\n    const finalWidth = calculatedWidth < this.itemWidth()! ? this.minWidth() : calculatedWidth;\n    this.trackContainerWidth.set(finalWidth);\n  };\n\n  calculatetotalItems(){\n    this.totalItems.set(this.items.length);\n    this.maxWidth.set(this.items.length * this.itemWidth()!);\n    this.minWidth.set(this.itemWidth()!);\n  };\n\n  calculateOverflow(){\n\n    if(this.hideArrowsWhenNoOverflow() && this.itemsViewed() === this.totalItems()) {\n      this.hasOverflow.set(false);\n    }else{\n      this.hasOverflow.set(true);\n    }\n    // console.log('Total items: ', this.totalItems(), 'items viewed: ', this.itemsViewed())\n  };\n\n\n  next() {\n    if(this.currentIndex() <= this.totalItems() - this.itemsViewed()! - 1){\n\n      if(this.advanceMode() === 'page'){\n        const itemsToAdvance = this.currentIndex() + (this.itemsViewed()! * 2) > this.totalItems()\n          ? this.totalItems() - this.itemsViewed()!\n          : this.currentIndex() + this.itemsViewed()!\n        this.currentIndex.set(itemsToAdvance);\n      }else{\n        this.currentIndex.set(this.currentIndex() + 1);\n      }\n      this.updateTransform();\n    }\n\n    if(this.currentIndex() === this.totalItems() - this.itemsViewed()!){\n      this.onEnd.set(true);\n    }\n\n    if(this.currentIndex() > 0){\n      this.onStart.set(false);\n    }\n\n    this.updateVisibleItems();\n\n  }\n\n  prev() {\n    if (this.currentIndex() > 0) {\n      if(this.advanceMode() === 'page'){\n        const itemsToAdvance = this.currentIndex() - (this.itemsViewed()!) < 0\n          ? 0\n          : this.currentIndex() - this.itemsViewed()!\n        this.currentIndex.set(itemsToAdvance);\n      }else{\n        this.currentIndex.set(this.currentIndex() - 1);\n      }\n      this.updateTransform();\n    }\n\n    if(this.currentIndex() === 0){\n      this.onStart.set(true);\n    }\n\n    if(this.currentIndex() !== this.totalItems() - this.itemsViewed()! ){\n      this.onEnd.set(false);\n    }\n\n    this.updateVisibleItems();\n  };\n\n  startX = 0;\n  endX = 0;\n  startY = 0;\n  endY = 0;\n\n  onTouchStart(e: TouchEvent) {\n    this.startX = e.touches[0].clientX;\n    this.startY = e.touches[0].clientY;\n  }\n\n  onTouchEnd(e: TouchEvent) {\n    this.endX = e.changedTouches[0].clientX;\n    this.endY = e.changedTouches[0].clientY;\n\n    const diffX = this.startX - this.endX;\n    const diffY = this.startY - this.endY;\n\n    if (Math.abs(diffY) > Math.abs(diffX)) return;\n\n    if (Math.abs(diffX) > 10) {\n      diffX > 0 ? this.next() : this.prev();\n    }\n  }\n\n\n  updateTransform() {\n    let translatePoint = this.currentIndex() * (this.itemWidth()!);\n    if(this.currentIndex() === 0){\n      translatePoint = 0;\n    }\n    this.transform.set(`translateX(-${translatePoint}px)`);\n  };\n\n  firstVisibleIndex = signal<number>(0);\n  lastVisibleIndex = signal<number>(0);\n\n  updateVisibleItems() {\n\n    if (!this.itemsViewed() || this.items.length === 0) {\n      this.firstVisibleIndex.set(0);\n      this.lastVisibleIndex.set(0);\n\n      // Set timeout for avoiding false positive on ssr\n      setTimeout(() => {\n        if (this.items.length === 0) {\n          console.warn('NgContentCarousel: no projected children detected.');\n        }\n      });\n\n      return;\n    }\n\n    const visibleItemsArr : number[] = [];\n    for (let i = this.currentIndex(); i <= (this.currentIndex() + this.itemsViewed()! - 1); i++) {\n      visibleItemsArr.push(i);\n    }\n\n    this.firstVisibleIndex.set(visibleItemsArr[0]);\n    this.lastVisibleIndex.set(visibleItemsArr[visibleItemsArr.length - 1]);\n\n    this.items.forEach(({ el }, i) => {\n      if(!visibleItemsArr.includes(i)){\n        el.nativeElement.toggleAttribute('inert', true);\n      }else{\n        el.nativeElement.toggleAttribute('inert', false);\n      }\n    });\n  };\n\n  setAccOptions() {\n    const currentLang = this.lang() ?? 'en';\n    const langDefaults = CONTENT_CAROUSEL_LANG[currentLang];\n    const userOptions = this.customAria() ?? {};\n\n    this.acc.set({\n      ...langDefaults,\n      ...userOptions,\n    });\n  };\n\n  visibleRangeMessage() {\n    const first = this.firstVisibleIndex();\n    const last = this.lastVisibleIndex();\n    const total = this.items.length;\n\n    const acc = this.acc(); // current accessibility options\n    return acc.rangeMessage!(first + 1, last + 1, total);\n\n  };\n}\n","<div #carouselContainer\n  class=\"contentCarousel__container\"\n  role=\"region\"\n  [attr.aria-roledescription]=\"acc().globalRoleDescription\"\n  [attr.aria-label]=\"acc().globalAriaLabel\"\n  tabindex=\"0\"\n  (keydown)=\"onKeyDown($event)\"\n>\n\n  <div class=\"sr-only\" aria-live=\"polite\">\n    {{visibleRangeMessage()}}\n  </div>\n\n  <div #arrowButtonPrev\n    class=\"contentCarousel__prevContainer\"\n    [class.onStart]=\"onStart() && hideArrowsOnEdges()\"\n\n  >\n    <button\n      class=\"contentCarousel__prevButton\"\n      [class.noOverflow]=\"!hasOverflow()\"\n      (click)=\"prev()\"\n      [class.minimal]=\"arrowStyle() === 'minimal'\"\n      [class.solid]=\"arrowStyle() === 'solid'\"\n      [attr.inert]=\"onStart() && hideArrowsOnEdges() ? '' : null\"\n      [attr.aria-disabled]=\"onStart() && hideArrowsOnEdges() ? 'true' : 'false'\"\n      [attr.aria-label]=\"acc().prevBtnAriaLabel\"\n      tabindex=\"-1\"\n    >\n      <div class=\"contentCarousel__prevIcon\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\"s\n          aria-hidden=\"true\" focusable=\"false\"\n          width=\"1.5rem\" height=\"1.5rem\"\n          viewBox=\"320 -720 296 480\"\n        >\n          <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"/>\n        </svg>\n      </div>\n    </button>\n  </div>\n\n  <div #trackContainer\n    class=\"contentCarousel__trackContainer\"\n    [style.width]=\"trackContainerWidth() + 'px'\"\n    (touchend)=\"onTouchEnd($event)\"\n    (touchstart)=\"onTouchStart($event)\"\n  >\n    <div #track\n      class=\"contentCarousel__track\"\n      [style.transform]=\"transform()\"\n      [class.transition]=\"transition()\"\n      role=\"group\"\n      [attr.aria-roledescription]=\"acc().trackRoleDescription\"\n      [attr.aria-label]=\"acc().trackAriaLabel\"\n    >\n      <ng-content></ng-content>\n    </div>\n  </div>\n\n  <div #arrowButtonNext\n    class=\"contentCarousel__nextContainer\"\n    [class.onEnd]=\"onEnd() && hideArrowsOnEdges()\"\n\n  >\n    <button\n      class=\"contentCarousel__nextButton\"\n      [class.noOverflow]=\"!hasOverflow()\"\n      (click)=\"next()\"\n\n      [class.minimal]=\"arrowStyle() === 'minimal'\"\n      [class.solid]=\"arrowStyle() === 'solid'\"\n      [attr.inert]=\"onEnd() && hideArrowsOnEdges() ? '' : null\"\n      [attr.aria-disabled]=\"onEnd() && hideArrowsOnEdges() ? 'true' : 'false'\"\n      [attr.aria-label]=\"acc().nextBtnAriaLabel\"\n      tabindex=\"-1\"\n    >\n      <div class=\"contentCarousel__nextIcon\" >\n        <svg aria-hidden=\"true\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"1.5rem\" height=\"1.5rem\"\n          viewBox=\"320 -720 296 480\"\n        >\n          <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"/>\n        </svg>\n      </div>\n\n    </button>\n  </div>\n</div>\n","import { Directive, ElementRef, Renderer2 } from '@angular/core';\n\n@Directive({\n  selector: '[contentCarouselItem]',\n  standalone: true\n})\nexport class ContentCarouselItemDirective {\n  constructor(public el: ElementRef, private renderer: Renderer2) {\n    this.renderer.addClass(this.el.nativeElement, 'carousel-item');\n  }\n}\n","import { CONTENT_CAROUSEL_LANG } from \"./accessibility/content-carousel.lang\";\n\nexport type ContentCarouselLangs = keyof typeof CONTENT_CAROUSEL_LANG;\n// \"en\" | \"es\" | \"fr\" | \"it\" | \"de\"\n\nexport interface ContentCarouselCustomAria {\n  globalAriaLabel?: string;\n  globalRoleDescription?: string;\n  prevBtnAriaLabel?: string;\n  nextBtnAriaLabel?: string;\n  trackRoleDescription?: string;\n  trackAriaLabel?: string;\n  rangeMessage?: (first: number, last: number, total: number) => string;\n};\n","/*\n * Public API Surface of ng-content-carousel\n */\n\nexport * from './lib/ng-content-carousel';\nexport * from './lib/directives/carousel-item-directive';\nexport * from './lib/ng-content-carousel.types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}