{"version":3,"file":"index-a13eca1d.js","sources":["../../../../src/scripts/react-components/shingle-detail-masthead/image-swiper.tsx","../../../../src/scripts/react-components/shingle-detail-masthead/color-swiper.tsx","../../../../src/scripts/react-components/shingle-detail-masthead/index.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { Swiper as SwiperModule, SwiperSlide } from 'swiper/react';\nimport { FreeMode, Navigation } from 'swiper';\nimport 'swiper/css';\nimport 'swiper/css/navigation';\nimport 'swiper/css/free-mode';\nimport { createDataLayerString } from '../../helpers/helpers';\nimport { BREAKPOINTS } from '../../helpers/breakpoints';\n\ntype ImageSwiperProps = {\n  images: {\n    media_url: string;\n    alt_text: string;\n  }[];\n  nextLabel: string;\n  prevLabel: string;\n  productHeading: string;\n  fullScreen?: boolean;\n};\n\nexport const ImageSwiper = ({\n  images,\n  nextLabel,\n  prevLabel,\n  productHeading,\n  fullScreen\n}: ImageSwiperProps) => {\n  const nextButton = useRef(null);\n  const backButton = useRef(null);\n\n  return (\n    <div className=\"shingle-detail-masthead__image\">\n      <SwiperModule\n        breakpoints={{\n          768: {\n            spaceBetween: 30,\n            slidesPerView: fullScreen ? 1 : 1.2,\n            centeredSlides: false\n          }\n        }}\n        slidesPerView={(images.length > 0 && !fullScreen) ? 1.1 : 1}\n        centeredSlides={true}\n        spaceBetween={10}\n        navigation={{\n          nextEl: nextButton.current,\n          prevEl: backButton.current\n        }}\n        modules={[FreeMode, Navigation]}\n      >\n        {images.map((image, index) => (\n          <SwiperSlide key={index}>\n            <picture>\n              <source srcSet={`${image.media_url}?width=1328`} media={`(min-width: ${BREAKPOINTS.wide - 1}px)`} />\n              <source srcSet={`${image.media_url}?width=1060`} media={`(min-width: ${BREAKPOINTS.desktop - 1}px)`} />\n              <source srcSet={`${image.media_url}?width=994`} media={`(min-width: ${BREAKPOINTS.tabletLandscape - 1}px)`} />\n              <source srcSet={`${image.media_url}?width=780`} media={`(min-width: ${BREAKPOINTS.tablet - 1}px)`} />\n              <img\n                src={`${image.media_url}?width=660`}\n                alt={image.alt_text}\n                width=\"290\"\n                height=\"180\"\n                data-layer={createDataLayerString([\n                  {\n                    event: 'product_click',\n                    event_category: 'product',\n                    event_action: 'gallery',\n                    event_label: 'thumbnail',\n                    event_attributes: {\n                      product_name: productHeading,\n                      product_category: 'Shingle'\n                    }\n                  }\n                ])}\n              />\n            </picture>\n          </SwiperSlide>\n        ))}\n      </SwiperModule>\n      <button\n        ref={backButton}\n        className=\"swiper-button-prev\"\n        aria-label={prevLabel || 'previous slide'}\n        title={prevLabel || 'previous slide'}\n        data-layer={createDataLayerString([\n          {\n            event: 'product_click',\n            event_category: 'product',\n            event_action: 'gallery',\n            event_label: 'previous arrow',\n            event_attributes: {\n              product_name: productHeading,\n              product_category: 'Shingle'\n            }\n          }\n        ])}\n      ></button>\n\n      <button\n        ref={nextButton}\n        className=\"swiper-button-next\"\n        aria-label={nextLabel || 'next slide'}\n        title={nextLabel || 'next slide'}\n        data-layer={createDataLayerString([\n          {\n            event: 'product_click',\n            event_category: 'product',\n            event_action: 'gallery',\n            event_label: 'next arrow',\n            event_attributes: {\n              product_name: productHeading,\n              product_category: 'Shingle'\n            }\n          }\n        ])}\n      ></button>\n    </div>\n  );\n};\n\nexport default ImageSwiper;\n","import React, { useRef, useMemo, useState, useEffect } from 'react';\nimport { Swiper as SwiperModule, SwiperSlide } from 'swiper/react';\nimport { FreeMode, Navigation, Swiper } from 'swiper';\nimport 'swiper/css';\nimport 'swiper/css/navigation';\nimport 'swiper/css/free-mode';\nimport { BREAKPOINTS } from '../../helpers/breakpoints';\nimport { DataLayerObject, ExtendedWindowType } from '../../helpers/global-types';\n\ntype ColorSwiperProps = {\n  images: {\n    media_url: string;\n    alt_text: string;\n    color_name?: string;\n    color_id?: string;\n  }[];\n  nextLabel: string;\n  prevLabel: string;\n  selected: string;\n  defaultColor: string;\n  handleSelected: (val: string) => void;\n  fullScreen?: boolean;\n};\n\nexport const ColorSwiper = ({\n  images,\n  nextLabel,\n  prevLabel,\n  handleSelected,\n  selected,\n  defaultColor,\n  fullScreen\n}: ColorSwiperProps) => {\n  const [, setSwiper] = useState<Swiper | null>(null);\n  const [touch, setTouch] = useState(false);\n  const [shouldPushLayer, setShouldPushLayer] = useState<Swiper | null>(null);\n  const nextButton = useRef(null);\n  const backButton = useRef(null);\n  const sortedImages = useMemo(() => {\n    const remainingImages = images.filter(\n      image => image.color_id !== defaultColor\n    );\n    const defaultImage = images.find(image => image.color_id === defaultColor);\n    const sortedImages = remainingImages.sort((a, b) => {\n      if (a.color_name && b.color_name) {\n        return a.color_name.localeCompare(b.color_name);\n      }\n      return 0;\n    });\n\n    if (defaultImage) {\n      sortedImages.unshift(defaultImage);\n    }\n    return sortedImages;\n  }, [images]);\n\n  const initialSlide =\n    sortedImages.findIndex(image => image.color_id === selected) > 0\n      ? images.findIndex(image => image.color_id === selected)\n      : 0;\n\n  const handleSwiperLayerEvent = (swiper: Swiper) => {\n    setShouldPushLayer(swiper);\n  };\n\n  useEffect(() => {\n    if (shouldPushLayer) {\n      const interactLayer = `{\"event\":\"carousel_interaction\",\"event_action\":\"${\n        touch ? 'swipe' : 'arrow click'\n      }\",\"event_category\":\"content_interaction\",\"event_label\":\"${(\n        shouldPushLayer.activeIndex + 1\n      ).toString()} of ${shouldPushLayer.slides.length}\"}`;\n      (window as ExtendedWindowType).dataLayer.push(\n        JSON.parse(interactLayer) as DataLayerObject\n      );\n      setShouldPushLayer(null);\n    }\n  }, [shouldPushLayer, touch]);\n\n  return (\n    <>\n      {selected && sortedImages && (\n        <div className=\"color-swiper\">\n          {}\n          <SwiperModule\n            breakpoints={{\n              768: {\n                slidesPerView: fullScreen ? 5 : 6,\n                spaceBetween: 30,\n                slidesOffsetBefore: 0\n              },\n              1024: {\n                slidesPerView: fullScreen ? 5 : 8,\n                spaceBetween: 30,\n                slidesOffsetBefore: 0\n              },\n              1400: {\n                slidesPerView: fullScreen ? 5 : 10,\n                spaceBetween: 30,\n                slidesOffsetBefore: 0\n              }\n            }}\n            spaceBetween={20}\n            slidesPerView={!fullScreen ? 2.5 : 2}\n            slidesOffsetBefore={!fullScreen ? 65 : 0}\n            initialSlide={initialSlide}\n            navigation={{\n              nextEl: nextButton.current,\n              prevEl: backButton.current\n            }}\n            modules={[FreeMode, Navigation]}\n            onSwiper={swiper => setSwiper(swiper)}\n            onSlideChange={swiper => handleSwiperLayerEvent(swiper)}\n            onTouchEnd={() => setTouch(true)}\n            onMouseUp={() => setTouch(false)}\n          >\n            {sortedImages.map(image => (\n              <SwiperSlide key={image.color_id}>\n                <div\n                  className={`color-swiper__card ${\n                    image.color_id === selected\n                      ? 'color-swiper__card--selected'\n                      : ''\n                  }`}\n                >\n                  <picture className=\"color-swiper__img-wrapper\">\n                    <source\n                      srcSet={`${image.media_url}?width=121`}\n                      media={`(min-width: ${BREAKPOINTS.tablet - 1}px)`}\n                    />\n                    <img\n                      className=\"color-swiper__img\"\n                      src={`${image.media_url}?width=263`}\n                      alt={image.alt_text}\n                      height=\"263\"\n                      width=\"263\"\n                      loading=\"lazy\"\n                    />\n                  </picture>\n                  <button\n                    className=\"color-swiper__label link\"\n                    onClick={() => {\n                      handleSelected(image.color_id as string);\n                    }}\n                  >\n                    <span>{image.color_name}</span>\n                  </button>\n                </div>\n              </SwiperSlide>\n            ))}\n          </SwiperModule>\n          <button\n            ref={backButton}\n            className=\"swiper-button-prev\"\n            aria-label={prevLabel || 'previous slide'}\n            title={prevLabel || 'previous slide'}\n          ></button>\n          <button\n            ref={nextButton}\n            className=\"swiper-button-next\"\n            aria-label={nextLabel || 'next slide'}\n            title={nextLabel || 'next slide'}\n          ></button>\n        </div>\n      )}\n    </>\n  );\n};\n\nexport default ColorSwiper;\n","import React, { useEffect, useState } from 'react';\nimport IconItem from '../product-masthead/icon-item';\nimport ImageSwiper from './image-swiper';\nimport ToggleSwitch from '../toggle-switch';\nimport Autocomplete from './autocomplete';\nimport ColorSwiper from './color-swiper';\nimport { getStoredGeolocationData } from '../../helpers/geolocation';\nimport { makeSuperScript } from '../../helpers/helpers';\nimport {\n  ExtendedWindowType,\n  MediaType,\n  ProductMastheadResponseType,\n  VariantOptionType\n} from '../../helpers/global-types';\n\ntype ShingleDetailMastheadProps = {\n  endpointColors: string;\n  bazaarReview: string;\n  toggleOptions: string;\n  formAddress: string;\n  nextLabel: string;\n  prevLabel: string;\n  defaultImage: string;\n  noResultsError: string;\n  hideToggle?: boolean;\n};\n\nconst ShingleDetailMasthead = ({\n  endpointColors,\n  bazaarReview,\n  toggleOptions,\n  formAddress,\n  nextLabel,\n  prevLabel,\n  defaultImage,\n  noResultsError,\n  hideToggle\n}: ShingleDetailMastheadProps) => {\n  const [data, setData] = useState<ProductMastheadResponseType>();\n  const [error, setError] = useState(false);\n  const [displayImages, setDisplayImages] = useState<MediaType[]>([]);\n  const [displayColors, setDisplayColors] = useState<MediaType[]>([]);\n  const [yourAreaColors, setYourAreaColors] = useState<string[]>([]);\n  const [availableColors, setAvailableColors] = useState<string[]>([]);\n  const [selectedColor, setSelectedColor] = useState<string>('');\n  const [defaultColor, setDefaultColor] = useState<string>('');\n  const [defaultSetup, setDefaultSetup] = useState(false);\n  const [addressError, setAddressError] = useState(false);\n  const toggleOptionsObj = JSON.parse(toggleOptions);\n  const addressInput = JSON.parse(formAddress);\n  const [personalizeButtons, setPersonalizeButtons] = useState('');\n  const [address, setAddress] = useState<{\n    address: string;\n    zip: string;\n    country: string;\n  }>({\n    address: '',\n    zip: '',\n    country: ''\n  });\n  const [selectedAttributes, setSelectedAttributes] = useState<\n    VariantOptionType[]\n  >([]);\n  const [selectedArea, setSelectedArea] = useState(0);\n  const bazarRef = React.createRef<HTMLDivElement>();\n\n  const handleDefaultSelectedAttributes = () => {\n    let _finalSelectedAttributes: VariantOptionType[] = [];\n    let _finalSelectedColor = '';\n\n    if (data?.defaultVariation !== '') {\n      const selectedVariation = data?.pid_attribute_option_index.find(\n        item => item.magento_product_id === data?.defaultVariation\n      );\n\n      if (selectedVariation) {\n        const selectedOptions: VariantOptionType[] = [];\n        data?.variants.forEach(variant => {\n          const correspondingVariant =\n            selectedVariation.attribute_option_items.find(\n              attributeOption => attributeOption.attribute_id === variant.id\n            );\n          if (correspondingVariant) {\n            const selectedOption = variant.options.find(\n              opt => opt.id === correspondingVariant.option_id\n            );\n            if (selectedOption) {\n              selectedOptions.push(selectedOption);\n            }\n          }\n        });\n\n        if (selectedOptions.length === 0) {\n          data?.variants.forEach(variant => {\n            selectedOptions.push(variant.options[0]);\n          });\n        }\n\n        const selectedMediaVariant = data?.mediaVariants.find(\n          variant =>\n            variant.magento_product_id === selectedOptions[0].products[0]\n        );\n\n        const productDetails = selectedMediaVariant?.attribute_groups.find(\n          group => group.attribute_group_name === 'Product Details'\n        );\n\n        const colorId = productDetails?.attributes.find(\n          attribute => attribute.attribute_code === 'colorid'\n        )?.attribute_value;\n\n        if (data?.colors.includes(colorId as string)) {\n          _finalSelectedAttributes = selectedOptions;\n        } else {\n          data?.variants.forEach(variant => {\n            selectedOptions.push(variant.options[0]);\n          });\n        }\n      } else {\n        const selectedOptions: VariantOptionType[] = [];\n        data?.variants.forEach(variant => {\n          selectedOptions.push(variant.options[0]);\n        });\n        _finalSelectedAttributes = selectedOptions;\n      }\n\n      const selectedVariant = data?.mediaVariants.find(\n        variant => variant.magento_product_id === data?.defaultVariation\n      );\n      const productDetails = selectedVariant?.attribute_groups.find(\n        group => group.attribute_group_name === 'Product Details'\n      );\n      const colorId = productDetails?.attributes.find(\n        attribute => attribute.attribute_code === 'colorid'\n      )?.attribute_value;\n\n      if (colorId) {\n        _finalSelectedColor = colorId;\n        setDefaultColor(colorId as string);\n      } else if (data?.colors) {\n        _finalSelectedColor = data?.colors[0];\n      }\n    }\n\n    const _selectedColor = sessionStorage.getItem('selectedColor');\n    sessionStorage.removeItem('selectedColor');\n\n    if (_selectedColor) {\n      const selectedMediaVariant = data?.mediaVariants.find(variant => {\n        const productDetails = variant.attribute_groups.find(\n          group => group.attribute_group_name === 'Product Details'\n        );\n        if (\n          productDetails?.attributes.find(\n            attribute =>\n              attribute.attribute_code === 'colorid' &&\n              attribute.attribute_value === _selectedColor\n          )\n        )\n          return variant;\n        return false;\n      });\n\n      const _selectedAttribute = data?.variants.map(variant =>\n        variant?.options.find(option =>\n          option.products.includes(\n            selectedMediaVariant?.magento_product_id as string\n          )\n        )\n      );\n      if (_selectedAttribute) {\n        _finalSelectedAttributes = _selectedAttribute as VariantOptionType[];\n        _finalSelectedColor = _selectedColor;\n      }\n    }\n\n    setSelectedAttributes(_finalSelectedAttributes as VariantOptionType[]);\n    setSelectedColor(_finalSelectedColor);\n    setDefaultSetup(true);\n  };\n\n  const handleDisplayMedia = () => {\n    const mapping = data?.pid_attribute_option_index;\n    const id = mapping?.find(item => {\n      return data?.variants.every((variant, index) => {\n        const selProduct = item.attribute_option_items.find(\n          option =>\n            option.attribute_id === variant.id &&\n            selectedAttributes[index].id === option.option_id\n        );\n        return selProduct;\n      });\n    });\n\n    const mediaImage = data?.mediaVariants.find(mediaVariant => {\n      if (mediaVariant.magento_product_id === id?.magento_product_id) {\n        if (mediaVariant.media.length > 0) {\n          return mediaVariant;\n        }\n      }\n      return false;\n    });\n    if (!mediaImage && data?.productDescription?.defaultImages) {\n      if (data?.productDescription?.defaultImages.length > 0) {\n        setDisplayImages(data?.productDescription.defaultImages);\n      } else {\n        setDisplayImages(JSON.parse(defaultImage));\n      }\n    } else if (!mediaImage) {\n      setDisplayImages(JSON.parse(defaultImage));\n    } else {\n      setDisplayImages(mediaImage.media);\n    }\n  };\n\n  const handleDisplayColors = () => {\n    const _displayColors = data?.productDescription.colorImages.filter(\n      colorImage => availableColors?.includes(colorImage.color_id as string)\n    );\n\n    getVariantIsAvailable();\n\n    if (_displayColors && _displayColors.length > 0) {\n      setDisplayColors(_displayColors as MediaType[]);\n    } else {\n      setDisplayColors([]);\n    }\n  };\n\n  const handleSelected = (value: string) => {\n    (window as ExtendedWindowType).dataLayer.push({\n      event: 'product_click',\n      event_category: 'product',\n      event_action: 'variant selection',\n      event_label: 'shingle color',\n      event_attributes: {\n        product_name: data?.productDescription.heading,\n        product_category: 'Shingle',\n        average_rating: (\n          document.querySelector(\n            '.bv_avgRating_component_container'\n          ) as HTMLElement\n        )?.innerText\n      }\n    });\n    setSelectedColor(value);\n    const selectedMediaVariant = data?.mediaVariants.find(variant => {\n      const productDetails = variant.attribute_groups.find(\n        group => group.attribute_group_name === 'Product Details'\n      );\n      if (\n        productDetails?.attributes.find(\n          attribute =>\n            attribute.attribute_code === 'colorid' &&\n            attribute.attribute_value === value\n        )\n      )\n        return variant;\n\n      return false;\n    });\n    const _selectedAttribute = data?.variants.map(variant =>\n      variant?.options.find(option =>\n        option.products.includes(\n          selectedMediaVariant?.magento_product_id as string\n        )\n      )\n    );\n    if (_selectedAttribute)\n      setSelectedAttributes(_selectedAttribute as VariantOptionType[]);\n  };\n\n  const handleSwitchChange = (value: string) => {\n    const _selectedArea = toggleOptionsObj.findIndex(\n      (option: { value: string }) => option.value === value\n    );\n    setSelectedArea(_selectedArea);\n\n    if (_selectedArea === 0) {\n      if (data?.colors && data?.colors.length > 0) {\n        setAvailableColors(data?.colors);\n      } else {\n        setAvailableColors([]);\n      }\n    } else {\n      setAvailableColors(yourAreaColors);\n    }\n  };\n\n  const getVariantIsAvailable = () => {\n    const selectedVariant = data?.mediaVariants.find(\n      variant =>\n        variant.magento_product_id === selectedAttributes[0].products[0]\n    );\n    const productDetails = selectedVariant?.attribute_groups.find(\n      group => group.attribute_group_name === 'Product Details'\n    );\n    const colorId = productDetails?.attributes.find(\n      attribute => attribute.attribute_code === 'colorid'\n    )?.attribute_value;\n\n    if (!availableColors.includes(colorId as string)) {\n      data?.mediaVariants.find(variant => {\n        const details = variant.attribute_groups.find(\n          group => group.attribute_group_name === 'Product Details'\n        );\n        const detailColor = details?.attributes.find(\n          attribute => attribute.attribute_code === 'colorid'\n        )?.attribute_value;\n\n        if (detailColor && availableColors[0] === detailColor) {\n          const newOptionType = data?.variants[0].options.find(option =>\n            option?.products.includes(variant.magento_product_id)\n          );\n          if (newOptionType) {\n            setSelectedAttributes([newOptionType]);\n            setSelectedColor(detailColor);\n          }\n        }\n      });\n    }\n  };\n\n  useEffect(() => {\n    if (data) {\n      const savedData = getStoredGeolocationData();\n\n      if (savedData && !hideToggle) {\n        setSelectedArea(1);\n\n        setAddress({\n          address: savedData.address as string,\n          zip: savedData.zip,\n          country: savedData.country\n        });\n      }\n\n      if (data.colors) {\n        setAvailableColors(data?.colors);\n      }\n      handleDefaultSelectedAttributes();\n    }\n  }, [data]);\n\n  useEffect(() => {\n    handleDisplayMedia();\n  }, [selectedAttributes]);\n\n  useEffect(() => {\n    handleDisplayColors();\n  }, [availableColors]);\n\n  useEffect(() => {\n    const productId = data?.productDescription.product;\n\n    if (address.zip && productId) {\n      let _country = address.country;\n      if (_country.toUpperCase() === 'US') {\n        _country = 'USA';\n      } else if (_country.toUpperCase() === 'CA') {\n        _country = 'CAN';\n      }\n\n      fetch(\n        endpointColors\n          .replace('{zipCode}', address.zip)\n          .replace(' ', '')\n          .replace('{prod}', productId)\n          .replace('{countryCode}', _country),\n        {\n          method: 'GET'\n        }\n      )\n        .then(response => response.json())\n        .then(data => {\n          if (data?.availableColors) {\n            setAvailableColors(data?.availableColors);\n            setYourAreaColors(data?.availableColors);\n          } else {\n            setAvailableColors([]);\n            setYourAreaColors([]);\n          }\n        })\n        .catch(error => {\n          console.error('Error:', error);\n        });\n    }\n  }, [address, data]);\n\n  if (error) {\n    return <p>Error on loading</p>;\n  }\n\n  const handleBazarClick = () => {\n    const reviewsSection = document.querySelector(\n      '[data-module=\"review-embed\"]'\n    ) as HTMLElement;\n    const sectionName = reviewsSection.dataset?.section;\n    const sectionId = reviewsSection.id;\n    const navigationLinks = document.querySelectorAll(\n      '.navigation-jumplinks__link'\n    );\n    const dropdown = document.querySelector(\n      '.navigation-jumplinks .field__select'\n    ) as HTMLSelectElement;\n\n    window.dispatchEvent(new Event('pause-jumplinks'));\n\n    if (navigationLinks) {\n      navigationLinks.forEach(link => {\n        if (link.ariaLabel !== sectionName) {\n          link.classList.remove('active');\n        } else {\n          link.classList.add('active');\n        }\n      });\n    }\n\n    if (dropdown) {\n      setTimeout(() => {\n        dropdown.value = sectionId;\n      }, 500);\n    }\n  };\n\n  useEffect(() => {\n    if (bazarRef.current) {\n      const bazarContainer = bazarRef.current;\n      let maxTries = 10;\n\n      const interval = setInterval(() => {\n        maxTries--;\n        const button = bazarContainer.querySelector('.bv_ratings_summary');\n\n        if (button) {\n          clearInterval(interval);\n          button.addEventListener('click', handleBazarClick.bind(this));\n\n          window.addEventListener('click', e => {\n            const target = e.target as HTMLElement;\n\n            if (target.closest('.bv_modal_inner_content')) {\n              handleBazarClick();\n            }\n          });\n        }\n\n        if (maxTries === 0) {\n          clearInterval(interval);\n        }\n      }, 1000);\n    }\n  }, [bazarRef, data]);\n\n  useEffect(() => {\n    let observer: MutationObserver;\n\n    const targetNode = document.querySelector('.personalize-buttons');\n\n    if (targetNode) {\n      const targetInnerHtml = targetNode.innerHTML;\n\n      setPersonalizeButtons(targetInnerHtml);\n\n      const config = { attributes: true, childList: true, subtree: true };\n\n      const callback = (mutationList: MutationRecord[]) => {\n        for (const mutation of mutationList) {\n          if (mutation.type === 'childList') {\n            setPersonalizeButtons(targetNode.innerHTML);\n          }\n        }\n      };\n\n      observer = new MutationObserver(callback);\n      observer.observe(targetNode, config);\n    }\n\n    const newData = (window as ExtendedWindowType).mastheadData;\n\n    if (newData) {\n      setData((window as ExtendedWindowType).mastheadData);\n    } else {\n      setError(true);\n    }\n\n    return () => {\n      if (observer) observer.disconnect();\n    };\n  }, []);\n\n  return (\n    <div className=\"shingle-detail-masthead__wrapper shingle-detail-masthead__wrapper--full\">\n      {defaultSetup && (\n        <div className=\"shingle-detail-masthead__content\">\n          <div className=\"shingle-detail-masthead__top-content\">\n            {data?.productDescription.icon && (\n              <IconItem\n                src={data?.productDescription.icon.src}\n                label={data?.productDescription.icon.label}\n              />\n            )}\n            <div className=\"shingle-detail-masthead__info\">\n              <h1\n                className=\"shingle-detail-masthead__heading rtf--inline\"\n                dangerouslySetInnerHTML={{\n                  __html: makeSuperScript(\n                    data?.productDescription?.heading as string\n                  )\n                }}\n              />\n              <div\n                className=\"shingle-detail-masthead__description\"\n                dangerouslySetInnerHTML={{\n                  __html: makeSuperScript(\n                    data?.productDescription?.description as string\n                  )\n                }}\n              />\n            </div>\n            <div className=\"shingle-detail-masthead__cta-wrapper\">\n              {data?.productDescription?.product && (\n                <div\n                  ref={bazarRef}\n                  className=\"shingle-detail-masthead__bazaar-review\"\n                  dangerouslySetInnerHTML={{\n                    __html: bazaarReview.replace(\n                      '{prod}',\n                      data?.productDescription?.product\n                    )\n                  }}\n                ></div>\n              )}\n              {personalizeButtons && (\n                <div\n                  className=\"shingle-detail-masthead__button-row\"\n                  dangerouslySetInnerHTML={{ __html: personalizeButtons }}\n                ></div>\n              )}\n            </div>\n          </div>\n          <div className=\"shingle-detail-masthead__swiper\">\n            <ImageSwiper\n              fullScreen={hideToggle}\n              images={displayImages}\n              nextLabel={nextLabel}\n              prevLabel={prevLabel}\n              productHeading={\n                data?.productDescription?.heading?.toString() || ''\n              }\n            />\n          </div>\n\n          {!hideToggle && (\n            <div className=\"row\">\n              <div\n                className=\"shingle-detail-masthead__toggle\"\n                style={{ blockSize: addressInput.tooltip ? '51px' : '49px' }}\n              >\n                <ToggleSwitch\n                  onValueChange={handleSwitchChange}\n                  values={toggleOptionsObj}\n                  defaultValue={toggleOptionsObj[selectedArea].value}\n                />\n              </div>\n              {selectedArea === 1 && (\n                <div className=\"shingle-detail-masthead__autocomplete\">\n                  <Autocomplete\n                    label={addressInput.label}\n                    name={addressInput.name}\n                    placeholder={addressInput.placeholder}\n                    tooltip={addressInput.tooltip}\n                    type={addressInput.type}\n                    error={addressError}\n                    setError={setAddressError}\n                    errorLabel={addressInput.error}\n                    clearLabel={addressInput.clear || 'Clear'}\n                    setValue={setAddress}\n                    value={address.address}\n                    countries={['us', 'ca']}\n                  />\n                </div>\n              )}\n            </div>\n          )}\n\n          {displayColors.length > 0 ? (\n            <ColorSwiper\n              fullScreen={hideToggle}\n              images={displayColors}\n              defaultColor={defaultColor}\n              handleSelected={handleSelected}\n              nextLabel={nextLabel}\n              prevLabel={prevLabel}\n              selected={selectedColor}\n            />\n          ) : (\n            <div>\n              <p className=\"color-swiper__error-message\">\n                {noResultsError?.replace('{zipCode}', address.zip)}\n              </p>\n            </div>\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\nexport default ShingleDetailMasthead;\n"],"names":["ImageSwiper","images","nextLabel","prevLabel","productHeading","fullScreen","nextButton","useRef","backButton","React","SwiperModule","FreeMode","Navigation","image","index","SwiperSlide","BREAKPOINTS","createDataLayerString","ColorSwiper","handleSelected","selected","defaultColor","setSwiper","useState","touch","setTouch","shouldPushLayer","setShouldPushLayer","sortedImages","useMemo","remainingImages","defaultImage","a","b","initialSlide","handleSwiperLayerEvent","swiper","useEffect","interactLayer","ShingleDetailMasthead","endpointColors","bazaarReview","toggleOptions","formAddress","noResultsError","hideToggle","data","setData","error","setError","displayImages","setDisplayImages","displayColors","setDisplayColors","yourAreaColors","setYourAreaColors","availableColors","setAvailableColors","selectedColor","setSelectedColor","setDefaultColor","defaultSetup","setDefaultSetup","addressError","setAddressError","toggleOptionsObj","addressInput","personalizeButtons","setPersonalizeButtons","address","setAddress","selectedAttributes","setSelectedAttributes","selectedArea","setSelectedArea","bazarRef","handleDefaultSelectedAttributes","_finalSelectedAttributes","_finalSelectedColor","selectedVariation","item","selectedOptions","variant","correspondingVariant","attributeOption","selectedOption","opt","selectedMediaVariant","productDetails","group","colorId","attribute","selectedVariant","_b","_selectedColor","_selectedAttribute","option","handleDisplayMedia","mapping","id","mediaImage","mediaVariant","_a","handleDisplayColors","_displayColors","colorImage","getVariantIsAvailable","value","handleSwitchChange","_selectedArea","details","detailColor","newOptionType","savedData","getStoredGeolocationData","productId","_country","response","handleBazarClick","reviewsSection","sectionName","sectionId","navigationLinks","dropdown","link","bazarContainer","maxTries","interval","button","e","observer","targetNode","targetInnerHtml","config","callback","mutationList","mutation","IconItem","makeSuperScript","_c","_d","_f","_e","ToggleSwitch","Autocomplete"],"mappings":"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"}