{"version":3,"file":"1005-ca52f83ecf5eaf4b76e7.js","mappings":"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","sources":["webpack://nikon-client/./components/atoms/Backdrop/Backdrop.tsx","webpack://nikon-client/./components/atoms/Drawer/Drawer.tsx","webpack://nikon-client/./components/atoms/Image/Image.tsx","webpack://nikon-client/./components/atoms/ReturnLink/ReturnLink.tsx","webpack://nikon-client/./components/atoms/SelectorButton/SelectorButton.tsx","webpack://nikon-client/./utility/hooks/useVerticalGrabScroll.ts","webpack://nikon-client/./utility/hooks/useVerticalScrollShadows.ts","webpack://nikon-client/./components/atoms/ShadowContainerVertical/ShadowContainerVertical.tsx","webpack://nikon-client/./components/atoms/Tag/Tag.tsx","webpack://nikon-client/./components/molecules/SharePanel/SharePanel.tsx","webpack://nikon-client/./models/enums/SizeEnum.ts","webpack://nikon-client/./models/enums/TagTypesEnum.ts","webpack://nikon-client/./utility/hooks/useResizeObserver.ts"],"sourcesContent":["import { motion } from 'framer-motion';\nimport { Dispatch, PropsWithChildren, SetStateAction } from 'react';\n\ninterface Props {\n  readonly onCloseCallback?: Dispatch<SetStateAction<boolean>>;\n  readonly className?: string;\n}\n\nconst Backdrop = ({\n  children,\n  className,\n  onCloseCallback,\n}: PropsWithChildren<Props>) => (\n  <motion.div\n    animate={{ opacity: 1 }}\n    exit={{ opacity: 0 }}\n    initial={{ opacity: 0 }}\n    role=\"presentation\"\n    className={className}\n    onClick={() => onCloseCallback?.((oldState: boolean) => !oldState)}\n  >\n    <div className=\"fixed bottom-0 left-0 right-0 top-0 bg-black-100/40\">\n      {children}\n    </div>\n  </motion.div>\n);\n\nexport default Backdrop;\n","import Backdrop from '@atoms/Backdrop/Backdrop';\nimport CloseButton from '@atoms/CloseButton/CloseButton';\nimport Portal from '@atoms/Portal/Portal';\nimport bodyScrollLock from '@utils/helpers/bodyScrollLock';\nimport classNames from 'classnames';\nimport FocusTrap from 'focus-trap-react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport {\n  Dispatch,\n  forwardRef,\n  PropsWithChildren,\n  SetStateAction,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n} from 'react';\n\nexport interface IDrawerContentRef {\n  readonly scrollToTop: () => void;\n}\n\ninterface Props {\n  readonly setIsOpen: Dispatch<SetStateAction<boolean>>;\n  readonly isOpen: boolean;\n  readonly onCloseCallback?: () => void;\n  readonly showClose?: boolean;\n  readonly drawerClasses?: string;\n  readonly maxWidthClassName?: string;\n  readonly contentSpacingClassName?: string;\n  readonly contentClassName?: string;\n  readonly isBottomToTopSliding?: boolean;\n  readonly dataTestId?: string;\n}\n\nconst Drawer = forwardRef<IDrawerContentRef, PropsWithChildren<Props>>(\n  (\n    {\n      setIsOpen,\n      isOpen,\n      children,\n      onCloseCallback,\n      showClose = true,\n      drawerClasses,\n      maxWidthClassName = 'max-w-[605px]',\n      contentSpacingClassName = 'pt-14',\n      contentClassName,\n      isBottomToTopSliding,\n      dataTestId = 'Drawer',\n    },\n    contentRef\n  ) => {\n    const drawerRef = useRef<HTMLDivElement>(null);\n    const drawerContentRef = useRef<HTMLDivElement>(null);\n    const iframeHeightRef = useRef<string | null>(null);\n\n    const isInEditor =\n      typeof window !== 'undefined' && window.top !== window.self;\n\n    const variants = {\n      hidden: {\n        ...(isBottomToTopSliding ? { y: '100vh' } : { x: '100vw' }),\n        transition: { duration: 0.5 },\n      },\n      show: {\n        ...(isBottomToTopSliding ? { y: 0 } : { x: 0 }),\n        transition: { duration: 0.5 },\n      },\n    };\n\n    const handleClose = () => {\n      setIsOpen(false);\n      onCloseCallback?.();\n    };\n\n    useImperativeHandle(contentRef, () => ({\n      scrollToTop: () => {\n        drawerContentRef.current?.scrollTo({ top: 0, behavior: 'smooth' });\n      },\n    }));\n\n    useEffect(() => {\n      if (isOpen) {\n        bodyScrollLock(true);\n      }\n\n      return () => {\n        bodyScrollLock(false);\n      };\n    }, [isOpen]);\n\n    useEffect(() => {\n      const close = (e: KeyboardEvent) => {\n        if (e.key === 'Escape') {\n          setIsOpen(false);\n        }\n      };\n\n      window.addEventListener('keydown', close);\n      return () => window.removeEventListener('keydown', close);\n    }, [setIsOpen]);\n\n    useEffect(() => {\n      if (!isInEditor) return;\n\n      const editorIFrame = drawerRef.current?.ownerDocument.defaultView\n        ?.frameElement as HTMLIFrameElement;\n\n      if (!editorIFrame) return;\n\n      if (!iframeHeightRef.current) {\n        iframeHeightRef.current = editorIFrame.style.height;\n      }\n\n      editorIFrame.style.height = isOpen ? '100vh' : iframeHeightRef.current;\n    }, [isInEditor, isOpen]);\n\n    return (\n      <AnimatePresence>\n        {isOpen && (\n          <Portal key=\"portal\" mountId=\"drawer-root\">\n            <FocusTrap\n              focusTrapOptions={{\n                preventScroll: true,\n              }}\n            >\n              <div ref={drawerRef} data-testid={dataTestId}>\n                <Backdrop\n                  className=\"relative z-max\"\n                  key=\"backdrop\"\n                  onCloseCallback={handleClose}\n                />\n\n                <motion.div\n                  key=\"sidebar\"\n                  onClick={(e) => e.stopPropagation()}\n                  className={classNames(\n                    'drawer fixed inset-0 left-auto z-max flex w-full flex-col overflow-hidden bg-grey-100',\n                    maxWidthClassName,\n                    drawerClasses\n                  )}\n                  initial=\"hidden\"\n                  animate=\"show\"\n                  exit=\"hidden\"\n                  variants={variants}\n                  data-testid=\"drawer\"\n                >\n                  <div\n                    ref={drawerContentRef}\n                    className={classNames(\n                      'relative flex h-full flex-col',\n                      contentSpacingClassName,\n                      contentClassName\n                    )}\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                    {children}\n                    {showClose && (\n                      <CloseButton\n                        onClick={handleClose}\n                        className=\"absolute right-4 top-4 cursor-pointer text-sm\"\n                      />\n                    )}\n                  </div>\n                </motion.div>\n              </div>\n            </FocusTrap>\n          </Portal>\n        )}\n      </AnimatePresence>\n    );\n  }\n);\n\nexport default Drawer;\n","import BreakpointEnum from '@models/enums/BreakpointEnum';\nimport { IImage } from '@models/IImage';\nimport useBreakpoint from '@utils/hooks/useBreakpoint';\nimport classNames from 'classnames';\nimport { PropsWithChildren, RefObject, useState } from 'react';\n\ninterface Props {\n  readonly classes?: string;\n  readonly dataTestId?: string;\n  readonly epiEdit?: string;\n  readonly image?: IImage;\n  readonly imageClasses?: string;\n  readonly imageRef?:\n    | RefObject<HTMLImageElement>\n    | ((node: HTMLElement | null) => void);\n  readonly lazyLoad?: boolean;\n  readonly progressiveLoad?: boolean;\n  readonly sizes?: string;\n}\n\nconst Image = ({\n  children,\n  classes,\n  dataTestId,\n  epiEdit,\n  image,\n  imageClasses,\n  imageRef,\n  lazyLoad = true,\n  progressiveLoad = true,\n  sizes = '',\n}: PropsWithChildren<Props>) => {\n  const mobileSource = image?.mobile;\n  const tabletSource = image?.tablet;\n  const desktopSource = image?.desktop;\n  const largeDesktopSource = image?.largeDesktop;\n  const breakpoint = useBreakpoint() as BreakpointEnum;\n  const [isLoaded, setIsLoaded] = useState<boolean>(false);\n\n  if (!desktopSource?.url) return null;\n\n  const currentSrc = {\n    [BreakpointEnum.Small]: mobileSource,\n    [BreakpointEnum.Medium]: tabletSource,\n    [BreakpointEnum.Large]: desktopSource,\n    [BreakpointEnum.XLarge]: largeDesktopSource,\n  };\n\n  return (\n    <picture className={classNames(classes)}>\n      <source\n        type=\"image/webp\"\n        sizes={sizes}\n        srcSet={`${mobileSource?.url} 376w, ${tabletSource?.url} 768w, ${desktopSource?.url} 1024w, ${largeDesktopSource?.url} 1440w`}\n      />\n      <img\n        ref={imageRef}\n        alt={image?.altText?.length ? image?.altText : 'nikon-image'}\n        className={classNames(\n          imageClasses,\n          'transition duration-500 ease-in-out'\n        )}\n        data-epi-property-name={epiEdit}\n        draggable=\"false\"\n        loading={lazyLoad ? 'lazy' : 'eager'}\n        onLoad={() => setIsLoaded(true)}\n        sizes={sizes}\n        src={\n          isLoaded && progressiveLoad\n            ? currentSrc[breakpoint]?.url\n            : mobileSource?.url\n        }\n        height={currentSrc[breakpoint]?.height}\n        width={currentSrc[breakpoint]?.width}\n        srcSet={`${mobileSource?.originalUrl} 376w, ${tabletSource?.originalUrl} 768w, ${desktopSource?.originalUrl} 1024w, ${largeDesktopSource?.originalUrl} 1440w`}\n        {...(dataTestId && { 'data-testid': dataTestId })}\n      />\n      {isLoaded && children}\n    </picture>\n  );\n};\n\nexport default Image;\n","import Icon from '@atoms/Icon/Icon';\nimport { ILink } from '@models/ILink';\nimport classNames from 'classnames';\n\ninterface Props {\n  readonly className?: string;\n  readonly editHint?: string;\n  readonly link: ILink;\n  readonly dataTestId?: string;\n}\n\nconst ReturnLink = ({\n  className,\n  editHint,\n  link,\n  dataTestId = 'Return-Link',\n}: Props) => (\n  <a\n    href={link.url}\n    className={classNames(\n      className,\n      'body-two group flex flex-row items-center gap-x-1 text-black-100 hover:text-grey-500 dark:text-white dark:hover:text-yellow'\n    )}\n    data-epi-property-name={editHint}\n    data-testid={dataTestId}\n  >\n    <Icon\n      name=\"chevron_right\"\n      className=\"-translate-x-2 rotate-180\"\n      colorClassName=\"text-black-100 group-hover:text-grey-500 dark:text-white dark:group-hover:text-yellow\"\n    />\n    {link.name}\n  </a>\n);\n\nexport default ReturnLink;\n","import Icon from '@atoms/Icon/Icon';\n\ninterface Props {\n  readonly title: string;\n  readonly subTitle?: string;\n  readonly onClick: () => void;\n  readonly dataTestId?: string;\n}\n\nconst SelectorButton = ({\n  title,\n  subTitle,\n  dataTestId = 'Selector-Button',\n  onClick,\n}: Props) => (\n  <button\n    type=\"button\"\n    className=\"flex w-full rounded-[10px] border-transparent bg-grey-100 p-5 transition-all dark:bg-grey-600 md:py-[15px] lg:border lg:py-3 lg:hover:cursor-pointer lg:hover:border lg:hover:border-yellow\"\n    onClick={onClick}\n    data-testid={dataTestId}\n  >\n    <div className=\"flex w-full flex-row items-center justify-between\">\n      <span className=\"flex flex-col gap-[9px] text-left md:gap-1\">\n        <span\n          className=\"body-four text-grey-450 dark:text-grey-500\"\n          data-testid={`${dataTestId}-Title`}\n        >\n          {title}\n        </span>\n        {subTitle && (\n          <span\n            className=\"text-black-100 dark:text-white\"\n            data-testid={`${dataTestId}-Subtitle`}\n          >\n            {subTitle}\n          </span>\n        )}\n      </span>\n\n      <Icon\n        name=\"arrow_right\"\n        colorClassName=\"text-black-100 dark:text-yellow\"\n      />\n    </div>\n  </button>\n);\n\nexport default SelectorButton;\n","import { RefObject, useEffect, useRef, useState } from 'react';\n\nconst useVerticalGrabScroll = (\n  containerRef: RefObject<HTMLElement>,\n  containerHeight: number,\n  contentHeight: number,\n  disabled = false\n) => {\n  const [isMouseDown, setIsMouseDown] = useState(false);\n  const mouseScrollPosition = useRef<{ top: number; y: number }>({\n    top: 0,\n    y: 0,\n  });\n\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container?.clientWidth) return;\n\n    if (containerHeight >= contentHeight || disabled) {\n      container.style.cursor = 'inherit';\n      return;\n    }\n\n    if (isMouseDown) {\n      container.style.cursor = 'grabbing';\n      return;\n    }\n\n    container.style.cursor = 'grab';\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [containerHeight, contentHeight, isMouseDown, disabled]);\n\n  useEffect(() => {\n    mouseScrollPosition.current = { top: 0, y: 0 };\n    const container = containerRef.current;\n\n    if (!container) return () => ({});\n    if (disabled) {\n      container.scrollTop = 0;\n\n      return () => ({});\n    }\n\n    const mouseMoveHandler = (e: MouseEvent) => {\n      const dy = e.clientY - mouseScrollPosition.current.y;\n\n      container.scrollTop = mouseScrollPosition.current.top - dy;\n    };\n\n    const mouseUpHandler = () => {\n      document.removeEventListener('mousemove', mouseMoveHandler);\n      document.removeEventListener('mouseup', mouseUpHandler);\n      setIsMouseDown(false);\n    };\n\n    const mouseDownHandler = (e: MouseEvent) => {\n      mouseScrollPosition.current = {\n        top: container.scrollTop,\n        y: e.clientY,\n      };\n      setIsMouseDown(true);\n\n      document.addEventListener('mousemove', mouseMoveHandler);\n      document.addEventListener('mouseup', mouseUpHandler);\n    };\n\n    container.addEventListener('mousedown', mouseDownHandler);\n\n    return () => {\n      container.removeEventListener('mousedown', mouseDownHandler);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [disabled]);\n};\n\nexport default useVerticalGrabScroll;\n","import ScrollProgressEnum from '@models/enums/ScrollProgressEnum';\nimport { useMotionValueEvent, useScroll } from 'framer-motion';\nimport { RefObject, useEffect, useState } from 'react';\n\nconst useVerticalScrollShadows = (\n  containerRef: RefObject<HTMLElement>,\n  containerHeight: number,\n  contentHeight: number,\n  disabled = false\n) => {\n  const { scrollYProgress } = useScroll({\n    container: containerRef,\n  });\n  const [isStart, setIsStart] = useState(true);\n  const [isEnd, setIsEnd] = useState(false);\n  const [scrollProgress, setScrollProgress] = useState(\n    ScrollProgressEnum.Start\n  );\n  const threshold = 0.05;\n\n  useMotionValueEvent(scrollYProgress, 'change', (value: number) => {\n    if (value < threshold) {\n      setScrollProgress(ScrollProgressEnum.Start);\n    }\n\n    if (value >= threshold && value <= 1 - threshold) {\n      setScrollProgress(ScrollProgressEnum.Middle);\n    }\n\n    if (value > 1 - threshold) {\n      setScrollProgress(ScrollProgressEnum.End);\n    }\n  });\n\n  useEffect(() => {\n    if (!containerHeight || disabled) return;\n\n    if (containerHeight >= contentHeight) {\n      setIsStart(true);\n      setIsEnd(true);\n\n      return;\n    }\n\n    if (scrollProgress === ScrollProgressEnum.Start) {\n      setIsStart(true);\n      setIsEnd(false);\n    }\n\n    if (scrollProgress === ScrollProgressEnum.Middle) {\n      setIsStart(false);\n      setIsEnd(false);\n    }\n\n    if (scrollProgress === ScrollProgressEnum.End) {\n      setIsEnd(true);\n    }\n  }, [disabled, scrollProgress, containerHeight, contentHeight]);\n\n  return { isStart, isEnd };\n};\n\nexport default useVerticalScrollShadows;\n","import useResizeObserver from '@utils/hooks/useResizeObserver';\nimport useVerticalGrabScroll from '@utils/hooks/useVerticalGrabScroll';\nimport useVerticalScrollShadows from '@utils/hooks/useVerticalScrollShadows';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport {\n  PropsWithChildren,\n  forwardRef,\n  useImperativeHandle,\n  useRef,\n} from 'react';\n\nexport interface IShadowContainerVerticalRef {\n  readonly scrollTo: (offset: number, behavior?: ScrollBehavior) => void;\n}\n\ninterface Props {\n  readonly className?: string;\n  readonly customScrollbarTheme?: 'light' | 'dark';\n  readonly hideScrollbar?: boolean;\n  readonly shadowColour?: string;\n  readonly disableScroll?: boolean;\n  readonly shadowHeight?: string;\n}\n\nconst ShadowContainerVertical = forwardRef<\n  IShadowContainerVerticalRef,\n  PropsWithChildren<Props>\n>(\n  (\n    {\n      children,\n      className,\n      customScrollbarTheme,\n      disableScroll = false,\n      shadowColour = 'from-white dark:from-black-100',\n      hideScrollbar = true,\n      shadowHeight = 'h-10',\n    },\n    ref\n  ) => {\n    const containerRef = useRef<HTMLDivElement | null>(null);\n    const [containerRefCallback, { height: containerHeight }] =\n      useResizeObserver();\n    const [contentRefCallback, { height: contentHeight }] = useResizeObserver();\n    const { isStart, isEnd } = useVerticalScrollShadows(\n      containerRef,\n      containerHeight,\n      contentHeight,\n      disableScroll\n    );\n    useVerticalGrabScroll(\n      containerRef,\n      containerHeight,\n      contentHeight,\n      disableScroll\n    );\n\n    useImperativeHandle(ref, () => ({\n      scrollTo: (topOffset: number, behavior: ScrollBehavior = 'smooth') => {\n        containerRef.current?.scrollTo({ top: topOffset, behavior });\n      },\n    }));\n\n    return (\n      <div className={classNames(className, 'relative h-full')}>\n        <AnimatePresence>\n          {!isStart && !disableScroll && (\n            <motion.span\n              animate={{ opacity: 1 }}\n              className={classNames(\n                shadowColour,\n                shadowHeight,\n                `pointer-events-none absolute top-0 z-10 w-full bg-gradient-to-b to-transparent`\n              )}\n              exit={{ opacity: 0 }}\n              initial={{ opacity: 0 }}\n              transition={{ duration: 0.25 }}\n            />\n          )}\n        </AnimatePresence>\n\n        <div\n          ref={(node) => {\n            containerRef.current = node;\n            containerRefCallback(node);\n          }}\n          // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n          tabIndex={0}\n          className={classNames(\n            {\n              'scrollbar-hide': hideScrollbar,\n              'overflow-y-hidden': disableScroll,\n              'overflow-y-auto': !disableScroll,\n              'custom-scrollbar': !disableScroll && customScrollbarTheme,\n              'custom-scrollbar--light': customScrollbarTheme === 'light',\n              'custom-scrollbar--dark': customScrollbarTheme === 'dark',\n            },\n            'relative h-full select-none'\n          )}\n        >\n          <div ref={contentRefCallback}>{children}</div>\n        </div>\n\n        <AnimatePresence>\n          {!isEnd && !disableScroll && (\n            <motion.span\n              animate={{ opacity: 1 }}\n              className={classNames(\n                shadowColour || 'from-white dark:from-black-100',\n                shadowHeight,\n                `pointer-events-none absolute bottom-0 z-10 w-full bg-gradient-to-t to-transparent`\n              )}\n              exit={{ opacity: 0 }}\n              initial={{ opacity: 0 }}\n              transition={{ duration: 0.25 }}\n            />\n          )}\n        </AnimatePresence>\n      </div>\n    );\n  }\n);\n\nexport default ShadowContainerVertical;\n","import SizeEnum from '@models/enums/SizeEnum';\nimport TagTypesEnum from '@models/enums/TagTypesEnum';\nimport { 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 disabled?: boolean;\n  readonly editHint?: string;\n  readonly link?: ILink;\n  readonly linkCallback?: () => void;\n  readonly pointerStates?: boolean;\n  readonly size?: Exclude<SizeEnum, SizeEnum.XLarge | SizeEnum.Medium>;\n  readonly tagType?: TagTypesEnum;\n  readonly text?: string;\n  readonly span?: boolean;\n  readonly isLightMode?: boolean;\n  readonly dataTestId?: string;\n}\n\ntype TagProps = Props &\n  DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;\n\nconst Tag = ({\n  children,\n  className,\n  disabled = false,\n  editHint,\n  link,\n  linkCallback,\n  pointerStates = true,\n  size = SizeEnum.Small,\n  span = false,\n  tagType,\n  text,\n  isLightMode,\n  dataTestId,\n  ...buttonProps\n}: PropsWithChildren<TagProps>) => {\n  const tagClasses = classNames(\n    {\n      [`text-black-100 bg-grey-200 ${\n        isLightMode ? '' : 'dark:bg-grey-600 dark:text-white'\n      }`]: tagType === TagTypesEnum.Primary,\n      //\n      [`hover:bg-grey active:text-white active:bg-black-100 ${\n        isLightMode\n          ? ''\n          : 'dark:hover:text-white dark:hover:bg-grey-500 dark:active:text-black-100 dark:active:bg-white'\n      }`]: tagType === TagTypesEnum.Primary && pointerStates,\n      //\n      [`text-white bg-black-100 ${\n        isLightMode ? '' : 'dark:bg-white dark:text-black-100'\n      }`]:\n        tagType === TagTypesEnum.Secondary || tagType === TagTypesEnum.Square,\n      //\n      [`hover:bg-grey hover:text-black-100 active:text-black-100 active:bg-grey-200 ${\n        isLightMode\n          ? ''\n          : 'dark:hover:text-white dark:hover:bg-grey-500 dark:active:text-white dark:active:bg-grey-600'\n      }`]: tagType === TagTypesEnum.Secondary && pointerStates,\n      //\n      [`text-black-100 bg-white ${\n        isLightMode ? '' : 'dark:bg-black-100 dark:text-white'\n      }`]: tagType === TagTypesEnum.Three,\n      //\n      [`hover:bg-grey active:bg-grey-400 ${\n        isLightMode\n          ? ''\n          : 'dark:hover:text-white dark:hover:bg-grey-500 dark:active:text-black-100 dark:active:bg-white'\n      }`]: tagType === TagTypesEnum.Three && pointerStates,\n      //\n      'text-yellow bg-black-100': tagType === TagTypesEnum.Four,\n      //\n      'hover:bg-grey hover:text-black-100 active:text-black-100 active:bg-grey-100':\n        tagType === TagTypesEnum.Four && pointerStates,\n      //\n      'py-2.5 px-5': size === SizeEnum.Large && tagType !== TagTypesEnum.Square,\n      //\n      'px-4 py-1': size === SizeEnum.Small && tagType !== TagTypesEnum.Square,\n      //\n      'pointer-events-none': !pointerStates,\n    },\n    tagType === TagTypesEnum.Square ? 'rounded-[3px]' : 'rounded-full body-two',\n    'select-none',\n    className\n  );\n\n  if (span) {\n    return (\n      <span className={tagClasses} data-testid={dataTestId}>\n        {text}\n      </span>\n    );\n  }\n\n  return link?.url && (link?.name || children) && !disabled ? (\n    <a\n      className={classNames('appearance-none', tagClasses)}\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={tagClasses}\n      disabled={disabled}\n      data-epi-property-name={editHint}\n      data-testid={dataTestId}\n    >\n      {children || text}\n    </button>\n  );\n};\n\nexport default Tag;\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","enum SizeEnum {\n  Small = 'SMALL',\n  Medium = 'MEDIUM',\n  Large = 'LARGE',\n  XLarge = 'XLARGE',\n}\n\nexport default SizeEnum;\n","enum TagTypesEnum {\n  Primary = 'PRIMARY',\n  Secondary = 'SECONDARY',\n  Three = 'THREE',\n  Four = 'FOUR',\n  Square = 'SQUARE',\n}\n\nexport default TagTypesEnum;\n","import { useCallback, useRef, useState } from 'react';\n\nconst useResizeObserver = () => {\n  const observerRef = useRef<ResizeObserver>();\n  const [resizeParameters, setResizeParameters] = useState({\n    width: 0,\n    height: 0,\n    clientWidth: 0,\n    clientHeight: 0,\n    scrollWidth: 0,\n    scrollHeight: 0,\n  });\n\n  const handleResize = useCallback((entries: ResizeObserverEntry[]) => {\n    if (!Array.isArray(entries)) return;\n\n    const entry = entries[0];\n\n    setResizeParameters({\n      width: entry?.contentRect.width ?? 0,\n      height: entry?.contentRect.height ?? 0,\n      clientWidth: entry?.target.clientWidth ?? 0,\n      clientHeight: entry?.target.clientHeight ?? 0,\n      scrollWidth: entry?.target.scrollWidth ?? 0,\n      scrollHeight: entry?.target.scrollHeight ?? 0,\n    });\n  }, []);\n\n  const ref = useCallback(\n    (node: HTMLElement | null) => {\n      if (observerRef.current && !node) {\n        observerRef.current.disconnect();\n        observerRef.current = undefined;\n      }\n\n      if (!observerRef.current && node) {\n        observerRef.current = new ResizeObserver(handleResize);\n        observerRef.current.observe(node);\n      }\n    },\n    [handleResize]\n  );\n\n  return [ref, resizeParameters] as const;\n};\n\nexport default useResizeObserver;\n"],"names":["_ref","children","className","onCloseCallback","React","createElement","motion","div","animate","opacity","exit","initial","role","onClick","oldState","forwardRef","contentRef","setIsOpen","isOpen","showClose","drawerClasses","maxWidthClassName","contentSpacingClassName","contentClassName","isBottomToTopSliding","dataTestId","drawerRef","useRef","drawerContentRef","iframeHeightRef","isInEditor","window","top","self","variants","hidden","y","x","transition","duration","show","handleClose","useImperativeHandle","scrollToTop","current","scrollTo","behavior","useEffect","bodyScrollLock","close","e","key","addEventListener","removeEventListener","editorIFrame","ownerDocument","defaultView","frameElement","style","height","AnimatePresence","Portal","mountId","FocusTrap","focusTrapOptions","preventScroll","ref","Backdrop","stopPropagation","classNames","CloseButton","classes","epiEdit","image","imageClasses","imageRef","lazyLoad","progressiveLoad","sizes","mobileSource","mobile","tabletSource","tablet","desktopSource","desktop","largeDesktopSource","largeDesktop","breakpoint","useBreakpoint","isLoaded","setIsLoaded","useState","url","currentSrc","BreakpointEnum","Small","Medium","Large","XLarge","type","srcSet","_extends","alt","altText","length","draggable","loading","onLoad","src","width","originalUrl","editHint","link","href","Icon","name","colorClassName","title","subTitle","containerRef","containerHeight","contentHeight","disabled","arguments","undefined","isMouseDown","setIsMouseDown","mouseScrollPosition","container","clientWidth","cursor","scrollTop","mouseMoveHandler","dy","clientY","mouseUpHandler","document","mouseDownHandler","scrollYProgress","useScroll","isStart","setIsStart","isEnd","setIsEnd","scrollProgress","setScrollProgress","ScrollProgressEnum","Start","threshold","useMotionValueEvent","value","Middle","End","customScrollbarTheme","disableScroll","shadowColour","hideScrollbar","shadowHeight","containerRefCallback","useResizeObserver","contentRefCallback","useVerticalScrollShadows","useVerticalGrabScroll","topOffset","span","node","tabIndex","linkCallback","pointerStates","size","SizeEnum","tagType","text","isLightMode","buttonProps","tagClasses","TagTypesEnum","Primary","Secondary","Square","Three","Four","target","tooltipText","hasWhatsapp","shareOrigin","isCopySuccessModalOpen","setIsCopySuccessModalOpen","pageUrl","setPageUrl","copyToClipboardAriaLabel","shareToFacebookAriaLabel","shareToXAriaLabel","shareToWhatsappAriaLabel","useAriaLabels","socialShareLinks","facebook","encodeURIComponent","twitter","whatsapp","location","Fragment","async","navigator","clipboard","writeText","error","console","log","copyToClipboard","IconSizeEnum","lg","rel","InfoModal","InfoTypeEnum","Success","isModalOpen","toggleModal","observerRef","resizeParameters","setResizeParameters","clientHeight","scrollWidth","scrollHeight","handleResize","useCallback","entries","Array","isArray","entry","contentRect","disconnect","ResizeObserver","observe"],"sourceRoot":""}