{"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, 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) => {\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 \n {children || link.name}\n \n ) : (\n \n {children}\n \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 \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) => {\n const contentRef = useRef(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 \n \n \n \n
\n \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
\n \n \n \n \n \n
\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) => {\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>;\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 \n \n
\n toggleModal(false)}\n className=\"relative cursor-pointer\"\n size={isMobile ? '1.25rem' : '1.5rem'}\n />\n
\n\n \n {type !== InfoTypeEnum.ContentOverlay && (\n \n )}\n\n {(title || description) && (\n
\n {title && (\n

\n {title}\n {secondaryTitle && (\n {secondaryTitle}\n )}\n

\n )}\n\n {description && (\n
\n \n {description}\n

\n
\n )}\n
\n )}\n\n {(hasCTAButton || hasCTALink) && (\n
\n {hasCTALink ? (\n \n )}\n
\n )}\n \n \n \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
\n {title &&

{title}

}\n\n
\n copyToClipboard(pageUrl)}\n aria-label={copyToClipboardAriaLabel}\n >\n \n \n\n \n \n \n\n \n \n \n\n {hasWhatsapp && (\n \n \n \n )}\n
\n
\n\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
\n {/* //! TODO: Need aria-label values passing to share panel (share to Facebook, Twitter, etc.) */}\n \n
\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((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(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();\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":""}