{"version":3,"file":"ArticleShare-Chunk-ed48a0224e99c9486c85.js","mappings":"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","sources":["webpack://nikon-client/./components/atoms/Button/Button.tsx","webpack://nikon-client/./components/atoms/CloseButton/CloseButton.tsx","webpack://nikon-client/./components/atoms/Modal/Modal.tsx","webpack://nikon-client/./components/atoms/Portal/Portal.tsx","webpack://nikon-client/./components/molecules/InfoModal/InfoModal.tsx","webpack://nikon-client/./components/molecules/SharePanel/SharePanel.tsx","webpack://nikon-client/./components/organisms/ArticleShare/ArticleShare.tsx","webpack://nikon-client/./models/enums/IconSizeEnum.ts","webpack://nikon-client/./models/enums/InfoTypeEnum.ts","webpack://nikon-client/./state-management/AriaLabelsStore.ts","webpack://nikon-client/./utility/helpers/bodyScrollLock.ts","webpack://nikon-client/./utility/hooks/useAriaLabels.ts","webpack://nikon-client/./utility/hooks/useMediaQuery.ts"],"sourcesContent":["import { ILink } from '@models/ILink';\nimport classNames from 'classnames';\nimport {\n  ButtonHTMLAttributes,\n  DetailedHTMLProps,\n  PropsWithChildren,\n} from 'react';\n\ninterface Props {\n  readonly className?: string;\n  readonly dataTestId?: string;\n  readonly disabled?: boolean;\n  readonly editHint?: string;\n  readonly link?: ILink;\n  readonly linkCallback?: () => void;\n  readonly secondary?: boolean;\n  readonly secondaryBackgroundClassName?: string;\n  readonly isLightMode?: boolean;\n  readonly inverted?: boolean;\n}\n\ntype ButtonProps = Props &\n  DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;\n\nconst Button = ({\n  children,\n  className,\n  dataTestId,\n  disabled = false,\n  editHint,\n  link,\n  linkCallback,\n  secondary = false,\n  secondaryBackgroundClassName = 'bg-transparent',\n  isLightMode,\n  inverted = false,\n  ...buttonProps\n}: PropsWithChildren<ButtonProps>) => {\n  const buttonClasses = classNames(\n    {\n      'bg-yellow py-1 px-4 text-black-100 hover:bg-yellow-100 focus:bg-yellow-500 active:bg-yellow-500':\n        !disabled && !secondary && !inverted,\n      //\n      [`${secondaryBackgroundClassName} border border-yellow py-[3px] px-[15px] text-black-100 hover:border-yellow-100 hover:bg-yellow-100 hover:text-black-100 focus:border-yellow-500 focus:bg-yellow-500 active:border-yellow-500 active:bg-yellow-500 ${\n        isLightMode\n          ? ''\n          : 'dark:text-white dark:hover:text-black-100 dark:focus:text-black-100 dark:active:text-black-100'\n      }`]: !disabled && secondary && !inverted,\n      //\n      'bg-grey text-grey-500 py-1 px-4': disabled,\n      //\n      'bg-black text-white py-1 px-4 active:bg-grey-600 hover:bg-grey-600 focus:bg-grey-600':\n        !disabled && !secondary && inverted,\n    },\n    'cta rounded-full inline-block min-h-min select-none',\n    className\n  );\n\n  return link?.url && (link?.name || children) && !disabled ? (\n    <a\n      className={buttonClasses}\n      href={link.url}\n      target={link.target}\n      data-epi-property-name={editHint}\n      onClick={linkCallback}\n      data-testid={dataTestId}\n    >\n      {children || link.name}\n    </a>\n  ) : (\n    <button\n      {...buttonProps}\n      className={buttonClasses}\n      disabled={disabled}\n      data-epi-property-name={editHint}\n      data-testid={dataTestId}\n    >\n      {children}\n    </button>\n  );\n};\n\nexport default Button;\n","import IconSizeEnum from '@models/enums/IconSizeEnum';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\nimport { MouseEventHandler } from 'react';\n\ninterface Props {\n  readonly ariaLabel?: string;\n  readonly className?: string;\n  readonly color?: 'black' | 'white' | 'red';\n  readonly onClick: MouseEventHandler;\n  readonly size?: IconSizeEnum | string;\n  readonly dataTestId?: string;\n}\n\nconst CloseButton = ({\n  ariaLabel,\n  className,\n  color = 'black',\n  onClick,\n  size = IconSizeEnum.lg,\n  dataTestId,\n}: Props) => {\n  const { closeModalAriaLabel } = useAriaLabels();\n\n  const closeColours = {\n    black: 'before:bg-black-100 after:bg-black-100',\n    white: 'before:bg-white after:bg-white',\n    red: 'before:bg-red-100 after:bg-red-100',\n  };\n\n  return (\n    <button\n      type=\"button\"\n      className={classNames('close-button', closeColours[color], className)}\n      aria-label={ariaLabel ?? closeModalAriaLabel}\n      style={{ width: size, height: size }}\n      onClick={onClick}\n      data-testid={dataTestId}\n    />\n  );\n};\n\nexport default CloseButton;\n","import CloseButton from '@atoms/CloseButton/CloseButton';\nimport Portal from '@atoms/Portal/Portal';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport bodyScrollLock from '@utils/helpers/bodyScrollLock';\nimport classNames from 'classnames';\nimport FocusTrap from 'focus-trap-react';\nimport { motion } from 'framer-motion';\nimport { PropsWithChildren, useCallback, useEffect, useRef } from 'react';\n\ninterface Props {\n  readonly onCloseCallback?: () => void;\n  readonly contentClasses?: string;\n  readonly crossMarginsClassName?: string;\n  readonly crossClasses?: string;\n  readonly crossColor?: 'black' | 'white';\n  readonly isOpen: boolean;\n  readonly modalClasses?: string;\n  readonly setIsOpen?: (param: boolean) => void;\n  readonly showCloseButton?: boolean;\n  readonly transparent?: boolean;\n  readonly isCloseButtonFixed?: boolean;\n  readonly closeButtonIconSize?: IconSizeEnum | string;\n  readonly shouldCloseOnClickOutsideContent?: boolean;\n  readonly shouldLockBody?: boolean;\n}\n\nconst Modal = ({\n  onCloseCallback,\n  children,\n  contentClasses,\n  crossColor = 'white',\n  crossMarginsClassName = 'mr-8 mt-8',\n  crossClasses,\n  isOpen,\n  modalClasses,\n  setIsOpen,\n  showCloseButton = true,\n  transparent = false,\n  isCloseButtonFixed = true,\n  closeButtonIconSize = IconSizeEnum.md,\n  shouldCloseOnClickOutsideContent = false,\n  shouldLockBody = true,\n}: PropsWithChildren<Props>) => {\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (isOpen && shouldLockBody) {\n      bodyScrollLock(true);\n    }\n\n    return () => {\n      if (shouldLockBody) bodyScrollLock(false);\n    };\n  }, [isOpen, shouldLockBody]);\n\n  const close = useCallback(() => {\n    setIsOpen?.(false);\n    onCloseCallback?.();\n  }, [onCloseCallback, setIsOpen]);\n\n  useEffect(() => {\n    const keyboardClose = (ev: KeyboardEvent) => {\n      if (ev.key === 'Escape' && isOpen === true) {\n        setIsOpen?.(false);\n      }\n    };\n    window.addEventListener('keydown', keyboardClose);\n\n    return () => {\n      window.removeEventListener('keydown', keyboardClose);\n    };\n  }, [isOpen, setIsOpen]);\n\n  useEffect(() => {\n    const handleClickOutsideContent = (ev: Event) => {\n      if (\n        isOpen &&\n        shouldCloseOnClickOutsideContent &&\n        !contentRef.current?.contains(ev.target as HTMLElement)\n      ) {\n        close();\n      }\n    };\n\n    window.addEventListener('click', handleClickOutsideContent, true);\n\n    return () => {\n      window.removeEventListener('click', handleClickOutsideContent, true);\n    };\n  }, [close, isOpen, shouldCloseOnClickOutsideContent]);\n\n  if (!isOpen) {\n    return null;\n  }\n\n  return (\n    <Portal key=\"portal\" mountId=\"drawer-root\">\n      <FocusTrap\n        focusTrapOptions={{\n          preventScroll: true,\n          escapeDeactivates: false,\n        }}\n      >\n        <motion.div\n          animate={{ opacity: 1 }}\n          className=\"relative z-max h-auto\"\n          exit={{ opacity: 0 }}\n          initial={{ opacity: 0 }}\n          transition={{\n            duration: 0.8,\n            ease: [0.04, 0.62, 0.23, 0.98],\n          }}\n        >\n          <section\n            className={classNames(\n              transparent ? 'bg-black-100/50' : 'bg-black-100',\n              'fixed inset-0 z-100 text-white'\n            )}\n          >\n            <div className=\"flex h-full w-full\">\n              <div\n                className={classNames(\n                  modalClasses,\n                  'container h-full w-full overflow-y-auto'\n                )}\n              >\n                <div\n                  className={classNames(contentClasses, 'relative text-left')}\n                  ref={contentRef}\n                >\n                  {showCloseButton && (\n                    <>\n                      {/* A hidden button that steals the inital focus of the modal preventing the close icon from animating on modal open  */}\n                      {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n                      <button className=\"hidden\" />\n\n                      <CloseButton\n                        color={crossColor}\n                        size={closeButtonIconSize}\n                        onClick={close}\n                        className={classNames(\n                          'right-0 top-0 z-100 flex cursor-pointer flex-col items-center',\n                          isCloseButtonFixed ? 'fixed' : 'absolute',\n                          crossMarginsClassName,\n                          crossClasses\n                        )}\n                      />\n                    </>\n                  )}\n                  {children}\n                </div>\n              </div>\n            </div>\n          </section>\n        </motion.div>\n      </FocusTrap>\n    </Portal>\n  );\n};\n\nexport default Modal;\n","import { PropsWithChildren, useEffect, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface Props {\n  readonly mountId: string;\n}\n\nconst Portal = ({ mountId, children }: PropsWithChildren<Props>) => {\n  const containerElement = useMemo(() => document.createElement('div'), []);\n\n  useEffect(() => {\n    document.getElementById(mountId)?.appendChild(containerElement);\n\n    return () => {\n      document.getElementById(mountId)?.removeChild(containerElement);\n    };\n  }, [mountId, containerElement]);\n\n  return createPortal(children, containerElement);\n};\n\nexport default Portal;\n","import Button from '@atoms/Button/Button';\nimport CloseButton from '@atoms/CloseButton/CloseButton';\nimport Icon from '@atoms/Icon/Icon';\nimport Modal from '@atoms/Modal/Modal';\nimport InfoTypeEnum from '@models/enums/InfoTypeEnum';\nimport { ILink } from '@models/ILink';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport classNames from 'classnames';\nimport { Dispatch, SetStateAction } from 'react';\n\ninterface Props {\n  readonly buttonText?: string;\n  readonly description?: string;\n  readonly isModalOpen: boolean;\n  readonly ctaLink?: ILink;\n  readonly secondaryTitle?: string;\n  readonly title?: string;\n  readonly type: InfoTypeEnum;\n  readonly toggleModal: Dispatch<SetStateAction<boolean>>;\n  readonly handleCTAClick?: () => void;\n  readonly dataTestId?: string;\n  readonly shouldLockBody?: boolean;\n}\n\nconst InfoModal = ({\n  buttonText,\n  description,\n  isModalOpen,\n  ctaLink,\n  secondaryTitle,\n  title,\n  toggleModal,\n  type,\n  handleCTAClick,\n  dataTestId = 'CT-Info-Modal',\n  shouldLockBody,\n}: Props) => {\n  const isMobile = useMediaQuery(1024);\n  const hasCTAButton = !!handleCTAClick && !!buttonText;\n  const hasCTALink = !!ctaLink?.url && !!ctaLink.name;\n\n  const iconType = {\n    [InfoTypeEnum.Error]: 'warning',\n    [InfoTypeEnum.Information]: 'info',\n    [InfoTypeEnum.Success]: 'check',\n  };\n\n  const iconColour = {\n    [InfoTypeEnum.Error]: 'text-yellow',\n    [InfoTypeEnum.Information]: 'text-green',\n    [InfoTypeEnum.Success]: 'bg-yellow rounded-full p-2',\n  };\n\n  return (\n    <Modal\n      isOpen={isModalOpen}\n      setIsOpen={toggleModal}\n      modalClasses=\"flex flex-col justify-center items-center w-full h-full fixed top-0 bottom-0 left-0 right-0 bg-black-100/25 max-w-none\"\n      contentClasses=\"w-full p-0 flex justify-center\"\n      transparent\n      showCloseButton={false}\n      shouldLockBody={shouldLockBody}\n    >\n      <div\n        className={classNames(\n          'w-full rounded-lg bg-white p-3 sm:w-2/4 lg:p-7.5',\n          type === InfoTypeEnum.ContentOverlay ? 'xl:w-[673px]' : 'xl:w-1/3'\n        )}\n      >\n        <div className=\"flex justify-end\">\n          <CloseButton\n            onClick={() => toggleModal(false)}\n            className=\"relative cursor-pointer\"\n            size={isMobile ? '1.25rem' : '1.5rem'}\n          />\n        </div>\n\n        <div\n          className={classNames(\n            type === InfoTypeEnum.ContentOverlay\n              ? 'px-2 pb-4 pt-2 lg:px-6 lg:pb-7.5'\n              : 'px-2.5 pb-13 pt-5 lg:px-5 lg:pt-7.5',\n            { 'text-center': type === InfoTypeEnum.Success },\n            'flex flex-col text-black-100'\n          )}\n        >\n          {type !== InfoTypeEnum.ContentOverlay && (\n            <Icon\n              name={iconType[type]}\n              size=\"3.375rem\"\n              colorClassName={iconColour[type]}\n              className={classNames('mb-5 lg:mb-7.5', {\n                'mx-auto': type === InfoTypeEnum.Success,\n              })}\n            />\n          )}\n\n          {(title || description) && (\n            <div className=\"flex flex-col gap-y-2.5 lg:gap-y-2\">\n              {title && (\n                <h4 data-testid={`${dataTestId}-Pop-Up-Title`}>\n                  {title}\n                  {secondaryTitle && (\n                    <span className=\"text-grey-450\"> {secondaryTitle}</span>\n                  )}\n                </h4>\n              )}\n\n              {description && (\n                <div className=\"max-h-[30vh] overflow-y-auto\">\n                  <p\n                    className=\"body-one whitespace-pre-line\"\n                    data-testid={`${dataTestId}-Pop-Up-Text`}\n                  >\n                    {description}\n                  </p>\n                </div>\n              )}\n            </div>\n          )}\n\n          {(hasCTAButton || hasCTALink) && (\n            <div className=\"mt-5 lg:mt-10\">\n              {hasCTALink ? (\n                <Button link={ctaLink} />\n              ) : (\n                <Button onClick={handleCTAClick}>{buttonText}</Button>\n              )}\n            </div>\n          )}\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default InfoModal;\n","import Icon from '@atoms/Icon/Icon';\nimport { ISharePanel } from '@models/ISharePanel';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport InfoTypeEnum from '@models/enums/InfoTypeEnum';\nimport InfoModal from '@molecules/InfoModal/InfoModal';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport { useEffect, useState } from 'react';\n\ninterface Props extends ISharePanel {\n  readonly hasWhatsapp?: boolean;\n}\n\nconst SharePanel = ({\n  title,\n  tooltipText = '',\n  hasWhatsapp = false,\n  shareOrigin = 'article_share',\n}: Props) => {\n  const [isCopySuccessModalOpen, setIsCopySuccessModalOpen] = useState(false);\n  const [pageUrl, setPageUrl] = useState('');\n  const {\n    copyToClipboardAriaLabel,\n    shareToFacebookAriaLabel,\n    shareToXAriaLabel,\n    shareToWhatsappAriaLabel,\n  } = useAriaLabels();\n\n  const socialShareLinks = {\n    facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(\n      `${pageUrl}?utm_source=facebook&utm_medium=${shareOrigin}`\n    )}`,\n    twitter: `https://twitter.com/intent/tweet?url=${encodeURIComponent(\n      `${pageUrl}?utm_source=twitter&utm_medium=${shareOrigin}`\n    )}`,\n    whatsapp: `whatsapp://send?text=${encodeURIComponent(\n      `${pageUrl}?utm_source=whatsapp&utm_medium=${shareOrigin}`\n    )}`,\n  };\n\n  const copyToClipboard = async (url: string) => {\n    try {\n      await navigator.clipboard.writeText(\n        `${url}?utm_source=url&utm_medium=${shareOrigin}`\n      );\n\n      setIsCopySuccessModalOpen((isOpen) => !isOpen);\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.log({ error });\n    }\n  };\n\n  useEffect(() => {\n    if (typeof window !== 'undefined') {\n      setPageUrl(window.location.href);\n    }\n  }, []);\n\n  return (\n    <>\n      <div className=\"text-black-100 dark:text-white\">\n        {title && <p className=\"body-two\">{title}</p>}\n\n        <div className=\"mt-4 flex gap-5\">\n          <button\n            type=\"button\"\n            onClick={() => copyToClipboard(pageUrl)}\n            aria-label={copyToClipboardAriaLabel}\n          >\n            <Icon\n              name=\"share\"\n              className=\"text-black-100 transition duration-300 ease-in-out hover:text-grey-450 dark:text-white dark:hover:text-yellow\"\n              size={IconSizeEnum.lg}\n            />\n          </button>\n\n          <a\n            href={socialShareLinks.facebook}\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            aria-label={shareToFacebookAriaLabel}\n          >\n            <Icon\n              name=\"facebook\"\n              className=\"text-black-100 transition duration-300 ease-in-out hover:text-grey-450 dark:text-white dark:hover:text-yellow\"\n              size={IconSizeEnum.lg}\n            />\n          </a>\n\n          <a\n            href={socialShareLinks.twitter}\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            aria-label={shareToXAriaLabel}\n          >\n            <Icon\n              name=\"twitter\"\n              className=\"text-black-100 transition duration-300 ease-in-out hover:text-grey-450 dark:text-white dark:hover:text-yellow\"\n              size={IconSizeEnum.lg}\n            />\n          </a>\n\n          {hasWhatsapp && (\n            <a\n              href={socialShareLinks.whatsapp}\n              target=\"_blank\"\n              rel=\"noreferrer\"\n              aria-label={shareToWhatsappAriaLabel}\n            >\n              <Icon\n                name=\"whatsapp\"\n                className=\"text-black-100 transition duration-300 ease-in-out hover:text-grey-450 dark:text-white dark:hover:text-yellow\"\n                size={IconSizeEnum.lg}\n              />\n            </a>\n          )}\n        </div>\n      </div>\n\n      <InfoModal\n        type={InfoTypeEnum.Success}\n        isModalOpen={isCopySuccessModalOpen}\n        toggleModal={setIsCopySuccessModalOpen}\n        title={tooltipText}\n      />\n    </>\n  );\n};\n\nexport default SharePanel;\n","import { ISharePanel } from '@models/ISharePanel';\nimport SharePanel from '@molecules/SharePanel/SharePanel';\n\nconst ArticleShare = (props: ISharePanel) => (\n  <section>\n    {/* //! TODO: Need aria-label values passing to share panel (share to Facebook, Twitter, etc.) */}\n    <SharePanel {...props} />\n  </section>\n);\n\nexport default ArticleShare;\n","const enum IconSizeEnum {\n  xs = '.5rem',\n  sm = '.75rem',\n  md = '1rem',\n  lg = '1.5rem',\n  xl = '1.75rem',\n}\n\nexport default IconSizeEnum;\n","enum InfoTypeEnum {\n  Success = 'success',\n  Error = 'error',\n  Information = 'information',\n  ContentOverlay = 'content_overlay',\n}\n\nexport default InfoTypeEnum;\n","import { IAriaLabels } from '@models/IAriaLabels';\nimport create from 'zustand';\n\ninterface IAriaLabelsState {\n  ariaLabels: IAriaLabels;\n  setAriaLabels: (ariaLabels: IAriaLabels) => void;\n}\n\nexport const initialAriaLabels: IAriaLabels = {\n  backToFirstLevelNavigationAriaLabel: 'Back to first level of navigation',\n  breadcrumbAriaLabel: 'Breadcrumb navigation',\n  breadcrumbFooterAriaLabel: 'Breadcrumb footer navigation',\n  clearFiltersAriaLabel: 'Clear filters',\n  closeMenuAriaLabel: 'Close menu',\n  closeAddressListAriaLabel: 'Close address list',\n  closeMobileNavigationAriaLabel: 'Close navigation',\n  closeModalAriaLabel: 'Close Modal',\n  closeSignUpFormAriaLabel: 'Close signup form',\n  closeSiteNotificationAriaLabel: 'Close site notification',\n  copyToClipboardAriaLabel: 'Copy to clipboard',\n  editOrDeleteAriaLabel: 'Edit or delete',\n  mainNavigationAriaLabel: 'Main navigation',\n  moreInformationAriaLabel: 'More information',\n  nextAriaLabel: 'Go to next slide',\n  openAddressListAriaLabel: 'Open address list',\n  openImageInFullScreenAriaLabel: 'Open image in full screen',\n  openMenuAriaLabel: 'Open menu',\n  overlayToCloseDesktopNavigationAriaLabel: 'Close overlay',\n  pauseVideoAriaLabel: 'Pause video',\n  playVideoAriaLabel: 'Play video',\n  previousAriaLabel: 'Go to previous slide',\n  searchAriaLabel: 'Search',\n  shareToFacebookAriaLabel: 'Share to Facebook',\n  shareToWhatsappAriaLabel: 'Share to Whatsapp',\n  shareToXAriaLabel: 'Share to X',\n  siteNotificationsAriaLabel: 'Site notifications banner',\n  uspStripAriaLabel: 'Unique Selling Point Strip',\n  zoomInAriaLabel: 'Zoom in',\n  zoomOutAriaLabel: 'Zoom out',\n};\n\nconst useAriaLabelsStore = create<IAriaLabelsState>((set) => ({\n  ariaLabels: initialAriaLabels,\n  setAriaLabels: (ariaLabels: IAriaLabels) => set({ ariaLabels }),\n}));\n\nexport default useAriaLabelsStore;\n","const bodyScrollLock = (isScrollLocked: boolean) => {\n  const documentElementScroll =\n    document.documentElement.style.getPropertyValue('--scroll-y');\n  const cacheLocator = documentElementScroll || `${window.scrollY}px`;\n\n  if (!documentElementScroll) {\n    window.addEventListener('scroll', () => {\n      document.documentElement.style.setProperty(\n        '--scroll-y',\n        `${window.scrollY}px`\n      );\n    });\n  }\n\n  if (isScrollLocked) {\n    const scrollY = cacheLocator;\n    const { body } = document;\n    body.style.position = 'fixed';\n    body.style.top = `-${scrollY}`;\n  } else {\n    const { body } = document;\n    body.style.position = '';\n    const scrollY = body.style.top || cacheLocator;\n    body.style.top = '';\n    window.scrollTo(0, Math.abs(parseInt(scrollY || '0', 10)));\n  }\n};\n\nexport default bodyScrollLock;\n","import { IAriaLabels } from '@models/IAriaLabels';\nimport useAriaLabelsStore, { initialAriaLabels } from '@state/AriaLabelsStore';\nimport { useEffect, useState } from 'react';\n\nconst useAriaLabels = () => {\n  const [ariaLabels, setAriaLabels] = useState<IAriaLabels>(initialAriaLabels);\n  const ariaLabelsFromStore = useAriaLabelsStore((state) => state.ariaLabels);\n\n  useEffect(() => {\n    setAriaLabels(ariaLabelsFromStore);\n  }, [ariaLabelsFromStore]);\n\n  return ariaLabels;\n};\n\nexport default useAriaLabels;\n","import { useCallback, useEffect, useState } from 'react';\n\nconst useMediaQuery = (minWidth: number) => {\n  // Set the default value to undefined in order to properly distinguish the falsey values\n  // where undefined is the value before computing whether the screen size is smaller than the minWidth\n  // i.e. a state where we don't really know whether we're below the threshold or not\n  // and false is the value where the computation returns false\n  const [isSmallerThan, setIsSmallerThan] = useState<boolean>();\n\n  const handler = useCallback(() => {\n    const isDesiredWidth = window.innerWidth < minWidth;\n    setIsSmallerThan(isDesiredWidth);\n  }, [minWidth]);\n\n  useEffect(() => {\n    window.addEventListener('resize', handler);\n    handler();\n\n    return () => {\n      window.removeEventListener('resize', handler);\n    };\n  }, [handler]);\n\n  return isSmallerThan;\n};\n\nexport default useMediaQuery;\n"],"names":["_ref","children","className","dataTestId","disabled","editHint","link","linkCallback","secondary","secondaryBackgroundClassName","isLightMode","inverted","buttonProps","buttonClasses","classNames","url","name","React","createElement","href","target","onClick","_extends","ariaLabel","color","size","IconSizeEnum","lg","closeModalAriaLabel","useAriaLabels","type","black","white","red","style","width","height","onCloseCallback","contentClasses","crossColor","crossMarginsClassName","crossClasses","isOpen","modalClasses","setIsOpen","showCloseButton","transparent","isCloseButtonFixed","closeButtonIconSize","md","shouldCloseOnClickOutsideContent","shouldLockBody","contentRef","useRef","useEffect","bodyScrollLock","close","useCallback","keyboardClose","ev","key","window","addEventListener","removeEventListener","handleClickOutsideContent","current","contains","Portal","mountId","FocusTrap","focusTrapOptions","preventScroll","escapeDeactivates","motion","div","animate","opacity","exit","initial","transition","duration","ease","ref","Fragment","CloseButton","containerElement","useMemo","document","getElementById","appendChild","removeChild","createPortal","buttonText","description","isModalOpen","ctaLink","secondaryTitle","title","toggleModal","handleCTAClick","isMobile","useMediaQuery","hasCTAButton","hasCTALink","iconType","InfoTypeEnum","Error","Information","Success","iconColour","Modal","ContentOverlay","Icon","colorClassName","Button","tooltipText","hasWhatsapp","shareOrigin","isCopySuccessModalOpen","setIsCopySuccessModalOpen","useState","pageUrl","setPageUrl","copyToClipboardAriaLabel","shareToFacebookAriaLabel","shareToXAriaLabel","shareToWhatsappAriaLabel","socialShareLinks","facebook","encodeURIComponent","twitter","whatsapp","location","async","navigator","clipboard","writeText","error","console","log","copyToClipboard","rel","InfoModal","props","SharePanel","initialAriaLabels","backToFirstLevelNavigationAriaLabel","breadcrumbAriaLabel","breadcrumbFooterAriaLabel","clearFiltersAriaLabel","closeMenuAriaLabel","closeAddressListAriaLabel","closeMobileNavigationAriaLabel","closeSignUpFormAriaLabel","closeSiteNotificationAriaLabel","editOrDeleteAriaLabel","mainNavigationAriaLabel","moreInformationAriaLabel","nextAriaLabel","openAddressListAriaLabel","openImageInFullScreenAriaLabel","openMenuAriaLabel","overlayToCloseDesktopNavigationAriaLabel","pauseVideoAriaLabel","playVideoAriaLabel","previousAriaLabel","searchAriaLabel","siteNotificationsAriaLabel","uspStripAriaLabel","zoomInAriaLabel","zoomOutAriaLabel","create","set","ariaLabels","setAriaLabels","isScrollLocked","documentElementScroll","documentElement","getPropertyValue","cacheLocator","scrollY","setProperty","body","position","top","scrollTo","Math","abs","parseInt","ariaLabelsFromStore","useAriaLabelsStore","state","minWidth","isSmallerThan","setIsSmallerThan","handler","isDesiredWidth","innerWidth"],"sourceRoot":""}