{"version":3,"file":"SiteNotifications-Chunk-fc68b87b67ab4af48126.js","mappings":"iLAcA,MA4BA,EA5BoBA,IAOP,IAPQ,UACnBC,EAAS,UACTC,EAAS,MACTC,EAAQ,QAAO,QACfC,EAAO,KACPC,EAAOC,EAAAA,EAAaC,GAAE,WACtBC,GACMR,EACN,MAAM,oBAAES,IAAwBC,EAAAA,EAAAA,KAQhC,OACEC,MAAAC,cAAA,UACEC,KAAK,SACLX,UAAWY,IAAW,eATL,CACnBC,MAAO,yCACPC,MAAO,iCACPC,IAAK,sCAMgDd,GAAQD,GAC3D,aAAYD,GAAaQ,EACzBS,MAAO,CAAEC,MAAOd,EAAMe,OAAQf,GAC9BD,QAASA,EACT,cAAaI,GACb,C,kHCXN,MAyFA,GAzFkBa,EAAAA,EAAAA,aAChB,CAAArB,EAaEsB,KACG,IAbH,8BACEC,EAA6B,UAC7BC,EAAS,GACTC,EAAE,SACFC,GAAW,EAAK,mBAChBC,GAAqB,EAAI,cACzBC,EAAgB,YAAW,SAC3BC,EAAQ,kBACRC,EAAoB,iBAAgB,YACpCC,EAAW,QACX3B,GACDJ,EAGD,MAAM,cAAEgC,EAAa,kBAAEC,IAAsBvB,EAAAA,EAAAA,KACvCwB,GAAYC,EAAAA,EAAAA,QAA0B,MAO5C,OALAC,EAAAA,EAAAA,qBAAoBd,GAAK,KAAM,CAC7Be,MAAOA,IAAMH,EAAUI,SAASD,QAChCX,WAAYQ,EAAUI,SAASZ,aAI/Bf,MAAAC,cAAA,UACEU,IAAKY,EACLT,GAAI,GACFD,IAAce,EAAAA,EAAwBC,KAAO,UAAY,aACvDf,IACJvB,UAAWY,IACT,4DACAc,EACA,CACE,qBACEJ,IAAce,EAAAA,EAAwBC,OAASd,EACjD,sBACEF,IAAce,EAAAA,EAAwBE,QAAUf,EAClD,kBAAmBA,EACnB,iBAAkBA,EAClB,gFACEC,IAAuBD,EACzB,CAAC,YAAWK,EAAc,GAAK,qBAC7BJ,GAAsBD,IAG5B,aACEF,IAAce,EAAAA,EAAwBC,KAClCP,EACAD,EAENN,SAAUA,EACV,gBAAeA,EACfgB,SAAUhB,GAAY,EAAI,EAC1B,cACEF,IAAce,EAAAA,EAAwBC,KAClC,iBACA,aAENG,UAAYC,IACI,UAAVA,EAAEC,KAAiBzC,IAAUwC,EAAE,EAErCxC,QAASA,KACPA,OACA0C,EAAAA,EAAAA,GAAgB,CACdC,MAAO,WACPC,aAAc,aACdC,UACEzB,IAAce,EAAAA,EAAwBC,KAAO,WAAa,UACzDjB,GACH,GAGJZ,MAAAC,cAACsC,EAAAA,EAAI,CACHC,KAAM,UACJ3B,IAAce,EAAAA,EAAwBC,KAAO,OAAS,SAExDY,eACE1B,EACI,kBAAiBK,EAAc,GAAK,sBACpCD,EAENzB,KAAMwB,IAED,G,gSC5Ff,MA6CA,EA7CiB7B,IAQe,IARd,kBAChBqD,EAAoB,GAAE,SACtBC,EAAQ,UACRpD,EAAS,GACTuB,EAAK,WAAU,MACf8B,EAAQ,GAAE,iBACVC,GAAmB,KAChBC,GACsBzD,EACzB,OAAKsD,EAKH3C,MAAAC,cAAC8C,EAAAA,GAAMC,EAAA,CACLlC,GAAIA,EACJmC,2BAA6BC,IACvBL,GAAyC,IAArBK,EAAOC,YAC7BhB,EAAAA,EAAAA,GAAgB,CACdC,MAAO,WACPC,aAAc,aACdC,UACEY,EAAOE,cAAgBF,EAAOG,YAAc,OAAS,YAE3D,EAEFC,KAAM,CAAEC,SAAS,GACjBhE,UAAWA,EACXiE,WAAY,CACVD,UAAWX,EACXa,OAAQ,YAAYb,IACpBc,OAAQ,YAAYd,KAEtBe,SAAU,CACRJ,SAAS,EACTK,gBAAgB,GAElBC,QAAS,CAAKC,EAAAA,GAAMC,EAAAA,GAAUC,EAAAA,MAAgBtB,IAC1CI,GAEHH,GA9BI,IA+BE,C,6HC7Cb,MA6DA,EA7D6BtD,IAKG,IALF,GAC5ByB,EAAE,iBACFmD,EAAgB,4BAChBC,EAA2B,SAC3BvB,GACyBtD,EACzB,MAAO8E,EAAgBC,IAAqBC,EAAAA,EAAAA,YACtCC,GAAgBC,EAAAA,EAAAA,KAOtB,OALAC,EAAAA,EAAAA,YAAU,KACHL,QAAoCM,IAAlBH,IACvBH,EAAeO,eAAiBJ,EAAa,GAC5C,CAACA,EAAeH,IAGjBnE,MAAAC,cAAA,OAAKV,UAAU,8BACbS,MAAAC,cAAA,OACEV,UAAWY,IAAW,qBAAsB,CAC1CwE,QAASV,GAAoBK,KAG/BtE,MAAAC,cAAC2E,EAAAA,EAAS,CACR/D,UAAWe,EAAAA,EAAwBC,KACnCf,GAAIA,EACJE,oBAAoB,EACpBC,cAAc,UACdE,kBAAmB+C,KAIvBlE,MAAAC,cAAC4E,EAAAA,EAAQ,CACPC,MAAI,EACJvF,UAAU,iBACVqD,MAAO9B,EACPA,GAAIA,EACJ4B,kBAAmB,CAACqC,EAAAA,IACpBC,SAAU,CACRC,MAAO,KAETC,SAAUd,GAETzB,GAGH3C,MAAAC,cAAA,OACEV,UAAWY,IAAW,qBAAsB,CAC1CwE,QAASV,GAAoBK,KAG/BtE,MAAAC,cAAC2E,EAAAA,EAAS,CACR/D,UAAWe,EAAAA,EAAwBE,MACnChB,GAAIA,EACJE,oBAAoB,EACpBC,cAAc,UACdE,kBAAmB+C,KAGnB,C,qPCnDV,MA8KA,EA9K0B7E,IAAkC,IAAjC,kBAAE8F,GAA0B9F,EACrD,MAAO+F,GAAgB3E,OAAQ4E,KAAqBC,EAAAA,EAAAA,KAC9CC,GAAWC,EAAAA,EAAAA,GAAc,KACzBC,GAAWD,EAAAA,EAAAA,GAAc,OACzB,kBAAEE,IAAsBC,EAAAA,EAAAA,IAA2BC,IAAK,CAC5DF,kBAAmBE,EAAMF,uBAErB,2BAAEG,IAA+BC,EAAAA,EAAAA,IAA2BF,IAAK,CACrEC,2BAA4BD,EAAMC,gCAE9B,+BAAEE,EAA8B,2BAAEC,IACtCjG,EAAAA,EAAAA,MACKkG,EAAyBC,IAA8B7B,EAAAA,EAAAA,WAAS,GACjE8B,EACJT,IAAsBU,EAAAA,EAAkBC,MACtCd,GAAYG,IAAsBU,EAAAA,EAAkBE,OAClDC,EAA6BpB,EAAkBqB,OAAS,IAAMf,EAC9DgB,EACJN,GAAoBI,EAEhBG,EAA4BvB,EAAkB,IAAIwB,mBAClDC,EACyB,IAA7BzB,EAAkBqB,QAAgBrB,EAAkB,IAAI0B,oBA+C1D,OA/BArC,EAAAA,EAAAA,YAAU,KACR,MAAMsC,EAAaC,SAASC,eAAe,cACrCC,EAAoBF,SAASC,eAAe,qBAC5CE,EAAoBH,SAASC,eAAe,qBAE9CF,IACFA,EAAWvG,MAAM4G,IAAMV,EACnB,GAAGpB,MACH,IAEF4B,IACFA,EAAkB1G,MAAM4G,IAAMV,EAC1B,GAAGpB,MACH,IAGF6B,IACFA,EAAkB3G,MAAM4G,IAAMZ,EAC1B,GAAGlB,MACH,GACN,GACC,CACDA,EACAkB,EACAE,KAGFjC,EAAAA,EAAAA,YAAU,KACRqB,EAA2BR,EAAgB,GAC1C,CAACA,EAAiBQ,IAGnB7F,MAAAC,cAACmH,EAAAA,EAAe,MACZnB,GAA2Bd,EAAkBqB,OAAS,GACtDxG,MAAAC,cAACoH,EAAAA,EAAOC,IAAG,CACTpF,IAAI,oBACJvB,IAAKyE,EACL7F,UAAWY,IACT,yDACA,CACE,YAA2C,WAA9BuG,EACb,cAA6C,SAA9BA,IAGnB5F,GAAG,oBACH,cAAY,0BACZyG,QAAS,CACPC,EAAG,QACHC,QAAS,GAEXC,QAAS,CACPF,EAAG,KACHC,QAAS,EACTE,WAAY,CACVC,SAAU,GACVC,KAAM,cAGVC,KAAM,CACJrH,OAAQ,MACRgH,QAAS,EACTE,WAAY,CACVC,SAAU,GACVC,KAAM,cAGVE,KAAK,SACL,aAAY/B,GAEZhG,MAAAC,cAAC+H,EAAAA,EAAoB,CACnBlH,GAAG,8BACHmD,iBAAkBkB,EAAkBqB,OAAS,GAE5CrB,EAAkB8C,KAAI,CAACC,EAAcC,KACpC,MAAM,KAAEC,EAAI,KAAEC,GAASH,EAEvB,OACElI,MAAAC,cAACqI,EAAAA,GAAW,CACV/I,UAAU,eACV2C,IAAKgG,EAAaK,gBAElBvI,MAAAC,cAAA,KACEuI,KAAMH,GAAMI,IACZC,OAAQL,GAAMK,OACdnJ,UAAWY,IACT,yEACA,CACE,uBAAwBkI,GAAMI,MAGlC,cAAa,gCAAgCN,IAC7C1I,QAASA,KACP0C,EAAAA,EAAAA,GAAgB,CACdC,MAAO,oBACPuG,UAAWP,KAIfpI,MAAAC,cAAA,OACEV,UAAU,YACV,cAAY,gCAEX6I,EAAK5B,OAAS,IACX,GAAG4B,EAAKQ,UAAU,EAAG,UACrB,GAAGR,KAENC,GAAMI,KAAOJ,GAAM7F,MAClBxC,MAAAC,cAAA,QACEV,UAAU,8BACV,cAAY,qCAEX8I,EAAK7F,QAKF,KAKnBoE,GACC5G,MAAAC,cAAC4I,EAAAA,EAAW,CACVnJ,KAAK,SACLD,QA1IgBqJ,KAC1B,MAAMC,EAAwB5D,EAAkB,GAChD,IAAK4D,EAAuB,OAE5B,MAAMC,EAAmBC,IAAMF,EAAsBG,YAAYC,KAC/DF,MACA,OAEFG,EAAAA,EAAQC,IAAIN,EAAsBR,eAAgB,OAAQ,CACxDe,QAASN,IAEX9C,GAA2B,EAAK,EAgItB3G,UAAU,4CACVD,UAAWyG,EACXlG,WAAW,0CAKH,C,uCC/LjB+B,EAAuB,SAAvBA,GAAuB,OAAvBA,EAAuB,YAAvBA,EAAuB,cAAvBA,CAAuB,EAAvBA,GAAuB,IAK5B,S,uCCLWjC,EAAY,SAAZA,GAAY,OAAZA,EAAY,WAAZA,EAAY,YAAZA,EAAY,UAAZA,EAAY,YAAZA,EAAY,aAAZA,CAAY,EAAZA,GAAY,IAQvB,S,uCCRKyG,EAAiB,SAAjBA,GAAiB,OAAjBA,EAAiB,UAAjBA,EAAiB,gBAAjBA,CAAiB,EAAjBA,GAAiB,IAKtB,S,0DCGO,MAAMmD,EAAiC,CAC5CC,oCAAqC,oCACrCC,oBAAqB,wBACrBC,0BAA2B,+BAC3BC,sBAAuB,gBACvBC,mBAAoB,aACpBC,0BAA2B,qBAC3BC,+BAAgC,mBAChChK,oBAAqB,cACrBiK,yBAA0B,oBAC1BhE,+BAAgC,0BAChCiE,yBAA0B,oBAC1BC,sBAAuB,iBACvBC,wBAAyB,kBACzBC,yBAA0B,mBAC1B9I,cAAe,mBACf+I,yBAA0B,oBAC1BC,+BAAgC,4BAChCC,kBAAmB,YACnBC,yCAA0C,gBAC1CC,oBAAqB,cACrBC,mBAAoB,aACpBnJ,kBAAmB,uBACnBoJ,gBAAiB,SACjBC,yBAA0B,oBAC1BC,yBAA0B,oBAC1BC,kBAAmB,aACnB7E,2BAA4B,4BAC5B8E,kBAAmB,6BACnBC,gBAAiB,UACjBC,iBAAkB,YAQpB,GAL2BC,EAAAA,EAAAA,IAA0B5B,IAAG,CACtD6B,WAAY3B,EACZ4B,cAAgBD,GAA4B7B,EAAI,CAAE6B,kB,mCClCpD,MAQA,GARkCD,E,SAAAA,IAAiC5B,IAAG,CACpE+B,wBAAyB,EACzBC,gBAAiB,EACjBxF,2BAA6BpF,GAC3B4I,EAAI,CAAE+B,wBAAyB3K,IACjC6K,mBAAqB7K,GAAmB4I,EAAI,CAAEgC,gBAAiB5K,O,kDCJjE,MAMA,GANkCwK,E,SAAAA,IAAiC5B,IAAG,CACpE3D,kBAAmBU,EAAAA,EAAkBC,IACrCkF,qBAAuBC,GACrBnC,EAAI,CAAE3D,kBAAmB8F,O,mCCb7B,MAOA,EAPyBC,IACD,oBAAXC,SACTA,OAAOC,UAAYD,OAAOC,WAAa,GACvCD,OAAOC,UAAUC,KAAKH,GACxB,C,6DCAF,MAWA,EAXsB1L,KACpB,MAAOmL,EAAYC,IAAiB9G,EAAAA,EAAAA,UAAsBkF,EAAAA,GACpDsC,GAAsBC,EAAAA,EAAAA,IAAoBlG,GAAUA,EAAMsF,aAMhE,OAJA1G,EAAAA,EAAAA,YAAU,KACR2G,EAAcU,EAAoB,GACjC,CAACA,IAEGX,CAAU,C,kDCVnB,MAkBA,EAlByB3G,KACvB,MAAOD,EAAeyH,IAAoB1H,EAAAA,EAAAA,YAEpC2H,EAAsBA,KAC1BD,EAAiB,iBAAkBL,QAAUO,UAAUC,eAAiB,EAAE,EAW5E,OARA1H,EAAAA,EAAAA,YAAU,KACRwH,IAEAN,OAAOS,iBAAiB,SAAUH,GAE3B,IAAMN,OAAOU,oBAAoB,SAAUJ,KACjD,IAEI1H,CAAa,C,kDCftB,MAwBA,EAxBuB+H,IAKrB,MAAOC,EAAeC,IAAoBlI,EAAAA,EAAAA,YAEpCmI,GAAUC,EAAAA,EAAAA,cAAY,KAC1B,MAAMC,EAAiBhB,OAAOiB,WAAaN,EAC3CE,EAAiBG,EAAe,GAC/B,CAACL,IAWJ,OATA7H,EAAAA,EAAAA,YAAU,KACRkH,OAAOS,iBAAiB,SAAUK,GAClCA,IAEO,KACLd,OAAOU,oBAAoB,SAAUI,EAAQ,IAE9C,CAACA,IAEGF,CAAa,C,kDCrBtB,MA4CA,EA5C0BhH,KACxB,MAAMsH,GAAcpL,EAAAA,EAAAA,WACbqL,EAAkBC,IAAuBzI,EAAAA,EAAAA,UAAS,CACvD7D,MAAO,EACPC,OAAQ,EACRsM,YAAa,EACbC,aAAc,EACdC,YAAa,EACbC,aAAc,IAGVC,GAAeV,EAAAA,EAAAA,cAAaW,IAChC,IAAKC,MAAMC,QAAQF,GAAU,OAE7B,MAAMG,EAAQH,EAAQ,GAEtBN,EAAoB,CAClBtM,MAAO+M,GAAOC,YAAYhN,OAAS,EACnCC,OAAQ8M,GAAOC,YAAY/M,QAAU,EACrCsM,YAAaQ,GAAO7E,OAAOqE,aAAe,EAC1CC,aAAcO,GAAO7E,OAAOsE,cAAgB,EAC5CC,YAAaM,GAAO7E,OAAOuE,aAAe,EAC1CC,aAAcK,GAAO7E,OAAOwE,cAAgB,GAC5C,GACD,IAiBH,MAAO,EAfKT,EAAAA,EAAAA,cACTgB,IACKb,EAAYjL,UAAY8L,IAC1Bb,EAAYjL,QAAQ+L,aACpBd,EAAYjL,aAAU8C,IAGnBmI,EAAYjL,SAAW8L,IAC1Bb,EAAYjL,QAAU,IAAIgM,eAAeR,GACzCP,EAAYjL,QAAQiM,QAAQH,GAC9B,GAEF,CAACN,IAGUN,EAAiB,C","sources":["webpack://nikon-client/./components/atoms/CloseButton/CloseButton.tsx","webpack://nikon-client/./components/atoms/NavButton/NavButton.tsx","webpack://nikon-client/./components/molecules/Carousel/Carousel.tsx","webpack://nikon-client/./components/molecules/NotificationCarousel/NotificationCarousel.tsx","webpack://nikon-client/./components/organisms/SiteNotifications/SiteNotifications.tsx","webpack://nikon-client/./models/enums/HorizontalDirectionEnum.ts","webpack://nikon-client/./models/enums/IconSizeEnum.ts","webpack://nikon-client/./models/enums/StickyNavPositionEnum.ts","webpack://nikon-client/./state-management/AriaLabelsStore.ts","webpack://nikon-client/./state-management/ComponentsHeightsStore.ts","webpack://nikon-client/./state-management/StickyNavStore.ts","webpack://nikon-client/./utility/helpers/gtm.ts","webpack://nikon-client/./utility/hooks/useAriaLabels.ts","webpack://nikon-client/./utility/hooks/useIsTouchDevice.ts","webpack://nikon-client/./utility/hooks/useMediaQuery.ts","webpack://nikon-client/./utility/hooks/useResizeObserver.ts"],"sourcesContent":["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 Icon from '@atoms/Icon/Icon';\nimport HorizontalDirectionEnum from '@models/enums/HorizontalDirectionEnum';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\nimport { forwardRef, KeyboardEvent, useImperativeHandle, useRef } from 'react';\n\ninterface Props {\n  readonly direction:\n    | HorizontalDirectionEnum.Left\n    | HorizontalDirectionEnum.Right;\n  readonly id?: string;\n  readonly disabled?: boolean;\n  readonly hasBackgroundColor?: boolean;\n  readonly sizeClassName?: string;\n  readonly iconSize?: string;\n  readonly enabledArrowColor?: string;\n  readonly onClick?: (e?: KeyboardEvent<HTMLButtonElement>) => void;\n  readonly additionalDataLayerProperties?: Record<string, string>;\n  readonly isLightMode?: boolean;\n}\n\nexport interface NavButtonRef {\n  focus: () => void;\n  disabled: boolean;\n}\n\nconst NavButton = forwardRef<NavButtonRef, Props>(\n  (\n    {\n      additionalDataLayerProperties,\n      direction,\n      id,\n      disabled = false,\n      hasBackgroundColor = true,\n      sizeClassName = 'h-10 w-10',\n      iconSize,\n      enabledArrowColor = 'text-black-100',\n      isLightMode,\n      onClick,\n    },\n    ref\n  ) => {\n    const { nextAriaLabel, previousAriaLabel } = useAriaLabels();\n    const buttonRef = useRef<HTMLButtonElement>(null);\n\n    useImperativeHandle(ref, () => ({\n      focus: () => buttonRef.current?.focus(),\n      disabled: !!buttonRef.current?.disabled,\n    }));\n\n    return (\n      <button\n        ref={buttonRef}\n        id={`${\n          direction === HorizontalDirectionEnum.Left ? 'prevBtn' : 'nextBtn'\n        }-${id}`}\n        className={classNames(\n          'flex select-none items-center justify-center rounded-full',\n          sizeClassName,\n          {\n            'animate-arrow-left':\n              direction === HorizontalDirectionEnum.Left && !disabled,\n            'animate-arrow-right':\n              direction === HorizontalDirectionEnum.Right && !disabled,\n            'cursor-pointer': !disabled,\n            'cursor-default': disabled,\n            'bg-yellow active:bg-yellow-500 xl:hover:bg-yellow-100 xl:active:bg-yellow-500':\n              hasBackgroundColor && !disabled,\n            [`bg-grey ${isLightMode ? '' : 'dark:bg-grey-600'}`]:\n              hasBackgroundColor && disabled,\n          }\n        )}\n        aria-label={\n          direction === HorizontalDirectionEnum.Left\n            ? previousAriaLabel\n            : nextAriaLabel\n        }\n        disabled={disabled}\n        aria-disabled={disabled}\n        tabIndex={disabled ? -1 : 0}\n        data-testid={\n          direction === HorizontalDirectionEnum.Left\n            ? 'previous-slide'\n            : 'next-slide'\n        }\n        onKeyDown={(e) => {\n          if (e.key === 'Enter') onClick?.(e);\n        }}\n        onClick={() => {\n          onClick?.();\n          updateDataLayer({\n            event: 'carousel',\n            content_type: 'tab_change',\n            link_text:\n              direction === HorizontalDirectionEnum.Left ? 'Previous' : 'Next',\n            ...additionalDataLayerProperties,\n          });\n        }}\n      >\n        <Icon\n          name={`arrow_${\n            direction === HorizontalDirectionEnum.Left ? 'left' : 'right'\n          }`}\n          colorClassName={\n            disabled\n              ? `text-grey-400 ${isLightMode ? '' : 'dark:text-grey-700'}`\n              : enabledArrowColor\n          }\n          size={iconSize}\n        />\n      </button>\n    );\n  }\n);\n\nexport default NavButton;\n","import updateDataLayer from '@utils/helpers/gtm';\nimport { PropsWithChildren } from 'react';\nimport { A11y, Keyboard, Navigation } from 'swiper/modules';\nimport { Swiper, SwiperProps } from 'swiper/react';\nimport 'swiper/scss';\nimport 'swiper/scss/a11y';\nimport 'swiper/scss/autoplay';\nimport 'swiper/scss/effect-fade';\nimport 'swiper/scss/keyboard';\nimport { SwiperModule } from 'swiper/types';\n\ninterface Props extends SwiperProps {\n  readonly additionalModules?: SwiperModule[];\n  readonly className?: string;\n  readonly id?: string;\n  readonly navId?: string;\n  readonly analyticsEnabled?: boolean;\n}\n\nconst Carousel = ({\n  additionalModules = [],\n  children,\n  className,\n  id = 'carousel',\n  navId = '',\n  analyticsEnabled = false,\n  ...props\n}: PropsWithChildren<Props>) => {\n  if (!children) {\n    return null;\n  }\n\n  return (\n    <Swiper\n      id={id}\n      onSlideChangeTransitionEnd={(swiper) => {\n        if (analyticsEnabled && swiper.realIndex !== 0) {\n          updateDataLayer({\n            event: 'carousel',\n            content_type: `tab_change`,\n            link_text:\n              swiper.previousIndex < swiper.activeIndex ? 'Next' : 'Previous',\n          });\n        }\n      }}\n      a11y={{ enabled: true }}\n      className={className}\n      navigation={{\n        enabled: !!navId,\n        prevEl: `#prevBtn-${navId}`,\n        nextEl: `#nextBtn-${navId}`,\n      }}\n      keyboard={{\n        enabled: true,\n        onlyInViewport: true,\n      }}\n      modules={[...[A11y, Keyboard, Navigation], ...additionalModules]}\n      {...props}\n    >\n      {children}\n    </Swiper>\n  );\n};\n\nexport default Carousel;\n","import NavButton from '@atoms/NavButton/NavButton';\nimport HorizontalDirectionEnum from '@models/enums/HorizontalDirectionEnum';\nimport Carousel from '@molecules/Carousel/Carousel';\nimport useIsTouchDevice from '@utils/hooks/useIsTouchDevice';\nimport classNames from 'classnames';\nimport { PropsWithChildren, useEffect, useState } from 'react';\nimport { Autoplay } from 'swiper/modules';\nimport { Swiper } from 'swiper/types';\n\ninterface Props {\n  readonly id: string;\n  readonly hasMultipleItems: boolean;\n  readonly enabledNavigationArrowColor?: string;\n}\n\nconst NotificationCarousel = ({\n  id,\n  hasMultipleItems,\n  enabledNavigationArrowColor,\n  children,\n}: PropsWithChildren<Props>) => {\n  const [swiperInstance, setSwiperInstance] = useState<Swiper>();\n  const isTouchDevice = useIsTouchDevice();\n\n  useEffect(() => {\n    if (!swiperInstance || isTouchDevice === undefined) return;\n    swiperInstance.allowTouchMove = isTouchDevice;\n  }, [isTouchDevice, swiperInstance]);\n\n  return (\n    <div className=\"flex min-h-[2.5rem] w-full\">\n      <div\n        className={classNames('ml-7.5 self-center', {\n          hidden: !hasMultipleItems || isTouchDevice,\n        })}\n      >\n        <NavButton\n          direction={HorizontalDirectionEnum.Left}\n          id={id}\n          hasBackgroundColor={false}\n          sizeClassName=\"h-6 w-6\"\n          enabledArrowColor={enabledNavigationArrowColor}\n        />\n      </div>\n\n      <Carousel\n        loop\n        className=\"w-full min-w-0\"\n        navId={id}\n        id={id}\n        additionalModules={[Autoplay]}\n        autoplay={{\n          delay: 5000,\n        }}\n        onSwiper={setSwiperInstance}\n      >\n        {children}\n      </Carousel>\n\n      <div\n        className={classNames('mr-7.5 self-center', {\n          hidden: !hasMultipleItems || isTouchDevice,\n        })}\n      >\n        <NavButton\n          direction={HorizontalDirectionEnum.Right}\n          id={id}\n          hasBackgroundColor={false}\n          sizeClassName=\"h-6 w-6\"\n          enabledArrowColor={enabledNavigationArrowColor}\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default NotificationCarousel;\n","import CloseButton from '@atoms/CloseButton/CloseButton';\nimport { ISiteNotification } from '@models/ISiteNotification';\nimport StickyNavPosition from '@models/enums/StickyNavPositionEnum';\nimport NotificationCarousel from '@molecules/NotificationCarousel/NotificationCarousel';\nimport useComponentsHeightsStore from '@state/ComponentsHeightsStore';\nimport useStickyNavPositionStore from '@state/StickyNavStore';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport useResizeObserver from '@utils/hooks/useResizeObserver';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport Cookies from 'js-cookie';\nimport { useEffect, useState } from 'react';\nimport { SwiperSlide } from 'swiper/react';\n\ninterface Props {\n  readonly siteNotifications: ISiteNotification[];\n}\n\nconst SiteNotifications = ({ siteNotifications }: Props) => {\n  const [containerRef, { height: containerHeight }] = useResizeObserver();\n  const isMobile = useMediaQuery(768);\n  const isTablet = useMediaQuery(1024);\n  const { stickyNavPosition } = useStickyNavPositionStore((state) => ({\n    stickyNavPosition: state.stickyNavPosition,\n  }));\n  const { setSiteNotificationsHeight } = useComponentsHeightsStore((state) => ({\n    setSiteNotificationsHeight: state.setSiteNotificationsHeight,\n  }));\n  const { closeSiteNotificationAriaLabel, siteNotificationsAriaLabel } =\n    useAriaLabels();\n  const [isNotificationDismissed, setIsNotificationDismissed] = useState(false);\n  const isStickyNavOnTop =\n    stickyNavPosition === StickyNavPosition.Top ||\n    (!isMobile && stickyNavPosition === StickyNavPosition.Bottom);\n  const hasStickySiteNotifications = siteNotifications.length > 0 && !isTablet;\n  const shouldUpdateStickyNavsPositions =\n    isStickyNavOnTop && hasStickySiteNotifications;\n\n  const notificationsBannerColour = siteNotifications[0]?.notificationColour;\n  const hasDismissButton =\n    siteNotifications.length === 1 && siteNotifications[0]?.notificationDismiss;\n\n  const dismissNotification = () => {\n    const dismissedNotification = siteNotifications[0];\n    if (!dismissedNotification) return;\n\n    const cookieExpiryDate = dayjs(dismissedNotification.expiryDate).diff(\n      dayjs(),\n      'day'\n    );\n    Cookies.set(dismissedNotification.notificationId, 'true', {\n      expires: cookieExpiryDate,\n    });\n    setIsNotificationDismissed(true);\n  };\n\n  useEffect(() => {\n    const anchorMenu = document.getElementById('AnchorMenu');\n    const productNavigation = document.getElementById('ProductNavigation');\n    const sectionNavigation = document.getElementById('SectionNavigation');\n\n    if (anchorMenu)\n      anchorMenu.style.top = shouldUpdateStickyNavsPositions\n        ? `${containerHeight}px`\n        : '';\n\n    if (productNavigation) {\n      productNavigation.style.top = shouldUpdateStickyNavsPositions\n        ? `${containerHeight}px`\n        : '';\n    }\n\n    if (sectionNavigation) {\n      sectionNavigation.style.top = hasStickySiteNotifications\n        ? `${containerHeight}px`\n        : '';\n    }\n  }, [\n    containerHeight,\n    hasStickySiteNotifications,\n    shouldUpdateStickyNavsPositions,\n  ]);\n\n  useEffect(() => {\n    setSiteNotificationsHeight(containerHeight);\n  }, [containerHeight, setSiteNotificationsHeight]);\n\n  return (\n    <AnimatePresence>\n      {!isNotificationDismissed && siteNotifications.length > 0 && (\n        <motion.div\n          key=\"siteNotifications\"\n          ref={containerRef}\n          className={classNames(\n            'relative z-100 flex w-full items-center text-black-100',\n            {\n              'bg-yellow': notificationsBannerColour === 'yellow',\n              'bg-grey-100': notificationsBannerColour === 'grey',\n            }\n          )}\n          id=\"SiteNotifications\"\n          data-testid=\"CT-03-Site-Notification\"\n          initial={{\n            y: '-100%',\n            opacity: 0,\n          }}\n          animate={{\n            y: '0%',\n            opacity: 1,\n            transition: {\n              duration: 0.8,\n              ease: 'easeInOut',\n            },\n          }}\n          exit={{\n            height: '0px',\n            opacity: 0,\n            transition: {\n              duration: 0.8,\n              ease: 'easeInOut',\n            },\n          }}\n          role=\"region\"\n          aria-label={siteNotificationsAriaLabel}\n        >\n          <NotificationCarousel\n            id=\"site-notifications-carousel\"\n            hasMultipleItems={siteNotifications.length > 1}\n          >\n            {siteNotifications.map((notification, index) => {\n              const { text, link } = notification;\n\n              return (\n                <SwiperSlide\n                  className=\"stretch-card\"\n                  key={notification.notificationId}\n                >\n                  <a\n                    href={link?.url}\n                    target={link?.target}\n                    className={classNames(\n                      'flex h-full items-center justify-center px-[4.625rem] py-2 text-center',\n                      {\n                        'pointer-events-none': !link?.url,\n                      }\n                    )}\n                    data-testid={`CT-03-Site-Notification-Item-${index}`}\n                    onClick={() =>\n                      updateDataLayer({\n                        event: 'promotionalBanner',\n                        promotion: text,\n                      })\n                    }\n                  >\n                    <div\n                      className=\"body-four\"\n                      data-testid=\"CT-03-Site-Notification-Text\"\n                    >\n                      {text.length > 100\n                        ? `${text.substring(0, 100)}...`\n                        : `${text} `}\n\n                      {link?.url && link?.name && (\n                        <span\n                          className=\"whitespace-nowrap underline\"\n                          data-testid=\"CT-03-Site-Notification-Link-Name\"\n                        >\n                          {link.name}\n                        </span>\n                      )}\n                    </div>\n                  </a>\n                </SwiperSlide>\n              );\n            })}\n          </NotificationCarousel>\n\n          {hasDismissButton && (\n            <CloseButton\n              size=\"1.5rem\"\n              onClick={dismissNotification}\n              className=\"absolute right-1 z-10 lg:right-[1.625rem]\"\n              ariaLabel={closeSiteNotificationAriaLabel}\n              dataTestId=\"CT-03-Site-Notification-Close-Button\"\n            />\n          )}\n        </motion.div>\n      )}\n    </AnimatePresence>\n  );\n};\n\nexport default SiteNotifications;\n","enum HorizontalDirectionEnum {\n  Left = 'LEFT',\n  Right = 'RIGHT',\n}\n\nexport default HorizontalDirectionEnum;\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 StickyNavPosition {\n  Top = 'top',\n  Bottom = 'bottom',\n}\n\nexport default StickyNavPosition;\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","import create from 'zustand';\n\ninterface IComponentsHeightsState {\n  readonly siteNotificationsHeight: number;\n  readonly USPsStripHeight: number;\n  readonly setSiteNotificationsHeight: (height: number) => void;\n  readonly setUSPsStripHeight: (height: number) => void;\n}\n\nconst useComponentsHeightsStore = create<IComponentsHeightsState>((set) => ({\n  siteNotificationsHeight: 0,\n  USPsStripHeight: 0,\n  setSiteNotificationsHeight: (height: number) =>\n    set({ siteNotificationsHeight: height }),\n  setUSPsStripHeight: (height: number) => set({ USPsStripHeight: height }),\n}));\n\nexport default useComponentsHeightsStore;\n","import StickyNavPosition from '@models/enums/StickyNavPositionEnum';\nimport create from 'zustand';\n\ntype StickyNavPositions = StickyNavPosition.Top | StickyNavPosition.Bottom;\n\ninterface IStickyNavPositionState {\n  readonly stickyNavPosition: StickyNavPosition;\n  readonly setStickyNavPosition: (navPosition: StickyNavPositions) => void;\n}\n\nconst useStickyNavPositionStore = create<IStickyNavPositionState>((set) => ({\n  stickyNavPosition: StickyNavPosition.Top,\n  setStickyNavPosition: (navPosition: StickyNavPositions) =>\n    set({ stickyNavPosition: navPosition }),\n}));\n\nexport default useStickyNavPositionStore;\n","const updateDataLayer = (eventPayload: Record<string, unknown>) => {\n  if (typeof window !== 'undefined') {\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push(eventPayload);\n  }\n};\n\nexport default updateDataLayer;\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 { useEffect, useState } from 'react';\n\nconst useIsTouchDevice = () => {\n  const [isTouchDevice, setIsTouchDevice] = useState<boolean>();\n\n  const handleIsTouchDevice = (): void => {\n    setIsTouchDevice('ontouchstart' in window || navigator.maxTouchPoints > 0);\n  };\n\n  useEffect(() => {\n    handleIsTouchDevice();\n\n    window.addEventListener('resize', handleIsTouchDevice);\n\n    return () => window.removeEventListener('resize', handleIsTouchDevice);\n  }, []);\n\n  return isTouchDevice;\n};\n\nexport default useIsTouchDevice;\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","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","ariaLabel","className","color","onClick","size","IconSizeEnum","lg","dataTestId","closeModalAriaLabel","useAriaLabels","React","createElement","type","classNames","black","white","red","style","width","height","forwardRef","ref","additionalDataLayerProperties","direction","id","disabled","hasBackgroundColor","sizeClassName","iconSize","enabledArrowColor","isLightMode","nextAriaLabel","previousAriaLabel","buttonRef","useRef","useImperativeHandle","focus","current","HorizontalDirectionEnum","Left","Right","tabIndex","onKeyDown","e","key","updateDataLayer","event","content_type","link_text","Icon","name","colorClassName","additionalModules","children","navId","analyticsEnabled","props","Swiper","_extends","onSlideChangeTransitionEnd","swiper","realIndex","previousIndex","activeIndex","a11y","enabled","navigation","prevEl","nextEl","keyboard","onlyInViewport","modules","A11y","Keyboard","Navigation","hasMultipleItems","enabledNavigationArrowColor","swiperInstance","setSwiperInstance","useState","isTouchDevice","useIsTouchDevice","useEffect","undefined","allowTouchMove","hidden","NavButton","Carousel","loop","Autoplay","autoplay","delay","onSwiper","siteNotifications","containerRef","containerHeight","useResizeObserver","isMobile","useMediaQuery","isTablet","stickyNavPosition","useStickyNavPositionStore","state","setSiteNotificationsHeight","useComponentsHeightsStore","closeSiteNotificationAriaLabel","siteNotificationsAriaLabel","isNotificationDismissed","setIsNotificationDismissed","isStickyNavOnTop","StickyNavPosition","Top","Bottom","hasStickySiteNotifications","length","shouldUpdateStickyNavsPositions","notificationsBannerColour","notificationColour","hasDismissButton","notificationDismiss","anchorMenu","document","getElementById","productNavigation","sectionNavigation","top","AnimatePresence","motion","div","initial","y","opacity","animate","transition","duration","ease","exit","role","NotificationCarousel","map","notification","index","text","link","SwiperSlide","notificationId","href","url","target","promotion","substring","CloseButton","dismissNotification","dismissedNotification","cookieExpiryDate","dayjs","expiryDate","diff","Cookies","set","expires","initialAriaLabels","backToFirstLevelNavigationAriaLabel","breadcrumbAriaLabel","breadcrumbFooterAriaLabel","clearFiltersAriaLabel","closeMenuAriaLabel","closeAddressListAriaLabel","closeMobileNavigationAriaLabel","closeSignUpFormAriaLabel","copyToClipboardAriaLabel","editOrDeleteAriaLabel","mainNavigationAriaLabel","moreInformationAriaLabel","openAddressListAriaLabel","openImageInFullScreenAriaLabel","openMenuAriaLabel","overlayToCloseDesktopNavigationAriaLabel","pauseVideoAriaLabel","playVideoAriaLabel","searchAriaLabel","shareToFacebookAriaLabel","shareToWhatsappAriaLabel","shareToXAriaLabel","uspStripAriaLabel","zoomInAriaLabel","zoomOutAriaLabel","create","ariaLabels","setAriaLabels","siteNotificationsHeight","USPsStripHeight","setUSPsStripHeight","setStickyNavPosition","navPosition","eventPayload","window","dataLayer","push","ariaLabelsFromStore","useAriaLabelsStore","setIsTouchDevice","handleIsTouchDevice","navigator","maxTouchPoints","addEventListener","removeEventListener","minWidth","isSmallerThan","setIsSmallerThan","handler","useCallback","isDesiredWidth","innerWidth","observerRef","resizeParameters","setResizeParameters","clientWidth","clientHeight","scrollWidth","scrollHeight","handleResize","entries","Array","isArray","entry","contentRect","node","disconnect","ResizeObserver","observe"],"sourceRoot":""}