{"version":3,"file":"/etc.clientlibs/corp-aem-sherwin/components/componentcarousel/clientlibs/site-componentcarousel/site-componentcarousel.c8d5488c9a059fd676e8.js","mappings":"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","sources":["webpack://aem-maven-archetype/../ui.apps/src/main/content/jcr_root/apps/corp-aem-sherwin/components/componentcarousel/componentcarousel.site.ts"],"sourcesContent":["import {on, fire} from 'delegated-events';\nimport debounce from 'lodash/debounce';\nimport moduleInitializer from 'SCRIPT_UTILS/moduleInitializer';\nimport bps from 'SCRIPT_UTILS/breakpoints';\n\nconst COMP_SELECTOR = '.js-carousel';\nconst JS_CLASSES = {\n  carouselOn: 'jsa-carousel-on',\n  slidePrev: 'jsa-slide-prev',\n  slideNext: 'jsa-slide-next',\n  slideStashLeft: 'jsa-slide-stash-left',\n  slideStashRight: 'jsa-slide-stash-right',\n};\nconst CAROUSEL_COLLECTION = [];\n\nfunction renderCarousel(\n  carouselWrapper: HTMLElement,\n  slidesList: NodeListOf<HTMLElement>,\n  activeSlideIndex: number,\n  isActivated: boolean\n): boolean {\n  if (isActivated) {\n    return true;\n  }\n\n  carouselWrapper.classList.add(JS_CLASSES.carouselOn);\n  moveToSlide(carouselWrapper, slidesList, activeSlideIndex);\n\n  return true;\n}\n\nfunction deactivateCarousel(\n  carouselWrapper: HTMLElement,\n  slidesList: NodeListOf<HTMLElement>,\n  isActivated: boolean\n): boolean {\n  if (!isActivated) {\n    return false;\n  }\n\n  carouselWrapper.classList.remove(JS_CLASSES.carouselOn);\n  slideViewSizing(slidesList);\n  slidesList.forEach((slideElem) => {\n    slideElem.removeAttribute('aria-hidden');\n  });\n\n  return false;\n}\n\nfunction moveToSlide(\n  carouselWrapper: HTMLElement,\n  slidesList: NodeListOf<HTMLElement>,\n  activeSlideIndex: number\n) {\n  const lastSlideIndex = slidesList.length - 1;\n  carouselWrapper.setAttribute('data-active-index', `${activeSlideIndex}`);\n\n  const nextSlideIndex = activeSlideIndex + 1;\n  const prevSlideIndex = activeSlideIndex - 1;\n\n  slidesList.forEach((slideElem, slideIndex): void => {\n    // which slide is active\n    if (activeSlideIndex === slideIndex) {\n      slideElem.removeAttribute('aria-hidden');\n    } else {\n      slideElem.setAttribute('aria-hidden', 'true');\n    }\n\n    // pre-position the slides to move to the correct position\n    if (slideIndex < activeSlideIndex && slideIndex !== prevSlideIndex) {\n      slideElem.classList.add(JS_CLASSES.slideStashLeft);\n    } else if (slideIndex > activeSlideIndex && slideIndex !== nextSlideIndex) {\n      slideElem.classList.add(JS_CLASSES.slideStashRight);\n    }\n\n    if (slideIndex === nextSlideIndex) {\n      slideElem.classList.add(JS_CLASSES.slideNext);\n    } else if (slideIndex === prevSlideIndex) {\n      slideElem.classList.add(JS_CLASSES.slidePrev);\n    } else {\n      slideElem.classList.remove(JS_CLASSES.slideNext, JS_CLASSES.slidePrev);\n    }\n  });\n\n  // Disable/Enable Buttons\n  const actionElemList = carouselWrapper.querySelectorAll<HTMLButtonElement>('[data-action]');\n\n  actionElemList.forEach((btnElem, btnIndex) => {\n    btnElem.disabled = false;\n  });\n\n  if (activeSlideIndex === 0 || activeSlideIndex === lastSlideIndex) {\n    let actionType = '';\n\n    if (activeSlideIndex === 0) {\n      actionType = 'prev';\n    } else if (activeSlideIndex === lastSlideIndex) {\n      actionType = 'next';\n    }\n\n    carouselWrapper.querySelector<HTMLButtonElement>(`[data-action=\"${actionType}\"]`).disabled = true;\n  }\n}\n\nfunction carouselStatusSwitch() {\n  CAROUSEL_COLLECTION.forEach((carouselClass) => {\n    carouselClass.statusSwitch();\n  });\n}\n\nfunction slideViewSizing(slidesList: NodeListOf<HTMLElement>): void {\n  let maxHeight = 0;\n\n  slidesList.forEach((slide) => {\n    if (maxHeight < slide.offsetHeight) {\n      maxHeight = slide.offsetHeight;\n    }\n  });\n}\n\nclass CarouselInit {\n  private isActivated = false;\n  private carouselElement: HTMLElement | null = null;\n\n  constructor(carouselElement) {\n    this.carouselElement = carouselElement;\n\n    this.statusSwitch();\n  }\n\n  statusSwitch(): void {\n    if (this.carouselElement === null) {\n      return;\n    }\n    const slideElements =\n      this.carouselElement.querySelectorAll<HTMLElement>('[data-slide]');\n\n    if (bps.desktop.matches) {\n      this.isActivated = deactivateCarousel(\n        this.carouselElement,\n        slideElements,\n        this.isActivated\n      );\n    } else {\n      const activeSlide = 0;\n      this.isActivated = renderCarousel(\n        this.carouselElement,\n        slideElements,\n        activeSlide,\n        this.isActivated\n      );\n    }\n  }\n}\n\n// create listeners\non('carousel:navigate', COMP_SELECTOR, (event: any): void => {\n  const {target, detail} = event;\n  const slideElements = target.querySelectorAll('[data-slide]');\n\n  moveToSlide(target, slideElements, detail.index);\n});\n\non('click', `${COMP_SELECTOR} [data-action]`, (event: MouseEvent): void => {\n  const buttonEl = <HTMLButtonElement>event.currentTarget;\n\n  if (buttonEl.disabled) {\n    return;\n  }\n\n  const carouselWrapper = buttonEl.closest<HTMLElement>(COMP_SELECTOR);\n  const actionType = buttonEl.dataset.action;\n  let newSlideIndex = parseInt(carouselWrapper.dataset.activeIndex);\n\n  if (actionType === 'prev') {\n    newSlideIndex -= 1;\n  } else if (actionType === 'next') {\n    newSlideIndex += 1;\n  }\n\n  fire(carouselWrapper, 'carousel:navigate', {\n    type: actionType,\n    index: newSlideIndex,\n  });\n});\n\nif (bps.desktop.addEventListener) {\n  bps.desktop.addEventListener('change', carouselStatusSwitch);\n} else {\n  window.addEventListener('resize', debounce(carouselStatusSwitch, 250));\n}\n\nmoduleInitializer(COMP_SELECTOR, (carouselElement) => {\n  CAROUSEL_COLLECTION.push(new CarouselInit(carouselElement));\n});\n"],"names":["COMP_SELECTOR","JS_CLASSES","CAROUSEL_COLLECTION","moveToSlide","carouselWrapper","slidesList","activeSlideIndex","lastSlideIndex","length","setAttribute","nextSlideIndex","prevSlideIndex","forEach","slideElem","slideIndex","removeAttribute","classList","add","remove","querySelectorAll","btnElem","btnIndex","disabled","actionType","querySelector","carouselStatusSwitch","carouselClass","statusSwitch","CarouselInit","constructor","carouselElement","isActivated","this","slideElements","desktop","matches","maxHeight","slide","offsetHeight","slideViewSizing","activeSlide","renderCarousel","on","event","target","detail","index","buttonEl","currentTarget","closest","dataset","action","newSlideIndex","parseInt","activeIndex","fire","type","addEventListener","window","push"],"sourceRoot":""}